Merge latest main-branch changes

Change-Id: Ie6e7295fc5ace81c08ebd4eb052a31a8b3b24ec8
Reviewed-on: https://chromium-review.googlesource.com/c/external/github.com/WebKit/JetStream/+/7006093
Reviewed-by: Olivier Flückiger <[email protected]>
Reviewed-by: Marja Hölttä <[email protected]>
diff --git a/JetStreamDriver.js b/JetStreamDriver.js
index 26f500a..472e0fe 100644
--- a/JetStreamDriver.js
+++ b/JetStreamDriver.js
@@ -42,8 +42,8 @@
 }
 
 function getIterationCount(plan) {
-    if (JetStreamParams.testIterationCountMap.has(plan.name))
-        return JetStreamParams.testIterationCountMap.get(plan.name);
+    if (plan.name in JetStreamParams.testIterationCountMap)
+        return JetStreamParams.testIterationCountMap[plan.name];
     if (JetStreamParams.testIterationCount)
         return JetStreamParams.testIterationCount;
     if (plan.iterations)
@@ -52,8 +52,8 @@
 }
 
 function getWorstCaseCount(plan) {
-    if (JetStreamParams.testWorstCaseCountMap.has(plan.name))
-        return JetStreamParams.testWorstCaseCountMap.get(plan.name);
+    if (plan.name in JetStreamParams.testWorstCaseCountMap)
+        return JetStreamParams.testWorstCaseCountMap[plan.name];
     if (JetStreamParams.testWorstCaseCount)
         return JetStreamParams.testWorstCaseCount;
     if (plan.worstCaseCount !== undefined)
@@ -316,40 +316,10 @@
         }
     }
 
-    prepareToRun() {
-        this.benchmarks.sort((a, b) => a.plan.name.toLowerCase() < b.plan.name.toLowerCase() ? 1 : -1);
-
-        if (!isInBrowser)
-            return;
-
+    prepareBrowserUI() {
         let text = "";
-        for (const benchmark of this.benchmarks) {
-            const scoreDescription = Object.keys(benchmark.allScores());
-            const timeDescription = Object.keys(benchmark.allTimes());
-
-            const scoreIds = benchmark.allScoreIdentifiers();
-            const overallScoreId = scoreIds.pop();
-            const timeIds = benchmark.allTimeIdentifiers();
-
-            text +=
-                `<div class="benchmark" id="benchmark-${benchmark.name}">
-                <h3 class="benchmark-name">${benchmark.name} <a class="info" href="in-depth.html#${benchmark.name}">i</a></h3>
-                <h4 class="score" id="${overallScoreId}">&nbsp;</h4>
-                <h4 class="plot" id="plot-${benchmark.name}">&nbsp;</h4>
-                <p>`;
-            for (let i = 0; i < scoreIds.length; i++) {
-                const scoreId = scoreIds[i];
-                const label = scoreDescription[i];
-                text += `<span class="result score"><span id="${scoreId}">&nbsp;</span><label>${label}</label></span>`
-            }
-            text += "<br/>";
-            for (let i = 0; i < timeIds.length; i++) {
-                const timeId = timeIds[i];
-                const label = timeDescription[i];
-                text += `<span class="result detail"><span id="${timeId}">&nbsp;</span><label>${label}</label></span>`
-            }
-            text += `</p></div>`;
-        }
+        for (const benchmark of this.benchmarks)
+            text += benchmark.renderHTML();
 
         const timestamp = performance.now();
         document.getElementById('jetstreams').style.backgroundImage = `url('jetstreams.svg?${timestamp}')`;
@@ -390,7 +360,9 @@
         if (isInBrowser)
             window.addEventListener("error", (e) => this.pushError("driver startup", e.error));
         await this.prefetchResources();
-        this.prepareToRun();
+        this.benchmarks.sort((a, b) => a.plan.name.toLowerCase() < b.plan.name.toLowerCase() ? 1 : -1);
+        if (isInBrowser)
+            this.prepareBrowserUI();
         this.isReady = true;
         if (isInBrowser) {
             globalThis.dispatchEvent(new Event("JetStreamReady"));
@@ -824,6 +796,33 @@
         return code;
     }
 
+    renderHTML() {
+        const scoreDescription = Object.keys(this.allScores());
+        const timeDescription = Object.keys(this.allTimes());
+
+        const scoreIds = this.allScoreIdentifiers();
+        const overallScoreId = scoreIds.pop();
+        const timeIds = this.allTimeIdentifiers();
+        let text = `<div class="benchmark" id="benchmark-${this.name}">
+            <h3 class="benchmark-name">${this.name} <a class="info" href="in-depth.html#${this.name}">i</a></h3>
+            <h4 class="score" id="${overallScoreId}">&nbsp;</h4>
+            <h4 class="plot" id="plot-${this.name}">&nbsp;</h4>
+            <p>`;
+        for (let i = 0; i < scoreIds.length; i++) {
+            const scoreId = scoreIds[i];
+            const label = scoreDescription[i];
+            text += `<span class="result"><span id="${scoreId}">&nbsp;</span><label>${label}</label></span>`;
+        }
+        text += "<br/>";
+        for (let i = 0; i < timeIds.length; i++) {
+            const timeId = timeIds[i];
+            const label = timeDescription[i];
+            text += `<span class="result detail"><span id="${timeId}">&nbsp;</span><label>${label}</label></span>`;
+        }
+        text += `</p></div>`;
+        return text;
+    }
+
     async run() {
         if (this.isDone)
             throw new Error(`Cannot run Benchmark ${this.name} twice`);
@@ -1082,11 +1081,15 @@
 
     updateUIBeforeRun() {
         if (!JetStreamParams.dumpJSONResults)
-            console.log(`Running ${this.name}:`);
+            this.updateConsoleBeforeRun();
         if (isInBrowser)
             this.updateUIBeforeRunInBrowser();
     }
 
+    updateConsoleBeforeRun() {
+        console.log(`Running ${this.name}:`);
+    }
+
     updateUIBeforeRunInBrowser() {
         const resultsBenchmarkUI = document.getElementById(`benchmark-${this.name}`);
         resultsBenchmarkUI.classList.add("benchmark-running");
@@ -1197,6 +1200,26 @@
         for (const benchmark of this.benchmarks)
             benchmark.prefetchResourcesForShell();
     }
+    
+    renderHTML() {
+        let text = super.renderHTML();
+        if (JetStreamParams.groupDetails) {
+            for (const benchmark of this.benchmarks)
+                text += benchmark.renderHTML();
+        }
+        return text;
+    }
+
+    updateConsoleBeforeRun() {
+        if (!JetStreamParams.groupDetails)
+            super.updateConsoleBeforeRun();
+    }
+    
+    updateConsoleAfterRun(scoreEntries) {
+        if (JetStreamParams.groupDetails)
+            super.updateConsoleBeforeRun();
+        super.updateConsoleAfterRun(scoreEntries);
+    }
 
     get files() {
         let files = [];
@@ -1213,8 +1236,13 @@
         let benchmark;
         try {
             this._state = BenchmarkState.RUNNING;
-            for (benchmark of this.benchmarks)
+            for (benchmark of this.benchmarks) {
+                if (JetStreamParams.groupDetails)
+                    benchmark.updateUIBeforeRun();
                 await benchmark.run();
+                if (JetStreamParams.groupDetails)
+                    benchmark.updateUIAfterRun();
+            }
         } catch (e) {
             this._state = BenchmarkState.ERROR;
             console.log(`Error in runCode of grouped benchmark ${benchmark.name}: `, e);
@@ -1940,6 +1968,16 @@
         exposeBrowserTest: true,
         tags: ["Default", "RexBench"],
     }),
+    new DefaultBenchmark({
+        name: "validatorjs",
+        files: [
+            // Use the unminified version for easier local profiling.
+            // "./validatorjs/dist/bundle.es6.js",
+            "./validatorjs/dist/bundle.es6.min.js",
+            "./validatorjs/benchmark.js",
+        ],
+        tags: ["Default", "regexp"],
+    }),
     // Simple
     new DefaultBenchmark({
         name: "hash-map",
@@ -2702,6 +2740,47 @@
 ];
 
 
+const PRISM_JS_FILES = [
+    "./startup-helper/StartupBenchmark.js",
+    "./prismjs/benchmark.js",
+];
+const PRISM_JS_PRELOADS = {
+    SAMPLE_CPP: "./prismjs/data/sample.cpp",
+    SAMPLE_CSS: "./prismjs/data/sample.css",
+    SAMPLE_HTML: "./prismjs/data/sample.html",
+    SAMPLE_JS: "./prismjs/data/sample.js",
+    SAMPLE_JSON: "./prismjs/data/sample.json",
+    SAMPLE_MD: "./prismjs/data/sample.md",
+    SAMPLE_PY: "./prismjs/data/sample.py",
+    SAMPLE_SQL: "./prismjs/data/sample.sql",
+    SAMPLE_TS: "./prismjs/data/sample.TS",
+};
+const PRISM_JS_TAGS = ["parser", "regexp", "startup", "prismjs"];
+BENCHMARKS.push(
+    new AsyncBenchmark({
+        name: "prismjs-startup-es6",
+        files: PRISM_JS_FILES,
+        preload: {
+            // Use non-minified bundle for better local profiling.
+            // BUNDLE: "./prismjs/dist/bundle.es6.js",
+            BUNDLE: "./prismjs/dist/bundle.es6.min.js",
+            ...PRISM_JS_PRELOADS,
+        },
+        tags: ["Default", ...PRISM_JS_TAGS, "es6"],
+    }),
+    new AsyncBenchmark({
+        name: "prismjs-startup-es5",
+        files: PRISM_JS_FILES,
+        preload: {
+            // Use non-minified bundle for better local profiling.
+            // BUNDLE: "./prismjs/dist/bundle.es5.js",
+            BUNDLE: "./prismjs/dist/bundle.es5.min.js",
+            ...PRISM_JS_PRELOADS,
+        },
+        tags: [...PRISM_JS_TAGS, "es5"],
+    }),
+);
+
 const INTL_TESTS = [
     "DateTimeFormat",
     "ListFormat",
diff --git a/cli.js b/cli.js
index 6c0ccb6..98afc46 100644
--- a/cli.js
+++ b/cli.js
@@ -30,11 +30,11 @@
   help: { help: "Print this help message.", param: "help" },
   "iteration-count": {
     help: "Set the default iteration count.",
-    param: "testIterationCount",
+    param: "iterationCount",
   },
   "worst-case-count": {
     help: "Set the default worst-case count.",
-    param: "testWorstCaseCount",
+    param: "worstCaseCount",
   },
   "dump-json-results": {
     help: "Print summary json to the console.",
@@ -52,6 +52,10 @@
     help: "Do not prefetch resources. Will add network overhead to measurements!",
     param: "prefetchResources",
   },
+  "group-details": {
+    help: "Display detailed group items",
+    param: "groupDetails",
+  },
   test: {
     help: "Run a specific test or comma-separated list of tests.",
     param: "test",
@@ -121,7 +125,8 @@
 
 async function runJetStream() {
     if (!JetStreamParams.isDefault) {
-        console.warn(`Using non standard params: ${JSON.stringify(JetStreamParams, null, 2)}`)
+        const paramsDiff = JetStreamParams.nonDefaultParams;
+        console.warn(`Using non standard params: ${JSON.stringify(paramsDiff, null, 2)}`)
     }
     try {
         await JetStream.initialize();
diff --git a/intl/benchmark.js b/intl/benchmark.js
index 8c83595..a4e33a7 100644
--- a/intl/benchmark.js
+++ b/intl/benchmark.js
@@ -52,4 +52,4 @@
       `Invalid totalLength = ${this.totalLength}, expected >= ${expectedMinTotalLength}`
     );
   }
-}
+}
\ No newline at end of file
diff --git a/params.js b/params.js
index 37c22a6..d002efc 100644
--- a/params.js
+++ b/params.js
@@ -25,6 +25,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+const defaultEmptyMap = Object.freeze({});
 
 class Params {
     // Enable a detailed developer menu to change the current Params.
@@ -38,10 +39,17 @@
     testWorstCaseCount = undefined;
     prefetchResources = true;
 
+    // Display group details.
+    groupDetails = false
+
     RAMification = false;
     dumpJSONResults = false;
-    testIterationCountMap = new Map();
-    testWorstCaseCountMap = new Map();
+    dumpTestList = false;
+    // Override iteration and worst-case counts per workload.
+    // Example:
+    //   testIterationCountMap = { "acorn-wtb": 5 };
+    testIterationCountMap = defaultEmptyMap;
+    testWorstCaseCountMap = defaultEmptyMap;
 
     customPreIterationCode = undefined;
     customPostIterationCode = undefined;
@@ -56,20 +64,22 @@
     _copyFromSearchParams(sourceParams) {
         this.startAutomatically = this._parseBooleanParam(sourceParams, "startAutomatically");
         this.developerMode = this._parseBooleanParam(sourceParams, "developerMode");
-        this.shouldReport = this._parseBooleanParam(sourceParams, "report");
+        this.shouldReport = this._parseBooleanParam(sourceParams, "shouldReport");
         this.prefetchResources = this._parseBooleanParam(sourceParams, "prefetchResources");
         this.RAMification = this._parseBooleanParam(sourceParams, "RAMification");
         this.dumpJSONResults = this._parseBooleanParam(sourceParams, "dumpJSONResults");
+        this.groupDetails = this._parseBooleanParam(sourceParams, "groupDetails");
+        this.dumpTestList = this._parseBooleanParam(sourceParams, "dumpTestList");
 
         this.customPreIterationCode = this._parseStringParam(sourceParams, "customPreIterationCode");
         this.customPostIterationCode = this._parseStringParam(sourceParams, "customPostIterationCode");
 
-         this.startDelay = this._parseIntParam(sourceParams, "startDelay", 0);
+        this.startDelay = this._parseIntParam(sourceParams, "startDelay", 0);
         if (this.shouldReport && !this.startDelay)
             this.startDelay = 4000;
 
         for (const paramKey of ["tag", "tags", "test", "tests"])
-          this.testList = this._parseTestListParam(sourceParams, paramKey);
+            this.testList = this._parseTestListParam(sourceParams, paramKey);
 
         this.testIterationCount = this._parseIntParam(sourceParams, "iterationCount", 1);
         this.testWorstCaseCount = this._parseIntParam(sourceParams, "worstCaseCount", 1);
@@ -81,13 +91,13 @@
 
     _parseTestListParam(sourceParams, key) {
         if (!sourceParams.has(key))
-          return this.testList;
+            return this.testList;
         let testList = [];
         if (sourceParams?.getAll) {
-          testList = sourceParams?.getAll(key);
+            testList = sourceParams?.getAll(key);
         } else {
-          // fallback for cli sourceParams which is just a Map;
-          testList = sourceParams.get(key).split(",");
+            // fallback for cli sourceParams which is just a Map;
+            testList = sourceParams.get(key).split(",");
         }
         sourceParams.delete(key);
         if (this.testList.length > 0 && testList.length > 0)
@@ -132,6 +142,16 @@
     get isDefault() {
       return this === DefaultJetStreamParams;
     }
+
+    get nonDefaultParams() {
+        const diff = Object.create(null);
+        for (const [key, value] of Object.entries(this)) {
+            if (value !== DefaultJetStreamParams[key]) {
+                diff[key] = value;
+            }
+        }
+        return diff;
+    }
 }
 
 const DefaultJetStreamParams = new Params();
diff --git a/prismjs/README.md b/prismjs/README.md
new file mode 100644
index 0000000..2136bbd
--- /dev/null
+++ b/prismjs/README.md
@@ -0,0 +1,12 @@
+# prism.js test for JetStream
+
+Measures the performance of the prism.js library by parsing and formatting sample files.
+
+## Build Instructions
+
+```bash
+# install required node packages.
+npm ci
+# build the workload, output is ./dist
+npm run build
+```
diff --git a/prismjs/benchmark-node.mjs b/prismjs/benchmark-node.mjs
new file mode 100644
index 0000000..dea66a4
--- /dev/null
+++ b/prismjs/benchmark-node.mjs
@@ -0,0 +1,38 @@
+import fs from "fs";
+import path from "path";
+import { fileURLToPath } from "url";
+import { runTest } from "./src/test.mjs";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+
+const samples = [
+  { file: "data/sample.html", lang: "markup" },
+  { file: "data/sample.js", lang: "javascript" },
+  { file: "data/sample.css", lang: "css" },
+  { file: "data/sample.cpp", lang: "cpp" },
+  { file: "data/sample.md", lang: "markdown" },
+  { file: "data/sample.json", lang: "json" },
+  { file: "data/sample.sql", lang: "sql" },
+  { file: "data/sample.py", lang: "python" },
+  { file: "data/sample.ts", lang: "typescript" },
+];
+
+const samplesWithContent = samples.map((sample) => {
+  const content = fs.readFileSync(path.join(__dirname, sample.file), "utf8");
+  return { ...sample, content };
+});
+
+const startTime = process.hrtime.bigint();
+const results = runTest(samplesWithContent);
+const endTime = process.hrtime.bigint();
+
+const duration = Number(endTime - startTime) / 1e6; // milliseconds
+
+for (const result of results) {
+  console.log(`Output size: ${result.html.length} characters`);
+}
+
+console.log(
+  `\nTotal highlighting time for all files: ${duration.toFixed(2)}ms`
+);
diff --git a/prismjs/benchmark.js b/prismjs/benchmark.js
new file mode 100644
index 0000000..5b2e9bd
--- /dev/null
+++ b/prismjs/benchmark.js
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2025 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+const EXPECTED_ASSERTION_COUNT = 1213680;
+
+class Benchmark extends StartupBenchmark {
+  lastResult;
+  totalHash = 0xdeadbeef;
+  samples = [];
+
+  constructor({iterationCount}) {
+    super({
+      iterationCount,
+      expectedCacheCommentCount: 71,
+      sourceCodeReuseCount: 1,
+    });
+  }
+
+  async init() {
+    await Promise.all([
+      super.init(),
+      this.loadData("cpp", JetStream.preload.SAMPLE_CPP, -1086372285),
+      this.loadData("css", JetStream.preload.SAMPLE_CSS, 1173668337),
+      this.loadData("markup", JetStream.preload.SAMPLE_HTML, -270772291),
+      this.loadData("js", JetStream.preload.SAMPLE_JS, -838545229),
+      this.loadData("markdown", JetStream.preload.SAMPLE_MD, 5859883),
+      this.loadData("sql", JetStream.preload.SAMPLE_SQL, 5859941),
+      this.loadData("json", JetStream.preload.SAMPLE_JSON, 5859883),
+      this.loadData("typescript", JetStream.preload.SAMPLE_TS, 133251625),
+    ]);
+  }
+
+  async loadData(lang, file, hash) {
+    const sample = { lang, hash };
+    // Push eagerly to have deterministic order.
+    this.samples.push(sample);
+    sample.content = await JetStream.getString(file);
+    // Warm up quickHash and force good string representation.
+    this.quickHash(sample.content);
+    console.assert(sample.content.length > 0);
+  }
+
+  runIteration(iteration) {
+    // Module is loaded into PrismJSBenchmark
+    let PrismJSBenchmark;
+    eval(this.iterationSourceCodes[iteration]);
+    this.lastResult = PrismJSBenchmark.runTest(this.samples);
+
+    for (const result of this.lastResult) {
+      result.hash = this.quickHash(result.html);
+      this.totalHash ^= result.hash;
+    }
+  }
+
+  validate() {
+    console.assert(this.lastResult.length == this.samples.length);
+    for (let i = 0; i < this.samples.length; i++) {
+      const sample = this.samples[i];
+      const result = this.lastResult[i];
+      console.assert(result.html.length > 0);
+      console.assert(
+        result.hash == sample.hash,
+        `Invalid result.hash = ${result.hash}, expected ${sample.hash}`
+      );
+    }
+  }
+}
diff --git a/prismjs/data/sample.cpp b/prismjs/data/sample.cpp
new file mode 100644
index 0000000..4e626f9
--- /dev/null
+++ b/prismjs/data/sample.cpp
@@ -0,0 +1,42 @@
+#include <iostream>
+#include <vector>
+#include <string>
+#include <algorithm>
+
+class MyClass {
+public:
+    MyClass(const std::string& name) : name_(name) {}
+
+    void printName() const {
+        std::cout << "Name: " << name_ << std::endl;
+    }
+
+private:
+    std::string name_;
+};
+
+template<typename T>
+void printVector(const std::vector<T>& vec) {
+    for (const auto& item : vec) {
+        std::cout << item << " ";
+    }
+    std::cout << std::endl;
+}
+
+int main() {
+    std::cout << "Hello, C++ World!" << std::endl;
+
+    std::vector<int> numbers = {1, 2, 3, 4, 5};
+    printVector(numbers);
+
+    std::vector<std::string> strings = {"apple", "banana", "cherry"};
+    printVector(strings);
+
+    std::sort(strings.begin(), strings.end());
+    printVector(strings);
+
+    MyClass obj("Test Object");
+    obj.printName();
+
+    return 0;
+}
diff --git a/prismjs/data/sample.css b/prismjs/data/sample.css
new file mode 100644
index 0000000..af4bd9f
--- /dev/null
+++ b/prismjs/data/sample.css
@@ -0,0 +1,129 @@
+/* Large CSS file for testing */
+
+body {
+    font-family: Arial, sans-serif;
+    line-height: 1.6;
+    color: #333;
+}
+
+.container {
+    width: 90%;
+    margin: 0 auto;
+    padding: 20px;
+}
+
+.header {
+    background: #f4f4f4;
+    padding: 1rem;
+    border-bottom: 1px solid #ddd;
+}
+
+.header h1 {
+    margin: 0;
+}
+
+.nav {
+    background: #333;
+    color: #fff;
+    padding: 0.5rem;
+}
+
+.nav ul {
+    padding: 0;
+    list-style: none;
+}
+
+.nav ul li {
+    display: inline;
+    margin-right: 20px;
+}
+
+.nav a {
+    color: #fff;
+    text-decoration: none;
+}
+
+.main {
+    padding: 1rem 0;
+}
+
+.footer {
+    background: #333;
+    color: #fff;
+    text-align: center;
+    padding: 1rem;
+    margin-top: 20px;
+}
+
+.btn {
+    display: inline-block;
+    background: #5cb85c;
+    color: #fff;
+    padding: 10px 20px;
+    border: none;
+    cursor: pointer;
+}
+
+.btn:hover {
+    background: #4cae4c;
+}
+
+.grid {
+    display: grid;
+    grid-template-columns: repeat(4, 1fr);
+    gap: 1rem;
+}
+
+.card {
+    border: 1px solid #ccc;
+    padding: 1rem;
+    box-shadow: 2px 2px 5px rgba(0,0,0,0.1);
+}
+
+.table {
+    width: 100%;
+    border-collapse: collapse;
+}
+
+.table th, .table td {
+    border: 1px solid #ddd;
+    padding: 8px;
+}
+
+.table th {
+    background-color: #f2f2f2;
+}
+
+.form-group {
+    margin-bottom: 15px;
+}
+
+.form-group label {
+    display: block;
+    margin-bottom: 5px;
+}
+
+.form-group input {
+    width: 100%;
+    padding: 8px;
+    border: 1px solid #ccc;
+}
+
+.alert {
+    padding: 15px;
+    margin-bottom: 20px;
+    border: 1px solid transparent;
+    border-radius: 4px;
+}
+
+.alert-success {
+    color: #3c763d;
+    background-color: #dff0d8;
+    border-color: #d6e9c6;
+}
+
+.alert-danger {
+    color: #a94442;
+    background-color: #f2dede;
+    border-color: #ebccd1;
+}
diff --git a/prismjs/data/sample.html b/prismjs/data/sample.html
new file mode 100644
index 0000000..6a5efa9
--- /dev/null
+++ b/prismjs/data/sample.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Large HTML Document</title>
+    <style>
+        body { font-family: sans-serif; }
+        .container { width: 80%; margin: 0 auto; }
+        .header { background: #333; color: #fff; padding: 1rem; }
+        .footer { background: #333; color: #fff; padding: 1rem; text-align: center; }
+        .main { padding: 1rem; }
+        .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; }
+        .card { border: 1px solid #ccc; padding: 1rem; }
+    </style>
+</head>
+<body>
+    <div class="container">
+        <header class="header">
+            <h1>Large HTML Document for Testing</h1>
+        </header>
+        <main class="main">
+            <p>This is a large HTML document created for testing purposes. It contains a variety of elements to simulate a real-world web page.</p>
+            <div class="grid">
+                <div class="card"><h2>Card 1</h2><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p></div>
+                <div class="card"><h2>Card 2</h2><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p></div>
+                <div class="card"><h2>Card 3</h2><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p></div>
+                <div class="card"><h2>Card 4</h2><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p></div>
+                <div class="card"><h2>Card 5</h2><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p></div>
+                <div class="card"><h2>Card 6</h2><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p></div>
+                <div class="card"><h2>Card 7</h2><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p></div>
+                <div class="card"><h2>Card 8</h2><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p></div>
+                <div class="card"><h2>Card 9</h2><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p></div>
+            </div>
+            <section>
+                <h2>More Content</h2>
+                <p>Here is some more content to make the file larger.</p>
+                <ul>
+                    <li>List item 1</li>
+                    <li>List item 2</li>
+                    <li>List item 3</li>
+                    <li>List item 4</li>
+                    <li>List item 5</li>
+                    <li>List item 6</li>
+                    <li>List item 7</li>
+                    <li>List item 8</li>
+                    <li>List item 9</li>
+                    <li>List item 10</li>
+                </ul>
+                <p>Even more content...</p>
+                <pre><code>
+function helloWorld() {
+    console.log("Hello, world!");
+}
+                </code></pre>
+            </section>
+            <section>
+                <h2>And More...</h2>
+                <p>Adding more sections to increase the size of the document.</p>
+                <table>
+                    <thead>
+                        <tr>
+                            <th>Header 1</th>
+                            <th>Header 2</th>
+                            <th>Header 3</th>
+                        </tr>
+                    </thead>
+                    <tbody>
+                        <tr>
+                            <td>Data 1</td>
+                            <td>Data 2</td>
+                            <td>Data 3</td>
+                        </tr>
+                        <tr>
+                            <td>Data 4</td>
+                            <td>Data 5</td>
+                            <td>Data 6</td>
+                        </tr>
+                        <tr>
+                            <td>Data 7</td>
+                            <td>Data 8</td>
+                            <td>Data 9</td>
+                        </tr>
+                    </tbody>
+                </table>
+            </section>
+        </main>
+        <footer class="footer">
+            <p>&copy; 2025 Test Document</p>
+        </footer>
+    </div>
+</body>
+</html>
diff --git a/prismjs/data/sample.js b/prismjs/data/sample.js
new file mode 100644
index 0000000..d44fb8b
--- /dev/null
+++ b/prismjs/data/sample.js
@@ -0,0 +1,110 @@
+// Large JavaScript file for testing
+
+function a() {
+    // Function a
+    let x = 10;
+    for (let i = 0; i < 100; i++) {
+        x += i;
+    }
+    return x;
+}
+
+function b() {
+    // Function b
+    let y = 20;
+    let z = a();
+    return y + z;
+}
+
+function c() {
+    // Function c
+    let arr = [];
+    for (let i = 0; i < 1000; i++) {
+        arr.push({
+            id: i,
+            value: Math.random()
+        });
+    }
+    return arr;
+}
+
+function d() {
+    // Function d
+    let obj = {};
+    for (let i = 0; i < 500; i++) {
+        obj['key' + i] = 'value' + i;
+    }
+    return obj;
+}
+
+function e() {
+    // Function e
+    let text = "This is a long string of text. ".repeat(100);
+    return text;
+}
+
+function f() {
+    // Function f
+    let result = 0;
+    for (let i = 0; i < 1000; i++) {
+        result += Math.sqrt(i);
+    }
+    return result;
+}
+
+function g() {
+    // Function g
+    let date = new Date();
+    return date.toString();
+}
+
+function h() {
+    // Function h
+    let regex = new RegExp('^[a-zA-Z0-9]*$');
+    return regex.test('someTestString123');
+}
+
+function i() {
+    // Function i
+    let promise = new Promise((resolve, reject) => {
+        setTimeout(() => {
+            resolve("Promise resolved after 1 second");
+        }, 1000);
+    });
+    return promise;
+}
+
+async function j() {
+    // Function j
+    let result = await i();
+    console.log(result);
+}
+
+class MyClass {
+    constructor() {
+        this.property1 = 'value1';
+        this.property2 = 123;
+    }
+
+    method1() {
+        return this.property1;
+    }
+
+    method2() {
+        return this.property2;
+    }
+}
+
+const instance = new MyClass();
+
+console.log(a());
+console.log(b());
+console.log(c());
+console.log(d());
+console.log(e());
+console.log(f());
+console.log(g());
+console.log(h());
+j();
+console.log(instance.method1());
+console.log(instance.method2());
diff --git a/prismjs/data/sample.json b/prismjs/data/sample.json
new file mode 100644
index 0000000..5e40246
--- /dev/null
+++ b/prismjs/data/sample.json
@@ -0,0 +1,15 @@
+{
+  "name": "prismjs-benchmark",
+  "version": "1.0.0",
+  "description": "A benchmark for Prism.js",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "keywords": [
+    "prism",
+    "benchmark"
+  ],
+  "author": "",
+  "license": "ISC"
+}
\ No newline at end of file
diff --git a/prismjs/data/sample.md b/prismjs/data/sample.md
new file mode 100644
index 0000000..859f0da
--- /dev/null
+++ b/prismjs/data/sample.md
@@ -0,0 +1,17 @@
+# Markdown Sample
+
+This is a sample Markdown file for testing Prism.js highlighting.
+
+## Code Block
+
+```javascript
+function hello() {
+  console.log("Hello, World!");
+}
+```
+
+## List
+
+- Item 1
+- Item 2
+- Item 3
diff --git a/prismjs/data/sample.py b/prismjs/data/sample.py
new file mode 100644
index 0000000..591ab71
--- /dev/null
+++ b/prismjs/data/sample.py
@@ -0,0 +1,23 @@
+# Python Sample
+def factorial(n):
+    """
+    This function calculates the factorial of a non-negative integer.
+    """
+    if n == 0:
+        return 1
+    else:
+        return n * factorial(n-1)
+
+class Greeter:
+    def __init__(self, name):
+        self.name = name
+
+    def greet(self):
+        print(f"Hello, {self.name}!")
+
+# Example usage
+num = 5
+print(f"The factorial of {num} is {factorial(num)}")
+
+greeter = Greeter("World")
+greeter.greet()
diff --git a/prismjs/data/sample.sql b/prismjs/data/sample.sql
new file mode 100644
index 0000000..9f11a05
--- /dev/null
+++ b/prismjs/data/sample.sql
@@ -0,0 +1,14 @@
+-- SQL Sample
+SELECT
+    id,
+    name,
+    email
+FROM
+    users
+WHERE
+    age > 25
+ORDER BY
+    name;
+
+INSERT INTO products (name, price)
+VALUES ('New Product', 99.99);
diff --git a/prismjs/data/sample.ts b/prismjs/data/sample.ts
new file mode 100644
index 0000000..5d5bdf5
--- /dev/null
+++ b/prismjs/data/sample.ts
@@ -0,0 +1,23 @@
+// TypeScript Sample
+interface Person {
+    firstName: string;
+    lastName: string;
+}
+
+function greeter(person: Person): string {
+    return "Hello, " + person.firstName + " " + person.lastName;
+}
+
+let user: Person = { firstName: "Jane", lastName: "User" };
+
+console.log(greeter(user));
+
+class Student {
+    fullName: string;
+    constructor(public firstName: string, public middleInitial: string, public lastName: string) {
+        this.fullName = firstName + " " + middleInitial + " " + lastName;
+    }
+}
+
+let student = new Student("John", "Q.", "Public");
+console.log("Student:", student.fullName);
diff --git a/prismjs/dist/bundle.es5.js b/prismjs/dist/bundle.es5.js
new file mode 100644
index 0000000..25d4c39
--- /dev/null
+++ b/prismjs/dist/bundle.es5.js
@@ -0,0 +1,145 @@
+/*! For license information please see bundle.es5.js.LICENSE.txt */
+!function(){var __webpack_modules__={19:function(){!function(Prism){
+/*ThouShaltNotCache*/
+var inner=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function createInline(pattern){
+/*ThouShaltNotCache*/
+return pattern=pattern.replace(/<inner>/g,function(){
+/*ThouShaltNotCache*/
+return inner}),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+pattern+")")}var tableCell=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,tableRow=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){
+/*ThouShaltNotCache*/
+return tableCell}),tableLine=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;Prism.languages.markdown=Prism.languages.extend("markup",{}),Prism.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:Prism.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+tableRow+tableLine+"(?:"+tableRow+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+tableRow+tableLine+")(?:"+tableRow+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(tableCell),inside:Prism.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+tableRow+")"+tableLine+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+tableRow+"$"),inside:{"table-header":{pattern:RegExp(tableCell),alias:"important",inside:Prism.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:createInline(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:createInline(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:createInline(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:createInline(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(token){
+/*ThouShaltNotCache*/
+["url","bold","italic","strike","code-snippet"].forEach(function(inside){
+/*ThouShaltNotCache*/
+token!==inside&&(Prism.languages.markdown[token].inside.content.inside[inside]=Prism.languages.markdown[inside])})}),Prism.hooks.add("after-tokenize",function(env){
+/*ThouShaltNotCache*/
+"markdown"!==env.language&&"md"!==env.language||function walkTokens(tokens){
+/*ThouShaltNotCache*/
+if(tokens&&"string"!=typeof tokens)for(var i=0,l=tokens.length;i<l;i++){var token=tokens[i];if("code"===token.type){var codeLang=token.content[1],codeBlock=token.content[3];if(codeLang&&codeBlock&&"code-language"===codeLang.type&&"code-block"===codeBlock.type&&"string"==typeof codeLang.content){var lang=codeLang.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),alias="language-"+(lang=(/[a-z][\w-]*/i.exec(lang)||[""])[0].toLowerCase());codeBlock.alias?"string"==typeof codeBlock.alias?codeBlock.alias=[codeBlock.alias,alias]:codeBlock.alias.push(alias):codeBlock.alias=[alias]}}else walkTokens(token.content)}}(env.tokens)}),Prism.hooks.add("wrap",function(env){
+/*ThouShaltNotCache*/
+if("code-block"===env.type){for(var codeLang="",i=0,l=env.classes.length;i<l;i++){var cls=env.classes[i],match=/language-(.+)/.exec(cls);if(match){codeLang=match[1];break}}var html,grammar=Prism.languages[codeLang];if(grammar)env.content=Prism.highlight((html=env.content,html.replace(tagPattern,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(m,code){var value;if("#"===(
+/*ThouShaltNotCache*/
+code=code.toLowerCase())[0])return value="x"===code[1]?parseInt(code.slice(2),16):Number(code.slice(1)),fromCodePoint(value);var known=KNOWN_ENTITY_NAMES[code];return known||m})),grammar,codeLang);else if(codeLang&&"none"!==codeLang&&Prism.plugins.autoloader){var id="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());env.attributes.id=id,Prism.plugins.autoloader.loadLanguages(codeLang,function(){
+/*ThouShaltNotCache*/
+var ele=document.getElementById(id);ele&&(ele.innerHTML=Prism.highlight(ele.textContent,Prism.languages[codeLang],codeLang))})}}});var tagPattern=RegExp(Prism.languages.markup.tag.pattern.source,"gi"),KNOWN_ENTITY_NAMES={amp:"&",lt:"<",gt:">",quot:'"'},fromCodePoint=String.fromCodePoint||String.fromCharCode;Prism.languages.md=Prism.languages.markdown}(Prism)},44:function(){Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},244:function(){Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}},421:function(){Prism.languages.c=Prism.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],char:Prism.languages.c.char,comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}}}),Prism.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete Prism.languages.c.boolean},613:function(){Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),Prism.languages.js=Prism.languages.javascript},634:function(){Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}},642:function(module,__unused_webpack_exports,__webpack_require__){var Prism=function(_self){
+/*ThouShaltNotCache*/
+var lang=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,uniqueId=0,plainTextGrammar={},_={manual:_self.Prism&&_self.Prism.manual,disableWorkerMessageHandler:_self.Prism&&_self.Prism.disableWorkerMessageHandler,util:{encode:function encode(tokens){
+/*ThouShaltNotCache*/
+return tokens instanceof Token?new Token(tokens.type,encode(tokens.content),tokens.alias):Array.isArray(tokens)?tokens.map(encode):tokens.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(o){
+/*ThouShaltNotCache*/
+return Object.prototype.toString.call(o).slice(8,-1)},objId:function(obj){
+/*ThouShaltNotCache*/
+return obj.__id||Object.defineProperty(obj,"__id",{value:++uniqueId}),obj.__id},clone:function deepClone(o,visited){var clone,id;switch(
+/*ThouShaltNotCache*/
+visited=visited||{},_.util.type(o)){case"Object":if(id=_.util.objId(o),visited[id])return visited[id];for(var key in clone={},visited[id]=clone,o)o.hasOwnProperty(key)&&(clone[key]=deepClone(o[key],visited));return clone;case"Array":return id=_.util.objId(o),visited[id]?visited[id]:(clone=[],visited[id]=clone,o.forEach(function(v,i){
+/*ThouShaltNotCache*/
+clone[i]=deepClone(v,visited)}),clone);default:return o}},getLanguage:function(element){
+/*ThouShaltNotCache*/
+for(;element;){var m=lang.exec(element.className);if(m)return m[1].toLowerCase();element=element.parentElement}return"none"},setLanguage:function(element,language){
+/*ThouShaltNotCache*/
+element.className=element.className.replace(RegExp(lang,"gi"),""),element.classList.add("language-"+language)},currentScript:function(){
+/*ThouShaltNotCache*/
+if("undefined"==typeof document)return null;if(document.currentScript&&"SCRIPT"===document.currentScript.tagName)return document.currentScript;try{throw new Error}catch(err){var src=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(err.stack)||[])[1];if(src){var scripts=document.getElementsByTagName("script");for(var i in scripts)if(scripts[i].src==src)return scripts[i]}return null}},isActive:function(element,className,defaultActivation){for(
+/*ThouShaltNotCache*/
+var no="no-"+className;element;){var classList=element.classList;if(classList.contains(className))return!0;if(classList.contains(no))return!1;element=element.parentElement}return!!defaultActivation}},languages:{plain:plainTextGrammar,plaintext:plainTextGrammar,text:plainTextGrammar,txt:plainTextGrammar,extend:function(id,redef){
+/*ThouShaltNotCache*/
+var lang=_.util.clone(_.languages[id]);for(var key in redef)lang[key]=redef[key];return lang},insertBefore:function(inside,before,insert,root){var grammar=(
+/*ThouShaltNotCache*/
+root=root||_.languages)[inside],ret={};for(var token in grammar)if(grammar.hasOwnProperty(token)){if(token==before)for(var newToken in insert)insert.hasOwnProperty(newToken)&&(ret[newToken]=insert[newToken]);insert.hasOwnProperty(token)||(ret[token]=grammar[token])}var old=root[inside];return root[inside]=ret,_.languages.DFS(_.languages,function(key,value){
+/*ThouShaltNotCache*/
+value===old&&key!=inside&&(this[key]=ret)}),ret},DFS:function DFS(o,callback,type,visited){
+/*ThouShaltNotCache*/
+visited=visited||{};var objId=_.util.objId;for(var i in o)if(o.hasOwnProperty(i)){callback.call(o,i,o[i],type||i);var property=o[i],propertyType=_.util.type(property);"Object"!==propertyType||visited[objId(property)]?"Array"!==propertyType||visited[objId(property)]||(visited[objId(property)]=!0,DFS(property,callback,i,visited)):(visited[objId(property)]=!0,DFS(property,callback,null,visited))}}},plugins:{},highlightAll:function(async,callback){
+/*ThouShaltNotCache*/
+_.highlightAllUnder(document,async,callback)},highlightAllUnder:function(container,async,callback){
+/*ThouShaltNotCache*/
+var env={callback:callback,container:container,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};_.hooks.run("before-highlightall",env),env.elements=Array.prototype.slice.apply(env.container.querySelectorAll(env.selector)),_.hooks.run("before-all-elements-highlight",env);for(var element,i=0;element=env.elements[i++];)_.highlightElement(element,!0===async,env.callback)},highlightElement:function(element,async,callback){
+/*ThouShaltNotCache*/
+var language=_.util.getLanguage(element),grammar=_.languages[language];_.util.setLanguage(element,language);var parent=element.parentElement;parent&&"pre"===parent.nodeName.toLowerCase()&&_.util.setLanguage(parent,language);var env={element:element,language:language,grammar:grammar,code:element.textContent};function insertHighlightedCode(highlightedCode){
+/*ThouShaltNotCache*/
+env.highlightedCode=highlightedCode,_.hooks.run("before-insert",env),env.element.innerHTML=env.highlightedCode,_.hooks.run("after-highlight",env),_.hooks.run("complete",env),callback&&callback.call(env.element)}if(_.hooks.run("before-sanity-check",env),(parent=env.element.parentElement)&&"pre"===parent.nodeName.toLowerCase()&&!parent.hasAttribute("tabindex")&&parent.setAttribute("tabindex","0"),!env.code)return _.hooks.run("complete",env),void(callback&&callback.call(env.element));if(_.hooks.run("before-highlight",env),env.grammar)if(async&&_self.Worker){var worker=new Worker(_.filename);worker.onmessage=function(evt){
+/*ThouShaltNotCache*/
+insertHighlightedCode(evt.data)},worker.postMessage(JSON.stringify({language:env.language,code:env.code,immediateClose:!0}))}else insertHighlightedCode(_.highlight(env.code,env.grammar,env.language));else insertHighlightedCode(_.util.encode(env.code))},highlight:function(text,grammar,language){
+/*ThouShaltNotCache*/
+var env={code:text,grammar:grammar,language:language};if(_.hooks.run("before-tokenize",env),!env.grammar)throw new Error('The language "'+env.language+'" has no grammar.');return env.tokens=_.tokenize(env.code,env.grammar),_.hooks.run("after-tokenize",env),Token.stringify(_.util.encode(env.tokens),env.language)},tokenize:function(text,grammar){
+/*ThouShaltNotCache*/
+var rest=grammar.rest;if(rest){for(var token in rest)grammar[token]=rest[token];delete grammar.rest}var tokenList=new LinkedList;return addAfter(tokenList,tokenList.head,text),matchGrammar(text,tokenList,grammar,tokenList.head,0),function(list){
+/*ThouShaltNotCache*/
+var array=[],node=list.head.next;for(;node!==list.tail;)array.push(node.value),node=node.next;return array}(tokenList)},hooks:{all:{},add:function(name,callback){
+/*ThouShaltNotCache*/
+var hooks=_.hooks.all;hooks[name]=hooks[name]||[],hooks[name].push(callback)},run:function(name,env){
+/*ThouShaltNotCache*/
+var callbacks=_.hooks.all[name];if(callbacks&&callbacks.length)for(var callback,i=0;callback=callbacks[i++];)callback(env)}},Token:Token};function Token(type,content,alias,matchedStr){
+/*ThouShaltNotCache*/
+this.type=type,this.content=content,this.alias=alias,this.length=0|(matchedStr||"").length}function matchPattern(pattern,pos,text,lookbehind){
+/*ThouShaltNotCache*/
+pattern.lastIndex=pos;var match=pattern.exec(text);if(match&&lookbehind&&match[1]){var lookbehindLength=match[1].length;match.index+=lookbehindLength,match[0]=match[0].slice(lookbehindLength)}return match}function matchGrammar(text,tokenList,grammar,startNode,startPos,rematch){
+/*ThouShaltNotCache*/
+for(var token in grammar)if(grammar.hasOwnProperty(token)&&grammar[token]){var patterns=grammar[token];patterns=Array.isArray(patterns)?patterns:[patterns];for(var j=0;j<patterns.length;++j){if(rematch&&rematch.cause==token+","+j)return;var patternObj=patterns[j],inside=patternObj.inside,lookbehind=!!patternObj.lookbehind,greedy=!!patternObj.greedy,alias=patternObj.alias;if(greedy&&!patternObj.pattern.global){var flags=patternObj.pattern.toString().match(/[imsuy]*$/)[0];patternObj.pattern=RegExp(patternObj.pattern.source,flags+"g")}for(var pattern=patternObj.pattern||patternObj,currentNode=startNode.next,pos=startPos;currentNode!==tokenList.tail&&!(rematch&&pos>=rematch.reach);pos+=currentNode.value.length,currentNode=currentNode.next){var str=currentNode.value;if(tokenList.length>text.length)return;if(!(str instanceof Token)){var match,removeCount=1;if(greedy){if(!(match=matchPattern(pattern,pos,text,lookbehind))||match.index>=text.length)break;var from=match.index,to=match.index+match[0].length,p=pos;for(p+=currentNode.value.length;from>=p;)p+=(currentNode=currentNode.next).value.length;if(pos=p-=currentNode.value.length,currentNode.value instanceof Token)continue;for(var k=currentNode;k!==tokenList.tail&&(p<to||"string"==typeof k.value);k=k.next)removeCount++,p+=k.value.length;removeCount--,str=text.slice(pos,p),match.index-=pos}else if(!(match=matchPattern(pattern,0,str,lookbehind)))continue;from=match.index;var matchStr=match[0],before=str.slice(0,from),after=str.slice(from+matchStr.length),reach=pos+str.length;rematch&&reach>rematch.reach&&(rematch.reach=reach);var removeFrom=currentNode.prev;if(before&&(removeFrom=addAfter(tokenList,removeFrom,before),pos+=before.length),removeRange(tokenList,removeFrom,removeCount),currentNode=addAfter(tokenList,removeFrom,new Token(token,inside?_.tokenize(matchStr,inside):matchStr,alias,matchStr)),after&&addAfter(tokenList,currentNode,after),removeCount>1){var nestedRematch={cause:token+","+j,reach:reach};matchGrammar(text,tokenList,grammar,currentNode.prev,pos,nestedRematch),rematch&&nestedRematch.reach>rematch.reach&&(rematch.reach=nestedRematch.reach)}}}}}}function LinkedList(){
+/*ThouShaltNotCache*/
+var head={value:null,prev:null,next:null},tail={value:null,prev:head,next:null};head.next=tail,this.head=head,this.tail=tail,this.length=0}function addAfter(list,node,value){
+/*ThouShaltNotCache*/
+var next=node.next,newNode={value:value,prev:node,next:next};return node.next=newNode,next.prev=newNode,list.length++,newNode}function removeRange(list,node,count){for(
+/*ThouShaltNotCache*/
+var next=node.next,i=0;i<count&&next!==list.tail;i++)next=next.next;node.next=next,next.prev=node,list.length-=i}if(_self.Prism=_,Token.stringify=function stringify(o,language){
+/*ThouShaltNotCache*/
+if("string"==typeof o)return o;if(Array.isArray(o)){var s="";return o.forEach(function(e){
+/*ThouShaltNotCache*/
+s+=stringify(e,language)}),s}var env={type:o.type,content:stringify(o.content,language),tag:"span",classes:["token",o.type],attributes:{},language:language},aliases=o.alias;aliases&&(Array.isArray(aliases)?Array.prototype.push.apply(env.classes,aliases):env.classes.push(aliases)),_.hooks.run("wrap",env);var attributes="";for(var name in env.attributes)attributes+=" "+name+'="'+(env.attributes[name]||"").replace(/"/g,"&quot;")+'"';return"<"+env.tag+' class="'+env.classes.join(" ")+'"'+attributes+">"+env.content+"</"+env.tag+">"},!_self.document)return _self.addEventListener?(_.disableWorkerMessageHandler||_self.addEventListener("message",function(evt){
+/*ThouShaltNotCache*/
+var message=JSON.parse(evt.data),lang=message.language,code=message.code,immediateClose=message.immediateClose;_self.postMessage(_.highlight(code,_.languages[lang],lang)),immediateClose&&_self.close()},!1),_):_;var script=_.util.currentScript();function highlightAutomaticallyCallback(){
+/*ThouShaltNotCache*/
+_.manual||_.highlightAll()}if(script&&(_.filename=script.src,script.hasAttribute("data-manual")&&(_.manual=!0)),!_.manual){var readyState=document.readyState;"loading"===readyState||"interactive"===readyState&&script&&script.defer?document.addEventListener("DOMContentLoaded",highlightAutomaticallyCallback):window.requestAnimationFrame?window.requestAnimationFrame(highlightAutomaticallyCallback):window.setTimeout(highlightAutomaticallyCallback,16)}return _}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});module.exports&&(module.exports=Prism),void 0!==__webpack_require__.g&&(__webpack_require__.g.Prism=Prism),Prism.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(env){
+/*ThouShaltNotCache*/
+"entity"===env.type&&(env.attributes.title=env.content.replace(/&amp;/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(tagName,lang){
+/*ThouShaltNotCache*/
+var includedCdataInside={};includedCdataInside["language-"+lang]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Prism.languages[lang]},includedCdataInside.cdata=/^<!\[CDATA\[|\]\]>$/i;var inside={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:includedCdataInside}};inside["language-"+lang]={pattern:/[\s\S]+/,inside:Prism.languages[lang]};var def={};def[tagName]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){
+/*ThouShaltNotCache*/
+return tagName}),"i"),lookbehind:!0,greedy:!0,inside:inside},Prism.languages.insertBefore("markup","cdata",def)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(attrName,lang){
+/*ThouShaltNotCache*/
+Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+attrName+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[lang,"language-"+lang],inside:Prism.languages[lang]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml,function(Prism){
+/*ThouShaltNotCache*/
+var string=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;Prism.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+string.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+string.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+string.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+string.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:string,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},Prism.languages.css.atrule.inside.rest=Prism.languages.css;var markup=Prism.languages.markup;markup&&(markup.tag.addInlined("style","css"),markup.tag.addAttribute("style","css"))}(Prism),Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),Prism.languages.js=Prism.languages.javascript,function(){
+/*ThouShaltNotCache*/
+if(void 0!==Prism&&"undefined"!=typeof document){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var EXTENSIONS={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},SELECTOR='pre[data-src]:not([data-src-status="loaded"]):not([data-src-status="loading"])';Prism.hooks.add("before-highlightall",function(env){
+/*ThouShaltNotCache*/
+env.selector+=", "+SELECTOR}),Prism.hooks.add("before-sanity-check",function(env){
+/*ThouShaltNotCache*/
+var pre=env.element;if(pre.matches(SELECTOR)){env.code="",pre.setAttribute("data-src-status","loading");var code=pre.appendChild(document.createElement("CODE"));code.textContent="Loading\u2026";var src=pre.getAttribute("data-src"),language=env.language;if("none"===language){var extension=(/\.(\w+)$/.exec(src)||[,"none"])[1];language=EXTENSIONS[extension]||extension}Prism.util.setLanguage(code,language),Prism.util.setLanguage(pre,language);var autoloader=Prism.plugins.autoloader;autoloader&&autoloader.loadLanguages(language),function(src,success,error){
+/*ThouShaltNotCache*/
+var xhr=new XMLHttpRequest;xhr.open("GET",src,!0),xhr.onreadystatechange=function(){
+/*ThouShaltNotCache*/
+4==xhr.readyState&&(xhr.status<400&&xhr.responseText?success(xhr.responseText):xhr.status>=400?error("\u2716 Error "+xhr.status+" while fetching file: "+xhr.statusText):error("\u2716 Error: File does not exist or is empty"))},xhr.send(null)}(src,function(text){
+/*ThouShaltNotCache*/
+pre.setAttribute("data-src-status","loaded");var range=function(range){
+/*ThouShaltNotCache*/
+var m=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(range||"");if(m){var start=Number(m[1]),comma=m[2],end=m[3];return comma?end?[start,Number(end)]:[start,void 0]:[start,start]}}(pre.getAttribute("data-range"));if(range){var lines=text.split(/\r\n?|\n/g),start=range[0],end=null==range[1]?lines.length:range[1];start<0&&(start+=lines.length),start=Math.max(0,Math.min(start-1,lines.length)),end<0&&(end+=lines.length),end=Math.max(0,Math.min(end,lines.length)),text=lines.slice(start,end).join("\n"),pre.hasAttribute("data-start")||pre.setAttribute("data-start",String(start+1))}code.textContent=text,Prism.highlightElement(code)},function(error){
+/*ThouShaltNotCache*/
+pre.setAttribute("data-src-status","failed"),code.textContent=error})}}),Prism.plugins.fileHighlight={highlight:function(container){for(
+/*ThouShaltNotCache*/
+var element,elements=(container||document).querySelectorAll(SELECTOR),i=0;element=elements[i++];)Prism.highlightElement(element)}};var logged=!1;Prism.fileHighlight=function(){
+/*ThouShaltNotCache*/
+logged||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),logged=!0),Prism.plugins.fileHighlight.highlight.apply(this,arguments)}}}()},648:function(){Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},694:function(){Prism.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(env){
+/*ThouShaltNotCache*/
+"entity"===env.type&&(env.attributes.title=env.content.replace(/&amp;/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(tagName,lang){
+/*ThouShaltNotCache*/
+var includedCdataInside={};includedCdataInside["language-"+lang]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Prism.languages[lang]},includedCdataInside.cdata=/^<!\[CDATA\[|\]\]>$/i;var inside={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:includedCdataInside}};inside["language-"+lang]={pattern:/[\s\S]+/,inside:Prism.languages[lang]};var def={};def[tagName]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){
+/*ThouShaltNotCache*/
+return tagName}),"i"),lookbehind:!0,greedy:!0,inside:inside},Prism.languages.insertBefore("markup","cdata",def)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(attrName,lang){
+/*ThouShaltNotCache*/
+Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+attrName+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[lang,"language-"+lang],inside:Prism.languages[lang]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml},871:function(){!function(Prism){
+/*ThouShaltNotCache*/
+var string=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;Prism.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+string.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+string.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+string.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+string.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:string,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},Prism.languages.css.atrule.inside.rest=Prism.languages.css;var markup=Prism.languages.markup;markup&&(markup.tag.addInlined("style","css"),markup.tag.addAttribute("style","css"))}(Prism)},893:function(){!function(Prism){
+/*ThouShaltNotCache*/
+var keyword=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,modName=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,function(){
+/*ThouShaltNotCache*/
+return keyword.source});Prism.languages.cpp=Prism.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,function(){
+/*ThouShaltNotCache*/
+return keyword.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:keyword,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),Prism.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,function(){
+/*ThouShaltNotCache*/
+return modName})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),Prism.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:Prism.languages.cpp}}}}),Prism.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),Prism.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:Prism.languages.extend("cpp",{})}}),Prism.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},Prism.languages.cpp["base-clause"])}(Prism)},973:function(){!function(Prism){
+/*ThouShaltNotCache*/
+Prism.languages.typescript=Prism.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),Prism.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete Prism.languages.typescript.parameter,delete Prism.languages.typescript["literal-property"];var typeInside=Prism.languages.extend("typescript",{});delete typeInside["class-name"],Prism.languages.typescript["class-name"].inside=typeInside,Prism.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:typeInside}}}}),Prism.languages.ts=Prism.languages.typescript}(Prism)}},__webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(void 0!==cachedModule)return cachedModule.exports;var module=__webpack_module_cache__[moduleId]={exports:{}};return __webpack_modules__[moduleId](module,module.exports,__webpack_require__),module.exports}__webpack_require__.d=function(exports,definition){for(var key in definition)__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)&&Object.defineProperty(exports,key,{enumerable:!0,get:definition[key]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=function(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})};var __webpack_exports__={};!function(){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{runTest:function(){return runTest}});var prismjs__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(642);__webpack_require__(694),__webpack_require__(871),__webpack_require__(634),__webpack_require__(613),__webpack_require__(421),__webpack_require__(893),__webpack_require__(19),__webpack_require__(648),__webpack_require__(244),__webpack_require__(44),__webpack_require__(973);function runTest(samples){
+/*ThouShaltNotCache*/
+const results=[];for(const{content:content,lang:lang}of samples){const highlighted=prismjs__WEBPACK_IMPORTED_MODULE_0__.highlight(content,prismjs__WEBPACK_IMPORTED_MODULE_0__.languages[lang],lang);results.push({html:highlighted})}return results}}(),PrismJSBenchmark=__webpack_exports__}();
+//# sourceMappingURL=bundle.es5.js.map
\ No newline at end of file
diff --git a/prismjs/dist/bundle.es5.js.LICENSE.txt b/prismjs/dist/bundle.es5.js.LICENSE.txt
new file mode 100644
index 0000000..0285de9
--- /dev/null
+++ b/prismjs/dist/bundle.es5.js.LICENSE.txt
@@ -0,0 +1,8 @@
+/**
+ * Prism: Lightweight, robust, elegant syntax highlighting
+ *
+ * @license MIT <https://opensource.org/licenses/MIT>
+ * @author Lea Verou <https://lea.verou.me>
+ * @namespace
+ * @public
+ */
diff --git a/prismjs/dist/bundle.es5.js.map b/prismjs/dist/bundle.es5.js.map
new file mode 100644
index 0000000..3dfe26d
--- /dev/null
+++ b/prismjs/dist/bundle.es5.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"bundle.es5.js","mappings":"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","sources":["webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-markdown.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-python.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-sql.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-c.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-javascript.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-clike.js","webpack://PrismJSBenchmark/./node_modules/prismjs/prism.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-json.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-markup.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-css.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-cpp.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-typescript.js","webpack://PrismJSBenchmark/webpack/bootstrap","webpack://PrismJSBenchmark/webpack/runtime/define property getters","webpack://PrismJSBenchmark/webpack/runtime/global","webpack://PrismJSBenchmark/webpack/runtime/hasOwnProperty shorthand","webpack://PrismJSBenchmark/webpack/runtime/make namespace object","webpack://PrismJSBenchmark/./src/test.mjs"],"sourcesContent":["(function (Prism) {\n\n\t// Allow only one line break\n\tvar inner = /(?:\\\\.|[^\\\\\\n\\r]|(?:\\n|\\r\\n?)(?![\\r\\n]))/.source;\n\n\t/**\n\t * This function is intended for the creation of the bold or italic pattern.\n\t *\n\t * This also adds a lookbehind group to the given pattern to ensure that the pattern is not backslash-escaped.\n\t *\n\t * _Note:_ Keep in mind that this adds a capturing group.\n\t *\n\t * @param {string} pattern\n\t * @returns {RegExp}\n\t */\n\tfunction createInline(pattern) {\n\t\tpattern = pattern.replace(/<inner>/g, function () { return inner; });\n\t\treturn RegExp(/((?:^|[^\\\\])(?:\\\\{2})*)/.source + '(?:' + pattern + ')');\n\t}\n\n\n\tvar tableCell = /(?:\\\\.|``(?:[^`\\r\\n]|`(?!`))+``|`[^`\\r\\n]+`|[^\\\\|\\r\\n`])+/.source;\n\tvar tableRow = /\\|?__(?:\\|__)+\\|?(?:(?:\\n|\\r\\n?)|(?![\\s\\S]))/.source.replace(/__/g, function () { return tableCell; });\n\tvar tableLine = /\\|?[ \\t]*:?-{3,}:?[ \\t]*(?:\\|[ \\t]*:?-{3,}:?[ \\t]*)+\\|?(?:\\n|\\r\\n?)/.source;\n\n\n\tPrism.languages.markdown = Prism.languages.extend('markup', {});\n\tPrism.languages.insertBefore('markdown', 'prolog', {\n\t\t'front-matter-block': {\n\t\t\tpattern: /(^(?:\\s*[\\r\\n])?)---(?!.)[\\s\\S]*?[\\r\\n]---(?!.)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^---|---$/,\n\t\t\t\t'front-matter': {\n\t\t\t\t\tpattern: /\\S+(?:\\s+\\S+)*/,\n\t\t\t\t\talias: ['yaml', 'language-yaml'],\n\t\t\t\t\tinside: Prism.languages.yaml\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'blockquote': {\n\t\t\t// > ...\n\t\t\tpattern: /^>(?:[\\t ]*>)*/m,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'table': {\n\t\t\tpattern: RegExp('^' + tableRow + tableLine + '(?:' + tableRow + ')*', 'm'),\n\t\t\tinside: {\n\t\t\t\t'table-data-rows': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + tableLine + ')(?:' + tableRow + ')*$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-data': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-line': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + ')' + tableLine + '$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /\\||:?-{3,}:?/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-header-row': {\n\t\t\t\t\tpattern: RegExp('^' + tableRow + '$'),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-header': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\talias: 'important',\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'code': [\n\t\t\t{\n\t\t\t\t// Prefixed by 4 spaces or 1 tab and preceded by an empty line\n\t\t\t\tpattern: /((?:^|\\n)[ \\t]*\\n|(?:^|\\r\\n?)[ \\t]*\\r\\n?)(?: {4}|\\t).+(?:(?:\\n|\\r\\n?)(?: {4}|\\t).+)*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// ```optional language\n\t\t\t\t// code block\n\t\t\t\t// ```\n\t\t\t\tpattern: /^```[\\s\\S]*?^```$/m,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'code-block': {\n\t\t\t\t\t\tpattern: /^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?=(?:\\n|\\r\\n?)^```$)/m,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'code-language': {\n\t\t\t\t\t\tpattern: /^(```).+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /```/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'title': [\n\t\t\t{\n\t\t\t\t// title 1\n\t\t\t\t// =======\n\n\t\t\t\t// title 2\n\t\t\t\t// -------\n\t\t\t\tpattern: /\\S.*(?:\\n|\\r\\n?)(?:==+|--+)(?=[ \\t]*$)/m,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /==+$|--+$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// # title 1\n\t\t\t\t// ###### title 6\n\t\t\t\tpattern: /(^\\s*)#.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /^#+|#+$/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'hr': {\n\t\t\t// ***\n\t\t\t// ---\n\t\t\t// * * *\n\t\t\t// -----------\n\t\t\tpattern: /(^\\s*)([*-])(?:[\\t ]*\\2){2,}(?=\\s*$)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'list': {\n\t\t\t// * item\n\t\t\t// + item\n\t\t\t// - item\n\t\t\t// 1. item\n\t\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'url-reference': {\n\t\t\t// [id]: http://example.com \"Optional title\"\n\t\t\t// [id]: http://example.com 'Optional title'\n\t\t\t// [id]: http://example.com (Optional title)\n\t\t\t// [id]: <http://example.com> \"Optional title\"\n\t\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n\t\t\tinside: {\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n\t\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n\t\t\t},\n\t\t\talias: 'url'\n\t\t},\n\t\t'bold': {\n\t\t\t// **strong**\n\t\t\t// __strong__\n\n\t\t\t// allow one nested instance of italic text using the same delimiter\n\t\t\tpattern: createInline(/\\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\\b|\\*\\*(?:(?!\\*)<inner>|\\*(?:(?!\\*)<inner>)+\\*)+\\*\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^..)[\\s\\S]+(?=..$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\*\\*|__/\n\t\t\t}\n\t\t},\n\t\t'italic': {\n\t\t\t// *em*\n\t\t\t// _em_\n\n\t\t\t// allow one nested instance of bold text using the same delimiter\n\t\t\tpattern: createInline(/\\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\\b|\\*(?:(?!\\*)<inner>|\\*\\*(?:(?!\\*)<inner>)+\\*\\*)+\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^.)[\\s\\S]+(?=.$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /[*_]/\n\t\t\t}\n\t\t},\n\t\t'strike': {\n\t\t\t// ~~strike through~~\n\t\t\t// ~strike~\n\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\tpattern: createInline(/(~~?)(?:(?!~)<inner>)+\\2/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^~~?)[\\s\\S]+(?=\\1$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /~~?/\n\t\t\t}\n\t\t},\n\t\t'code-snippet': {\n\t\t\t// `code`\n\t\t\t// ``code``\n\t\t\tpattern: /(^|[^\\\\`])(?:``[^`\\r\\n]+(?:`[^`\\r\\n]+)*``(?!`)|`[^`\\r\\n]+`(?!`))/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: ['code', 'keyword']\n\t\t},\n\t\t'url': {\n\t\t\t// [example](http://example.com \"Optional title\")\n\t\t\t// [example][id]\n\t\t\t// [example] [id]\n\t\t\tpattern: createInline(/!?\\[(?:(?!\\])<inner>)+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)|[ \\t]?\\[(?:(?!\\])<inner>)+\\])/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'operator': /^!/,\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^\\[)[^\\]]+(?=\\])/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /(^\\][ \\t]?\\[)[^\\]]+(?=\\]$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'url': {\n\t\t\t\t\tpattern: /(^\\]\\()[^\\s)]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: /(^[ \\t]+)\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t['url', 'bold', 'italic', 'strike'].forEach(function (token) {\n\t\t['url', 'bold', 'italic', 'strike', 'code-snippet'].forEach(function (inside) {\n\t\t\tif (token !== inside) {\n\t\t\t\tPrism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];\n\t\t\t}\n\t\t});\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tif (env.language !== 'markdown' && env.language !== 'md') {\n\t\t\treturn;\n\t\t}\n\n\t\tfunction walkTokens(tokens) {\n\t\t\tif (!tokens || typeof tokens === 'string') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = tokens.length; i < l; i++) {\n\t\t\t\tvar token = tokens[i];\n\n\t\t\t\tif (token.type !== 'code') {\n\t\t\t\t\twalkTokens(token.content);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Add the correct `language-xxxx` class to this code block. Keep in mind that the `code-language` token\n\t\t\t\t * is optional. But the grammar is defined so that there is only one case we have to handle:\n\t\t\t\t *\n\t\t\t\t * token.content = [\n\t\t\t\t *     <span class=\"punctuation\">```</span>,\n\t\t\t\t *     <span class=\"code-language\">xxxx</span>,\n\t\t\t\t *     '\\n', // exactly one new lines (\\r or \\n or \\r\\n)\n\t\t\t\t *     <span class=\"code-block\">...</span>,\n\t\t\t\t *     '\\n', // exactly one new lines again\n\t\t\t\t *     <span class=\"punctuation\">```</span>\n\t\t\t\t * ];\n\t\t\t\t */\n\n\t\t\t\tvar codeLang = token.content[1];\n\t\t\t\tvar codeBlock = token.content[3];\n\n\t\t\t\tif (codeLang && codeBlock &&\n\t\t\t\t\tcodeLang.type === 'code-language' && codeBlock.type === 'code-block' &&\n\t\t\t\t\ttypeof codeLang.content === 'string') {\n\n\t\t\t\t\t// this might be a language that Prism does not support\n\n\t\t\t\t\t// do some replacements to support C++, C#, and F#\n\t\t\t\t\tvar lang = codeLang.content.replace(/\\b#/g, 'sharp').replace(/\\b\\+\\+/g, 'pp');\n\t\t\t\t\t// only use the first word\n\t\t\t\t\tlang = (/[a-z][\\w-]*/i.exec(lang) || [''])[0].toLowerCase();\n\t\t\t\t\tvar alias = 'language-' + lang;\n\n\t\t\t\t\t// add alias\n\t\t\t\t\tif (!codeBlock.alias) {\n\t\t\t\t\t\tcodeBlock.alias = [alias];\n\t\t\t\t\t} else if (typeof codeBlock.alias === 'string') {\n\t\t\t\t\t\tcodeBlock.alias = [codeBlock.alias, alias];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcodeBlock.alias.push(alias);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twalkTokens(env.tokens);\n\t});\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (env.type !== 'code-block') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar codeLang = '';\n\t\tfor (var i = 0, l = env.classes.length; i < l; i++) {\n\t\t\tvar cls = env.classes[i];\n\t\t\tvar match = /language-(.+)/.exec(cls);\n\t\t\tif (match) {\n\t\t\t\tcodeLang = match[1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvar grammar = Prism.languages[codeLang];\n\n\t\tif (!grammar) {\n\t\t\tif (codeLang && codeLang !== 'none' && Prism.plugins.autoloader) {\n\t\t\t\tvar id = 'md-' + new Date().valueOf() + '-' + Math.floor(Math.random() * 1e16);\n\t\t\t\tenv.attributes['id'] = id;\n\n\t\t\t\tPrism.plugins.autoloader.loadLanguages(codeLang, function () {\n\t\t\t\t\tvar ele = document.getElementById(id);\n\t\t\t\t\tif (ele) {\n\t\t\t\t\t\tele.innerHTML = Prism.highlight(ele.textContent, Prism.languages[codeLang], codeLang);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tenv.content = Prism.highlight(textContent(env.content), grammar, codeLang);\n\t\t}\n\t});\n\n\tvar tagPattern = RegExp(Prism.languages.markup.tag.pattern.source, 'gi');\n\n\t/**\n\t * A list of known entity names.\n\t *\n\t * This will always be incomplete to save space. The current list is the one used by lowdash's unescape function.\n\t *\n\t * @see {@link https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/unescape.js#L2}\n\t */\n\tvar KNOWN_ENTITY_NAMES = {\n\t\t'amp': '&',\n\t\t'lt': '<',\n\t\t'gt': '>',\n\t\t'quot': '\"',\n\t};\n\n\t// IE 11 doesn't support `String.fromCodePoint`\n\tvar fromCodePoint = String.fromCodePoint || String.fromCharCode;\n\n\t/**\n\t * Returns the text content of a given HTML source code string.\n\t *\n\t * @param {string} html\n\t * @returns {string}\n\t */\n\tfunction textContent(html) {\n\t\t// remove all tags\n\t\tvar text = html.replace(tagPattern, '');\n\n\t\t// decode known entities\n\t\ttext = text.replace(/&(\\w{1,8}|#x?[\\da-f]{1,8});/gi, function (m, code) {\n\t\t\tcode = code.toLowerCase();\n\n\t\t\tif (code[0] === '#') {\n\t\t\t\tvar value;\n\t\t\t\tif (code[1] === 'x') {\n\t\t\t\t\tvalue = parseInt(code.slice(2), 16);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = Number(code.slice(1));\n\t\t\t\t}\n\n\t\t\t\treturn fromCodePoint(value);\n\t\t\t} else {\n\t\t\t\tvar known = KNOWN_ENTITY_NAMES[code];\n\t\t\t\tif (known) {\n\t\t\t\t\treturn known;\n\t\t\t\t}\n\n\t\t\t\t// unable to decode\n\t\t\t\treturn m;\n\t\t\t}\n\t\t});\n\n\t\treturn text;\n\t}\n\n\tPrism.languages.md = Prism.languages.markdown;\n\n}(Prism));\n","Prism.languages.python = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])#.*/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string-interpolation': {\n\t\tpattern: /(?:f|fr|rf)(?:(\"\"\"|''')[\\s\\S]*?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2)/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\t// \"{\" <expression> <optional \"!s\", \"!r\", or \"!a\"> <optional \":\" format specifier> \"}\"\n\t\t\t\tpattern: /((?:^|[^{])(?:\\{\\{)*)\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}])+\\})+\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'format-spec': {\n\t\t\t\t\t\tpattern: /(:)[^:(){}]+(?=\\}$)/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'conversion-option': {\n\t\t\t\t\t\tpattern: /![sra](?=[:}]$)/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: null\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'triple-quoted-string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"\"\"|''')[\\s\\S]*?\\1/i,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\t'string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/i,\n\t\tgreedy: true\n\t},\n\t'function': {\n\t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/g,\n\t\tlookbehind: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\bclass\\s+)\\w+/i,\n\t\tlookbehind: true\n\t},\n\t'decorator': {\n\t\tpattern: /(^[\\t ]*)@\\w+(?:\\.\\w+)*/m,\n\t\tlookbehind: true,\n\t\talias: ['annotation', 'punctuation'],\n\t\tinside: {\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\t'keyword': /\\b(?:_(?=\\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\\b/,\n\t'builtin': /\\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\\b/,\n\t'boolean': /\\b(?:False|None|True)\\b/,\n\t'number': /\\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\\b|(?:\\b\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\B\\.\\d+(?:_\\d+)*)(?:e[+-]?\\d+(?:_\\d+)*)?j?(?!\\w)/i,\n\t'operator': /[-+%=]=?|!=|:=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\nPrism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;\n\nPrism.languages.py = Prism.languages.python;\n","Prism.languages.sql = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:--|\\/\\/|#).*)/,\n\t\tlookbehind: true\n\t},\n\t'variable': [\n\t\t{\n\t\t\tpattern: /@([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])+\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t/@[\\w.$]+/\n\t],\n\t'string': {\n\t\tpattern: /(^|[^@\\\\])(\"|')(?:\\\\[\\s\\S]|(?!\\2)[^\\\\]|\\2\\2)*\\2/,\n\t\tgreedy: true,\n\t\tlookbehind: true\n\t},\n\t'identifier': {\n\t\tpattern: /(^|[^@\\\\])`(?:\\\\[\\s\\S]|[^`\\\\]|``)*`/,\n\t\tgreedy: true,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /^`|`$/\n\t\t}\n\t},\n\t'function': /\\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\\s*\\()/i, // Should we highlight user defined functions too?\n\t'keyword': /\\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\\b/i,\n\t'boolean': /\\b(?:FALSE|NULL|TRUE)\\b/i,\n\t'number': /\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+\\b/i,\n\t'operator': /[-+*\\/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\\b/i,\n\t'punctuation': /[;[\\]()`,.]/\n};\n","Prism.languages.c = Prism.languages.extend('clike', {\n\t'comment': {\n\t\tpattern: /\\/\\/(?:[^\\r\\n\\\\]|\\\\(?:\\r\\n?|\\n|(?![\\r\\n])))*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\t// https://en.cppreference.com/w/c/language/string_literal\n\t\tpattern: /\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:enum|struct)\\s+(?:__attribute__\\s*\\(\\([\\s\\S]*?\\)\\)\\s*)?)\\w+|\\b[a-z]\\w*_t\\b/,\n\t\tlookbehind: true\n\t},\n\t'keyword': /\\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'number': /(?:\\b0x(?:[\\da-f]+(?:\\.[\\da-f]*)?|\\.[\\da-f]+)(?:p[+-]?\\d+)?|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[ful]{0,4}/i,\n\t'operator': />>=?|<<=?|->|([-+&|:])\\1|[?:~]|[-+*/%&|^!=<>]=?/\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'char': {\n\t\t// https://en.cppreference.com/w/c/language/character_constant\n\t\tpattern: /'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n]){0,32}'/,\n\t\tgreedy: true\n\t}\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'macro': {\n\t\t// allow for multiline macro definitions\n\t\t// spaces after the # character compile fine with gcc\n\t\tpattern: /(^[\\t ]*)#\\s*[a-z](?:[^\\r\\n\\\\/]|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|\\\\(?:\\r\\n|[\\s\\S]))*/im,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'string': [\n\t\t\t\t{\n\t\t\t\t\t// highlight the path of the include statement as a string\n\t\t\t\t\tpattern: /^(#\\s*include\\s*)<[^>]+>/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\tPrism.languages.c['string']\n\t\t\t],\n\t\t\t'char': Prism.languages.c['char'],\n\t\t\t'comment': Prism.languages.c['comment'],\n\t\t\t'macro-name': [\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?!\\()/i,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?=\\()/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'function'\n\t\t\t\t}\n\t\t\t],\n\t\t\t// highlight macro directives as keywords\n\t\t\t'directive': {\n\t\t\t\tpattern: /^(#\\s*)[a-z]+/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t'directive-hash': /^#/,\n\t\t\t'punctuation': /##|\\\\(?=[\\r\\n])/,\n\t\t\t'expression': {\n\t\t\t\tpattern: /\\S[\\s\\S]*/,\n\t\t\t\tinside: Prism.languages.c\n\t\t\t}\n\t\t}\n\t}\n});\n\nPrism.languages.insertBefore('c', 'function', {\n\t// highlight predefined macros as constants\n\t'constant': /\\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\\b/\n});\n\ndelete Prism.languages.c['boolean'];\n","Prism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n","Prism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n","\n/* **********************************************\n     Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (document.currentScript && document.currentScript.tagName === 'SCRIPT' && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","// https://www.json.org/json-en.html\nPrism.languages.json = {\n\t'property': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?!\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'number': /-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n\t'punctuation': /[{}[\\],]/,\n\t'operator': /:/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'null': {\n\t\tpattern: /\\bnull\\b/,\n\t\talias: 'keyword'\n\t}\n};\n\nPrism.languages.webmanifest = Prism.languages.json;\n","Prism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n","(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n","(function (Prism) {\n\n\tvar keyword = /\\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\\b/;\n\tvar modName = /\\b(?!<keyword>)\\w+(?:\\s*\\.\\s*\\w+)*\\b/.source.replace(/<keyword>/g, function () { return keyword.source; });\n\n\tPrism.languages.cpp = Prism.languages.extend('c', {\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\b(?:class|concept|enum|struct|typename)\\s+)(?!<keyword>)\\w+/.source\n\t\t\t\t\t.replace(/<keyword>/g, function () { return keyword.source; })),\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t// This is intended to capture the class name of method implementations like:\n\t\t\t//   void foo::bar() const {}\n\t\t\t// However! The `foo` in the above example could also be a namespace, so we only capture the class name if\n\t\t\t// it starts with an uppercase letter. This approximation should give decent results.\n\t\t\t/\\b[A-Z]\\w*(?=\\s*::\\s*\\w+\\s*\\()/,\n\t\t\t// This will capture the class name before destructors like:\n\t\t\t//   Foo::~Foo() {}\n\t\t\t/\\b[A-Z_]\\w*(?=\\s*::\\s*~\\w+\\s*\\()/i,\n\t\t\t// This also intends to capture the class name of method implementations but here the class has template\n\t\t\t// parameters, so it can't be a namespace (until C++ adds generic namespaces).\n\t\t\t/\\b\\w+(?=\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\\s*::\\s*\\w+\\s*\\()/\n\t\t],\n\t\t'keyword': keyword,\n\t\t'number': {\n\t\t\tpattern: /(?:\\b0b[01']+|\\b0x(?:[\\da-f']+(?:\\.[\\da-f']*)?|\\.[\\da-f']+)(?:p[+-]?[\\d']+)?|(?:\\b[\\d']+(?:\\.[\\d']*)?|\\B\\.[\\d']+)(?:e[+-]?[\\d']+)?)[ful]{0,4}/i,\n\t\t\tgreedy: true\n\t\t},\n\t\t'operator': />>=?|<<=?|->|--|\\+\\+|&&|\\|\\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'string', {\n\t\t'module': {\n\t\t\t// https://en.cppreference.com/w/cpp/language/modules\n\t\t\tpattern: RegExp(\n\t\t\t\t/(\\b(?:import|module)\\s+)/.source +\n\t\t\t\t'(?:' +\n\t\t\t\t// header-name\n\t\t\t\t/\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|<[^<>\\r\\n]*>/.source +\n\t\t\t\t'|' +\n\t\t\t\t// module name or partition or both\n\t\t\t\t/<mod-name>(?:\\s*:\\s*<mod-name>)?|:\\s*<mod-name>/.source.replace(/<mod-name>/g, function () { return modName; }) +\n\t\t\t\t')'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'string': /^[<\"][\\s\\S]+/,\n\t\t\t\t'operator': /:/,\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t},\n\t\t'raw-string': {\n\t\t\tpattern: /R\"([^()\\\\ ]{0,16})\\([\\s\\S]*?\\)\\1\"/,\n\t\t\talias: 'string',\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'keyword', {\n\t\t'generic-function': {\n\t\t\tpattern: /\\b(?!operator\\b)[a-z_]\\w*\\s*<(?:[^<>]|<[^<>]*>)*>(?=\\s*\\()/i,\n\t\t\tinside: {\n\t\t\t\t'function': /^\\w+/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/,\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: Prism.languages.cpp\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'operator', {\n\t\t'double-colon': {\n\t\t\tpattern: /::/,\n\t\t\talias: 'punctuation'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'class-name', {\n\t\t// the base clause is an optional list of parent classes\n\t\t// https://en.cppreference.com/w/cpp/language/class\n\t\t'base-clause': {\n\t\t\tpattern: /(\\b(?:class|struct)\\s+\\w+\\s*:\\s*)[^;{}\"'\\s]+(?:\\s+[^;{}\"'\\s]+)*(?=\\s*[;{])/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: Prism.languages.extend('cpp', {})\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('inside', 'double-colon', {\n\t\t// All untokenized words that are not namespaces should be class names\n\t\t'class-name': /\\b[a-z_]\\w*\\b(?!\\s*::)/i\n\t}, Prism.languages.cpp['base-clause']);\n\n}(Prism));\n","(function (Prism) {\n\n\tPrism.languages.typescript = Prism.languages.extend('javascript', {\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|type)\\s+)(?!keyof\\b)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?:\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: null // see below\n\t\t},\n\t\t'builtin': /\\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\\b/,\n\t});\n\n\t// The keywords TypeScript adds to JavaScript\n\tPrism.languages.typescript.keyword.push(\n\t\t/\\b(?:abstract|declare|is|keyof|readonly|require)\\b/,\n\t\t// keywords that have to be followed by an identifier\n\t\t/\\b(?:asserts|infer|interface|module|namespace|type)\\b(?=\\s*(?:[{_$a-zA-Z\\xA0-\\uFFFF]|$))/,\n\t\t// This is for `import type *, {}`\n\t\t/\\btype\\b(?=\\s*(?:[\\{*]|$))/\n\t);\n\n\t// doesn't work with TS because TS is too complex\n\tdelete Prism.languages.typescript['parameter'];\n\tdelete Prism.languages.typescript['literal-property'];\n\n\t// a version of typescript specifically for highlighting types\n\tvar typeInside = Prism.languages.extend('typescript', {});\n\tdelete typeInside['class-name'];\n\n\tPrism.languages.typescript['class-name'].inside = typeInside;\n\n\tPrism.languages.insertBefore('typescript', 'function', {\n\t\t'decorator': {\n\t\t\tpattern: /@[$\\w\\xA0-\\uFFFF]+/,\n\t\t\tinside: {\n\t\t\t\t'at': {\n\t\t\t\t\tpattern: /^@/,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t},\n\t\t\t\t'function': /^[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'generic-function': {\n\t\t\t// e.g. foo<T extends \"bar\" | \"baz\">( ...\n\t\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\\s*\\()/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/, // everything after the first <\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: typeInside\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.ts = Prism.languages.typescript;\n\n}(Prism));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Prism from \"prismjs\";\nimport \"prismjs/components/prism-markup.js\";\nimport \"prismjs/components/prism-css.js\";\nimport \"prismjs/components/prism-clike.js\";\nimport \"prismjs/components/prism-javascript.js\";\nimport \"prismjs/components/prism-c.js\";\nimport \"prismjs/components/prism-cpp.js\";\nimport \"prismjs/components/prism-markdown.js\";\nimport \"prismjs/components/prism-json.js\";\nimport \"prismjs/components/prism-sql.js\";\nimport \"prismjs/components/prism-python.js\";\nimport \"prismjs/components/prism-typescript.js\";\n\nexport function runTest(samples) {\n  const results = [];\n  for (const { content, lang } of samples) {\n    const highlighted = Prism.highlight(content, Prism.languages[lang], lang);\n    results.push({\n      html: highlighted,\n    });\n  }\n  return results;\n}\n"],"names":["Prism","inner","source","createInline","pattern","replace","RegExp","tableCell","tableRow","tableLine","languages","markdown","extend","insertBefore","lookbehind","greedy","inside","alias","yaml","punctuation","forEach","token","content","hooks","add","env","language","walkTokens","tokens","i","l","length","type","codeLang","codeBlock","lang","exec","toLowerCase","push","classes","cls","match","html","grammar","highlight","tagPattern","m","code","value","parseInt","slice","Number","fromCodePoint","known","KNOWN_ENTITY_NAMES","plugins","autoloader","id","Date","valueOf","Math","floor","random","attributes","loadLanguages","ele","document","getElementById","innerHTML","textContent","markup","tag","String","fromCharCode","md","python","rest","py","sql","c","javascript","clike","regex","addInlined","addAttribute","js","_self","uniqueId","plainTextGrammar","_","manual","disableWorkerMessageHandler","util","encode","Token","Array","isArray","map","o","Object","prototype","toString","call","objId","obj","defineProperty","clone","deepClone","visited","key","hasOwnProperty","v","getLanguage","element","className","parentElement","setLanguage","classList","currentScript","tagName","Error","err","src","stack","scripts","getElementsByTagName","isActive","defaultActivation","no","contains","plain","plaintext","text","txt","redef","before","insert","root","ret","newToken","old","DFS","this","callback","property","propertyType","highlightAll","async","highlightAllUnder","container","selector","run","elements","apply","querySelectorAll","highlightElement","parent","nodeName","insertHighlightedCode","highlightedCode","hasAttribute","setAttribute","Worker","worker","filename","onmessage","evt","data","postMessage","JSON","stringify","immediateClose","tokenize","tokenList","LinkedList","addAfter","head","matchGrammar","list","array","node","next","tail","toArray","all","name","callbacks","matchedStr","matchPattern","pos","lastIndex","lookbehindLength","index","startNode","startPos","rematch","patterns","j","cause","patternObj","global","flags","currentNode","reach","str","removeCount","from","to","p","k","matchStr","after","removeFrom","prev","removeRange","nestedRematch","newNode","count","s","e","aliases","join","addEventListener","message","parse","close","script","highlightAutomaticallyCallback","readyState","defer","window","requestAnimationFrame","setTimeout","WorkerGlobalScope","self","module","exports","includedCdataInside","def","attrName","mathml","svg","xml","ssml","atom","rss","string","css","Element","matches","msMatchesSelector","webkitMatchesSelector","EXTENSIONS","SELECTOR","pre","appendChild","createElement","getAttribute","extension","success","error","xhr","XMLHttpRequest","open","onreadystatechange","status","responseText","statusText","send","loadFile","range","start","comma","end","undefined","parseRange","lines","split","max","min","fileHighlight","logged","console","warn","arguments","json","webmanifest","keyword","modName","cpp","typescript","typeInside","ts","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","enumerable","get","g","globalThis","Function","prop","r","Symbol","toStringTag","runTest","samples","results","highlighted"],"sourceRoot":""}
\ No newline at end of file
diff --git a/prismjs/dist/bundle.es5.min.js b/prismjs/dist/bundle.es5.min.js
new file mode 100644
index 0000000..8be0fd8
--- /dev/null
+++ b/prismjs/dist/bundle.es5.min.js
@@ -0,0 +1,145 @@
+/*! For license information please see bundle.es5.min.js.LICENSE.txt */
+!function(){var e={19:function(){!function(e){
+/*ThouShaltNotCache*/
+var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){
+/*ThouShaltNotCache*/
+return e=e.replace(/<inner>/g,function(){
+/*ThouShaltNotCache*/
+return t}),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var a=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,r=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){
+/*ThouShaltNotCache*/
+return a}),s=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+r+s+"(?:"+r+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+r+s+")(?:"+r+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(a),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+r+")"+s+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+r+"$"),inside:{"table-header":{pattern:RegExp(a),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(t){
+/*ThouShaltNotCache*/
+["url","bold","italic","strike","code-snippet"].forEach(function(n){
+/*ThouShaltNotCache*/
+t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])})}),e.hooks.add("after-tokenize",function(e){
+/*ThouShaltNotCache*/
+"markdown"!==e.language&&"md"!==e.language||function e(t){
+/*ThouShaltNotCache*/
+if(t&&"string"!=typeof t)for(var n=0,a=t.length;n<a;n++){var r=t[n];if("code"===r.type){var s=r.content[1],i=r.content[3];if(s&&i&&"code-language"===s.type&&"code-block"===i.type&&"string"==typeof s.content){var o=s.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),l="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,l]:i.alias.push(l):i.alias=[l]}}else e(r.content)}}(e.tokens)}),e.hooks.add("wrap",function(t){
+/*ThouShaltNotCache*/
+if("code-block"===t.type){for(var n="",a=0,r=t.classes.length;a<r;a++){var s=t.classes[a],u=/language-(.+)/.exec(s);if(u){n=u[1];break}}var c,g=e.languages[n];if(g)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(e,t){var n;if("#"===(
+/*ThouShaltNotCache*/
+t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n);var a=o[t];return a||e})),g,n);else if(n&&"none"!==n&&e.plugins.autoloader){var d="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=d,e.plugins.autoloader.loadLanguages(n,function(){
+/*ThouShaltNotCache*/
+var t=document.getElementById(d);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))})}}});var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),o={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(Prism)},44:function(){Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},244:function(){Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}},421:function(){Prism.languages.c=Prism.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],char:Prism.languages.c.char,comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}}}),Prism.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete Prism.languages.c.boolean},613:function(){Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),Prism.languages.js=Prism.languages.javascript},634:function(){Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}},642:function(e,t,n){var a=function(e){
+/*ThouShaltNotCache*/
+var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,a={},r={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){
+/*ThouShaltNotCache*/
+return t instanceof s?new s(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){
+/*ThouShaltNotCache*/
+return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){
+/*ThouShaltNotCache*/
+return e.__id||Object.defineProperty(e,"__id",{value:++n}),e.__id},clone:function e(t,n){var a,s;switch(
+/*ThouShaltNotCache*/
+n=n||{},r.util.type(t)){case"Object":if(s=r.util.objId(t),n[s])return n[s];for(var i in a={},n[s]=a,t)t.hasOwnProperty(i)&&(a[i]=e(t[i],n));return a;case"Array":return s=r.util.objId(t),n[s]?n[s]:(a=[],n[s]=a,t.forEach(function(t,r){
+/*ThouShaltNotCache*/
+a[r]=e(t,n)}),a);default:return t}},getLanguage:function(e){
+/*ThouShaltNotCache*/
+for(;e;){var n=t.exec(e.className);if(n)return n[1].toLowerCase();e=e.parentElement}return"none"},setLanguage:function(e,n){
+/*ThouShaltNotCache*/
+e.className=e.className.replace(RegExp(t,"gi"),""),e.classList.add("language-"+n)},currentScript:function(){
+/*ThouShaltNotCache*/
+if("undefined"==typeof document)return null;if(document.currentScript&&"SCRIPT"===document.currentScript.tagName)return document.currentScript;try{throw new Error}catch(a){var e=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(a.stack)||[])[1];if(e){var t=document.getElementsByTagName("script");for(var n in t)if(t[n].src==e)return t[n]}return null}},isActive:function(e,t,n){for(
+/*ThouShaltNotCache*/
+var a="no-"+t;e;){var r=e.classList;if(r.contains(t))return!0;if(r.contains(a))return!1;e=e.parentElement}return!!n}},languages:{plain:a,plaintext:a,text:a,txt:a,extend:function(e,t){
+/*ThouShaltNotCache*/
+var n=r.util.clone(r.languages[e]);for(var a in t)n[a]=t[a];return n},insertBefore:function(e,t,n,a){var s=(
+/*ThouShaltNotCache*/
+a=a||r.languages)[e],i={};for(var o in s)if(s.hasOwnProperty(o)){if(o==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(o)||(i[o]=s[o])}var u=a[e];return a[e]=i,r.languages.DFS(r.languages,function(t,n){
+/*ThouShaltNotCache*/
+n===u&&t!=e&&(this[t]=i)}),i},DFS:function e(t,n,a,s){
+/*ThouShaltNotCache*/
+s=s||{};var i=r.util.objId;for(var o in t)if(t.hasOwnProperty(o)){n.call(t,o,t[o],a||o);var l=t[o],u=r.util.type(l);"Object"!==u||s[i(l)]?"Array"!==u||s[i(l)]||(s[i(l)]=!0,e(l,n,o,s)):(s[i(l)]=!0,e(l,n,null,s))}}},plugins:{},highlightAll:function(e,t){
+/*ThouShaltNotCache*/
+r.highlightAllUnder(document,e,t)},highlightAllUnder:function(e,t,n){
+/*ThouShaltNotCache*/
+var a={callback:n,container:e,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};r.hooks.run("before-highlightall",a),a.elements=Array.prototype.slice.apply(a.container.querySelectorAll(a.selector)),r.hooks.run("before-all-elements-highlight",a);for(var s,i=0;s=a.elements[i++];)r.highlightElement(s,!0===t,a.callback)},highlightElement:function(t,n,a){
+/*ThouShaltNotCache*/
+var s=r.util.getLanguage(t),i=r.languages[s];r.util.setLanguage(t,s);var o=t.parentElement;o&&"pre"===o.nodeName.toLowerCase()&&r.util.setLanguage(o,s);var l={element:t,language:s,grammar:i,code:t.textContent};function u(e){
+/*ThouShaltNotCache*/
+l.highlightedCode=e,r.hooks.run("before-insert",l),l.element.innerHTML=l.highlightedCode,r.hooks.run("after-highlight",l),r.hooks.run("complete",l),a&&a.call(l.element)}if(r.hooks.run("before-sanity-check",l),(o=l.element.parentElement)&&"pre"===o.nodeName.toLowerCase()&&!o.hasAttribute("tabindex")&&o.setAttribute("tabindex","0"),!l.code)return r.hooks.run("complete",l),void(a&&a.call(l.element));if(r.hooks.run("before-highlight",l),l.grammar)if(n&&e.Worker){var c=new Worker(r.filename);c.onmessage=function(e){
+/*ThouShaltNotCache*/
+u(e.data)},c.postMessage(JSON.stringify({language:l.language,code:l.code,immediateClose:!0}))}else u(r.highlight(l.code,l.grammar,l.language));else u(r.util.encode(l.code))},highlight:function(e,t,n){
+/*ThouShaltNotCache*/
+var a={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),s.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){
+/*ThouShaltNotCache*/
+var n=t.rest;if(n){for(var a in n)t[a]=n[a];delete t.rest}var r=new l;return u(r,r.head,e),o(e,r,t,r.head,0),function(e){
+/*ThouShaltNotCache*/
+var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(r)},hooks:{all:{},add:function(e,t){
+/*ThouShaltNotCache*/
+var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){
+/*ThouShaltNotCache*/
+var n=r.hooks.all[e];if(n&&n.length)for(var a,s=0;a=n[s++];)a(t)}},Token:s};function s(e,t,n,a){
+/*ThouShaltNotCache*/
+this.type=e,this.content=t,this.alias=n,this.length=0|(a||"").length}function i(e,t,n,a){
+/*ThouShaltNotCache*/
+e.lastIndex=t;var r=e.exec(n);if(r&&a&&r[1]){var s=r[1].length;r.index+=s,r[0]=r[0].slice(s)}return r}function o(e,t,n,a,l,g){
+/*ThouShaltNotCache*/
+for(var d in n)if(n.hasOwnProperty(d)&&n[d]){var p=n[d];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(g&&g.cause==d+","+m)return;var f=p[m],b=f.inside,h=!!f.lookbehind,E=!!f.greedy,y=f.alias;if(E&&!f.pattern.global){var A=f.pattern.toString().match(/[imsuy]*$/)[0];f.pattern=RegExp(f.pattern.source,A+"g")}for(var F=f.pattern||f,k=a.next,S=l;k!==t.tail&&!(g&&S>=g.reach);S+=k.value.length,k=k.next){var T=k.value;if(t.length>e.length)return;if(!(T instanceof s)){var v,w=1;if(E){if(!(v=i(F,S,e,h))||v.index>=e.length)break;var x=v.index,I=v.index+v[0].length,R=S;for(R+=k.value.length;x>=R;)R+=(k=k.next).value.length;if(S=R-=k.value.length,k.value instanceof s)continue;for(var _=k;_!==t.tail&&(R<I||"string"==typeof _.value);_=_.next)w++,R+=_.value.length;w--,T=e.slice(S,R),v.index-=S}else if(!(v=i(F,0,T,h)))continue;x=v.index;var N=v[0],O=T.slice(0,x),L=T.slice(x+N.length),P=S+T.length;g&&P>g.reach&&(g.reach=P);var C=k.prev;if(O&&(C=u(t,C,O),S+=O.length),c(t,C,w),k=u(t,C,new s(d,b?r.tokenize(N,b):N,y,N)),L&&u(t,k,L),w>1){var $={cause:d+","+m,reach:P};o(e,t,n,k.prev,S,$),g&&$.reach>g.reach&&(g.reach=$.reach)}}}}}}function l(){
+/*ThouShaltNotCache*/
+var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function u(e,t,n){
+/*ThouShaltNotCache*/
+var a=t.next,r={value:n,prev:t,next:a};return t.next=r,a.prev=r,e.length++,r}function c(e,t,n){for(
+/*ThouShaltNotCache*/
+var a=t.next,r=0;r<n&&a!==e.tail;r++)a=a.next;t.next=a,a.prev=t,e.length-=r}if(e.Prism=r,s.stringify=function e(t,n){
+/*ThouShaltNotCache*/
+if("string"==typeof t)return t;if(Array.isArray(t)){var a="";return t.forEach(function(t){
+/*ThouShaltNotCache*/
+a+=e(t,n)}),a}var s={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(s.classes,i):s.classes.push(i)),r.hooks.run("wrap",s);var o="";for(var l in s.attributes)o+=" "+l+'="'+(s.attributes[l]||"").replace(/"/g,"&quot;")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'"'+o+">"+s.content+"</"+s.tag+">"},!e.document)return e.addEventListener?(r.disableWorkerMessageHandler||e.addEventListener("message",function(t){
+/*ThouShaltNotCache*/
+var n=JSON.parse(t.data),a=n.language,s=n.code,i=n.immediateClose;e.postMessage(r.highlight(s,r.languages[a],a)),i&&e.close()},!1),r):r;var g=r.util.currentScript();function d(){
+/*ThouShaltNotCache*/
+r.manual||r.highlightAll()}if(g&&(r.filename=g.src,g.hasAttribute("data-manual")&&(r.manual=!0)),!r.manual){var p=document.readyState;"loading"===p||"interactive"===p&&g&&g.defer?document.addEventListener("DOMContentLoaded",d):window.requestAnimationFrame?window.requestAnimationFrame(d):window.setTimeout(d,16)}return r}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});e.exports&&(e.exports=a),void 0!==n.g&&(n.g.Prism=a),a.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",function(e){
+/*ThouShaltNotCache*/
+"entity"===e.type&&(e.attributes.title=e.content.replace(/&amp;/,"&"))}),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){
+/*ThouShaltNotCache*/
+var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var s={};s[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){
+/*ThouShaltNotCache*/
+return e}),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",s)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){
+/*ThouShaltNotCache*/
+a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){
+/*ThouShaltNotCache*/
+var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),a.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(){
+/*ThouShaltNotCache*/
+if(void 0!==a&&"undefined"!=typeof document){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var e={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},t="data-src-status",n="loading",r="loaded",s="pre[data-src]:not(["+t+'="'+r+'"]):not(['+t+'="'+n+'"])';a.hooks.add("before-highlightall",function(e){
+/*ThouShaltNotCache*/
+e.selector+=", "+s}),a.hooks.add("before-sanity-check",function(i){
+/*ThouShaltNotCache*/
+var o=i.element;if(o.matches(s)){i.code="",o.setAttribute(t,n);var l=o.appendChild(document.createElement("CODE"));l.textContent="Loading\u2026";var u=o.getAttribute("data-src"),c=i.language;if("none"===c){var g=(/\.(\w+)$/.exec(u)||[,"none"])[1];c=e[g]||g}a.util.setLanguage(l,c),a.util.setLanguage(o,c);var d=a.plugins.autoloader;d&&d.loadLanguages(c),function(e,t,n){
+/*ThouShaltNotCache*/
+var a=new XMLHttpRequest;a.open("GET",e,!0),a.onreadystatechange=function(){
+/*ThouShaltNotCache*/
+4==a.readyState&&(a.status<400&&a.responseText?t(a.responseText):a.status>=400?n("\u2716 Error "+a.status+" while fetching file: "+a.statusText):n("\u2716 Error: File does not exist or is empty"))},a.send(null)}(u,function(e){
+/*ThouShaltNotCache*/
+o.setAttribute(t,r);var n=function(e){
+/*ThouShaltNotCache*/
+var t=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(e||"");if(t){var n=Number(t[1]),a=t[2],r=t[3];return a?r?[n,Number(r)]:[n,void 0]:[n,n]}}(o.getAttribute("data-range"));if(n){var s=e.split(/\r\n?|\n/g),i=n[0],u=null==n[1]?s.length:n[1];i<0&&(i+=s.length),i=Math.max(0,Math.min(i-1,s.length)),u<0&&(u+=s.length),u=Math.max(0,Math.min(u,s.length)),e=s.slice(i,u).join("\n"),o.hasAttribute("data-start")||o.setAttribute("data-start",String(i+1))}l.textContent=e,a.highlightElement(l)},function(e){
+/*ThouShaltNotCache*/
+o.setAttribute(t,"failed"),l.textContent=e})}}),a.plugins.fileHighlight={highlight:function(e){for(
+/*ThouShaltNotCache*/
+var t,n=(e||document).querySelectorAll(s),r=0;t=n[r++];)a.highlightElement(t)}};var i=!1;a.fileHighlight=function(){
+/*ThouShaltNotCache*/
+i||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),i=!0),a.plugins.fileHighlight.highlight.apply(this,arguments)}}}()},648:function(){Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},694:function(){Prism.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(e){
+/*ThouShaltNotCache*/
+"entity"===e.type&&(e.attributes.title=e.content.replace(/&amp;/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(e,t){
+/*ThouShaltNotCache*/
+var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Prism.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var a={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};a["language-"+t]={pattern:/[\s\S]+/,inside:Prism.languages[t]};var r={};r[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){
+/*ThouShaltNotCache*/
+return e}),"i"),lookbehind:!0,greedy:!0,inside:a},Prism.languages.insertBefore("markup","cdata",r)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(e,t){
+/*ThouShaltNotCache*/
+Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:Prism.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml},871:function(){!function(e){
+/*ThouShaltNotCache*/
+var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(Prism)},893:function(){!function(e){
+/*ThouShaltNotCache*/
+var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,function(){
+/*ThouShaltNotCache*/
+return t.source});e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,function(){
+/*ThouShaltNotCache*/
+return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,function(){
+/*ThouShaltNotCache*/
+return n})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism)},973:function(){!function(e){
+/*ThouShaltNotCache*/
+e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(Prism)}},t={};function n(a){var r=t[a];if(void 0!==r)return r.exports;var s=t[a]={exports:{}};return e[a](s,s.exports,n),s.exports}n.d=function(e,t){for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};!function(){"use strict";n.r(a),n.d(a,{runTest:function(){return t}});var e=n(642);n(694),n(871),n(634),n(613),n(421),n(893),n(19),n(648),n(244),n(44),n(973);function t(t){
+/*ThouShaltNotCache*/
+const n=[];for(const{content:a,lang:r}of t){const t=e.highlight(a,e.languages[r],r);n.push({html:t})}return n}}(),PrismJSBenchmark=a}();
+//# sourceMappingURL=bundle.es5.min.js.map
\ No newline at end of file
diff --git a/prismjs/dist/bundle.es5.min.js.LICENSE.txt b/prismjs/dist/bundle.es5.min.js.LICENSE.txt
new file mode 100644
index 0000000..0285de9
--- /dev/null
+++ b/prismjs/dist/bundle.es5.min.js.LICENSE.txt
@@ -0,0 +1,8 @@
+/**
+ * Prism: Lightweight, robust, elegant syntax highlighting
+ *
+ * @license MIT <https://opensource.org/licenses/MIT>
+ * @author Lea Verou <https://lea.verou.me>
+ * @namespace
+ * @public
+ */
diff --git a/prismjs/dist/bundle.es5.min.js.map b/prismjs/dist/bundle.es5.min.js.map
new file mode 100644
index 0000000..b922883
--- /dev/null
+++ b/prismjs/dist/bundle.es5.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"bundle.es5.min.js","mappings":";kCAAC,SAAUA;;AAGV,IAAIC,EAAQ,2CAA2CC,OAYvD,SAASC,EAAaC;;AAErB,OADAA,EAAUA,EAAQC,QAAQ,WAAY;;AAAc,OAAOJ,CAAO,GAC3DK,OAAO,0BAA0BJ,OAAS,MAAQE,EAAU,IACpE,CAGA,IAAIG,EAAY,4DAA4DL,OACxEM,EAAW,+CAA+CN,OAAOG,QAAQ,MAAO;;AAAc,OAAOE,CAAW,GAChHE,EAAY,sEAAsEP,OAGtFF,EAAMU,UAAUC,SAAWX,EAAMU,UAAUE,OAAO,SAAU,CAAC,GAC7DZ,EAAMU,UAAUG,aAAa,WAAY,SAAU,CAClD,qBAAsB,CACrBT,QAAS,kDACTU,YAAY,EACZC,QAAQ,EACRC,OAAQ,CACP,YAAe,YACf,eAAgB,CACfZ,QAAS,iBACTa,MAAO,CAAC,OAAQ,iBAChBD,OAAQhB,EAAMU,UAAUQ,QAI3B,WAAc,CAEbd,QAAS,kBACTa,MAAO,eAER,MAAS,CACRb,QAASE,OAAO,IAAME,EAAWC,EAAY,MAAQD,EAAW,KAAM,KACtEQ,OAAQ,CACP,kBAAmB,CAClBZ,QAASE,OAAO,KAAOE,EAAWC,EAAY,OAASD,EAAW,OAClEM,YAAY,EACZE,OAAQ,CACP,aAAc,CACbZ,QAASE,OAAOC,GAChBS,OAAQhB,EAAMU,UAAUC,UAEzB,YAAe,OAGjB,aAAc,CACbP,QAASE,OAAO,KAAOE,EAAW,IAAMC,EAAY,KACpDK,YAAY,EACZE,OAAQ,CACP,YAAe,iBAGjB,mBAAoB,CACnBZ,QAASE,OAAO,IAAME,EAAW,KACjCQ,OAAQ,CACP,eAAgB,CACfZ,QAASE,OAAOC,GAChBU,MAAO,YACPD,OAAQhB,EAAMU,UAAUC,UAEzB,YAAe,SAKnB,KAAQ,CACP,CAECP,QAAS,uFACTU,YAAY,EACZG,MAAO,WAER,CAICb,QAAS,qBACTW,QAAQ,EACRC,OAAQ,CACP,aAAc,CACbZ,QAAS,qDACTU,YAAY,GAEb,gBAAiB,CAChBV,QAAS,WACTU,YAAY,GAEb,YAAe,SAIlB,MAAS,CACR,CAMCV,QAAS,0CACTa,MAAO,YACPD,OAAQ,CACPG,YAAa,cAGf,CAGCf,QAAS,aACTU,YAAY,EACZG,MAAO,YACPD,OAAQ,CACPG,YAAa,aAIhB,GAAM,CAKLf,QAAS,wCACTU,YAAY,EACZG,MAAO,eAER,KAAQ,CAKPb,QAAS,mCACTU,YAAY,EACZG,MAAO,eAER,gBAAiB,CAKhBb,QAAS,qHACTY,OAAQ,CACP,SAAY,CACXZ,QAAS,gBACTU,YAAY,GAEb,OAAU,+DACV,YAAe,kBAEhBG,MAAO,OAER,KAAQ,CAKPb,QAASD,EAAa,kGAAkGD,QACxHY,YAAY,EACZC,QAAQ,EACRC,OAAQ,CACP,QAAW,CACVZ,QAAS,sBACTU,YAAY,EACZE,OAAQ,CAAC,GAEV,YAAe,YAGjB,OAAU,CAKTZ,QAASD,EAAa,kGAAkGD,QACxHY,YAAY,EACZC,QAAQ,EACRC,OAAQ,CACP,QAAW,CACVZ,QAAS,oBACTU,YAAY,EACZE,OAAQ,CAAC,GAEV,YAAe,SAGjB,OAAU,CAITZ,QAASD,EAAa,2BAA2BD,QACjDY,YAAY,EACZC,QAAQ,EACRC,OAAQ,CACP,QAAW,CACVZ,QAAS,uBACTU,YAAY,EACZE,OAAQ,CAAC,GAEV,YAAe,QAGjB,eAAgB,CAGfZ,QAAS,mEACTU,YAAY,EACZC,QAAQ,EACRE,MAAO,CAAC,OAAQ,YAEjB,IAAO,CAINb,QAASD,EAAa,mGAAmGD,QACzHY,YAAY,EACZC,QAAQ,EACRC,OAAQ,CACP,SAAY,KACZ,QAAW,CACVZ,QAAS,oBACTU,YAAY,EACZE,OAAQ,CAAC,GAEV,SAAY,CACXZ,QAAS,6BACTU,YAAY,GAEb,IAAO,CACNV,QAAS,iBACTU,YAAY,GAEb,OAAU,CACTV,QAAS,oCACTU,YAAY,OAMhB,CAAC,MAAO,OAAQ,SAAU,UAAUM,QAAQ,SAAUC;;AACrD,CAAC,MAAO,OAAQ,SAAU,SAAU,gBAAgBD,QAAQ,SAAUJ;;AACjEK,IAAUL,IACbhB,EAAMU,UAAUC,SAASU,GAAOL,OAAOM,QAAQN,OAAOA,GAAUhB,EAAMU,UAAUC,SAASK,GAE3F,EACD,GAEAhB,EAAMuB,MAAMC,IAAI,iBAAkB,SAAUC;;AACtB,aAAjBA,EAAIC,UAA4C,OAAjBD,EAAIC,UAIvC,SAASC,EAAWC;;AACnB,GAAKA,GAA4B,iBAAXA,EAItB,IAAK,IAAIC,EAAI,EAAGC,EAAIF,EAAOG,OAAQF,EAAIC,EAAGD,IAAK,CAC9C,IAAIR,EAAQO,EAAOC,GAEnB,GAAmB,SAAfR,EAAMW,KAAV,CAmBA,IAAIC,EAAWZ,EAAMC,QAAQ,GACzBY,EAAYb,EAAMC,QAAQ,GAE9B,GAAIW,GAAYC,GACG,kBAAlBD,EAASD,MAA+C,eAAnBE,EAAUF,MACnB,iBAArBC,EAASX,QAAsB,CAKtC,IAAIa,EAAOF,EAASX,QAAQjB,QAAQ,OAAQ,SAASA,QAAQ,UAAW,MAGpEY,EAAQ,aADZkB,GAAQ,eAAeC,KAAKD,IAAS,CAAC,KAAK,GAAGE,eAIzCH,EAAUjB,MAEuB,iBAApBiB,EAAUjB,MAC3BiB,EAAUjB,MAAQ,CAACiB,EAAUjB,MAAOA,GAEpCiB,EAAUjB,MAAMqB,KAAKrB,GAJrBiB,EAAUjB,MAAQ,CAACA,EAMrB,CAvCA,MAFCU,EAAWN,EAAMC,QA0CnB,CACD,CAEAK,CAAWF,EAAIG,OAChB,GAEA5B,EAAMuB,MAAMC,IAAI,OAAQ,SAAUC;;AACjC,GAAiB,eAAbA,EAAIO,KAAR,CAKA,IADA,IAAIC,EAAW,GACNJ,EAAI,EAAGC,EAAIL,EAAIc,QAAQR,OAAQF,EAAIC,EAAGD,IAAK,CACnD,IAAIW,EAAMf,EAAIc,QAAQV,GAClBY,EAAQ,gBAAgBL,KAAKI,GACjC,GAAIC,EAAO,CACVR,EAAWQ,EAAM,GACjB,KACD,CACD,CAEA,IA4CoBC,EA5ChBC,EAAU3C,EAAMU,UAAUuB,GAE9B,GAAKU,EAaJlB,EAAIH,QAAUtB,EAAM4C,WA6BDF,EA7BuBjB,EAAIH,QA+BpCoB,EAAKrC,QAAQwC,EAAY,IAGxBxC,QAAQ,gCAAiC,SAAUyC,EAAGC,GAIhE,IAAIC,EADL,GAAgB;;AAFhBD,EAAOA,EAAKV,eAEH,GAQR,OALCW,EADe,MAAZD,EAAK,GACAE,SAASF,EAAKG,MAAM,GAAI,IAExBC,OAAOJ,EAAKG,MAAM,IAGpBE,EAAcJ,GAErB,IAAIK,EAAQC,EAAmBP,GAC/B,OAAIM,GAKGP,CAET,IAvDyDH,EAASV,QAZjE,GAAIA,GAAyB,SAAbA,GAAuBjC,EAAMuD,QAAQC,WAAY,CAChE,IAAIC,EAAK,OAAQ,IAAIC,MAAOC,UAAY,IAAMC,KAAKC,MAAsB,KAAhBD,KAAKE,UAC9DrC,EAAIsC,WAAe,GAAIN,EAEvBzD,EAAMuD,QAAQC,WAAWQ,cAAc/B,EAAU;;AAChD,IAAIgC,EAAMC,SAASC,eAAeV,GAC9BQ,IACHA,EAAIG,UAAYpE,EAAM4C,UAAUqB,EAAII,YAAarE,EAAMU,UAAUuB,GAAWA,GAE9E,EACD,CAzBD,CA6BD,GAEA,IAAIY,EAAavC,OAAON,EAAMU,UAAU4D,OAAOC,IAAInE,QAAQF,OAAQ,MAS/DoD,EAAqB,CACxB,IAAO,IACP,GAAM,IACN,GAAM,IACN,KAAQ,KAILF,EAAgBoB,OAAOpB,eAAiBoB,OAAOC,aAuCnDzE,EAAMU,UAAUgE,GAAK1E,EAAMU,UAAUC,QAErC,CA9ZA,CA8ZCX,M,gBC9ZFA,MAAMU,UAAUiE,OAAS,CACxB,QAAW,CACVvE,QAAS,eACTU,YAAY,EACZC,QAAQ,GAET,uBAAwB,CACvBX,QAAS,sEACTW,QAAQ,EACRC,OAAQ,CACP,cAAiB,CAEhBZ,QAAS,sFACTU,YAAY,EACZE,OAAQ,CACP,cAAe,CACdZ,QAAS,sBACTU,YAAY,GAEb,oBAAqB,CACpBV,QAAS,kBACTa,MAAO,eAER2D,KAAM,OAGR,OAAU,YAGZ,uBAAwB,CACvBxE,QAAS,uCACTW,QAAQ,EACRE,MAAO,UAER,OAAU,CACTb,QAAS,mDACTW,QAAQ,GAET,SAAY,CACXX,QAAS,4CACTU,YAAY,GAEb,aAAc,CACbV,QAAS,mBACTU,YAAY,GAEb,UAAa,CACZV,QAAS,2BACTU,YAAY,EACZG,MAAO,CAAC,aAAc,eACtBD,OAAQ,CACP,YAAe,OAGjB,QAAW,wNACX,QAAW,shBACX,QAAW,0BACX,OAAU,mJACV,SAAY,uDACZ,YAAe,iBAGhBhB,MAAMU,UAAUiE,OAAO,wBAAwB3D,OAAsB,cAAEA,OAAO4D,KAAO5E,MAAMU,UAAUiE,OAErG3E,MAAMU,UAAUmE,GAAK7E,MAAMU,UAAUiE,M,iBChErC3E,MAAMU,UAAUoE,IAAM,CACrB,QAAW,CACV1E,QAAS,gDACTU,YAAY,GAEb,SAAY,CACX,CACCV,QAAS,sCACTW,QAAQ,GAET,YAED,OAAU,CACTX,QAAS,kDACTW,QAAQ,EACRD,YAAY,GAEb,WAAc,CACbV,QAAS,sCACTW,QAAQ,EACRD,YAAY,EACZE,OAAQ,CACP,YAAe,UAGjB,SAAY,4FACZ,QAAW,u9EACX,QAAW,2BACX,OAAU,4CACV,SAAY,+HACZ,YAAe,c,iBC9BhBhB,MAAMU,UAAUqE,EAAI/E,MAAMU,UAAUE,OAAO,QAAS,CACnD,QAAW,CACVR,QAAS,sEACTW,QAAQ,GAET,OAAU,CAETX,QAAS,sCACTW,QAAQ,GAET,aAAc,CACbX,QAAS,mFACTU,YAAY,GAEb,QAAW,oVACX,SAAY,wBACZ,OAAU,oHACV,SAAY,oDAGbd,MAAMU,UAAUG,aAAa,IAAK,SAAU,CAC3C,KAAQ,CAEPT,QAAS,2CACTW,QAAQ,KAIVf,MAAMU,UAAUG,aAAa,IAAK,SAAU,CAC3C,MAAS,CAGRT,QAAS,4FACTU,YAAY,EACZC,QAAQ,EACRE,MAAO,WACPD,OAAQ,CACP,OAAU,CACT,CAECZ,QAAS,2BACTU,YAAY,GAEbd,MAAMU,UAAUqE,EAAU,QAE3B,KAAQ/E,MAAMU,UAAUqE,EAAQ,KAChC,QAAW/E,MAAMU,UAAUqE,EAAW,QACtC,aAAc,CACb,CACC3E,QAAS,+BACTU,YAAY,GAEb,CACCV,QAAS,+BACTU,YAAY,EACZG,MAAO,aAIT,UAAa,CACZb,QAAS,gBACTU,YAAY,EACZG,MAAO,WAER,iBAAkB,KAClB,YAAe,kBACf,WAAc,CACbb,QAAS,YACTY,OAAQhB,MAAMU,UAAUqE,OAM5B/E,MAAMU,UAAUG,aAAa,IAAK,WAAY,CAE7C,SAAY,sIAGNb,MAAMU,UAAUqE,EAAW,O,iBC/ElC/E,MAAMU,UAAUsE,WAAahF,MAAMU,UAAUE,OAAO,QAAS,CAC5D,aAAc,CACbZ,MAAMU,UAAUuE,MAAM,cACtB,CACC7E,QAAS,0GACTU,YAAY,IAGd,QAAW,CACV,CACCV,QAAS,uBACTU,YAAY,GAEb,CACCV,QAAS,mdACTU,YAAY,IAId,SAAY,oGACZ,OAAU,CACTV,QAASE,OACR,aAAaJ,OACb,MAGC,eAAeA,OACf,IAEA,0BAA0BA,OAC1B,IAEA,4BAA4BA,OAC5B,IAEA,sCAAsCA,OACtC,IAEA,gBAAgBA,OAChB,IAEA,oFAAoFA,OAErF,IACA,YAAYA,QAEbY,YAAY,GAEb,SAAY,8FAGbd,MAAMU,UAAUsE,WAAW,cAAc,GAAG5E,QAAU,uEAEtDJ,MAAMU,UAAUG,aAAa,aAAc,UAAW,CACrD,MAAS,CACRT,QAASE,OAGR,0DAA0DJ,OAK1D,KAAKA,OACL,MACA,iEAAiEA,OACjE,IAEA,qIAAqIA,OACrI,IAEA,kEAAkEA,QAEnEY,YAAY,EACZC,QAAQ,EACRC,OAAQ,CACP,eAAgB,CACfZ,QAAS,4BACTU,YAAY,EACZG,MAAO,iBACPD,OAAQhB,MAAMU,UAAUwE,OAEzB,kBAAmB,UACnB,cAAe,aAIjB,oBAAqB,CACpB9E,QAAS,gMACTa,MAAO,YAER,UAAa,CACZ,CACCb,QAAS,sIACTU,YAAY,EACZE,OAAQhB,MAAMU,UAAUsE,YAEzB,CACC5E,QAAS,qFACTU,YAAY,EACZE,OAAQhB,MAAMU,UAAUsE,YAEzB,CACC5E,QAAS,kEACTU,YAAY,EACZE,OAAQhB,MAAMU,UAAUsE,YAEzB,CACC5E,QAAS,8eACTU,YAAY,EACZE,OAAQhB,MAAMU,UAAUsE,aAG1B,SAAY,8BAGbhF,MAAMU,UAAUG,aAAa,aAAc,SAAU,CACpD,SAAY,CACXT,QAAS,QACTW,QAAQ,EACRE,MAAO,WAER,kBAAmB,CAClBb,QAAS,2EACTW,QAAQ,EACRC,OAAQ,CACP,uBAAwB,CACvBZ,QAAS,QACTa,MAAO,UAER,cAAiB,CAChBb,QAAS,mEACTU,YAAY,EACZE,OAAQ,CACP,4BAA6B,CAC5BZ,QAAS,YACTa,MAAO,eAER2D,KAAM5E,MAAMU,UAAUsE,aAGxB,OAAU,YAGZ,kBAAmB,CAClB5E,QAAS,4EACTU,YAAY,EACZC,QAAQ,EACRE,MAAO,cAITjB,MAAMU,UAAUG,aAAa,aAAc,WAAY,CACtD,mBAAoB,CACnBT,QAAS,oFACTU,YAAY,EACZG,MAAO,cAILjB,MAAMU,UAAU4D,SACnBtE,MAAMU,UAAU4D,OAAOC,IAAIY,WAAW,SAAU,cAIhDnF,MAAMU,UAAU4D,OAAOC,IAAIa,aAC1B,yNAAyNlF,OACzN,eAIFF,MAAMU,UAAU2E,GAAKrF,MAAMU,UAAUsE,U,iBC3KrChF,MAAMU,UAAUuE,MAAQ,CACvB,QAAW,CACV,CACC7E,QAAS,kCACTU,YAAY,EACZC,QAAQ,GAET,CACCX,QAAS,mBACTU,YAAY,EACZC,QAAQ,IAGV,OAAU,CACTX,QAAS,iDACTW,QAAQ,GAET,aAAc,CACbX,QAAS,2FACTU,YAAY,EACZE,OAAQ,CACP,YAAe,UAGjB,QAAW,6GACX,QAAW,qBACX,SAAY,cACZ,OAAU,4DACV,SAAY,+CACZ,YAAe,gB,sBCtBhB,IAgBIhB,EAAS,SAAUsF;;AAGtB,IAAInD,EAAO,0CACPoD,EAAW,EAGXC,EAAmB,CAAC,EAGpBC,EAAI,CAsBPC,OAAQJ,EAAMtF,OAASsF,EAAMtF,MAAM0F,OAsBnCC,4BAA6BL,EAAMtF,OAASsF,EAAMtF,MAAM2F,4BAWxDC,KAAM,CACLC,OAAQ,SAASA,EAAOjE;;AACvB,OAAIA,aAAkBkE,EACd,IAAIA,EAAMlE,EAAOI,KAAM6D,EAAOjE,EAAON,SAAUM,EAAOX,OACnD8E,MAAMC,QAAQpE,GACjBA,EAAOqE,IAAIJ,GAEXjE,EAAOvB,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,UAAW,IAEhF,EAkBA2B,KAAM,SAAUkE;;AACf,OAAOC,OAAOC,UAAUC,SAASC,KAAKJ,GAAGhD,MAAM,GAAI,EACpD,EAQAqD,MAAO,SAAUC;;AAIhB,OAHKA,EAAU,MACdL,OAAOM,eAAeD,EAAK,OAAQ,CAAExD,QAASuC,IAExCiB,EAAU,IAClB,EAYAE,MAAO,SAASC,EAAUT,EAAGU,GAG5B,IAAIF,EAAWjD,EACf;;AAHAmD,EAAUA,GAAW,CAAC,EAGdnB,EAAEG,KAAK5D,KAAKkE,IACnB,IAAK,SAEJ,GADAzC,EAAKgC,EAAEG,KAAKW,MAAML,GACdU,EAAQnD,GACX,OAAOmD,EAAQnD,GAKhB,IAAK,IAAIoD,KAHTH,EAA4C,CAAC,EAC7CE,EAAQnD,GAAMiD,EAEER,EACXA,EAAEY,eAAeD,KACpBH,EAAMG,GAAOF,EAAUT,EAAEW,GAAMD,IAIjC,OAA2BF,EAE5B,IAAK,QAEJ,OADAjD,EAAKgC,EAAEG,KAAKW,MAAML,GACdU,EAAQnD,GACJmD,EAAQnD,IAEhBiD,EAAQ,GACRE,EAAQnD,GAAMiD,EAEd,EAA8CtF,QAAQ,SAAU2F,EAAGlF;;AAClE6E,EAAM7E,GAAK8E,EAAUI,EAAGH,EACzB,GAE2BF,GAE5B,QACC,OAAOR,EAEV,EAUAc,YAAa,SAAUC;;AACtB,KAAOA,GAAS,CACf,IAAInE,EAAIX,EAAKC,KAAK6E,EAAQC,WAC1B,GAAIpE,EACH,OAAOA,EAAE,GAAGT,cAEb4E,EAAUA,EAAQE,aACnB,CACA,MAAO,MACR,EASAC,YAAa,SAAUH,EAASvF;;AAG/BuF,EAAQC,UAAYD,EAAQC,UAAU7G,QAAQC,OAAO6B,EAAM,MAAO,IAIlE8E,EAAQI,UAAU7F,IAAI,YAAcE,EACrC,EASA4F,cAAe;;AACd,GAAwB,oBAAbpD,SACV,OAAO,KAER,GAAIA,SAASoD,eAAoD,WAAnCpD,SAASoD,cAAcC,QACpD,OAA2BrD,SAASoD,cAOrC,IACC,MAAM,IAAIE,KACX,CAAE,MAAOC,GAQR,IAAIC,GAAO,qCAAqCtF,KAAKqF,EAAIE,QAAU,IAAI,GACvE,GAAID,EAAK,CACR,IAAIE,EAAU1D,SAAS2D,qBAAqB,UAC5C,IAAK,IAAIhG,KAAK+F,EACb,GAAIA,EAAQ/F,GAAG6F,KAAOA,EACrB,OAAOE,EAAQ/F,EAGlB,CACA,OAAO,IACR,CACD,EAqBAiG,SAAU,SAAUb,EAASC,EAAWa,GAGvC;;AAFA,IAAIC,EAAK,MAAQd,EAEVD,GAAS,CACf,IAAII,EAAYJ,EAAQI,UACxB,GAAIA,EAAUY,SAASf,GACtB,OAAO,EAER,GAAIG,EAAUY,SAASD,GACtB,OAAO,EAERf,EAAUA,EAAQE,aACnB,CACA,QAASY,CACV,GAUDrH,UAAW,CAIVwH,MAAO1C,EACP2C,UAAW3C,EACX4C,KAAM5C,EACN6C,IAAK7C,EA8BL5E,OAAQ,SAAU6C,EAAI6E;;AACrB,IAAInG,EAAOsD,EAAEG,KAAKc,MAAMjB,EAAE/E,UAAU+C,IAEpC,IAAK,IAAIoD,KAAOyB,EACfnG,EAAK0E,GAAOyB,EAAMzB,GAGnB,OAAO1E,CACR,EA6EAtB,aAAc,SAAUG,EAAQuH,EAAQC,EAAQC,GAE/C,IAAI9F;;AADJ8F,EAAOA,GAA4BhD,EAAW,WAC3BzE,GAEf0H,EAAM,CAAC,EAEX,IAAK,IAAIrH,KAASsB,EACjB,GAAIA,EAAQmE,eAAezF,GAAQ,CAElC,GAAIA,GAASkH,EACZ,IAAK,IAAII,KAAYH,EAChBA,EAAO1B,eAAe6B,KACzBD,EAAIC,GAAYH,EAAOG,IAMrBH,EAAO1B,eAAezF,KAC1BqH,EAAIrH,GAASsB,EAAQtB,GAEvB,CAGD,IAAIuH,EAAMH,EAAKzH,GAUf,OATAyH,EAAKzH,GAAU0H,EAGfjD,EAAE/E,UAAUmI,IAAIpD,EAAE/E,UAAW,SAAUmG,EAAK7D;;AACvCA,IAAU4F,GAAO/B,GAAO7F,IAC3B8H,KAAKjC,GAAO6B,EAEd,GAEOA,CACR,EAGAG,IAAK,SAASA,EAAI3C,EAAG6C,EAAU/G,EAAM4E;;AACpCA,EAAUA,GAAW,CAAC,EAEtB,IAAIL,EAAQd,EAAEG,KAAKW,MAEnB,IAAK,IAAI1E,KAAKqE,EACb,GAAIA,EAAEY,eAAejF,GAAI,CACxBkH,EAASzC,KAAKJ,EAAGrE,EAAGqE,EAAErE,GAAIG,GAAQH,GAElC,IAAImH,EAAW9C,EAAErE,GACboH,EAAexD,EAAEG,KAAK5D,KAAKgH,GAEV,WAAjBC,GAA8BrC,EAAQL,EAAMyC,IAGpB,UAAjBC,GAA6BrC,EAAQL,EAAMyC,MACrDpC,EAAQL,EAAMyC,KAAa,EAC3BH,EAAIG,EAAUD,EAAUlH,EAAG+E,KAJ3BA,EAAQL,EAAMyC,KAAa,EAC3BH,EAAIG,EAAUD,EAAU,KAAMnC,GAKhC,CAEF,GAGDrD,QAAS,CAAC,EAcV2F,aAAc,SAAUC,EAAOJ;;AAC9BtD,EAAE2D,kBAAkBlF,SAAUiF,EAAOJ,EACtC,EAiBAK,kBAAmB,SAAUC,EAAWF,EAAOJ;;AAC9C,IAAItH,EAAM,CACTsH,SAAUA,EACVM,UAAWA,EACXC,SAAU,oGAGX7D,EAAElE,MAAMgI,IAAI,sBAAuB9H,GAEnCA,EAAI+H,SAAWzD,MAAMK,UAAUlD,MAAMuG,MAAMhI,EAAI4H,UAAUK,iBAAiBjI,EAAI6H,WAE9E7D,EAAElE,MAAMgI,IAAI,gCAAiC9H,GAE7C,IAAK,IAAWwF,EAAPpF,EAAI,EAAaoF,EAAUxF,EAAI+H,SAAS3H,MAChD4D,EAAEkE,iBAAiB1C,GAAmB,IAAVkC,EAAgB1H,EAAIsH,SAElD,EA8BAY,iBAAkB,SAAU1C,EAASkC,EAAOJ;;AAE3C,IAAIrH,EAAW+D,EAAEG,KAAKoB,YAAYC,GAC9BtE,EAAU8C,EAAE/E,UAAUgB,GAG1B+D,EAAEG,KAAKwB,YAAYH,EAASvF,GAG5B,IAAIkI,EAAS3C,EAAQE,cACjByC,GAA4C,QAAlCA,EAAOC,SAASxH,eAC7BoD,EAAEG,KAAKwB,YAAYwC,EAAQlI,GAG5B,IAEID,EAAM,CACTwF,QAASA,EACTvF,SAAUA,EACViB,QAASA,EACTI,KANUkE,EAAQ5C,aASnB,SAASyF,EAAsBC;;AAC9BtI,EAAIsI,gBAAkBA,EAEtBtE,EAAElE,MAAMgI,IAAI,gBAAiB9H,GAE7BA,EAAIwF,QAAQ7C,UAAY3C,EAAIsI,gBAE5BtE,EAAElE,MAAMgI,IAAI,kBAAmB9H,GAC/BgE,EAAElE,MAAMgI,IAAI,WAAY9H,GACxBsH,GAAYA,EAASzC,KAAK7E,EAAIwF,QAC/B,CAUA,GARAxB,EAAElE,MAAMgI,IAAI,sBAAuB9H,IAGnCmI,EAASnI,EAAIwF,QAAQE,gBAC2B,QAAlCyC,EAAOC,SAASxH,gBAA4BuH,EAAOI,aAAa,aAC7EJ,EAAOK,aAAa,WAAY,MAG5BxI,EAAIsB,KAGR,OAFA0C,EAAElE,MAAMgI,IAAI,WAAY9H,QACxBsH,GAAYA,EAASzC,KAAK7E,EAAIwF,UAM/B,GAFAxB,EAAElE,MAAMgI,IAAI,mBAAoB9H,GAE3BA,EAAIkB,QAKT,GAAIwG,GAAS7D,EAAM4E,OAAQ,CAC1B,IAAIC,EAAS,IAAID,OAAOzE,EAAE2E,UAE1BD,EAAOE,UAAY,SAAUC;;AAC5BR,EAAsBQ,EAAIC,KAC3B,EAEAJ,EAAOK,YAAYC,KAAKC,UAAU,CACjChJ,SAAUD,EAAIC,SACdqB,KAAMtB,EAAIsB,KACV4H,gBAAgB,IAElB,MACCb,EAAsBrE,EAAE7C,UAAUnB,EAAIsB,KAAMtB,EAAIkB,QAASlB,EAAIC,gBAjB7DoI,EAAsBrE,EAAEG,KAAKC,OAAOpE,EAAIsB,MAmB1C,EAsBAH,UAAW,SAAUwF,EAAMzF,EAASjB;;AACnC,IAAID,EAAM,CACTsB,KAAMqF,EACNzF,QAASA,EACTjB,SAAUA,GAGX,GADA+D,EAAElE,MAAMgI,IAAI,kBAAmB9H,IAC1BA,EAAIkB,QACR,MAAM,IAAI6E,MAAM,iBAAmB/F,EAAIC,SAAW,qBAInD,OAFAD,EAAIG,OAAS6D,EAAEmF,SAASnJ,EAAIsB,KAAMtB,EAAIkB,SACtC8C,EAAElE,MAAMgI,IAAI,iBAAkB9H,GACvBqE,EAAM4E,UAAUjF,EAAEG,KAAKC,OAAOpE,EAAIG,QAASH,EAAIC,SACvD,EA0BAkJ,SAAU,SAAUxC,EAAMzF;;AACzB,IAAIiC,EAAOjC,EAAQiC,KACnB,GAAIA,EAAM,CACT,IAAK,IAAIvD,KAASuD,EACjBjC,EAAQtB,GAASuD,EAAKvD,UAGhBsB,EAAQiC,IAChB,CAEA,IAAIiG,EAAY,IAAIC,EAKpB,OAJAC,EAASF,EAAWA,EAAUG,KAAM5C,GAEpC6C,EAAa7C,EAAMyC,EAAWlI,EAASkI,EAAUG,KAAM,GAyazD,SAAiBE;;AAChB,IAAIC,EAAQ,GACRC,EAAOF,EAAKF,KAAKK,KACrB,KAAOD,IAASF,EAAKI,MACpBH,EAAM7I,KAAK8I,EAAKpI,OAChBoI,EAAOA,EAAKC,KAEb,OAAOF,CACR,CA/aSI,CAAQV,EAChB,EAOAtJ,MAAO,CACNiK,IAAK,CAAC,EAcNhK,IAAK,SAAUiK,EAAM1C;;AACpB,IAAIxH,EAAQkE,EAAElE,MAAMiK,IAEpBjK,EAAMkK,GAAQlK,EAAMkK,IAAS,GAE7BlK,EAAMkK,GAAMnJ,KAAKyG,EAClB,EAWAQ,IAAK,SAAUkC,EAAMhK;;AACpB,IAAIiK,EAAYjG,EAAElE,MAAMiK,IAAIC,GAE5B,GAAKC,GAAcA,EAAU3J,OAI7B,IAAK,IAAWgH,EAAPlH,EAAI,EAAckH,EAAW2C,EAAU7J,MAC/CkH,EAAStH,EAEX,GAGDqE,MAAOA,GAqBR,SAASA,EAAM9D,EAAMV,EAASL,EAAO0K;;AAUpC7C,KAAK9G,KAAOA,EASZ8G,KAAKxH,QAAUA,EAQfwH,KAAK7H,MAAQA,EAEb6H,KAAK/G,OAAqC,GAA3B4J,GAAc,IAAI5J,MAClC,CA6EA,SAAS6J,EAAaxL,EAASyL,EAAKzD,EAAMtH;;AACzCV,EAAQ0L,UAAYD,EACpB,IAAIpJ,EAAQrC,EAAQgC,KAAKgG,GACzB,GAAI3F,GAAS3B,GAAc2B,EAAM,GAAI,CAEpC,IAAIsJ,EAAmBtJ,EAAM,GAAGV,OAChCU,EAAMuJ,OAASD,EACftJ,EAAM,GAAKA,EAAM,GAAGS,MAAM6I,EAC3B,CACA,OAAOtJ,CACR,CAgBA,SAASwI,EAAa7C,EAAMyC,EAAWlI,EAASsJ,EAAWC,EAAUC;;AACpE,IAAK,IAAI9K,KAASsB,EACjB,GAAKA,EAAQmE,eAAezF,IAAWsB,EAAQtB,GAA/C,CAIA,IAAI+K,EAAWzJ,EAAQtB,GACvB+K,EAAWrG,MAAMC,QAAQoG,GAAYA,EAAW,CAACA,GAEjD,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAASrK,SAAUsK,EAAG,CACzC,GAAIF,GAAWA,EAAQG,OAASjL,EAAQ,IAAMgL,EAC7C,OAGD,IAAIE,EAAaH,EAASC,GACtBrL,EAASuL,EAAWvL,OACpBF,IAAeyL,EAAWzL,WAC1BC,IAAWwL,EAAWxL,OACtBE,EAAQsL,EAAWtL,MAEvB,GAAIF,IAAWwL,EAAWnM,QAAQoM,OAAQ,CAEzC,IAAIC,EAAQF,EAAWnM,QAAQiG,WAAW5D,MAAM,aAAa,GAC7D8J,EAAWnM,QAAUE,OAAOiM,EAAWnM,QAAQF,OAAQuM,EAAQ,IAChE,CAKA,IAFA,IAAIrM,EAAUmM,EAAWnM,SAAWmM,EAG/BG,EAAcT,EAAUZ,KAAMQ,EAAMK,EACxCQ,IAAgB7B,EAAUS,QAItBa,GAAWN,GAAOM,EAAQQ,OAH9Bd,GAAOa,EAAY1J,MAAMjB,OAAQ2K,EAAcA,EAAYrB,KAC1D,CAMD,IAAIuB,EAAMF,EAAY1J,MAEtB,GAAI6H,EAAU9I,OAASqG,EAAKrG,OAE3B,OAGD,KAAI6K,aAAe9G,GAAnB,CAIA,IACIrD,EADAoK,EAAc,EAGlB,GAAI9L,EAAQ,CAEX,KADA0B,EAAQmJ,EAAaxL,EAASyL,EAAKzD,EAAMtH,KAC3B2B,EAAMuJ,OAAS5D,EAAKrG,OACjC,MAGD,IAAI+K,EAAOrK,EAAMuJ,MACbe,EAAKtK,EAAMuJ,MAAQvJ,EAAM,GAAGV,OAC5BiL,EAAInB,EAIR,IADAmB,GAAKN,EAAY1J,MAAMjB,OAChB+K,GAAQE,GAEdA,IADAN,EAAcA,EAAYrB,MACTrI,MAAMjB,OAOxB,GAHA8J,EADAmB,GAAKN,EAAY1J,MAAMjB,OAInB2K,EAAY1J,iBAAiB8C,EAChC,SAID,IACC,IAAImH,EAAIP,EACRO,IAAMpC,EAAUS,OAAS0B,EAAID,GAAyB,iBAAZE,EAAEjK,OAC5CiK,EAAIA,EAAE5B,KAENwB,IACAG,GAAKC,EAAEjK,MAAMjB,OAEd8K,IAGAD,EAAMxE,EAAKlF,MAAM2I,EAAKmB,GACtBvK,EAAMuJ,OAASH,CAChB,MAEC,KADApJ,EAAQmJ,EAAaxL,EAAS,EAAGwM,EAAK9L,IAErC,SAKEgM,EAAOrK,EAAMuJ,MAAjB,IACIkB,EAAWzK,EAAM,GACjB8F,EAASqE,EAAI1J,MAAM,EAAG4J,GACtBK,EAAQP,EAAI1J,MAAM4J,EAAOI,EAASnL,QAElC4K,EAAQd,EAAMe,EAAI7K,OAClBoK,GAAWQ,EAAQR,EAAQQ,QAC9BR,EAAQQ,MAAQA,GAGjB,IAAIS,EAAaV,EAAYW,KAgB7B,GAdI9E,IACH6E,EAAarC,EAASF,EAAWuC,EAAY7E,GAC7CsD,GAAOtD,EAAOxG,QAGfuL,EAAYzC,EAAWuC,EAAYP,GAGnCH,EAAc3B,EAASF,EAAWuC,EADpB,IAAItH,EAAMzE,EAAOL,EAASyE,EAAEmF,SAASsC,EAAUlM,GAAUkM,EAAUjM,EAAOiM,IAGpFC,GACHpC,EAASF,EAAW6B,EAAaS,GAG9BN,EAAc,EAAG,CAKpB,IAAIU,EAAgB,CACnBjB,MAAOjL,EAAQ,IAAMgL,EACrBM,MAAOA,GAER1B,EAAa7C,EAAMyC,EAAWlI,EAAS+J,EAAYW,KAAMxB,EAAK0B,GAG1DpB,GAAWoB,EAAcZ,MAAQR,EAAQQ,QAC5CR,EAAQQ,MAAQY,EAAcZ,MAEhC,CA7FA,CA8FD,CACD,CA3IA,CA6IF,CAeA,SAAS7B;;AAER,IAAIE,EAAO,CAAEhI,MAAO,KAAMqK,KAAM,KAAMhC,KAAM,MAExCC,EAAO,CAAEtI,MAAO,KAAMqK,KAAMrC,EAAMK,KAAM,MAC5CL,EAAKK,KAAOC,EAGZxC,KAAKkC,KAAOA,EAEZlC,KAAKwC,KAAOA,EACZxC,KAAK/G,OAAS,CACf,CAWA,SAASgJ,EAASG,EAAME,EAAMpI;;AAE7B,IAAIqI,EAAOD,EAAKC,KAEZmC,EAAU,CAAExK,MAAOA,EAAOqK,KAAMjC,EAAMC,KAAMA,GAKhD,OAJAD,EAAKC,KAAOmC,EACZnC,EAAKgC,KAAOG,EACZtC,EAAKnJ,SAEEyL,CACR,CASA,SAASF,EAAYpC,EAAME,EAAMqC,GAEhC;;AADA,IAAIpC,EAAOD,EAAKC,KACPxJ,EAAI,EAAGA,EAAI4L,GAASpC,IAASH,EAAKI,KAAMzJ,IAChDwJ,EAAOA,EAAKA,KAEbD,EAAKC,KAAOA,EACZA,EAAKgC,KAAOjC,EACZF,EAAKnJ,QAAUF,CAChB,CAiBA,GA3XAyD,EAAMtF,MAAQyF,EA+EdK,EAAM4E,UAAY,SAASA,EAAUxE,EAAGxE;;AACvC,GAAgB,iBAALwE,EACV,OAAOA,EAER,GAAIH,MAAMC,QAAQE,GAAI,CACrB,IAAIwH,EAAI,GAIR,OAHAxH,EAAE9E,QAAQ,SAAUuM;;AACnBD,GAAKhD,EAAUiD,EAAGjM,EACnB,GACOgM,CACR,CAEA,IAAIjM,EAAM,CACTO,KAAMkE,EAAElE,KACRV,QAASoJ,EAAUxE,EAAE5E,QAASI,GAC9B6C,IAAK,OACLhC,QAAS,CAAC,QAAS2D,EAAElE,MACrB+B,WAAY,CAAC,EACbrC,SAAUA,GAGPkM,EAAU1H,EAAEjF,MACZ2M,IACC7H,MAAMC,QAAQ4H,GACjB7H,MAAMK,UAAU9D,KAAKmH,MAAMhI,EAAIc,QAASqL,GAExCnM,EAAIc,QAAQD,KAAKsL,IAInBnI,EAAElE,MAAMgI,IAAI,OAAQ9H,GAEpB,IAAIsC,EAAa,GACjB,IAAK,IAAI0H,KAAQhK,EAAIsC,WACpBA,GAAc,IAAM0H,EAAO,MAAQhK,EAAIsC,WAAW0H,IAAS,IAAIpL,QAAQ,KAAM,UAAY,IAG1F,MAAO,IAAMoB,EAAI8C,IAAM,WAAa9C,EAAIc,QAAQsL,KAAK,KAAO,IAAM9J,EAAa,IAAMtC,EAAIH,QAAU,KAAOG,EAAI8C,IAAM,GACrH,GAsQKe,EAAMpB,SACV,OAAKoB,EAAMwI,kBAKNrI,EAAEE,6BAENL,EAAMwI,iBAAiB,UAAW,SAAUxD;;AAC3C,IAAIyD,EAAUtD,KAAKuD,MAAM1D,EAAIC,MACzBpI,EAAO4L,EAAQrM,SACfqB,EAAOgL,EAAQhL,KACf4H,EAAiBoD,EAAQpD,eAE7BrF,EAAMkF,YAAY/E,EAAE7C,UAAUG,EAAM0C,EAAE/E,UAAUyB,GAAOA,IACnDwI,GACHrF,EAAM2I,OAER,GAAG,GAGGxI,GAlBCA,EAsBT,IAAIyI,EAASzI,EAAEG,KAAK0B,gBAUpB,SAAS6G;;AACH1I,EAAEC,QACND,EAAEyD,cAEJ,CAEA,GAdIgF,IACHzI,EAAE2E,SAAW8D,EAAOxG,IAEhBwG,EAAOlE,aAAa,iBACvBvE,EAAEC,QAAS,KAURD,EAAEC,OAAQ,CAOd,IAAI0I,EAAalK,SAASkK,WACP,YAAfA,GAA2C,gBAAfA,GAAgCF,GAAUA,EAAOG,MAChFnK,SAAS4J,iBAAiB,mBAAoBK,GAE1CG,OAAOC,sBACVD,OAAOC,sBAAsBJ,GAE7BG,OAAOE,WAAWL,EAAgC,GAGrD,CAEA,OAAO1I,CAER,CAlqCa,CAhBkB,oBAAX6I,OACjBA,OAE6B,oBAAtBG,mBAAqCC,gBAAgBD,kBAC1DC,KACA,CAAC,GA+qC+BC,EAAOC,UAC3CD,EAAOC,QAAU5O,QAII,IAAXwM,EAAAA,IACVA,EAAAA,EAAOxM,MAAQA,GAyDhBA,EAAMU,UAAU4D,OAAS,CACxB,QAAW,CACVlE,QAAS,8BACTW,QAAQ,GAET,OAAU,CACTX,QAAS,iBACTW,QAAQ,GAET,QAAW,CAEVX,QAAS,uHACTW,QAAQ,EACRC,OAAQ,CACP,kBAAmB,CAClBZ,QAAS,6BACTU,YAAY,EACZC,QAAQ,EACRC,OAAQ,MAET,OAAU,CACTZ,QAAS,kBACTW,QAAQ,GAET,YAAe,eACf,cAAe,YACf,KAAQ,eAGV,MAAS,CACRX,QAAS,4BACTW,QAAQ,GAET,IAAO,CACNX,QAAS,uHACTW,QAAQ,EACRC,OAAQ,CACP,IAAO,CACNZ,QAAS,iBACTY,OAAQ,CACP,YAAe,QACf,UAAa,iBAGf,eAAgB,GAChB,aAAc,CACbZ,QAAS,qCACTY,OAAQ,CACP,YAAe,CACd,CACCZ,QAAS,KACTa,MAAO,eAER,CACCb,QAAS,mBACTU,YAAY,MAKhB,YAAe,OACf,YAAa,CACZV,QAAS,YACTY,OAAQ,CACP,UAAa,mBAMjB,OAAU,CACT,CACCZ,QAAS,kBACTa,MAAO,gBAER,uBAIFjB,EAAMU,UAAU4D,OAAY,IAAEtD,OAAO,cAAcA,OAAe,OACjEhB,EAAMU,UAAU4D,OAAe,OAChCtE,EAAMU,UAAU4D,OAAgB,QAAEtD,OAAO,mBAAmBA,OAAShB,EAAMU,UAAU4D,OAGrFtE,EAAMuB,MAAMC,IAAI,OAAQ,SAAUC;;AAEhB,WAAbA,EAAIO,OACPP,EAAIsC,WAAkB,MAAItC,EAAIH,QAAQjB,QAAQ,QAAS,KAEzD,GAEA8F,OAAOM,eAAezG,EAAMU,UAAU4D,OAAOC,IAAK,aAAc,CAY/DvB,MAAO,SAAoBuE,EAASpF;;AACnC,IAAI0M,EAAsB,CAAC,EAC3BA,EAAoB,YAAc1M,GAAQ,CACzC/B,QAAS,oCACTU,YAAY,EACZE,OAAQhB,EAAMU,UAAUyB,IAEzB0M,EAA2B,MAAI,uBAE/B,IAAI7N,EAAS,CACZ,iBAAkB,CACjBZ,QAAS,4BACTY,OAAQ6N,IAGV7N,EAAO,YAAcmB,GAAQ,CAC5B/B,QAAS,UACTY,OAAQhB,EAAMU,UAAUyB,IAGzB,IAAI2M,EAAM,CAAC,EACXA,EAAIvH,GAAW,CACdnH,QAASE,OAAO,wFAAwFJ,OAAOG,QAAQ,MAAO;;AAAc,OAAOkH,CAAS,GAAI,KAChKzG,YAAY,EACZC,QAAQ,EACRC,OAAQA,GAGThB,EAAMU,UAAUG,aAAa,SAAU,QAASiO,EACjD,IAED3I,OAAOM,eAAezG,EAAMU,UAAU4D,OAAOC,IAAK,eAAgB,CAYjEvB,MAAO,SAAU+L,EAAU5M;;AAC1BnC,EAAMU,UAAU4D,OAAOC,IAAIvD,OAAO,gBAAgBsB,KAAK,CACtDlC,QAASE,OACR,aAAaJ,OAAS,MAAQ6O,EAAW,IAAM,iDAAiD7O,OAChG,KAEDY,YAAY,EACZE,OAAQ,CACP,YAAa,WACb,aAAc,CACbZ,QAAS,WACTY,OAAQ,CACP,MAAS,CACRZ,QAAS,yCACTU,YAAY,EACZG,MAAO,CAACkB,EAAM,YAAcA,GAC5BnB,OAAQhB,EAAMU,UAAUyB,IAEzB,YAAe,CACd,CACC/B,QAAS,KACTa,MAAO,eAER,WAMN,IAGDjB,EAAMU,UAAUgC,KAAO1C,EAAMU,UAAU4D,OACvCtE,EAAMU,UAAUsO,OAAShP,EAAMU,UAAU4D,OACzCtE,EAAMU,UAAUuO,IAAMjP,EAAMU,UAAU4D,OAEtCtE,EAAMU,UAAUwO,IAAMlP,EAAMU,UAAUE,OAAO,SAAU,CAAC,GACxDZ,EAAMU,UAAUyO,KAAOnP,EAAMU,UAAUwO,IACvClP,EAAMU,UAAU0O,KAAOpP,EAAMU,UAAUwO,IACvClP,EAAMU,UAAU2O,IAAMrP,EAAMU,UAAUwO,IAOrC,SAAUlP;;AAEV,IAAIsP,EAAS,8EAEbtP,EAAMU,UAAU6O,IAAM,CACrB,QAAW,mBACX,OAAU,CACTnP,QAASE,OAAO,aAAe,sBAAsBJ,OAAS,IAAMoP,EAAOpP,OAAS,MAAQ,kBAAkBA,QAC9Gc,OAAQ,CACP,KAAQ,WACR,6BAA8B,CAC7BZ,QAAS,4FACTU,YAAY,EACZG,MAAO,YAER,QAAW,CACVb,QAAS,yCACTU,YAAY,KAKf,IAAO,CAENV,QAASE,OAAO,eAAiBgP,EAAOpP,OAAS,IAAM,8BAA8BA,OAAS,OAAQ,KACtGa,QAAQ,EACRC,OAAQ,CACP,SAAY,QACZ,YAAe,UACf,OAAU,CACTZ,QAASE,OAAO,IAAMgP,EAAOpP,OAAS,KACtCe,MAAO,SAIV,SAAY,CACXb,QAASE,OAAO,qDAAuDgP,EAAOpP,OAAS,iBACvFY,YAAY,GAEb,OAAU,CACTV,QAASkP,EACTvO,QAAQ,GAET,SAAY,CACXX,QAAS,oFACTU,YAAY,GAEb,UAAa,gBACb,SAAY,CACXV,QAAS,kCACTU,YAAY,GAEb,YAAe,aAGhBd,EAAMU,UAAU6O,IAAY,OAAEvO,OAAO4D,KAAO5E,EAAMU,UAAU6O,IAE5D,IAAIjL,EAAStE,EAAMU,UAAU4D,OACzBA,IACHA,EAAOC,IAAIY,WAAW,QAAS,OAC/Bb,EAAOC,IAAIa,aAAa,QAAS,OAGlC,CA/DA,CA+DCpF,GAOFA,EAAMU,UAAUuE,MAAQ,CACvB,QAAW,CACV,CACC7E,QAAS,kCACTU,YAAY,EACZC,QAAQ,GAET,CACCX,QAAS,mBACTU,YAAY,EACZC,QAAQ,IAGV,OAAU,CACTX,QAAS,iDACTW,QAAQ,GAET,aAAc,CACbX,QAAS,2FACTU,YAAY,EACZE,OAAQ,CACP,YAAe,UAGjB,QAAW,6GACX,QAAW,qBACX,SAAY,cACZ,OAAU,4DACV,SAAY,+CACZ,YAAe,iBAQhBhB,EAAMU,UAAUsE,WAAahF,EAAMU,UAAUE,OAAO,QAAS,CAC5D,aAAc,CACbZ,EAAMU,UAAUuE,MAAM,cACtB,CACC7E,QAAS,0GACTU,YAAY,IAGd,QAAW,CACV,CACCV,QAAS,uBACTU,YAAY,GAEb,CACCV,QAAS,mdACTU,YAAY,IAId,SAAY,oGACZ,OAAU,CACTV,QAASE,OACR,aAAaJ,OACb,MAGC,eAAeA,OACf,IAEA,0BAA0BA,OAC1B,IAEA,4BAA4BA,OAC5B,IAEA,sCAAsCA,OACtC,IAEA,gBAAgBA,OAChB,IAEA,oFAAoFA,OAErF,IACA,YAAYA,QAEbY,YAAY,GAEb,SAAY,8FAGbd,EAAMU,UAAUsE,WAAW,cAAc,GAAG5E,QAAU,uEAEtDJ,EAAMU,UAAUG,aAAa,aAAc,UAAW,CACrD,MAAS,CACRT,QAASE,OAGR,0DAA0DJ,OAK1D,KAAKA,OACL,MACA,iEAAiEA,OACjE,IAEA,qIAAqIA,OACrI,IAEA,kEAAkEA,QAEnEY,YAAY,EACZC,QAAQ,EACRC,OAAQ,CACP,eAAgB,CACfZ,QAAS,4BACTU,YAAY,EACZG,MAAO,iBACPD,OAAQhB,EAAMU,UAAUwE,OAEzB,kBAAmB,UACnB,cAAe,aAIjB,oBAAqB,CACpB9E,QAAS,gMACTa,MAAO,YAER,UAAa,CACZ,CACCb,QAAS,sIACTU,YAAY,EACZE,OAAQhB,EAAMU,UAAUsE,YAEzB,CACC5E,QAAS,qFACTU,YAAY,EACZE,OAAQhB,EAAMU,UAAUsE,YAEzB,CACC5E,QAAS,kEACTU,YAAY,EACZE,OAAQhB,EAAMU,UAAUsE,YAEzB,CACC5E,QAAS,8eACTU,YAAY,EACZE,OAAQhB,EAAMU,UAAUsE,aAG1B,SAAY,8BAGbhF,EAAMU,UAAUG,aAAa,aAAc,SAAU,CACpD,SAAY,CACXT,QAAS,QACTW,QAAQ,EACRE,MAAO,WAER,kBAAmB,CAClBb,QAAS,2EACTW,QAAQ,EACRC,OAAQ,CACP,uBAAwB,CACvBZ,QAAS,QACTa,MAAO,UAER,cAAiB,CAChBb,QAAS,mEACTU,YAAY,EACZE,OAAQ,CACP,4BAA6B,CAC5BZ,QAAS,YACTa,MAAO,eAER2D,KAAM5E,EAAMU,UAAUsE,aAGxB,OAAU,YAGZ,kBAAmB,CAClB5E,QAAS,4EACTU,YAAY,EACZC,QAAQ,EACRE,MAAO,cAITjB,EAAMU,UAAUG,aAAa,aAAc,WAAY,CACtD,mBAAoB,CACnBT,QAAS,oFACTU,YAAY,EACZG,MAAO,cAILjB,EAAMU,UAAU4D,SACnBtE,EAAMU,UAAU4D,OAAOC,IAAIY,WAAW,SAAU,cAIhDnF,EAAMU,UAAU4D,OAAOC,IAAIa,aAC1B,yNAAyNlF,OACzN,eAIFF,EAAMU,UAAU2E,GAAKrF,EAAMU,UAAUsE,WAOpC;;AAEA,QAAqB,IAAVhF,GAA6C,oBAAbkE,SAA3C,CAKKsL,QAAQpJ,UAAUqJ,UACtBD,QAAQpJ,UAAUqJ,QAAUD,QAAQpJ,UAAUsJ,mBAAqBF,QAAQpJ,UAAUuJ,uBAGtF,IAMIC,EAAa,CAChB,GAAM,aACN,GAAM,SACN,GAAM,OACN,IAAO,aACP,KAAQ,aACR,GAAM,OACN,IAAO,QACP,EAAK,IACL,IAAO,SAGJC,EAAc,kBACdC,EAAiB,UACjBC,EAAgB,SAGhBC,EAAW,sBAAwBH,EAAc,KAAOE,EAA7C,YACDF,EAAc,KAAOC,EAAiB,MAsDpD9P,EAAMuB,MAAMC,IAAI,sBAAuB,SAAUC;;AAChDA,EAAI6H,UAAY,KAAO0G,CACxB,GAEAhQ,EAAMuB,MAAMC,IAAI,sBAAuB,SAAUC;;AAChD,IAAIwO,EAAqCxO,EAAIwF,QAC7C,GAAIgJ,EAAIR,QAAQO,GAAW,CAC1BvO,EAAIsB,KAAO,GAEXkN,EAAIhG,aAAa4F,EAAaC,GAG9B,IAAI/M,EAAOkN,EAAIC,YAAYhM,SAASiM,cAAc,SAClDpN,EAAKsB,YA3Fe,WA6FpB,IAAIqD,EAAMuI,EAAIG,aAAa,YAEvB1O,EAAWD,EAAIC,SACnB,GAAiB,SAAbA,EAAqB,CAGxB,IAAI2O,GAAa,WAAWjO,KAAKsF,IAAQ,CAAC,CAAE,SAAS,GACrDhG,EAAWkO,EAAWS,IAAcA,CACrC,CAGArQ,EAAM4F,KAAKwB,YAAYrE,EAAMrB,GAC7B1B,EAAM4F,KAAKwB,YAAY6I,EAAKvO,GAG5B,IAAI8B,EAAaxD,EAAMuD,QAAQC,WAC3BA,GACHA,EAAWQ,cAActC,GA7E5B,SAAkBgG,EAAK4I,EAASC;;AAC/B,IAAIC,EAAM,IAAIC,eACdD,EAAIE,KAAK,MAAOhJ,GAAK,GACrB8I,EAAIG,mBAAqB;;AACF,GAAlBH,EAAIpC,aACHoC,EAAII,OAAS,KAAOJ,EAAIK,aAC3BP,EAAQE,EAAIK,cAERL,EAAII,QAAU,IACjBL,EAxCG,WAwCmBC,EAAII,OAxCD,yBAwCSJ,EAAIM,YAEtCP,EAxCuB,4CA4C3B,EACAC,EAAIO,KAAK,KACV,CAgEEC,CACCtJ,EACA,SAAUU;;AAET6H,EAAIhG,aAAa4F,EAAaE,GAG9B,IAAIkB,EA7DR,SAAoBA;;AACnB,IAAInO,EAAI,wCAAwCV,KAAK6O,GAAS,IAC9D,GAAInO,EAAG,CACN,IAAIoO,EAAQ/N,OAAOL,EAAE,IACjBqO,EAAQrO,EAAE,GACVsO,EAAMtO,EAAE,GAEZ,OAAKqO,EAGAC,EAGE,CAACF,EAAO/N,OAAOiO,IAFd,CAACF,OAAOG,GAHR,CAACH,EAAOA,EAMjB,CAED,CA6CgBI,CAAWrB,EAAIG,aAAa,eACxC,GAAIa,EAAO,CACV,IAAIM,EAAQnJ,EAAKoJ,MAAM,aAGnBN,EAAQD,EAAM,GACdG,EAAkB,MAAZH,EAAM,GAAaM,EAAMxP,OAASkP,EAAM,GAE9CC,EAAQ,IAAKA,GAASK,EAAMxP,QAChCmP,EAAQtN,KAAK6N,IAAI,EAAG7N,KAAK8N,IAAIR,EAAQ,EAAGK,EAAMxP,SAC1CqP,EAAM,IAAKA,GAAOG,EAAMxP,QAC5BqP,EAAMxN,KAAK6N,IAAI,EAAG7N,KAAK8N,IAAIN,EAAKG,EAAMxP,SAEtCqG,EAAOmJ,EAAMrO,MAAMgO,EAAOE,GAAKvD,KAAK,MAG/BoC,EAAIjG,aAAa,eACrBiG,EAAIhG,aAAa,aAAczF,OAAO0M,EAAQ,GAEhD,CAGAnO,EAAKsB,YAAc+D,EACnBpI,EAAM2J,iBAAiB5G,EACxB,EACA,SAAUwN;;AAETN,EAAIhG,aAAa4F,EA/HD,UAiIhB9M,EAAKsB,YAAckM,CACpB,EAEF,CACD,GAEAvQ,EAAMuD,QAAQoO,cAAgB,CAQ7B/O,UAAW,SAAmByG,GAG7B;;AAFA,IAEgBpC,EAFZuC,GAAYH,GAAanF,UAAUwF,iBAAiBsG,GAE/CnO,EAAI,EAAaoF,EAAUuC,EAAS3H,MAC5C7B,EAAM2J,iBAAiB1C,EAEzB,GAGD,IAAI2K,GAAS,EAEb5R,EAAM2R,cAAgB;;AAChBC,IACJC,QAAQC,KAAK,2FACbF,GAAS,GAEV5R,EAAMuD,QAAQoO,cAAc/O,UAAU6G,MAAMX,KAAMiJ,UACnD,CA5LA,CA8LA,CAlMA,E,iBCttDD/R,MAAMU,UAAUsR,KAAO,CACtB,SAAY,CACX5R,QAAS,yCACTU,YAAY,EACZC,QAAQ,GAET,OAAU,CACTX,QAAS,yCACTU,YAAY,EACZC,QAAQ,GAET,QAAW,CACVX,QAAS,gCACTW,QAAQ,GAET,OAAU,qCACV,YAAe,WACf,SAAY,IACZ,QAAW,qBACX,KAAQ,CACPX,QAAS,WACTa,MAAO,YAITjB,MAAMU,UAAUuR,YAAcjS,MAAMU,UAAUsR,I,iBC1B9ChS,MAAMU,UAAU4D,OAAS,CACxB,QAAW,CACVlE,QAAS,8BACTW,QAAQ,GAET,OAAU,CACTX,QAAS,iBACTW,QAAQ,GAET,QAAW,CAEVX,QAAS,uHACTW,QAAQ,EACRC,OAAQ,CACP,kBAAmB,CAClBZ,QAAS,6BACTU,YAAY,EACZC,QAAQ,EACRC,OAAQ,MAET,OAAU,CACTZ,QAAS,kBACTW,QAAQ,GAET,YAAe,eACf,cAAe,YACf,KAAQ,eAGV,MAAS,CACRX,QAAS,4BACTW,QAAQ,GAET,IAAO,CACNX,QAAS,uHACTW,QAAQ,EACRC,OAAQ,CACP,IAAO,CACNZ,QAAS,iBACTY,OAAQ,CACP,YAAe,QACf,UAAa,iBAGf,eAAgB,GAChB,aAAc,CACbZ,QAAS,qCACTY,OAAQ,CACP,YAAe,CACd,CACCZ,QAAS,KACTa,MAAO,eAER,CACCb,QAAS,mBACTU,YAAY,MAKhB,YAAe,OACf,YAAa,CACZV,QAAS,YACTY,OAAQ,CACP,UAAa,mBAMjB,OAAU,CACT,CACCZ,QAAS,kBACTa,MAAO,gBAER,uBAIFjB,MAAMU,UAAU4D,OAAY,IAAEtD,OAAO,cAAcA,OAAe,OACjEhB,MAAMU,UAAU4D,OAAe,OAChCtE,MAAMU,UAAU4D,OAAgB,QAAEtD,OAAO,mBAAmBA,OAAShB,MAAMU,UAAU4D,OAGrFtE,MAAMuB,MAAMC,IAAI,OAAQ,SAAUC;;AAEhB,WAAbA,EAAIO,OACPP,EAAIsC,WAAkB,MAAItC,EAAIH,QAAQjB,QAAQ,QAAS,KAEzD,GAEA8F,OAAOM,eAAezG,MAAMU,UAAU4D,OAAOC,IAAK,aAAc,CAY/DvB,MAAO,SAAoBuE,EAASpF;;AACnC,IAAI0M,EAAsB,CAAC,EAC3BA,EAAoB,YAAc1M,GAAQ,CACzC/B,QAAS,oCACTU,YAAY,EACZE,OAAQhB,MAAMU,UAAUyB,IAEzB0M,EAA2B,MAAI,uBAE/B,IAAI7N,EAAS,CACZ,iBAAkB,CACjBZ,QAAS,4BACTY,OAAQ6N,IAGV7N,EAAO,YAAcmB,GAAQ,CAC5B/B,QAAS,UACTY,OAAQhB,MAAMU,UAAUyB,IAGzB,IAAI2M,EAAM,CAAC,EACXA,EAAIvH,GAAW,CACdnH,QAASE,OAAO,wFAAwFJ,OAAOG,QAAQ,MAAO;;AAAc,OAAOkH,CAAS,GAAI,KAChKzG,YAAY,EACZC,QAAQ,EACRC,OAAQA,GAGThB,MAAMU,UAAUG,aAAa,SAAU,QAASiO,EACjD,IAED3I,OAAOM,eAAezG,MAAMU,UAAU4D,OAAOC,IAAK,eAAgB,CAYjEvB,MAAO,SAAU+L,EAAU5M;;AAC1BnC,MAAMU,UAAU4D,OAAOC,IAAIvD,OAAO,gBAAgBsB,KAAK,CACtDlC,QAASE,OACR,aAAaJ,OAAS,MAAQ6O,EAAW,IAAM,iDAAiD7O,OAChG,KAEDY,YAAY,EACZE,OAAQ,CACP,YAAa,WACb,aAAc,CACbZ,QAAS,WACTY,OAAQ,CACP,MAAS,CACRZ,QAAS,yCACTU,YAAY,EACZG,MAAO,CAACkB,EAAM,YAAcA,GAC5BnB,OAAQhB,MAAMU,UAAUyB,IAEzB,YAAe,CACd,CACC/B,QAAS,KACTa,MAAO,eAER,WAMN,IAGDjB,MAAMU,UAAUgC,KAAO1C,MAAMU,UAAU4D,OACvCtE,MAAMU,UAAUsO,OAAShP,MAAMU,UAAU4D,OACzCtE,MAAMU,UAAUuO,IAAMjP,MAAMU,UAAU4D,OAEtCtE,MAAMU,UAAUwO,IAAMlP,MAAMU,UAAUE,OAAO,SAAU,CAAC,GACxDZ,MAAMU,UAAUyO,KAAOnP,MAAMU,UAAUwO,IACvClP,MAAMU,UAAU0O,KAAOpP,MAAMU,UAAUwO,IACvClP,MAAMU,UAAU2O,IAAMrP,MAAMU,UAAUwO,G,kBCzLrC,SAAUlP;;AAEV,IAAIsP,EAAS,8EAEbtP,EAAMU,UAAU6O,IAAM,CACrB,QAAW,mBACX,OAAU,CACTnP,QAASE,OAAO,aAAe,sBAAsBJ,OAAS,IAAMoP,EAAOpP,OAAS,MAAQ,kBAAkBA,QAC9Gc,OAAQ,CACP,KAAQ,WACR,6BAA8B,CAC7BZ,QAAS,4FACTU,YAAY,EACZG,MAAO,YAER,QAAW,CACVb,QAAS,yCACTU,YAAY,KAKf,IAAO,CAENV,QAASE,OAAO,eAAiBgP,EAAOpP,OAAS,IAAM,8BAA8BA,OAAS,OAAQ,KACtGa,QAAQ,EACRC,OAAQ,CACP,SAAY,QACZ,YAAe,UACf,OAAU,CACTZ,QAASE,OAAO,IAAMgP,EAAOpP,OAAS,KACtCe,MAAO,SAIV,SAAY,CACXb,QAASE,OAAO,qDAAuDgP,EAAOpP,OAAS,iBACvFY,YAAY,GAEb,OAAU,CACTV,QAASkP,EACTvO,QAAQ,GAET,SAAY,CACXX,QAAS,oFACTU,YAAY,GAEb,UAAa,gBACb,SAAY,CACXV,QAAS,kCACTU,YAAY,GAEb,YAAe,aAGhBd,EAAMU,UAAU6O,IAAY,OAAEvO,OAAO4D,KAAO5E,EAAMU,UAAU6O,IAE5D,IAAIjL,EAAStE,EAAMU,UAAU4D,OACzBA,IACHA,EAAOC,IAAIY,WAAW,QAAS,OAC/Bb,EAAOC,IAAIa,aAAa,QAAS,OAGlC,CA/DA,CA+DCpF,M,kBC/DD,SAAUA;;AAEV,IAAIkS,EAAU,osBACVC,EAAU,uCAAuCjS,OAAOG,QAAQ,aAAc;;AAAc,OAAO6R,EAAQhS,MAAQ,GAEvHF,EAAMU,UAAU0R,IAAMpS,EAAMU,UAAUE,OAAO,IAAK,CACjD,aAAc,CACb,CACCR,QAASE,OAAO,gEAAgEJ,OAC9EG,QAAQ,aAAc;;AAAc,OAAO6R,EAAQhS,MAAQ,IAC7DY,YAAY,GAMb,iCAGA,oCAGA,kEAED,QAAWoR,EACX,OAAU,CACT9R,QAAS,iJACTW,QAAQ,GAET,SAAY,yHACZ,QAAW,uBAGZf,EAAMU,UAAUG,aAAa,MAAO,SAAU,CAC7C,OAAU,CAETT,QAASE,OACR,2BAA2BJ,OAC3B,MAEA,mDAAmDA,OACnD,IAEA,kDAAkDA,OAAOG,QAAQ,cAAe;;AAAc,OAAO8R,CAAS,GAC9G,KAEDrR,YAAY,EACZC,QAAQ,EACRC,OAAQ,CACP,OAAU,eACV,SAAY,IACZ,YAAe,OAGjB,aAAc,CACbZ,QAAS,oCACTa,MAAO,SACPF,QAAQ,KAIVf,EAAMU,UAAUG,aAAa,MAAO,UAAW,CAC9C,mBAAoB,CACnBT,QAAS,8DACTY,OAAQ,CACP,SAAY,OACZ,QAAW,CACVZ,QAAS,WACTa,MAAO,aACPD,OAAQhB,EAAMU,UAAU0R,SAM5BpS,EAAMU,UAAUG,aAAa,MAAO,WAAY,CAC/C,eAAgB,CACfT,QAAS,KACTa,MAAO,iBAITjB,EAAMU,UAAUG,aAAa,MAAO,aAAc,CAGjD,cAAe,CACdT,QAAS,6EACTU,YAAY,EACZC,QAAQ,EACRC,OAAQhB,EAAMU,UAAUE,OAAO,MAAO,CAAC,MAIzCZ,EAAMU,UAAUG,aAAa,SAAU,eAAgB,CAEtD,aAAc,2BACZb,EAAMU,UAAU0R,IAAI,eAEvB,CAlGA,CAkGCpS,M,kBClGD,SAAUA;;AAEVA,EAAMU,UAAU2R,WAAarS,EAAMU,UAAUE,OAAO,aAAc,CACjE,aAAc,CACbR,QAAS,+KACTU,YAAY,EACZC,QAAQ,EACRC,OAAQ,MAET,QAAW,0FAIZhB,EAAMU,UAAU2R,WAAWH,QAAQ5P,KAClC,qDAEA,2FAEA,qCAIMtC,EAAMU,UAAU2R,WAAsB,iBACtCrS,EAAMU,UAAU2R,WAAW,oBAGlC,IAAIC,EAAatS,EAAMU,UAAUE,OAAO,aAAc,CAAC,UAChD0R,EAAW,cAElBtS,EAAMU,UAAU2R,WAAW,cAAcrR,OAASsR,EAElDtS,EAAMU,UAAUG,aAAa,aAAc,WAAY,CACtD,UAAa,CACZT,QAAS,qBACTY,OAAQ,CACP,GAAM,CACLZ,QAAS,KACTa,MAAO,YAER,SAAY,aAGd,mBAAoB,CAEnBb,QAAS,yGACTW,QAAQ,EACRC,OAAQ,CACP,SAAY,4DACZ,QAAW,CACVZ,QAAS,WACTa,MAAO,aACPD,OAAQsR,OAMZtS,EAAMU,UAAU6R,GAAKvS,EAAMU,UAAU2R,UAErC,CA3DA,CA2DCrS,M,GC1DEwS,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBrB,IAAjBsB,EACH,OAAOA,EAAa/D,QAGrB,IAAID,EAAS6D,EAAyBE,GAAY,CAGjD9D,QAAS,CAAC,GAOX,OAHAgE,EAAoBF,GAAU/D,EAAQA,EAAOC,QAAS6D,GAG/C9D,EAAOC,OACf,CCrBA6D,EAAoBI,EAAI,SAASjE,EAASkE,GACzC,IAAI,IAAIjM,KAAOiM,EACXL,EAAoBvM,EAAE4M,EAAYjM,KAAS4L,EAAoBvM,EAAE0I,EAAS/H,IAC5EV,OAAOM,eAAemI,EAAS/H,EAAK,CAAEkM,YAAY,EAAMC,IAAKF,EAAWjM,IAG3E,ECPA4L,EAAoBQ,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOpK,MAAQ,IAAIqK,SAAS,cAAb,EAChB,CAAE,MAAOxF,GACR,GAAsB,iBAAXW,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBmE,EAAoBvM,EAAI,SAASM,EAAK4M,GAAQ,OAAOjN,OAAOC,UAAUU,eAAeR,KAAKE,EAAK4M,EAAO,ECCtGX,EAAoBY,EAAI,SAASzE,GACX,oBAAX0E,QAA0BA,OAAOC,aAC1CpN,OAAOM,eAAemI,EAAS0E,OAAOC,YAAa,CAAEvQ,MAAO,WAE7DmD,OAAOM,eAAemI,EAAS,aAAc,CAAE5L,OAAO,GACvD,E,uKCOO,SAASwQ,EAAQC;;AACtB,MAAMC,EAAU,GAChB,IAAK,MAAM,QAAEpS,EAAO,KAAEa,KAAUsR,EAAS,CACvC,MAAME,EAAc3T,EAAAA,UAAgBsB,EAAStB,EAAAA,UAAgBmC,GAAOA,GACpEuR,EAAQpR,KAAK,CACXI,KAAMiR,GAEV,CACA,OAAOD,CACT,C","sources":["webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-markdown.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-python.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-sql.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-c.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-javascript.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-clike.js","webpack://PrismJSBenchmark/./node_modules/prismjs/prism.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-json.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-markup.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-css.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-cpp.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-typescript.js","webpack://PrismJSBenchmark/webpack/bootstrap","webpack://PrismJSBenchmark/webpack/runtime/define property getters","webpack://PrismJSBenchmark/webpack/runtime/global","webpack://PrismJSBenchmark/webpack/runtime/hasOwnProperty shorthand","webpack://PrismJSBenchmark/webpack/runtime/make namespace object","webpack://PrismJSBenchmark/./src/test.mjs"],"sourcesContent":["(function (Prism) {\n\n\t// Allow only one line break\n\tvar inner = /(?:\\\\.|[^\\\\\\n\\r]|(?:\\n|\\r\\n?)(?![\\r\\n]))/.source;\n\n\t/**\n\t * This function is intended for the creation of the bold or italic pattern.\n\t *\n\t * This also adds a lookbehind group to the given pattern to ensure that the pattern is not backslash-escaped.\n\t *\n\t * _Note:_ Keep in mind that this adds a capturing group.\n\t *\n\t * @param {string} pattern\n\t * @returns {RegExp}\n\t */\n\tfunction createInline(pattern) {\n\t\tpattern = pattern.replace(/<inner>/g, function () { return inner; });\n\t\treturn RegExp(/((?:^|[^\\\\])(?:\\\\{2})*)/.source + '(?:' + pattern + ')');\n\t}\n\n\n\tvar tableCell = /(?:\\\\.|``(?:[^`\\r\\n]|`(?!`))+``|`[^`\\r\\n]+`|[^\\\\|\\r\\n`])+/.source;\n\tvar tableRow = /\\|?__(?:\\|__)+\\|?(?:(?:\\n|\\r\\n?)|(?![\\s\\S]))/.source.replace(/__/g, function () { return tableCell; });\n\tvar tableLine = /\\|?[ \\t]*:?-{3,}:?[ \\t]*(?:\\|[ \\t]*:?-{3,}:?[ \\t]*)+\\|?(?:\\n|\\r\\n?)/.source;\n\n\n\tPrism.languages.markdown = Prism.languages.extend('markup', {});\n\tPrism.languages.insertBefore('markdown', 'prolog', {\n\t\t'front-matter-block': {\n\t\t\tpattern: /(^(?:\\s*[\\r\\n])?)---(?!.)[\\s\\S]*?[\\r\\n]---(?!.)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^---|---$/,\n\t\t\t\t'front-matter': {\n\t\t\t\t\tpattern: /\\S+(?:\\s+\\S+)*/,\n\t\t\t\t\talias: ['yaml', 'language-yaml'],\n\t\t\t\t\tinside: Prism.languages.yaml\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'blockquote': {\n\t\t\t// > ...\n\t\t\tpattern: /^>(?:[\\t ]*>)*/m,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'table': {\n\t\t\tpattern: RegExp('^' + tableRow + tableLine + '(?:' + tableRow + ')*', 'm'),\n\t\t\tinside: {\n\t\t\t\t'table-data-rows': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + tableLine + ')(?:' + tableRow + ')*$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-data': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-line': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + ')' + tableLine + '$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /\\||:?-{3,}:?/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-header-row': {\n\t\t\t\t\tpattern: RegExp('^' + tableRow + '$'),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-header': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\talias: 'important',\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'code': [\n\t\t\t{\n\t\t\t\t// Prefixed by 4 spaces or 1 tab and preceded by an empty line\n\t\t\t\tpattern: /((?:^|\\n)[ \\t]*\\n|(?:^|\\r\\n?)[ \\t]*\\r\\n?)(?: {4}|\\t).+(?:(?:\\n|\\r\\n?)(?: {4}|\\t).+)*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// ```optional language\n\t\t\t\t// code block\n\t\t\t\t// ```\n\t\t\t\tpattern: /^```[\\s\\S]*?^```$/m,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'code-block': {\n\t\t\t\t\t\tpattern: /^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?=(?:\\n|\\r\\n?)^```$)/m,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'code-language': {\n\t\t\t\t\t\tpattern: /^(```).+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /```/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'title': [\n\t\t\t{\n\t\t\t\t// title 1\n\t\t\t\t// =======\n\n\t\t\t\t// title 2\n\t\t\t\t// -------\n\t\t\t\tpattern: /\\S.*(?:\\n|\\r\\n?)(?:==+|--+)(?=[ \\t]*$)/m,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /==+$|--+$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// # title 1\n\t\t\t\t// ###### title 6\n\t\t\t\tpattern: /(^\\s*)#.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /^#+|#+$/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'hr': {\n\t\t\t// ***\n\t\t\t// ---\n\t\t\t// * * *\n\t\t\t// -----------\n\t\t\tpattern: /(^\\s*)([*-])(?:[\\t ]*\\2){2,}(?=\\s*$)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'list': {\n\t\t\t// * item\n\t\t\t// + item\n\t\t\t// - item\n\t\t\t// 1. item\n\t\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'url-reference': {\n\t\t\t// [id]: http://example.com \"Optional title\"\n\t\t\t// [id]: http://example.com 'Optional title'\n\t\t\t// [id]: http://example.com (Optional title)\n\t\t\t// [id]: <http://example.com> \"Optional title\"\n\t\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n\t\t\tinside: {\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n\t\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n\t\t\t},\n\t\t\talias: 'url'\n\t\t},\n\t\t'bold': {\n\t\t\t// **strong**\n\t\t\t// __strong__\n\n\t\t\t// allow one nested instance of italic text using the same delimiter\n\t\t\tpattern: createInline(/\\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\\b|\\*\\*(?:(?!\\*)<inner>|\\*(?:(?!\\*)<inner>)+\\*)+\\*\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^..)[\\s\\S]+(?=..$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\*\\*|__/\n\t\t\t}\n\t\t},\n\t\t'italic': {\n\t\t\t// *em*\n\t\t\t// _em_\n\n\t\t\t// allow one nested instance of bold text using the same delimiter\n\t\t\tpattern: createInline(/\\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\\b|\\*(?:(?!\\*)<inner>|\\*\\*(?:(?!\\*)<inner>)+\\*\\*)+\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^.)[\\s\\S]+(?=.$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /[*_]/\n\t\t\t}\n\t\t},\n\t\t'strike': {\n\t\t\t// ~~strike through~~\n\t\t\t// ~strike~\n\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\tpattern: createInline(/(~~?)(?:(?!~)<inner>)+\\2/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^~~?)[\\s\\S]+(?=\\1$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /~~?/\n\t\t\t}\n\t\t},\n\t\t'code-snippet': {\n\t\t\t// `code`\n\t\t\t// ``code``\n\t\t\tpattern: /(^|[^\\\\`])(?:``[^`\\r\\n]+(?:`[^`\\r\\n]+)*``(?!`)|`[^`\\r\\n]+`(?!`))/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: ['code', 'keyword']\n\t\t},\n\t\t'url': {\n\t\t\t// [example](http://example.com \"Optional title\")\n\t\t\t// [example][id]\n\t\t\t// [example] [id]\n\t\t\tpattern: createInline(/!?\\[(?:(?!\\])<inner>)+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)|[ \\t]?\\[(?:(?!\\])<inner>)+\\])/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'operator': /^!/,\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^\\[)[^\\]]+(?=\\])/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /(^\\][ \\t]?\\[)[^\\]]+(?=\\]$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'url': {\n\t\t\t\t\tpattern: /(^\\]\\()[^\\s)]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: /(^[ \\t]+)\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t['url', 'bold', 'italic', 'strike'].forEach(function (token) {\n\t\t['url', 'bold', 'italic', 'strike', 'code-snippet'].forEach(function (inside) {\n\t\t\tif (token !== inside) {\n\t\t\t\tPrism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];\n\t\t\t}\n\t\t});\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tif (env.language !== 'markdown' && env.language !== 'md') {\n\t\t\treturn;\n\t\t}\n\n\t\tfunction walkTokens(tokens) {\n\t\t\tif (!tokens || typeof tokens === 'string') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = tokens.length; i < l; i++) {\n\t\t\t\tvar token = tokens[i];\n\n\t\t\t\tif (token.type !== 'code') {\n\t\t\t\t\twalkTokens(token.content);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Add the correct `language-xxxx` class to this code block. Keep in mind that the `code-language` token\n\t\t\t\t * is optional. But the grammar is defined so that there is only one case we have to handle:\n\t\t\t\t *\n\t\t\t\t * token.content = [\n\t\t\t\t *     <span class=\"punctuation\">```</span>,\n\t\t\t\t *     <span class=\"code-language\">xxxx</span>,\n\t\t\t\t *     '\\n', // exactly one new lines (\\r or \\n or \\r\\n)\n\t\t\t\t *     <span class=\"code-block\">...</span>,\n\t\t\t\t *     '\\n', // exactly one new lines again\n\t\t\t\t *     <span class=\"punctuation\">```</span>\n\t\t\t\t * ];\n\t\t\t\t */\n\n\t\t\t\tvar codeLang = token.content[1];\n\t\t\t\tvar codeBlock = token.content[3];\n\n\t\t\t\tif (codeLang && codeBlock &&\n\t\t\t\t\tcodeLang.type === 'code-language' && codeBlock.type === 'code-block' &&\n\t\t\t\t\ttypeof codeLang.content === 'string') {\n\n\t\t\t\t\t// this might be a language that Prism does not support\n\n\t\t\t\t\t// do some replacements to support C++, C#, and F#\n\t\t\t\t\tvar lang = codeLang.content.replace(/\\b#/g, 'sharp').replace(/\\b\\+\\+/g, 'pp');\n\t\t\t\t\t// only use the first word\n\t\t\t\t\tlang = (/[a-z][\\w-]*/i.exec(lang) || [''])[0].toLowerCase();\n\t\t\t\t\tvar alias = 'language-' + lang;\n\n\t\t\t\t\t// add alias\n\t\t\t\t\tif (!codeBlock.alias) {\n\t\t\t\t\t\tcodeBlock.alias = [alias];\n\t\t\t\t\t} else if (typeof codeBlock.alias === 'string') {\n\t\t\t\t\t\tcodeBlock.alias = [codeBlock.alias, alias];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcodeBlock.alias.push(alias);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twalkTokens(env.tokens);\n\t});\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (env.type !== 'code-block') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar codeLang = '';\n\t\tfor (var i = 0, l = env.classes.length; i < l; i++) {\n\t\t\tvar cls = env.classes[i];\n\t\t\tvar match = /language-(.+)/.exec(cls);\n\t\t\tif (match) {\n\t\t\t\tcodeLang = match[1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvar grammar = Prism.languages[codeLang];\n\n\t\tif (!grammar) {\n\t\t\tif (codeLang && codeLang !== 'none' && Prism.plugins.autoloader) {\n\t\t\t\tvar id = 'md-' + new Date().valueOf() + '-' + Math.floor(Math.random() * 1e16);\n\t\t\t\tenv.attributes['id'] = id;\n\n\t\t\t\tPrism.plugins.autoloader.loadLanguages(codeLang, function () {\n\t\t\t\t\tvar ele = document.getElementById(id);\n\t\t\t\t\tif (ele) {\n\t\t\t\t\t\tele.innerHTML = Prism.highlight(ele.textContent, Prism.languages[codeLang], codeLang);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tenv.content = Prism.highlight(textContent(env.content), grammar, codeLang);\n\t\t}\n\t});\n\n\tvar tagPattern = RegExp(Prism.languages.markup.tag.pattern.source, 'gi');\n\n\t/**\n\t * A list of known entity names.\n\t *\n\t * This will always be incomplete to save space. The current list is the one used by lowdash's unescape function.\n\t *\n\t * @see {@link https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/unescape.js#L2}\n\t */\n\tvar KNOWN_ENTITY_NAMES = {\n\t\t'amp': '&',\n\t\t'lt': '<',\n\t\t'gt': '>',\n\t\t'quot': '\"',\n\t};\n\n\t// IE 11 doesn't support `String.fromCodePoint`\n\tvar fromCodePoint = String.fromCodePoint || String.fromCharCode;\n\n\t/**\n\t * Returns the text content of a given HTML source code string.\n\t *\n\t * @param {string} html\n\t * @returns {string}\n\t */\n\tfunction textContent(html) {\n\t\t// remove all tags\n\t\tvar text = html.replace(tagPattern, '');\n\n\t\t// decode known entities\n\t\ttext = text.replace(/&(\\w{1,8}|#x?[\\da-f]{1,8});/gi, function (m, code) {\n\t\t\tcode = code.toLowerCase();\n\n\t\t\tif (code[0] === '#') {\n\t\t\t\tvar value;\n\t\t\t\tif (code[1] === 'x') {\n\t\t\t\t\tvalue = parseInt(code.slice(2), 16);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = Number(code.slice(1));\n\t\t\t\t}\n\n\t\t\t\treturn fromCodePoint(value);\n\t\t\t} else {\n\t\t\t\tvar known = KNOWN_ENTITY_NAMES[code];\n\t\t\t\tif (known) {\n\t\t\t\t\treturn known;\n\t\t\t\t}\n\n\t\t\t\t// unable to decode\n\t\t\t\treturn m;\n\t\t\t}\n\t\t});\n\n\t\treturn text;\n\t}\n\n\tPrism.languages.md = Prism.languages.markdown;\n\n}(Prism));\n","Prism.languages.python = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])#.*/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string-interpolation': {\n\t\tpattern: /(?:f|fr|rf)(?:(\"\"\"|''')[\\s\\S]*?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2)/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\t// \"{\" <expression> <optional \"!s\", \"!r\", or \"!a\"> <optional \":\" format specifier> \"}\"\n\t\t\t\tpattern: /((?:^|[^{])(?:\\{\\{)*)\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}])+\\})+\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'format-spec': {\n\t\t\t\t\t\tpattern: /(:)[^:(){}]+(?=\\}$)/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'conversion-option': {\n\t\t\t\t\t\tpattern: /![sra](?=[:}]$)/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: null\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'triple-quoted-string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"\"\"|''')[\\s\\S]*?\\1/i,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\t'string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/i,\n\t\tgreedy: true\n\t},\n\t'function': {\n\t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/g,\n\t\tlookbehind: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\bclass\\s+)\\w+/i,\n\t\tlookbehind: true\n\t},\n\t'decorator': {\n\t\tpattern: /(^[\\t ]*)@\\w+(?:\\.\\w+)*/m,\n\t\tlookbehind: true,\n\t\talias: ['annotation', 'punctuation'],\n\t\tinside: {\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\t'keyword': /\\b(?:_(?=\\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\\b/,\n\t'builtin': /\\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\\b/,\n\t'boolean': /\\b(?:False|None|True)\\b/,\n\t'number': /\\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\\b|(?:\\b\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\B\\.\\d+(?:_\\d+)*)(?:e[+-]?\\d+(?:_\\d+)*)?j?(?!\\w)/i,\n\t'operator': /[-+%=]=?|!=|:=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\nPrism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;\n\nPrism.languages.py = Prism.languages.python;\n","Prism.languages.sql = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:--|\\/\\/|#).*)/,\n\t\tlookbehind: true\n\t},\n\t'variable': [\n\t\t{\n\t\t\tpattern: /@([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])+\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t/@[\\w.$]+/\n\t],\n\t'string': {\n\t\tpattern: /(^|[^@\\\\])(\"|')(?:\\\\[\\s\\S]|(?!\\2)[^\\\\]|\\2\\2)*\\2/,\n\t\tgreedy: true,\n\t\tlookbehind: true\n\t},\n\t'identifier': {\n\t\tpattern: /(^|[^@\\\\])`(?:\\\\[\\s\\S]|[^`\\\\]|``)*`/,\n\t\tgreedy: true,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /^`|`$/\n\t\t}\n\t},\n\t'function': /\\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\\s*\\()/i, // Should we highlight user defined functions too?\n\t'keyword': /\\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\\b/i,\n\t'boolean': /\\b(?:FALSE|NULL|TRUE)\\b/i,\n\t'number': /\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+\\b/i,\n\t'operator': /[-+*\\/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\\b/i,\n\t'punctuation': /[;[\\]()`,.]/\n};\n","Prism.languages.c = Prism.languages.extend('clike', {\n\t'comment': {\n\t\tpattern: /\\/\\/(?:[^\\r\\n\\\\]|\\\\(?:\\r\\n?|\\n|(?![\\r\\n])))*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\t// https://en.cppreference.com/w/c/language/string_literal\n\t\tpattern: /\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:enum|struct)\\s+(?:__attribute__\\s*\\(\\([\\s\\S]*?\\)\\)\\s*)?)\\w+|\\b[a-z]\\w*_t\\b/,\n\t\tlookbehind: true\n\t},\n\t'keyword': /\\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'number': /(?:\\b0x(?:[\\da-f]+(?:\\.[\\da-f]*)?|\\.[\\da-f]+)(?:p[+-]?\\d+)?|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[ful]{0,4}/i,\n\t'operator': />>=?|<<=?|->|([-+&|:])\\1|[?:~]|[-+*/%&|^!=<>]=?/\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'char': {\n\t\t// https://en.cppreference.com/w/c/language/character_constant\n\t\tpattern: /'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n]){0,32}'/,\n\t\tgreedy: true\n\t}\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'macro': {\n\t\t// allow for multiline macro definitions\n\t\t// spaces after the # character compile fine with gcc\n\t\tpattern: /(^[\\t ]*)#\\s*[a-z](?:[^\\r\\n\\\\/]|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|\\\\(?:\\r\\n|[\\s\\S]))*/im,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'string': [\n\t\t\t\t{\n\t\t\t\t\t// highlight the path of the include statement as a string\n\t\t\t\t\tpattern: /^(#\\s*include\\s*)<[^>]+>/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\tPrism.languages.c['string']\n\t\t\t],\n\t\t\t'char': Prism.languages.c['char'],\n\t\t\t'comment': Prism.languages.c['comment'],\n\t\t\t'macro-name': [\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?!\\()/i,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?=\\()/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'function'\n\t\t\t\t}\n\t\t\t],\n\t\t\t// highlight macro directives as keywords\n\t\t\t'directive': {\n\t\t\t\tpattern: /^(#\\s*)[a-z]+/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t'directive-hash': /^#/,\n\t\t\t'punctuation': /##|\\\\(?=[\\r\\n])/,\n\t\t\t'expression': {\n\t\t\t\tpattern: /\\S[\\s\\S]*/,\n\t\t\t\tinside: Prism.languages.c\n\t\t\t}\n\t\t}\n\t}\n});\n\nPrism.languages.insertBefore('c', 'function', {\n\t// highlight predefined macros as constants\n\t'constant': /\\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\\b/\n});\n\ndelete Prism.languages.c['boolean'];\n","Prism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n","Prism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n","\n/* **********************************************\n     Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (document.currentScript && document.currentScript.tagName === 'SCRIPT' && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","// https://www.json.org/json-en.html\nPrism.languages.json = {\n\t'property': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?!\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'number': /-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n\t'punctuation': /[{}[\\],]/,\n\t'operator': /:/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'null': {\n\t\tpattern: /\\bnull\\b/,\n\t\talias: 'keyword'\n\t}\n};\n\nPrism.languages.webmanifest = Prism.languages.json;\n","Prism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n","(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n","(function (Prism) {\n\n\tvar keyword = /\\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\\b/;\n\tvar modName = /\\b(?!<keyword>)\\w+(?:\\s*\\.\\s*\\w+)*\\b/.source.replace(/<keyword>/g, function () { return keyword.source; });\n\n\tPrism.languages.cpp = Prism.languages.extend('c', {\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\b(?:class|concept|enum|struct|typename)\\s+)(?!<keyword>)\\w+/.source\n\t\t\t\t\t.replace(/<keyword>/g, function () { return keyword.source; })),\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t// This is intended to capture the class name of method implementations like:\n\t\t\t//   void foo::bar() const {}\n\t\t\t// However! The `foo` in the above example could also be a namespace, so we only capture the class name if\n\t\t\t// it starts with an uppercase letter. This approximation should give decent results.\n\t\t\t/\\b[A-Z]\\w*(?=\\s*::\\s*\\w+\\s*\\()/,\n\t\t\t// This will capture the class name before destructors like:\n\t\t\t//   Foo::~Foo() {}\n\t\t\t/\\b[A-Z_]\\w*(?=\\s*::\\s*~\\w+\\s*\\()/i,\n\t\t\t// This also intends to capture the class name of method implementations but here the class has template\n\t\t\t// parameters, so it can't be a namespace (until C++ adds generic namespaces).\n\t\t\t/\\b\\w+(?=\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\\s*::\\s*\\w+\\s*\\()/\n\t\t],\n\t\t'keyword': keyword,\n\t\t'number': {\n\t\t\tpattern: /(?:\\b0b[01']+|\\b0x(?:[\\da-f']+(?:\\.[\\da-f']*)?|\\.[\\da-f']+)(?:p[+-]?[\\d']+)?|(?:\\b[\\d']+(?:\\.[\\d']*)?|\\B\\.[\\d']+)(?:e[+-]?[\\d']+)?)[ful]{0,4}/i,\n\t\t\tgreedy: true\n\t\t},\n\t\t'operator': />>=?|<<=?|->|--|\\+\\+|&&|\\|\\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'string', {\n\t\t'module': {\n\t\t\t// https://en.cppreference.com/w/cpp/language/modules\n\t\t\tpattern: RegExp(\n\t\t\t\t/(\\b(?:import|module)\\s+)/.source +\n\t\t\t\t'(?:' +\n\t\t\t\t// header-name\n\t\t\t\t/\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|<[^<>\\r\\n]*>/.source +\n\t\t\t\t'|' +\n\t\t\t\t// module name or partition or both\n\t\t\t\t/<mod-name>(?:\\s*:\\s*<mod-name>)?|:\\s*<mod-name>/.source.replace(/<mod-name>/g, function () { return modName; }) +\n\t\t\t\t')'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'string': /^[<\"][\\s\\S]+/,\n\t\t\t\t'operator': /:/,\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t},\n\t\t'raw-string': {\n\t\t\tpattern: /R\"([^()\\\\ ]{0,16})\\([\\s\\S]*?\\)\\1\"/,\n\t\t\talias: 'string',\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'keyword', {\n\t\t'generic-function': {\n\t\t\tpattern: /\\b(?!operator\\b)[a-z_]\\w*\\s*<(?:[^<>]|<[^<>]*>)*>(?=\\s*\\()/i,\n\t\t\tinside: {\n\t\t\t\t'function': /^\\w+/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/,\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: Prism.languages.cpp\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'operator', {\n\t\t'double-colon': {\n\t\t\tpattern: /::/,\n\t\t\talias: 'punctuation'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'class-name', {\n\t\t// the base clause is an optional list of parent classes\n\t\t// https://en.cppreference.com/w/cpp/language/class\n\t\t'base-clause': {\n\t\t\tpattern: /(\\b(?:class|struct)\\s+\\w+\\s*:\\s*)[^;{}\"'\\s]+(?:\\s+[^;{}\"'\\s]+)*(?=\\s*[;{])/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: Prism.languages.extend('cpp', {})\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('inside', 'double-colon', {\n\t\t// All untokenized words that are not namespaces should be class names\n\t\t'class-name': /\\b[a-z_]\\w*\\b(?!\\s*::)/i\n\t}, Prism.languages.cpp['base-clause']);\n\n}(Prism));\n","(function (Prism) {\n\n\tPrism.languages.typescript = Prism.languages.extend('javascript', {\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|type)\\s+)(?!keyof\\b)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?:\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: null // see below\n\t\t},\n\t\t'builtin': /\\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\\b/,\n\t});\n\n\t// The keywords TypeScript adds to JavaScript\n\tPrism.languages.typescript.keyword.push(\n\t\t/\\b(?:abstract|declare|is|keyof|readonly|require)\\b/,\n\t\t// keywords that have to be followed by an identifier\n\t\t/\\b(?:asserts|infer|interface|module|namespace|type)\\b(?=\\s*(?:[{_$a-zA-Z\\xA0-\\uFFFF]|$))/,\n\t\t// This is for `import type *, {}`\n\t\t/\\btype\\b(?=\\s*(?:[\\{*]|$))/\n\t);\n\n\t// doesn't work with TS because TS is too complex\n\tdelete Prism.languages.typescript['parameter'];\n\tdelete Prism.languages.typescript['literal-property'];\n\n\t// a version of typescript specifically for highlighting types\n\tvar typeInside = Prism.languages.extend('typescript', {});\n\tdelete typeInside['class-name'];\n\n\tPrism.languages.typescript['class-name'].inside = typeInside;\n\n\tPrism.languages.insertBefore('typescript', 'function', {\n\t\t'decorator': {\n\t\t\tpattern: /@[$\\w\\xA0-\\uFFFF]+/,\n\t\t\tinside: {\n\t\t\t\t'at': {\n\t\t\t\t\tpattern: /^@/,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t},\n\t\t\t\t'function': /^[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'generic-function': {\n\t\t\t// e.g. foo<T extends \"bar\" | \"baz\">( ...\n\t\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\\s*\\()/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/, // everything after the first <\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: typeInside\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.ts = Prism.languages.typescript;\n\n}(Prism));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Prism from \"prismjs\";\nimport \"prismjs/components/prism-markup.js\";\nimport \"prismjs/components/prism-css.js\";\nimport \"prismjs/components/prism-clike.js\";\nimport \"prismjs/components/prism-javascript.js\";\nimport \"prismjs/components/prism-c.js\";\nimport \"prismjs/components/prism-cpp.js\";\nimport \"prismjs/components/prism-markdown.js\";\nimport \"prismjs/components/prism-json.js\";\nimport \"prismjs/components/prism-sql.js\";\nimport \"prismjs/components/prism-python.js\";\nimport \"prismjs/components/prism-typescript.js\";\n\nexport function runTest(samples) {\n  const results = [];\n  for (const { content, lang } of samples) {\n    const highlighted = Prism.highlight(content, Prism.languages[lang], lang);\n    results.push({\n      html: highlighted,\n    });\n  }\n  return results;\n}\n"],"names":["Prism","inner","source","createInline","pattern","replace","RegExp","tableCell","tableRow","tableLine","languages","markdown","extend","insertBefore","lookbehind","greedy","inside","alias","yaml","punctuation","forEach","token","content","hooks","add","env","language","walkTokens","tokens","i","l","length","type","codeLang","codeBlock","lang","exec","toLowerCase","push","classes","cls","match","html","grammar","highlight","tagPattern","m","code","value","parseInt","slice","Number","fromCodePoint","known","KNOWN_ENTITY_NAMES","plugins","autoloader","id","Date","valueOf","Math","floor","random","attributes","loadLanguages","ele","document","getElementById","innerHTML","textContent","markup","tag","String","fromCharCode","md","python","rest","py","sql","c","javascript","clike","regex","addInlined","addAttribute","js","_self","uniqueId","plainTextGrammar","_","manual","disableWorkerMessageHandler","util","encode","Token","Array","isArray","map","o","Object","prototype","toString","call","objId","obj","defineProperty","clone","deepClone","visited","key","hasOwnProperty","v","getLanguage","element","className","parentElement","setLanguage","classList","currentScript","tagName","Error","err","src","stack","scripts","getElementsByTagName","isActive","defaultActivation","no","contains","plain","plaintext","text","txt","redef","before","insert","root","ret","newToken","old","DFS","this","callback","property","propertyType","highlightAll","async","highlightAllUnder","container","selector","run","elements","apply","querySelectorAll","highlightElement","parent","nodeName","insertHighlightedCode","highlightedCode","hasAttribute","setAttribute","Worker","worker","filename","onmessage","evt","data","postMessage","JSON","stringify","immediateClose","tokenize","tokenList","LinkedList","addAfter","head","matchGrammar","list","array","node","next","tail","toArray","all","name","callbacks","matchedStr","matchPattern","pos","lastIndex","lookbehindLength","index","startNode","startPos","rematch","patterns","j","cause","patternObj","global","flags","currentNode","reach","str","removeCount","from","to","p","k","matchStr","after","removeFrom","prev","removeRange","nestedRematch","newNode","count","s","e","aliases","join","addEventListener","message","parse","close","script","highlightAutomaticallyCallback","readyState","defer","window","requestAnimationFrame","setTimeout","WorkerGlobalScope","self","module","exports","includedCdataInside","def","attrName","mathml","svg","xml","ssml","atom","rss","string","css","Element","matches","msMatchesSelector","webkitMatchesSelector","EXTENSIONS","STATUS_ATTR","STATUS_LOADING","STATUS_LOADED","SELECTOR","pre","appendChild","createElement","getAttribute","extension","success","error","xhr","XMLHttpRequest","open","onreadystatechange","status","responseText","statusText","send","loadFile","range","start","comma","end","undefined","parseRange","lines","split","max","min","fileHighlight","logged","console","warn","arguments","json","webmanifest","keyword","modName","cpp","typescript","typeInside","ts","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","enumerable","get","g","globalThis","Function","prop","r","Symbol","toStringTag","runTest","samples","results","highlighted"],"sourceRoot":""}
\ No newline at end of file
diff --git a/prismjs/dist/bundle.es6.js b/prismjs/dist/bundle.es6.js
new file mode 100644
index 0000000..cb7c295
--- /dev/null
+++ b/prismjs/dist/bundle.es6.js
@@ -0,0 +1,145 @@
+/*! For license information please see bundle.es6.js.LICENSE.txt */
+(()=>{var __webpack_modules__={19:()=>{!function(Prism){
+/*ThouShaltNotCache*/
+var inner=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function createInline(pattern){
+/*ThouShaltNotCache*/
+return pattern=pattern.replace(/<inner>/g,function(){
+/*ThouShaltNotCache*/
+return inner}),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+pattern+")")}var tableCell=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,tableRow=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){
+/*ThouShaltNotCache*/
+return tableCell}),tableLine=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;Prism.languages.markdown=Prism.languages.extend("markup",{}),Prism.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:Prism.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+tableRow+tableLine+"(?:"+tableRow+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+tableRow+tableLine+")(?:"+tableRow+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(tableCell),inside:Prism.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+tableRow+")"+tableLine+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+tableRow+"$"),inside:{"table-header":{pattern:RegExp(tableCell),alias:"important",inside:Prism.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:createInline(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:createInline(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:createInline(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:createInline(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(token){
+/*ThouShaltNotCache*/
+["url","bold","italic","strike","code-snippet"].forEach(function(inside){
+/*ThouShaltNotCache*/
+token!==inside&&(Prism.languages.markdown[token].inside.content.inside[inside]=Prism.languages.markdown[inside])})}),Prism.hooks.add("after-tokenize",function(env){
+/*ThouShaltNotCache*/
+"markdown"!==env.language&&"md"!==env.language||function walkTokens(tokens){
+/*ThouShaltNotCache*/
+if(tokens&&"string"!=typeof tokens)for(var i=0,l=tokens.length;i<l;i++){var token=tokens[i];if("code"===token.type){var codeLang=token.content[1],codeBlock=token.content[3];if(codeLang&&codeBlock&&"code-language"===codeLang.type&&"code-block"===codeBlock.type&&"string"==typeof codeLang.content){var lang=codeLang.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),alias="language-"+(lang=(/[a-z][\w-]*/i.exec(lang)||[""])[0].toLowerCase());codeBlock.alias?"string"==typeof codeBlock.alias?codeBlock.alias=[codeBlock.alias,alias]:codeBlock.alias.push(alias):codeBlock.alias=[alias]}}else walkTokens(token.content)}}(env.tokens)}),Prism.hooks.add("wrap",function(env){
+/*ThouShaltNotCache*/
+if("code-block"===env.type){for(var codeLang="",i=0,l=env.classes.length;i<l;i++){var cls=env.classes[i],match=/language-(.+)/.exec(cls);if(match){codeLang=match[1];break}}var html,grammar=Prism.languages[codeLang];if(grammar)env.content=Prism.highlight((html=env.content,html.replace(tagPattern,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(m,code){var value;if("#"===(
+/*ThouShaltNotCache*/
+code=code.toLowerCase())[0])return value="x"===code[1]?parseInt(code.slice(2),16):Number(code.slice(1)),fromCodePoint(value);var known=KNOWN_ENTITY_NAMES[code];return known||m})),grammar,codeLang);else if(codeLang&&"none"!==codeLang&&Prism.plugins.autoloader){var id="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());env.attributes.id=id,Prism.plugins.autoloader.loadLanguages(codeLang,function(){
+/*ThouShaltNotCache*/
+var ele=document.getElementById(id);ele&&(ele.innerHTML=Prism.highlight(ele.textContent,Prism.languages[codeLang],codeLang))})}}});var tagPattern=RegExp(Prism.languages.markup.tag.pattern.source,"gi"),KNOWN_ENTITY_NAMES={amp:"&",lt:"<",gt:">",quot:'"'},fromCodePoint=String.fromCodePoint||String.fromCharCode;Prism.languages.md=Prism.languages.markdown}(Prism)},44:()=>{Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},244:()=>{Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}},421:()=>{Prism.languages.c=Prism.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],char:Prism.languages.c.char,comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}}}),Prism.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete Prism.languages.c.boolean},613:()=>{Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),Prism.languages.js=Prism.languages.javascript},634:()=>{Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}},642:(module,__unused_webpack_exports,__webpack_require__)=>{var Prism=function(_self){
+/*ThouShaltNotCache*/
+var lang=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,uniqueId=0,plainTextGrammar={},_={manual:_self.Prism&&_self.Prism.manual,disableWorkerMessageHandler:_self.Prism&&_self.Prism.disableWorkerMessageHandler,util:{encode:function encode(tokens){
+/*ThouShaltNotCache*/
+return tokens instanceof Token?new Token(tokens.type,encode(tokens.content),tokens.alias):Array.isArray(tokens)?tokens.map(encode):tokens.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(o){
+/*ThouShaltNotCache*/
+return Object.prototype.toString.call(o).slice(8,-1)},objId:function(obj){
+/*ThouShaltNotCache*/
+return obj.__id||Object.defineProperty(obj,"__id",{value:++uniqueId}),obj.__id},clone:function deepClone(o,visited){var clone,id;switch(
+/*ThouShaltNotCache*/
+visited=visited||{},_.util.type(o)){case"Object":if(id=_.util.objId(o),visited[id])return visited[id];for(var key in clone={},visited[id]=clone,o)o.hasOwnProperty(key)&&(clone[key]=deepClone(o[key],visited));return clone;case"Array":return id=_.util.objId(o),visited[id]?visited[id]:(clone=[],visited[id]=clone,o.forEach(function(v,i){
+/*ThouShaltNotCache*/
+clone[i]=deepClone(v,visited)}),clone);default:return o}},getLanguage:function(element){
+/*ThouShaltNotCache*/
+for(;element;){var m=lang.exec(element.className);if(m)return m[1].toLowerCase();element=element.parentElement}return"none"},setLanguage:function(element,language){
+/*ThouShaltNotCache*/
+element.className=element.className.replace(RegExp(lang,"gi"),""),element.classList.add("language-"+language)},currentScript:function(){
+/*ThouShaltNotCache*/
+if("undefined"==typeof document)return null;if(document.currentScript&&"SCRIPT"===document.currentScript.tagName)return document.currentScript;try{throw new Error}catch(err){var src=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(err.stack)||[])[1];if(src){var scripts=document.getElementsByTagName("script");for(var i in scripts)if(scripts[i].src==src)return scripts[i]}return null}},isActive:function(element,className,defaultActivation){for(
+/*ThouShaltNotCache*/
+var no="no-"+className;element;){var classList=element.classList;if(classList.contains(className))return!0;if(classList.contains(no))return!1;element=element.parentElement}return!!defaultActivation}},languages:{plain:plainTextGrammar,plaintext:plainTextGrammar,text:plainTextGrammar,txt:plainTextGrammar,extend:function(id,redef){
+/*ThouShaltNotCache*/
+var lang=_.util.clone(_.languages[id]);for(var key in redef)lang[key]=redef[key];return lang},insertBefore:function(inside,before,insert,root){var grammar=(
+/*ThouShaltNotCache*/
+root=root||_.languages)[inside],ret={};for(var token in grammar)if(grammar.hasOwnProperty(token)){if(token==before)for(var newToken in insert)insert.hasOwnProperty(newToken)&&(ret[newToken]=insert[newToken]);insert.hasOwnProperty(token)||(ret[token]=grammar[token])}var old=root[inside];return root[inside]=ret,_.languages.DFS(_.languages,function(key,value){
+/*ThouShaltNotCache*/
+value===old&&key!=inside&&(this[key]=ret)}),ret},DFS:function DFS(o,callback,type,visited){
+/*ThouShaltNotCache*/
+visited=visited||{};var objId=_.util.objId;for(var i in o)if(o.hasOwnProperty(i)){callback.call(o,i,o[i],type||i);var property=o[i],propertyType=_.util.type(property);"Object"!==propertyType||visited[objId(property)]?"Array"!==propertyType||visited[objId(property)]||(visited[objId(property)]=!0,DFS(property,callback,i,visited)):(visited[objId(property)]=!0,DFS(property,callback,null,visited))}}},plugins:{},highlightAll:function(async,callback){
+/*ThouShaltNotCache*/
+_.highlightAllUnder(document,async,callback)},highlightAllUnder:function(container,async,callback){
+/*ThouShaltNotCache*/
+var env={callback,container,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};_.hooks.run("before-highlightall",env),env.elements=Array.prototype.slice.apply(env.container.querySelectorAll(env.selector)),_.hooks.run("before-all-elements-highlight",env);for(var element,i=0;element=env.elements[i++];)_.highlightElement(element,!0===async,env.callback)},highlightElement:function(element,async,callback){
+/*ThouShaltNotCache*/
+var language=_.util.getLanguage(element),grammar=_.languages[language];_.util.setLanguage(element,language);var parent=element.parentElement;parent&&"pre"===parent.nodeName.toLowerCase()&&_.util.setLanguage(parent,language);var env={element,language,grammar,code:element.textContent};function insertHighlightedCode(highlightedCode){
+/*ThouShaltNotCache*/
+env.highlightedCode=highlightedCode,_.hooks.run("before-insert",env),env.element.innerHTML=env.highlightedCode,_.hooks.run("after-highlight",env),_.hooks.run("complete",env),callback&&callback.call(env.element)}if(_.hooks.run("before-sanity-check",env),(parent=env.element.parentElement)&&"pre"===parent.nodeName.toLowerCase()&&!parent.hasAttribute("tabindex")&&parent.setAttribute("tabindex","0"),!env.code)return _.hooks.run("complete",env),void(callback&&callback.call(env.element));if(_.hooks.run("before-highlight",env),env.grammar)if(async&&_self.Worker){var worker=new Worker(_.filename);worker.onmessage=function(evt){
+/*ThouShaltNotCache*/
+insertHighlightedCode(evt.data)},worker.postMessage(JSON.stringify({language:env.language,code:env.code,immediateClose:!0}))}else insertHighlightedCode(_.highlight(env.code,env.grammar,env.language));else insertHighlightedCode(_.util.encode(env.code))},highlight:function(text,grammar,language){
+/*ThouShaltNotCache*/
+var env={code:text,grammar,language};if(_.hooks.run("before-tokenize",env),!env.grammar)throw new Error('The language "'+env.language+'" has no grammar.');return env.tokens=_.tokenize(env.code,env.grammar),_.hooks.run("after-tokenize",env),Token.stringify(_.util.encode(env.tokens),env.language)},tokenize:function(text,grammar){
+/*ThouShaltNotCache*/
+var rest=grammar.rest;if(rest){for(var token in rest)grammar[token]=rest[token];delete grammar.rest}var tokenList=new LinkedList;return addAfter(tokenList,tokenList.head,text),matchGrammar(text,tokenList,grammar,tokenList.head,0),function(list){
+/*ThouShaltNotCache*/
+var array=[],node=list.head.next;for(;node!==list.tail;)array.push(node.value),node=node.next;return array}(tokenList)},hooks:{all:{},add:function(name,callback){
+/*ThouShaltNotCache*/
+var hooks=_.hooks.all;hooks[name]=hooks[name]||[],hooks[name].push(callback)},run:function(name,env){
+/*ThouShaltNotCache*/
+var callbacks=_.hooks.all[name];if(callbacks&&callbacks.length)for(var callback,i=0;callback=callbacks[i++];)callback(env)}},Token};function Token(type,content,alias,matchedStr){
+/*ThouShaltNotCache*/
+this.type=type,this.content=content,this.alias=alias,this.length=0|(matchedStr||"").length}function matchPattern(pattern,pos,text,lookbehind){
+/*ThouShaltNotCache*/
+pattern.lastIndex=pos;var match=pattern.exec(text);if(match&&lookbehind&&match[1]){var lookbehindLength=match[1].length;match.index+=lookbehindLength,match[0]=match[0].slice(lookbehindLength)}return match}function matchGrammar(text,tokenList,grammar,startNode,startPos,rematch){
+/*ThouShaltNotCache*/
+for(var token in grammar)if(grammar.hasOwnProperty(token)&&grammar[token]){var patterns=grammar[token];patterns=Array.isArray(patterns)?patterns:[patterns];for(var j=0;j<patterns.length;++j){if(rematch&&rematch.cause==token+","+j)return;var patternObj=patterns[j],inside=patternObj.inside,lookbehind=!!patternObj.lookbehind,greedy=!!patternObj.greedy,alias=patternObj.alias;if(greedy&&!patternObj.pattern.global){var flags=patternObj.pattern.toString().match(/[imsuy]*$/)[0];patternObj.pattern=RegExp(patternObj.pattern.source,flags+"g")}for(var pattern=patternObj.pattern||patternObj,currentNode=startNode.next,pos=startPos;currentNode!==tokenList.tail&&!(rematch&&pos>=rematch.reach);pos+=currentNode.value.length,currentNode=currentNode.next){var str=currentNode.value;if(tokenList.length>text.length)return;if(!(str instanceof Token)){var match,removeCount=1;if(greedy){if(!(match=matchPattern(pattern,pos,text,lookbehind))||match.index>=text.length)break;var from=match.index,to=match.index+match[0].length,p=pos;for(p+=currentNode.value.length;from>=p;)p+=(currentNode=currentNode.next).value.length;if(pos=p-=currentNode.value.length,currentNode.value instanceof Token)continue;for(var k=currentNode;k!==tokenList.tail&&(p<to||"string"==typeof k.value);k=k.next)removeCount++,p+=k.value.length;removeCount--,str=text.slice(pos,p),match.index-=pos}else if(!(match=matchPattern(pattern,0,str,lookbehind)))continue;from=match.index;var matchStr=match[0],before=str.slice(0,from),after=str.slice(from+matchStr.length),reach=pos+str.length;rematch&&reach>rematch.reach&&(rematch.reach=reach);var removeFrom=currentNode.prev;if(before&&(removeFrom=addAfter(tokenList,removeFrom,before),pos+=before.length),removeRange(tokenList,removeFrom,removeCount),currentNode=addAfter(tokenList,removeFrom,new Token(token,inside?_.tokenize(matchStr,inside):matchStr,alias,matchStr)),after&&addAfter(tokenList,currentNode,after),removeCount>1){var nestedRematch={cause:token+","+j,reach};matchGrammar(text,tokenList,grammar,currentNode.prev,pos,nestedRematch),rematch&&nestedRematch.reach>rematch.reach&&(rematch.reach=nestedRematch.reach)}}}}}}function LinkedList(){
+/*ThouShaltNotCache*/
+var head={value:null,prev:null,next:null},tail={value:null,prev:head,next:null};head.next=tail,this.head=head,this.tail=tail,this.length=0}function addAfter(list,node,value){
+/*ThouShaltNotCache*/
+var next=node.next,newNode={value,prev:node,next};return node.next=newNode,next.prev=newNode,list.length++,newNode}function removeRange(list,node,count){for(
+/*ThouShaltNotCache*/
+var next=node.next,i=0;i<count&&next!==list.tail;i++)next=next.next;node.next=next,next.prev=node,list.length-=i}if(_self.Prism=_,Token.stringify=function stringify(o,language){
+/*ThouShaltNotCache*/
+if("string"==typeof o)return o;if(Array.isArray(o)){var s="";return o.forEach(function(e){
+/*ThouShaltNotCache*/
+s+=stringify(e,language)}),s}var env={type:o.type,content:stringify(o.content,language),tag:"span",classes:["token",o.type],attributes:{},language},aliases=o.alias;aliases&&(Array.isArray(aliases)?Array.prototype.push.apply(env.classes,aliases):env.classes.push(aliases)),_.hooks.run("wrap",env);var attributes="";for(var name in env.attributes)attributes+=" "+name+'="'+(env.attributes[name]||"").replace(/"/g,"&quot;")+'"';return"<"+env.tag+' class="'+env.classes.join(" ")+'"'+attributes+">"+env.content+"</"+env.tag+">"},!_self.document)return _self.addEventListener?(_.disableWorkerMessageHandler||_self.addEventListener("message",function(evt){
+/*ThouShaltNotCache*/
+var message=JSON.parse(evt.data),lang=message.language,code=message.code,immediateClose=message.immediateClose;_self.postMessage(_.highlight(code,_.languages[lang],lang)),immediateClose&&_self.close()},!1),_):_;var script=_.util.currentScript();function highlightAutomaticallyCallback(){
+/*ThouShaltNotCache*/
+_.manual||_.highlightAll()}if(script&&(_.filename=script.src,script.hasAttribute("data-manual")&&(_.manual=!0)),!_.manual){var readyState=document.readyState;"loading"===readyState||"interactive"===readyState&&script&&script.defer?document.addEventListener("DOMContentLoaded",highlightAutomaticallyCallback):window.requestAnimationFrame?window.requestAnimationFrame(highlightAutomaticallyCallback):window.setTimeout(highlightAutomaticallyCallback,16)}return _}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});module.exports&&(module.exports=Prism),void 0!==__webpack_require__.g&&(__webpack_require__.g.Prism=Prism),Prism.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(env){
+/*ThouShaltNotCache*/
+"entity"===env.type&&(env.attributes.title=env.content.replace(/&amp;/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(tagName,lang){
+/*ThouShaltNotCache*/
+var includedCdataInside={};includedCdataInside["language-"+lang]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Prism.languages[lang]},includedCdataInside.cdata=/^<!\[CDATA\[|\]\]>$/i;var inside={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:includedCdataInside}};inside["language-"+lang]={pattern:/[\s\S]+/,inside:Prism.languages[lang]};var def={};def[tagName]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){
+/*ThouShaltNotCache*/
+return tagName}),"i"),lookbehind:!0,greedy:!0,inside},Prism.languages.insertBefore("markup","cdata",def)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(attrName,lang){
+/*ThouShaltNotCache*/
+Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+attrName+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[lang,"language-"+lang],inside:Prism.languages[lang]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml,function(Prism){
+/*ThouShaltNotCache*/
+var string=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;Prism.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+string.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+string.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+string.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+string.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:string,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},Prism.languages.css.atrule.inside.rest=Prism.languages.css;var markup=Prism.languages.markup;markup&&(markup.tag.addInlined("style","css"),markup.tag.addAttribute("style","css"))}(Prism),Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),Prism.languages.js=Prism.languages.javascript,function(){
+/*ThouShaltNotCache*/
+if(void 0!==Prism&&"undefined"!=typeof document){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var EXTENSIONS={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},SELECTOR='pre[data-src]:not([data-src-status="loaded"]):not([data-src-status="loading"])';Prism.hooks.add("before-highlightall",function(env){
+/*ThouShaltNotCache*/
+env.selector+=", "+SELECTOR}),Prism.hooks.add("before-sanity-check",function(env){
+/*ThouShaltNotCache*/
+var pre=env.element;if(pre.matches(SELECTOR)){env.code="",pre.setAttribute("data-src-status","loading");var code=pre.appendChild(document.createElement("CODE"));code.textContent="Loading\u2026";var src=pre.getAttribute("data-src"),language=env.language;if("none"===language){var extension=(/\.(\w+)$/.exec(src)||[,"none"])[1];language=EXTENSIONS[extension]||extension}Prism.util.setLanguage(code,language),Prism.util.setLanguage(pre,language);var autoloader=Prism.plugins.autoloader;autoloader&&autoloader.loadLanguages(language),function(src,success,error){
+/*ThouShaltNotCache*/
+var xhr=new XMLHttpRequest;xhr.open("GET",src,!0),xhr.onreadystatechange=function(){
+/*ThouShaltNotCache*/
+4==xhr.readyState&&(xhr.status<400&&xhr.responseText?success(xhr.responseText):xhr.status>=400?error("\u2716 Error "+xhr.status+" while fetching file: "+xhr.statusText):error("\u2716 Error: File does not exist or is empty"))},xhr.send(null)}(src,function(text){
+/*ThouShaltNotCache*/
+pre.setAttribute("data-src-status","loaded");var range=function(range){
+/*ThouShaltNotCache*/
+var m=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(range||"");if(m){var start=Number(m[1]),comma=m[2],end=m[3];return comma?end?[start,Number(end)]:[start,void 0]:[start,start]}}(pre.getAttribute("data-range"));if(range){var lines=text.split(/\r\n?|\n/g),start=range[0],end=null==range[1]?lines.length:range[1];start<0&&(start+=lines.length),start=Math.max(0,Math.min(start-1,lines.length)),end<0&&(end+=lines.length),end=Math.max(0,Math.min(end,lines.length)),text=lines.slice(start,end).join("\n"),pre.hasAttribute("data-start")||pre.setAttribute("data-start",String(start+1))}code.textContent=text,Prism.highlightElement(code)},function(error){
+/*ThouShaltNotCache*/
+pre.setAttribute("data-src-status","failed"),code.textContent=error})}}),Prism.plugins.fileHighlight={highlight:function(container){for(
+/*ThouShaltNotCache*/
+var element,elements=(container||document).querySelectorAll(SELECTOR),i=0;element=elements[i++];)Prism.highlightElement(element)}};var logged=!1;Prism.fileHighlight=function(){
+/*ThouShaltNotCache*/
+logged||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),logged=!0),Prism.plugins.fileHighlight.highlight.apply(this,arguments)}}}()},648:()=>{Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},694:()=>{Prism.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(env){
+/*ThouShaltNotCache*/
+"entity"===env.type&&(env.attributes.title=env.content.replace(/&amp;/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(tagName,lang){
+/*ThouShaltNotCache*/
+var includedCdataInside={};includedCdataInside["language-"+lang]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Prism.languages[lang]},includedCdataInside.cdata=/^<!\[CDATA\[|\]\]>$/i;var inside={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:includedCdataInside}};inside["language-"+lang]={pattern:/[\s\S]+/,inside:Prism.languages[lang]};var def={};def[tagName]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){
+/*ThouShaltNotCache*/
+return tagName}),"i"),lookbehind:!0,greedy:!0,inside},Prism.languages.insertBefore("markup","cdata",def)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(attrName,lang){
+/*ThouShaltNotCache*/
+Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+attrName+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[lang,"language-"+lang],inside:Prism.languages[lang]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml},871:()=>{!function(Prism){
+/*ThouShaltNotCache*/
+var string=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;Prism.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+string.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+string.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+string.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+string.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:string,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},Prism.languages.css.atrule.inside.rest=Prism.languages.css;var markup=Prism.languages.markup;markup&&(markup.tag.addInlined("style","css"),markup.tag.addAttribute("style","css"))}(Prism)},893:()=>{!function(Prism){
+/*ThouShaltNotCache*/
+var keyword=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,modName=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,function(){
+/*ThouShaltNotCache*/
+return keyword.source});Prism.languages.cpp=Prism.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,function(){
+/*ThouShaltNotCache*/
+return keyword.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),Prism.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,function(){
+/*ThouShaltNotCache*/
+return modName})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),Prism.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:Prism.languages.cpp}}}}),Prism.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),Prism.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:Prism.languages.extend("cpp",{})}}),Prism.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},Prism.languages.cpp["base-clause"])}(Prism)},973:()=>{!function(Prism){
+/*ThouShaltNotCache*/
+Prism.languages.typescript=Prism.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),Prism.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete Prism.languages.typescript.parameter,delete Prism.languages.typescript["literal-property"];var typeInside=Prism.languages.extend("typescript",{});delete typeInside["class-name"],Prism.languages.typescript["class-name"].inside=typeInside,Prism.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:typeInside}}}}),Prism.languages.ts=Prism.languages.typescript}(Prism)}},__webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(void 0!==cachedModule)return cachedModule.exports;var module=__webpack_module_cache__[moduleId]={exports:{}};return __webpack_modules__[moduleId](module,module.exports,__webpack_require__),module.exports}__webpack_require__.d=(exports,definition)=>{for(var key in definition)__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)&&Object.defineProperty(exports,key,{enumerable:!0,get:definition[key]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(obj,prop)=>Object.prototype.hasOwnProperty.call(obj,prop),__webpack_require__.r=exports=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})};var __webpack_exports__={};(()=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{runTest:()=>runTest});var prismjs__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(642);__webpack_require__(694),__webpack_require__(871),__webpack_require__(634),__webpack_require__(613),__webpack_require__(421),__webpack_require__(893),__webpack_require__(19),__webpack_require__(648),__webpack_require__(244),__webpack_require__(44),__webpack_require__(973);function runTest(samples){
+/*ThouShaltNotCache*/
+const results=[];for(const{content,lang}of samples){const highlighted=prismjs__WEBPACK_IMPORTED_MODULE_0__.highlight(content,prismjs__WEBPACK_IMPORTED_MODULE_0__.languages[lang],lang);results.push({html:highlighted})}return results}})(),PrismJSBenchmark=__webpack_exports__})();
+//# sourceMappingURL=bundle.es6.js.map
\ No newline at end of file
diff --git a/prismjs/dist/bundle.es6.js.LICENSE.txt b/prismjs/dist/bundle.es6.js.LICENSE.txt
new file mode 100644
index 0000000..0285de9
--- /dev/null
+++ b/prismjs/dist/bundle.es6.js.LICENSE.txt
@@ -0,0 +1,8 @@
+/**
+ * Prism: Lightweight, robust, elegant syntax highlighting
+ *
+ * @license MIT <https://opensource.org/licenses/MIT>
+ * @author Lea Verou <https://lea.verou.me>
+ * @namespace
+ * @public
+ */
diff --git a/prismjs/dist/bundle.es6.js.map b/prismjs/dist/bundle.es6.js.map
new file mode 100644
index 0000000..b228227
--- /dev/null
+++ b/prismjs/dist/bundle.es6.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"bundle.es6.js","mappings":"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","sources":["webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-markdown.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-python.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-sql.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-c.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-javascript.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-clike.js","webpack://PrismJSBenchmark/./node_modules/prismjs/prism.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-json.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-markup.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-css.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-cpp.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-typescript.js","webpack://PrismJSBenchmark/webpack/bootstrap","webpack://PrismJSBenchmark/webpack/runtime/define property getters","webpack://PrismJSBenchmark/webpack/runtime/global","webpack://PrismJSBenchmark/webpack/runtime/hasOwnProperty shorthand","webpack://PrismJSBenchmark/webpack/runtime/make namespace object","webpack://PrismJSBenchmark/./src/test.mjs"],"sourcesContent":["(function (Prism) {\n\n\t// Allow only one line break\n\tvar inner = /(?:\\\\.|[^\\\\\\n\\r]|(?:\\n|\\r\\n?)(?![\\r\\n]))/.source;\n\n\t/**\n\t * This function is intended for the creation of the bold or italic pattern.\n\t *\n\t * This also adds a lookbehind group to the given pattern to ensure that the pattern is not backslash-escaped.\n\t *\n\t * _Note:_ Keep in mind that this adds a capturing group.\n\t *\n\t * @param {string} pattern\n\t * @returns {RegExp}\n\t */\n\tfunction createInline(pattern) {\n\t\tpattern = pattern.replace(/<inner>/g, function () { return inner; });\n\t\treturn RegExp(/((?:^|[^\\\\])(?:\\\\{2})*)/.source + '(?:' + pattern + ')');\n\t}\n\n\n\tvar tableCell = /(?:\\\\.|``(?:[^`\\r\\n]|`(?!`))+``|`[^`\\r\\n]+`|[^\\\\|\\r\\n`])+/.source;\n\tvar tableRow = /\\|?__(?:\\|__)+\\|?(?:(?:\\n|\\r\\n?)|(?![\\s\\S]))/.source.replace(/__/g, function () { return tableCell; });\n\tvar tableLine = /\\|?[ \\t]*:?-{3,}:?[ \\t]*(?:\\|[ \\t]*:?-{3,}:?[ \\t]*)+\\|?(?:\\n|\\r\\n?)/.source;\n\n\n\tPrism.languages.markdown = Prism.languages.extend('markup', {});\n\tPrism.languages.insertBefore('markdown', 'prolog', {\n\t\t'front-matter-block': {\n\t\t\tpattern: /(^(?:\\s*[\\r\\n])?)---(?!.)[\\s\\S]*?[\\r\\n]---(?!.)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^---|---$/,\n\t\t\t\t'front-matter': {\n\t\t\t\t\tpattern: /\\S+(?:\\s+\\S+)*/,\n\t\t\t\t\talias: ['yaml', 'language-yaml'],\n\t\t\t\t\tinside: Prism.languages.yaml\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'blockquote': {\n\t\t\t// > ...\n\t\t\tpattern: /^>(?:[\\t ]*>)*/m,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'table': {\n\t\t\tpattern: RegExp('^' + tableRow + tableLine + '(?:' + tableRow + ')*', 'm'),\n\t\t\tinside: {\n\t\t\t\t'table-data-rows': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + tableLine + ')(?:' + tableRow + ')*$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-data': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-line': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + ')' + tableLine + '$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /\\||:?-{3,}:?/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-header-row': {\n\t\t\t\t\tpattern: RegExp('^' + tableRow + '$'),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-header': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\talias: 'important',\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'code': [\n\t\t\t{\n\t\t\t\t// Prefixed by 4 spaces or 1 tab and preceded by an empty line\n\t\t\t\tpattern: /((?:^|\\n)[ \\t]*\\n|(?:^|\\r\\n?)[ \\t]*\\r\\n?)(?: {4}|\\t).+(?:(?:\\n|\\r\\n?)(?: {4}|\\t).+)*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// ```optional language\n\t\t\t\t// code block\n\t\t\t\t// ```\n\t\t\t\tpattern: /^```[\\s\\S]*?^```$/m,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'code-block': {\n\t\t\t\t\t\tpattern: /^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?=(?:\\n|\\r\\n?)^```$)/m,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'code-language': {\n\t\t\t\t\t\tpattern: /^(```).+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /```/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'title': [\n\t\t\t{\n\t\t\t\t// title 1\n\t\t\t\t// =======\n\n\t\t\t\t// title 2\n\t\t\t\t// -------\n\t\t\t\tpattern: /\\S.*(?:\\n|\\r\\n?)(?:==+|--+)(?=[ \\t]*$)/m,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /==+$|--+$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// # title 1\n\t\t\t\t// ###### title 6\n\t\t\t\tpattern: /(^\\s*)#.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /^#+|#+$/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'hr': {\n\t\t\t// ***\n\t\t\t// ---\n\t\t\t// * * *\n\t\t\t// -----------\n\t\t\tpattern: /(^\\s*)([*-])(?:[\\t ]*\\2){2,}(?=\\s*$)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'list': {\n\t\t\t// * item\n\t\t\t// + item\n\t\t\t// - item\n\t\t\t// 1. item\n\t\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'url-reference': {\n\t\t\t// [id]: http://example.com \"Optional title\"\n\t\t\t// [id]: http://example.com 'Optional title'\n\t\t\t// [id]: http://example.com (Optional title)\n\t\t\t// [id]: <http://example.com> \"Optional title\"\n\t\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n\t\t\tinside: {\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n\t\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n\t\t\t},\n\t\t\talias: 'url'\n\t\t},\n\t\t'bold': {\n\t\t\t// **strong**\n\t\t\t// __strong__\n\n\t\t\t// allow one nested instance of italic text using the same delimiter\n\t\t\tpattern: createInline(/\\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\\b|\\*\\*(?:(?!\\*)<inner>|\\*(?:(?!\\*)<inner>)+\\*)+\\*\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^..)[\\s\\S]+(?=..$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\*\\*|__/\n\t\t\t}\n\t\t},\n\t\t'italic': {\n\t\t\t// *em*\n\t\t\t// _em_\n\n\t\t\t// allow one nested instance of bold text using the same delimiter\n\t\t\tpattern: createInline(/\\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\\b|\\*(?:(?!\\*)<inner>|\\*\\*(?:(?!\\*)<inner>)+\\*\\*)+\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^.)[\\s\\S]+(?=.$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /[*_]/\n\t\t\t}\n\t\t},\n\t\t'strike': {\n\t\t\t// ~~strike through~~\n\t\t\t// ~strike~\n\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\tpattern: createInline(/(~~?)(?:(?!~)<inner>)+\\2/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^~~?)[\\s\\S]+(?=\\1$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /~~?/\n\t\t\t}\n\t\t},\n\t\t'code-snippet': {\n\t\t\t// `code`\n\t\t\t// ``code``\n\t\t\tpattern: /(^|[^\\\\`])(?:``[^`\\r\\n]+(?:`[^`\\r\\n]+)*``(?!`)|`[^`\\r\\n]+`(?!`))/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: ['code', 'keyword']\n\t\t},\n\t\t'url': {\n\t\t\t// [example](http://example.com \"Optional title\")\n\t\t\t// [example][id]\n\t\t\t// [example] [id]\n\t\t\tpattern: createInline(/!?\\[(?:(?!\\])<inner>)+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)|[ \\t]?\\[(?:(?!\\])<inner>)+\\])/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'operator': /^!/,\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^\\[)[^\\]]+(?=\\])/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /(^\\][ \\t]?\\[)[^\\]]+(?=\\]$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'url': {\n\t\t\t\t\tpattern: /(^\\]\\()[^\\s)]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: /(^[ \\t]+)\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t['url', 'bold', 'italic', 'strike'].forEach(function (token) {\n\t\t['url', 'bold', 'italic', 'strike', 'code-snippet'].forEach(function (inside) {\n\t\t\tif (token !== inside) {\n\t\t\t\tPrism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];\n\t\t\t}\n\t\t});\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tif (env.language !== 'markdown' && env.language !== 'md') {\n\t\t\treturn;\n\t\t}\n\n\t\tfunction walkTokens(tokens) {\n\t\t\tif (!tokens || typeof tokens === 'string') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = tokens.length; i < l; i++) {\n\t\t\t\tvar token = tokens[i];\n\n\t\t\t\tif (token.type !== 'code') {\n\t\t\t\t\twalkTokens(token.content);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Add the correct `language-xxxx` class to this code block. Keep in mind that the `code-language` token\n\t\t\t\t * is optional. But the grammar is defined so that there is only one case we have to handle:\n\t\t\t\t *\n\t\t\t\t * token.content = [\n\t\t\t\t *     <span class=\"punctuation\">```</span>,\n\t\t\t\t *     <span class=\"code-language\">xxxx</span>,\n\t\t\t\t *     '\\n', // exactly one new lines (\\r or \\n or \\r\\n)\n\t\t\t\t *     <span class=\"code-block\">...</span>,\n\t\t\t\t *     '\\n', // exactly one new lines again\n\t\t\t\t *     <span class=\"punctuation\">```</span>\n\t\t\t\t * ];\n\t\t\t\t */\n\n\t\t\t\tvar codeLang = token.content[1];\n\t\t\t\tvar codeBlock = token.content[3];\n\n\t\t\t\tif (codeLang && codeBlock &&\n\t\t\t\t\tcodeLang.type === 'code-language' && codeBlock.type === 'code-block' &&\n\t\t\t\t\ttypeof codeLang.content === 'string') {\n\n\t\t\t\t\t// this might be a language that Prism does not support\n\n\t\t\t\t\t// do some replacements to support C++, C#, and F#\n\t\t\t\t\tvar lang = codeLang.content.replace(/\\b#/g, 'sharp').replace(/\\b\\+\\+/g, 'pp');\n\t\t\t\t\t// only use the first word\n\t\t\t\t\tlang = (/[a-z][\\w-]*/i.exec(lang) || [''])[0].toLowerCase();\n\t\t\t\t\tvar alias = 'language-' + lang;\n\n\t\t\t\t\t// add alias\n\t\t\t\t\tif (!codeBlock.alias) {\n\t\t\t\t\t\tcodeBlock.alias = [alias];\n\t\t\t\t\t} else if (typeof codeBlock.alias === 'string') {\n\t\t\t\t\t\tcodeBlock.alias = [codeBlock.alias, alias];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcodeBlock.alias.push(alias);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twalkTokens(env.tokens);\n\t});\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (env.type !== 'code-block') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar codeLang = '';\n\t\tfor (var i = 0, l = env.classes.length; i < l; i++) {\n\t\t\tvar cls = env.classes[i];\n\t\t\tvar match = /language-(.+)/.exec(cls);\n\t\t\tif (match) {\n\t\t\t\tcodeLang = match[1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvar grammar = Prism.languages[codeLang];\n\n\t\tif (!grammar) {\n\t\t\tif (codeLang && codeLang !== 'none' && Prism.plugins.autoloader) {\n\t\t\t\tvar id = 'md-' + new Date().valueOf() + '-' + Math.floor(Math.random() * 1e16);\n\t\t\t\tenv.attributes['id'] = id;\n\n\t\t\t\tPrism.plugins.autoloader.loadLanguages(codeLang, function () {\n\t\t\t\t\tvar ele = document.getElementById(id);\n\t\t\t\t\tif (ele) {\n\t\t\t\t\t\tele.innerHTML = Prism.highlight(ele.textContent, Prism.languages[codeLang], codeLang);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tenv.content = Prism.highlight(textContent(env.content), grammar, codeLang);\n\t\t}\n\t});\n\n\tvar tagPattern = RegExp(Prism.languages.markup.tag.pattern.source, 'gi');\n\n\t/**\n\t * A list of known entity names.\n\t *\n\t * This will always be incomplete to save space. The current list is the one used by lowdash's unescape function.\n\t *\n\t * @see {@link https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/unescape.js#L2}\n\t */\n\tvar KNOWN_ENTITY_NAMES = {\n\t\t'amp': '&',\n\t\t'lt': '<',\n\t\t'gt': '>',\n\t\t'quot': '\"',\n\t};\n\n\t// IE 11 doesn't support `String.fromCodePoint`\n\tvar fromCodePoint = String.fromCodePoint || String.fromCharCode;\n\n\t/**\n\t * Returns the text content of a given HTML source code string.\n\t *\n\t * @param {string} html\n\t * @returns {string}\n\t */\n\tfunction textContent(html) {\n\t\t// remove all tags\n\t\tvar text = html.replace(tagPattern, '');\n\n\t\t// decode known entities\n\t\ttext = text.replace(/&(\\w{1,8}|#x?[\\da-f]{1,8});/gi, function (m, code) {\n\t\t\tcode = code.toLowerCase();\n\n\t\t\tif (code[0] === '#') {\n\t\t\t\tvar value;\n\t\t\t\tif (code[1] === 'x') {\n\t\t\t\t\tvalue = parseInt(code.slice(2), 16);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = Number(code.slice(1));\n\t\t\t\t}\n\n\t\t\t\treturn fromCodePoint(value);\n\t\t\t} else {\n\t\t\t\tvar known = KNOWN_ENTITY_NAMES[code];\n\t\t\t\tif (known) {\n\t\t\t\t\treturn known;\n\t\t\t\t}\n\n\t\t\t\t// unable to decode\n\t\t\t\treturn m;\n\t\t\t}\n\t\t});\n\n\t\treturn text;\n\t}\n\n\tPrism.languages.md = Prism.languages.markdown;\n\n}(Prism));\n","Prism.languages.python = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])#.*/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string-interpolation': {\n\t\tpattern: /(?:f|fr|rf)(?:(\"\"\"|''')[\\s\\S]*?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2)/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\t// \"{\" <expression> <optional \"!s\", \"!r\", or \"!a\"> <optional \":\" format specifier> \"}\"\n\t\t\t\tpattern: /((?:^|[^{])(?:\\{\\{)*)\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}])+\\})+\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'format-spec': {\n\t\t\t\t\t\tpattern: /(:)[^:(){}]+(?=\\}$)/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'conversion-option': {\n\t\t\t\t\t\tpattern: /![sra](?=[:}]$)/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: null\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'triple-quoted-string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"\"\"|''')[\\s\\S]*?\\1/i,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\t'string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/i,\n\t\tgreedy: true\n\t},\n\t'function': {\n\t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/g,\n\t\tlookbehind: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\bclass\\s+)\\w+/i,\n\t\tlookbehind: true\n\t},\n\t'decorator': {\n\t\tpattern: /(^[\\t ]*)@\\w+(?:\\.\\w+)*/m,\n\t\tlookbehind: true,\n\t\talias: ['annotation', 'punctuation'],\n\t\tinside: {\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\t'keyword': /\\b(?:_(?=\\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\\b/,\n\t'builtin': /\\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\\b/,\n\t'boolean': /\\b(?:False|None|True)\\b/,\n\t'number': /\\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\\b|(?:\\b\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\B\\.\\d+(?:_\\d+)*)(?:e[+-]?\\d+(?:_\\d+)*)?j?(?!\\w)/i,\n\t'operator': /[-+%=]=?|!=|:=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\nPrism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;\n\nPrism.languages.py = Prism.languages.python;\n","Prism.languages.sql = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:--|\\/\\/|#).*)/,\n\t\tlookbehind: true\n\t},\n\t'variable': [\n\t\t{\n\t\t\tpattern: /@([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])+\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t/@[\\w.$]+/\n\t],\n\t'string': {\n\t\tpattern: /(^|[^@\\\\])(\"|')(?:\\\\[\\s\\S]|(?!\\2)[^\\\\]|\\2\\2)*\\2/,\n\t\tgreedy: true,\n\t\tlookbehind: true\n\t},\n\t'identifier': {\n\t\tpattern: /(^|[^@\\\\])`(?:\\\\[\\s\\S]|[^`\\\\]|``)*`/,\n\t\tgreedy: true,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /^`|`$/\n\t\t}\n\t},\n\t'function': /\\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\\s*\\()/i, // Should we highlight user defined functions too?\n\t'keyword': /\\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\\b/i,\n\t'boolean': /\\b(?:FALSE|NULL|TRUE)\\b/i,\n\t'number': /\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+\\b/i,\n\t'operator': /[-+*\\/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\\b/i,\n\t'punctuation': /[;[\\]()`,.]/\n};\n","Prism.languages.c = Prism.languages.extend('clike', {\n\t'comment': {\n\t\tpattern: /\\/\\/(?:[^\\r\\n\\\\]|\\\\(?:\\r\\n?|\\n|(?![\\r\\n])))*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\t// https://en.cppreference.com/w/c/language/string_literal\n\t\tpattern: /\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:enum|struct)\\s+(?:__attribute__\\s*\\(\\([\\s\\S]*?\\)\\)\\s*)?)\\w+|\\b[a-z]\\w*_t\\b/,\n\t\tlookbehind: true\n\t},\n\t'keyword': /\\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'number': /(?:\\b0x(?:[\\da-f]+(?:\\.[\\da-f]*)?|\\.[\\da-f]+)(?:p[+-]?\\d+)?|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[ful]{0,4}/i,\n\t'operator': />>=?|<<=?|->|([-+&|:])\\1|[?:~]|[-+*/%&|^!=<>]=?/\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'char': {\n\t\t// https://en.cppreference.com/w/c/language/character_constant\n\t\tpattern: /'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n]){0,32}'/,\n\t\tgreedy: true\n\t}\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'macro': {\n\t\t// allow for multiline macro definitions\n\t\t// spaces after the # character compile fine with gcc\n\t\tpattern: /(^[\\t ]*)#\\s*[a-z](?:[^\\r\\n\\\\/]|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|\\\\(?:\\r\\n|[\\s\\S]))*/im,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'string': [\n\t\t\t\t{\n\t\t\t\t\t// highlight the path of the include statement as a string\n\t\t\t\t\tpattern: /^(#\\s*include\\s*)<[^>]+>/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\tPrism.languages.c['string']\n\t\t\t],\n\t\t\t'char': Prism.languages.c['char'],\n\t\t\t'comment': Prism.languages.c['comment'],\n\t\t\t'macro-name': [\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?!\\()/i,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?=\\()/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'function'\n\t\t\t\t}\n\t\t\t],\n\t\t\t// highlight macro directives as keywords\n\t\t\t'directive': {\n\t\t\t\tpattern: /^(#\\s*)[a-z]+/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t'directive-hash': /^#/,\n\t\t\t'punctuation': /##|\\\\(?=[\\r\\n])/,\n\t\t\t'expression': {\n\t\t\t\tpattern: /\\S[\\s\\S]*/,\n\t\t\t\tinside: Prism.languages.c\n\t\t\t}\n\t\t}\n\t}\n});\n\nPrism.languages.insertBefore('c', 'function', {\n\t// highlight predefined macros as constants\n\t'constant': /\\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\\b/\n});\n\ndelete Prism.languages.c['boolean'];\n","Prism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n","Prism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n","\n/* **********************************************\n     Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (document.currentScript && document.currentScript.tagName === 'SCRIPT' && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","// https://www.json.org/json-en.html\nPrism.languages.json = {\n\t'property': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?!\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'number': /-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n\t'punctuation': /[{}[\\],]/,\n\t'operator': /:/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'null': {\n\t\tpattern: /\\bnull\\b/,\n\t\talias: 'keyword'\n\t}\n};\n\nPrism.languages.webmanifest = Prism.languages.json;\n","Prism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n","(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n","(function (Prism) {\n\n\tvar keyword = /\\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\\b/;\n\tvar modName = /\\b(?!<keyword>)\\w+(?:\\s*\\.\\s*\\w+)*\\b/.source.replace(/<keyword>/g, function () { return keyword.source; });\n\n\tPrism.languages.cpp = Prism.languages.extend('c', {\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\b(?:class|concept|enum|struct|typename)\\s+)(?!<keyword>)\\w+/.source\n\t\t\t\t\t.replace(/<keyword>/g, function () { return keyword.source; })),\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t// This is intended to capture the class name of method implementations like:\n\t\t\t//   void foo::bar() const {}\n\t\t\t// However! The `foo` in the above example could also be a namespace, so we only capture the class name if\n\t\t\t// it starts with an uppercase letter. This approximation should give decent results.\n\t\t\t/\\b[A-Z]\\w*(?=\\s*::\\s*\\w+\\s*\\()/,\n\t\t\t// This will capture the class name before destructors like:\n\t\t\t//   Foo::~Foo() {}\n\t\t\t/\\b[A-Z_]\\w*(?=\\s*::\\s*~\\w+\\s*\\()/i,\n\t\t\t// This also intends to capture the class name of method implementations but here the class has template\n\t\t\t// parameters, so it can't be a namespace (until C++ adds generic namespaces).\n\t\t\t/\\b\\w+(?=\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\\s*::\\s*\\w+\\s*\\()/\n\t\t],\n\t\t'keyword': keyword,\n\t\t'number': {\n\t\t\tpattern: /(?:\\b0b[01']+|\\b0x(?:[\\da-f']+(?:\\.[\\da-f']*)?|\\.[\\da-f']+)(?:p[+-]?[\\d']+)?|(?:\\b[\\d']+(?:\\.[\\d']*)?|\\B\\.[\\d']+)(?:e[+-]?[\\d']+)?)[ful]{0,4}/i,\n\t\t\tgreedy: true\n\t\t},\n\t\t'operator': />>=?|<<=?|->|--|\\+\\+|&&|\\|\\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'string', {\n\t\t'module': {\n\t\t\t// https://en.cppreference.com/w/cpp/language/modules\n\t\t\tpattern: RegExp(\n\t\t\t\t/(\\b(?:import|module)\\s+)/.source +\n\t\t\t\t'(?:' +\n\t\t\t\t// header-name\n\t\t\t\t/\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|<[^<>\\r\\n]*>/.source +\n\t\t\t\t'|' +\n\t\t\t\t// module name or partition or both\n\t\t\t\t/<mod-name>(?:\\s*:\\s*<mod-name>)?|:\\s*<mod-name>/.source.replace(/<mod-name>/g, function () { return modName; }) +\n\t\t\t\t')'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'string': /^[<\"][\\s\\S]+/,\n\t\t\t\t'operator': /:/,\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t},\n\t\t'raw-string': {\n\t\t\tpattern: /R\"([^()\\\\ ]{0,16})\\([\\s\\S]*?\\)\\1\"/,\n\t\t\talias: 'string',\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'keyword', {\n\t\t'generic-function': {\n\t\t\tpattern: /\\b(?!operator\\b)[a-z_]\\w*\\s*<(?:[^<>]|<[^<>]*>)*>(?=\\s*\\()/i,\n\t\t\tinside: {\n\t\t\t\t'function': /^\\w+/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/,\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: Prism.languages.cpp\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'operator', {\n\t\t'double-colon': {\n\t\t\tpattern: /::/,\n\t\t\talias: 'punctuation'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'class-name', {\n\t\t// the base clause is an optional list of parent classes\n\t\t// https://en.cppreference.com/w/cpp/language/class\n\t\t'base-clause': {\n\t\t\tpattern: /(\\b(?:class|struct)\\s+\\w+\\s*:\\s*)[^;{}\"'\\s]+(?:\\s+[^;{}\"'\\s]+)*(?=\\s*[;{])/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: Prism.languages.extend('cpp', {})\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('inside', 'double-colon', {\n\t\t// All untokenized words that are not namespaces should be class names\n\t\t'class-name': /\\b[a-z_]\\w*\\b(?!\\s*::)/i\n\t}, Prism.languages.cpp['base-clause']);\n\n}(Prism));\n","(function (Prism) {\n\n\tPrism.languages.typescript = Prism.languages.extend('javascript', {\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|type)\\s+)(?!keyof\\b)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?:\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: null // see below\n\t\t},\n\t\t'builtin': /\\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\\b/,\n\t});\n\n\t// The keywords TypeScript adds to JavaScript\n\tPrism.languages.typescript.keyword.push(\n\t\t/\\b(?:abstract|declare|is|keyof|readonly|require)\\b/,\n\t\t// keywords that have to be followed by an identifier\n\t\t/\\b(?:asserts|infer|interface|module|namespace|type)\\b(?=\\s*(?:[{_$a-zA-Z\\xA0-\\uFFFF]|$))/,\n\t\t// This is for `import type *, {}`\n\t\t/\\btype\\b(?=\\s*(?:[\\{*]|$))/\n\t);\n\n\t// doesn't work with TS because TS is too complex\n\tdelete Prism.languages.typescript['parameter'];\n\tdelete Prism.languages.typescript['literal-property'];\n\n\t// a version of typescript specifically for highlighting types\n\tvar typeInside = Prism.languages.extend('typescript', {});\n\tdelete typeInside['class-name'];\n\n\tPrism.languages.typescript['class-name'].inside = typeInside;\n\n\tPrism.languages.insertBefore('typescript', 'function', {\n\t\t'decorator': {\n\t\t\tpattern: /@[$\\w\\xA0-\\uFFFF]+/,\n\t\t\tinside: {\n\t\t\t\t'at': {\n\t\t\t\t\tpattern: /^@/,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t},\n\t\t\t\t'function': /^[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'generic-function': {\n\t\t\t// e.g. foo<T extends \"bar\" | \"baz\">( ...\n\t\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\\s*\\()/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/, // everything after the first <\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: typeInside\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.ts = Prism.languages.typescript;\n\n}(Prism));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Prism from \"prismjs\";\nimport \"prismjs/components/prism-markup.js\";\nimport \"prismjs/components/prism-css.js\";\nimport \"prismjs/components/prism-clike.js\";\nimport \"prismjs/components/prism-javascript.js\";\nimport \"prismjs/components/prism-c.js\";\nimport \"prismjs/components/prism-cpp.js\";\nimport \"prismjs/components/prism-markdown.js\";\nimport \"prismjs/components/prism-json.js\";\nimport \"prismjs/components/prism-sql.js\";\nimport \"prismjs/components/prism-python.js\";\nimport \"prismjs/components/prism-typescript.js\";\n\nexport function runTest(samples) {\n  const results = [];\n  for (const { content, lang } of samples) {\n    const highlighted = Prism.highlight(content, Prism.languages[lang], lang);\n    results.push({\n      html: highlighted,\n    });\n  }\n  return results;\n}\n"],"names":["Prism","inner","source","createInline","pattern","replace","RegExp","tableCell","tableRow","tableLine","languages","markdown","extend","insertBefore","lookbehind","greedy","inside","alias","yaml","punctuation","forEach","token","content","hooks","add","env","language","walkTokens","tokens","i","l","length","type","codeLang","codeBlock","lang","exec","toLowerCase","push","classes","cls","match","html","grammar","highlight","tagPattern","m","code","value","parseInt","slice","Number","fromCodePoint","known","KNOWN_ENTITY_NAMES","plugins","autoloader","id","Date","valueOf","Math","floor","random","attributes","loadLanguages","ele","document","getElementById","innerHTML","textContent","markup","tag","String","fromCharCode","md","python","rest","py","sql","c","javascript","clike","regex","addInlined","addAttribute","js","_self","uniqueId","plainTextGrammar","_","manual","disableWorkerMessageHandler","util","encode","Token","Array","isArray","map","o","Object","prototype","toString","call","objId","obj","defineProperty","clone","deepClone","visited","key","hasOwnProperty","v","getLanguage","element","className","parentElement","setLanguage","classList","currentScript","tagName","Error","err","src","stack","scripts","getElementsByTagName","isActive","defaultActivation","no","contains","plain","plaintext","text","txt","redef","before","insert","root","ret","newToken","old","DFS","this","callback","property","propertyType","highlightAll","async","highlightAllUnder","container","selector","run","elements","apply","querySelectorAll","highlightElement","parent","nodeName","insertHighlightedCode","highlightedCode","hasAttribute","setAttribute","Worker","worker","filename","onmessage","evt","data","postMessage","JSON","stringify","immediateClose","tokenize","tokenList","LinkedList","addAfter","head","matchGrammar","list","array","node","next","tail","toArray","all","name","callbacks","matchedStr","matchPattern","pos","lastIndex","lookbehindLength","index","startNode","startPos","rematch","patterns","j","cause","patternObj","global","flags","currentNode","reach","str","removeCount","from","to","p","k","matchStr","after","removeFrom","prev","removeRange","nestedRematch","newNode","count","s","e","aliases","join","addEventListener","message","parse","close","script","highlightAutomaticallyCallback","readyState","defer","window","requestAnimationFrame","setTimeout","WorkerGlobalScope","self","module","exports","includedCdataInside","def","attrName","mathml","svg","xml","ssml","atom","rss","string","css","Element","matches","msMatchesSelector","webkitMatchesSelector","EXTENSIONS","SELECTOR","pre","appendChild","createElement","getAttribute","extension","success","error","xhr","XMLHttpRequest","open","onreadystatechange","status","responseText","statusText","send","loadFile","range","start","comma","end","undefined","parseRange","lines","split","max","min","fileHighlight","logged","console","warn","arguments","json","webmanifest","keyword","modName","cpp","typescript","typeInside","ts","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","enumerable","get","g","globalThis","Function","prop","r","Symbol","toStringTag","runTest","samples","results","highlighted"],"sourceRoot":""}
\ No newline at end of file
diff --git a/prismjs/dist/bundle.es6.min.js b/prismjs/dist/bundle.es6.min.js
new file mode 100644
index 0000000..ea112ea
--- /dev/null
+++ b/prismjs/dist/bundle.es6.min.js
@@ -0,0 +1,145 @@
+/*! For license information please see bundle.es6.min.js.LICENSE.txt */
+(()=>{var e={19:()=>{!function(e){
+/*ThouShaltNotCache*/
+var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){
+/*ThouShaltNotCache*/
+return e=e.replace(/<inner>/g,function(){
+/*ThouShaltNotCache*/
+return t}),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var a=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,r=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){
+/*ThouShaltNotCache*/
+return a}),s=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+r+s+"(?:"+r+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+r+s+")(?:"+r+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(a),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+r+")"+s+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+r+"$"),inside:{"table-header":{pattern:RegExp(a),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(t){
+/*ThouShaltNotCache*/
+["url","bold","italic","strike","code-snippet"].forEach(function(n){
+/*ThouShaltNotCache*/
+t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])})}),e.hooks.add("after-tokenize",function(e){
+/*ThouShaltNotCache*/
+"markdown"!==e.language&&"md"!==e.language||function e(t){
+/*ThouShaltNotCache*/
+if(t&&"string"!=typeof t)for(var n=0,a=t.length;n<a;n++){var r=t[n];if("code"===r.type){var s=r.content[1],i=r.content[3];if(s&&i&&"code-language"===s.type&&"code-block"===i.type&&"string"==typeof s.content){var o=s.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),l="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,l]:i.alias.push(l):i.alias=[l]}}else e(r.content)}}(e.tokens)}),e.hooks.add("wrap",function(t){
+/*ThouShaltNotCache*/
+if("code-block"===t.type){for(var n="",a=0,r=t.classes.length;a<r;a++){var s=t.classes[a],u=/language-(.+)/.exec(s);if(u){n=u[1];break}}var c,g=e.languages[n];if(g)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(e,t){var n;if("#"===(
+/*ThouShaltNotCache*/
+t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n);var a=o[t];return a||e})),g,n);else if(n&&"none"!==n&&e.plugins.autoloader){var d="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=d,e.plugins.autoloader.loadLanguages(n,function(){
+/*ThouShaltNotCache*/
+var t=document.getElementById(d);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))})}}});var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),o={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(Prism)},44:()=>{Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},244:()=>{Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}},421:()=>{Prism.languages.c=Prism.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],char:Prism.languages.c.char,comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}}}),Prism.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete Prism.languages.c.boolean},613:()=>{Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),Prism.languages.js=Prism.languages.javascript},634:()=>{Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}},642:(e,t,n)=>{var a=function(e){
+/*ThouShaltNotCache*/
+var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,a={},r={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){
+/*ThouShaltNotCache*/
+return t instanceof s?new s(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){
+/*ThouShaltNotCache*/
+return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){
+/*ThouShaltNotCache*/
+return e.__id||Object.defineProperty(e,"__id",{value:++n}),e.__id},clone:function e(t,n){var a,s;switch(
+/*ThouShaltNotCache*/
+n=n||{},r.util.type(t)){case"Object":if(s=r.util.objId(t),n[s])return n[s];for(var i in a={},n[s]=a,t)t.hasOwnProperty(i)&&(a[i]=e(t[i],n));return a;case"Array":return s=r.util.objId(t),n[s]?n[s]:(a=[],n[s]=a,t.forEach(function(t,r){
+/*ThouShaltNotCache*/
+a[r]=e(t,n)}),a);default:return t}},getLanguage:function(e){
+/*ThouShaltNotCache*/
+for(;e;){var n=t.exec(e.className);if(n)return n[1].toLowerCase();e=e.parentElement}return"none"},setLanguage:function(e,n){
+/*ThouShaltNotCache*/
+e.className=e.className.replace(RegExp(t,"gi"),""),e.classList.add("language-"+n)},currentScript:function(){
+/*ThouShaltNotCache*/
+if("undefined"==typeof document)return null;if(document.currentScript&&"SCRIPT"===document.currentScript.tagName)return document.currentScript;try{throw new Error}catch(a){var e=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(a.stack)||[])[1];if(e){var t=document.getElementsByTagName("script");for(var n in t)if(t[n].src==e)return t[n]}return null}},isActive:function(e,t,n){for(
+/*ThouShaltNotCache*/
+var a="no-"+t;e;){var r=e.classList;if(r.contains(t))return!0;if(r.contains(a))return!1;e=e.parentElement}return!!n}},languages:{plain:a,plaintext:a,text:a,txt:a,extend:function(e,t){
+/*ThouShaltNotCache*/
+var n=r.util.clone(r.languages[e]);for(var a in t)n[a]=t[a];return n},insertBefore:function(e,t,n,a){var s=(
+/*ThouShaltNotCache*/
+a=a||r.languages)[e],i={};for(var o in s)if(s.hasOwnProperty(o)){if(o==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(o)||(i[o]=s[o])}var u=a[e];return a[e]=i,r.languages.DFS(r.languages,function(t,n){
+/*ThouShaltNotCache*/
+n===u&&t!=e&&(this[t]=i)}),i},DFS:function e(t,n,a,s){
+/*ThouShaltNotCache*/
+s=s||{};var i=r.util.objId;for(var o in t)if(t.hasOwnProperty(o)){n.call(t,o,t[o],a||o);var l=t[o],u=r.util.type(l);"Object"!==u||s[i(l)]?"Array"!==u||s[i(l)]||(s[i(l)]=!0,e(l,n,o,s)):(s[i(l)]=!0,e(l,n,null,s))}}},plugins:{},highlightAll:function(e,t){
+/*ThouShaltNotCache*/
+r.highlightAllUnder(document,e,t)},highlightAllUnder:function(e,t,n){
+/*ThouShaltNotCache*/
+var a={callback:n,container:e,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};r.hooks.run("before-highlightall",a),a.elements=Array.prototype.slice.apply(a.container.querySelectorAll(a.selector)),r.hooks.run("before-all-elements-highlight",a);for(var s,i=0;s=a.elements[i++];)r.highlightElement(s,!0===t,a.callback)},highlightElement:function(t,n,a){
+/*ThouShaltNotCache*/
+var s=r.util.getLanguage(t),i=r.languages[s];r.util.setLanguage(t,s);var o=t.parentElement;o&&"pre"===o.nodeName.toLowerCase()&&r.util.setLanguage(o,s);var l={element:t,language:s,grammar:i,code:t.textContent};function u(e){
+/*ThouShaltNotCache*/
+l.highlightedCode=e,r.hooks.run("before-insert",l),l.element.innerHTML=l.highlightedCode,r.hooks.run("after-highlight",l),r.hooks.run("complete",l),a&&a.call(l.element)}if(r.hooks.run("before-sanity-check",l),(o=l.element.parentElement)&&"pre"===o.nodeName.toLowerCase()&&!o.hasAttribute("tabindex")&&o.setAttribute("tabindex","0"),!l.code)return r.hooks.run("complete",l),void(a&&a.call(l.element));if(r.hooks.run("before-highlight",l),l.grammar)if(n&&e.Worker){var c=new Worker(r.filename);c.onmessage=function(e){
+/*ThouShaltNotCache*/
+u(e.data)},c.postMessage(JSON.stringify({language:l.language,code:l.code,immediateClose:!0}))}else u(r.highlight(l.code,l.grammar,l.language));else u(r.util.encode(l.code))},highlight:function(e,t,n){
+/*ThouShaltNotCache*/
+var a={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),s.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){
+/*ThouShaltNotCache*/
+var n=t.rest;if(n){for(var a in n)t[a]=n[a];delete t.rest}var r=new l;return u(r,r.head,e),o(e,r,t,r.head,0),function(e){
+/*ThouShaltNotCache*/
+var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(r)},hooks:{all:{},add:function(e,t){
+/*ThouShaltNotCache*/
+var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){
+/*ThouShaltNotCache*/
+var n=r.hooks.all[e];if(n&&n.length)for(var a,s=0;a=n[s++];)a(t)}},Token:s};function s(e,t,n,a){
+/*ThouShaltNotCache*/
+this.type=e,this.content=t,this.alias=n,this.length=0|(a||"").length}function i(e,t,n,a){
+/*ThouShaltNotCache*/
+e.lastIndex=t;var r=e.exec(n);if(r&&a&&r[1]){var s=r[1].length;r.index+=s,r[0]=r[0].slice(s)}return r}function o(e,t,n,a,l,g){
+/*ThouShaltNotCache*/
+for(var d in n)if(n.hasOwnProperty(d)&&n[d]){var p=n[d];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(g&&g.cause==d+","+m)return;var b=p[m],f=b.inside,h=!!b.lookbehind,E=!!b.greedy,y=b.alias;if(E&&!b.pattern.global){var A=b.pattern.toString().match(/[imsuy]*$/)[0];b.pattern=RegExp(b.pattern.source,A+"g")}for(var F=b.pattern||b,k=a.next,S=l;k!==t.tail&&!(g&&S>=g.reach);S+=k.value.length,k=k.next){var T=k.value;if(t.length>e.length)return;if(!(T instanceof s)){var v,w=1;if(E){if(!(v=i(F,S,e,h))||v.index>=e.length)break;var x=v.index,I=v.index+v[0].length,R=S;for(R+=k.value.length;x>=R;)R+=(k=k.next).value.length;if(S=R-=k.value.length,k.value instanceof s)continue;for(var _=k;_!==t.tail&&(R<I||"string"==typeof _.value);_=_.next)w++,R+=_.value.length;w--,T=e.slice(S,R),v.index-=S}else if(!(v=i(F,0,T,h)))continue;x=v.index;var N=v[0],O=T.slice(0,x),L=T.slice(x+N.length),P=S+T.length;g&&P>g.reach&&(g.reach=P);var C=k.prev;if(O&&(C=u(t,C,O),S+=O.length),c(t,C,w),k=u(t,C,new s(d,f?r.tokenize(N,f):N,y,N)),L&&u(t,k,L),w>1){var $={cause:d+","+m,reach:P};o(e,t,n,k.prev,S,$),g&&$.reach>g.reach&&(g.reach=$.reach)}}}}}}function l(){
+/*ThouShaltNotCache*/
+var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function u(e,t,n){
+/*ThouShaltNotCache*/
+var a=t.next,r={value:n,prev:t,next:a};return t.next=r,a.prev=r,e.length++,r}function c(e,t,n){for(
+/*ThouShaltNotCache*/
+var a=t.next,r=0;r<n&&a!==e.tail;r++)a=a.next;t.next=a,a.prev=t,e.length-=r}if(e.Prism=r,s.stringify=function e(t,n){
+/*ThouShaltNotCache*/
+if("string"==typeof t)return t;if(Array.isArray(t)){var a="";return t.forEach(function(t){
+/*ThouShaltNotCache*/
+a+=e(t,n)}),a}var s={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(s.classes,i):s.classes.push(i)),r.hooks.run("wrap",s);var o="";for(var l in s.attributes)o+=" "+l+'="'+(s.attributes[l]||"").replace(/"/g,"&quot;")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'"'+o+">"+s.content+"</"+s.tag+">"},!e.document)return e.addEventListener?(r.disableWorkerMessageHandler||e.addEventListener("message",function(t){
+/*ThouShaltNotCache*/
+var n=JSON.parse(t.data),a=n.language,s=n.code,i=n.immediateClose;e.postMessage(r.highlight(s,r.languages[a],a)),i&&e.close()},!1),r):r;var g=r.util.currentScript();function d(){
+/*ThouShaltNotCache*/
+r.manual||r.highlightAll()}if(g&&(r.filename=g.src,g.hasAttribute("data-manual")&&(r.manual=!0)),!r.manual){var p=document.readyState;"loading"===p||"interactive"===p&&g&&g.defer?document.addEventListener("DOMContentLoaded",d):window.requestAnimationFrame?window.requestAnimationFrame(d):window.setTimeout(d,16)}return r}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});e.exports&&(e.exports=a),void 0!==n.g&&(n.g.Prism=a),a.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",function(e){
+/*ThouShaltNotCache*/
+"entity"===e.type&&(e.attributes.title=e.content.replace(/&amp;/,"&"))}),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){
+/*ThouShaltNotCache*/
+var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var s={};s[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){
+/*ThouShaltNotCache*/
+return e}),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",s)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){
+/*ThouShaltNotCache*/
+a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){
+/*ThouShaltNotCache*/
+var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),a.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(){
+/*ThouShaltNotCache*/
+if(void 0!==a&&"undefined"!=typeof document){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var e={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},t="data-src-status",n="loading",r="loaded",s="pre[data-src]:not(["+t+'="'+r+'"]):not(['+t+'="'+n+'"])';a.hooks.add("before-highlightall",function(e){
+/*ThouShaltNotCache*/
+e.selector+=", "+s}),a.hooks.add("before-sanity-check",function(i){
+/*ThouShaltNotCache*/
+var o=i.element;if(o.matches(s)){i.code="",o.setAttribute(t,n);var l=o.appendChild(document.createElement("CODE"));l.textContent="Loading\u2026";var u=o.getAttribute("data-src"),c=i.language;if("none"===c){var g=(/\.(\w+)$/.exec(u)||[,"none"])[1];c=e[g]||g}a.util.setLanguage(l,c),a.util.setLanguage(o,c);var d=a.plugins.autoloader;d&&d.loadLanguages(c),function(e,t,n){
+/*ThouShaltNotCache*/
+var a=new XMLHttpRequest;a.open("GET",e,!0),a.onreadystatechange=function(){
+/*ThouShaltNotCache*/
+4==a.readyState&&(a.status<400&&a.responseText?t(a.responseText):a.status>=400?n("\u2716 Error "+a.status+" while fetching file: "+a.statusText):n("\u2716 Error: File does not exist or is empty"))},a.send(null)}(u,function(e){
+/*ThouShaltNotCache*/
+o.setAttribute(t,r);var n=function(e){
+/*ThouShaltNotCache*/
+var t=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(e||"");if(t){var n=Number(t[1]),a=t[2],r=t[3];return a?r?[n,Number(r)]:[n,void 0]:[n,n]}}(o.getAttribute("data-range"));if(n){var s=e.split(/\r\n?|\n/g),i=n[0],u=null==n[1]?s.length:n[1];i<0&&(i+=s.length),i=Math.max(0,Math.min(i-1,s.length)),u<0&&(u+=s.length),u=Math.max(0,Math.min(u,s.length)),e=s.slice(i,u).join("\n"),o.hasAttribute("data-start")||o.setAttribute("data-start",String(i+1))}l.textContent=e,a.highlightElement(l)},function(e){
+/*ThouShaltNotCache*/
+o.setAttribute(t,"failed"),l.textContent=e})}}),a.plugins.fileHighlight={highlight:function(e){for(
+/*ThouShaltNotCache*/
+var t,n=(e||document).querySelectorAll(s),r=0;t=n[r++];)a.highlightElement(t)}};var i=!1;a.fileHighlight=function(){
+/*ThouShaltNotCache*/
+i||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),i=!0),a.plugins.fileHighlight.highlight.apply(this,arguments)}}}()},648:()=>{Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},694:()=>{Prism.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(e){
+/*ThouShaltNotCache*/
+"entity"===e.type&&(e.attributes.title=e.content.replace(/&amp;/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(e,t){
+/*ThouShaltNotCache*/
+var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Prism.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var a={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};a["language-"+t]={pattern:/[\s\S]+/,inside:Prism.languages[t]};var r={};r[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){
+/*ThouShaltNotCache*/
+return e}),"i"),lookbehind:!0,greedy:!0,inside:a},Prism.languages.insertBefore("markup","cdata",r)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(e,t){
+/*ThouShaltNotCache*/
+Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:Prism.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml},871:()=>{!function(e){
+/*ThouShaltNotCache*/
+var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(Prism)},893:()=>{!function(e){
+/*ThouShaltNotCache*/
+var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,function(){
+/*ThouShaltNotCache*/
+return t.source});e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,function(){
+/*ThouShaltNotCache*/
+return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,function(){
+/*ThouShaltNotCache*/
+return n})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism)},973:()=>{!function(e){
+/*ThouShaltNotCache*/
+e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(Prism)}},t={};function n(a){var r=t[a];if(void 0!==r)return r.exports;var s=t[a]={exports:{}};return e[a](s,s.exports,n),s.exports}n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};(()=>{"use strict";n.r(a),n.d(a,{runTest:()=>t});var e=n(642);n(694),n(871),n(634),n(613),n(421),n(893),n(19),n(648),n(244),n(44),n(973);function t(t){
+/*ThouShaltNotCache*/
+const n=[];for(const{content:a,lang:r}of t){const t=e.highlight(a,e.languages[r],r);n.push({html:t})}return n}})(),PrismJSBenchmark=a})();
+//# sourceMappingURL=bundle.es6.min.js.map
\ No newline at end of file
diff --git a/prismjs/dist/bundle.es6.min.js.LICENSE.txt b/prismjs/dist/bundle.es6.min.js.LICENSE.txt
new file mode 100644
index 0000000..0285de9
--- /dev/null
+++ b/prismjs/dist/bundle.es6.min.js.LICENSE.txt
@@ -0,0 +1,8 @@
+/**
+ * Prism: Lightweight, robust, elegant syntax highlighting
+ *
+ * @license MIT <https://opensource.org/licenses/MIT>
+ * @author Lea Verou <https://lea.verou.me>
+ * @namespace
+ * @public
+ */
diff --git a/prismjs/dist/bundle.es6.min.js.map b/prismjs/dist/bundle.es6.min.js.map
new file mode 100644
index 0000000..62d8866
--- /dev/null
+++ b/prismjs/dist/bundle.es6.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"bundle.es6.min.js","mappings":"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","sources":["webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-markdown.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-python.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-sql.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-c.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-javascript.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-clike.js","webpack://PrismJSBenchmark/./node_modules/prismjs/prism.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-json.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-markup.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-css.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-cpp.js","webpack://PrismJSBenchmark/./node_modules/prismjs/components/prism-typescript.js","webpack://PrismJSBenchmark/webpack/bootstrap","webpack://PrismJSBenchmark/webpack/runtime/define property getters","webpack://PrismJSBenchmark/webpack/runtime/global","webpack://PrismJSBenchmark/webpack/runtime/hasOwnProperty shorthand","webpack://PrismJSBenchmark/webpack/runtime/make namespace object","webpack://PrismJSBenchmark/./src/test.mjs"],"sourcesContent":["(function (Prism) {\n\n\t// Allow only one line break\n\tvar inner = /(?:\\\\.|[^\\\\\\n\\r]|(?:\\n|\\r\\n?)(?![\\r\\n]))/.source;\n\n\t/**\n\t * This function is intended for the creation of the bold or italic pattern.\n\t *\n\t * This also adds a lookbehind group to the given pattern to ensure that the pattern is not backslash-escaped.\n\t *\n\t * _Note:_ Keep in mind that this adds a capturing group.\n\t *\n\t * @param {string} pattern\n\t * @returns {RegExp}\n\t */\n\tfunction createInline(pattern) {\n\t\tpattern = pattern.replace(/<inner>/g, function () { return inner; });\n\t\treturn RegExp(/((?:^|[^\\\\])(?:\\\\{2})*)/.source + '(?:' + pattern + ')');\n\t}\n\n\n\tvar tableCell = /(?:\\\\.|``(?:[^`\\r\\n]|`(?!`))+``|`[^`\\r\\n]+`|[^\\\\|\\r\\n`])+/.source;\n\tvar tableRow = /\\|?__(?:\\|__)+\\|?(?:(?:\\n|\\r\\n?)|(?![\\s\\S]))/.source.replace(/__/g, function () { return tableCell; });\n\tvar tableLine = /\\|?[ \\t]*:?-{3,}:?[ \\t]*(?:\\|[ \\t]*:?-{3,}:?[ \\t]*)+\\|?(?:\\n|\\r\\n?)/.source;\n\n\n\tPrism.languages.markdown = Prism.languages.extend('markup', {});\n\tPrism.languages.insertBefore('markdown', 'prolog', {\n\t\t'front-matter-block': {\n\t\t\tpattern: /(^(?:\\s*[\\r\\n])?)---(?!.)[\\s\\S]*?[\\r\\n]---(?!.)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^---|---$/,\n\t\t\t\t'front-matter': {\n\t\t\t\t\tpattern: /\\S+(?:\\s+\\S+)*/,\n\t\t\t\t\talias: ['yaml', 'language-yaml'],\n\t\t\t\t\tinside: Prism.languages.yaml\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'blockquote': {\n\t\t\t// > ...\n\t\t\tpattern: /^>(?:[\\t ]*>)*/m,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'table': {\n\t\t\tpattern: RegExp('^' + tableRow + tableLine + '(?:' + tableRow + ')*', 'm'),\n\t\t\tinside: {\n\t\t\t\t'table-data-rows': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + tableLine + ')(?:' + tableRow + ')*$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-data': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-line': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + ')' + tableLine + '$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /\\||:?-{3,}:?/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-header-row': {\n\t\t\t\t\tpattern: RegExp('^' + tableRow + '$'),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-header': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\talias: 'important',\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'code': [\n\t\t\t{\n\t\t\t\t// Prefixed by 4 spaces or 1 tab and preceded by an empty line\n\t\t\t\tpattern: /((?:^|\\n)[ \\t]*\\n|(?:^|\\r\\n?)[ \\t]*\\r\\n?)(?: {4}|\\t).+(?:(?:\\n|\\r\\n?)(?: {4}|\\t).+)*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// ```optional language\n\t\t\t\t// code block\n\t\t\t\t// ```\n\t\t\t\tpattern: /^```[\\s\\S]*?^```$/m,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'code-block': {\n\t\t\t\t\t\tpattern: /^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?=(?:\\n|\\r\\n?)^```$)/m,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'code-language': {\n\t\t\t\t\t\tpattern: /^(```).+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /```/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'title': [\n\t\t\t{\n\t\t\t\t// title 1\n\t\t\t\t// =======\n\n\t\t\t\t// title 2\n\t\t\t\t// -------\n\t\t\t\tpattern: /\\S.*(?:\\n|\\r\\n?)(?:==+|--+)(?=[ \\t]*$)/m,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /==+$|--+$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// # title 1\n\t\t\t\t// ###### title 6\n\t\t\t\tpattern: /(^\\s*)#.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /^#+|#+$/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'hr': {\n\t\t\t// ***\n\t\t\t// ---\n\t\t\t// * * *\n\t\t\t// -----------\n\t\t\tpattern: /(^\\s*)([*-])(?:[\\t ]*\\2){2,}(?=\\s*$)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'list': {\n\t\t\t// * item\n\t\t\t// + item\n\t\t\t// - item\n\t\t\t// 1. item\n\t\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'url-reference': {\n\t\t\t// [id]: http://example.com \"Optional title\"\n\t\t\t// [id]: http://example.com 'Optional title'\n\t\t\t// [id]: http://example.com (Optional title)\n\t\t\t// [id]: <http://example.com> \"Optional title\"\n\t\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n\t\t\tinside: {\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n\t\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n\t\t\t},\n\t\t\talias: 'url'\n\t\t},\n\t\t'bold': {\n\t\t\t// **strong**\n\t\t\t// __strong__\n\n\t\t\t// allow one nested instance of italic text using the same delimiter\n\t\t\tpattern: createInline(/\\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\\b|\\*\\*(?:(?!\\*)<inner>|\\*(?:(?!\\*)<inner>)+\\*)+\\*\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^..)[\\s\\S]+(?=..$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\*\\*|__/\n\t\t\t}\n\t\t},\n\t\t'italic': {\n\t\t\t// *em*\n\t\t\t// _em_\n\n\t\t\t// allow one nested instance of bold text using the same delimiter\n\t\t\tpattern: createInline(/\\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\\b|\\*(?:(?!\\*)<inner>|\\*\\*(?:(?!\\*)<inner>)+\\*\\*)+\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^.)[\\s\\S]+(?=.$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /[*_]/\n\t\t\t}\n\t\t},\n\t\t'strike': {\n\t\t\t// ~~strike through~~\n\t\t\t// ~strike~\n\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\tpattern: createInline(/(~~?)(?:(?!~)<inner>)+\\2/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^~~?)[\\s\\S]+(?=\\1$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /~~?/\n\t\t\t}\n\t\t},\n\t\t'code-snippet': {\n\t\t\t// `code`\n\t\t\t// ``code``\n\t\t\tpattern: /(^|[^\\\\`])(?:``[^`\\r\\n]+(?:`[^`\\r\\n]+)*``(?!`)|`[^`\\r\\n]+`(?!`))/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: ['code', 'keyword']\n\t\t},\n\t\t'url': {\n\t\t\t// [example](http://example.com \"Optional title\")\n\t\t\t// [example][id]\n\t\t\t// [example] [id]\n\t\t\tpattern: createInline(/!?\\[(?:(?!\\])<inner>)+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)|[ \\t]?\\[(?:(?!\\])<inner>)+\\])/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'operator': /^!/,\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^\\[)[^\\]]+(?=\\])/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /(^\\][ \\t]?\\[)[^\\]]+(?=\\]$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'url': {\n\t\t\t\t\tpattern: /(^\\]\\()[^\\s)]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: /(^[ \\t]+)\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t['url', 'bold', 'italic', 'strike'].forEach(function (token) {\n\t\t['url', 'bold', 'italic', 'strike', 'code-snippet'].forEach(function (inside) {\n\t\t\tif (token !== inside) {\n\t\t\t\tPrism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];\n\t\t\t}\n\t\t});\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tif (env.language !== 'markdown' && env.language !== 'md') {\n\t\t\treturn;\n\t\t}\n\n\t\tfunction walkTokens(tokens) {\n\t\t\tif (!tokens || typeof tokens === 'string') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = tokens.length; i < l; i++) {\n\t\t\t\tvar token = tokens[i];\n\n\t\t\t\tif (token.type !== 'code') {\n\t\t\t\t\twalkTokens(token.content);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Add the correct `language-xxxx` class to this code block. Keep in mind that the `code-language` token\n\t\t\t\t * is optional. But the grammar is defined so that there is only one case we have to handle:\n\t\t\t\t *\n\t\t\t\t * token.content = [\n\t\t\t\t *     <span class=\"punctuation\">```</span>,\n\t\t\t\t *     <span class=\"code-language\">xxxx</span>,\n\t\t\t\t *     '\\n', // exactly one new lines (\\r or \\n or \\r\\n)\n\t\t\t\t *     <span class=\"code-block\">...</span>,\n\t\t\t\t *     '\\n', // exactly one new lines again\n\t\t\t\t *     <span class=\"punctuation\">```</span>\n\t\t\t\t * ];\n\t\t\t\t */\n\n\t\t\t\tvar codeLang = token.content[1];\n\t\t\t\tvar codeBlock = token.content[3];\n\n\t\t\t\tif (codeLang && codeBlock &&\n\t\t\t\t\tcodeLang.type === 'code-language' && codeBlock.type === 'code-block' &&\n\t\t\t\t\ttypeof codeLang.content === 'string') {\n\n\t\t\t\t\t// this might be a language that Prism does not support\n\n\t\t\t\t\t// do some replacements to support C++, C#, and F#\n\t\t\t\t\tvar lang = codeLang.content.replace(/\\b#/g, 'sharp').replace(/\\b\\+\\+/g, 'pp');\n\t\t\t\t\t// only use the first word\n\t\t\t\t\tlang = (/[a-z][\\w-]*/i.exec(lang) || [''])[0].toLowerCase();\n\t\t\t\t\tvar alias = 'language-' + lang;\n\n\t\t\t\t\t// add alias\n\t\t\t\t\tif (!codeBlock.alias) {\n\t\t\t\t\t\tcodeBlock.alias = [alias];\n\t\t\t\t\t} else if (typeof codeBlock.alias === 'string') {\n\t\t\t\t\t\tcodeBlock.alias = [codeBlock.alias, alias];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcodeBlock.alias.push(alias);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twalkTokens(env.tokens);\n\t});\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (env.type !== 'code-block') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar codeLang = '';\n\t\tfor (var i = 0, l = env.classes.length; i < l; i++) {\n\t\t\tvar cls = env.classes[i];\n\t\t\tvar match = /language-(.+)/.exec(cls);\n\t\t\tif (match) {\n\t\t\t\tcodeLang = match[1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvar grammar = Prism.languages[codeLang];\n\n\t\tif (!grammar) {\n\t\t\tif (codeLang && codeLang !== 'none' && Prism.plugins.autoloader) {\n\t\t\t\tvar id = 'md-' + new Date().valueOf() + '-' + Math.floor(Math.random() * 1e16);\n\t\t\t\tenv.attributes['id'] = id;\n\n\t\t\t\tPrism.plugins.autoloader.loadLanguages(codeLang, function () {\n\t\t\t\t\tvar ele = document.getElementById(id);\n\t\t\t\t\tif (ele) {\n\t\t\t\t\t\tele.innerHTML = Prism.highlight(ele.textContent, Prism.languages[codeLang], codeLang);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tenv.content = Prism.highlight(textContent(env.content), grammar, codeLang);\n\t\t}\n\t});\n\n\tvar tagPattern = RegExp(Prism.languages.markup.tag.pattern.source, 'gi');\n\n\t/**\n\t * A list of known entity names.\n\t *\n\t * This will always be incomplete to save space. The current list is the one used by lowdash's unescape function.\n\t *\n\t * @see {@link https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/unescape.js#L2}\n\t */\n\tvar KNOWN_ENTITY_NAMES = {\n\t\t'amp': '&',\n\t\t'lt': '<',\n\t\t'gt': '>',\n\t\t'quot': '\"',\n\t};\n\n\t// IE 11 doesn't support `String.fromCodePoint`\n\tvar fromCodePoint = String.fromCodePoint || String.fromCharCode;\n\n\t/**\n\t * Returns the text content of a given HTML source code string.\n\t *\n\t * @param {string} html\n\t * @returns {string}\n\t */\n\tfunction textContent(html) {\n\t\t// remove all tags\n\t\tvar text = html.replace(tagPattern, '');\n\n\t\t// decode known entities\n\t\ttext = text.replace(/&(\\w{1,8}|#x?[\\da-f]{1,8});/gi, function (m, code) {\n\t\t\tcode = code.toLowerCase();\n\n\t\t\tif (code[0] === '#') {\n\t\t\t\tvar value;\n\t\t\t\tif (code[1] === 'x') {\n\t\t\t\t\tvalue = parseInt(code.slice(2), 16);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = Number(code.slice(1));\n\t\t\t\t}\n\n\t\t\t\treturn fromCodePoint(value);\n\t\t\t} else {\n\t\t\t\tvar known = KNOWN_ENTITY_NAMES[code];\n\t\t\t\tif (known) {\n\t\t\t\t\treturn known;\n\t\t\t\t}\n\n\t\t\t\t// unable to decode\n\t\t\t\treturn m;\n\t\t\t}\n\t\t});\n\n\t\treturn text;\n\t}\n\n\tPrism.languages.md = Prism.languages.markdown;\n\n}(Prism));\n","Prism.languages.python = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])#.*/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string-interpolation': {\n\t\tpattern: /(?:f|fr|rf)(?:(\"\"\"|''')[\\s\\S]*?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2)/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\t// \"{\" <expression> <optional \"!s\", \"!r\", or \"!a\"> <optional \":\" format specifier> \"}\"\n\t\t\t\tpattern: /((?:^|[^{])(?:\\{\\{)*)\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}])+\\})+\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'format-spec': {\n\t\t\t\t\t\tpattern: /(:)[^:(){}]+(?=\\}$)/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'conversion-option': {\n\t\t\t\t\t\tpattern: /![sra](?=[:}]$)/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: null\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'triple-quoted-string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"\"\"|''')[\\s\\S]*?\\1/i,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\t'string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/i,\n\t\tgreedy: true\n\t},\n\t'function': {\n\t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/g,\n\t\tlookbehind: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\bclass\\s+)\\w+/i,\n\t\tlookbehind: true\n\t},\n\t'decorator': {\n\t\tpattern: /(^[\\t ]*)@\\w+(?:\\.\\w+)*/m,\n\t\tlookbehind: true,\n\t\talias: ['annotation', 'punctuation'],\n\t\tinside: {\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\t'keyword': /\\b(?:_(?=\\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\\b/,\n\t'builtin': /\\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\\b/,\n\t'boolean': /\\b(?:False|None|True)\\b/,\n\t'number': /\\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\\b|(?:\\b\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\B\\.\\d+(?:_\\d+)*)(?:e[+-]?\\d+(?:_\\d+)*)?j?(?!\\w)/i,\n\t'operator': /[-+%=]=?|!=|:=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\nPrism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;\n\nPrism.languages.py = Prism.languages.python;\n","Prism.languages.sql = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:--|\\/\\/|#).*)/,\n\t\tlookbehind: true\n\t},\n\t'variable': [\n\t\t{\n\t\t\tpattern: /@([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])+\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t/@[\\w.$]+/\n\t],\n\t'string': {\n\t\tpattern: /(^|[^@\\\\])(\"|')(?:\\\\[\\s\\S]|(?!\\2)[^\\\\]|\\2\\2)*\\2/,\n\t\tgreedy: true,\n\t\tlookbehind: true\n\t},\n\t'identifier': {\n\t\tpattern: /(^|[^@\\\\])`(?:\\\\[\\s\\S]|[^`\\\\]|``)*`/,\n\t\tgreedy: true,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /^`|`$/\n\t\t}\n\t},\n\t'function': /\\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\\s*\\()/i, // Should we highlight user defined functions too?\n\t'keyword': /\\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\\b/i,\n\t'boolean': /\\b(?:FALSE|NULL|TRUE)\\b/i,\n\t'number': /\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+\\b/i,\n\t'operator': /[-+*\\/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\\b/i,\n\t'punctuation': /[;[\\]()`,.]/\n};\n","Prism.languages.c = Prism.languages.extend('clike', {\n\t'comment': {\n\t\tpattern: /\\/\\/(?:[^\\r\\n\\\\]|\\\\(?:\\r\\n?|\\n|(?![\\r\\n])))*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\t// https://en.cppreference.com/w/c/language/string_literal\n\t\tpattern: /\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:enum|struct)\\s+(?:__attribute__\\s*\\(\\([\\s\\S]*?\\)\\)\\s*)?)\\w+|\\b[a-z]\\w*_t\\b/,\n\t\tlookbehind: true\n\t},\n\t'keyword': /\\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'number': /(?:\\b0x(?:[\\da-f]+(?:\\.[\\da-f]*)?|\\.[\\da-f]+)(?:p[+-]?\\d+)?|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[ful]{0,4}/i,\n\t'operator': />>=?|<<=?|->|([-+&|:])\\1|[?:~]|[-+*/%&|^!=<>]=?/\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'char': {\n\t\t// https://en.cppreference.com/w/c/language/character_constant\n\t\tpattern: /'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n]){0,32}'/,\n\t\tgreedy: true\n\t}\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'macro': {\n\t\t// allow for multiline macro definitions\n\t\t// spaces after the # character compile fine with gcc\n\t\tpattern: /(^[\\t ]*)#\\s*[a-z](?:[^\\r\\n\\\\/]|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|\\\\(?:\\r\\n|[\\s\\S]))*/im,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'string': [\n\t\t\t\t{\n\t\t\t\t\t// highlight the path of the include statement as a string\n\t\t\t\t\tpattern: /^(#\\s*include\\s*)<[^>]+>/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\tPrism.languages.c['string']\n\t\t\t],\n\t\t\t'char': Prism.languages.c['char'],\n\t\t\t'comment': Prism.languages.c['comment'],\n\t\t\t'macro-name': [\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?!\\()/i,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?=\\()/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'function'\n\t\t\t\t}\n\t\t\t],\n\t\t\t// highlight macro directives as keywords\n\t\t\t'directive': {\n\t\t\t\tpattern: /^(#\\s*)[a-z]+/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t'directive-hash': /^#/,\n\t\t\t'punctuation': /##|\\\\(?=[\\r\\n])/,\n\t\t\t'expression': {\n\t\t\t\tpattern: /\\S[\\s\\S]*/,\n\t\t\t\tinside: Prism.languages.c\n\t\t\t}\n\t\t}\n\t}\n});\n\nPrism.languages.insertBefore('c', 'function', {\n\t// highlight predefined macros as constants\n\t'constant': /\\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\\b/\n});\n\ndelete Prism.languages.c['boolean'];\n","Prism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n","Prism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n","\n/* **********************************************\n     Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (document.currentScript && document.currentScript.tagName === 'SCRIPT' && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","// https://www.json.org/json-en.html\nPrism.languages.json = {\n\t'property': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?!\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'number': /-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n\t'punctuation': /[{}[\\],]/,\n\t'operator': /:/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'null': {\n\t\tpattern: /\\bnull\\b/,\n\t\talias: 'keyword'\n\t}\n};\n\nPrism.languages.webmanifest = Prism.languages.json;\n","Prism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n","(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n","(function (Prism) {\n\n\tvar keyword = /\\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\\b/;\n\tvar modName = /\\b(?!<keyword>)\\w+(?:\\s*\\.\\s*\\w+)*\\b/.source.replace(/<keyword>/g, function () { return keyword.source; });\n\n\tPrism.languages.cpp = Prism.languages.extend('c', {\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\b(?:class|concept|enum|struct|typename)\\s+)(?!<keyword>)\\w+/.source\n\t\t\t\t\t.replace(/<keyword>/g, function () { return keyword.source; })),\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t// This is intended to capture the class name of method implementations like:\n\t\t\t//   void foo::bar() const {}\n\t\t\t// However! The `foo` in the above example could also be a namespace, so we only capture the class name if\n\t\t\t// it starts with an uppercase letter. This approximation should give decent results.\n\t\t\t/\\b[A-Z]\\w*(?=\\s*::\\s*\\w+\\s*\\()/,\n\t\t\t// This will capture the class name before destructors like:\n\t\t\t//   Foo::~Foo() {}\n\t\t\t/\\b[A-Z_]\\w*(?=\\s*::\\s*~\\w+\\s*\\()/i,\n\t\t\t// This also intends to capture the class name of method implementations but here the class has template\n\t\t\t// parameters, so it can't be a namespace (until C++ adds generic namespaces).\n\t\t\t/\\b\\w+(?=\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\\s*::\\s*\\w+\\s*\\()/\n\t\t],\n\t\t'keyword': keyword,\n\t\t'number': {\n\t\t\tpattern: /(?:\\b0b[01']+|\\b0x(?:[\\da-f']+(?:\\.[\\da-f']*)?|\\.[\\da-f']+)(?:p[+-]?[\\d']+)?|(?:\\b[\\d']+(?:\\.[\\d']*)?|\\B\\.[\\d']+)(?:e[+-]?[\\d']+)?)[ful]{0,4}/i,\n\t\t\tgreedy: true\n\t\t},\n\t\t'operator': />>=?|<<=?|->|--|\\+\\+|&&|\\|\\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'string', {\n\t\t'module': {\n\t\t\t// https://en.cppreference.com/w/cpp/language/modules\n\t\t\tpattern: RegExp(\n\t\t\t\t/(\\b(?:import|module)\\s+)/.source +\n\t\t\t\t'(?:' +\n\t\t\t\t// header-name\n\t\t\t\t/\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|<[^<>\\r\\n]*>/.source +\n\t\t\t\t'|' +\n\t\t\t\t// module name or partition or both\n\t\t\t\t/<mod-name>(?:\\s*:\\s*<mod-name>)?|:\\s*<mod-name>/.source.replace(/<mod-name>/g, function () { return modName; }) +\n\t\t\t\t')'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'string': /^[<\"][\\s\\S]+/,\n\t\t\t\t'operator': /:/,\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t},\n\t\t'raw-string': {\n\t\t\tpattern: /R\"([^()\\\\ ]{0,16})\\([\\s\\S]*?\\)\\1\"/,\n\t\t\talias: 'string',\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'keyword', {\n\t\t'generic-function': {\n\t\t\tpattern: /\\b(?!operator\\b)[a-z_]\\w*\\s*<(?:[^<>]|<[^<>]*>)*>(?=\\s*\\()/i,\n\t\t\tinside: {\n\t\t\t\t'function': /^\\w+/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/,\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: Prism.languages.cpp\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'operator', {\n\t\t'double-colon': {\n\t\t\tpattern: /::/,\n\t\t\talias: 'punctuation'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'class-name', {\n\t\t// the base clause is an optional list of parent classes\n\t\t// https://en.cppreference.com/w/cpp/language/class\n\t\t'base-clause': {\n\t\t\tpattern: /(\\b(?:class|struct)\\s+\\w+\\s*:\\s*)[^;{}\"'\\s]+(?:\\s+[^;{}\"'\\s]+)*(?=\\s*[;{])/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: Prism.languages.extend('cpp', {})\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('inside', 'double-colon', {\n\t\t// All untokenized words that are not namespaces should be class names\n\t\t'class-name': /\\b[a-z_]\\w*\\b(?!\\s*::)/i\n\t}, Prism.languages.cpp['base-clause']);\n\n}(Prism));\n","(function (Prism) {\n\n\tPrism.languages.typescript = Prism.languages.extend('javascript', {\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|type)\\s+)(?!keyof\\b)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?:\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: null // see below\n\t\t},\n\t\t'builtin': /\\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\\b/,\n\t});\n\n\t// The keywords TypeScript adds to JavaScript\n\tPrism.languages.typescript.keyword.push(\n\t\t/\\b(?:abstract|declare|is|keyof|readonly|require)\\b/,\n\t\t// keywords that have to be followed by an identifier\n\t\t/\\b(?:asserts|infer|interface|module|namespace|type)\\b(?=\\s*(?:[{_$a-zA-Z\\xA0-\\uFFFF]|$))/,\n\t\t// This is for `import type *, {}`\n\t\t/\\btype\\b(?=\\s*(?:[\\{*]|$))/\n\t);\n\n\t// doesn't work with TS because TS is too complex\n\tdelete Prism.languages.typescript['parameter'];\n\tdelete Prism.languages.typescript['literal-property'];\n\n\t// a version of typescript specifically for highlighting types\n\tvar typeInside = Prism.languages.extend('typescript', {});\n\tdelete typeInside['class-name'];\n\n\tPrism.languages.typescript['class-name'].inside = typeInside;\n\n\tPrism.languages.insertBefore('typescript', 'function', {\n\t\t'decorator': {\n\t\t\tpattern: /@[$\\w\\xA0-\\uFFFF]+/,\n\t\t\tinside: {\n\t\t\t\t'at': {\n\t\t\t\t\tpattern: /^@/,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t},\n\t\t\t\t'function': /^[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'generic-function': {\n\t\t\t// e.g. foo<T extends \"bar\" | \"baz\">( ...\n\t\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\\s*\\()/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/, // everything after the first <\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: typeInside\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.ts = Prism.languages.typescript;\n\n}(Prism));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Prism from \"prismjs\";\nimport \"prismjs/components/prism-markup.js\";\nimport \"prismjs/components/prism-css.js\";\nimport \"prismjs/components/prism-clike.js\";\nimport \"prismjs/components/prism-javascript.js\";\nimport \"prismjs/components/prism-c.js\";\nimport \"prismjs/components/prism-cpp.js\";\nimport \"prismjs/components/prism-markdown.js\";\nimport \"prismjs/components/prism-json.js\";\nimport \"prismjs/components/prism-sql.js\";\nimport \"prismjs/components/prism-python.js\";\nimport \"prismjs/components/prism-typescript.js\";\n\nexport function runTest(samples) {\n  const results = [];\n  for (const { content, lang } of samples) {\n    const highlighted = Prism.highlight(content, Prism.languages[lang], lang);\n    results.push({\n      html: highlighted,\n    });\n  }\n  return results;\n}\n"],"names":["Prism","inner","source","createInline","pattern","replace","RegExp","tableCell","tableRow","tableLine","languages","markdown","extend","insertBefore","lookbehind","greedy","inside","alias","yaml","punctuation","forEach","token","content","hooks","add","env","language","walkTokens","tokens","i","l","length","type","codeLang","codeBlock","lang","exec","toLowerCase","push","classes","cls","match","html","grammar","highlight","tagPattern","m","code","value","parseInt","slice","Number","fromCodePoint","known","KNOWN_ENTITY_NAMES","plugins","autoloader","id","Date","valueOf","Math","floor","random","attributes","loadLanguages","ele","document","getElementById","innerHTML","textContent","markup","tag","String","fromCharCode","md","python","rest","py","sql","c","javascript","clike","regex","addInlined","addAttribute","js","_self","uniqueId","plainTextGrammar","_","manual","disableWorkerMessageHandler","util","encode","Token","Array","isArray","map","o","Object","prototype","toString","call","objId","obj","defineProperty","clone","deepClone","visited","key","hasOwnProperty","v","getLanguage","element","className","parentElement","setLanguage","classList","currentScript","tagName","Error","err","src","stack","scripts","getElementsByTagName","isActive","defaultActivation","no","contains","plain","plaintext","text","txt","redef","before","insert","root","ret","newToken","old","DFS","this","callback","property","propertyType","highlightAll","async","highlightAllUnder","container","selector","run","elements","apply","querySelectorAll","highlightElement","parent","nodeName","insertHighlightedCode","highlightedCode","hasAttribute","setAttribute","Worker","worker","filename","onmessage","evt","data","postMessage","JSON","stringify","immediateClose","tokenize","tokenList","LinkedList","addAfter","head","matchGrammar","list","array","node","next","tail","toArray","all","name","callbacks","matchedStr","matchPattern","pos","lastIndex","lookbehindLength","index","startNode","startPos","rematch","patterns","j","cause","patternObj","global","flags","currentNode","reach","str","removeCount","from","to","p","k","matchStr","after","removeFrom","prev","removeRange","nestedRematch","newNode","count","s","e","aliases","join","addEventListener","message","parse","close","script","highlightAutomaticallyCallback","readyState","defer","window","requestAnimationFrame","setTimeout","WorkerGlobalScope","self","module","exports","includedCdataInside","def","attrName","mathml","svg","xml","ssml","atom","rss","string","css","Element","matches","msMatchesSelector","webkitMatchesSelector","EXTENSIONS","STATUS_ATTR","STATUS_LOADING","STATUS_LOADED","SELECTOR","pre","appendChild","createElement","getAttribute","extension","success","error","xhr","XMLHttpRequest","open","onreadystatechange","status","responseText","statusText","send","loadFile","range","start","comma","end","undefined","parseRange","lines","split","max","min","fileHighlight","logged","console","warn","arguments","json","webmanifest","keyword","modName","cpp","typescript","typeInside","ts","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","enumerable","get","g","globalThis","Function","prop","r","Symbol","toStringTag","runTest","samples","results","highlighted"],"sourceRoot":""}
\ No newline at end of file
diff --git a/prismjs/package-lock.json b/prismjs/package-lock.json
new file mode 100644
index 0000000..8ea6e15
--- /dev/null
+++ b/prismjs/package-lock.json
@@ -0,0 +1,1814 @@
+{
+  "name": "prismjs",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "prismjs",
+      "version": "1.0.0",
+      "license": "ISC",
+      "dependencies": {
+        "@babel/core": "^7.28.3",
+        "@dapplets/unicode-escape-webpack-plugin": "github:dapplets/unicode-escape-webpack-plugin",
+        "babel-loader": "^10.0.0",
+        "prismjs": "^1.30.0",
+        "terser-webpack-plugin": "^5.3.14",
+        "webpack": "^5.101.3",
+        "webpack-cli": "^6.0.1"
+      }
+    },
+    "node_modules/@ampproject/remapping": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/code-frame": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
+      "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.27.1",
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.1.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/compat-data": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz",
+      "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/core": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz",
+      "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.27.1",
+        "@babel/generator": "^7.28.3",
+        "@babel/helper-compilation-targets": "^7.27.2",
+        "@babel/helper-module-transforms": "^7.28.3",
+        "@babel/helpers": "^7.28.3",
+        "@babel/parser": "^7.28.3",
+        "@babel/template": "^7.27.2",
+        "@babel/traverse": "^7.28.3",
+        "@babel/types": "^7.28.2",
+        "convert-source-map": "^2.0.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.3",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/babel"
+      }
+    },
+    "node_modules/@babel/generator": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz",
+      "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.28.3",
+        "@babel/types": "^7.28.2",
+        "@jridgewell/gen-mapping": "^0.3.12",
+        "@jridgewell/trace-mapping": "^0.3.28",
+        "jsesc": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-compilation-targets": {
+      "version": "7.27.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
+      "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/compat-data": "^7.27.2",
+        "@babel/helper-validator-option": "^7.27.1",
+        "browserslist": "^4.24.0",
+        "lru-cache": "^5.1.1",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-globals": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+      "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-imports": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
+      "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/traverse": "^7.27.1",
+        "@babel/types": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-transforms": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
+      "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.27.1",
+        "@babel/traverse": "^7.28.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-option": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+      "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helpers": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz",
+      "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/template": "^7.27.2",
+        "@babel/types": "^7.28.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz",
+      "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.28.2"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/template": {
+      "version": "7.27.2",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
+      "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.27.1",
+        "@babel/parser": "^7.27.2",
+        "@babel/types": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz",
+      "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.27.1",
+        "@babel/generator": "^7.28.3",
+        "@babel/helper-globals": "^7.28.0",
+        "@babel/parser": "^7.28.3",
+        "@babel/template": "^7.27.2",
+        "@babel/types": "^7.28.2",
+        "debug": "^4.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/types": {
+      "version": "7.28.2",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz",
+      "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@dapplets/unicode-escape-webpack-plugin": {
+      "version": "0.1.1",
+      "resolved": "git+ssh://[email protected]/dapplets/unicode-escape-webpack-plugin.git#722af763e3a5f57af92e8608b9cd7ddc685102ed",
+      "license": "MIT"
+    },
+    "node_modules/@discoveryjs/json-ext": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz",
+      "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=14.17.0"
+      }
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.13",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+      "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/source-map": {
+      "version": "0.3.11",
+      "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
+      "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+      "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.30",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz",
+      "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@types/eslint": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
+      "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "*",
+        "@types/json-schema": "*"
+      }
+    },
+    "node_modules/@types/eslint-scope": {
+      "version": "3.7.7",
+      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+      "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/eslint": "*",
+        "@types/estree": "*"
+      }
+    },
+    "node_modules/@types/estree": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+      "license": "MIT"
+    },
+    "node_modules/@types/json-schema": {
+      "version": "7.0.15",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+      "license": "MIT"
+    },
+    "node_modules/@types/node": {
+      "version": "24.3.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz",
+      "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==",
+      "license": "MIT",
+      "dependencies": {
+        "undici-types": "~7.10.0"
+      }
+    },
+    "node_modules/@webassemblyjs/ast": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
+      "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/helper-numbers": "1.13.2",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
+      }
+    },
+    "node_modules/@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
+      "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
+      "license": "MIT"
+    },
+    "node_modules/@webassemblyjs/helper-api-error": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
+      "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
+      "license": "MIT"
+    },
+    "node_modules/@webassemblyjs/helper-buffer": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
+      "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
+      "license": "MIT"
+    },
+    "node_modules/@webassemblyjs/helper-numbers": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
+      "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/floating-point-hex-parser": "1.13.2",
+        "@webassemblyjs/helper-api-error": "1.13.2",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
+      "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
+      "license": "MIT"
+    },
+    "node_modules/@webassemblyjs/helper-wasm-section": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
+      "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-buffer": "1.14.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+        "@webassemblyjs/wasm-gen": "1.14.1"
+      }
+    },
+    "node_modules/@webassemblyjs/ieee754": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
+      "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
+      "license": "MIT",
+      "dependencies": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "node_modules/@webassemblyjs/leb128": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
+      "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@webassemblyjs/utf8": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
+      "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
+      "license": "MIT"
+    },
+    "node_modules/@webassemblyjs/wasm-edit": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
+      "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-buffer": "1.14.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+        "@webassemblyjs/helper-wasm-section": "1.14.1",
+        "@webassemblyjs/wasm-gen": "1.14.1",
+        "@webassemblyjs/wasm-opt": "1.14.1",
+        "@webassemblyjs/wasm-parser": "1.14.1",
+        "@webassemblyjs/wast-printer": "1.14.1"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-gen": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
+      "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+        "@webassemblyjs/ieee754": "1.13.2",
+        "@webassemblyjs/leb128": "1.13.2",
+        "@webassemblyjs/utf8": "1.13.2"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-opt": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
+      "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-buffer": "1.14.1",
+        "@webassemblyjs/wasm-gen": "1.14.1",
+        "@webassemblyjs/wasm-parser": "1.14.1"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-parser": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
+      "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-api-error": "1.13.2",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+        "@webassemblyjs/ieee754": "1.13.2",
+        "@webassemblyjs/leb128": "1.13.2",
+        "@webassemblyjs/utf8": "1.13.2"
+      }
+    },
+    "node_modules/@webassemblyjs/wast-printer": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
+      "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@webpack-cli/configtest": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz",
+      "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "peerDependencies": {
+        "webpack": "^5.82.0",
+        "webpack-cli": "6.x.x"
+      }
+    },
+    "node_modules/@webpack-cli/info": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz",
+      "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "peerDependencies": {
+        "webpack": "^5.82.0",
+        "webpack-cli": "6.x.x"
+      }
+    },
+    "node_modules/@webpack-cli/serve": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz",
+      "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "peerDependencies": {
+        "webpack": "^5.82.0",
+        "webpack-cli": "6.x.x"
+      },
+      "peerDependenciesMeta": {
+        "webpack-dev-server": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@xtuc/long": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/acorn": {
+      "version": "8.15.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+      "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+      "license": "MIT",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/acorn-import-phases": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
+      "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "peerDependencies": {
+        "acorn": "^8.14.0"
+      }
+    },
+    "node_modules/ajv": {
+      "version": "8.17.1",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3",
+        "fast-uri": "^3.0.1",
+        "json-schema-traverse": "^1.0.0",
+        "require-from-string": "^2.0.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/ajv-formats": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+      "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^8.0.0"
+      },
+      "peerDependencies": {
+        "ajv": "^8.0.0"
+      },
+      "peerDependenciesMeta": {
+        "ajv": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/ajv-keywords": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3"
+      },
+      "peerDependencies": {
+        "ajv": "^8.8.2"
+      }
+    },
+    "node_modules/babel-loader": {
+      "version": "10.0.0",
+      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz",
+      "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==",
+      "license": "MIT",
+      "dependencies": {
+        "find-up": "^5.0.0"
+      },
+      "engines": {
+        "node": "^18.20.0 || ^20.10.0 || >=22.0.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.12.0",
+        "webpack": ">=5.61.0"
+      }
+    },
+    "node_modules/babel-loader/node_modules/find-up": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+      "license": "MIT",
+      "dependencies": {
+        "locate-path": "^6.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/babel-loader/node_modules/locate-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+      "license": "MIT",
+      "dependencies": {
+        "p-locate": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/babel-loader/node_modules/p-limit": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+      "license": "MIT",
+      "dependencies": {
+        "yocto-queue": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/babel-loader/node_modules/p-locate": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+      "license": "MIT",
+      "dependencies": {
+        "p-limit": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/browserslist": {
+      "version": "4.25.2",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz",
+      "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001733",
+        "electron-to-chromium": "^1.5.199",
+        "node-releases": "^2.0.19",
+        "update-browserslist-db": "^1.1.3"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/buffer-from": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+      "license": "MIT"
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001735",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz",
+      "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "CC-BY-4.0"
+    },
+    "node_modules/chrome-trace-event": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+      "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0"
+      }
+    },
+    "node_modules/clone-deep": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+      "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+      "license": "MIT",
+      "dependencies": {
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.2",
+        "shallow-clone": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/colorette": {
+      "version": "2.0.20",
+      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+      "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+      "license": "MIT"
+    },
+    "node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "license": "MIT"
+    },
+    "node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+      "license": "MIT"
+    },
+    "node_modules/cross-spawn": {
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/debug": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+      "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/electron-to-chromium": {
+      "version": "1.5.203",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.203.tgz",
+      "integrity": "sha512-uz4i0vLhfm6dLZWbz/iH88KNDV+ivj5+2SA+utpgjKaj9Q0iDLuwk6Idhe9BTxciHudyx6IvTvijhkPvFGUQ0g==",
+      "license": "ISC"
+    },
+    "node_modules/enhanced-resolve": {
+      "version": "5.18.3",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz",
+      "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==",
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.2.4",
+        "tapable": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/envinfo": {
+      "version": "7.14.0",
+      "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz",
+      "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==",
+      "license": "MIT",
+      "bin": {
+        "envinfo": "dist/cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/es-module-lexer": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+      "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+      "license": "MIT"
+    },
+    "node_modules/escalade": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/eslint-scope": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/esrecurse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/esrecurse/node_modules/estraverse": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8.x"
+      }
+    },
+    "node_modules/fast-deep-equal": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+      "license": "MIT"
+    },
+    "node_modules/fast-uri": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
+      "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fastify"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/fastify"
+        }
+      ],
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/fastest-levenshtein": {
+      "version": "1.0.16",
+      "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+      "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4.9.1"
+      }
+    },
+    "node_modules/find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+      "license": "MIT",
+      "dependencies": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/flat": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+      "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+      "license": "BSD-3-Clause",
+      "bin": {
+        "flat": "cli.js"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/glob-to-regexp": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+      "license": "ISC"
+    },
+    "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==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+      "license": "MIT",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/import-local": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+      "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
+      "license": "MIT",
+      "dependencies": {
+        "pkg-dir": "^4.2.0",
+        "resolve-cwd": "^3.0.0"
+      },
+      "bin": {
+        "import-local-fixture": "fixtures/cli.js"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/interpret": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
+      "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.16.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+      "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+      "license": "MIT",
+      "dependencies": {
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+      "license": "MIT",
+      "dependencies": {
+        "isobject": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+      "license": "ISC"
+    },
+    "node_modules/isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/jest-worker": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+      "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      }
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "license": "MIT"
+    },
+    "node_modules/jsesc": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+      "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+      "license": "MIT",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+      "license": "MIT"
+    },
+    "node_modules/json-schema-traverse": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+      "license": "MIT"
+    },
+    "node_modules/json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+      "license": "MIT",
+      "bin": {
+        "json5": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/kind-of": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+      "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/loader-runner": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+      "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.11.5"
+      }
+    },
+    "node_modules/locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+      "license": "MIT",
+      "dependencies": {
+        "p-locate": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "node_modules/merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+      "license": "MIT"
+    },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "license": "MIT"
+    },
+    "node_modules/neo-async": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+      "license": "MIT"
+    },
+    "node_modules/node-releases": {
+      "version": "2.0.19",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+      "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+      "license": "MIT"
+    },
+    "node_modules/p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+      "license": "MIT",
+      "dependencies": {
+        "p-try": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+      "license": "MIT",
+      "dependencies": {
+        "p-limit": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "license": "MIT"
+    },
+    "node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "license": "ISC"
+    },
+    "node_modules/pkg-dir": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+      "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+      "license": "MIT",
+      "dependencies": {
+        "find-up": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/prismjs": {
+      "version": "1.30.0",
+      "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
+      "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "node_modules/rechoir": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
+      "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
+      "license": "MIT",
+      "dependencies": {
+        "resolve": "^1.20.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      }
+    },
+    "node_modules/require-from-string": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/resolve": {
+      "version": "1.22.10",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+      "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+      "license": "MIT",
+      "dependencies": {
+        "is-core-module": "^2.16.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/resolve-cwd": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+      "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+      "license": "MIT",
+      "dependencies": {
+        "resolve-from": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/resolve-from": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/schema-utils": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz",
+      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/json-schema": "^7.0.9",
+        "ajv": "^8.9.0",
+        "ajv-formats": "^2.1.1",
+        "ajv-keywords": "^5.1.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      }
+    },
+    "node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/serialize-javascript": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+      "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "randombytes": "^2.1.0"
+      }
+    },
+    "node_modules/shallow-clone": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+      "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^6.0.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "license": "MIT",
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-support": {
+      "version": "0.5.21",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+      "license": "MIT",
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "node_modules/supports-color": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/tapable": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
+      "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/terser": {
+      "version": "5.43.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz",
+      "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "@jridgewell/source-map": "^0.3.3",
+        "acorn": "^8.14.0",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
+      },
+      "bin": {
+        "terser": "bin/terser"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/terser-webpack-plugin": {
+      "version": "5.3.14",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz",
+      "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.25",
+        "jest-worker": "^27.4.5",
+        "schema-utils": "^4.3.0",
+        "serialize-javascript": "^6.0.2",
+        "terser": "^5.31.1"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.1.0"
+      },
+      "peerDependenciesMeta": {
+        "@swc/core": {
+          "optional": true
+        },
+        "esbuild": {
+          "optional": true
+        },
+        "uglify-js": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/undici-types": {
+      "version": "7.10.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz",
+      "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==",
+      "license": "MIT"
+    },
+    "node_modules/update-browserslist-db": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.1"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    },
+    "node_modules/watchpack": {
+      "version": "2.4.4",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz",
+      "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==",
+      "license": "MIT",
+      "dependencies": {
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.1.2"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/webpack": {
+      "version": "5.101.3",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.3.tgz",
+      "integrity": "sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/eslint-scope": "^3.7.7",
+        "@types/estree": "^1.0.8",
+        "@types/json-schema": "^7.0.15",
+        "@webassemblyjs/ast": "^1.14.1",
+        "@webassemblyjs/wasm-edit": "^1.14.1",
+        "@webassemblyjs/wasm-parser": "^1.14.1",
+        "acorn": "^8.15.0",
+        "acorn-import-phases": "^1.0.3",
+        "browserslist": "^4.24.0",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^5.17.3",
+        "es-module-lexer": "^1.2.1",
+        "eslint-scope": "5.1.1",
+        "events": "^3.2.0",
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.2.11",
+        "json-parse-even-better-errors": "^2.3.1",
+        "loader-runner": "^4.2.0",
+        "mime-types": "^2.1.27",
+        "neo-async": "^2.6.2",
+        "schema-utils": "^4.3.2",
+        "tapable": "^2.1.1",
+        "terser-webpack-plugin": "^5.3.11",
+        "watchpack": "^2.4.1",
+        "webpack-sources": "^3.3.3"
+      },
+      "bin": {
+        "webpack": "bin/webpack.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependenciesMeta": {
+        "webpack-cli": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/webpack-cli": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz",
+      "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==",
+      "license": "MIT",
+      "dependencies": {
+        "@discoveryjs/json-ext": "^0.6.1",
+        "@webpack-cli/configtest": "^3.0.1",
+        "@webpack-cli/info": "^3.0.1",
+        "@webpack-cli/serve": "^3.0.1",
+        "colorette": "^2.0.14",
+        "commander": "^12.1.0",
+        "cross-spawn": "^7.0.3",
+        "envinfo": "^7.14.0",
+        "fastest-levenshtein": "^1.0.12",
+        "import-local": "^3.0.2",
+        "interpret": "^3.1.1",
+        "rechoir": "^0.8.0",
+        "webpack-merge": "^6.0.1"
+      },
+      "bin": {
+        "webpack-cli": "bin/cli.js"
+      },
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.82.0"
+      },
+      "peerDependenciesMeta": {
+        "webpack-bundle-analyzer": {
+          "optional": true
+        },
+        "webpack-dev-server": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/webpack-cli/node_modules/commander": {
+      "version": "12.1.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+      "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/webpack-merge": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz",
+      "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==",
+      "license": "MIT",
+      "dependencies": {
+        "clone-deep": "^4.0.1",
+        "flat": "^5.0.2",
+        "wildcard": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=18.0.0"
+      }
+    },
+    "node_modules/webpack-sources": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz",
+      "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "license": "ISC",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/wildcard": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
+      "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
+      "license": "MIT"
+    },
+    "node_modules/yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+      "license": "ISC"
+    },
+    "node_modules/yocto-queue": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    }
+  }
+}
diff --git a/prismjs/package.json b/prismjs/package.json
new file mode 100644
index 0000000..809936b
--- /dev/null
+++ b/prismjs/package.json
@@ -0,0 +1,22 @@
+{
+  "name": "prismjs",
+  "version": "1.0.0",
+  "main": "index.js",
+  "scripts": {
+    "test": "node ./benchmark-node.mjs",
+    "clean": "rm -rf dist/*",
+    "build": "webpack"
+  },
+  "author": "",
+  "license": "ISC",
+  "description": "",
+  "dependencies": {
+    "@babel/core": "^7.28.3",
+    "@dapplets/unicode-escape-webpack-plugin": "github:dapplets/unicode-escape-webpack-plugin",
+    "babel-loader": "^10.0.0",
+    "prismjs": "^1.30.0",
+    "terser-webpack-plugin": "^5.3.14",
+    "webpack": "^5.101.3",
+    "webpack-cli": "^6.0.1"
+  }
+}
diff --git a/prismjs/src/test.mjs b/prismjs/src/test.mjs
new file mode 100644
index 0000000..5a063b3
--- /dev/null
+++ b/prismjs/src/test.mjs
@@ -0,0 +1,23 @@
+import Prism from "prismjs";
+import "prismjs/components/prism-markup.js";
+import "prismjs/components/prism-css.js";
+import "prismjs/components/prism-clike.js";
+import "prismjs/components/prism-javascript.js";
+import "prismjs/components/prism-c.js";
+import "prismjs/components/prism-cpp.js";
+import "prismjs/components/prism-markdown.js";
+import "prismjs/components/prism-json.js";
+import "prismjs/components/prism-sql.js";
+import "prismjs/components/prism-python.js";
+import "prismjs/components/prism-typescript.js";
+
+export function runTest(samples) {
+  const results = [];
+  for (const { content, lang } of samples) {
+    const highlighted = Prism.highlight(content, Prism.languages[lang], lang);
+    results.push({
+      html: highlighted,
+    });
+  }
+  return results;
+}
diff --git a/prismjs/webpack.config.mjs b/prismjs/webpack.config.mjs
new file mode 100644
index 0000000..ba54cc7
--- /dev/null
+++ b/prismjs/webpack.config.mjs
@@ -0,0 +1,67 @@
+import path from "path";
+import { fileURLToPath } from "url";
+import TerserPlugin from "terser-webpack-plugin";
+import CacheBusterCommentPlugin from "../startup-helper/BabelCacheBuster.mjs";
+import UnicodeEscapePlugin from "@dapplets/unicode-escape-webpack-plugin";
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+
+function config({ filename, minify, target }) {
+  return {
+    entry: "./src/test.mjs",
+    mode: "production",
+    devtool: "source-map",
+    target: ["web", target],
+    output: {
+      path: path.resolve(__dirname, "dist"),
+      filename: filename,
+      library: {
+        name: "PrismJSBenchmark",
+        type: "globalThis",
+      },
+      libraryTarget: "assign",
+      chunkFormat: "commonjs",
+    },
+    module: {
+      rules: [
+        {
+          test: /\.m?js$/,
+          use: {
+            loader: "babel-loader",
+            options: {
+              plugins: [CacheBusterCommentPlugin],
+            },
+          },
+        },
+      ],
+    },
+    plugins: [
+      new UnicodeEscapePlugin({
+        test: /\.(js|jsx|ts|tsx)$/, // Escape Unicode in JavaScript and TypeScript files
+      }),
+    ],
+    resolve: {
+      fallback: {},
+    },
+    optimization: {
+      minimizer: [
+        new TerserPlugin({
+          terserOptions: {
+            mangle: minify,
+            format: {
+              // Keep this comment for cache-busting.
+              comments: /ThouShaltNotCache/i,
+            },
+          },
+        }),
+      ],
+    },
+  };
+}
+
+export default [
+  config({ filename: "bundle.es6.min.js", minify: true, target: "es6" }),
+  config({ filename: "bundle.es6.js", minify: false, target: "es6" }),
+  config({ filename: "bundle.es5.min.js", minify: true, target: "es5" }),
+  config({ filename: "bundle.es5.js", minify: false, target: "es5" }),
+];
diff --git a/tests/run-shell.mjs b/tests/run-shell.mjs
index 1b626a7..221c156 100644
--- a/tests/run-shell.mjs
+++ b/tests/run-shell.mjs
@@ -110,6 +110,7 @@
     success &&= await runTest("Run UnitTests", () => sh(shellBinary, UNIT_TEST_PATH));
     success &&= await runCLITest("Run Single Suite", shellBinary, "proxy-mobx");
     success &&= await runCLITest("Run Tag No Prefetch", shellBinary, "proxy", "--no-prefetch");
+    success &&= await runCLITest("Run Grouped with Details", shellBinary, "SunSpider", "--group-details");
     success &&= await runCLITest("Run Disabled Suite", shellBinary, "disabled");
     success &&= await runCLITest("Run Default Suite",  shellBinary);
     if (!success)
diff --git a/validatorjs/README.md b/validatorjs/README.md
new file mode 100644
index 0000000..e3536ac
--- /dev/null
+++ b/validatorjs/README.md
@@ -0,0 +1,24 @@
+# validator.js test for JetStream
+
+Measures the performance of the validator.js library by running the core test suite.
+
+## Build Instructions
+
+```bash
+# install required node packages.
+npm ci
+# build the workload, output is ./dist
+npm run build
+```
+
+## Workloads
+
+The workload is a modified copy of the validator.js [test suite](https://github.com/validatorjs/validator.js/tree/master/test).
+Several files are combined together and contents copied to the `runTest` method.
+
+Modifications to the original:
+- Any tests that depend on node internal values have been removed.
+- Date constructions with an arg-array differs between browser and thus they
+  are replaced by direct arguments.
+- Direct calls to validater.xzy() are replaced with validatorjs.xzy() to not
+  conflict with the default argument to the mock test() method.
diff --git a/validatorjs/benchmark-node.mjs b/validatorjs/benchmark-node.mjs
new file mode 100644
index 0000000..e926fc2
--- /dev/null
+++ b/validatorjs/benchmark-node.mjs
@@ -0,0 +1,6 @@
+import { runTest } from "./src/test.mjs";
+
+const then = performance.now();
+runTest();
+const duration = performance.now() - then;
+console.log(`Duration: ${duration.toFixed(2)}ms`);
diff --git a/validatorjs/benchmark.js b/validatorjs/benchmark.js
new file mode 100644
index 0000000..83b95b7
--- /dev/null
+++ b/validatorjs/benchmark.js
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2025 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+const EXPECTED_ASSERTION_COUNT = 10114;
+
+class Benchmark {
+  assertionCount = 0;
+
+  runIteration() {
+    this.assertionCount = ValidatorJSBenchmark.runTest();
+  }
+
+  validate() {
+    console.assert(
+      this.assertionCount === EXPECTED_ASSERTION_COUNT,
+      `Expected ${EXPECTED_ASSERTION_COUNT} assertions, but got ${this.assertionCount}`
+    );
+  }
+}
diff --git a/validatorjs/dist/bundle.es6.js b/validatorjs/dist/bundle.es6.js
new file mode 100644
index 0000000..b0956b6
--- /dev/null
+++ b/validatorjs/dist/bundle.es6.js
@@ -0,0 +1,21402 @@
+/******/ (() => { // webpackBootstrap
+/******/ 	// runtime can't be in strict mode because a global variable is assign and maybe created.
+/******/ 	var __webpack_modules__ = ({
+
+/***/ 82:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isEthereumAddress;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var eth = /^(0x)[0-9a-f]{40}$/i;
+function isEthereumAddress(str) {
+  (0, _assertString.default)(str);
+  return eth.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 317:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = trim;
+var _rtrim = _interopRequireDefault(__webpack_require__(2483));
+var _ltrim = _interopRequireDefault(__webpack_require__(2309));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function trim(str, chars) {
+  return (0, _rtrim.default)((0, _ltrim.default)(str, chars), chars);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 410:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = blacklist;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function blacklist(str, chars) {
+  (0, _assertString.default)(str);
+  return str.replace(new RegExp("[".concat(chars, "]+"), 'g'), '');
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 561:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = stripLow;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _blacklist = _interopRequireDefault(__webpack_require__(410));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function stripLow(str, keep_new_lines) {
+  (0, _assertString.default)(str);
+  var chars = keep_new_lines ? '\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F' : '\\x00-\\x1F\\x7F';
+  return (0, _blacklist.default)(str, chars);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 604:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isISSN;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var issn = '^\\d{4}-?\\d{3}[\\dX]$';
+function isISSN(str) {
+  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+  (0, _assertString.default)(str);
+  var testIssn = issn;
+  testIssn = options.require_hyphen ? testIssn.replace('?', '') : testIssn;
+  testIssn = options.case_sensitive ? new RegExp(testIssn) : new RegExp(testIssn, 'i');
+  if (!testIssn.test(str)) {
+    return false;
+  }
+  var digits = str.replace('-', '').toUpperCase();
+  var checksum = 0;
+  for (var i = 0; i < digits.length; i++) {
+    var digit = digits[i];
+    checksum += (digit === 'X' ? 10 : +digit) * (8 - i);
+  }
+  return checksum % 11 === 0;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 629:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isWhitelisted;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function isWhitelisted(str, chars) {
+  (0, _assertString.default)(str);
+  for (var i = str.length - 1; i >= 0; i--) {
+    if (chars.indexOf(str[i]) === -1) {
+      return false;
+    }
+  }
+  return true;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 676:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isLicensePlate;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var validators = {
+  'cs-CZ': function csCZ(str) {
+    return /^(([ABCDEFHIJKLMNPRSTUVXYZ]|[0-9])-?){5,8}$/.test(str);
+  },
+  'de-DE': function deDE(str) {
+    return /^((A|AA|AB|AC|AE|AH|AK|AM|AN|A\u00d6|AP|AS|AT|AU|AW|AZ|B|BA|BB|BC|BE|BF|BH|BI|BK|BL|BM|BN|BO|B\u00d6|BS|BT|BZ|C|CA|CB|CE|CO|CR|CW|D|DA|DD|DE|DH|DI|DL|DM|DN|DO|DU|DW|DZ|E|EA|EB|ED|EE|EF|EG|EH|EI|EL|EM|EN|ER|ES|EU|EW|F|FB|FD|FF|FG|FI|FL|FN|FO|FR|FS|FT|F\u00dc|FW|FZ|G|GA|GC|GD|GE|GF|GG|GI|GK|GL|GM|GN|G\u00d6|GP|GR|GS|GT|G\u00dc|GV|GW|GZ|H|HA|HB|HC|HD|HE|HF|HG|HH|HI|HK|HL|HM|HN|HO|HP|HR|HS|HU|HV|HX|HY|HZ|IK|IL|IN|IZ|J|JE|JL|K|KA|KB|KC|KE|KF|KG|KH|KI|KK|KL|KM|KN|KO|KR|KS|KT|KU|KW|KY|L|LA|LB|LC|LD|LF|LG|LH|LI|LL|LM|LN|L\u00d6|LP|LR|LU|M|MA|MB|MC|MD|ME|MG|MH|MI|MK|ML|MM|MN|MO|MQ|MR|MS|M\u00dc|MW|MY|MZ|N|NB|ND|NE|NF|NH|NI|NK|NM|N\u00d6|NP|NR|NT|NU|NW|NY|NZ|OA|OB|OC|OD|OE|OF|OG|OH|OK|OL|OP|OS|OZ|P|PA|PB|PE|PF|PI|PL|PM|PN|PR|PS|PW|PZ|R|RA|RC|RD|RE|RG|RH|RI|RL|RM|RN|RO|RP|RS|RT|RU|RV|RW|RZ|S|SB|SC|SE|SG|SI|SK|SL|SM|SN|SO|SP|SR|ST|SU|SW|SY|SZ|TE|TF|TG|TO|TP|TR|TS|TT|T\u00dc|\u00dcB|UE|UH|UL|UM|UN|V|VB|VG|VK|VR|VS|W|WA|WB|WE|WF|WI|WK|WL|WM|WN|WO|WR|WS|WT|W\u00dc|WW|WZ|Z|ZE|ZI|ZP|ZR|ZW|ZZ)[- ]?[A-Z]{1,2}[- ]?\d{1,4}|(ABG|ABI|AIB|AIC|ALF|ALZ|ANA|ANG|ANK|APD|ARN|ART|ASL|ASZ|AUR|AZE|BAD|BAR|BBG|BCH|BED|BER|BGD|BGL|BID|BIN|BIR|BIT|BIW|BKS|BLB|BLK|BNA|BOG|BOH|BOR|BOT|BRA|BRB|BRG|BRK|BRL|BRV|BSB|BSK|BTF|B\u00dcD|BUL|B\u00dcR|B\u00dcS|B\u00dcZ|CAS|CHA|CLP|CLZ|COC|COE|CUX|DAH|DAN|DAU|DBR|DEG|DEL|DGF|DIL|DIN|DIZ|DKB|DLG|DON|DUD|D\u00dcW|EBE|EBN|EBS|ECK|EIC|EIL|EIN|EIS|EMD|EMS|ERB|ERH|ERK|ERZ|ESB|ESW|FDB|FDS|FEU|FFB|FKB|FL\u00d6|FOR|FRG|FRI|FRW|FTL|F\u00dcS|GAN|GAP|GDB|GEL|GEO|GER|GHA|GHC|GLA|GMN|GNT|GOA|GOH|GRA|GRH|GRI|GRM|GRZ|GTH|GUB|GUN|GVM|HAB|HAL|HAM|HAS|HBN|HBS|HCH|HDH|HDL|HEB|HEF|HEI|HER|HET|HGN|HGW|HHM|HIG|HIP|HM\u00dc|HOG|HOH|HOL|HOM|HOR|H\u00d6S|HOT|HRO|HSK|HST|HVL|HWI|IGB|ILL|J\u00dcL|KEH|KEL|KEM|KIB|KLE|KLZ|K\u00d6N|K\u00d6T|K\u00d6Z|KRU|K\u00dcN|KUS|KYF|LAN|LAU|LBS|LBZ|LDK|LDS|LEO|LER|LEV|LIB|LIF|LIP|L\u00d6B|LOS|LRO|LSZ|L\u00dcN|LUP|LWL|MAB|MAI|MAK|MAL|MED|MEG|MEI|MEK|MEL|MER|MET|MGH|MGN|MHL|MIL|MKK|MOD|MOL|MON|MOS|MSE|MSH|MSP|MST|MTK|MTL|M\u00dcB|M\u00dcR|MYK|MZG|NAB|NAI|NAU|NDH|NEA|NEB|NEC|NEN|NES|NEW|NMB|NMS|NOH|NOL|NOM|NOR|NVP|NWM|OAL|OBB|OBG|OCH|OHA|\u00d6HR|OHV|OHZ|OPR|OSL|OVI|OVL|OVP|PAF|PAN|PAR|PCH|PEG|PIR|PL\u00d6|PR\u00dc|QFT|QLB|RDG|REG|REH|REI|RID|RIE|ROD|ROF|ROK|ROL|ROS|ROT|ROW|RSL|R\u00dcD|R\u00dcG|SAB|SAD|SAN|SAW|SBG|SBK|SCZ|SDH|SDL|SDT|SEB|SEE|SEF|SEL|SFB|SFT|SGH|SHA|SHG|SHK|SHL|SIG|SIM|SLE|SLF|SLK|SLN|SLS|SL\u00dc|SLZ|SM\u00dc|SOB|SOG|SOK|S\u00d6M|SON|SPB|SPN|SRB|SRO|STA|STB|STD|STE|STL|SUL|S\u00dcW|SWA|SZB|TBB|TDO|TET|TIR|T\u00d6L|TUT|UEM|UER|UFF|USI|VAI|VEC|VER|VIB|VIE|VIT|VOH|WAF|WAK|WAN|WAR|WAT|WBS|WDA|WEL|WEN|WER|WES|WHV|WIL|WIS|WIT|WIZ|WLG|WMS|WND|WOB|WOH|WOL|WOR|WOS|WRN|WSF|WST|WSW|WTL|WTM|WUG|W\u00dcM|WUN|WUR|WZL|ZEL|ZIG)[- ]?(([A-Z][- ]?\d{1,4})|([A-Z]{2}[- ]?\d{1,3})))[- ]?(E|H)?$/.test(str);
+  },
+  'de-LI': function deLI(str) {
+    return /^FL[- ]?\d{1,5}[UZ]?$/.test(str);
+  },
+  'en-IN': function enIN(str) {
+    return /^[A-Z]{2}[ -]?[0-9]{1,2}(?:[ -]?[A-Z])(?:[ -]?[A-Z]*)?[ -]?[0-9]{4}$/.test(str);
+  },
+  'en-SG': function enSG(str) {
+    return /^[A-Z]{3}[ -]?[\d]{4}[ -]?[A-Z]{1}$/.test(str);
+  },
+  'es-AR': function esAR(str) {
+    return /^(([A-Z]{2} ?[0-9]{3} ?[A-Z]{2})|([A-Z]{3} ?[0-9]{3}))$/.test(str);
+  },
+  'fi-FI': function fiFI(str) {
+    return /^(?=.{4,7})(([A-Z]{1,3}|[0-9]{1,3})[\s-]?([A-Z]{1,3}|[0-9]{1,5}))$/.test(str);
+  },
+  'hu-HU': function huHU(str) {
+    return /^((((?!AAA)(([A-NPRSTVZWXY]{1})([A-PR-Z]{1})([A-HJ-NPR-Z]))|(A[ABC]I)|A[ABC]O|A[A-W]Q|BPI|BPO|UCO|UDO|XAO)-(?!000)\d{3})|(M\d{6})|((CK|DT|CD|HC|H[ABEFIKLMNPRSTVX]|MA|OT|R[A-Z]) \d{2}-\d{2})|(CD \d{3}-\d{3})|(C-(C|X) \d{4})|(X-(A|B|C) \d{4})|(([EPVZ]-\d{5}))|(S A[A-Z]{2} \d{2})|(SP \d{2}-\d{2}))$/.test(str);
+  },
+  'pt-BR': function ptBR(str) {
+    return /^[A-Z]{3}[ -]?[0-9][A-Z][0-9]{2}|[A-Z]{3}[ -]?[0-9]{4}$/.test(str);
+  },
+  'pt-PT': function ptPT(str) {
+    return /^(([A-Z]{2}[ -\u00b7]?[0-9]{2}[ -\u00b7]?[0-9]{2})|([0-9]{2}[ -\u00b7]?[A-Z]{2}[ -\u00b7]?[0-9]{2})|([0-9]{2}[ -\u00b7]?[0-9]{2}[ -\u00b7]?[A-Z]{2})|([A-Z]{2}[ -\u00b7]?[0-9]{2}[ -\u00b7]?[A-Z]{2}))$/.test(str);
+  },
+  'sq-AL': function sqAL(str) {
+    return /^[A-Z]{2}[- ]?((\d{3}[- ]?(([A-Z]{2})|T))|(R[- ]?\d{3}))$/.test(str);
+  },
+  'sv-SE': function svSE(str) {
+    return /^[A-HJ-PR-UW-Z]{3} ?[\d]{2}[A-HJ-PR-UW-Z1-9]$|(^[A-Z\u00c5\u00c4\u00d6 ]{2,7}$)/.test(str.trim());
+  },
+  'en-PK': function enPK(str) {
+    return /(^[A-Z]{2}((\s|-){0,1})[0-9]{3,4}((\s|-)[0-9]{2}){0,1}$)|(^[A-Z]{3}((\s|-){0,1})[0-9]{3,4}((\s|-)[0-9]{2}){0,1}$)|(^[A-Z]{4}((\s|-){0,1})[0-9]{3,4}((\s|-)[0-9]{2}){0,1}$)|(^[A-Z]((\s|-){0,1})[0-9]{4}((\s|-)[0-9]{2}){0,1}$)/.test(str.trim());
+  }
+};
+function isLicensePlate(str, locale) {
+  (0, _assertString.default)(str);
+  if (locale in validators) {
+    return validators[locale](str);
+  } else if (locale === 'any') {
+    for (var key in validators) {
+      /* eslint guard-for-in: 0 */
+      var validator = validators[key];
+      if (validator(str)) {
+        return true;
+      }
+    }
+    return false;
+  }
+  throw new Error("Invalid locale '".concat(locale, "'"));
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 700:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = equals;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function equals(str, comparison) {
+  (0, _assertString.default)(str);
+  return str === comparison;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 821:
+/***/ ((module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isNullOrUndefined;
+function isNullOrUndefined(value) {
+  return value === null || value === undefined;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 855:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = toInt;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function toInt(str, radix) {
+  (0, _assertString.default)(str);
+  return parseInt(str, radix || 10);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 995:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isFloat;
+exports.locales = void 0;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _nullUndefinedCheck = _interopRequireDefault(__webpack_require__(821));
+var _alpha = __webpack_require__(3237);
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function isFloat(str, options) {
+  (0, _assertString.default)(str);
+  options = options || {};
+  var float = new RegExp("^(?:[-+])?(?:[0-9]+)?(?:\\".concat(options.locale ? _alpha.decimal[options.locale] : '.', "[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$"));
+  if (str === '' || str === '.' || str === ',' || str === '-' || str === '+') {
+    return false;
+  }
+  var value = parseFloat(str.replace(',', '.'));
+  return float.test(str) && (!options.hasOwnProperty('min') || (0, _nullUndefinedCheck.default)(options.min) || value >= options.min) && (!options.hasOwnProperty('max') || (0, _nullUndefinedCheck.default)(options.max) || value <= options.max) && (!options.hasOwnProperty('lt') || (0, _nullUndefinedCheck.default)(options.lt) || value < options.lt) && (!options.hasOwnProperty('gt') || (0, _nullUndefinedCheck.default)(options.gt) || value > options.gt);
+}
+var locales = exports.locales = Object.keys(_alpha.decimal);
+
+/***/ }),
+
+/***/ 1062:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isCreditCard;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _isLuhnNumber = _interopRequireDefault(__webpack_require__(3609));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var cards = {
+  amex: /^3[47][0-9]{13}$/,
+  dinersclub: /^3(?:0[0-5]|[68][0-9])[0-9]{11}$/,
+  discover: /^6(?:011|5[0-9][0-9])[0-9]{12,15}$/,
+  jcb: /^(?:2131|1800|35\d{3})\d{11}$/,
+  mastercard: /^5[1-5][0-9]{2}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$/,
+  // /^[25][1-7][0-9]{14}$/;
+  unionpay: /^(6[27][0-9]{14}|^(81[0-9]{14,17}))$/,
+  visa: /^(?:4[0-9]{12})(?:[0-9]{3,6})?$/
+};
+var allCards = function () {
+  var tmpCardsArray = [];
+  for (var cardProvider in cards) {
+    // istanbul ignore else
+    if (cards.hasOwnProperty(cardProvider)) {
+      tmpCardsArray.push(cards[cardProvider]);
+    }
+  }
+  return tmpCardsArray;
+}();
+function isCreditCard(card) {
+  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+  (0, _assertString.default)(card);
+  var provider = options.provider;
+  var sanitized = card.replace(/[- ]+/g, '');
+  if (provider && provider.toLowerCase() in cards) {
+    // specific provider in the list
+    if (!cards[provider.toLowerCase()].test(sanitized)) {
+      return false;
+    }
+  } else if (provider && !(provider.toLowerCase() in cards)) {
+    /* specific provider not in the list */
+    throw new Error("".concat(provider, " is not a valid credit card provider."));
+  } else if (!allCards.some(function (cardProvider) {
+    return cardProvider.test(sanitized);
+  })) {
+    // no specific provider
+    return false;
+  }
+  return (0, _isLuhnNumber.default)(card);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 1128:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = normalizeEmail;
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var default_normalize_email_options = {
+  // The following options apply to all email addresses
+  // Lowercases the local part of the email address.
+  // Please note this may violate RFC 5321 as per http://stackoverflow.com/a/9808332/192024).
+  // The domain is always lowercased, as per RFC 1035
+  all_lowercase: true,
+  // The following conversions are specific to GMail
+  // Lowercases the local part of the GMail address (known to be case-insensitive)
+  gmail_lowercase: true,
+  // Removes dots from the local part of the email address, as that's ignored by GMail
+  gmail_remove_dots: true,
+  // Removes the subaddress (e.g. "+foo") from the email address
+  gmail_remove_subaddress: true,
+  // Conversts the googlemail.com domain to gmail.com
+  gmail_convert_googlemaildotcom: true,
+  // The following conversions are specific to Outlook.com / Windows Live / Hotmail
+  // Lowercases the local part of the Outlook.com address (known to be case-insensitive)
+  outlookdotcom_lowercase: true,
+  // Removes the subaddress (e.g. "+foo") from the email address
+  outlookdotcom_remove_subaddress: true,
+  // The following conversions are specific to Yahoo
+  // Lowercases the local part of the Yahoo address (known to be case-insensitive)
+  yahoo_lowercase: true,
+  // Removes the subaddress (e.g. "-foo") from the email address
+  yahoo_remove_subaddress: true,
+  // The following conversions are specific to Yandex
+  // Lowercases the local part of the Yandex address (known to be case-insensitive)
+  yandex_lowercase: true,
+  // all yandex domains are equal, this explicitly sets the domain to 'yandex.ru'
+  yandex_convert_yandexru: true,
+  // The following conversions are specific to iCloud
+  // Lowercases the local part of the iCloud address (known to be case-insensitive)
+  icloud_lowercase: true,
+  // Removes the subaddress (e.g. "+foo") from the email address
+  icloud_remove_subaddress: true
+};
+
+// List of domains used by iCloud
+var icloud_domains = ['icloud.com', 'me.com'];
+
+// List of domains used by Outlook.com and its predecessors
+// This list is likely incomplete.
+// Partial reference:
+// https://blogs.office.com/2013/04/17/outlook-com-gets-two-step-verification-sign-in-by-alias-and-new-international-domains/
+var outlookdotcom_domains = ['hotmail.at', 'hotmail.be', 'hotmail.ca', 'hotmail.cl', 'hotmail.co.il', 'hotmail.co.nz', 'hotmail.co.th', 'hotmail.co.uk', 'hotmail.com', 'hotmail.com.ar', 'hotmail.com.au', 'hotmail.com.br', 'hotmail.com.gr', 'hotmail.com.mx', 'hotmail.com.pe', 'hotmail.com.tr', 'hotmail.com.vn', 'hotmail.cz', 'hotmail.de', 'hotmail.dk', 'hotmail.es', 'hotmail.fr', 'hotmail.hu', 'hotmail.id', 'hotmail.ie', 'hotmail.in', 'hotmail.it', 'hotmail.jp', 'hotmail.kr', 'hotmail.lv', 'hotmail.my', 'hotmail.ph', 'hotmail.pt', 'hotmail.sa', 'hotmail.sg', 'hotmail.sk', 'live.be', 'live.co.uk', 'live.com', 'live.com.ar', 'live.com.mx', 'live.de', 'live.es', 'live.eu', 'live.fr', 'live.it', 'live.nl', 'msn.com', 'outlook.at', 'outlook.be', 'outlook.cl', 'outlook.co.il', 'outlook.co.nz', 'outlook.co.th', 'outlook.com', 'outlook.com.ar', 'outlook.com.au', 'outlook.com.br', 'outlook.com.gr', 'outlook.com.pe', 'outlook.com.tr', 'outlook.com.vn', 'outlook.cz', 'outlook.de', 'outlook.dk', 'outlook.es', 'outlook.fr', 'outlook.hu', 'outlook.id', 'outlook.ie', 'outlook.in', 'outlook.it', 'outlook.jp', 'outlook.kr', 'outlook.lv', 'outlook.my', 'outlook.ph', 'outlook.pt', 'outlook.sa', 'outlook.sg', 'outlook.sk', 'passport.com'];
+
+// List of domains used by Yahoo Mail
+// This list is likely incomplete
+var yahoo_domains = ['rocketmail.com', 'yahoo.ca', 'yahoo.co.uk', 'yahoo.com', 'yahoo.de', 'yahoo.fr', 'yahoo.in', 'yahoo.it', 'ymail.com'];
+
+// List of domains used by yandex.ru
+var yandex_domains = ['yandex.ru', 'yandex.ua', 'yandex.kz', 'yandex.com', 'yandex.by', 'ya.ru'];
+
+// replace single dots, but not multiple consecutive dots
+function dotsReplacer(match) {
+  if (match.length > 1) {
+    return match;
+  }
+  return '';
+}
+function normalizeEmail(email, options) {
+  options = (0, _merge.default)(options, default_normalize_email_options);
+  var raw_parts = email.split('@');
+  var domain = raw_parts.pop();
+  var user = raw_parts.join('@');
+  var parts = [user, domain];
+
+  // The domain is always lowercased, as it's case-insensitive per RFC 1035
+  parts[1] = parts[1].toLowerCase();
+  if (parts[1] === 'gmail.com' || parts[1] === 'googlemail.com') {
+    // Address is GMail
+    if (options.gmail_remove_subaddress) {
+      parts[0] = parts[0].split('+')[0];
+    }
+    if (options.gmail_remove_dots) {
+      // this does not replace consecutive dots like [email protected]
+      parts[0] = parts[0].replace(/\.+/g, dotsReplacer);
+    }
+    if (!parts[0].length) {
+      return false;
+    }
+    if (options.all_lowercase || options.gmail_lowercase) {
+      parts[0] = parts[0].toLowerCase();
+    }
+    parts[1] = options.gmail_convert_googlemaildotcom ? 'gmail.com' : parts[1];
+  } else if (icloud_domains.indexOf(parts[1]) >= 0) {
+    // Address is iCloud
+    if (options.icloud_remove_subaddress) {
+      parts[0] = parts[0].split('+')[0];
+    }
+    if (!parts[0].length) {
+      return false;
+    }
+    if (options.all_lowercase || options.icloud_lowercase) {
+      parts[0] = parts[0].toLowerCase();
+    }
+  } else if (outlookdotcom_domains.indexOf(parts[1]) >= 0) {
+    // Address is Outlook.com
+    if (options.outlookdotcom_remove_subaddress) {
+      parts[0] = parts[0].split('+')[0];
+    }
+    if (!parts[0].length) {
+      return false;
+    }
+    if (options.all_lowercase || options.outlookdotcom_lowercase) {
+      parts[0] = parts[0].toLowerCase();
+    }
+  } else if (yahoo_domains.indexOf(parts[1]) >= 0) {
+    // Address is Yahoo
+    if (options.yahoo_remove_subaddress) {
+      var components = parts[0].split('-');
+      parts[0] = components.length > 1 ? components.slice(0, -1).join('-') : components[0];
+    }
+    if (!parts[0].length) {
+      return false;
+    }
+    if (options.all_lowercase || options.yahoo_lowercase) {
+      parts[0] = parts[0].toLowerCase();
+    }
+  } else if (yandex_domains.indexOf(parts[1]) >= 0) {
+    if (options.all_lowercase || options.yandex_lowercase) {
+      parts[0] = parts[0].toLowerCase();
+    }
+    parts[1] = options.yandex_convert_yandexru ? 'yandex.ru' : parts[1];
+  } else if (options.all_lowercase) {
+    // Any other address
+    parts[0] = parts[0].toLowerCase();
+  }
+  return parts.join('@');
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 1195:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isAfter;
+var _toDate = _interopRequireDefault(__webpack_require__(3752));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function isAfter(date, options) {
+  // For backwards compatibility:
+  // isAfter(str [, date]), i.e. `options` could be used as argument for the legacy `date`
+  var comparisonDate = (_typeof(options) === 'object' ? options.comparisonDate : options) || Date().toString();
+  var comparison = (0, _toDate.default)(comparisonDate);
+  var original = (0, _toDate.default)(date);
+  return !!(original && comparison && original > comparison);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 1252:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isMongoId;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _isHexadecimal = _interopRequireDefault(__webpack_require__(2002));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function isMongoId(str) {
+  (0, _assertString.default)(str);
+  return (0, _isHexadecimal.default)(str) && str.length === 24;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 1371:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = toFloat;
+var _isFloat = _interopRequireDefault(__webpack_require__(995));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function toFloat(str) {
+  if (!(0, _isFloat.default)(str)) return NaN;
+  return parseFloat(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 1449:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isVariableWidth;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _isFullWidth = __webpack_require__(9666);
+var _isHalfWidth = __webpack_require__(9534);
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function isVariableWidth(str) {
+  (0, _assertString.default)(str);
+  return _isFullWidth.fullWidth.test(str) && _isHalfWidth.halfWidth.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 1572:
+/***/ ((module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = checkHost;
+function isRegExp(obj) {
+  return Object.prototype.toString.call(obj) === '[object RegExp]';
+}
+function checkHost(host, matches) {
+  for (var i = 0; i < matches.length; i++) {
+    var match = matches[i];
+    if (host === match || isRegExp(match) && match.test(host)) {
+      return true;
+    }
+  }
+  return false;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 1578:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isRFC3339;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/* Based on https://tools.ietf.org/html/rfc3339#section-5.6 */
+
+var dateFullYear = /[0-9]{4}/;
+var dateMonth = /(0[1-9]|1[0-2])/;
+var dateMDay = /([12]\d|0[1-9]|3[01])/;
+var timeHour = /([01][0-9]|2[0-3])/;
+var timeMinute = /[0-5][0-9]/;
+var timeSecond = /([0-5][0-9]|60)/;
+var timeSecFrac = /(\.[0-9]+)?/;
+var timeNumOffset = new RegExp("[-+]".concat(timeHour.source, ":").concat(timeMinute.source));
+var timeOffset = new RegExp("([zZ]|".concat(timeNumOffset.source, ")"));
+var partialTime = new RegExp("".concat(timeHour.source, ":").concat(timeMinute.source, ":").concat(timeSecond.source).concat(timeSecFrac.source));
+var fullDate = new RegExp("".concat(dateFullYear.source, "-").concat(dateMonth.source, "-").concat(dateMDay.source));
+var fullTime = new RegExp("".concat(partialTime.source).concat(timeOffset.source));
+var rfc3339 = new RegExp("^".concat(fullDate.source, "[ tT]").concat(fullTime.source, "$"));
+function isRFC3339(str) {
+  (0, _assertString.default)(str);
+  return rfc3339.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 1666:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isNumeric;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _alpha = __webpack_require__(3237);
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var numericNoSymbols = /^[0-9]+$/;
+function isNumeric(str, options) {
+  (0, _assertString.default)(str);
+  if (options && options.no_symbols) {
+    return numericNoSymbols.test(str);
+  }
+  return new RegExp("^[+-]?([0-9]*[".concat((options || {}).locale ? _alpha.decimal[options.locale] : '.', "])?[0-9]+$")).test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 1697:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isBoolean;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _includesArray = _interopRequireDefault(__webpack_require__(8644));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var defaultOptions = {
+  loose: false
+};
+var strictBooleans = ['true', 'false', '1', '0'];
+var looseBooleans = [].concat(strictBooleans, ['yes', 'no']);
+function isBoolean(str) {
+  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOptions;
+  (0, _assertString.default)(str);
+  if (options.loose) {
+    return (0, _includesArray.default)(looseBooleans, str.toLowerCase());
+  }
+  return (0, _includesArray.default)(strictBooleans, str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 1954:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isISRC;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+// see http://isrc.ifpi.org/en/isrc-standard/code-syntax
+var isrc = /^[A-Z]{2}[0-9A-Z]{3}\d{2}\d{5}$/;
+function isISRC(str) {
+  (0, _assertString.default)(str);
+  return isrc.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 1996:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = whitelist;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function whitelist(str, chars) {
+  (0, _assertString.default)(str);
+  return str.replace(new RegExp("[^".concat(chars, "]+"), 'g'), '');
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 2002:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isHexadecimal;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var hexadecimal = /^(0x|0h)?[0-9A-F]+$/i;
+function isHexadecimal(str) {
+  (0, _assertString.default)(str);
+  return hexadecimal.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 2056:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isEmpty;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var default_is_empty_options = {
+  ignore_whitespace: false
+};
+function isEmpty(str, options) {
+  (0, _assertString.default)(str);
+  options = (0, _merge.default)(options, default_is_empty_options);
+  return (options.ignore_whitespace ? str.trim().length : str.length) === 0;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 2309:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = ltrim;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function ltrim(str, chars) {
+  (0, _assertString.default)(str);
+  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping
+  var pattern = chars ? new RegExp("^[".concat(chars.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), "]+"), 'g') : /^\s+/g;
+  return str.replace(pattern, '');
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 2337:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isMailtoURI;
+var _trim = _interopRequireDefault(__webpack_require__(317));
+var _isEmail = _interopRequireDefault(__webpack_require__(9517));
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
+function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
+function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+function parseMailtoQueryString(queryString) {
+  var allowedParams = new Set(['subject', 'body', 'cc', 'bcc']),
+    query = {
+      cc: '',
+      bcc: ''
+    };
+  var isParseFailed = false;
+  var queryParams = queryString.split('&');
+  if (queryParams.length > 4) {
+    return false;
+  }
+  var _iterator = _createForOfIteratorHelper(queryParams),
+    _step;
+  try {
+    for (_iterator.s(); !(_step = _iterator.n()).done;) {
+      var q = _step.value;
+      var _q$split = q.split('='),
+        _q$split2 = _slicedToArray(_q$split, 2),
+        key = _q$split2[0],
+        value = _q$split2[1];
+
+      // checked for invalid and duplicated query params
+      if (key && !allowedParams.has(key)) {
+        isParseFailed = true;
+        break;
+      }
+      if (value && (key === 'cc' || key === 'bcc')) {
+        query[key] = value;
+      }
+      if (key) {
+        allowedParams.delete(key);
+      }
+    }
+  } catch (err) {
+    _iterator.e(err);
+  } finally {
+    _iterator.f();
+  }
+  return isParseFailed ? false : query;
+}
+function isMailtoURI(url, options) {
+  (0, _assertString.default)(url);
+  if (url.indexOf('mailto:') !== 0) {
+    return false;
+  }
+  var _url$replace$split = url.replace('mailto:', '').split('?'),
+    _url$replace$split2 = _slicedToArray(_url$replace$split, 2),
+    to = _url$replace$split2[0],
+    _url$replace$split2$ = _url$replace$split2[1],
+    queryString = _url$replace$split2$ === void 0 ? '' : _url$replace$split2$;
+  if (!to && !queryString) {
+    return true;
+  }
+  var query = parseMailtoQueryString(queryString);
+  if (!query) {
+    return false;
+  }
+  return "".concat(to, ",").concat(query.cc, ",").concat(query.bcc).split(',').every(function (email) {
+    email = (0, _trim.default)(email, ' ');
+    if (email) {
+      return (0, _isEmail.default)(email, options);
+    }
+    return true;
+  });
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 2483:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = rtrim;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function rtrim(str, chars) {
+  (0, _assertString.default)(str);
+  if (chars) {
+    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping
+    var pattern = new RegExp("[".concat(chars.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), "]+$"), 'g');
+    return str.replace(pattern, '');
+  }
+  // Use a faster and more safe than regex trim method https://blog.stevenlevithan.com/archives/faster-trim-javascript
+  var strIndex = str.length - 1;
+  while (/\s/.test(str.charAt(strIndex))) {
+    strIndex -= 1;
+  }
+  return str.slice(0, strIndex + 1);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 2576:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = matches;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function matches(str, pattern, modifiers) {
+  (0, _assertString.default)(str);
+  if (Object.prototype.toString.call(pattern) !== '[object RegExp]') {
+    pattern = new RegExp(pattern, modifiers);
+  }
+  return !!str.match(pattern);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 2645:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isIdentityCard;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _includesArray = _interopRequireDefault(__webpack_require__(8644));
+var _isInt = _interopRequireDefault(__webpack_require__(6084));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var validators = {
+  PL: function PL(str) {
+    (0, _assertString.default)(str);
+    var weightOfDigits = {
+      1: 1,
+      2: 3,
+      3: 7,
+      4: 9,
+      5: 1,
+      6: 3,
+      7: 7,
+      8: 9,
+      9: 1,
+      10: 3,
+      11: 0
+    };
+    if (str != null && str.length === 11 && (0, _isInt.default)(str, {
+      allow_leading_zeroes: true
+    })) {
+      var digits = str.split('').slice(0, -1);
+      var sum = digits.reduce(function (acc, digit, index) {
+        return acc + Number(digit) * weightOfDigits[index + 1];
+      }, 0);
+      var modulo = sum % 10;
+      var lastDigit = Number(str.charAt(str.length - 1));
+      if (modulo === 0 && lastDigit === 0 || lastDigit === 10 - modulo) {
+        return true;
+      }
+    }
+    return false;
+  },
+  ES: function ES(str) {
+    (0, _assertString.default)(str);
+    var DNI = /^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/;
+    var charsValue = {
+      X: 0,
+      Y: 1,
+      Z: 2
+    };
+    var controlDigits = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E'];
+
+    // sanitize user input
+    var sanitized = str.trim().toUpperCase();
+
+    // validate the data structure
+    if (!DNI.test(sanitized)) {
+      return false;
+    }
+
+    // validate the control digit
+    var number = sanitized.slice(0, -1).replace(/[X,Y,Z]/g, function (char) {
+      return charsValue[char];
+    });
+    return sanitized.endsWith(controlDigits[number % 23]);
+  },
+  FI: function FI(str) {
+    // https://dvv.fi/en/personal-identity-code#:~:text=control%20character%20for%20a-,personal,-identity%20code%20calculated
+    (0, _assertString.default)(str);
+    if (str.length !== 11) {
+      return false;
+    }
+    if (!str.match(/^\d{6}[\-A\+]\d{3}[0-9ABCDEFHJKLMNPRSTUVWXY]{1}$/)) {
+      return false;
+    }
+    var checkDigits = '0123456789ABCDEFHJKLMNPRSTUVWXY';
+    var idAsNumber = parseInt(str.slice(0, 6), 10) * 1000 + parseInt(str.slice(7, 10), 10);
+    var remainder = idAsNumber % 31;
+    var checkDigit = checkDigits[remainder];
+    return checkDigit === str.slice(10, 11);
+  },
+  IN: function IN(str) {
+    var DNI = /^[1-9]\d{3}\s?\d{4}\s?\d{4}$/;
+
+    // multiplication table
+    var d = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 0, 6, 7, 8, 9, 5], [2, 3, 4, 0, 1, 7, 8, 9, 5, 6], [3, 4, 0, 1, 2, 8, 9, 5, 6, 7], [4, 0, 1, 2, 3, 9, 5, 6, 7, 8], [5, 9, 8, 7, 6, 0, 4, 3, 2, 1], [6, 5, 9, 8, 7, 1, 0, 4, 3, 2], [7, 6, 5, 9, 8, 2, 1, 0, 4, 3], [8, 7, 6, 5, 9, 3, 2, 1, 0, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]];
+
+    // permutation table
+    var p = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 5, 7, 6, 2, 8, 3, 0, 9, 4], [5, 8, 0, 3, 7, 9, 6, 1, 4, 2], [8, 9, 1, 6, 0, 4, 3, 5, 2, 7], [9, 4, 5, 3, 1, 2, 6, 8, 7, 0], [4, 2, 8, 6, 5, 7, 3, 9, 0, 1], [2, 7, 9, 3, 8, 0, 6, 4, 1, 5], [7, 0, 4, 6, 9, 1, 3, 2, 5, 8]];
+
+    // sanitize user input
+    var sanitized = str.trim();
+
+    // validate the data structure
+    if (!DNI.test(sanitized)) {
+      return false;
+    }
+    var c = 0;
+    var invertedArray = sanitized.replace(/\s/g, '').split('').map(Number).reverse();
+    invertedArray.forEach(function (val, i) {
+      c = d[c][p[i % 8][val]];
+    });
+    return c === 0;
+  },
+  IR: function IR(str) {
+    if (!str.match(/^\d{10}$/)) return false;
+    str = "0000".concat(str).slice(str.length - 6);
+    if (parseInt(str.slice(3, 9), 10) === 0) return false;
+    var lastNumber = parseInt(str.slice(9, 10), 10);
+    var sum = 0;
+    for (var i = 0; i < 9; i++) {
+      sum += parseInt(str.slice(i, i + 1), 10) * (10 - i);
+    }
+    sum %= 11;
+    return sum < 2 && lastNumber === sum || sum >= 2 && lastNumber === 11 - sum;
+  },
+  IT: function IT(str) {
+    if (str.length !== 9) return false;
+    if (str === 'CA00000AA') return false; // https://it.wikipedia.org/wiki/Carta_d%27identit%C3%A0_elettronica_italiana
+    return str.search(/C[A-Z]\d{5}[A-Z]{2}/i) > -1;
+  },
+  NO: function NO(str) {
+    var sanitized = str.trim();
+    if (isNaN(Number(sanitized))) return false;
+    if (sanitized.length !== 11) return false;
+    if (sanitized === '00000000000') return false;
+
+    // https://no.wikipedia.org/wiki/F%C3%B8dselsnummer
+    var f = sanitized.split('').map(Number);
+    var k1 = (11 - (3 * f[0] + 7 * f[1] + 6 * f[2] + 1 * f[3] + 8 * f[4] + 9 * f[5] + 4 * f[6] + 5 * f[7] + 2 * f[8]) % 11) % 11;
+    var k2 = (11 - (5 * f[0] + 4 * f[1] + 3 * f[2] + 2 * f[3] + 7 * f[4] + 6 * f[5] + 5 * f[6] + 4 * f[7] + 3 * f[8] + 2 * k1) % 11) % 11;
+    if (k1 !== f[9] || k2 !== f[10]) return false;
+    return true;
+  },
+  TH: function TH(str) {
+    if (!str.match(/^[1-8]\d{12}$/)) return false;
+
+    // validate check digit
+    var sum = 0;
+    for (var i = 0; i < 12; i++) {
+      sum += parseInt(str[i], 10) * (13 - i);
+    }
+    return str[12] === ((11 - sum % 11) % 10).toString();
+  },
+  LK: function LK(str) {
+    var old_nic = /^[1-9]\d{8}[vx]$/i;
+    var new_nic = /^[1-9]\d{11}$/i;
+    if (str.length === 10 && old_nic.test(str)) return true;else if (str.length === 12 && new_nic.test(str)) return true;
+    return false;
+  },
+  'he-IL': function heIL(str) {
+    var DNI = /^\d{9}$/;
+
+    // sanitize user input
+    var sanitized = str.trim();
+
+    // validate the data structure
+    if (!DNI.test(sanitized)) {
+      return false;
+    }
+    var id = sanitized;
+    var sum = 0,
+      incNum;
+    for (var i = 0; i < id.length; i++) {
+      incNum = Number(id[i]) * (i % 2 + 1); // Multiply number by 1 or 2
+      sum += incNum > 9 ? incNum - 9 : incNum; // Sum the digits up and add to total
+    }
+    return sum % 10 === 0;
+  },
+  'ar-LY': function arLY(str) {
+    // Libya National Identity Number NIN is 12 digits, the first digit is either 1 or 2
+    var NIN = /^(1|2)\d{11}$/;
+
+    // sanitize user input
+    var sanitized = str.trim();
+
+    // validate the data structure
+    if (!NIN.test(sanitized)) {
+      return false;
+    }
+    return true;
+  },
+  'ar-TN': function arTN(str) {
+    var DNI = /^\d{8}$/;
+
+    // sanitize user input
+    var sanitized = str.trim();
+
+    // validate the data structure
+    if (!DNI.test(sanitized)) {
+      return false;
+    }
+    return true;
+  },
+  'zh-CN': function zhCN(str) {
+    var provincesAndCities = ['11',
+    // \u5317\u4eac
+    '12',
+    // \u5929\u6d25
+    '13',
+    // \u6cb3\u5317
+    '14',
+    // \u5c71\u897f
+    '15',
+    // \u5185\u8499\u53e4
+    '21',
+    // \u8fbd\u5b81
+    '22',
+    // \u5409\u6797
+    '23',
+    // \u9ed1\u9f99\u6c5f
+    '31',
+    // \u4e0a\u6d77
+    '32',
+    // \u6c5f\u82cf
+    '33',
+    // \u6d59\u6c5f
+    '34',
+    // \u5b89\u5fbd
+    '35',
+    // \u798f\u5efa
+    '36',
+    // \u6c5f\u897f
+    '37',
+    // \u5c71\u4e1c
+    '41',
+    // \u6cb3\u5357
+    '42',
+    // \u6e56\u5317
+    '43',
+    // \u6e56\u5357
+    '44',
+    // \u5e7f\u4e1c
+    '45',
+    // \u5e7f\u897f
+    '46',
+    // \u6d77\u5357
+    '50',
+    // \u91cd\u5e86
+    '51',
+    // \u56db\u5ddd
+    '52',
+    // \u8d35\u5dde
+    '53',
+    // \u4e91\u5357
+    '54',
+    // \u897f\u85cf
+    '61',
+    // \u9655\u897f
+    '62',
+    // \u7518\u8083
+    '63',
+    // \u9752\u6d77
+    '64',
+    // \u5b81\u590f
+    '65',
+    // \u65b0\u7586
+    '71',
+    // \u53f0\u6e7e
+    '81',
+    // \u9999\u6e2f
+    '82',
+    // \u6fb3\u95e8
+    '91' // \u56fd\u5916
+    ];
+    var powers = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2'];
+    var parityBit = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
+    var checkAddressCode = function checkAddressCode(addressCode) {
+      return (0, _includesArray.default)(provincesAndCities, addressCode);
+    };
+    var checkBirthDayCode = function checkBirthDayCode(birDayCode) {
+      var yyyy = parseInt(birDayCode.substring(0, 4), 10);
+      var mm = parseInt(birDayCode.substring(4, 6), 10);
+      var dd = parseInt(birDayCode.substring(6), 10);
+      var xdata = new Date(yyyy, mm - 1, dd);
+      if (xdata > new Date()) {
+        return false;
+        // eslint-disable-next-line max-len
+      } else if (xdata.getFullYear() === yyyy && xdata.getMonth() === mm - 1 && xdata.getDate() === dd) {
+        return true;
+      }
+      return false;
+    };
+    var getParityBit = function getParityBit(idCardNo) {
+      var id17 = idCardNo.substring(0, 17);
+      var power = 0;
+      for (var i = 0; i < 17; i++) {
+        power += parseInt(id17.charAt(i), 10) * parseInt(powers[i], 10);
+      }
+      var mod = power % 11;
+      return parityBit[mod];
+    };
+    var checkParityBit = function checkParityBit(idCardNo) {
+      return getParityBit(idCardNo) === idCardNo.charAt(17).toUpperCase();
+    };
+    var check15IdCardNo = function check15IdCardNo(idCardNo) {
+      var check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo);
+      if (!check) return false;
+      var addressCode = idCardNo.substring(0, 2);
+      check = checkAddressCode(addressCode);
+      if (!check) return false;
+      var birDayCode = "19".concat(idCardNo.substring(6, 12));
+      check = checkBirthDayCode(birDayCode);
+      if (!check) return false;
+      return true;
+    };
+    var check18IdCardNo = function check18IdCardNo(idCardNo) {
+      var check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(idCardNo);
+      if (!check) return false;
+      var addressCode = idCardNo.substring(0, 2);
+      check = checkAddressCode(addressCode);
+      if (!check) return false;
+      var birDayCode = idCardNo.substring(6, 14);
+      check = checkBirthDayCode(birDayCode);
+      if (!check) return false;
+      return checkParityBit(idCardNo);
+    };
+    var checkIdCardNo = function checkIdCardNo(idCardNo) {
+      var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
+      if (!check) return false;
+      if (idCardNo.length === 15) {
+        return check15IdCardNo(idCardNo);
+      }
+      return check18IdCardNo(idCardNo);
+    };
+    return checkIdCardNo(str);
+  },
+  'zh-HK': function zhHK(str) {
+    // sanitize user input
+    str = str.trim();
+
+    // HKID number starts with 1 or 2 letters, followed by 6 digits,
+    // then a checksum contained in square / round brackets or nothing
+    var regexHKID = /^[A-Z]{1,2}[0-9]{6}((\([0-9A]\))|(\[[0-9A]\])|([0-9A]))$/;
+    var regexIsDigit = /^[0-9]$/;
+
+    // convert the user input to all uppercase and apply regex
+    str = str.toUpperCase();
+    if (!regexHKID.test(str)) return false;
+    str = str.replace(/\[|\]|\(|\)/g, '');
+    if (str.length === 8) str = "3".concat(str);
+    var checkSumVal = 0;
+    for (var i = 0; i <= 7; i++) {
+      var convertedChar = void 0;
+      if (!regexIsDigit.test(str[i])) convertedChar = (str[i].charCodeAt(0) - 55) % 11;else convertedChar = str[i];
+      checkSumVal += convertedChar * (9 - i);
+    }
+    checkSumVal %= 11;
+    var checkSumConverted;
+    if (checkSumVal === 0) checkSumConverted = '0';else if (checkSumVal === 1) checkSumConverted = 'A';else checkSumConverted = String(11 - checkSumVal);
+    if (checkSumConverted === str[str.length - 1]) return true;
+    return false;
+  },
+  'zh-TW': function zhTW(str) {
+    var ALPHABET_CODES = {
+      A: 10,
+      B: 11,
+      C: 12,
+      D: 13,
+      E: 14,
+      F: 15,
+      G: 16,
+      H: 17,
+      I: 34,
+      J: 18,
+      K: 19,
+      L: 20,
+      M: 21,
+      N: 22,
+      O: 35,
+      P: 23,
+      Q: 24,
+      R: 25,
+      S: 26,
+      T: 27,
+      U: 28,
+      V: 29,
+      W: 32,
+      X: 30,
+      Y: 31,
+      Z: 33
+    };
+    var sanitized = str.trim().toUpperCase();
+    if (!/^[A-Z][0-9]{9}$/.test(sanitized)) return false;
+    return Array.from(sanitized).reduce(function (sum, number, index) {
+      if (index === 0) {
+        var code = ALPHABET_CODES[number];
+        return code % 10 * 9 + Math.floor(code / 10);
+      }
+      if (index === 9) {
+        return (10 - sum % 10 - Number(number)) % 10 === 0;
+      }
+      return sum + Number(number) * (9 - index);
+    }, 0);
+  },
+  PK: function PK(str) {
+    // Pakistani National Identity Number CNIC is 13 digits
+    var CNIC = /^[1-7][0-9]{4}-[0-9]{7}-[1-9]$/;
+
+    // sanitize user input
+    var sanitized = str.trim();
+
+    // validate the data structure
+    return CNIC.test(sanitized);
+  }
+};
+function isIdentityCard(str, locale) {
+  (0, _assertString.default)(str);
+  if (locale in validators) {
+    return validators[locale](str);
+  } else if (locale === 'any') {
+    for (var key in validators) {
+      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes
+      // istanbul ignore else
+      if (validators.hasOwnProperty(key)) {
+        var validator = validators[key];
+        if (validator(str)) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+  throw new Error("Invalid locale '".concat(locale, "'"));
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 2678:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isISIN;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var isin = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/;
+
+// this link details how the check digit is calculated:
+// https://www.isin.org/isin-format/. it is a little bit
+// odd in that it works with digits, not numbers. in order
+// to make only one pass through the ISIN characters, the
+// each alpha character is handled as 2 characters within
+// the loop.
+
+function isISIN(str) {
+  (0, _assertString.default)(str);
+  if (!isin.test(str)) {
+    return false;
+  }
+  var double = true;
+  var sum = 0;
+  // convert values
+  for (var i = str.length - 2; i >= 0; i--) {
+    if (str[i] >= 'A' && str[i] <= 'Z') {
+      var value = str[i].charCodeAt(0) - 55;
+      var lo = value % 10;
+      var hi = Math.trunc(value / 10);
+      // letters have two digits, so handle the low order
+      // and high order digits separately.
+      for (var _i = 0, _arr = [lo, hi]; _i < _arr.length; _i++) {
+        var digit = _arr[_i];
+        if (double) {
+          if (digit >= 5) {
+            sum += 1 + (digit - 5) * 2;
+          } else {
+            sum += digit * 2;
+          }
+        } else {
+          sum += digit;
+        }
+        double = !double;
+      }
+    } else {
+      var _digit = str[i].charCodeAt(0) - '0'.charCodeAt(0);
+      if (double) {
+        if (_digit >= 5) {
+          sum += 1 + (_digit - 5) * 2;
+        } else {
+          sum += _digit * 2;
+        }
+      } else {
+        sum += _digit;
+      }
+      double = !double;
+    }
+  }
+  var check = Math.trunc((sum + 9) / 10) * 10 - sum;
+  return +str[str.length - 1] === check;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 2830:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isMultibyte;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/* eslint-disable no-control-regex */
+var multibyte = /[^\x00-\x7F]/;
+/* eslint-enable no-control-regex */
+
+function isMultibyte(str) {
+  (0, _assertString.default)(str);
+  return multibyte.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 3158:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isISO31661Numeric;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+// from https://en.wikipedia.org/wiki/ISO_3166-1_numeric
+var validISO31661NumericCountriesCodes = new Set(['004', '008', '010', '012', '016', '020', '024', '028', '031', '032', '036', '040', '044', '048', '050', '051', '052', '056', '060', '064', '068', '070', '072', '074', '076', '084', '086', '090', '092', '096', '100', '104', '108', '112', '116', '120', '124', '132', '136', '140', '144', '148', '152', '156', '158', '162', '166', '170', '174', '175', '178', '180', '184', '188', '191', '192', '196', '203', '204', '208', '212', '214', '218', '222', '226', '231', '232', '233', '234', '238', '239', '242', '246', '248', '250', '254', '258', '260', '262', '266', '268', '270', '275', '276', '288', '292', '296', '300', '304', '308', '312', '316', '320', '324', '328', '332', '334', '336', '340', '344', '348', '352', '356', '360', '364', '368', '372', '376', '380', '384', '388', '392', '398', '400', '404', '408', '410', '414', '417', '418', '422', '426', '428', '430', '434', '438', '440', '442', '446', '450', '454', '458', '462', '466', '470', '474', '478', '480', '484', '492', '496', '498', '499', '500', '504', '508', '512', '516', '520', '524', '528', '531', '533', '534', '535', '540', '548', '554', '558', '562', '566', '570', '574', '578', '580', '581', '583', '584', '585', '586', '591', '598', '600', '604', '608', '612', '616', '620', '624', '626', '630', '634', '638', '642', '643', '646', '652', '654', '659', '660', '662', '663', '666', '670', '674', '678', '682', '686', '688', '690', '694', '702', '703', '704', '705', '706', '710', '716', '724', '728', '729', '732', '740', '744', '748', '752', '756', '760', '762', '764', '768', '772', '776', '780', '784', '788', '792', '795', '796', '798', '800', '804', '807', '818', '826', '831', '832', '833', '834', '840', '850', '854', '858', '860', '862', '876', '882', '887', '894']);
+function isISO31661Numeric(str) {
+  (0, _assertString.default)(str);
+  return validISO31661NumericCountriesCodes.has(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 3196:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isMACAddress;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var macAddress48 = /^(?:[0-9a-fA-F]{2}([-:\s]))([0-9a-fA-F]{2}\1){4}([0-9a-fA-F]{2})$/;
+var macAddress48NoSeparators = /^([0-9a-fA-F]){12}$/;
+var macAddress48WithDots = /^([0-9a-fA-F]{4}\.){2}([0-9a-fA-F]{4})$/;
+var macAddress64 = /^(?:[0-9a-fA-F]{2}([-:\s]))([0-9a-fA-F]{2}\1){6}([0-9a-fA-F]{2})$/;
+var macAddress64NoSeparators = /^([0-9a-fA-F]){16}$/;
+var macAddress64WithDots = /^([0-9a-fA-F]{4}\.){3}([0-9a-fA-F]{4})$/;
+function isMACAddress(str, options) {
+  (0, _assertString.default)(str);
+  if (options !== null && options !== void 0 && options.eui) {
+    options.eui = String(options.eui);
+  }
+  /**
+   * @deprecated `no_colons` TODO: remove it in the next major
+  */
+  if (options !== null && options !== void 0 && options.no_colons || options !== null && options !== void 0 && options.no_separators) {
+    if (options.eui === '48') {
+      return macAddress48NoSeparators.test(str);
+    }
+    if (options.eui === '64') {
+      return macAddress64NoSeparators.test(str);
+    }
+    return macAddress48NoSeparators.test(str) || macAddress64NoSeparators.test(str);
+  }
+  if ((options === null || options === void 0 ? void 0 : options.eui) === '48') {
+    return macAddress48.test(str) || macAddress48WithDots.test(str);
+  }
+  if ((options === null || options === void 0 ? void 0 : options.eui) === '64') {
+    return macAddress64.test(str) || macAddress64WithDots.test(str);
+  }
+  return isMACAddress(str, {
+    eui: '48'
+  }) || isMACAddress(str, {
+    eui: '64'
+  });
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 3214:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = toBoolean;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function toBoolean(str, strict) {
+  (0, _assertString.default)(str);
+  if (strict) {
+    return str === '1' || /^true$/i.test(str);
+  }
+  return str !== '0' && !/^false$/i.test(str) && str !== '';
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 3237:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.farsiLocales = exports.englishLocales = exports.dotDecimal = exports.decimal = exports.commaDecimal = exports.bengaliLocales = exports.arabicLocales = exports.alphanumeric = exports.alpha = void 0;
+var alpha = exports.alpha = {
+  'en-US': /^[A-Z]+$/i,
+  'az-AZ': /^[A-VXYZ\u00c7\u018f\u011e\u0130\u0131\u00d6\u015e\u00dc]+$/i,
+  'bg-BG': /^[\u0410-\u042f]+$/i,
+  'cs-CZ': /^[A-Z\u00c1\u010c\u010e\u00c9\u011a\u00cd\u0147\u00d3\u0158\u0160\u0164\u00da\u016e\u00dd\u017d]+$/i,
+  'da-DK': /^[A-Z\u00c6\u00d8\u00c5]+$/i,
+  'de-DE': /^[A-Z\u00c4\u00d6\u00dc\u00df]+$/i,
+  'el-GR': /^[\u0391-\u03ce]+$/i,
+  'es-ES': /^[A-Z\u00c1\u00c9\u00cd\u00d1\u00d3\u00da\u00dc]+$/i,
+  'fa-IR': /^[\u0627\u0628\u067e\u062a\u062b\u062c\u0686\u062d\u062e\u062f\u0630\u0631\u0632\u0698\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0641\u0642\u06a9\u06af\u0644\u0645\u0646\u0648\u0647\u06cc]+$/i,
+  'fi-FI': /^[A-Z\u00c5\u00c4\u00d6]+$/i,
+  'fr-FR': /^[A-Z\u00c0\u00c2\u00c6\u00c7\u00c9\u00c8\u00ca\u00cb\u00cf\u00ce\u00d4\u0152\u00d9\u00db\u00dc\u0178]+$/i,
+  'it-IT': /^[A-Z\u00c0\u00c9\u00c8\u00cc\u00ce\u00d3\u00d2\u00d9]+$/i,
+  'ja-JP': /^[\u3041-\u3093\u30a1-\u30f6\uff66-\uff9f\u4e00-\u9fa0\u30fc\u30fb\u3002\u3001]+$/i,
+  'nb-NO': /^[A-Z\u00c6\u00d8\u00c5]+$/i,
+  'nl-NL': /^[A-Z\u00c1\u00c9\u00cb\u00cf\u00d3\u00d6\u00dc\u00da]+$/i,
+  'nn-NO': /^[A-Z\u00c6\u00d8\u00c5]+$/i,
+  'hu-HU': /^[A-Z\u00c1\u00c9\u00cd\u00d3\u00d6\u0150\u00da\u00dc\u0170]+$/i,
+  'pl-PL': /^[A-Z\u0104\u0106\u0118\u015a\u0141\u0143\u00d3\u017b\u0179]+$/i,
+  'pt-PT': /^[A-Z\u00c3\u00c1\u00c0\u00c2\u00c4\u00c7\u00c9\u00ca\u00cb\u00cd\u00cf\u00d5\u00d3\u00d4\u00d6\u00da\u00dc]+$/i,
+  'ru-RU': /^[\u0410-\u042f\u0401]+$/i,
+  'kk-KZ': /^[\u0410-\u042f\u0401\u04D8\u04B0\u0406\u04A2\u0492\u04AE\u049A\u04E8\u04BA]+$/i,
+  'sl-SI': /^[A-Z\u010c\u0106\u0110\u0160\u017d]+$/i,
+  'sk-SK': /^[A-Z\u00c1\u010c\u010e\u00c9\u00cd\u0147\u00d3\u0160\u0164\u00da\u00dd\u017d\u0139\u0154\u013d\u00c4\u00d4]+$/i,
+  'sr-RS@latin': /^[A-Z\u010c\u0106\u017d\u0160\u0110]+$/i,
+  'sr-RS': /^[\u0410-\u042f\u0402\u0408\u0409\u040a\u040b\u040f]+$/i,
+  'sv-SE': /^[A-Z\u00c5\u00c4\u00d6]+$/i,
+  'th-TH': /^[\u0e01-\u0e50\s]+$/i,
+  'tr-TR': /^[A-Z\u00c7\u011e\u0130\u0131\u00d6\u015e\u00dc]+$/i,
+  'uk-UA': /^[\u0410-\u0429\u042c\u042e\u042f\u0404I\u0407\u0490\u0456]+$/i,
+  'vi-VN': /^[A-Z\u00c0\u00c1\u1ea0\u1ea2\u00c3\u00c2\u1ea6\u1ea4\u1eac\u1ea8\u1eaa\u0102\u1eb0\u1eae\u1eb6\u1eb2\u1eb4\u0110\u00c8\u00c9\u1eb8\u1eba\u1ebc\u00ca\u1ec0\u1ebe\u1ec6\u1ec2\u1ec4\u00cc\u00cd\u1eca\u1ec8\u0128\u00d2\u00d3\u1ecc\u1ece\u00d5\u00d4\u1ed2\u1ed0\u1ed8\u1ed4\u1ed6\u01a0\u1edc\u1eda\u1ee2\u1ede\u1ee0\u00d9\u00da\u1ee4\u1ee6\u0168\u01af\u1eea\u1ee8\u1ef0\u1eec\u1eee\u1ef2\u00dd\u1ef4\u1ef6\u1ef8]+$/i,
+  'ko-KR': /^[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]*$/,
+  'ku-IQ': /^[\u0626\u0627\u0628\u067e\u062a\u062c\u0686\u062d\u062e\u062f\u0631\u0695\u0632\u0698\u0633\u0634\u0639\u063a\u0641\u06a4\u0642\u06a9\u06af\u0644\u06b5\u0645\u0646\u0648\u06c6\u06be\u06d5\u06cc\u06ce\u064a\u0637\u0624\u062b\u0622\u0625\u0623\u0643\u0636\u0635\u0629\u0638\u0630]+$/i,
+  ar: /^[\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u0670]+$/,
+  he: /^[\u05d0-\u05ea]+$/,
+  fa: /^['\u0622\u0627\u0621\u0623\u0624\u0626\u0628\u067e\u062a\u062b\u062c\u0686\u062d\u062e\u062f\u0630\u0631\u0632\u0698\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0641\u0642\u06a9\u06af\u0644\u0645\u0646\u0648\u0647\u0629\u06cc']+$/i,
+  bn: /^['\u0980\u0981\u0982\u0983\u0985\u0986\u0987\u0988\u0989\u098a\u098b\u098c\u098f\u0990\u0993\u0994\u0995\u0996\u0997\u0998\u0999\u099a\u099b\u099c\u099d\u099e\u099f\u09a0\u09a1\u09a2\u09a3\u09a4\u09a5\u09a6\u09a7\u09a8\u09aa\u09ab\u09ac\u09ad\u09ae\u09af\u09b0\u09b2\u09b6\u09b7\u09b8\u09b9\u09bc\u09bd\u09be\u09bf\u09c0\u09c1\u09c2\u09c3\u09c4\u09c7\u09c8\u09cb\u09cc\u09cd\u09ce\u09d7\u09dc\u09dd\u09df\u09e0\u09e1\u09e2\u09e3\u09f0\u09f1\u09f2\u09f3\u09f4\u09f5\u09f6\u09f7\u09f8\u09f9\u09fa\u09fb']+$/,
+  eo: /^[ABC\u0108D-G\u011cH\u0124IJ\u0134K-PRS\u015cTU\u016cVZ]+$/i,
+  'hi-IN': /^[\u0900-\u0961]+[\u0972-\u097F]*$/i,
+  'si-LK': /^[\u0D80-\u0DFF]+$/
+};
+var alphanumeric = exports.alphanumeric = {
+  'en-US': /^[0-9A-Z]+$/i,
+  'az-AZ': /^[0-9A-VXYZ\u00c7\u018f\u011e\u0130\u0131\u00d6\u015e\u00dc]+$/i,
+  'bg-BG': /^[0-9\u0410-\u042f]+$/i,
+  'cs-CZ': /^[0-9A-Z\u00c1\u010c\u010e\u00c9\u011a\u00cd\u0147\u00d3\u0158\u0160\u0164\u00da\u016e\u00dd\u017d]+$/i,
+  'da-DK': /^[0-9A-Z\u00c6\u00d8\u00c5]+$/i,
+  'de-DE': /^[0-9A-Z\u00c4\u00d6\u00dc\u00df]+$/i,
+  'el-GR': /^[0-9\u0391-\u03c9]+$/i,
+  'es-ES': /^[0-9A-Z\u00c1\u00c9\u00cd\u00d1\u00d3\u00da\u00dc]+$/i,
+  'fi-FI': /^[0-9A-Z\u00c5\u00c4\u00d6]+$/i,
+  'fr-FR': /^[0-9A-Z\u00c0\u00c2\u00c6\u00c7\u00c9\u00c8\u00ca\u00cb\u00cf\u00ce\u00d4\u0152\u00d9\u00db\u00dc\u0178]+$/i,
+  'it-IT': /^[0-9A-Z\u00c0\u00c9\u00c8\u00cc\u00ce\u00d3\u00d2\u00d9]+$/i,
+  'ja-JP': /^[0-9\uff10-\uff19\u3041-\u3093\u30a1-\u30f6\uff66-\uff9f\u4e00-\u9fa0\u30fc\u30fb\u3002\u3001]+$/i,
+  'hu-HU': /^[0-9A-Z\u00c1\u00c9\u00cd\u00d3\u00d6\u0150\u00da\u00dc\u0170]+$/i,
+  'nb-NO': /^[0-9A-Z\u00c6\u00d8\u00c5]+$/i,
+  'nl-NL': /^[0-9A-Z\u00c1\u00c9\u00cb\u00cf\u00d3\u00d6\u00dc\u00da]+$/i,
+  'nn-NO': /^[0-9A-Z\u00c6\u00d8\u00c5]+$/i,
+  'pl-PL': /^[0-9A-Z\u0104\u0106\u0118\u015a\u0141\u0143\u00d3\u017b\u0179]+$/i,
+  'pt-PT': /^[0-9A-Z\u00c3\u00c1\u00c0\u00c2\u00c4\u00c7\u00c9\u00ca\u00cb\u00cd\u00cf\u00d5\u00d3\u00d4\u00d6\u00da\u00dc]+$/i,
+  'ru-RU': /^[0-9\u0410-\u042f\u0401]+$/i,
+  'kk-KZ': /^[0-9\u0410-\u042f\u0401\u04D8\u04B0\u0406\u04A2\u0492\u04AE\u049A\u04E8\u04BA]+$/i,
+  'sl-SI': /^[0-9A-Z\u010c\u0106\u0110\u0160\u017d]+$/i,
+  'sk-SK': /^[0-9A-Z\u00c1\u010c\u010e\u00c9\u00cd\u0147\u00d3\u0160\u0164\u00da\u00dd\u017d\u0139\u0154\u013d\u00c4\u00d4]+$/i,
+  'sr-RS@latin': /^[0-9A-Z\u010c\u0106\u017d\u0160\u0110]+$/i,
+  'sr-RS': /^[0-9\u0410-\u042f\u0402\u0408\u0409\u040a\u040b\u040f]+$/i,
+  'sv-SE': /^[0-9A-Z\u00c5\u00c4\u00d6]+$/i,
+  'th-TH': /^[\u0e01-\u0e59\s]+$/i,
+  'tr-TR': /^[0-9A-Z\u00c7\u011e\u0130\u0131\u00d6\u015e\u00dc]+$/i,
+  'uk-UA': /^[0-9\u0410-\u0429\u042c\u042e\u042f\u0404I\u0407\u0490\u0456]+$/i,
+  'ko-KR': /^[0-9\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]*$/,
+  'ku-IQ': /^[\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u06690-9\u0626\u0627\u0628\u067e\u062a\u062c\u0686\u062d\u062e\u062f\u0631\u0695\u0632\u0698\u0633\u0634\u0639\u063a\u0641\u06a4\u0642\u06a9\u06af\u0644\u06b5\u0645\u0646\u0648\u06c6\u06be\u06d5\u06cc\u06ce\u064a\u0637\u0624\u062b\u0622\u0625\u0623\u0643\u0636\u0635\u0629\u0638\u0630]+$/i,
+  'vi-VN': /^[0-9A-Z\u00c0\u00c1\u1ea0\u1ea2\u00c3\u00c2\u1ea6\u1ea4\u1eac\u1ea8\u1eaa\u0102\u1eb0\u1eae\u1eb6\u1eb2\u1eb4\u0110\u00c8\u00c9\u1eb8\u1eba\u1ebc\u00ca\u1ec0\u1ebe\u1ec6\u1ec2\u1ec4\u00cc\u00cd\u1eca\u1ec8\u0128\u00d2\u00d3\u1ecc\u1ece\u00d5\u00d4\u1ed2\u1ed0\u1ed8\u1ed4\u1ed6\u01a0\u1edc\u1eda\u1ee2\u1ede\u1ee0\u00d9\u00da\u1ee4\u1ee6\u0168\u01af\u1eea\u1ee8\u1ef0\u1eec\u1eee\u1ef2\u00dd\u1ef4\u1ef6\u1ef8]+$/i,
+  ar: /^[\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u06690-9\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u0670]+$/,
+  he: /^[0-9\u05d0-\u05ea]+$/,
+  fa: /^['0-9\u0622\u0627\u0621\u0623\u0624\u0626\u0628\u067e\u062a\u062b\u062c\u0686\u062d\u062e\u062f\u0630\u0631\u0632\u0698\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0641\u0642\u06a9\u06af\u0644\u0645\u0646\u0648\u0647\u0629\u06cc\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9\u06f0']+$/i,
+  bn: /^['\u0980\u0981\u0982\u0983\u0985\u0986\u0987\u0988\u0989\u098a\u098b\u098c\u098f\u0990\u0993\u0994\u0995\u0996\u0997\u0998\u0999\u099a\u099b\u099c\u099d\u099e\u099f\u09a0\u09a1\u09a2\u09a3\u09a4\u09a5\u09a6\u09a7\u09a8\u09aa\u09ab\u09ac\u09ad\u09ae\u09af\u09b0\u09b2\u09b6\u09b7\u09b8\u09b9\u09bc\u09bd\u09be\u09bf\u09c0\u09c1\u09c2\u09c3\u09c4\u09c7\u09c8\u09cb\u09cc\u09cd\u09ce\u09d7\u09dc\u09dd\u09df\u09e0\u09e1\u09e2\u09e3\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09f0\u09f1\u09f2\u09f3\u09f4\u09f5\u09f6\u09f7\u09f8\u09f9\u09fa\u09fb']+$/,
+  eo: /^[0-9ABC\u0108D-G\u011cH\u0124IJ\u0134K-PRS\u015cTU\u016cVZ]+$/i,
+  'hi-IN': /^[\u0900-\u0963]+[\u0966-\u097F]*$/i,
+  'si-LK': /^[0-9\u0D80-\u0DFF]+$/
+};
+var decimal = exports.decimal = {
+  'en-US': '.',
+  ar: '\u066b'
+};
+var englishLocales = exports.englishLocales = ['AU', 'GB', 'HK', 'IN', 'NZ', 'ZA', 'ZM'];
+for (var locale, i = 0; i < englishLocales.length; i++) {
+  locale = "en-".concat(englishLocales[i]);
+  alpha[locale] = alpha['en-US'];
+  alphanumeric[locale] = alphanumeric['en-US'];
+  decimal[locale] = decimal['en-US'];
+}
+
+// Source: http://www.localeplanet.com/java/
+var arabicLocales = exports.arabicLocales = ['AE', 'BH', 'DZ', 'EG', 'IQ', 'JO', 'KW', 'LB', 'LY', 'MA', 'QM', 'QA', 'SA', 'SD', 'SY', 'TN', 'YE'];
+for (var _locale, _i = 0; _i < arabicLocales.length; _i++) {
+  _locale = "ar-".concat(arabicLocales[_i]);
+  alpha[_locale] = alpha.ar;
+  alphanumeric[_locale] = alphanumeric.ar;
+  decimal[_locale] = decimal.ar;
+}
+var farsiLocales = exports.farsiLocales = ['IR', 'AF'];
+for (var _locale2, _i2 = 0; _i2 < farsiLocales.length; _i2++) {
+  _locale2 = "fa-".concat(farsiLocales[_i2]);
+  alphanumeric[_locale2] = alphanumeric.fa;
+  decimal[_locale2] = decimal.ar;
+}
+var bengaliLocales = exports.bengaliLocales = ['BD', 'IN'];
+for (var _locale3, _i3 = 0; _i3 < bengaliLocales.length; _i3++) {
+  _locale3 = "bn-".concat(bengaliLocales[_i3]);
+  alpha[_locale3] = alpha.bn;
+  alphanumeric[_locale3] = alphanumeric.bn;
+  decimal[_locale3] = decimal['en-US'];
+}
+
+// Source: https://en.wikipedia.org/wiki/Decimal_mark
+var dotDecimal = exports.dotDecimal = ['ar-EG', 'ar-LB', 'ar-LY'];
+var commaDecimal = exports.commaDecimal = ['bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-ZM', 'eo', 'es-ES', 'fr-CA', 'fr-FR', 'id-ID', 'it-IT', 'ku-IQ', 'hi-IN', 'hu-HU', 'nb-NO', 'nn-NO', 'nl-NL', 'pl-PL', 'pt-PT', 'ru-RU', 'kk-KZ', 'si-LK', 'sl-SI', 'sr-RS@latin', 'sr-RS', 'sv-SE', 'tr-TR', 'uk-UA', 'vi-VN'];
+for (var _i4 = 0; _i4 < dotDecimal.length; _i4++) {
+  decimal[dotDecimal[_i4]] = decimal['en-US'];
+}
+for (var _i5 = 0; _i5 < commaDecimal.length; _i5++) {
+  decimal[commaDecimal[_i5]] = ',';
+}
+alpha['fr-CA'] = alpha['fr-FR'];
+alphanumeric['fr-CA'] = alphanumeric['fr-FR'];
+alpha['pt-BR'] = alpha['pt-PT'];
+alphanumeric['pt-BR'] = alphanumeric['pt-PT'];
+decimal['pt-BR'] = decimal['pt-PT'];
+
+// see #862
+alpha['pl-Pl'] = alpha['pl-PL'];
+alphanumeric['pl-Pl'] = alphanumeric['pl-PL'];
+decimal['pl-Pl'] = decimal['pl-PL'];
+
+// see #1455
+alpha['fa-AF'] = alpha.fa;
+
+/***/ }),
+
+/***/ 3399:
+/***/ ((module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = assertString;
+function assertString(input) {
+  if (input === undefined || input === null) throw new TypeError("Expected a string but received a ".concat(input));
+  if (input.constructor.name !== 'String') throw new TypeError("Expected a string but received a ".concat(input.constructor.name));
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 3405:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.ScriptCodes = void 0;
+exports["default"] = isISO15924;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+// from https://www.unicode.org/iso15924/iso15924-codes.html
+var validISO15924Codes = new Set(['Adlm', 'Afak', 'Aghb', 'Ahom', 'Arab', 'Aran', 'Armi', 'Armn', 'Avst', 'Bali', 'Bamu', 'Bass', 'Batk', 'Beng', 'Bhks', 'Blis', 'Bopo', 'Brah', 'Brai', 'Bugi', 'Buhd', 'Cakm', 'Cans', 'Cari', 'Cham', 'Cher', 'Chis', 'Chrs', 'Cirt', 'Copt', 'Cpmn', 'Cprt', 'Cyrl', 'Cyrs', 'Deva', 'Diak', 'Dogr', 'Dsrt', 'Dupl', 'Egyd', 'Egyh', 'Egyp', 'Elba', 'Elym', 'Ethi', 'Gara', 'Geok', 'Geor', 'Glag', 'Gong', 'Gonm', 'Goth', 'Gran', 'Grek', 'Gujr', 'Gukh', 'Guru', 'Hanb', 'Hang', 'Hani', 'Hano', 'Hans', 'Hant', 'Hatr', 'Hebr', 'Hira', 'Hluw', 'Hmng', 'Hmnp', 'Hrkt', 'Hung', 'Inds', 'Ital', 'Jamo', 'Java', 'Jpan', 'Jurc', 'Kali', 'Kana', 'Kawi', 'Khar', 'Khmr', 'Khoj', 'Kitl', 'Kits', 'Knda', 'Kore', 'Kpel', 'Krai', 'Kthi', 'Lana', 'Laoo', 'Latf', 'Latg', 'Latn', 'Leke', 'Lepc', 'Limb', 'Lina', 'Linb', 'Lisu', 'Loma', 'Lyci', 'Lydi', 'Mahj', 'Maka', 'Mand', 'Mani', 'Marc', 'Maya', 'Medf', 'Mend', 'Merc', 'Mero', 'Mlym', 'Modi', 'Mong', 'Moon', 'Mroo', 'Mtei', 'Mult', 'Mymr', 'Nagm', 'Nand', 'Narb', 'Nbat', 'Newa', 'Nkdb', 'Nkgb', 'Nkoo', 'Nshu', 'Ogam', 'Olck', 'Onao', 'Orkh', 'Orya', 'Osge', 'Osma', 'Ougr', 'Palm', 'Pauc', 'Pcun', 'Pelm', 'Perm', 'Phag', 'Phli', 'Phlp', 'Phlv', 'Phnx', 'Plrd', 'Piqd', 'Prti', 'Psin', 'Qaaa', 'Qaab', 'Qaac', 'Qaad', 'Qaae', 'Qaaf', 'Qaag', 'Qaah', 'Qaai', 'Qaaj', 'Qaak', 'Qaal', 'Qaam', 'Qaan', 'Qaao', 'Qaap', 'Qaaq', 'Qaar', 'Qaas', 'Qaat', 'Qaau', 'Qaav', 'Qaaw', 'Qaax', 'Qaay', 'Qaaz', 'Qaba', 'Qabb', 'Qabc', 'Qabd', 'Qabe', 'Qabf', 'Qabg', 'Qabh', 'Qabi', 'Qabj', 'Qabk', 'Qabl', 'Qabm', 'Qabn', 'Qabo', 'Qabp', 'Qabq', 'Qabr', 'Qabs', 'Qabt', 'Qabu', 'Qabv', 'Qabw', 'Qabx', 'Ranj', 'Rjng', 'Rohg', 'Roro', 'Runr', 'Samr', 'Sara', 'Sarb', 'Saur', 'Sgnw', 'Shaw', 'Shrd', 'Shui', 'Sidd', 'Sidt', 'Sind', 'Sinh', 'Sogd', 'Sogo', 'Sora', 'Soyo', 'Sund', 'Sunu', 'Sylo', 'Syrc', 'Syre', 'Syrj', 'Syrn', 'Tagb', 'Takr', 'Tale', 'Talu', 'Taml', 'Tang', 'Tavt', 'Tayo', 'Telu', 'Teng', 'Tfng', 'Tglg', 'Thaa', 'Thai', 'Tibt', 'Tirh', 'Tnsa', 'Todr', 'Tols', 'Toto', 'Tutg', 'Ugar', 'Vaii', 'Visp', 'Vith', 'Wara', 'Wcho', 'Wole', 'Xpeo', 'Xsux', 'Yezi', 'Yiii', 'Zanb', 'Zinh', 'Zmth', 'Zsye', 'Zsym', 'Zxxx', 'Zyyy', 'Zzzz']);
+function isISO15924(str) {
+  (0, _assertString.default)(str);
+  return validISO15924Codes.has(str);
+}
+var ScriptCodes = exports.ScriptCodes = validISO15924Codes;
+
+/***/ }),
+
+/***/ 3442:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isPassportNumber;
+exports.locales = void 0;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/**
+ * Reference:
+ * https://en.wikipedia.org/ -- Wikipedia
+ * https://docs.microsoft.com/en-us/microsoft-365/compliance/eu-passport-number -- EU Passport Number
+ * https://countrycode.org/ -- Country Codes
+ */
+var passportRegexByCountryCode = {
+  AM: /^[A-Z]{2}\d{7}$/,
+  // ARMENIA
+  AR: /^[A-Z]{3}\d{6}$/,
+  // ARGENTINA
+  AT: /^[A-Z]\d{7}$/,
+  // AUSTRIA
+  AU: /^[A-Z]\d{7}$/,
+  // AUSTRALIA
+  AZ: /^[A-Z]{1}\d{8}$/,
+  // AZERBAIJAN
+  BE: /^[A-Z]{2}\d{6}$/,
+  // BELGIUM
+  BG: /^\d{9}$/,
+  // BULGARIA
+  BR: /^[A-Z]{2}\d{6}$/,
+  // BRAZIL
+  BY: /^[A-Z]{2}\d{7}$/,
+  // BELARUS
+  CA: /^[A-Z]{2}\d{6}$|^[A-Z]\d{6}[A-Z]{2}$/,
+  // CANADA
+  CH: /^[A-Z]\d{7}$/,
+  // SWITZERLAND
+  CN: /^G\d{8}$|^E(?![IO])[A-Z0-9]\d{7}$/,
+  // CHINA [G=Ordinary, E=Electronic] followed by 8-digits, or E followed by any UPPERCASE letter (except I and O) followed by 7 digits
+  CY: /^[A-Z](\d{6}|\d{8})$/,
+  // CYPRUS
+  CZ: /^\d{8}$/,
+  // CZECH REPUBLIC
+  DE: /^[CFGHJKLMNPRTVWXYZ0-9]{9}$/,
+  // GERMANY
+  DK: /^\d{9}$/,
+  // DENMARK
+  DZ: /^\d{9}$/,
+  // ALGERIA
+  EE: /^([A-Z]\d{7}|[A-Z]{2}\d{7})$/,
+  // ESTONIA (K followed by 7-digits), e-passports have 2 UPPERCASE followed by 7 digits
+  ES: /^[A-Z0-9]{2}([A-Z0-9]?)\d{6}$/,
+  // SPAIN
+  FI: /^[A-Z]{2}\d{7}$/,
+  // FINLAND
+  FR: /^\d{2}[A-Z]{2}\d{5}$/,
+  // FRANCE
+  GB: /^\d{9}$/,
+  // UNITED KINGDOM
+  GR: /^[A-Z]{2}\d{7}$/,
+  // GREECE
+  HR: /^\d{9}$/,
+  // CROATIA
+  HU: /^[A-Z]{2}(\d{6}|\d{7})$/,
+  // HUNGARY
+  IE: /^[A-Z0-9]{2}\d{7}$/,
+  // IRELAND
+  IN: /^[A-Z]{1}-?\d{7}$/,
+  // INDIA
+  ID: /^[A-C]\d{7}$/,
+  // INDONESIA
+  IR: /^[A-Z]\d{8}$/,
+  // IRAN
+  IS: /^(A)\d{7}$/,
+  // ICELAND
+  IT: /^[A-Z0-9]{2}\d{7}$/,
+  // ITALY
+  JM: /^[Aa]\d{7}$/,
+  // JAMAICA
+  JP: /^[A-Z]{2}\d{7}$/,
+  // JAPAN
+  KR: /^[MS]\d{8}$/,
+  // SOUTH KOREA, REPUBLIC OF KOREA, [S=PS Passports, M=PM Passports]
+  KZ: /^[a-zA-Z]\d{7}$/,
+  // KAZAKHSTAN
+  LI: /^[a-zA-Z]\d{5}$/,
+  // LIECHTENSTEIN
+  LT: /^[A-Z0-9]{8}$/,
+  // LITHUANIA
+  LU: /^[A-Z0-9]{8}$/,
+  // LUXEMBURG
+  LV: /^[A-Z0-9]{2}\d{7}$/,
+  // LATVIA
+  LY: /^[A-Z0-9]{8}$/,
+  // LIBYA
+  MT: /^\d{7}$/,
+  // MALTA
+  MZ: /^([A-Z]{2}\d{7})|(\d{2}[A-Z]{2}\d{5})$/,
+  // MOZAMBIQUE
+  MY: /^[AHK]\d{8}$/,
+  // MALAYSIA
+  MX: /^\d{10,11}$/,
+  // MEXICO
+  NL: /^[A-Z]{2}[A-Z0-9]{6}\d$/,
+  // NETHERLANDS
+  NZ: /^([Ll]([Aa]|[Dd]|[Ff]|[Hh])|[Ee]([Aa]|[Pp])|[Nn])\d{6}$/,
+  // NEW ZEALAND
+  PH: /^([A-Z](\d{6}|\d{7}[A-Z]))|([A-Z]{2}(\d{6}|\d{7}))$/,
+  // PHILIPPINES
+  PK: /^[A-Z]{2}\d{7}$/,
+  // PAKISTAN
+  PL: /^[A-Z]{2}\d{7}$/,
+  // POLAND
+  PT: /^[A-Z]\d{6}$/,
+  // PORTUGAL
+  RO: /^\d{8,9}$/,
+  // ROMANIA
+  RU: /^\d{9}$/,
+  // RUSSIAN FEDERATION
+  SE: /^\d{8}$/,
+  // SWEDEN
+  SL: /^(P)[A-Z]\d{7}$/,
+  // SLOVENIA
+  SK: /^[0-9A-Z]\d{7}$/,
+  // SLOVAKIA
+  TH: /^[A-Z]{1,2}\d{6,7}$/,
+  // THAILAND
+  TR: /^[A-Z]\d{8}$/,
+  // TURKEY
+  UA: /^[A-Z]{2}\d{6}$/,
+  // UKRAINE
+  US: /^\d{9}$|^[A-Z]\d{8}$/,
+  // UNITED STATES
+  ZA: /^[TAMD]\d{8}$/ // SOUTH AFRICA
+};
+var locales = exports.locales = Object.keys(passportRegexByCountryCode);
+
+/**
+ * Check if str is a valid passport number
+ * relative to provided ISO Country Code.
+ *
+ * @param {string} str
+ * @param {string} countryCode
+ * @return {boolean}
+ */
+function isPassportNumber(str, countryCode) {
+  (0, _assertString.default)(str);
+  /** Remove All Whitespaces, Convert to UPPERCASE */
+  var normalizedStr = str.replace(/\s/g, '').toUpperCase();
+  return countryCode.toUpperCase() in passportRegexByCountryCode && passportRegexByCountryCode[countryCode].test(normalizedStr);
+}
+
+/***/ }),
+
+/***/ 3459:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isSurrogatePair;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var surrogatePair = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
+function isSurrogatePair(str) {
+  (0, _assertString.default)(str);
+  return surrogatePair.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 3583:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isDataURI;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var validMediaType = /^[a-z]+\/[a-z0-9\-\+\._]+$/i;
+var validAttribute = /^[a-z\-]+=[a-z0-9\-]+$/i;
+var validData = /^[a-z0-9!\$&'\(\)\*\+,;=\-\._~:@\/\?%\s]*$/i;
+function isDataURI(str) {
+  (0, _assertString.default)(str);
+  var data = str.split(',');
+  if (data.length < 2) {
+    return false;
+  }
+  var attributes = data.shift().trim().split(';');
+  var schemeAndMediaType = attributes.shift();
+  if (schemeAndMediaType.slice(0, 5) !== 'data:') {
+    return false;
+  }
+  var mediaType = schemeAndMediaType.slice(5);
+  if (mediaType !== '' && !validMediaType.test(mediaType)) {
+    return false;
+  }
+  for (var i = 0; i < attributes.length; i++) {
+    if (!(i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') && !validAttribute.test(attributes[i])) {
+      return false;
+    }
+  }
+  for (var _i = 0; _i < data.length; _i++) {
+    if (!validData.test(data[_i])) {
+      return false;
+    }
+  }
+  return true;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 3609:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isLuhnNumber;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function isLuhnNumber(str) {
+  (0, _assertString.default)(str);
+  var sanitized = str.replace(/[- ]+/g, '');
+  var sum = 0;
+  var digit;
+  var tmpNum;
+  var shouldDouble;
+  for (var i = sanitized.length - 1; i >= 0; i--) {
+    digit = sanitized.substring(i, i + 1);
+    tmpNum = parseInt(digit, 10);
+    if (shouldDouble) {
+      tmpNum *= 2;
+      if (tmpNum >= 10) {
+        sum += tmpNum % 10 + 1;
+      } else {
+        sum += tmpNum;
+      }
+    } else {
+      sum += tmpNum;
+    }
+    shouldDouble = !shouldDouble;
+  }
+  return !!(sum % 10 === 0 ? sanitized : false);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 3610:
+/***/ ((module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = merge;
+function merge() {
+  var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+  var defaults = arguments.length > 1 ? arguments[1] : undefined;
+  for (var key in defaults) {
+    if (typeof obj[key] === 'undefined') {
+      obj[key] = defaults[key];
+    }
+  }
+  return obj;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 3641:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isIBAN;
+exports.locales = void 0;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _includesArray = _interopRequireDefault(__webpack_require__(8644));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/**
+ * List of country codes with
+ * corresponding IBAN regular expression
+ * Reference: https://en.wikipedia.org/wiki/International_Bank_Account_Number
+ */
+var ibanRegexThroughCountryCode = {
+  AD: /^(AD[0-9]{2})\d{8}[A-Z0-9]{12}$/,
+  AE: /^(AE[0-9]{2})\d{3}\d{16}$/,
+  AL: /^(AL[0-9]{2})\d{8}[A-Z0-9]{16}$/,
+  AT: /^(AT[0-9]{2})\d{16}$/,
+  AZ: /^(AZ[0-9]{2})[A-Z0-9]{4}\d{20}$/,
+  BA: /^(BA[0-9]{2})\d{16}$/,
+  BE: /^(BE[0-9]{2})\d{12}$/,
+  BG: /^(BG[0-9]{2})[A-Z]{4}\d{6}[A-Z0-9]{8}$/,
+  BH: /^(BH[0-9]{2})[A-Z]{4}[A-Z0-9]{14}$/,
+  BR: /^(BR[0-9]{2})\d{23}[A-Z]{1}[A-Z0-9]{1}$/,
+  BY: /^(BY[0-9]{2})[A-Z0-9]{4}\d{20}$/,
+  CH: /^(CH[0-9]{2})\d{5}[A-Z0-9]{12}$/,
+  CR: /^(CR[0-9]{2})\d{18}$/,
+  CY: /^(CY[0-9]{2})\d{8}[A-Z0-9]{16}$/,
+  CZ: /^(CZ[0-9]{2})\d{20}$/,
+  DE: /^(DE[0-9]{2})\d{18}$/,
+  DK: /^(DK[0-9]{2})\d{14}$/,
+  DO: /^(DO[0-9]{2})[A-Z]{4}\d{20}$/,
+  DZ: /^(DZ\d{24})$/,
+  EE: /^(EE[0-9]{2})\d{16}$/,
+  EG: /^(EG[0-9]{2})\d{25}$/,
+  ES: /^(ES[0-9]{2})\d{20}$/,
+  FI: /^(FI[0-9]{2})\d{14}$/,
+  FO: /^(FO[0-9]{2})\d{14}$/,
+  FR: /^(FR[0-9]{2})\d{10}[A-Z0-9]{11}\d{2}$/,
+  GB: /^(GB[0-9]{2})[A-Z]{4}\d{14}$/,
+  GE: /^(GE[0-9]{2})[A-Z0-9]{2}\d{16}$/,
+  GI: /^(GI[0-9]{2})[A-Z]{4}[A-Z0-9]{15}$/,
+  GL: /^(GL[0-9]{2})\d{14}$/,
+  GR: /^(GR[0-9]{2})\d{7}[A-Z0-9]{16}$/,
+  GT: /^(GT[0-9]{2})[A-Z0-9]{4}[A-Z0-9]{20}$/,
+  HR: /^(HR[0-9]{2})\d{17}$/,
+  HU: /^(HU[0-9]{2})\d{24}$/,
+  IE: /^(IE[0-9]{2})[A-Z]{4}\d{14}$/,
+  IL: /^(IL[0-9]{2})\d{19}$/,
+  IQ: /^(IQ[0-9]{2})[A-Z]{4}\d{15}$/,
+  IR: /^(IR[0-9]{2})0\d{2}0\d{18}$/,
+  IS: /^(IS[0-9]{2})\d{22}$/,
+  IT: /^(IT[0-9]{2})[A-Z]{1}\d{10}[A-Z0-9]{12}$/,
+  JO: /^(JO[0-9]{2})[A-Z]{4}\d{22}$/,
+  KW: /^(KW[0-9]{2})[A-Z]{4}[A-Z0-9]{22}$/,
+  KZ: /^(KZ[0-9]{2})\d{3}[A-Z0-9]{13}$/,
+  LB: /^(LB[0-9]{2})\d{4}[A-Z0-9]{20}$/,
+  LC: /^(LC[0-9]{2})[A-Z]{4}[A-Z0-9]{24}$/,
+  LI: /^(LI[0-9]{2})\d{5}[A-Z0-9]{12}$/,
+  LT: /^(LT[0-9]{2})\d{16}$/,
+  LU: /^(LU[0-9]{2})\d{3}[A-Z0-9]{13}$/,
+  LV: /^(LV[0-9]{2})[A-Z]{4}[A-Z0-9]{13}$/,
+  MA: /^(MA[0-9]{26})$/,
+  MC: /^(MC[0-9]{2})\d{10}[A-Z0-9]{11}\d{2}$/,
+  MD: /^(MD[0-9]{2})[A-Z0-9]{20}$/,
+  ME: /^(ME[0-9]{2})\d{18}$/,
+  MK: /^(MK[0-9]{2})\d{3}[A-Z0-9]{10}\d{2}$/,
+  MR: /^(MR[0-9]{2})\d{23}$/,
+  MT: /^(MT[0-9]{2})[A-Z]{4}\d{5}[A-Z0-9]{18}$/,
+  MU: /^(MU[0-9]{2})[A-Z]{4}\d{19}[A-Z]{3}$/,
+  MZ: /^(MZ[0-9]{2})\d{21}$/,
+  NL: /^(NL[0-9]{2})[A-Z]{4}\d{10}$/,
+  NO: /^(NO[0-9]{2})\d{11}$/,
+  PK: /^(PK[0-9]{2})[A-Z0-9]{4}\d{16}$/,
+  PL: /^(PL[0-9]{2})\d{24}$/,
+  PS: /^(PS[0-9]{2})[A-Z]{4}[A-Z0-9]{21}$/,
+  PT: /^(PT[0-9]{2})\d{21}$/,
+  QA: /^(QA[0-9]{2})[A-Z]{4}[A-Z0-9]{21}$/,
+  RO: /^(RO[0-9]{2})[A-Z]{4}[A-Z0-9]{16}$/,
+  RS: /^(RS[0-9]{2})\d{18}$/,
+  SA: /^(SA[0-9]{2})\d{2}[A-Z0-9]{18}$/,
+  SC: /^(SC[0-9]{2})[A-Z]{4}\d{20}[A-Z]{3}$/,
+  SE: /^(SE[0-9]{2})\d{20}$/,
+  SI: /^(SI[0-9]{2})\d{15}$/,
+  SK: /^(SK[0-9]{2})\d{20}$/,
+  SM: /^(SM[0-9]{2})[A-Z]{1}\d{10}[A-Z0-9]{12}$/,
+  SV: /^(SV[0-9]{2})[A-Z0-9]{4}\d{20}$/,
+  TL: /^(TL[0-9]{2})\d{19}$/,
+  TN: /^(TN[0-9]{2})\d{20}$/,
+  TR: /^(TR[0-9]{2})\d{5}[A-Z0-9]{17}$/,
+  UA: /^(UA[0-9]{2})\d{6}[A-Z0-9]{19}$/,
+  VA: /^(VA[0-9]{2})\d{18}$/,
+  VG: /^(VG[0-9]{2})[A-Z]{4}\d{16}$/,
+  XK: /^(XK[0-9]{2})\d{16}$/
+};
+
+/**
+ * Check if the country codes passed are valid using the
+ * ibanRegexThroughCountryCode as a reference
+ *
+ * @param {array} countryCodeArray
+ * @return {boolean}
+ */
+
+function hasOnlyValidCountryCodes(countryCodeArray) {
+  var countryCodeArrayFilteredWithObjectIbanCode = countryCodeArray.filter(function (countryCode) {
+    return !(countryCode in ibanRegexThroughCountryCode);
+  });
+  if (countryCodeArrayFilteredWithObjectIbanCode.length > 0) {
+    return false;
+  }
+  return true;
+}
+
+/**
+ * Check whether string has correct universal IBAN format
+ * The IBAN consists of up to 34 alphanumeric characters, as follows:
+ * Country Code using ISO 3166-1 alpha-2, two letters
+ * check digits, two digits and
+ * Basic Bank Account Number (BBAN), up to 30 alphanumeric characters.
+ * NOTE: Permitted IBAN characters are: digits [0-9] and the 26 latin alphabetic [A-Z]
+ *
+ * @param {string} str - string under validation
+ * @param {object} options - object to pass the countries to be either whitelisted or blacklisted
+ * @return {boolean}
+ */
+function hasValidIbanFormat(str, options) {
+  // Strip white spaces and hyphens
+  var strippedStr = str.replace(/[\s\-]+/gi, '').toUpperCase();
+  var isoCountryCode = strippedStr.slice(0, 2).toUpperCase();
+  var isoCountryCodeInIbanRegexCodeObject = isoCountryCode in ibanRegexThroughCountryCode;
+  if (options.whitelist) {
+    if (!hasOnlyValidCountryCodes(options.whitelist)) {
+      return false;
+    }
+    var isoCountryCodeInWhiteList = (0, _includesArray.default)(options.whitelist, isoCountryCode);
+    if (!isoCountryCodeInWhiteList) {
+      return false;
+    }
+  }
+  if (options.blacklist) {
+    var isoCountryCodeInBlackList = (0, _includesArray.default)(options.blacklist, isoCountryCode);
+    if (isoCountryCodeInBlackList) {
+      return false;
+    }
+  }
+  return isoCountryCodeInIbanRegexCodeObject && ibanRegexThroughCountryCode[isoCountryCode].test(strippedStr);
+}
+
+/**
+   * Check whether string has valid IBAN Checksum
+   * by performing basic mod-97 operation and
+   * the remainder should equal 1
+   * -- Start by rearranging the IBAN by moving the four initial characters to the end of the string
+   * -- Replace each letter in the string with two digits, A -> 10, B = 11, Z = 35
+   * -- Interpret the string as a decimal integer and
+   * -- compute the remainder on division by 97 (mod 97)
+   * Reference: https://en.wikipedia.org/wiki/International_Bank_Account_Number
+   *
+   * @param {string} str
+   * @return {boolean}
+   */
+function hasValidIbanChecksum(str) {
+  var strippedStr = str.replace(/[^A-Z0-9]+/gi, '').toUpperCase(); // Keep only digits and A-Z latin alphabetic
+  var rearranged = strippedStr.slice(4) + strippedStr.slice(0, 4);
+  var alphaCapsReplacedWithDigits = rearranged.replace(/[A-Z]/g, function (char) {
+    return char.charCodeAt(0) - 55;
+  });
+  var remainder = alphaCapsReplacedWithDigits.match(/\d{1,7}/g).reduce(function (acc, value) {
+    return Number(acc + value) % 97;
+  }, '');
+  return remainder === 1;
+}
+function isIBAN(str) {
+  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+  (0, _assertString.default)(str);
+  return hasValidIbanFormat(str, options) && hasValidIbanChecksum(str);
+}
+var locales = exports.locales = Object.keys(ibanRegexThroughCountryCode);
+
+/***/ }),
+
+/***/ 3735:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isDivisibleBy;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _toFloat = _interopRequireDefault(__webpack_require__(1371));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function isDivisibleBy(str, num) {
+  (0, _assertString.default)(str);
+  return (0, _toFloat.default)(str) % parseInt(num, 10) === 0;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 3752:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = toDate;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function toDate(date) {
+  (0, _assertString.default)(date);
+  date = Date.parse(date);
+  return !isNaN(date) ? new Date(date) : null;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 3832:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isISO31661Alpha3;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+// from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3
+var validISO31661Alpha3CountriesCodes = new Set(['AFG', 'ALA', 'ALB', 'DZA', 'ASM', 'AND', 'AGO', 'AIA', 'ATA', 'ATG', 'ARG', 'ARM', 'ABW', 'AUS', 'AUT', 'AZE', 'BHS', 'BHR', 'BGD', 'BRB', 'BLR', 'BEL', 'BLZ', 'BEN', 'BMU', 'BTN', 'BOL', 'BES', 'BIH', 'BWA', 'BVT', 'BRA', 'IOT', 'BRN', 'BGR', 'BFA', 'BDI', 'KHM', 'CMR', 'CAN', 'CPV', 'CYM', 'CAF', 'TCD', 'CHL', 'CHN', 'CXR', 'CCK', 'COL', 'COM', 'COG', 'COD', 'COK', 'CRI', 'CIV', 'HRV', 'CUB', 'CUW', 'CYP', 'CZE', 'DNK', 'DJI', 'DMA', 'DOM', 'ECU', 'EGY', 'SLV', 'GNQ', 'ERI', 'EST', 'ETH', 'FLK', 'FRO', 'FJI', 'FIN', 'FRA', 'GUF', 'PYF', 'ATF', 'GAB', 'GMB', 'GEO', 'DEU', 'GHA', 'GIB', 'GRC', 'GRL', 'GRD', 'GLP', 'GUM', 'GTM', 'GGY', 'GIN', 'GNB', 'GUY', 'HTI', 'HMD', 'VAT', 'HND', 'HKG', 'HUN', 'ISL', 'IND', 'IDN', 'IRN', 'IRQ', 'IRL', 'IMN', 'ISR', 'ITA', 'JAM', 'JPN', 'JEY', 'JOR', 'KAZ', 'KEN', 'KIR', 'PRK', 'KOR', 'KWT', 'KGZ', 'LAO', 'LVA', 'LBN', 'LSO', 'LBR', 'LBY', 'LIE', 'LTU', 'LUX', 'MAC', 'MKD', 'MDG', 'MWI', 'MYS', 'MDV', 'MLI', 'MLT', 'MHL', 'MTQ', 'MRT', 'MUS', 'MYT', 'MEX', 'FSM', 'MDA', 'MCO', 'MNG', 'MNE', 'MSR', 'MAR', 'MOZ', 'MMR', 'NAM', 'NRU', 'NPL', 'NLD', 'NCL', 'NZL', 'NIC', 'NER', 'NGA', 'NIU', 'NFK', 'MNP', 'NOR', 'OMN', 'PAK', 'PLW', 'PSE', 'PAN', 'PNG', 'PRY', 'PER', 'PHL', 'PCN', 'POL', 'PRT', 'PRI', 'QAT', 'REU', 'ROU', 'RUS', 'RWA', 'BLM', 'SHN', 'KNA', 'LCA', 'MAF', 'SPM', 'VCT', 'WSM', 'SMR', 'STP', 'SAU', 'SEN', 'SRB', 'SYC', 'SLE', 'SGP', 'SXM', 'SVK', 'SVN', 'SLB', 'SOM', 'ZAF', 'SGS', 'SSD', 'ESP', 'LKA', 'SDN', 'SUR', 'SJM', 'SWZ', 'SWE', 'CHE', 'SYR', 'TWN', 'TJK', 'TZA', 'THA', 'TLS', 'TGO', 'TKL', 'TON', 'TTO', 'TUN', 'TUR', 'TKM', 'TCA', 'TUV', 'UGA', 'UKR', 'ARE', 'GBR', 'USA', 'UMI', 'URY', 'UZB', 'VUT', 'VEN', 'VNM', 'VGB', 'VIR', 'WLF', 'ESH', 'YEM', 'ZMB', 'ZWE']);
+function isISO31661Alpha3(str) {
+  (0, _assertString.default)(str);
+  return validISO31661Alpha3CountriesCodes.has(str.toUpperCase());
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 3906:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isPort;
+var _isInt = _interopRequireDefault(__webpack_require__(6084));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function isPort(str) {
+  return (0, _isInt.default)(str, {
+    allow_leading_zeroes: false,
+    min: 0,
+    max: 65535
+  });
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 3939:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isPostalCode;
+exports.locales = void 0;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+// common patterns
+var threeDigit = /^\d{3}$/;
+var fourDigit = /^\d{4}$/;
+var fiveDigit = /^\d{5}$/;
+var sixDigit = /^\d{6}$/;
+var patterns = {
+  AD: /^AD\d{3}$/,
+  AT: fourDigit,
+  AU: fourDigit,
+  AZ: /^AZ\d{4}$/,
+  BA: /^([7-8]\d{4}$)/,
+  BD: /^([1-8][0-9]{3}|9[0-4][0-9]{2})$/,
+  BE: fourDigit,
+  BG: fourDigit,
+  BR: /^\d{5}-?\d{3}$/,
+  BY: /^2[1-4]\d{4}$/,
+  CA: /^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][\s\-]?\d[ABCEGHJ-NPRSTV-Z]\d$/i,
+  CH: fourDigit,
+  CN: /^(0[1-7]|1[012356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[1-5]|8[1345]|9[09])\d{4}$/,
+  CO: /^(05|08|11|13|15|17|18|19|20|23|25|27|41|44|47|50|52|54|63|66|68|70|73|76|81|85|86|88|91|94|95|97|99)(\d{4})$/,
+  CZ: /^\d{3}\s?\d{2}$/,
+  DE: fiveDigit,
+  DK: fourDigit,
+  DO: fiveDigit,
+  DZ: fiveDigit,
+  EE: fiveDigit,
+  ES: /^(5[0-2]{1}|[0-4]{1}\d{1})\d{3}$/,
+  FI: fiveDigit,
+  FR: /^(?:(?:0[1-9]|[1-8]\d|9[0-5])\d{3}|97[1-46]\d{2})$/,
+  GB: /^(gir\s?0aa|[a-z]{1,2}\d[\da-z]?\s?(\d[a-z]{2})?)$/i,
+  GR: /^\d{3}\s?\d{2}$/,
+  HR: /^([1-5]\d{4}$)/,
+  HT: /^HT\d{4}$/,
+  HU: fourDigit,
+  ID: fiveDigit,
+  IE: /^(?!.*(?:o))[A-Za-z]\d[\dw]\s\w{4}$/i,
+  IL: /^(\d{5}|\d{7})$/,
+  IN: /^((?!10|29|35|54|55|65|66|86|87|88|89)[1-9][0-9]{5})$/,
+  IR: /^(?!(\d)\1{3})[13-9]{4}[1346-9][013-9]{5}$/,
+  IS: threeDigit,
+  IT: fiveDigit,
+  JP: /^\d{3}\-\d{4}$/,
+  KE: fiveDigit,
+  KR: /^(\d{5}|\d{6})$/,
+  LI: /^(948[5-9]|949[0-7])$/,
+  LT: /^LT\-\d{5}$/,
+  LU: fourDigit,
+  LV: /^LV\-\d{4}$/,
+  LK: fiveDigit,
+  MG: threeDigit,
+  MX: fiveDigit,
+  MT: /^[A-Za-z]{3}\s{0,1}\d{4}$/,
+  MY: fiveDigit,
+  NL: /^[1-9]\d{3}\s?(?!sa|sd|ss)[a-z]{2}$/i,
+  NO: fourDigit,
+  NP: /^(10|21|22|32|33|34|44|45|56|57)\d{3}$|^(977)$/i,
+  NZ: fourDigit,
+  // https://www.pakpost.gov.pk/postcodes.php
+  PK: fiveDigit,
+  PL: /^\d{2}\-\d{3}$/,
+  PR: /^00[679]\d{2}([ -]\d{4})?$/,
+  PT: /^\d{4}\-\d{3}?$/,
+  RO: sixDigit,
+  RU: sixDigit,
+  SA: fiveDigit,
+  SE: /^[1-9]\d{2}\s?\d{2}$/,
+  SG: sixDigit,
+  SI: fourDigit,
+  SK: /^\d{3}\s?\d{2}$/,
+  TH: fiveDigit,
+  TN: fourDigit,
+  TW: /^\d{3}(\d{2,3})?$/,
+  UA: fiveDigit,
+  US: /^\d{5}(-\d{4})?$/,
+  ZA: fourDigit,
+  ZM: fiveDigit
+};
+var locales = exports.locales = Object.keys(patterns);
+function isPostalCode(str, locale) {
+  (0, _assertString.default)(str);
+  if (locale in patterns) {
+    return patterns[locale].test(str);
+  } else if (locale === 'any') {
+    for (var key in patterns) {
+      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes
+      // istanbul ignore else
+      if (patterns.hasOwnProperty(key)) {
+        var pattern = patterns[key];
+        if (pattern.test(str)) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+  throw new Error("Invalid locale '".concat(locale, "'"));
+}
+
+/***/ }),
+
+/***/ 3973:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isHash;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var lengths = {
+  md5: 32,
+  md4: 32,
+  sha1: 40,
+  sha256: 64,
+  sha384: 96,
+  sha512: 128,
+  ripemd128: 32,
+  ripemd160: 40,
+  tiger128: 32,
+  tiger160: 40,
+  tiger192: 48,
+  crc32: 8,
+  crc32b: 8
+};
+function isHash(str, algorithm) {
+  (0, _assertString.default)(str);
+  var hash = new RegExp("^[a-fA-F0-9]{".concat(lengths[algorithm], "}$"));
+  return hash.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 4294:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isAscii;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/* eslint-disable no-control-regex */
+var ascii = /^[\x00-\x7F]+$/;
+/* eslint-enable no-control-regex */
+
+function isAscii(str) {
+  (0, _assertString.default)(str);
+  return ascii.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 4325:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isAbaRouting;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+// http://www.brainjar.com/js/validation/
+// https://www.aba.com/news-research/research-analysis/routing-number-policy-procedures
+// series reserved for future use are excluded
+var isRoutingReg = /^(?!(1[3-9])|(20)|(3[3-9])|(4[0-9])|(5[0-9])|(60)|(7[3-9])|(8[1-9])|(9[0-2])|(9[3-9]))[0-9]{9}$/;
+function isAbaRouting(str) {
+  (0, _assertString.default)(str);
+  if (!isRoutingReg.test(str)) return false;
+  var checkSumVal = 0;
+  for (var i = 0; i < str.length; i++) {
+    if (i % 3 === 0) checkSumVal += str[i] * 3;else if (i % 3 === 1) checkSumVal += str[i] * 7;else checkSumVal += str[i] * 1;
+  }
+  return checkSumVal % 10 === 0;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 4633:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isMimeType;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/*
+  Checks if the provided string matches to a correct Media type format (MIME type)
+
+  This function only checks is the string format follows the
+  established rules by the according RFC specifications.
+  This function supports 'charset' in textual media types
+  (https://tools.ietf.org/html/rfc6657).
+
+  This function does not check against all the media types listed
+  by the IANA (https://www.iana.org/assignments/media-types/media-types.xhtml)
+  because of lightness purposes : it would require to include
+  all these MIME types in this library, which would weigh it
+  significantly. This kind of effort maybe is not worth for the use that
+  this function has in this entire library.
+
+  More information in the RFC specifications :
+  - https://tools.ietf.org/html/rfc2045
+  - https://tools.ietf.org/html/rfc2046
+  - https://tools.ietf.org/html/rfc7231#section-3.1.1.1
+  - https://tools.ietf.org/html/rfc7231#section-3.1.1.5
+*/
+
+// Match simple MIME types
+// NB :
+//   Subtype length must not exceed 100 characters.
+//   This rule does not comply to the RFC specs (what is the max length ?).
+var mimeTypeSimple = /^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9\.\-\+_]{1,100}$/i; // eslint-disable-line max-len
+
+// Handle "charset" in "text/*"
+var mimeTypeText = /^text\/[a-zA-Z0-9\.\-\+]{1,100};\s?charset=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?$/i; // eslint-disable-line max-len
+
+// Handle "boundary" in "multipart/*"
+var mimeTypeMultipart = /^multipart\/[a-zA-Z0-9\.\-\+]{1,100}(;\s?(boundary|charset)=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?){0,2}$/i; // eslint-disable-line max-len
+
+function isMimeType(str) {
+  (0, _assertString.default)(str);
+  return mimeTypeSimple.test(str) || mimeTypeText.test(str) || mimeTypeMultipart.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 4636:
+/***/ ((module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = void 0;
+var includes = function includes(str, val) {
+  return str.indexOf(val) !== -1;
+};
+var _default = exports["default"] = includes;
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 4641:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isHexColor;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var hexcolor = /^#?([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$/i;
+function isHexColor(str) {
+  (0, _assertString.default)(str);
+  return hexcolor.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 4834:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.iso7064Check = iso7064Check;
+exports.luhnCheck = luhnCheck;
+exports.reverseMultiplyAndSum = reverseMultiplyAndSum;
+exports.verhoeffCheck = verhoeffCheck;
+/**
+ * Algorithmic validation functions
+ * May be used as is or implemented in the workflow of other validators.
+ */
+
+/*
+ * ISO 7064 validation function
+ * Called with a string of numbers (incl. check digit)
+ * to validate according to ISO 7064 (MOD 11, 10).
+ */
+function iso7064Check(str) {
+  var checkvalue = 10;
+  for (var i = 0; i < str.length - 1; i++) {
+    checkvalue = (parseInt(str[i], 10) + checkvalue) % 10 === 0 ? 10 * 2 % 11 : (parseInt(str[i], 10) + checkvalue) % 10 * 2 % 11;
+  }
+  checkvalue = checkvalue === 1 ? 0 : 11 - checkvalue;
+  return checkvalue === parseInt(str[10], 10);
+}
+
+/*
+ * Luhn (mod 10) validation function
+ * Called with a string of numbers (incl. check digit)
+ * to validate according to the Luhn algorithm.
+ */
+function luhnCheck(str) {
+  var checksum = 0;
+  var second = false;
+  for (var i = str.length - 1; i >= 0; i--) {
+    if (second) {
+      var product = parseInt(str[i], 10) * 2;
+      if (product > 9) {
+        // sum digits of product and add to checksum
+        checksum += product.toString().split('').map(function (a) {
+          return parseInt(a, 10);
+        }).reduce(function (a, b) {
+          return a + b;
+        }, 0);
+      } else {
+        checksum += product;
+      }
+    } else {
+      checksum += parseInt(str[i], 10);
+    }
+    second = !second;
+  }
+  return checksum % 10 === 0;
+}
+
+/*
+ * Reverse TIN multiplication and summation helper function
+ * Called with an array of single-digit integers and a base multiplier
+ * to calculate the sum of the digits multiplied in reverse.
+ * Normally used in variations of MOD 11 algorithmic checks.
+ */
+function reverseMultiplyAndSum(digits, base) {
+  var total = 0;
+  for (var i = 0; i < digits.length; i++) {
+    total += digits[i] * (base - i);
+  }
+  return total;
+}
+
+/*
+ * Verhoeff validation helper function
+ * Called with a string of numbers
+ * to validate according to the Verhoeff algorithm.
+ */
+function verhoeffCheck(str) {
+  var d_table = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 0, 6, 7, 8, 9, 5], [2, 3, 4, 0, 1, 7, 8, 9, 5, 6], [3, 4, 0, 1, 2, 8, 9, 5, 6, 7], [4, 0, 1, 2, 3, 9, 5, 6, 7, 8], [5, 9, 8, 7, 6, 0, 4, 3, 2, 1], [6, 5, 9, 8, 7, 1, 0, 4, 3, 2], [7, 6, 5, 9, 8, 2, 1, 0, 4, 3], [8, 7, 6, 5, 9, 3, 2, 1, 0, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]];
+  var p_table = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 5, 7, 6, 2, 8, 3, 0, 9, 4], [5, 8, 0, 3, 7, 9, 6, 1, 4, 2], [8, 9, 1, 6, 0, 4, 3, 5, 2, 7], [9, 4, 5, 3, 1, 2, 6, 8, 7, 0], [4, 2, 8, 6, 5, 7, 3, 9, 0, 1], [2, 7, 9, 3, 8, 0, 6, 4, 1, 5], [7, 0, 4, 6, 9, 1, 3, 2, 5, 8]];
+
+  // Copy (to prevent replacement) and reverse
+  var str_copy = str.split('').reverse().join('');
+  var checksum = 0;
+  for (var i = 0; i < str_copy.length; i++) {
+    checksum = d_table[checksum][p_table[i % 8][parseInt(str_copy[i], 10)]];
+  }
+  return checksum === 0;
+}
+
+/***/ }),
+
+/***/ 5186:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isUUID;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var uuid = {
+  1: /^[0-9A-F]{8}-[0-9A-F]{4}-1[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
+  2: /^[0-9A-F]{8}-[0-9A-F]{4}-2[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
+  3: /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
+  4: /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
+  5: /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
+  6: /^[0-9A-F]{8}-[0-9A-F]{4}-6[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
+  7: /^[0-9A-F]{8}-[0-9A-F]{4}-7[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
+  8: /^[0-9A-F]{8}-[0-9A-F]{4}-8[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
+  nil: /^00000000-0000-0000-0000-000000000000$/i,
+  max: /^ffffffff-ffff-ffff-ffff-ffffffffffff$/i,
+  loose: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i,
+  // From https://github.com/uuidjs/uuid/blob/main/src/regex.js
+  all: /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i
+};
+function isUUID(str, version) {
+  (0, _assertString.default)(str);
+  if (version === undefined || version === null) {
+    version = 'all';
+  }
+  return version in uuid ? uuid[version].test(str) : false;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 5251:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isMobilePhone;
+exports.locales = void 0;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/* eslint-disable max-len */
+var phones = {
+  'am-AM': /^(\+?374|0)(33|4[134]|55|77|88|9[13-689])\d{6}$/,
+  'ar-AE': /^((\+?971)|0)?5[024568]\d{7}$/,
+  'ar-BH': /^(\+?973)?(3|6)\d{7}$/,
+  'ar-DZ': /^(\+?213|0)(5|6|7)\d{8}$/,
+  'ar-LB': /^(\+?961)?((3|81)\d{6}|7\d{7})$/,
+  'ar-EG': /^((\+?20)|0)?1[0125]\d{8}$/,
+  'ar-IQ': /^(\+?964|0)?7[0-9]\d{8}$/,
+  'ar-JO': /^(\+?962|0)?7[789]\d{7}$/,
+  'ar-KW': /^(\+?965)([569]\d{7}|41\d{6})$/,
+  'ar-LY': /^((\+?218)|0)?(9[1-6]\d{7}|[1-8]\d{7,9})$/,
+  'ar-MA': /^(?:(?:\+|00)212|0)[5-7]\d{8}$/,
+  'ar-OM': /^((\+|00)968)?([79][1-9])\d{6}$/,
+  'ar-PS': /^(\+?970|0)5[6|9](\d{7})$/,
+  'ar-SA': /^(!?(\+?966)|0)?5\d{8}$/,
+  'ar-SD': /^((\+?249)|0)?(9[012369]|1[012])\d{7}$/,
+  'ar-SY': /^(!?(\+?963)|0)?9\d{8}$/,
+  'ar-TN': /^(\+?216)?[2459]\d{7}$/,
+  'az-AZ': /^(\+994|0)(10|5[015]|7[07]|99)\d{7}$/,
+  'bs-BA': /^((((\+|00)3876)|06))((([0-3]|[5-6])\d{6})|(4\d{7}))$/,
+  'be-BY': /^(\+?375)?(24|25|29|33|44)\d{7}$/,
+  'bg-BG': /^(\+?359|0)?8[789]\d{7}$/,
+  'bn-BD': /^(\+?880|0)1[13456789][0-9]{8}$/,
+  'ca-AD': /^(\+376)?[346]\d{5}$/,
+  'cs-CZ': /^(\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,
+  'da-DK': /^(\+?45)?\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2}$/,
+  'de-DE': /^((\+49|0)1)(5[0-25-9]\d|6([23]|0\d?)|7([0-57-9]|6\d))\d{7,9}$/,
+  'de-AT': /^(\+43|0)\d{1,4}\d{3,12}$/,
+  'de-CH': /^(\+41|0)([1-9])\d{1,9}$/,
+  'de-LU': /^(\+352)?((6\d1)\d{6})$/,
+  'dv-MV': /^(\+?960)?(7[2-9]|9[1-9])\d{5}$/,
+  'el-GR': /^(\+?30|0)?6(8[5-9]|9(?![26])[0-9])\d{7}$/,
+  'el-CY': /^(\+?357?)?(9(9|7|6|5|4)\d{6})$/,
+  'en-AI': /^(\+?1|0)264(?:2(35|92)|4(?:6[1-2]|76|97)|5(?:3[6-9]|8[1-4])|7(?:2(4|9)|72))\d{4}$/,
+  'en-AU': /^(\+?61|0)4\d{8}$/,
+  'en-AG': /^(?:\+1|1)268(?:464|7(?:1[3-9]|[28]\d|3[0246]|64|7[0-689]))\d{4}$/,
+  'en-BM': /^(\+?1)?441(((3|7)\d{6}$)|(5[0-3][0-9]\d{4}$)|(59\d{5}$))/,
+  'en-BS': /^(\+?1[-\s]?|0)?\(?242\)?[-\s]?\d{3}[-\s]?\d{4}$/,
+  'en-GB': /^(\+?44|0)7[1-9]\d{8}$/,
+  'en-GG': /^(\+?44|0)1481\d{6}$/,
+  'en-GH': /^(\+233|0)(20|50|24|54|27|57|26|56|23|53|28|55|59)\d{7}$/,
+  'en-GY': /^(\+592|0)6\d{6}$/,
+  'en-HK': /^(\+?852[-\s]?)?[456789]\d{3}[-\s]?\d{4}$/,
+  'en-MO': /^(\+?853[-\s]?)?[6]\d{3}[-\s]?\d{4}$/,
+  'en-IE': /^(\+?353|0)8[356789]\d{7}$/,
+  'en-IN': /^(\+?91|0)?[6789]\d{9}$/,
+  'en-JM': /^(\+?876)?\d{7}$/,
+  'en-KE': /^(\+?254|0)(7|1)\d{8}$/,
+  'fr-CF': /^(\+?236| ?)(70|75|77|72|21|22)\d{6}$/,
+  'en-SS': /^(\+?211|0)(9[1257])\d{7}$/,
+  'en-KI': /^((\+686|686)?)?( )?((6|7)(2|3|8)[0-9]{6})$/,
+  'en-KN': /^(?:\+1|1)869(?:46\d|48[89]|55[6-8]|66\d|76[02-7])\d{4}$/,
+  'en-LS': /^(\+?266)(22|28|57|58|59|27|52)\d{6}$/,
+  'en-MT': /^(\+?356|0)?(99|79|77|21|27|22|25)[0-9]{6}$/,
+  'en-MU': /^(\+?230|0)?\d{8}$/,
+  'en-MW': /^(\+?265|0)(((77|88|31|99|98|21)\d{7})|(((111)|1)\d{6})|(32000\d{4}))$/,
+  'en-NA': /^(\+?264|0)(6|8)\d{7}$/,
+  'en-NG': /^(\+?234|0)?[789]\d{9}$/,
+  'en-NZ': /^(\+?64|0)[28]\d{7,9}$/,
+  'en-PG': /^(\+?675|0)?(7\d|8[18])\d{6}$/,
+  'en-PK': /^((00|\+)?92|0)3[0-6]\d{8}$/,
+  'en-PH': /^(09|\+639)\d{9}$/,
+  'en-RW': /^(\+?250|0)?[7]\d{8}$/,
+  'en-SG': /^(\+65)?[3689]\d{7}$/,
+  'en-SL': /^(\+?232|0)\d{8}$/,
+  'en-TZ': /^(\+?255|0)?[67]\d{8}$/,
+  'en-UG': /^(\+?256|0)?[7]\d{8}$/,
+  'en-US': /^((\+1|1)?( |-)?)?(\([2-9][0-9]{2}\)|[2-9][0-9]{2})( |-)?([2-9][0-9]{2}( |-)?[0-9]{4})$/,
+  'en-ZA': /^(\+?27|0)\d{9}$/,
+  'en-ZM': /^(\+?26)?0[79][567]\d{7}$/,
+  'en-ZW': /^(\+263)[0-9]{9}$/,
+  'en-BW': /^(\+?267)?(7[1-8]{1})\d{6}$/,
+  'es-AR': /^\+?549(11|[2368]\d)\d{8}$/,
+  'es-BO': /^(\+?591)?(6|7)\d{7}$/,
+  'es-CO': /^(\+?57)?3(0(0|1|2|4|5)|1\d|2[0-4]|5(0|1))\d{7}$/,
+  'es-CL': /^(\+?56|0)[2-9]\d{1}\d{7}$/,
+  'es-CR': /^(\+506)?[2-8]\d{7}$/,
+  'es-CU': /^(\+53|0053)?5\d{7}$/,
+  'es-DO': /^(\+?1)?8[024]9\d{7}$/,
+  'es-HN': /^(\+?504)?[9|8|3|2]\d{7}$/,
+  'es-EC': /^(\+?593|0)([2-7]|9[2-9])\d{7}$/,
+  'es-ES': /^(\+?34)?[6|7]\d{8}$/,
+  'es-GT': /^(\+?502)?[2|6|7]\d{7}$/,
+  'es-PE': /^(\+?51)?9\d{8}$/,
+  'es-MX': /^(\+?52)?(1|01)?\d{10,11}$/,
+  'es-NI': /^(\+?505)\d{7,8}$/,
+  'es-PA': /^(\+?507)\d{7,8}$/,
+  'es-PY': /^(\+?595|0)9[9876]\d{7}$/,
+  'es-SV': /^(\+?503)?[67]\d{7}$/,
+  'es-UY': /^(\+598|0)9[1-9][\d]{6}$/,
+  'es-VE': /^(\+?58)?(2|4)\d{9}$/,
+  'et-EE': /^(\+?372)?\s?(5|8[1-4])\s?([0-9]\s?){6,7}$/,
+  'fa-IR': /^(\+?98[\-\s]?|0)9[0-39]\d[\-\s]?\d{3}[\-\s]?\d{4}$/,
+  'fi-FI': /^(\+?358|0)\s?(4[0-6]|50)\s?(\d\s?){4,8}$/,
+  'fj-FJ': /^(\+?679)?\s?\d{3}\s?\d{4}$/,
+  'fo-FO': /^(\+?298)?\s?\d{2}\s?\d{2}\s?\d{2}$/,
+  'fr-BF': /^(\+226|0)[67]\d{7}$/,
+  'fr-BJ': /^(\+229)\d{8}$/,
+  'fr-CD': /^(\+?243|0)?(8|9)\d{8}$/,
+  'fr-CM': /^(\+?237)6[0-9]{8}$/,
+  'fr-FR': /^(\+?33|0)[67]\d{8}$/,
+  'fr-GF': /^(\+?594|0|00594)[67]\d{8}$/,
+  'fr-GP': /^(\+?590|0|00590)[67]\d{8}$/,
+  'fr-MQ': /^(\+?596|0|00596)[67]\d{8}$/,
+  'fr-PF': /^(\+?689)?8[789]\d{6}$/,
+  'fr-RE': /^(\+?262|0|00262)[67]\d{8}$/,
+  'fr-WF': /^(\+681)?\d{6}$/,
+  'he-IL': /^(\+972|0)([23489]|5[012345689]|77)[1-9]\d{6}$/,
+  'hu-HU': /^(\+?36|06)(20|30|31|50|70)\d{7}$/,
+  'id-ID': /^(\+?62|0)8(1[123456789]|2[1238]|3[1238]|5[12356789]|7[78]|9[56789]|8[123456789])([\s?|\d]{5,11})$/,
+  'ir-IR': /^(\+98|0)?9\d{9}$/,
+  'it-IT': /^(\+?39)?\s?3\d{2} ?\d{6,7}$/,
+  'it-SM': /^((\+378)|(0549)|(\+390549)|(\+3780549))?6\d{5,9}$/,
+  'ja-JP': /^(\+81[ \-]?(\(0\))?|0)[6789]0[ \-]?\d{4}[ \-]?\d{4}$/,
+  'ka-GE': /^(\+?995)?(79\d{7}|5\d{8})$/,
+  'kk-KZ': /^(\+?7|8)?7\d{9}$/,
+  'kl-GL': /^(\+?299)?\s?\d{2}\s?\d{2}\s?\d{2}$/,
+  'ko-KR': /^((\+?82)[ \-]?)?0?1([0|1|6|7|8|9]{1})[ \-]?\d{3,4}[ \-]?\d{4}$/,
+  'ky-KG': /^(\+996\s?)?(22[0-9]|50[0-9]|55[0-9]|70[0-9]|75[0-9]|77[0-9]|880|990|995|996|997|998)\s?\d{3}\s?\d{3}$/,
+  'lt-LT': /^(\+370|8)\d{8}$/,
+  'lv-LV': /^(\+?371)2\d{7}$/,
+  'mg-MG': /^((\+?261|0)(2|3)\d)?\d{7}$/,
+  'mn-MN': /^(\+|00|011)?976(77|81|88|91|94|95|96|99)\d{6}$/,
+  'my-MM': /^(\+?959|09|9)(2[5-7]|3[1-2]|4[0-5]|6[6-9]|7[5-9]|9[6-9])[0-9]{7}$/,
+  'ms-MY': /^(\+?60|0)1(([0145](-|\s)?\d{7,8})|([236-9](-|\s)?\d{7}))$/,
+  'mz-MZ': /^(\+?258)?8[234567]\d{7}$/,
+  'nb-NO': /^(\+?47)?[49]\d{7}$/,
+  'ne-NP': /^(\+?977)?9[78]\d{8}$/,
+  'nl-BE': /^(\+?32|0)4\d{8}$/,
+  'nl-NL': /^(((\+|00)?31\(0\))|((\+|00)?31)|0)6{1}\d{8}$/,
+  'nl-AW': /^(\+)?297(56|59|64|73|74|99)\d{5}$/,
+  'nn-NO': /^(\+?47)?[49]\d{7}$/,
+  'pl-PL': /^(\+?48)? ?([5-8]\d|45) ?\d{3} ?\d{2} ?\d{2}$/,
+  'pt-BR': /^((\+?55\ ?[1-9]{2}\ ?)|(\+?55\ ?\([1-9]{2}\)\ ?)|(0[1-9]{2}\ ?)|(\([1-9]{2}\)\ ?)|([1-9]{2}\ ?))((\d{4}\-?\d{4})|(9[1-9]{1}\d{3}\-?\d{4}))$/,
+  'pt-PT': /^(\+?351)?9[1236]\d{7}$/,
+  'pt-AO': /^(\+?244)?9\d{8}$/,
+  'ro-MD': /^(\+?373|0)((6(0|1|2|6|7|8|9))|(7(6|7|8|9)))\d{6}$/,
+  'ro-RO': /^(\+?40|0)\s?7\d{2}(\/|\s|\.|-)?\d{3}(\s|\.|-)?\d{3}$/,
+  'ru-RU': /^(\+?7|8)?9\d{9}$/,
+  'si-LK': /^(?:0|94|\+94)?(7(0|1|2|4|5|6|7|8)( |-)?)\d{7}$/,
+  'sl-SI': /^(\+386\s?|0)(\d{1}\s?\d{3}\s?\d{2}\s?\d{2}|\d{2}\s?\d{3}\s?\d{3})$/,
+  'sk-SK': /^(\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,
+  'so-SO': /^(\+?252|0)((6[0-9])\d{7}|(7[1-9])\d{7})$/,
+  'sq-AL': /^(\+355|0)6[2-9]\d{7}$/,
+  'sr-RS': /^(\+3816|06)[- \d]{5,9}$/,
+  'sv-SE': /^(\+?46|0)[\s\-]?7[\s\-]?[02369]([\s\-]?\d){7}$/,
+  'tg-TJ': /^(\+?992)?[5][5]\d{7}$/,
+  'th-TH': /^(\+66|66|0)\d{9}$/,
+  'tr-TR': /^(\+?90|0)?5\d{9}$/,
+  'tk-TM': /^(\+993|993|8)\d{8}$/,
+  'uk-UA': /^(\+?38)?0(50|6[36-8]|7[357]|9[1-9])\d{7}$/,
+  'uz-UZ': /^(\+?998)?(6[125-79]|7[1-69]|88|9\d)\d{7}$/,
+  'vi-VN': /^((\+?84)|0)((3([2-9]))|(5([25689]))|(7([0|6-9]))|(8([1-9]))|(9([0-9])))([0-9]{7})$/,
+  'zh-CN': /^((\+|00)86)?(1[3-9]|9[28])\d{9}$/,
+  'zh-TW': /^(\+?886\-?|0)?9\d{8}$/,
+  'dz-BT': /^(\+?975|0)?(17|16|77|02)\d{6}$/,
+  'ar-YE': /^(((\+|00)9677|0?7)[0137]\d{7}|((\+|00)967|0)[1-7]\d{6})$/,
+  'ar-EH': /^(\+?212|0)[\s\-]?(5288|5289)[\s\-]?\d{5}$/,
+  'fa-AF': /^(\+93|0)?(2{1}[0-8]{1}|[3-5]{1}[0-4]{1})(\d{7})$/,
+  'mk-MK': /^(\+?389|0)?((?:2[2-9]\d{6}|(?:3[1-4]|4[2-8])\d{6}|500\d{5}|5[2-9]\d{6}|7[0-9][2-9]\d{5}|8[1-9]\d{6}|800\d{5}|8009\d{4}))$/
+};
+/* eslint-enable max-len */
+
+// aliases
+phones['en-CA'] = phones['en-US'];
+phones['fr-CA'] = phones['en-CA'];
+phones['fr-BE'] = phones['nl-BE'];
+phones['zh-HK'] = phones['en-HK'];
+phones['zh-MO'] = phones['en-MO'];
+phones['ga-IE'] = phones['en-IE'];
+phones['fr-CH'] = phones['de-CH'];
+phones['it-CH'] = phones['fr-CH'];
+function isMobilePhone(str, locale, options) {
+  (0, _assertString.default)(str);
+  if (options && options.strictMode && !str.startsWith('+')) {
+    return false;
+  }
+  if (Array.isArray(locale)) {
+    return locale.some(function (key) {
+      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes
+      // istanbul ignore else
+      if (phones.hasOwnProperty(key)) {
+        var phone = phones[key];
+        if (phone.test(str)) {
+          return true;
+        }
+      }
+      return false;
+    });
+  } else if (locale in phones) {
+    return phones[locale].test(str);
+    // alias falsey locale as 'any'
+  } else if (!locale || locale === 'any') {
+    for (var key in phones) {
+      // istanbul ignore else
+      if (phones.hasOwnProperty(key)) {
+        var phone = phones[key];
+        if (phone.test(str)) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+  throw new Error("Invalid locale '".concat(locale, "'"));
+}
+var locales = exports.locales = Object.keys(phones);
+
+/***/ }),
+
+/***/ 5259:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isBIC;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _isISO31661Alpha = __webpack_require__(8447);
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+// https://en.wikipedia.org/wiki/ISO_9362
+var isBICReg = /^[A-Za-z]{6}[A-Za-z0-9]{2}([A-Za-z0-9]{3})?$/;
+function isBIC(str) {
+  (0, _assertString.default)(str);
+
+  // toUpperCase() should be removed when a new major version goes out that changes
+  // the regex to [A-Z] (per the spec).
+  var countryCode = str.slice(4, 6).toUpperCase();
+  if (!_isISO31661Alpha.CountryCodes.has(countryCode) && countryCode !== 'XK') {
+    return false;
+  }
+  return isBICReg.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 5366:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isVAT;
+exports.vatMatchers = void 0;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var algorithms = _interopRequireWildcard(__webpack_require__(4834));
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var AU = function AU(str) {
+  var match = str.match(/^(AU)?(\d{11})$/);
+  if (!match) {
+    return false;
+  }
+  // @see {@link https://abr.business.gov.au/Help/AbnFormat}
+  var weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
+  str = str.replace(/^AU/, '');
+  var ABN = (parseInt(str.slice(0, 1), 10) - 1).toString() + str.slice(1);
+  var total = 0;
+  for (var i = 0; i < 11; i++) {
+    total += weights[i] * ABN.charAt(i);
+  }
+  return total !== 0 && total % 89 === 0;
+};
+var CH = function CH(str) {
+  // @see {@link https://www.ech.ch/de/ech/ech-0097/5.2.0}
+  var hasValidCheckNumber = function hasValidCheckNumber(digits) {
+    var lastDigit = digits.pop(); // used as check number
+    var weights = [5, 4, 3, 2, 7, 6, 5, 4];
+    var calculatedCheckNumber = (11 - digits.reduce(function (acc, el, idx) {
+      return acc + el * weights[idx];
+    }, 0) % 11) % 11;
+    return lastDigit === calculatedCheckNumber;
+  };
+
+  // @see {@link https://www.estv.admin.ch/estv/de/home/mehrwertsteuer/uid/mwst-uid-nummer.html}
+  return /^(CHE[- ]?)?(\d{9}|(\d{3}\.\d{3}\.\d{3})|(\d{3} \d{3} \d{3})) ?(TVA|MWST|IVA)?$/.test(str) && hasValidCheckNumber(str.match(/\d/g).map(function (el) {
+    return +el;
+  }));
+};
+var PT = function PT(str) {
+  var match = str.match(/^(PT)?(\d{9})$/);
+  if (!match) {
+    return false;
+  }
+  var tin = match[2];
+  var checksum = 11 - algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 8).map(function (a) {
+    return parseInt(a, 10);
+  }), 9) % 11;
+  if (checksum > 9) {
+    return parseInt(tin[8], 10) === 0;
+  }
+  return checksum === parseInt(tin[8], 10);
+};
+var vatMatchers = exports.vatMatchers = {
+  /**

+   * European Union VAT identification numbers

+   */
+  AT: function AT(str) {
+    return /^(AT)?U\d{8}$/.test(str);
+  },
+  BE: function BE(str) {
+    return /^(BE)?\d{10}$/.test(str);
+  },
+  BG: function BG(str) {
+    return /^(BG)?\d{9,10}$/.test(str);
+  },
+  HR: function HR(str) {
+    return /^(HR)?\d{11}$/.test(str);
+  },
+  CY: function CY(str) {
+    return /^(CY)?\w{9}$/.test(str);
+  },
+  CZ: function CZ(str) {
+    return /^(CZ)?\d{8,10}$/.test(str);
+  },
+  DK: function DK(str) {
+    return /^(DK)?\d{8}$/.test(str);
+  },
+  EE: function EE(str) {
+    return /^(EE)?\d{9}$/.test(str);
+  },
+  FI: function FI(str) {
+    return /^(FI)?\d{8}$/.test(str);
+  },
+  FR: function FR(str) {
+    return /^(FR)?\w{2}\d{9}$/.test(str);
+  },
+  DE: function DE(str) {
+    return /^(DE)?\d{9}$/.test(str);
+  },
+  EL: function EL(str) {
+    return /^(EL)?\d{9}$/.test(str);
+  },
+  HU: function HU(str) {
+    return /^(HU)?\d{8}$/.test(str);
+  },
+  IE: function IE(str) {
+    return /^(IE)?\d{7}\w{1}(W)?$/.test(str);
+  },
+  IT: function IT(str) {
+    return /^(IT)?\d{11}$/.test(str);
+  },
+  LV: function LV(str) {
+    return /^(LV)?\d{11}$/.test(str);
+  },
+  LT: function LT(str) {
+    return /^(LT)?\d{9,12}$/.test(str);
+  },
+  LU: function LU(str) {
+    return /^(LU)?\d{8}$/.test(str);
+  },
+  MT: function MT(str) {
+    return /^(MT)?\d{8}$/.test(str);
+  },
+  NL: function NL(str) {
+    return /^(NL)?\d{9}B\d{2}$/.test(str);
+  },
+  PL: function PL(str) {
+    return /^(PL)?(\d{10}|(\d{3}-\d{3}-\d{2}-\d{2})|(\d{3}-\d{2}-\d{2}-\d{3}))$/.test(str);
+  },
+  PT: PT,
+  RO: function RO(str) {
+    return /^(RO)?\d{2,10}$/.test(str);
+  },
+  SK: function SK(str) {
+    return /^(SK)?\d{10}$/.test(str);
+  },
+  SI: function SI(str) {
+    return /^(SI)?\d{8}$/.test(str);
+  },
+  ES: function ES(str) {
+    return /^(ES)?\w\d{7}[A-Z]$/.test(str);
+  },
+  SE: function SE(str) {
+    return /^(SE)?\d{12}$/.test(str);
+  },
+  /**

+   * VAT numbers of non-EU countries

+   */
+  AL: function AL(str) {
+    return /^(AL)?\w{9}[A-Z]$/.test(str);
+  },
+  MK: function MK(str) {
+    return /^(MK)?\d{13}$/.test(str);
+  },
+  AU: AU,
+  BY: function BY(str) {
+    return /^(\u0423\u041d\u041f )?\d{9}$/.test(str);
+  },
+  CA: function CA(str) {
+    return /^(CA)?\d{9}$/.test(str);
+  },
+  IS: function IS(str) {
+    return /^(IS)?\d{5,6}$/.test(str);
+  },
+  IN: function IN(str) {
+    return /^(IN)?\d{15}$/.test(str);
+  },
+  ID: function ID(str) {
+    return /^(ID)?(\d{15}|(\d{2}.\d{3}.\d{3}.\d{1}-\d{3}.\d{3}))$/.test(str);
+  },
+  IL: function IL(str) {
+    return /^(IL)?\d{9}$/.test(str);
+  },
+  KZ: function KZ(str) {
+    return /^(KZ)?\d{12}$/.test(str);
+  },
+  NZ: function NZ(str) {
+    return /^(NZ)?\d{9}$/.test(str);
+  },
+  NG: function NG(str) {
+    return /^(NG)?(\d{12}|(\d{8}-\d{4}))$/.test(str);
+  },
+  NO: function NO(str) {
+    return /^(NO)?\d{9}MVA$/.test(str);
+  },
+  PH: function PH(str) {
+    return /^(PH)?(\d{12}|\d{3} \d{3} \d{3} \d{3})$/.test(str);
+  },
+  RU: function RU(str) {
+    return /^(RU)?(\d{10}|\d{12})$/.test(str);
+  },
+  SM: function SM(str) {
+    return /^(SM)?\d{5}$/.test(str);
+  },
+  SA: function SA(str) {
+    return /^(SA)?\d{15}$/.test(str);
+  },
+  RS: function RS(str) {
+    return /^(RS)?\d{9}$/.test(str);
+  },
+  CH: CH,
+  TR: function TR(str) {
+    return /^(TR)?\d{10}$/.test(str);
+  },
+  UA: function UA(str) {
+    return /^(UA)?\d{12}$/.test(str);
+  },
+  GB: function GB(str) {
+    return /^GB((\d{3} \d{4} ([0-8][0-9]|9[0-6]))|(\d{9} \d{3})|(((GD[0-4])|(HA[5-9]))[0-9]{2}))$/.test(str);
+  },
+  UZ: function UZ(str) {
+    return /^(UZ)?\d{9}$/.test(str);
+  },
+  /**

+   * VAT numbers of Latin American countries

+   */
+  AR: function AR(str) {
+    return /^(AR)?\d{11}$/.test(str);
+  },
+  BO: function BO(str) {
+    return /^(BO)?\d{7}$/.test(str);
+  },
+  BR: function BR(str) {
+    return /^(BR)?((\d{2}.\d{3}.\d{3}\/\d{4}-\d{2})|(\d{3}.\d{3}.\d{3}-\d{2}))$/.test(str);
+  },
+  CL: function CL(str) {
+    return /^(CL)?\d{8}-\d{1}$/.test(str);
+  },
+  CO: function CO(str) {
+    return /^(CO)?\d{10}$/.test(str);
+  },
+  CR: function CR(str) {
+    return /^(CR)?\d{9,12}$/.test(str);
+  },
+  EC: function EC(str) {
+    return /^(EC)?\d{13}$/.test(str);
+  },
+  SV: function SV(str) {
+    return /^(SV)?\d{4}-\d{6}-\d{3}-\d{1}$/.test(str);
+  },
+  GT: function GT(str) {
+    return /^(GT)?\d{7}-\d{1}$/.test(str);
+  },
+  HN: function HN(str) {
+    return /^(HN)?$/.test(str);
+  },
+  MX: function MX(str) {
+    return /^(MX)?\w{3,4}\d{6}\w{3}$/.test(str);
+  },
+  NI: function NI(str) {
+    return /^(NI)?\d{3}-\d{6}-\d{4}\w{1}$/.test(str);
+  },
+  PA: function PA(str) {
+    return /^(PA)?$/.test(str);
+  },
+  PY: function PY(str) {
+    return /^(PY)?\d{6,8}-\d{1}$/.test(str);
+  },
+  PE: function PE(str) {
+    return /^(PE)?\d{11}$/.test(str);
+  },
+  DO: function DO(str) {
+    return /^(DO)?(\d{11}|(\d{3}-\d{7}-\d{1})|[1,4,5]{1}\d{8}|([1,4,5]{1})-\d{2}-\d{5}-\d{1})$/.test(str);
+  },
+  UY: function UY(str) {
+    return /^(UY)?\d{12}$/.test(str);
+  },
+  VE: function VE(str) {
+    return /^(VE)?[J,G,V,E]{1}-(\d{9}|(\d{8}-\d{1}))$/.test(str);
+  }
+};
+function isVAT(str, countryCode) {
+  (0, _assertString.default)(str);
+  (0, _assertString.default)(countryCode);
+  if (countryCode in vatMatchers) {
+    return vatMatchers[countryCode](str);
+  }
+  throw new Error("Invalid country code: '".concat(countryCode, "'"));
+}
+
+/***/ }),
+
+/***/ 5372:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isIP;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+/**
+11.3.  Examples
+
+   The following addresses
+
+             fe80::1234 (on the 1st link of the node)
+             ff02::5678 (on the 5th link of the node)
+             ff08::9abc (on the 10th organization of the node)
+
+   would be represented as follows:
+
+             fe80::1234%1
+             ff02::5678%5
+             ff08::9abc%10
+
+   (Here we assume a natural translation from a zone index to the
+   <zone_id> part, where the Nth zone of any scope is translated into
+   "N".)
+
+   If we use interface names as <zone_id>, those addresses could also be
+   represented as follows:
+
+            fe80::1234%ne0
+            ff02::5678%pvc1.3
+            ff08::9abc%interface10
+
+   where the interface "ne0" belongs to the 1st link, "pvc1.3" belongs
+   to the 5th link, and "interface10" belongs to the 10th organization.
+ * * */
+var IPv4SegmentFormat = '(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
+var IPv4AddressFormat = "(".concat(IPv4SegmentFormat, "[.]){3}").concat(IPv4SegmentFormat);
+var IPv4AddressRegExp = new RegExp("^".concat(IPv4AddressFormat, "$"));
+var IPv6SegmentFormat = '(?:[0-9a-fA-F]{1,4})';
+var IPv6AddressRegExp = new RegExp('^(' + "(?:".concat(IPv6SegmentFormat, ":){7}(?:").concat(IPv6SegmentFormat, "|:)|") + "(?:".concat(IPv6SegmentFormat, ":){6}(?:").concat(IPv4AddressFormat, "|:").concat(IPv6SegmentFormat, "|:)|") + "(?:".concat(IPv6SegmentFormat, ":){5}(?::").concat(IPv4AddressFormat, "|(:").concat(IPv6SegmentFormat, "){1,2}|:)|") + "(?:".concat(IPv6SegmentFormat, ":){4}(?:(:").concat(IPv6SegmentFormat, "){0,1}:").concat(IPv4AddressFormat, "|(:").concat(IPv6SegmentFormat, "){1,3}|:)|") + "(?:".concat(IPv6SegmentFormat, ":){3}(?:(:").concat(IPv6SegmentFormat, "){0,2}:").concat(IPv4AddressFormat, "|(:").concat(IPv6SegmentFormat, "){1,4}|:)|") + "(?:".concat(IPv6SegmentFormat, ":){2}(?:(:").concat(IPv6SegmentFormat, "){0,3}:").concat(IPv4AddressFormat, "|(:").concat(IPv6SegmentFormat, "){1,5}|:)|") + "(?:".concat(IPv6SegmentFormat, ":){1}(?:(:").concat(IPv6SegmentFormat, "){0,4}:").concat(IPv4AddressFormat, "|(:").concat(IPv6SegmentFormat, "){1,6}|:)|") + "(?::((?::".concat(IPv6SegmentFormat, "){0,5}:").concat(IPv4AddressFormat, "|(?::").concat(IPv6SegmentFormat, "){1,7}|:))") + ')(%[0-9a-zA-Z.]{1,})?$');
+function isIP(ipAddress) {
+  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+  (0, _assertString.default)(ipAddress);
+
+  // accessing 'arguments' for backwards compatibility: isIP(ipAddress [, version])
+  // eslint-disable-next-line prefer-rest-params
+  var version = (_typeof(options) === 'object' ? options.version : arguments[1]) || '';
+  if (!version) {
+    return isIP(ipAddress, {
+      version: 4
+    }) || isIP(ipAddress, {
+      version: 6
+    });
+  }
+  if (version.toString() === '4') {
+    return IPv4AddressRegExp.test(ipAddress);
+  }
+  if (version.toString() === '6') {
+    return IPv6AddressRegExp.test(ipAddress);
+  }
+  return false;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 5467:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isRgbColor;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } /* eslint-disable prefer-rest-params */
+var rgbColor = /^rgb\((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]),){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\)$/;
+var rgbaColor = /^rgba\((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]),){3}(0?\.\d\d?|1(\.0)?|0(\.0)?)\)$/;
+var rgbColorPercent = /^rgb\((([0-9]%|[1-9][0-9]%|100%),){2}([0-9]%|[1-9][0-9]%|100%)\)$/;
+var rgbaColorPercent = /^rgba\((([0-9]%|[1-9][0-9]%|100%),){3}(0?\.\d\d?|1(\.0)?|0(\.0)?)\)$/;
+var startsWithRgb = /^rgba?/;
+function isRgbColor(str, options) {
+  (0, _assertString.default)(str);
+  // default options to true for percent and false for spaces
+  var allowSpaces = false;
+  var includePercentValues = true;
+  if (_typeof(options) !== 'object') {
+    if (arguments.length >= 2) {
+      includePercentValues = arguments[1];
+    }
+  } else {
+    allowSpaces = options.allowSpaces !== undefined ? options.allowSpaces : allowSpaces;
+    includePercentValues = options.includePercentValues !== undefined ? options.includePercentValues : includePercentValues;
+  }
+  if (allowSpaces) {
+    // make sure it starts with continous rgba? without spaces before stripping
+    if (!startsWithRgb.test(str)) {
+      return false;
+    }
+    // strip all whitespace
+    str = str.replace(/\s/g, '');
+  }
+  if (!includePercentValues) {
+    return rgbColor.test(str) || rgbaColor.test(str);
+  }
+  return rgbColor.test(str) || rgbaColor.test(str) || rgbColorPercent.test(str) || rgbaColorPercent.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 5577:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isUppercase;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function isUppercase(str) {
+  (0, _assertString.default)(str);
+  return str === str.toUpperCase();
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 5730:
+/***/ ((module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = multilineRegexp;
+/**
+ * Build RegExp object from an array
+ * of multiple/multi-line regexp parts
+ *
+ * @param {string[]} parts
+ * @param {string} flags
+ * @return {object} - RegExp object
+ */
+function multilineRegexp(parts, flags) {
+  var regexpAsStringLiteral = parts.join('');
+  return new RegExp(regexpAsStringLiteral, flags);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 5748:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isBtcAddress;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var bech32 = /^(bc1|tb1|bc1p|tb1p)[ac-hj-np-z02-9]{39,58}$/;
+var base58 = /^(1|2|3|m)[A-HJ-NP-Za-km-z1-9]{25,39}$/;
+function isBtcAddress(str) {
+  (0, _assertString.default)(str);
+  return bech32.test(str) || base58.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 5751:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isJSON;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _includesArray = _interopRequireDefault(__webpack_require__(8644));
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+var default_json_options = {
+  allow_primitives: false
+};
+function isJSON(str, options) {
+  (0, _assertString.default)(str);
+  try {
+    options = (0, _merge.default)(options, default_json_options);
+    var primitives = [];
+    if (options.allow_primitives) {
+      primitives = [null, false, true];
+    }
+    var obj = JSON.parse(str);
+    return (0, _includesArray.default)(primitives, obj) || !!obj && _typeof(obj) === 'object';
+  } catch (e) {/* ignore */}
+  return false;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 5772:
+/***/ ((module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = toString;
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function toString(input) {
+  if (_typeof(input) === 'object' && input !== null) {
+    if (typeof input.toString === 'function') {
+      input = input.toString();
+    } else {
+      input = '[object Object]';
+    }
+  } else if (input === null || typeof input === 'undefined' || isNaN(input) && !input.length) {
+    input = '';
+  }
+  return String(input);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 5777:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.isFreightContainerID = void 0;
+exports.isISO6346 = isISO6346;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+// https://en.wikipedia.org/wiki/ISO_6346
+// according to ISO6346 standard, checksum digit is mandatory for freight container but recommended
+// for other container types (J and Z)
+var isISO6346Str = /^[A-Z]{3}(U[0-9]{7})|([J,Z][0-9]{6,7})$/;
+var isDigit = /^[0-9]$/;
+function isISO6346(str) {
+  (0, _assertString.default)(str);
+  str = str.toUpperCase();
+  if (!isISO6346Str.test(str)) return false;
+  if (str.length === 11) {
+    var sum = 0;
+    for (var i = 0; i < str.length - 1; i++) {
+      if (!isDigit.test(str[i])) {
+        var convertedCode = void 0;
+        var letterCode = str.charCodeAt(i) - 55;
+        if (letterCode < 11) convertedCode = letterCode;else if (letterCode >= 11 && letterCode <= 20) convertedCode = 12 + letterCode % 11;else if (letterCode >= 21 && letterCode <= 30) convertedCode = 23 + letterCode % 21;else convertedCode = 34 + letterCode % 31;
+        sum += convertedCode * Math.pow(2, i);
+      } else sum += str[i] * Math.pow(2, i);
+    }
+    var checkSumDigit = sum % 11;
+    if (checkSumDigit === 10) checkSumDigit = 0;
+    return Number(str[str.length - 1]) === checkSumDigit;
+  }
+  return true;
+}
+var isFreightContainerID = exports.isFreightContainerID = isISO6346;
+
+/***/ }),
+
+/***/ 5830:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isLatLong;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+var _includesString = _interopRequireDefault(__webpack_require__(4636));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var lat = /^\(?[+-]?(90(\.0+)?|[1-8]?\d(\.\d+)?)$/;
+var long = /^\s?[+-]?(180(\.0+)?|1[0-7]\d(\.\d+)?|\d{1,2}(\.\d+)?)\)?$/;
+var latDMS = /^(([1-8]?\d)\D+([1-5]?\d|60)\D+([1-5]?\d|60)(\.\d+)?|90\D+0\D+0)\D+[NSns]?$/i;
+var longDMS = /^\s*([1-7]?\d{1,2}\D+([1-5]?\d|60)\D+([1-5]?\d|60)(\.\d+)?|180\D+0\D+0)\D+[EWew]?$/i;
+var defaultLatLongOptions = {
+  checkDMS: false
+};
+function isLatLong(str, options) {
+  (0, _assertString.default)(str);
+  options = (0, _merge.default)(options, defaultLatLongOptions);
+  if (!(0, _includesString.default)(str, ',')) return false;
+  var pair = str.split(',');
+  if (pair[0].startsWith('(') && !pair[1].endsWith(')') || pair[1].endsWith(')') && !pair[0].startsWith('(')) return false;
+  if (options.checkDMS) {
+    return latDMS.test(pair[0]) && longDMS.test(pair[1]);
+  }
+  return lat.test(pair[0]) && long.test(pair[1]);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 5926:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isDecimal;
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _includesArray = _interopRequireDefault(__webpack_require__(8644));
+var _alpha = __webpack_require__(3237);
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function decimalRegExp(options) {
+  var regExp = new RegExp("^[-+]?([0-9]+)?(\\".concat(_alpha.decimal[options.locale], "[0-9]{").concat(options.decimal_digits, "})").concat(options.force_decimal ? '' : '?', "$"));
+  return regExp;
+}
+var default_decimal_options = {
+  force_decimal: false,
+  decimal_digits: '1,',
+  locale: 'en-US'
+};
+var blacklist = ['', '-', '+'];
+function isDecimal(str, options) {
+  (0, _assertString.default)(str);
+  options = (0, _merge.default)(options, default_decimal_options);
+  if (options.locale in _alpha.decimal) {
+    return !(0, _includesArray.default)(blacklist, str.replace(/ /g, '')) && decimalRegExp(options).test(str);
+  }
+  throw new Error("Invalid locale '".concat(options.locale, "'"));
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 6084:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isInt;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _nullUndefinedCheck = _interopRequireDefault(__webpack_require__(821));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var int = /^(?:[-+]?(?:0|[1-9][0-9]*))$/;
+var intLeadingZeroes = /^[-+]?[0-9]+$/;
+function isInt(str, options) {
+  (0, _assertString.default)(str);
+  options = options || {};
+
+  // Get the regex to use for testing, based on whether
+  // leading zeroes are allowed or not.
+  var regex = options.allow_leading_zeroes === false ? int : intLeadingZeroes;
+
+  // Check min/max/lt/gt
+  var minCheckPassed = !options.hasOwnProperty('min') || (0, _nullUndefinedCheck.default)(options.min) || str >= options.min;
+  var maxCheckPassed = !options.hasOwnProperty('max') || (0, _nullUndefinedCheck.default)(options.max) || str <= options.max;
+  var ltCheckPassed = !options.hasOwnProperty('lt') || (0, _nullUndefinedCheck.default)(options.lt) || str < options.lt;
+  var gtCheckPassed = !options.hasOwnProperty('gt') || (0, _nullUndefinedCheck.default)(options.gt) || str > options.gt;
+  return regex.test(str) && minCheckPassed && maxCheckPassed && ltCheckPassed && gtCheckPassed;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 6169:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isISO8601;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/* eslint-disable max-len */
+// from http://goo.gl/0ejHHW
+var iso8601 = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;
+// same as above, except with a strict 'T' separator between date and time
+var iso8601StrictSeparator = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;
+/* eslint-enable max-len */
+var isValidDate = function isValidDate(str) {
+  // str must have passed the ISO8601 check
+  // this check is meant to catch invalid dates
+  // like 2009-02-31
+  // first check for ordinal dates
+  var ordinalMatch = str.match(/^(\d{4})-?(\d{3})([ T]{1}\.*|$)/);
+  if (ordinalMatch) {
+    var oYear = Number(ordinalMatch[1]);
+    var oDay = Number(ordinalMatch[2]);
+    // if is leap year
+    if (oYear % 4 === 0 && oYear % 100 !== 0 || oYear % 400 === 0) return oDay <= 366;
+    return oDay <= 365;
+  }
+  var match = str.match(/(\d{4})-?(\d{0,2})-?(\d*)/).map(Number);
+  var year = match[1];
+  var month = match[2];
+  var day = match[3];
+  var monthString = month ? "0".concat(month).slice(-2) : month;
+  var dayString = day ? "0".concat(day).slice(-2) : day;
+
+  // create a date object and compare
+  var d = new Date("".concat(year, "-").concat(monthString || '01', "-").concat(dayString || '01'));
+  if (month && day) {
+    return d.getUTCFullYear() === year && d.getUTCMonth() + 1 === month && d.getUTCDate() === day;
+  }
+  return true;
+};
+function isISO8601(str) {
+  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+  (0, _assertString.default)(str);
+  var check = options.strictSeparator ? iso8601StrictSeparator.test(str) : iso8601.test(str);
+  if (check && options.strict) return isValidDate(str);
+  return check;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 6255:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isByteLength;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+/* eslint-disable prefer-rest-params */
+function isByteLength(str, options) {
+  (0, _assertString.default)(str);
+  var min;
+  var max;
+  if (_typeof(options) === 'object') {
+    min = options.min || 0;
+    max = options.max;
+  } else {
+    // backwards compatibility: isByteLength(str, min [, max])
+    min = arguments[1];
+    max = arguments[2];
+  }
+  var len = encodeURI(str).split(/%..|./).length - 1;
+  return len >= min && (typeof max === 'undefined' || len <= max);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 6529:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isAlpha;
+exports.locales = void 0;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _alpha = __webpack_require__(3237);
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function isAlpha(_str) {
+  var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';
+  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+  (0, _assertString.default)(_str);
+  var str = _str;
+  var ignore = options.ignore;
+  if (ignore) {
+    if (ignore instanceof RegExp) {
+      str = str.replace(ignore, '');
+    } else if (typeof ignore === 'string') {
+      str = str.replace(new RegExp("[".concat(ignore.replace(/[-[\]{}()*+?.,\\^$|#\\s]/g, '\\$&'), "]"), 'g'), ''); // escape regex for ignore
+    } else {
+      throw new Error('ignore should be instance of a String or RegExp');
+    }
+  }
+  if (locale in _alpha.alpha) {
+    return _alpha.alpha[locale].test(str);
+  }
+  throw new Error("Invalid locale '".concat(locale, "'"));
+}
+var locales = exports.locales = Object.keys(_alpha.alpha);
+
+/***/ }),
+
+/***/ 6617:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isBase58;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+// Accepted chars - 123456789ABCDEFGH JKLMN PQRSTUVWXYZabcdefghijk mnopqrstuvwxyz
+var base58Reg = /^[A-HJ-NP-Za-km-z1-9]*$/;
+function isBase58(str) {
+  (0, _assertString.default)(str);
+  if (base58Reg.test(str)) {
+    return true;
+  }
+  return false;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 6658:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isBefore;
+var _toDate = _interopRequireDefault(__webpack_require__(3752));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function isBefore(date, options) {
+  // For backwards compatibility:
+  // isBefore(str [, date]), i.e. `options` could be used as argument for the legacy `date`
+  var comparisonDate = (_typeof(options) === 'object' ? options.comparisonDate : options) || Date().toString();
+  var comparison = (0, _toDate.default)(comparisonDate);
+  var original = (0, _toDate.default)(date);
+  return !!(original && comparison && original < comparison);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 6782:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isCurrency;
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function currencyRegex(options) {
+  var decimal_digits = "\\d{".concat(options.digits_after_decimal[0], "}");
+  options.digits_after_decimal.forEach(function (digit, index) {
+    if (index !== 0) decimal_digits = "".concat(decimal_digits, "|\\d{").concat(digit, "}");
+  });
+  var symbol = "(".concat(options.symbol.replace(/\W/, function (m) {
+      return "\\".concat(m);
+    }), ")").concat(options.require_symbol ? '' : '?'),
+    negative = '-?',
+    whole_dollar_amount_without_sep = '[1-9]\\d*',
+    whole_dollar_amount_with_sep = "[1-9]\\d{0,2}(\\".concat(options.thousands_separator, "\\d{3})*"),
+    valid_whole_dollar_amounts = ['0', whole_dollar_amount_without_sep, whole_dollar_amount_with_sep],
+    whole_dollar_amount = "(".concat(valid_whole_dollar_amounts.join('|'), ")?"),
+    decimal_amount = "(\\".concat(options.decimal_separator, "(").concat(decimal_digits, "))").concat(options.require_decimal ? '' : '?');
+  var pattern = whole_dollar_amount + (options.allow_decimal || options.require_decimal ? decimal_amount : '');
+
+  // default is negative sign before symbol, but there are two other options (besides parens)
+  if (options.allow_negatives && !options.parens_for_negatives) {
+    if (options.negative_sign_after_digits) {
+      pattern += negative;
+    } else if (options.negative_sign_before_digits) {
+      pattern = negative + pattern;
+    }
+  }
+
+  // South African Rand, for example, uses R 123 (space) and R-123 (no space)
+  if (options.allow_negative_sign_placeholder) {
+    pattern = "( (?!\\-))?".concat(pattern);
+  } else if (options.allow_space_after_symbol) {
+    pattern = " ?".concat(pattern);
+  } else if (options.allow_space_after_digits) {
+    pattern += '( (?!$))?';
+  }
+  if (options.symbol_after_digits) {
+    pattern += symbol;
+  } else {
+    pattern = symbol + pattern;
+  }
+  if (options.allow_negatives) {
+    if (options.parens_for_negatives) {
+      pattern = "(\\(".concat(pattern, "\\)|").concat(pattern, ")");
+    } else if (!(options.negative_sign_before_digits || options.negative_sign_after_digits)) {
+      pattern = negative + pattern;
+    }
+  }
+
+  // ensure there's a dollar and/or decimal amount, and that
+  // it doesn't start with a space or a negative sign followed by a space
+  return new RegExp("^(?!-? )(?=.*\\d)".concat(pattern, "$"));
+}
+var default_currency_options = {
+  symbol: '$',
+  require_symbol: false,
+  allow_space_after_symbol: false,
+  symbol_after_digits: false,
+  allow_negatives: true,
+  parens_for_negatives: false,
+  negative_sign_before_digits: false,
+  negative_sign_after_digits: false,
+  allow_negative_sign_placeholder: false,
+  thousands_separator: ',',
+  decimal_separator: '.',
+  allow_decimal: true,
+  require_decimal: false,
+  digits_after_decimal: [2],
+  allow_space_after_digits: false
+};
+function isCurrency(str, options) {
+  (0, _assertString.default)(str);
+  options = (0, _merge.default)(options, default_currency_options);
+  return currencyRegex(options).test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 7071:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isLocale;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/*
+  = 3ALPHA              ; selected ISO 639 codes
+    *2("-" 3ALPHA)      ; permanently reserved
+ */
+var extlang = '([A-Za-z]{3}(-[A-Za-z]{3}){0,2})';
+
+/*
+  = 2*3ALPHA            ; shortest ISO 639 code
+    ["-" extlang]       ; sometimes followed by
+                        ; extended language subtags
+  / 4ALPHA              ; or reserved for future use
+  / 5*8ALPHA            ; or registered language subtag
+ */
+var language = "(([a-zA-Z]{2,3}(-".concat(extlang, ")?)|([a-zA-Z]{5,8}))");
+
+/*
+  = 4ALPHA              ; ISO 15924 code
+ */
+var script = '([A-Za-z]{4})';
+
+/*
+  = 2ALPHA              ; ISO 3166-1 code
+  / 3DIGIT              ; UN M.49 code
+ */
+var region = '([A-Za-z]{2}|\\d{3})';
+
+/*
+  = 5*8alphanum         ; registered variants
+  / (DIGIT 3alphanum)
+ */
+var variant = '([A-Za-z0-9]{5,8}|(\\d[A-Z-a-z0-9]{3}))';
+
+/*
+  = DIGIT               ; 0 - 9
+  / %x41-57             ; A - W
+  / %x59-5A             ; Y - Z
+  / %x61-77             ; a - w
+  / %x79-7A             ; y - z
+ */
+var singleton = '(\\d|[A-W]|[Y-Z]|[a-w]|[y-z])';
+
+/*
+  = singleton 1*("-" (2*8alphanum))
+                        ; Single alphanumerics
+                        ; "x" reserved for private use
+ */
+var extension = "(".concat(singleton, "(-[A-Za-z0-9]{2,8})+)");
+
+/*
+  = "x" 1*("-" (1*8alphanum))
+ */
+var privateuse = '(x(-[A-Za-z0-9]{1,8})+)';
+
+// irregular tags do not match the 'langtag' production and would not
+// otherwise be considered 'well-formed'. These tags are all valid, but
+// most are deprecated in favor of more modern subtags or subtag combination
+
+var irregular = '((en-GB-oed)|(i-ami)|(i-bnn)|(i-default)|(i-enochian)|' + '(i-hak)|(i-klingon)|(i-lux)|(i-mingo)|(i-navajo)|(i-pwn)|(i-tao)|' + '(i-tay)|(i-tsu)|(sgn-BE-FR)|(sgn-BE-NL)|(sgn-CH-DE))';
+
+// regular tags match the 'langtag' production, but their subtags are not
+// extended language or variant subtags: their meaning is defined by
+// their registration and all of these are deprecated in favor of a more
+// modern subtag or sequence of subtags
+
+var regular = '((art-lojban)|(cel-gaulish)|(no-bok)|(no-nyn)|(zh-guoyu)|' + '(zh-hakka)|(zh-min)|(zh-min-nan)|(zh-xiang))';
+
+/*
+  = irregular           ; non-redundant tags registered
+  / regular             ; during the RFC 3066 era
+
+ */
+var grandfathered = "(".concat(irregular, "|").concat(regular, ")");
+
+/*
+  RFC 5646 defines delimitation of subtags via a hyphen:
+
+      "Subtag" refers to a specific section of a tag, delimited by a
+      hyphen, such as the subtags 'zh', 'Hant', and 'CN' in the tag "zh-
+      Hant-CN".  Examples of subtags in this document are enclosed in
+      single quotes ('Hant')
+
+  However, we need to add "_" to maintain the existing behaviour.
+ */
+var delimiter = '(-|_)';
+
+/*
+  = language
+    ["-" script]
+    ["-" region]
+    *("-" variant)
+    *("-" extension)
+    ["-" privateuse]
+ */
+var langtag = "".concat(language, "(").concat(delimiter).concat(script, ")?(").concat(delimiter).concat(region, ")?(").concat(delimiter).concat(variant, ")*(").concat(delimiter).concat(extension, ")*(").concat(delimiter).concat(privateuse, ")?");
+
+/*
+  Regex implementation based on BCP RFC 5646
+  Tags for Identifying Languages
+  https://www.rfc-editor.org/rfc/rfc5646.html
+ */
+var languageTagRegex = new RegExp("(^".concat(privateuse, "$)|(^").concat(grandfathered, "$)|(^").concat(langtag, "$)"));
+function isLocale(str) {
+  (0, _assertString.default)(str);
+  return languageTagRegex.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 7086:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isHSL;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var hslComma = /^hsla?\(((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?))(deg|grad|rad|turn)?(,(\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%){2}(,((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%?))?\)$/i;
+var hslSpace = /^hsla?\(((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?))(deg|grad|rad|turn)?(\s(\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%){2}\s?(\/\s((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%?)\s?)?\)$/i;
+function isHSL(str) {
+  (0, _assertString.default)(str);
+
+  // Strip duplicate spaces before calling the validation regex (See  #1598 for more info)
+  var strippedStr = str.replace(/\s+/g, ' ').replace(/\s?(hsla?\(|\)|,)\s?/ig, '$1');
+  if (strippedStr.indexOf(',') !== -1) {
+    return hslComma.test(strippedStr);
+  }
+  return hslSpace.test(strippedStr);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 7115:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isIPRange;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _isIP = _interopRequireDefault(__webpack_require__(5372));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var subnetMaybe = /^\d{1,3}$/;
+var v4Subnet = 32;
+var v6Subnet = 128;
+function isIPRange(str) {
+  var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
+  (0, _assertString.default)(str);
+  var parts = str.split('/');
+
+  // parts[0] -> ip, parts[1] -> subnet
+  if (parts.length !== 2) {
+    return false;
+  }
+  if (!subnetMaybe.test(parts[1])) {
+    return false;
+  }
+
+  // Disallow preceding 0 i.e. 01, 02, ...
+  if (parts[1].length > 1 && parts[1].startsWith('0')) {
+    return false;
+  }
+  var isValidIP = (0, _isIP.default)(parts[0], version);
+  if (!isValidIP) {
+    return false;
+  }
+
+  // Define valid subnet according to IP's version
+  var expectedSubnet = null;
+  switch (String(version)) {
+    case '4':
+      expectedSubnet = v4Subnet;
+      break;
+    case '6':
+      expectedSubnet = v6Subnet;
+      break;
+    default:
+      expectedSubnet = (0, _isIP.default)(parts[0], '6') ? v6Subnet : v4Subnet;
+  }
+  return parts[1] <= expectedSubnet && parts[1] >= 0;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 7179:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isStrongPassword;
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var upperCaseRegex = /^[A-Z]$/;
+var lowerCaseRegex = /^[a-z]$/;
+var numberRegex = /^[0-9]$/;
+var symbolRegex = /^[-#!$@\u00a3%^&*()_+|~=`{}\[\]:";'<>?,.\/\\ ]$/;
+var defaultOptions = {
+  minLength: 8,
+  minLowercase: 1,
+  minUppercase: 1,
+  minNumbers: 1,
+  minSymbols: 1,
+  returnScore: false,
+  pointsPerUnique: 1,
+  pointsPerRepeat: 0.5,
+  pointsForContainingLower: 10,
+  pointsForContainingUpper: 10,
+  pointsForContainingNumber: 10,
+  pointsForContainingSymbol: 10
+};
+
+/* Counts number of occurrences of each char in a string
+ * could be moved to util/ ?
+*/
+function countChars(str) {
+  var result = {};
+  Array.from(str).forEach(function (char) {
+    var curVal = result[char];
+    if (curVal) {
+      result[char] += 1;
+    } else {
+      result[char] = 1;
+    }
+  });
+  return result;
+}
+
+/* Return information about a password */
+function analyzePassword(password) {
+  var charMap = countChars(password);
+  var analysis = {
+    length: password.length,
+    uniqueChars: Object.keys(charMap).length,
+    uppercaseCount: 0,
+    lowercaseCount: 0,
+    numberCount: 0,
+    symbolCount: 0
+  };
+  Object.keys(charMap).forEach(function (char) {
+    /* istanbul ignore else */
+    if (upperCaseRegex.test(char)) {
+      analysis.uppercaseCount += charMap[char];
+    } else if (lowerCaseRegex.test(char)) {
+      analysis.lowercaseCount += charMap[char];
+    } else if (numberRegex.test(char)) {
+      analysis.numberCount += charMap[char];
+    } else if (symbolRegex.test(char)) {
+      analysis.symbolCount += charMap[char];
+    }
+  });
+  return analysis;
+}
+function scorePassword(analysis, scoringOptions) {
+  var points = 0;
+  points += analysis.uniqueChars * scoringOptions.pointsPerUnique;
+  points += (analysis.length - analysis.uniqueChars) * scoringOptions.pointsPerRepeat;
+  if (analysis.lowercaseCount > 0) {
+    points += scoringOptions.pointsForContainingLower;
+  }
+  if (analysis.uppercaseCount > 0) {
+    points += scoringOptions.pointsForContainingUpper;
+  }
+  if (analysis.numberCount > 0) {
+    points += scoringOptions.pointsForContainingNumber;
+  }
+  if (analysis.symbolCount > 0) {
+    points += scoringOptions.pointsForContainingSymbol;
+  }
+  return points;
+}
+function isStrongPassword(str) {
+  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+  (0, _assertString.default)(str);
+  var analysis = analyzePassword(str);
+  options = (0, _merge.default)(options || {}, defaultOptions);
+  if (options.returnScore) {
+    return scorePassword(analysis, options);
+  }
+  return analysis.length >= options.minLength && analysis.lowercaseCount >= options.minLowercase && analysis.uppercaseCount >= options.minUppercase && analysis.numberCount >= options.minNumbers && analysis.symbolCount >= options.minSymbols;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 7349:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isMagnetURI;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var magnetURIComponent = /(?:^magnet:\?|[^?&]&)xt(?:\.1)?=urn:(?:(?:aich|bitprint|btih|ed2k|ed2khash|kzhash|md5|sha1|tree:tiger):[a-z0-9]{32}(?:[a-z0-9]{8})?|btmh:1220[a-z0-9]{64})(?:$|&)/i;
+function isMagnetURI(url) {
+  (0, _assertString.default)(url);
+  if (url.indexOf('magnet:?') !== 0) {
+    return false;
+  }
+  return magnetURIComponent.test(url);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 7612:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isLowercase;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function isLowercase(str) {
+  (0, _assertString.default)(str);
+  return str === str.toLowerCase();
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 7658:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isFQDN;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var default_fqdn_options = {
+  require_tld: true,
+  allow_underscores: false,
+  allow_trailing_dot: false,
+  allow_numeric_tld: false,
+  allow_wildcard: false,
+  ignore_max_length: false
+};
+function isFQDN(str, options) {
+  (0, _assertString.default)(str);
+  options = (0, _merge.default)(options, default_fqdn_options);
+
+  /* Remove the optional trailing dot before checking validity */
+  if (options.allow_trailing_dot && str[str.length - 1] === '.') {
+    str = str.substring(0, str.length - 1);
+  }
+
+  /* Remove the optional wildcard before checking validity */
+  if (options.allow_wildcard === true && str.indexOf('*.') === 0) {
+    str = str.substring(2);
+  }
+  var parts = str.split('.');
+  var tld = parts[parts.length - 1];
+  if (options.require_tld) {
+    // disallow fqdns without tld
+    if (parts.length < 2) {
+      return false;
+    }
+    if (!options.allow_numeric_tld && !/^([a-z\u00A1-\u00A8\u00AA-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {
+      return false;
+    }
+
+    // disallow spaces
+    if (/\s/.test(tld)) {
+      return false;
+    }
+  }
+
+  // reject numeric TLDs
+  if (!options.allow_numeric_tld && /^\d+$/.test(tld)) {
+    return false;
+  }
+  return parts.every(function (part) {
+    if (part.length > 63 && !options.ignore_max_length) {
+      return false;
+    }
+    if (!/^[a-z_\u00a1-\uffff0-9-]+$/i.test(part)) {
+      return false;
+    }
+
+    // disallow full-width chars
+    if (/[\uff01-\uff5e]/.test(part)) {
+      return false;
+    }
+
+    // disallow parts starting or ending with hyphen
+    if (/^-|-$/.test(part)) {
+      return false;
+    }
+    if (!options.allow_underscores && /_/.test(part)) {
+      return false;
+    }
+    return true;
+  });
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 7673:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isBase32;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var base32 = /^[A-Z2-7]+=*$/;
+var crockfordBase32 = /^[A-HJKMNP-TV-Z0-9]+$/;
+var defaultBase32Options = {
+  crockford: false
+};
+function isBase32(str, options) {
+  (0, _assertString.default)(str);
+  options = (0, _merge.default)(options, defaultBase32Options);
+  if (options.crockford) {
+    return crockfordBase32.test(str);
+  }
+  var len = str.length;
+  if (len % 8 === 0 && base32.test(str)) {
+    return true;
+  }
+  return false;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 7677:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = unescape;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function unescape(str) {
+  (0, _assertString.default)(str);
+  return str.replace(/&quot;/g, '"').replace(/&#x27;/g, "'").replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&#x2F;/g, '/').replace(/&#x5C;/g, '\\').replace(/&#96;/g, '`').replace(/&amp;/g, '&');
+  // &amp; replacement has to be the last one to prevent
+  // bugs with intermediate strings containing escape sequences
+  // See: https://github.com/validatorjs/validator.js/issues/1827
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 7717:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isEAN;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/**
+ * The most commonly used EAN standard is
+ * the thirteen-digit EAN-13, while the
+ * less commonly used 8-digit EAN-8 barcode was
+ * introduced for use on small packages.
+ * Also EAN/UCC-14 is used for Grouping of individual
+ * trade items above unit level(Intermediate, Carton or Pallet).
+ * For more info about EAN-14 checkout: https://www.gtin.info/itf-14-barcodes/
+ * EAN consists of:
+ * GS1 prefix, manufacturer code, product code and check digit
+ * Reference: https://en.wikipedia.org/wiki/International_Article_Number
+ * Reference: https://www.gtin.info/
+ */
+
+/**
+ * Define EAN Lengths; 8 for EAN-8; 13 for EAN-13; 14 for EAN-14
+ * and Regular Expression for valid EANs (EAN-8, EAN-13, EAN-14),
+ * with exact numeric matching of 8 or 13 or 14 digits [0-9]
+ */
+var LENGTH_EAN_8 = 8;
+var LENGTH_EAN_14 = 14;
+var validEanRegex = /^(\d{8}|\d{13}|\d{14})$/;
+
+/**
+ * Get position weight given:
+ * EAN length and digit index/position
+ *
+ * @param {number} length
+ * @param {number} index
+ * @return {number}
+ */
+function getPositionWeightThroughLengthAndIndex(length, index) {
+  if (length === LENGTH_EAN_8 || length === LENGTH_EAN_14) {
+    return index % 2 === 0 ? 3 : 1;
+  }
+  return index % 2 === 0 ? 1 : 3;
+}
+
+/**
+ * Calculate EAN Check Digit
+ * Reference: https://en.wikipedia.org/wiki/International_Article_Number#Calculation_of_checksum_digit
+ *
+ * @param {string} ean
+ * @return {number}
+ */
+function calculateCheckDigit(ean) {
+  var checksum = ean.slice(0, -1).split('').map(function (char, index) {
+    return Number(char) * getPositionWeightThroughLengthAndIndex(ean.length, index);
+  }).reduce(function (acc, partialSum) {
+    return acc + partialSum;
+  }, 0);
+  var remainder = 10 - checksum % 10;
+  return remainder < 10 ? remainder : 0;
+}
+
+/**
+ * Check if string is valid EAN:
+ * Matches EAN-8/EAN-13/EAN-14 regex
+ * Has valid check digit.
+ *
+ * @param {string} str
+ * @return {boolean}
+ */
+function isEAN(str) {
+  (0, _assertString.default)(str);
+  var actualCheckDigit = Number(str.slice(-1));
+  return validEanRegex.test(str) && actualCheckDigit === calculateCheckDigit(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 7741:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isTaxID;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var algorithms = _interopRequireWildcard(__webpack_require__(4834));
+var _isDate = _interopRequireDefault(__webpack_require__(9013));
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
+function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+/**
+ * TIN Validation
+ * Validates Tax Identification Numbers (TINs) from the US, EU member states and the United Kingdom.
+ *
+ * EU-UK:
+ * National TIN validity is calculated using public algorithms as made available by DG TAXUD.
+ *
+ * See `https://ec.europa.eu/taxation_customs/tin/specs/FS-TIN%20Algorithms-Public.docx` for more information.
+ *
+ * US:
+ * An Employer Identification Number (EIN), also known as a Federal Tax Identification Number,
+ *  is used to identify a business entity.
+ *
+ * NOTES:
+ *  - Prefix 47 is being reserved for future use
+ *  - Prefixes 26, 27, 45, 46 and 47 were previously assigned by the Philadelphia campus.
+ *
+ * See `http://www.irs.gov/Businesses/Small-Businesses-&-Self-Employed/How-EINs-are-Assigned-and-Valid-EIN-Prefixes`
+ * for more information.
+ */
+
+// Locale functions
+
+/*
+ * bg-BG validation function
+ * (Edinen gra\u017edanski nomer (EGN/\u0415\u0413\u041d), persons only)
+ * Checks if birth date (first six digits) is valid and calculates check (last) digit
+ */
+function bgBgCheck(tin) {
+  // Extract full year, normalize month and check birth date validity
+  var century_year = tin.slice(0, 2);
+  var month = parseInt(tin.slice(2, 4), 10);
+  if (month > 40) {
+    month -= 40;
+    century_year = "20".concat(century_year);
+  } else if (month > 20) {
+    month -= 20;
+    century_year = "18".concat(century_year);
+  } else {
+    century_year = "19".concat(century_year);
+  }
+  if (month < 10) {
+    month = "0".concat(month);
+  }
+  var date = "".concat(century_year, "/").concat(month, "/").concat(tin.slice(4, 6));
+  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
+    return false;
+  }
+
+  // split digits into an array for further processing
+  var digits = tin.split('').map(function (a) {
+    return parseInt(a, 10);
+  });
+
+  // Calculate checksum by multiplying digits with fixed values
+  var multip_lookup = [2, 4, 8, 5, 10, 9, 7, 3, 6];
+  var checksum = 0;
+  for (var i = 0; i < multip_lookup.length; i++) {
+    checksum += digits[i] * multip_lookup[i];
+  }
+  checksum = checksum % 11 === 10 ? 0 : checksum % 11;
+  return checksum === digits[9];
+}
+
+/**
+ * Check if an input is a valid Canadian SIN (Social Insurance Number)
+ *
+ * The Social Insurance Number (SIN) is a 9 digit number that
+ * you need to work in Canada or to have access to government programs and benefits.
+ *
+ * https://en.wikipedia.org/wiki/Social_Insurance_Number
+ * https://www.canada.ca/en/employment-social-development/services/sin.html
+ * https://www.codercrunch.com/challenge/819302488/sin-validator
+ *
+ * @param {string} input
+ * @return {boolean}
+ */
+function isCanadianSIN(input) {
+  var digitsArray = input.split('');
+  var even = digitsArray.filter(function (_, idx) {
+    return idx % 2;
+  }).map(function (i) {
+    return Number(i) * 2;
+  }).join('').split('');
+  var total = digitsArray.filter(function (_, idx) {
+    return !(idx % 2);
+  }).concat(even).map(function (i) {
+    return Number(i);
+  }).reduce(function (acc, cur) {
+    return acc + cur;
+  });
+  return total % 10 === 0;
+}
+
+/*
+ * cs-CZ validation function
+ * (Rodn\u00e9 \u010d\u00edslo (R\u010c), persons only)
+ * Checks if birth date (first six digits) is valid and divisibility by 11
+ * Material not in DG TAXUD document sourced from:
+ * -`https://lorenc.info/3MA381/overeni-spravnosti-rodneho-cisla.htm`
+ * -`https://www.mvcr.cz/clanek/rady-a-sluzby-dokumenty-rodne-cislo.aspx`
+ */
+function csCzCheck(tin) {
+  tin = tin.replace(/\W/, '');
+
+  // Extract full year from TIN length
+  var full_year = parseInt(tin.slice(0, 2), 10);
+  if (tin.length === 10) {
+    if (full_year < 54) {
+      full_year = "20".concat(full_year);
+    } else {
+      full_year = "19".concat(full_year);
+    }
+  } else {
+    if (tin.slice(6) === '000') {
+      return false;
+    } // Three-zero serial not assigned before 1954
+    if (full_year < 54) {
+      full_year = "19".concat(full_year);
+    } else {
+      return false; // No 18XX years seen in any of the resources
+    }
+  }
+  // Add missing zero if needed
+  if (full_year.length === 3) {
+    full_year = [full_year.slice(0, 2), '0', full_year.slice(2)].join('');
+  }
+
+  // Extract month from TIN and normalize
+  var month = parseInt(tin.slice(2, 4), 10);
+  if (month > 50) {
+    month -= 50;
+  }
+  if (month > 20) {
+    // Month-plus-twenty was only introduced in 2004
+    if (parseInt(full_year, 10) < 2004) {
+      return false;
+    }
+    month -= 20;
+  }
+  if (month < 10) {
+    month = "0".concat(month);
+  }
+
+  // Check date validity
+  var date = "".concat(full_year, "/").concat(month, "/").concat(tin.slice(4, 6));
+  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
+    return false;
+  }
+
+  // Verify divisibility by 11
+  if (tin.length === 10) {
+    if (parseInt(tin, 10) % 11 !== 0) {
+      // Some numbers up to and including 1985 are still valid if
+      // check (last) digit equals 0 and modulo of first 9 digits equals 10
+      var checkdigit = parseInt(tin.slice(0, 9), 10) % 11;
+      if (parseInt(full_year, 10) < 1986 && checkdigit === 10) {
+        if (parseInt(tin.slice(9), 10) !== 0) {
+          return false;
+        }
+      } else {
+        return false;
+      }
+    }
+  }
+  return true;
+}
+
+/*
+ * de-AT validation function
+ * (Abgabenkontonummer, persons/entities)
+ * Verify TIN validity by calling luhnCheck()
+ */
+function deAtCheck(tin) {
+  return algorithms.luhnCheck(tin);
+}
+
+/*
+ * de-DE validation function
+ * (Steueridentifikationsnummer (Steuer-IdNr.), persons only)
+ * Tests for single duplicate/triplicate value, then calculates ISO 7064 check (last) digit
+ * Partial implementation of spec (same result with both algorithms always)
+ */
+function deDeCheck(tin) {
+  // Split digits into an array for further processing
+  var digits = tin.split('').map(function (a) {
+    return parseInt(a, 10);
+  });
+
+  // Fill array with strings of number positions
+  var occurrences = [];
+  for (var i = 0; i < digits.length - 1; i++) {
+    occurrences.push('');
+    for (var j = 0; j < digits.length - 1; j++) {
+      if (digits[i] === digits[j]) {
+        occurrences[i] += j;
+      }
+    }
+  }
+
+  // Remove digits with one occurrence and test for only one duplicate/triplicate
+  occurrences = occurrences.filter(function (a) {
+    return a.length > 1;
+  });
+  if (occurrences.length !== 2 && occurrences.length !== 3) {
+    return false;
+  }
+
+  // In case of triplicate value only two digits are allowed next to each other
+  if (occurrences[0].length === 3) {
+    var trip_locations = occurrences[0].split('').map(function (a) {
+      return parseInt(a, 10);
+    });
+    var recurrent = 0; // Amount of neighbor occurrences
+    for (var _i = 0; _i < trip_locations.length - 1; _i++) {
+      if (trip_locations[_i] + 1 === trip_locations[_i + 1]) {
+        recurrent += 1;
+      }
+    }
+    if (recurrent === 2) {
+      return false;
+    }
+  }
+  return algorithms.iso7064Check(tin);
+}
+
+/*
+ * dk-DK validation function
+ * (CPR-nummer (personnummer), persons only)
+ * Checks if birth date (first six digits) is valid and assigned to century (seventh) digit,
+ * and calculates check (last) digit
+ */
+function dkDkCheck(tin) {
+  tin = tin.replace(/\W/, '');
+
+  // Extract year, check if valid for given century digit and add century
+  var year = parseInt(tin.slice(4, 6), 10);
+  var century_digit = tin.slice(6, 7);
+  switch (century_digit) {
+    case '0':
+    case '1':
+    case '2':
+    case '3':
+      year = "19".concat(year);
+      break;
+    case '4':
+    case '9':
+      if (year < 37) {
+        year = "20".concat(year);
+      } else {
+        year = "19".concat(year);
+      }
+      break;
+    default:
+      if (year < 37) {
+        year = "20".concat(year);
+      } else if (year > 58) {
+        year = "18".concat(year);
+      } else {
+        return false;
+      }
+      break;
+  }
+  // Add missing zero if needed
+  if (year.length === 3) {
+    year = [year.slice(0, 2), '0', year.slice(2)].join('');
+  }
+  // Check date validity
+  var date = "".concat(year, "/").concat(tin.slice(2, 4), "/").concat(tin.slice(0, 2));
+  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
+    return false;
+  }
+
+  // Split digits into an array for further processing
+  var digits = tin.split('').map(function (a) {
+    return parseInt(a, 10);
+  });
+  var checksum = 0;
+  var weight = 4;
+  // Multiply by weight and add to checksum
+  for (var i = 0; i < 9; i++) {
+    checksum += digits[i] * weight;
+    weight -= 1;
+    if (weight === 1) {
+      weight = 7;
+    }
+  }
+  checksum %= 11;
+  if (checksum === 1) {
+    return false;
+  }
+  return checksum === 0 ? digits[9] === 0 : digits[9] === 11 - checksum;
+}
+
+/*
+ * el-CY validation function
+ * (Arithmos Forologikou Mitroou (AFM/\u0391\u03a6\u039c), persons only)
+ * Verify TIN validity by calculating ASCII value of check (last) character
+ */
+function elCyCheck(tin) {
+  // split digits into an array for further processing
+  var digits = tin.slice(0, 8).split('').map(function (a) {
+    return parseInt(a, 10);
+  });
+  var checksum = 0;
+  // add digits in even places
+  for (var i = 1; i < digits.length; i += 2) {
+    checksum += digits[i];
+  }
+
+  // add digits in odd places
+  for (var _i2 = 0; _i2 < digits.length; _i2 += 2) {
+    if (digits[_i2] < 2) {
+      checksum += 1 - digits[_i2];
+    } else {
+      checksum += 2 * (digits[_i2] - 2) + 5;
+      if (digits[_i2] > 4) {
+        checksum += 2;
+      }
+    }
+  }
+  return String.fromCharCode(checksum % 26 + 65) === tin.charAt(8);
+}
+
+/*
+ * el-GR validation function
+ * (Arithmos Forologikou Mitroou (AFM/\u0391\u03a6\u039c), persons/entities)
+ * Verify TIN validity by calculating check (last) digit
+ * Algorithm not in DG TAXUD document- sourced from:
+ * - `http://epixeirisi.gr/%CE%9A%CE%A1%CE%99%CE%A3%CE%99%CE%9C%CE%91-%CE%98%CE%95%CE%9C%CE%91%CE%A4%CE%91-%CE%A6%CE%9F%CE%A1%CE%9F%CE%9B%CE%9F%CE%93%CE%99%CE%91%CE%A3-%CE%9A%CE%91%CE%99-%CE%9B%CE%9F%CE%93%CE%99%CE%A3%CE%A4%CE%99%CE%9A%CE%97%CE%A3/23791/%CE%91%CF%81%CE%B9%CE%B8%CE%BC%CF%8C%CF%82-%CE%A6%CE%BF%CF%81%CE%BF%CE%BB%CE%BF%CE%B3%CE%B9%CE%BA%CE%BF%CF%8D-%CE%9C%CE%B7%CF%84%CF%81%CF%8E%CE%BF%CF%85`
+ */
+function elGrCheck(tin) {
+  // split digits into an array for further processing
+  var digits = tin.split('').map(function (a) {
+    return parseInt(a, 10);
+  });
+  var checksum = 0;
+  for (var i = 0; i < 8; i++) {
+    checksum += digits[i] * Math.pow(2, 8 - i);
+  }
+  return checksum % 11 % 10 === digits[8];
+}
+
+/*
+ * en-GB validation function (should go here if needed)
+ * (National Insurance Number (NINO) or Unique Taxpayer Reference (UTR),
+ * persons/entities respectively)
+ */
+
+/*
+ * en-IE validation function
+ * (Personal Public Service Number (PPS No), persons only)
+ * Verify TIN validity by calculating check (second to last) character
+ */
+function enIeCheck(tin) {
+  var checksum = algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 7).map(function (a) {
+    return parseInt(a, 10);
+  }), 8);
+  if (tin.length === 9 && tin[8] !== 'W') {
+    checksum += (tin[8].charCodeAt(0) - 64) * 9;
+  }
+  checksum %= 23;
+  if (checksum === 0) {
+    return tin[7].toUpperCase() === 'W';
+  }
+  return tin[7].toUpperCase() === String.fromCharCode(64 + checksum);
+}
+
+// Valid US IRS campus prefixes
+var enUsCampusPrefix = {
+  andover: ['10', '12'],
+  atlanta: ['60', '67'],
+  austin: ['50', '53'],
+  brookhaven: ['01', '02', '03', '04', '05', '06', '11', '13', '14', '16', '21', '22', '23', '25', '34', '51', '52', '54', '55', '56', '57', '58', '59', '65'],
+  cincinnati: ['30', '32', '35', '36', '37', '38', '61'],
+  fresno: ['15', '24'],
+  internet: ['20', '26', '27', '45', '46', '47'],
+  kansas: ['40', '44'],
+  memphis: ['94', '95'],
+  ogden: ['80', '90'],
+  philadelphia: ['33', '39', '41', '42', '43', '46', '48', '62', '63', '64', '66', '68', '71', '72', '73', '74', '75', '76', '77', '81', '82', '83', '84', '85', '86', '87', '88', '91', '92', '93', '98', '99'],
+  sba: ['31']
+};
+
+// Return an array of all US IRS campus prefixes
+function enUsGetPrefixes() {
+  var prefixes = [];
+  for (var location in enUsCampusPrefix) {
+    // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes
+    // istanbul ignore else
+    if (enUsCampusPrefix.hasOwnProperty(location)) {
+      prefixes.push.apply(prefixes, _toConsumableArray(enUsCampusPrefix[location]));
+    }
+  }
+  return prefixes;
+}
+
+/*
+ * en-US validation function
+ * Verify that the TIN starts with a valid IRS campus prefix
+ */
+function enUsCheck(tin) {
+  return enUsGetPrefixes().indexOf(tin.slice(0, 2)) !== -1;
+}
+
+/*
+ * es-AR validation function
+ * Clave \u00danica de Identificaci\u00f3n Tributaria (CUIT/CUIL)
+ * Sourced from:
+ * - https://servicioscf.afip.gob.ar/publico/abc/ABCpaso2.aspx?id_nivel1=3036&id_nivel2=3040&p=Conceptos%20b%C3%A1sicos
+ * - https://es.wikipedia.org/wiki/Clave_%C3%9Anica_de_Identificaci%C3%B3n_Tributaria
+ */
+
+function esArCheck(tin) {
+  var accum = 0;
+  var digits = tin.split('');
+  var digit = parseInt(digits.pop(), 10);
+  for (var i = 0; i < digits.length; i++) {
+    accum += digits[9 - i] * (2 + i % 6);
+  }
+  var verif = 11 - accum % 11;
+  if (verif === 11) {
+    verif = 0;
+  } else if (verif === 10) {
+    verif = 9;
+  }
+  return digit === verif;
+}
+
+/*
+ * es-ES validation function
+ * (Documento Nacional de Identidad (DNI)
+ * or N\u00famero de Identificaci\u00f3n de Extranjero (NIE), persons only)
+ * Verify TIN validity by calculating check (last) character
+ */
+function esEsCheck(tin) {
+  // Split characters into an array for further processing
+  var chars = tin.toUpperCase().split('');
+
+  // Replace initial letter if needed
+  if (isNaN(parseInt(chars[0], 10)) && chars.length > 1) {
+    var lead_replace = 0;
+    switch (chars[0]) {
+      case 'Y':
+        lead_replace = 1;
+        break;
+      case 'Z':
+        lead_replace = 2;
+        break;
+      default:
+    }
+    chars.splice(0, 1, lead_replace);
+    // Fill with zeros if smaller than proper
+  } else {
+    while (chars.length < 9) {
+      chars.unshift(0);
+    }
+  }
+
+  // Calculate checksum and check according to lookup
+  var lookup = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E'];
+  chars = chars.join('');
+  var checksum = parseInt(chars.slice(0, 8), 10) % 23;
+  return chars[8] === lookup[checksum];
+}
+
+/*
+ * et-EE validation function
+ * (Isikukood (IK), persons only)
+ * Checks if birth date (century digit and six following) is valid and calculates check (last) digit
+ * Material not in DG TAXUD document sourced from:
+ * - `https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Estonia-TIN.pdf`
+ */
+function etEeCheck(tin) {
+  // Extract year and add century
+  var full_year = tin.slice(1, 3);
+  var century_digit = tin.slice(0, 1);
+  switch (century_digit) {
+    case '1':
+    case '2':
+      full_year = "18".concat(full_year);
+      break;
+    case '3':
+    case '4':
+      full_year = "19".concat(full_year);
+      break;
+    default:
+      full_year = "20".concat(full_year);
+      break;
+  }
+  // Check date validity
+  var date = "".concat(full_year, "/").concat(tin.slice(3, 5), "/").concat(tin.slice(5, 7));
+  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
+    return false;
+  }
+
+  // Split digits into an array for further processing
+  var digits = tin.split('').map(function (a) {
+    return parseInt(a, 10);
+  });
+  var checksum = 0;
+  var weight = 1;
+  // Multiply by weight and add to checksum
+  for (var i = 0; i < 10; i++) {
+    checksum += digits[i] * weight;
+    weight += 1;
+    if (weight === 10) {
+      weight = 1;
+    }
+  }
+  // Do again if modulo 11 of checksum is 10
+  if (checksum % 11 === 10) {
+    checksum = 0;
+    weight = 3;
+    for (var _i3 = 0; _i3 < 10; _i3++) {
+      checksum += digits[_i3] * weight;
+      weight += 1;
+      if (weight === 10) {
+        weight = 1;
+      }
+    }
+    if (checksum % 11 === 10) {
+      return digits[10] === 0;
+    }
+  }
+  return checksum % 11 === digits[10];
+}
+
+/*
+ * fi-FI validation function
+ * (Henkil\u00f6tunnus (HETU), persons only)
+ * Checks if birth date (first six digits plus century symbol) is valid
+ * and calculates check (last) digit
+ */
+function fiFiCheck(tin) {
+  // Extract year and add century
+  var full_year = tin.slice(4, 6);
+  var century_symbol = tin.slice(6, 7);
+  switch (century_symbol) {
+    case '+':
+      full_year = "18".concat(full_year);
+      break;
+    case '-':
+      full_year = "19".concat(full_year);
+      break;
+    default:
+      full_year = "20".concat(full_year);
+      break;
+  }
+  // Check date validity
+  var date = "".concat(full_year, "/").concat(tin.slice(2, 4), "/").concat(tin.slice(0, 2));
+  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
+    return false;
+  }
+
+  // Calculate check character
+  var checksum = parseInt(tin.slice(0, 6) + tin.slice(7, 10), 10) % 31;
+  if (checksum < 10) {
+    return checksum === parseInt(tin.slice(10), 10);
+  }
+  checksum -= 10;
+  var letters_lookup = ['A', 'B', 'C', 'D', 'E', 'F', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y'];
+  return letters_lookup[checksum] === tin.slice(10);
+}
+
+/*
+ * fr/nl-BE validation function
+ * (Num\u00e9ro national (N.N.), persons only)
+ * Checks if birth date (first six digits) is valid and calculates check (last two) digits
+ */
+function frBeCheck(tin) {
+  // Zero month/day value is acceptable
+  if (tin.slice(2, 4) !== '00' || tin.slice(4, 6) !== '00') {
+    // Extract date from first six digits of TIN
+    var date = "".concat(tin.slice(0, 2), "/").concat(tin.slice(2, 4), "/").concat(tin.slice(4, 6));
+    if (!(0, _isDate.default)(date, 'YY/MM/DD')) {
+      return false;
+    }
+  }
+  var checksum = 97 - parseInt(tin.slice(0, 9), 10) % 97;
+  var checkdigits = parseInt(tin.slice(9, 11), 10);
+  if (checksum !== checkdigits) {
+    checksum = 97 - parseInt("2".concat(tin.slice(0, 9)), 10) % 97;
+    if (checksum !== checkdigits) {
+      return false;
+    }
+  }
+  return true;
+}
+
+/*
+ * fr-FR validation function
+ * (Num\u00e9ro fiscal de r\u00e9f\u00e9rence (num\u00e9ro SPI), persons only)
+ * Verify TIN validity by calculating check (last three) digits
+ */
+function frFrCheck(tin) {
+  tin = tin.replace(/\s/g, '');
+  var checksum = parseInt(tin.slice(0, 10), 10) % 511;
+  var checkdigits = parseInt(tin.slice(10, 13), 10);
+  return checksum === checkdigits;
+}
+
+/*
+ * fr/lb-LU validation function
+ * (num\u00e9ro d\u2019identification personnelle, persons only)
+ * Verify birth date validity and run Luhn and Verhoeff checks
+ */
+function frLuCheck(tin) {
+  // Extract date and check validity
+  var date = "".concat(tin.slice(0, 4), "/").concat(tin.slice(4, 6), "/").concat(tin.slice(6, 8));
+  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
+    return false;
+  }
+
+  // Run Luhn check
+  if (!algorithms.luhnCheck(tin.slice(0, 12))) {
+    return false;
+  }
+  // Remove Luhn check digit and run Verhoeff check
+  return algorithms.verhoeffCheck("".concat(tin.slice(0, 11)).concat(tin[12]));
+}
+
+/*
+ * hr-HR validation function
+ * (Osobni identifikacijski broj (OIB), persons/entities)
+ * Verify TIN validity by calling iso7064Check(digits)
+ */
+function hrHrCheck(tin) {
+  return algorithms.iso7064Check(tin);
+}
+
+/*
+ * hu-HU validation function
+ * (Ad\u00f3azonos\u00edt\u00f3 jel, persons only)
+ * Verify TIN validity by calculating check (last) digit
+ */
+function huHuCheck(tin) {
+  // split digits into an array for further processing
+  var digits = tin.split('').map(function (a) {
+    return parseInt(a, 10);
+  });
+  var checksum = 8;
+  for (var i = 1; i < 9; i++) {
+    checksum += digits[i] * (i + 1);
+  }
+  return checksum % 11 === digits[9];
+}
+
+/*
+ * lt-LT validation function (should go here if needed)
+ * (Asmens kodas, persons/entities respectively)
+ * Current validation check is alias of etEeCheck- same format applies
+ */
+
+/*
+ * it-IT first/last name validity check
+ * Accepts it-IT TIN-encoded names as a three-element character array and checks their validity
+ * Due to lack of clarity between resources ("Are only Italian consonants used?
+ * What happens if a person has X in their name?" etc.) only two test conditions
+ * have been implemented:
+ * Vowels may only be followed by other vowels or an X character
+ * and X characters after vowels may only be followed by other X characters.
+ */
+function itItNameCheck(name) {
+  // true at the first occurrence of a vowel
+  var vowelflag = false;
+
+  // true at the first occurrence of an X AFTER vowel
+  // (to properly handle last names with X as consonant)
+  var xflag = false;
+  for (var i = 0; i < 3; i++) {
+    if (!vowelflag && /[AEIOU]/.test(name[i])) {
+      vowelflag = true;
+    } else if (!xflag && vowelflag && name[i] === 'X') {
+      xflag = true;
+    } else if (i > 0) {
+      if (vowelflag && !xflag) {
+        if (!/[AEIOU]/.test(name[i])) {
+          return false;
+        }
+      }
+      if (xflag) {
+        if (!/X/.test(name[i])) {
+          return false;
+        }
+      }
+    }
+  }
+  return true;
+}
+
+/*
+ * it-IT validation function
+ * (Codice fiscale (TIN-IT), persons only)
+ * Verify name, birth date and codice catastale validity
+ * and calculate check character.
+ * Material not in DG-TAXUD document sourced from:
+ * `https://en.wikipedia.org/wiki/Italian_fiscal_code`
+ */
+function itItCheck(tin) {
+  // Capitalize and split characters into an array for further processing
+  var chars = tin.toUpperCase().split('');
+
+  // Check first and last name validity calling itItNameCheck()
+  if (!itItNameCheck(chars.slice(0, 3))) {
+    return false;
+  }
+  if (!itItNameCheck(chars.slice(3, 6))) {
+    return false;
+  }
+
+  // Convert letters in number spaces back to numbers if any
+  var number_locations = [6, 7, 9, 10, 12, 13, 14];
+  var number_replace = {
+    L: '0',
+    M: '1',
+    N: '2',
+    P: '3',
+    Q: '4',
+    R: '5',
+    S: '6',
+    T: '7',
+    U: '8',
+    V: '9'
+  };
+  for (var _i4 = 0, _number_locations = number_locations; _i4 < _number_locations.length; _i4++) {
+    var i = _number_locations[_i4];
+    if (chars[i] in number_replace) {
+      chars.splice(i, 1, number_replace[chars[i]]);
+    }
+  }
+
+  // Extract month and day, and check date validity
+  var month_replace = {
+    A: '01',
+    B: '02',
+    C: '03',
+    D: '04',
+    E: '05',
+    H: '06',
+    L: '07',
+    M: '08',
+    P: '09',
+    R: '10',
+    S: '11',
+    T: '12'
+  };
+  var month = month_replace[chars[8]];
+  var day = parseInt(chars[9] + chars[10], 10);
+  if (day > 40) {
+    day -= 40;
+  }
+  if (day < 10) {
+    day = "0".concat(day);
+  }
+  var date = "".concat(chars[6]).concat(chars[7], "/").concat(month, "/").concat(day);
+  if (!(0, _isDate.default)(date, 'YY/MM/DD')) {
+    return false;
+  }
+
+  // Calculate check character by adding up even and odd characters as numbers
+  var checksum = 0;
+  for (var _i5 = 1; _i5 < chars.length - 1; _i5 += 2) {
+    var char_to_int = parseInt(chars[_i5], 10);
+    if (isNaN(char_to_int)) {
+      char_to_int = chars[_i5].charCodeAt(0) - 65;
+    }
+    checksum += char_to_int;
+  }
+  var odd_convert = {
+    // Maps of characters at odd places
+    A: 1,
+    B: 0,
+    C: 5,
+    D: 7,
+    E: 9,
+    F: 13,
+    G: 15,
+    H: 17,
+    I: 19,
+    J: 21,
+    K: 2,
+    L: 4,
+    M: 18,
+    N: 20,
+    O: 11,
+    P: 3,
+    Q: 6,
+    R: 8,
+    S: 12,
+    T: 14,
+    U: 16,
+    V: 10,
+    W: 22,
+    X: 25,
+    Y: 24,
+    Z: 23,
+    0: 1,
+    1: 0
+  };
+  for (var _i6 = 0; _i6 < chars.length - 1; _i6 += 2) {
+    var _char_to_int = 0;
+    if (chars[_i6] in odd_convert) {
+      _char_to_int = odd_convert[chars[_i6]];
+    } else {
+      var multiplier = parseInt(chars[_i6], 10);
+      _char_to_int = 2 * multiplier + 1;
+      if (multiplier > 4) {
+        _char_to_int += 2;
+      }
+    }
+    checksum += _char_to_int;
+  }
+  if (String.fromCharCode(65 + checksum % 26) !== chars[15]) {
+    return false;
+  }
+  return true;
+}
+
+/*
+ * lv-LV validation function
+ * (Personas kods (PK), persons only)
+ * Check validity of birth date and calculate check (last) digit
+ * Support only for old format numbers (not starting with '32', issued before 2017/07/01)
+ * Material not in DG TAXUD document sourced from:
+ * `https://boot.ritakafija.lv/forums/index.php?/topic/88314-personas-koda-algoritms-%C4%8Deksumma/`
+ */
+function lvLvCheck(tin) {
+  tin = tin.replace(/\W/, '');
+  // Extract date from TIN
+  var day = tin.slice(0, 2);
+  if (day !== '32') {
+    // No date/checksum check if new format
+    var month = tin.slice(2, 4);
+    if (month !== '00') {
+      // No date check if unknown month
+      var full_year = tin.slice(4, 6);
+      switch (tin[6]) {
+        case '0':
+          full_year = "18".concat(full_year);
+          break;
+        case '1':
+          full_year = "19".concat(full_year);
+          break;
+        default:
+          full_year = "20".concat(full_year);
+          break;
+      }
+      // Check date validity
+      var date = "".concat(full_year, "/").concat(tin.slice(2, 4), "/").concat(day);
+      if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
+        return false;
+      }
+    }
+
+    // Calculate check digit
+    var checksum = 1101;
+    var multip_lookup = [1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
+    for (var i = 0; i < tin.length - 1; i++) {
+      checksum -= parseInt(tin[i], 10) * multip_lookup[i];
+    }
+    return parseInt(tin[10], 10) === checksum % 11;
+  }
+  return true;
+}
+
+/*
+ * mt-MT validation function
+ * (Identity Card Number or Unique Taxpayer Reference, persons/entities)
+ * Verify Identity Card Number structure (no other tests found)
+ */
+function mtMtCheck(tin) {
+  if (tin.length !== 9) {
+    // No tests for UTR
+    var chars = tin.toUpperCase().split('');
+    // Fill with zeros if smaller than proper
+    while (chars.length < 8) {
+      chars.unshift(0);
+    }
+    // Validate format according to last character
+    switch (tin[7]) {
+      case 'A':
+      case 'P':
+        if (parseInt(chars[6], 10) === 0) {
+          return false;
+        }
+        break;
+      default:
+        {
+          var first_part = parseInt(chars.join('').slice(0, 5), 10);
+          if (first_part > 32000) {
+            return false;
+          }
+          var second_part = parseInt(chars.join('').slice(5, 7), 10);
+          if (first_part === second_part) {
+            return false;
+          }
+        }
+    }
+  }
+  return true;
+}
+
+/*
+ * nl-NL validation function
+ * (Burgerservicenummer (BSN) or Rechtspersonen Samenwerkingsverbanden Informatie Nummer (RSIN),
+ * persons/entities respectively)
+ * Verify TIN validity by calculating check (last) digit (variant of MOD 11)
+ */
+function nlNlCheck(tin) {
+  return algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 8).map(function (a) {
+    return parseInt(a, 10);
+  }), 9) % 11 === parseInt(tin[8], 10);
+}
+
+/*
+ * pl-PL validation function
+ * (Powszechny Elektroniczny System Ewidencji Ludno\u015bci (PESEL)
+ * or Numer identyfikacji podatkowej (NIP), persons/entities)
+ * Verify TIN validity by validating birth date (PESEL) and calculating check (last) digit
+ */
+function plPlCheck(tin) {
+  // NIP
+  if (tin.length === 10) {
+    // Calculate last digit by multiplying with lookup
+    var lookup = [6, 5, 7, 2, 3, 4, 5, 6, 7];
+    var _checksum = 0;
+    for (var i = 0; i < lookup.length; i++) {
+      _checksum += parseInt(tin[i], 10) * lookup[i];
+    }
+    _checksum %= 11;
+    if (_checksum === 10) {
+      return false;
+    }
+    return _checksum === parseInt(tin[9], 10);
+  }
+
+  // PESEL
+  // Extract full year using month
+  var full_year = tin.slice(0, 2);
+  var month = parseInt(tin.slice(2, 4), 10);
+  if (month > 80) {
+    full_year = "18".concat(full_year);
+    month -= 80;
+  } else if (month > 60) {
+    full_year = "22".concat(full_year);
+    month -= 60;
+  } else if (month > 40) {
+    full_year = "21".concat(full_year);
+    month -= 40;
+  } else if (month > 20) {
+    full_year = "20".concat(full_year);
+    month -= 20;
+  } else {
+    full_year = "19".concat(full_year);
+  }
+  // Add leading zero to month if needed
+  if (month < 10) {
+    month = "0".concat(month);
+  }
+  // Check date validity
+  var date = "".concat(full_year, "/").concat(month, "/").concat(tin.slice(4, 6));
+  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
+    return false;
+  }
+
+  // Calculate last digit by multiplying with odd one-digit numbers except 5
+  var checksum = 0;
+  var multiplier = 1;
+  for (var _i7 = 0; _i7 < tin.length - 1; _i7++) {
+    checksum += parseInt(tin[_i7], 10) * multiplier % 10;
+    multiplier += 2;
+    if (multiplier > 10) {
+      multiplier = 1;
+    } else if (multiplier === 5) {
+      multiplier += 2;
+    }
+  }
+  checksum = 10 - checksum % 10;
+  return checksum === parseInt(tin[10], 10);
+}
+
+/*
+* pt-BR validation function
+* (Cadastro de Pessoas F\u00edsicas (CPF, persons)
+* Cadastro Nacional de Pessoas Jur\u00eddicas (CNPJ, entities)
+* Both inputs will be validated
+*/
+
+function ptBrCheck(tin) {
+  if (tin.length === 11) {
+    var _sum;
+    var remainder;
+    _sum = 0;
+    if (
+    // Reject known invalid CPFs
+    tin === '11111111111' || tin === '22222222222' || tin === '33333333333' || tin === '44444444444' || tin === '55555555555' || tin === '66666666666' || tin === '77777777777' || tin === '88888888888' || tin === '99999999999' || tin === '00000000000') return false;
+    for (var i = 1; i <= 9; i++) _sum += parseInt(tin.substring(i - 1, i), 10) * (11 - i);
+    remainder = _sum * 10 % 11;
+    if (remainder === 10) remainder = 0;
+    if (remainder !== parseInt(tin.substring(9, 10), 10)) return false;
+    _sum = 0;
+    for (var _i8 = 1; _i8 <= 10; _i8++) _sum += parseInt(tin.substring(_i8 - 1, _i8), 10) * (12 - _i8);
+    remainder = _sum * 10 % 11;
+    if (remainder === 10) remainder = 0;
+    if (remainder !== parseInt(tin.substring(10, 11), 10)) return false;
+    return true;
+  }
+  if (
+  // Reject know invalid CNPJs
+  tin === '00000000000000' || tin === '11111111111111' || tin === '22222222222222' || tin === '33333333333333' || tin === '44444444444444' || tin === '55555555555555' || tin === '66666666666666' || tin === '77777777777777' || tin === '88888888888888' || tin === '99999999999999') {
+    return false;
+  }
+  var length = tin.length - 2;
+  var identifiers = tin.substring(0, length);
+  var verificators = tin.substring(length);
+  var sum = 0;
+  var pos = length - 7;
+  for (var _i9 = length; _i9 >= 1; _i9--) {
+    sum += identifiers.charAt(length - _i9) * pos;
+    pos -= 1;
+    if (pos < 2) {
+      pos = 9;
+    }
+  }
+  var result = sum % 11 < 2 ? 0 : 11 - sum % 11;
+  if (result !== parseInt(verificators.charAt(0), 10)) {
+    return false;
+  }
+  length += 1;
+  identifiers = tin.substring(0, length);
+  sum = 0;
+  pos = length - 7;
+  for (var _i0 = length; _i0 >= 1; _i0--) {
+    sum += identifiers.charAt(length - _i0) * pos;
+    pos -= 1;
+    if (pos < 2) {
+      pos = 9;
+    }
+  }
+  result = sum % 11 < 2 ? 0 : 11 - sum % 11;
+  if (result !== parseInt(verificators.charAt(1), 10)) {
+    return false;
+  }
+  return true;
+}
+
+/*
+ * pt-PT validation function
+ * (N\u00famero de identifica\u00e7\u00e3o fiscal (NIF), persons/entities)
+ * Verify TIN validity by calculating check (last) digit (variant of MOD 11)
+ */
+function ptPtCheck(tin) {
+  var checksum = 11 - algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 8).map(function (a) {
+    return parseInt(a, 10);
+  }), 9) % 11;
+  if (checksum > 9) {
+    return parseInt(tin[8], 10) === 0;
+  }
+  return checksum === parseInt(tin[8], 10);
+}
+
+/*
+ * ro-RO validation function
+ * (Cod Numeric Personal (CNP) or Cod de \u00eenregistrare fiscal\u0103 (CIF),
+ * persons only)
+ * Verify CNP validity by calculating check (last) digit (test not found for CIF)
+ * Material not in DG TAXUD document sourced from:
+ * `https://en.wikipedia.org/wiki/National_identification_number#Romania`
+ */
+function roRoCheck(tin) {
+  if (tin.slice(0, 4) !== '9000') {
+    // No test found for this format
+    // Extract full year using century digit if possible
+    var full_year = tin.slice(1, 3);
+    switch (tin[0]) {
+      case '1':
+      case '2':
+        full_year = "19".concat(full_year);
+        break;
+      case '3':
+      case '4':
+        full_year = "18".concat(full_year);
+        break;
+      case '5':
+      case '6':
+        full_year = "20".concat(full_year);
+        break;
+      default:
+    }
+
+    // Check date validity
+    var date = "".concat(full_year, "/").concat(tin.slice(3, 5), "/").concat(tin.slice(5, 7));
+    if (date.length === 8) {
+      if (!(0, _isDate.default)(date, 'YY/MM/DD')) {
+        return false;
+      }
+    } else if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
+      return false;
+    }
+
+    // Calculate check digit
+    var digits = tin.split('').map(function (a) {
+      return parseInt(a, 10);
+    });
+    var multipliers = [2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9];
+    var checksum = 0;
+    for (var i = 0; i < multipliers.length; i++) {
+      checksum += digits[i] * multipliers[i];
+    }
+    if (checksum % 11 === 10) {
+      return digits[12] === 1;
+    }
+    return digits[12] === checksum % 11;
+  }
+  return true;
+}
+
+/*
+ * sk-SK validation function
+ * (Rodn\u00e9 \u010d\u00edslo (R\u010c) or bezv\u00fdznamov\u00e9 identifika\u010dn\u00e9 \u010d\u00edslo (BI\u010c), persons only)
+ * Checks validity of pre-1954 birth numbers (rodn\u00e9 \u010d\u00edslo) only
+ * Due to the introduction of the pseudo-random BI\u010c it is not possible to test
+ * post-1954 birth numbers without knowing whether they are BI\u010c or R\u010c beforehand
+ */
+function skSkCheck(tin) {
+  if (tin.length === 9) {
+    tin = tin.replace(/\W/, '');
+    if (tin.slice(6) === '000') {
+      return false;
+    } // Three-zero serial not assigned before 1954
+
+    // Extract full year from TIN length
+    var full_year = parseInt(tin.slice(0, 2), 10);
+    if (full_year > 53) {
+      return false;
+    }
+    if (full_year < 10) {
+      full_year = "190".concat(full_year);
+    } else {
+      full_year = "19".concat(full_year);
+    }
+
+    // Extract month from TIN and normalize
+    var month = parseInt(tin.slice(2, 4), 10);
+    if (month > 50) {
+      month -= 50;
+    }
+    if (month < 10) {
+      month = "0".concat(month);
+    }
+
+    // Check date validity
+    var date = "".concat(full_year, "/").concat(month, "/").concat(tin.slice(4, 6));
+    if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
+      return false;
+    }
+  }
+  return true;
+}
+
+/*
+ * sl-SI validation function
+ * (Dav\u010dna \u0161tevilka, persons/entities)
+ * Verify TIN validity by calculating check (last) digit (variant of MOD 11)
+ */
+function slSiCheck(tin) {
+  var checksum = 11 - algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 7).map(function (a) {
+    return parseInt(a, 10);
+  }), 8) % 11;
+  if (checksum === 10) {
+    return parseInt(tin[7], 10) === 0;
+  }
+  return checksum === parseInt(tin[7], 10);
+}
+
+/*
+ * sv-SE validation function
+ * (Personnummer or samordningsnummer, persons only)
+ * Checks validity of birth date and calls luhnCheck() to validate check (last) digit
+ */
+function svSeCheck(tin) {
+  // Make copy of TIN and normalize to two-digit year form
+  var tin_copy = tin.slice(0);
+  if (tin.length > 11) {
+    tin_copy = tin_copy.slice(2);
+  }
+
+  // Extract date of birth
+  var full_year = '';
+  var month = tin_copy.slice(2, 4);
+  var day = parseInt(tin_copy.slice(4, 6), 10);
+  if (tin.length > 11) {
+    full_year = tin.slice(0, 4);
+  } else {
+    full_year = tin.slice(0, 2);
+    if (tin.length === 11 && day < 60) {
+      // Extract full year from centenarian symbol
+      // Should work just fine until year 10000 or so
+      var current_year = new Date().getFullYear().toString();
+      var current_century = parseInt(current_year.slice(0, 2), 10);
+      current_year = parseInt(current_year, 10);
+      if (tin[6] === '-') {
+        if (parseInt("".concat(current_century).concat(full_year), 10) > current_year) {
+          full_year = "".concat(current_century - 1).concat(full_year);
+        } else {
+          full_year = "".concat(current_century).concat(full_year);
+        }
+      } else {
+        full_year = "".concat(current_century - 1).concat(full_year);
+        if (current_year - parseInt(full_year, 10) < 100) {
+          return false;
+        }
+      }
+    }
+  }
+
+  // Normalize day and check date validity
+  if (day > 60) {
+    day -= 60;
+  }
+  if (day < 10) {
+    day = "0".concat(day);
+  }
+  var date = "".concat(full_year, "/").concat(month, "/").concat(day);
+  if (date.length === 8) {
+    if (!(0, _isDate.default)(date, 'YY/MM/DD')) {
+      return false;
+    }
+  } else if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
+    return false;
+  }
+  return algorithms.luhnCheck(tin.replace(/\W/, ''));
+}
+
+/**
+ * uk-UA validation function
+ * Verify TIN validity by calculating check (last) digit (variant of MOD 11)
+ */
+function ukUaCheck(tin) {
+  // Calculate check digit
+  var digits = tin.split('').map(function (a) {
+    return parseInt(a, 10);
+  });
+  var multipliers = [-1, 5, 7, 9, 4, 6, 10, 5, 7];
+  var checksum = 0;
+  for (var i = 0; i < multipliers.length; i++) {
+    checksum += digits[i] * multipliers[i];
+  }
+  return checksum % 11 === 10 ? digits[9] === 0 : digits[9] === checksum % 11;
+}
+
+// Locale lookup objects
+
+/*
+ * Tax id regex formats for various locales
+ *
+ * Where not explicitly specified in DG-TAXUD document both
+ * uppercase and lowercase letters are acceptable.
+ */
+var taxIdFormat = {
+  'bg-BG': /^\d{10}$/,
+  'cs-CZ': /^\d{6}\/{0,1}\d{3,4}$/,
+  'de-AT': /^\d{9}$/,
+  'de-DE': /^[1-9]\d{10}$/,
+  'dk-DK': /^\d{6}-{0,1}\d{4}$/,
+  'el-CY': /^[09]\d{7}[A-Z]$/,
+  'el-GR': /^([0-4]|[7-9])\d{8}$/,
+  'en-CA': /^\d{9}$/,
+  'en-GB': /^\d{10}$|^(?!GB|NK|TN|ZZ)(?![DFIQUV])[A-Z](?![DFIQUVO])[A-Z]\d{6}[ABCD ]$/i,
+  'en-IE': /^\d{7}[A-W][A-IW]{0,1}$/i,
+  'en-US': /^\d{2}[- ]{0,1}\d{7}$/,
+  'es-AR': /(20|23|24|27|30|33|34)[0-9]{8}[0-9]/,
+  'es-ES': /^(\d{0,8}|[XYZKLM]\d{7})[A-HJ-NP-TV-Z]$/i,
+  'et-EE': /^[1-6]\d{6}(00[1-9]|0[1-9][0-9]|[1-6][0-9]{2}|70[0-9]|710)\d$/,
+  'fi-FI': /^\d{6}[-+A]\d{3}[0-9A-FHJ-NPR-Y]$/i,
+  'fr-BE': /^\d{11}$/,
+  'fr-FR': /^[0-3]\d{12}$|^[0-3]\d\s\d{2}(\s\d{3}){3}$/,
+  // Conforms both to official spec and provided example
+  'fr-LU': /^\d{13}$/,
+  'hr-HR': /^\d{11}$/,
+  'hu-HU': /^8\d{9}$/,
+  'it-IT': /^[A-Z]{6}[L-NP-V0-9]{2}[A-EHLMPRST][L-NP-V0-9]{2}[A-ILMZ][L-NP-V0-9]{3}[A-Z]$/i,
+  'lv-LV': /^\d{6}-{0,1}\d{5}$/,
+  // Conforms both to DG TAXUD spec and original research
+  'mt-MT': /^\d{3,7}[APMGLHBZ]$|^([1-8])\1\d{7}$/i,
+  'nl-NL': /^\d{9}$/,
+  'pl-PL': /^\d{10,11}$/,
+  'pt-BR': /(?:^\d{11}$)|(?:^\d{14}$)/,
+  'pt-PT': /^\d{9}$/,
+  'ro-RO': /^\d{13}$/,
+  'sk-SK': /^\d{6}\/{0,1}\d{3,4}$/,
+  'sl-SI': /^[1-9]\d{7}$/,
+  'sv-SE': /^(\d{6}[-+]{0,1}\d{4}|(18|19|20)\d{6}[-+]{0,1}\d{4})$/,
+  'uk-UA': /^\d{10}$/
+};
+// taxIdFormat locale aliases
+taxIdFormat['lb-LU'] = taxIdFormat['fr-LU'];
+taxIdFormat['lt-LT'] = taxIdFormat['et-EE'];
+taxIdFormat['nl-BE'] = taxIdFormat['fr-BE'];
+taxIdFormat['fr-CA'] = taxIdFormat['en-CA'];
+
+// Algorithmic tax id check functions for various locales
+var taxIdCheck = {
+  'bg-BG': bgBgCheck,
+  'cs-CZ': csCzCheck,
+  'de-AT': deAtCheck,
+  'de-DE': deDeCheck,
+  'dk-DK': dkDkCheck,
+  'el-CY': elCyCheck,
+  'el-GR': elGrCheck,
+  'en-CA': isCanadianSIN,
+  'en-IE': enIeCheck,
+  'en-US': enUsCheck,
+  'es-AR': esArCheck,
+  'es-ES': esEsCheck,
+  'et-EE': etEeCheck,
+  'fi-FI': fiFiCheck,
+  'fr-BE': frBeCheck,
+  'fr-FR': frFrCheck,
+  'fr-LU': frLuCheck,
+  'hr-HR': hrHrCheck,
+  'hu-HU': huHuCheck,
+  'it-IT': itItCheck,
+  'lv-LV': lvLvCheck,
+  'mt-MT': mtMtCheck,
+  'nl-NL': nlNlCheck,
+  'pl-PL': plPlCheck,
+  'pt-BR': ptBrCheck,
+  'pt-PT': ptPtCheck,
+  'ro-RO': roRoCheck,
+  'sk-SK': skSkCheck,
+  'sl-SI': slSiCheck,
+  'sv-SE': svSeCheck,
+  'uk-UA': ukUaCheck
+};
+// taxIdCheck locale aliases
+taxIdCheck['lb-LU'] = taxIdCheck['fr-LU'];
+taxIdCheck['lt-LT'] = taxIdCheck['et-EE'];
+taxIdCheck['nl-BE'] = taxIdCheck['fr-BE'];
+taxIdCheck['fr-CA'] = taxIdCheck['en-CA'];
+
+// Regexes for locales where characters should be omitted before checking format
+var allsymbols = /[-\\\/!@#$%\^&\*\(\)\+\=\[\]]+/g;
+var sanitizeRegexes = {
+  'de-AT': allsymbols,
+  'de-DE': /[\/\\]/g,
+  'fr-BE': allsymbols
+};
+// sanitizeRegexes locale aliases
+sanitizeRegexes['nl-BE'] = sanitizeRegexes['fr-BE'];
+
+/*
+ * Validator function
+ * Return true if the passed string is a valid tax identification number
+ * for the specified locale.
+ * Throw an error exception if the locale is not supported.
+ */
+function isTaxID(str) {
+  var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';
+  (0, _assertString.default)(str);
+  // Copy TIN to avoid replacement if sanitized
+  var strcopy = str.slice(0);
+  if (locale in taxIdFormat) {
+    if (locale in sanitizeRegexes) {
+      strcopy = strcopy.replace(sanitizeRegexes[locale], '');
+    }
+    if (!taxIdFormat[locale].test(strcopy)) {
+      return false;
+    }
+    if (locale in taxIdCheck) {
+      return taxIdCheck[locale](strcopy);
+    }
+    // Fallthrough; not all locales have algorithmic checks
+    return true;
+  }
+  throw new Error("Invalid locale '".concat(locale, "'"));
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 7761:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = void 0;
+var _toDate = _interopRequireDefault(__webpack_require__(3752));
+var _toFloat = _interopRequireDefault(__webpack_require__(1371));
+var _toInt = _interopRequireDefault(__webpack_require__(855));
+var _toBoolean = _interopRequireDefault(__webpack_require__(3214));
+var _equals = _interopRequireDefault(__webpack_require__(700));
+var _contains = _interopRequireDefault(__webpack_require__(9220));
+var _matches = _interopRequireDefault(__webpack_require__(2576));
+var _isEmail = _interopRequireDefault(__webpack_require__(9517));
+var _isURL = _interopRequireDefault(__webpack_require__(7844));
+var _isMACAddress = _interopRequireDefault(__webpack_require__(3196));
+var _isIP = _interopRequireDefault(__webpack_require__(5372));
+var _isIPRange = _interopRequireDefault(__webpack_require__(7115));
+var _isFQDN = _interopRequireDefault(__webpack_require__(7658));
+var _isDate = _interopRequireDefault(__webpack_require__(9013));
+var _isTime = _interopRequireDefault(__webpack_require__(8796));
+var _isBoolean = _interopRequireDefault(__webpack_require__(1697));
+var _isLocale = _interopRequireDefault(__webpack_require__(7071));
+var _isAbaRouting = _interopRequireDefault(__webpack_require__(4325));
+var _isAlpha = _interopRequireWildcard(__webpack_require__(6529));
+var _isAlphanumeric = _interopRequireWildcard(__webpack_require__(8986));
+var _isNumeric = _interopRequireDefault(__webpack_require__(1666));
+var _isPassportNumber = _interopRequireWildcard(__webpack_require__(3442));
+var _isPort = _interopRequireDefault(__webpack_require__(3906));
+var _isLowercase = _interopRequireDefault(__webpack_require__(7612));
+var _isUppercase = _interopRequireDefault(__webpack_require__(5577));
+var _isIMEI = _interopRequireDefault(__webpack_require__(8461));
+var _isAscii = _interopRequireDefault(__webpack_require__(4294));
+var _isFullWidth = _interopRequireDefault(__webpack_require__(9666));
+var _isHalfWidth = _interopRequireDefault(__webpack_require__(9534));
+var _isVariableWidth = _interopRequireDefault(__webpack_require__(1449));
+var _isMultibyte = _interopRequireDefault(__webpack_require__(2830));
+var _isSemVer = _interopRequireDefault(__webpack_require__(9841));
+var _isSurrogatePair = _interopRequireDefault(__webpack_require__(3459));
+var _isInt = _interopRequireDefault(__webpack_require__(6084));
+var _isFloat = _interopRequireWildcard(__webpack_require__(995));
+var _isDecimal = _interopRequireDefault(__webpack_require__(5926));
+var _isHexadecimal = _interopRequireDefault(__webpack_require__(2002));
+var _isOctal = _interopRequireDefault(__webpack_require__(9546));
+var _isDivisibleBy = _interopRequireDefault(__webpack_require__(3735));
+var _isHexColor = _interopRequireDefault(__webpack_require__(4641));
+var _isRgbColor = _interopRequireDefault(__webpack_require__(5467));
+var _isHSL = _interopRequireDefault(__webpack_require__(7086));
+var _isISRC = _interopRequireDefault(__webpack_require__(1954));
+var _isIBAN = _interopRequireWildcard(__webpack_require__(3641));
+var _isBIC = _interopRequireDefault(__webpack_require__(5259));
+var _isMD = _interopRequireDefault(__webpack_require__(9745));
+var _isHash = _interopRequireDefault(__webpack_require__(3973));
+var _isJWT = _interopRequireDefault(__webpack_require__(9172));
+var _isJSON = _interopRequireDefault(__webpack_require__(5751));
+var _isEmpty = _interopRequireDefault(__webpack_require__(2056));
+var _isLength = _interopRequireDefault(__webpack_require__(9285));
+var _isByteLength = _interopRequireDefault(__webpack_require__(6255));
+var _isULID = _interopRequireDefault(__webpack_require__(9877));
+var _isUUID = _interopRequireDefault(__webpack_require__(5186));
+var _isMongoId = _interopRequireDefault(__webpack_require__(1252));
+var _isAfter = _interopRequireDefault(__webpack_require__(1195));
+var _isBefore = _interopRequireDefault(__webpack_require__(6658));
+var _isIn = _interopRequireDefault(__webpack_require__(9266));
+var _isLuhnNumber = _interopRequireDefault(__webpack_require__(3609));
+var _isCreditCard = _interopRequireDefault(__webpack_require__(1062));
+var _isIdentityCard = _interopRequireDefault(__webpack_require__(2645));
+var _isEAN = _interopRequireDefault(__webpack_require__(7717));
+var _isISIN = _interopRequireDefault(__webpack_require__(2678));
+var _isISBN = _interopRequireDefault(__webpack_require__(9717));
+var _isISSN = _interopRequireDefault(__webpack_require__(604));
+var _isTaxID = _interopRequireDefault(__webpack_require__(7741));
+var _isMobilePhone = _interopRequireWildcard(__webpack_require__(5251));
+var _isEthereumAddress = _interopRequireDefault(__webpack_require__(82));
+var _isCurrency = _interopRequireDefault(__webpack_require__(6782));
+var _isBtcAddress = _interopRequireDefault(__webpack_require__(5748));
+var _isISO = __webpack_require__(5777);
+var _isISO2 = _interopRequireDefault(__webpack_require__(8033));
+var _isISO3 = _interopRequireDefault(__webpack_require__(6169));
+var _isRFC = _interopRequireDefault(__webpack_require__(1578));
+var _isISO4 = _interopRequireDefault(__webpack_require__(3405));
+var _isISO31661Alpha = _interopRequireDefault(__webpack_require__(8447));
+var _isISO31661Alpha2 = _interopRequireDefault(__webpack_require__(3832));
+var _isISO31661Numeric = _interopRequireDefault(__webpack_require__(3158));
+var _isISO5 = _interopRequireDefault(__webpack_require__(8342));
+var _isBase = _interopRequireDefault(__webpack_require__(7673));
+var _isBase2 = _interopRequireDefault(__webpack_require__(6617));
+var _isBase3 = _interopRequireDefault(__webpack_require__(8274));
+var _isDataURI = _interopRequireDefault(__webpack_require__(3583));
+var _isMagnetURI = _interopRequireDefault(__webpack_require__(7349));
+var _isMailtoURI = _interopRequireDefault(__webpack_require__(2337));
+var _isMimeType = _interopRequireDefault(__webpack_require__(4633));
+var _isLatLong = _interopRequireDefault(__webpack_require__(5830));
+var _isPostalCode = _interopRequireWildcard(__webpack_require__(3939));
+var _ltrim = _interopRequireDefault(__webpack_require__(2309));
+var _rtrim = _interopRequireDefault(__webpack_require__(2483));
+var _trim = _interopRequireDefault(__webpack_require__(317));
+var _escape = _interopRequireDefault(__webpack_require__(9790));
+var _unescape = _interopRequireDefault(__webpack_require__(7677));
+var _stripLow = _interopRequireDefault(__webpack_require__(561));
+var _whitelist = _interopRequireDefault(__webpack_require__(1996));
+var _blacklist = _interopRequireDefault(__webpack_require__(410));
+var _isWhitelisted = _interopRequireDefault(__webpack_require__(629));
+var _normalizeEmail = _interopRequireDefault(__webpack_require__(1128));
+var _isSlug = _interopRequireDefault(__webpack_require__(9234));
+var _isLicensePlate = _interopRequireDefault(__webpack_require__(676));
+var _isStrongPassword = _interopRequireDefault(__webpack_require__(7179));
+var _isVAT = _interopRequireDefault(__webpack_require__(5366));
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var version = '13.15.15';
+var validator = {
+  version: version,
+  toDate: _toDate.default,
+  toFloat: _toFloat.default,
+  toInt: _toInt.default,
+  toBoolean: _toBoolean.default,
+  equals: _equals.default,
+  contains: _contains.default,
+  matches: _matches.default,
+  isEmail: _isEmail.default,
+  isURL: _isURL.default,
+  isMACAddress: _isMACAddress.default,
+  isIP: _isIP.default,
+  isIPRange: _isIPRange.default,
+  isFQDN: _isFQDN.default,
+  isBoolean: _isBoolean.default,
+  isIBAN: _isIBAN.default,
+  isBIC: _isBIC.default,
+  isAbaRouting: _isAbaRouting.default,
+  isAlpha: _isAlpha.default,
+  isAlphaLocales: _isAlpha.locales,
+  isAlphanumeric: _isAlphanumeric.default,
+  isAlphanumericLocales: _isAlphanumeric.locales,
+  isNumeric: _isNumeric.default,
+  isPassportNumber: _isPassportNumber.default,
+  passportNumberLocales: _isPassportNumber.locales,
+  isPort: _isPort.default,
+  isLowercase: _isLowercase.default,
+  isUppercase: _isUppercase.default,
+  isAscii: _isAscii.default,
+  isFullWidth: _isFullWidth.default,
+  isHalfWidth: _isHalfWidth.default,
+  isVariableWidth: _isVariableWidth.default,
+  isMultibyte: _isMultibyte.default,
+  isSemVer: _isSemVer.default,
+  isSurrogatePair: _isSurrogatePair.default,
+  isInt: _isInt.default,
+  isIMEI: _isIMEI.default,
+  isFloat: _isFloat.default,
+  isFloatLocales: _isFloat.locales,
+  isDecimal: _isDecimal.default,
+  isHexadecimal: _isHexadecimal.default,
+  isOctal: _isOctal.default,
+  isDivisibleBy: _isDivisibleBy.default,
+  isHexColor: _isHexColor.default,
+  isRgbColor: _isRgbColor.default,
+  isHSL: _isHSL.default,
+  isISRC: _isISRC.default,
+  isMD5: _isMD.default,
+  isHash: _isHash.default,
+  isJWT: _isJWT.default,
+  isJSON: _isJSON.default,
+  isEmpty: _isEmpty.default,
+  isLength: _isLength.default,
+  isLocale: _isLocale.default,
+  isByteLength: _isByteLength.default,
+  isULID: _isULID.default,
+  isUUID: _isUUID.default,
+  isMongoId: _isMongoId.default,
+  isAfter: _isAfter.default,
+  isBefore: _isBefore.default,
+  isIn: _isIn.default,
+  isLuhnNumber: _isLuhnNumber.default,
+  isCreditCard: _isCreditCard.default,
+  isIdentityCard: _isIdentityCard.default,
+  isEAN: _isEAN.default,
+  isISIN: _isISIN.default,
+  isISBN: _isISBN.default,
+  isISSN: _isISSN.default,
+  isMobilePhone: _isMobilePhone.default,
+  isMobilePhoneLocales: _isMobilePhone.locales,
+  isPostalCode: _isPostalCode.default,
+  isPostalCodeLocales: _isPostalCode.locales,
+  isEthereumAddress: _isEthereumAddress.default,
+  isCurrency: _isCurrency.default,
+  isBtcAddress: _isBtcAddress.default,
+  isISO6346: _isISO.isISO6346,
+  isFreightContainerID: _isISO.isFreightContainerID,
+  isISO6391: _isISO2.default,
+  isISO8601: _isISO3.default,
+  isISO15924: _isISO4.default,
+  isRFC3339: _isRFC.default,
+  isISO31661Alpha2: _isISO31661Alpha.default,
+  isISO31661Alpha3: _isISO31661Alpha2.default,
+  isISO31661Numeric: _isISO31661Numeric.default,
+  isISO4217: _isISO5.default,
+  isBase32: _isBase.default,
+  isBase58: _isBase2.default,
+  isBase64: _isBase3.default,
+  isDataURI: _isDataURI.default,
+  isMagnetURI: _isMagnetURI.default,
+  isMailtoURI: _isMailtoURI.default,
+  isMimeType: _isMimeType.default,
+  isLatLong: _isLatLong.default,
+  ltrim: _ltrim.default,
+  rtrim: _rtrim.default,
+  trim: _trim.default,
+  escape: _escape.default,
+  unescape: _unescape.default,
+  stripLow: _stripLow.default,
+  whitelist: _whitelist.default,
+  blacklist: _blacklist.default,
+  isWhitelisted: _isWhitelisted.default,
+  normalizeEmail: _normalizeEmail.default,
+  toString: toString,
+  isSlug: _isSlug.default,
+  isStrongPassword: _isStrongPassword.default,
+  isTaxID: _isTaxID.default,
+  isDate: _isDate.default,
+  isTime: _isTime.default,
+  isLicensePlate: _isLicensePlate.default,
+  isVAT: _isVAT.default,
+  ibanLocales: _isIBAN.locales
+};
+var _default = exports["default"] = validator;
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 7844:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isURL;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _checkHost = _interopRequireDefault(__webpack_require__(1572));
+var _includesString = _interopRequireDefault(__webpack_require__(4636));
+var _isFQDN = _interopRequireDefault(__webpack_require__(7658));
+var _isIP = _interopRequireDefault(__webpack_require__(5372));
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
+function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
+/*
+options for isURL method
+
+protocols - valid protocols can be modified with this option.
+require_tld - If set to false isURL will not check if the URL's host includes a top-level domain.
+require_protocol - if set to true isURL will return false if protocol is not present in the URL.
+require_host - if set to false isURL will not check if host is present in the URL.
+require_port - if set to true isURL will check if port is present in the URL.
+require_valid_protocol - isURL will check if the URL's protocol is present in the protocols option.
+allow_underscores - if set to true, the validator will allow underscores in the URL.
+host_whitelist - if set to an array of strings or regexp, and the domain matches none of the strings
+                 defined in it, the validation fails.
+host_blacklist - if set to an array of strings or regexp, and the domain matches any of the strings
+                 defined in it, the validation fails.
+allow_trailing_dot - if set to true, the validator will allow the domain to end with
+                     a `.` character.
+allow_protocol_relative_urls - if set to true protocol relative URLs will be allowed.
+allow_fragments - if set to false isURL will return false if fragments are present.
+allow_query_components - if set to false isURL will return false if query components are present.
+disallow_auth - if set to true, the validator will fail if the URL contains an authentication
+                component, e.g. `http://username:[email protected]`
+validate_length - if set to false isURL will skip string length validation. `max_allowed_length`
+                  will be ignored if this is set as `false`.
+max_allowed_length - if set, isURL will not allow URLs longer than the specified value (default is
+                     2084 that IE maximum URL length).
+
+*/
+
+var default_url_options = {
+  protocols: ['http', 'https', 'ftp'],
+  require_tld: true,
+  require_protocol: false,
+  require_host: true,
+  require_port: false,
+  require_valid_protocol: true,
+  allow_underscores: false,
+  allow_trailing_dot: false,
+  allow_protocol_relative_urls: false,
+  allow_fragments: true,
+  allow_query_components: true,
+  validate_length: true,
+  max_allowed_length: 2084
+};
+var wrapped_ipv6 = /^\[([^\]]+)\](?::([0-9]+))?$/;
+function isURL(url, options) {
+  (0, _assertString.default)(url);
+  if (!url || /[\s<>]/.test(url)) {
+    return false;
+  }
+  if (url.indexOf('mailto:') === 0) {
+    return false;
+  }
+  options = (0, _merge.default)(options, default_url_options);
+  if (options.validate_length && url.length > options.max_allowed_length) {
+    return false;
+  }
+  if (!options.allow_fragments && (0, _includesString.default)(url, '#')) {
+    return false;
+  }
+  if (!options.allow_query_components && ((0, _includesString.default)(url, '?') || (0, _includesString.default)(url, '&'))) {
+    return false;
+  }
+  var protocol, auth, host, hostname, port, port_str, split, ipv6;
+  split = url.split('#');
+  url = split.shift();
+  split = url.split('?');
+  url = split.shift();
+  split = url.split('://');
+  if (split.length > 1) {
+    protocol = split.shift().toLowerCase();
+    if (options.require_valid_protocol && options.protocols.indexOf(protocol) === -1) {
+      return false;
+    }
+  } else if (options.require_protocol) {
+    return false;
+  } else if (url.slice(0, 2) === '//') {
+    if (!options.allow_protocol_relative_urls) {
+      return false;
+    }
+    split[0] = url.slice(2);
+  }
+  url = split.join('://');
+  if (url === '') {
+    return false;
+  }
+  split = url.split('/');
+  url = split.shift();
+  if (url === '' && !options.require_host) {
+    return true;
+  }
+  split = url.split('@');
+  if (split.length > 1) {
+    if (options.disallow_auth) {
+      return false;
+    }
+    if (split[0] === '') {
+      return false;
+    }
+    auth = split.shift();
+    if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) {
+      return false;
+    }
+    var _auth$split = auth.split(':'),
+      _auth$split2 = _slicedToArray(_auth$split, 2),
+      user = _auth$split2[0],
+      password = _auth$split2[1];
+    if (user === '' && password === '') {
+      return false;
+    }
+  }
+  hostname = split.join('@');
+  port_str = null;
+  ipv6 = null;
+  var ipv6_match = hostname.match(wrapped_ipv6);
+  if (ipv6_match) {
+    host = '';
+    ipv6 = ipv6_match[1];
+    port_str = ipv6_match[2] || null;
+  } else {
+    split = hostname.split(':');
+    host = split.shift();
+    if (split.length) {
+      port_str = split.join(':');
+    }
+  }
+  if (port_str !== null && port_str.length > 0) {
+    port = parseInt(port_str, 10);
+    if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) {
+      return false;
+    }
+  } else if (options.require_port) {
+    return false;
+  }
+  if (options.host_whitelist) {
+    return (0, _checkHost.default)(host, options.host_whitelist);
+  }
+  if (host === '' && !options.require_host) {
+    return true;
+  }
+  if (!(0, _isIP.default)(host) && !(0, _isFQDN.default)(host, options) && (!ipv6 || !(0, _isIP.default)(ipv6, 6))) {
+    return false;
+  }
+  host = host || ipv6;
+  if (options.host_blacklist && (0, _checkHost.default)(host, options.host_blacklist)) {
+    return false;
+  }
+  return true;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 8033:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isISO6391;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var isISO6391Set = new Set(['aa', 'ab', 'ae', 'af', 'ak', 'am', 'an', 'ar', 'as', 'av', 'ay', 'az', 'az', 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ce', 'ch', 'co', 'cr', 'cs', 'cu', 'cv', 'cy', 'da', 'de', 'dv', 'dz', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fj', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hr', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'io', 'is', 'it', 'iu', 'ja', 'jv', 'ka', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ku', 'kv', 'kw', 'ky', 'la', 'lb', 'lg', 'li', 'ln', 'lo', 'lt', 'lu', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mr', 'ms', 'mt', 'my', 'na', 'nb', 'nd', 'ne', 'ng', 'nl', 'nn', 'no', 'nr', 'nv', 'ny', 'oc', 'oj', 'om', 'or', 'os', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu', 'rm', 'rn', 'ro', 'ru', 'rw', 'sa', 'sc', 'sd', 'se', 'sg', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tr', 'ts', 'tt', 'tw', 'ty', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi', 'yo', 'za', 'zh', 'zu']);
+function isISO6391(str) {
+  (0, _assertString.default)(str);
+  return isISO6391Set.has(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 8274:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isBase64;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var base64WithPadding = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/;
+var base64WithoutPadding = /^[A-Za-z0-9+/]+$/;
+var base64UrlWithPadding = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2}==|[A-Za-z0-9_-]{3}=|[A-Za-z0-9_-]{4})$/;
+var base64UrlWithoutPadding = /^[A-Za-z0-9_-]+$/;
+function isBase64(str, options) {
+  var _options;
+  (0, _assertString.default)(str);
+  options = (0, _merge.default)(options, {
+    urlSafe: false,
+    padding: !((_options = options) !== null && _options !== void 0 && _options.urlSafe)
+  });
+  if (str === '') return true;
+  var regex;
+  if (options.urlSafe) {
+    regex = options.padding ? base64UrlWithPadding : base64UrlWithoutPadding;
+  } else {
+    regex = options.padding ? base64WithPadding : base64WithoutPadding;
+  }
+  return (!options.padding || str.length % 4 === 0) && regex.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 8342:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.CurrencyCodes = void 0;
+exports["default"] = isISO4217;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+// from https://en.wikipedia.org/wiki/ISO_4217
+var validISO4217CurrencyCodes = new Set(['AED', 'AFN', 'ALL', 'AMD', 'ANG', 'AOA', 'ARS', 'AUD', 'AWG', 'AZN', 'BAM', 'BBD', 'BDT', 'BGN', 'BHD', 'BIF', 'BMD', 'BND', 'BOB', 'BOV', 'BRL', 'BSD', 'BTN', 'BWP', 'BYN', 'BZD', 'CAD', 'CDF', 'CHE', 'CHF', 'CHW', 'CLF', 'CLP', 'CNY', 'COP', 'COU', 'CRC', 'CUP', 'CVE', 'CZK', 'DJF', 'DKK', 'DOP', 'DZD', 'EGP', 'ERN', 'ETB', 'EUR', 'FJD', 'FKP', 'GBP', 'GEL', 'GHS', 'GIP', 'GMD', 'GNF', 'GTQ', 'GYD', 'HKD', 'HNL', 'HTG', 'HUF', 'IDR', 'ILS', 'INR', 'IQD', 'IRR', 'ISK', 'JMD', 'JOD', 'JPY', 'KES', 'KGS', 'KHR', 'KMF', 'KPW', 'KRW', 'KWD', 'KYD', 'KZT', 'LAK', 'LBP', 'LKR', 'LRD', 'LSL', 'LYD', 'MAD', 'MDL', 'MGA', 'MKD', 'MMK', 'MNT', 'MOP', 'MRU', 'MUR', 'MVR', 'MWK', 'MXN', 'MXV', 'MYR', 'MZN', 'NAD', 'NGN', 'NIO', 'NOK', 'NPR', 'NZD', 'OMR', 'PAB', 'PEN', 'PGK', 'PHP', 'PKR', 'PLN', 'PYG', 'QAR', 'RON', 'RSD', 'RUB', 'RWF', 'SAR', 'SBD', 'SCR', 'SDG', 'SEK', 'SGD', 'SHP', 'SLE', 'SLL', 'SOS', 'SRD', 'SSP', 'STN', 'SVC', 'SYP', 'SZL', 'THB', 'TJS', 'TMT', 'TND', 'TOP', 'TRY', 'TTD', 'TWD', 'TZS', 'UAH', 'UGX', 'USD', 'USN', 'UYI', 'UYU', 'UYW', 'UZS', 'VED', 'VES', 'VND', 'VUV', 'WST', 'XAF', 'XAG', 'XAU', 'XBA', 'XBB', 'XBC', 'XBD', 'XCD', 'XDR', 'XOF', 'XPD', 'XPF', 'XPT', 'XSU', 'XTS', 'XUA', 'XXX', 'YER', 'ZAR', 'ZMW', 'ZWL']);
+function isISO4217(str) {
+  (0, _assertString.default)(str);
+  return validISO4217CurrencyCodes.has(str.toUpperCase());
+}
+var CurrencyCodes = exports.CurrencyCodes = validISO4217CurrencyCodes;
+
+/***/ }),
+
+/***/ 8447:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports.CountryCodes = void 0;
+exports["default"] = isISO31661Alpha2;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+// from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
+var validISO31661Alpha2CountriesCodes = new Set(['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW']);
+function isISO31661Alpha2(str) {
+  (0, _assertString.default)(str);
+  return validISO31661Alpha2CountriesCodes.has(str.toUpperCase());
+}
+var CountryCodes = exports.CountryCodes = validISO31661Alpha2CountriesCodes;
+
+/***/ }),
+
+/***/ 8461:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isIMEI;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var imeiRegexWithoutHyphens = /^[0-9]{15}$/;
+var imeiRegexWithHyphens = /^\d{2}-\d{6}-\d{6}-\d{1}$/;
+function isIMEI(str, options) {
+  (0, _assertString.default)(str);
+  options = options || {};
+
+  // default regex for checking imei is the one without hyphens
+
+  var imeiRegex = imeiRegexWithoutHyphens;
+  if (options.allow_hyphens) {
+    imeiRegex = imeiRegexWithHyphens;
+  }
+  if (!imeiRegex.test(str)) {
+    return false;
+  }
+  str = str.replace(/-/g, '');
+  var sum = 0,
+    mul = 2,
+    l = 14;
+  for (var i = 0; i < l; i++) {
+    var digit = str.substring(l - i - 1, l - i);
+    var tp = parseInt(digit, 10) * mul;
+    if (tp >= 10) {
+      sum += tp % 10 + 1;
+    } else {
+      sum += tp;
+    }
+    if (mul === 1) {
+      mul += 1;
+    } else {
+      mul -= 1;
+    }
+  }
+  var chk = (10 - sum % 10) % 10;
+  if (chk !== parseInt(str.substring(14, 15), 10)) {
+    return false;
+  }
+  return true;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 8644:
+/***/ ((module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = void 0;
+var includes = function includes(arr, val) {
+  return arr.some(function (arrVal) {
+    return val === arrVal;
+  });
+};
+var _default = exports["default"] = includes;
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 8796:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isTime;
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var default_time_options = {
+  hourFormat: 'hour24',
+  mode: 'default'
+};
+var formats = {
+  hour24: {
+    default: /^([01]?[0-9]|2[0-3]):([0-5][0-9])$/,
+    withSeconds: /^([01]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/,
+    withOptionalSeconds: /^([01]?[0-9]|2[0-3]):([0-5][0-9])(?::([0-5][0-9]))?$/
+  },
+  hour12: {
+    default: /^(0?[1-9]|1[0-2]):([0-5][0-9]) (A|P)M$/,
+    withSeconds: /^(0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) (A|P)M$/,
+    withOptionalSeconds: /^(0?[1-9]|1[0-2]):([0-5][0-9])(?::([0-5][0-9]))? (A|P)M$/
+  }
+};
+function isTime(input, options) {
+  options = (0, _merge.default)(options, default_time_options);
+  if (typeof input !== 'string') return false;
+  return formats[options.hourFormat][options.mode].test(input);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 8986:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isAlphanumeric;
+exports.locales = void 0;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _alpha = __webpack_require__(3237);
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function isAlphanumeric(_str) {
+  var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';
+  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+  (0, _assertString.default)(_str);
+  var str = _str;
+  var ignore = options.ignore;
+  if (ignore) {
+    if (ignore instanceof RegExp) {
+      str = str.replace(ignore, '');
+    } else if (typeof ignore === 'string') {
+      str = str.replace(new RegExp("[".concat(ignore.replace(/[-[\]{}()*+?.,\\^$|#\\s]/g, '\\$&'), "]"), 'g'), ''); // escape regex for ignore
+    } else {
+      throw new Error('ignore should be instance of a String or RegExp');
+    }
+  }
+  if (locale in _alpha.alphanumeric) {
+    return _alpha.alphanumeric[locale].test(str);
+  }
+  throw new Error("Invalid locale '".concat(locale, "'"));
+}
+var locales = exports.locales = Object.keys(_alpha.alphanumeric);
+
+/***/ }),
+
+/***/ 9013:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isDate;
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
+function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
+function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+var default_date_options = {
+  format: 'YYYY/MM/DD',
+  delimiters: ['/', '-'],
+  strictMode: false
+};
+function isValidFormat(format) {
+  return /(^(y{4}|y{2})[.\/-](m{1,2})[.\/-](d{1,2})$)|(^(m{1,2})[.\/-](d{1,2})[.\/-]((y{4}|y{2})$))|(^(d{1,2})[.\/-](m{1,2})[.\/-]((y{4}|y{2})$))/gi.test(format);
+}
+function zip(date, format) {
+  var zippedArr = [],
+    len = Math.max(date.length, format.length);
+  for (var i = 0; i < len; i++) {
+    zippedArr.push([date[i], format[i]]);
+  }
+  return zippedArr;
+}
+function isDate(input, options) {
+  if (typeof options === 'string') {
+    // Allow backward compatibility for old format isDate(input [, format])
+    options = (0, _merge.default)({
+      format: options
+    }, default_date_options);
+  } else {
+    options = (0, _merge.default)(options, default_date_options);
+  }
+  if (typeof input === 'string' && isValidFormat(options.format)) {
+    if (options.strictMode && input.length !== options.format.length) return false;
+    var formatDelimiter = options.delimiters.find(function (delimiter) {
+      return options.format.indexOf(delimiter) !== -1;
+    });
+    var dateDelimiter = options.strictMode ? formatDelimiter : options.delimiters.find(function (delimiter) {
+      return input.indexOf(delimiter) !== -1;
+    });
+    var dateAndFormat = zip(input.split(dateDelimiter), options.format.toLowerCase().split(formatDelimiter));
+    var dateObj = {};
+    var _iterator = _createForOfIteratorHelper(dateAndFormat),
+      _step;
+    try {
+      for (_iterator.s(); !(_step = _iterator.n()).done;) {
+        var _step$value = _slicedToArray(_step.value, 2),
+          dateWord = _step$value[0],
+          formatWord = _step$value[1];
+        if (!dateWord || !formatWord || dateWord.length !== formatWord.length) {
+          return false;
+        }
+        dateObj[formatWord.charAt(0)] = dateWord;
+      }
+    } catch (err) {
+      _iterator.e(err);
+    } finally {
+      _iterator.f();
+    }
+    var fullYear = dateObj.y;
+
+    // Check if the year starts with a hyphen
+    if (fullYear.startsWith('-')) {
+      return false; // Hyphen before year is not allowed
+    }
+    if (dateObj.y.length === 2) {
+      var parsedYear = parseInt(dateObj.y, 10);
+      if (isNaN(parsedYear)) {
+        return false;
+      }
+      var currentYearLastTwoDigits = new Date().getFullYear() % 100;
+      if (parsedYear < currentYearLastTwoDigits) {
+        fullYear = "20".concat(dateObj.y);
+      } else {
+        fullYear = "19".concat(dateObj.y);
+      }
+    }
+    var month = dateObj.m;
+    if (dateObj.m.length === 1) {
+      month = "0".concat(dateObj.m);
+    }
+    var day = dateObj.d;
+    if (dateObj.d.length === 1) {
+      day = "0".concat(dateObj.d);
+    }
+    return new Date("".concat(fullYear, "-").concat(month, "-").concat(day, "T00:00:00.000Z")).getUTCDate() === +dateObj.d;
+  }
+  if (!options.strictMode) {
+    return Object.prototype.toString.call(input) === '[object Date]' && isFinite(input);
+  }
+  return false;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 9172:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isJWT;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _isBase = _interopRequireDefault(__webpack_require__(8274));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function isJWT(str) {
+  (0, _assertString.default)(str);
+  var dotSplit = str.split('.');
+  var len = dotSplit.length;
+  if (len !== 3) {
+    return false;
+  }
+  return dotSplit.reduce(function (acc, currElem) {
+    return acc && (0, _isBase.default)(currElem, {
+      urlSafe: true
+    });
+  }, true);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 9220:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = contains;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _toString = _interopRequireDefault(__webpack_require__(5772));
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var defaultContainsOptions = {
+  ignoreCase: false,
+  minOccurrences: 1
+};
+function contains(str, elem, options) {
+  (0, _assertString.default)(str);
+  options = (0, _merge.default)(options, defaultContainsOptions);
+  if (options.ignoreCase) {
+    return str.toLowerCase().split((0, _toString.default)(elem).toLowerCase()).length > options.minOccurrences;
+  }
+  return str.split((0, _toString.default)(elem)).length > options.minOccurrences;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 9234:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isSlug;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var charsetRegex = /^[^\s-_](?!.*?[-_]{2,})[a-z0-9-\\][^\s]*[^-_\s]$/;
+function isSlug(str) {
+  (0, _assertString.default)(str);
+  return charsetRegex.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 9266:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isIn;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _toString = _interopRequireDefault(__webpack_require__(5772));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function isIn(str, options) {
+  (0, _assertString.default)(str);
+  var i;
+  if (Object.prototype.toString.call(options) === '[object Array]') {
+    var array = [];
+    for (i in options) {
+      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes
+      // istanbul ignore else
+      if ({}.hasOwnProperty.call(options, i)) {
+        array[i] = (0, _toString.default)(options[i]);
+      }
+    }
+    return array.indexOf(str) >= 0;
+  } else if (_typeof(options) === 'object') {
+    return options.hasOwnProperty(str);
+  } else if (options && typeof options.indexOf === 'function') {
+    return options.indexOf(str) >= 0;
+  }
+  return false;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 9285:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isLength;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+/* eslint-disable prefer-rest-params */
+function isLength(str, options) {
+  (0, _assertString.default)(str);
+  var min;
+  var max;
+  if (_typeof(options) === 'object') {
+    min = options.min || 0;
+    max = options.max;
+  } else {
+    // backwards compatibility: isLength(str, min [, max])
+    min = arguments[1] || 0;
+    max = arguments[2];
+  }
+  var presentationSequences = str.match(/(\uFE0F|\uFE0E)/g) || [];
+  var surrogatePairs = str.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g) || [];
+  var len = str.length - presentationSequences.length - surrogatePairs.length;
+  var isInsideRange = len >= min && (typeof max === 'undefined' || len <= max);
+  if (isInsideRange && Array.isArray(options === null || options === void 0 ? void 0 : options.discreteLengths)) {
+    return options.discreteLengths.some(function (discreteLen) {
+      return discreteLen === len;
+    });
+  }
+  return isInsideRange;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 9517:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isEmail;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _checkHost = _interopRequireDefault(__webpack_require__(1572));
+var _isByteLength = _interopRequireDefault(__webpack_require__(6255));
+var _isFQDN = _interopRequireDefault(__webpack_require__(7658));
+var _isIP = _interopRequireDefault(__webpack_require__(5372));
+var _merge = _interopRequireDefault(__webpack_require__(3610));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var default_email_options = {
+  allow_display_name: false,
+  allow_underscores: false,
+  require_display_name: false,
+  allow_utf8_local_part: true,
+  require_tld: true,
+  blacklisted_chars: '',
+  ignore_max_length: false,
+  host_blacklist: [],
+  host_whitelist: []
+};
+
+/* eslint-disable max-len */
+/* eslint-disable no-control-regex */
+var splitNameAddress = /^([^\x00-\x1F\x7F-\x9F\cX]+)</i;
+var emailUserPart = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i;
+var gmailUserPart = /^[a-z\d]+$/;
+var quotedEmailUser = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i;
+var emailUserUtf8Part = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A1-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i;
+var quotedEmailUserUtf8 = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i;
+var defaultMaxEmailLength = 254;
+/* eslint-enable max-len */
+/* eslint-enable no-control-regex */
+
+/**
+ * Validate display name according to the RFC2822: https://tools.ietf.org/html/rfc2822#appendix-A.1.2
+ * @param {String} display_name
+ */
+function validateDisplayName(display_name) {
+  var display_name_without_quotes = display_name.replace(/^"(.+)"$/, '$1');
+  // display name with only spaces is not valid
+  if (!display_name_without_quotes.trim()) {
+    return false;
+  }
+
+  // check whether display name contains illegal character
+  var contains_illegal = /[\.";<>]/.test(display_name_without_quotes);
+  if (contains_illegal) {
+    // if contains illegal characters,
+    // must to be enclosed in double-quotes, otherwise it's not a valid display name
+    if (display_name_without_quotes === display_name) {
+      return false;
+    }
+
+    // the quotes in display name must start with character symbol \
+    var all_start_with_back_slash = display_name_without_quotes.split('"').length === display_name_without_quotes.split('\\"').length;
+    if (!all_start_with_back_slash) {
+      return false;
+    }
+  }
+  return true;
+}
+function isEmail(str, options) {
+  (0, _assertString.default)(str);
+  options = (0, _merge.default)(options, default_email_options);
+  if (options.require_display_name || options.allow_display_name) {
+    var display_email = str.match(splitNameAddress);
+    if (display_email) {
+      var display_name = display_email[1];
+
+      // Remove display name and angle brackets to get email address
+      // Can be done in the regex but will introduce a ReDOS (See  #1597 for more info)
+      str = str.replace(display_name, '').replace(/(^<|>$)/g, '');
+
+      // sometimes need to trim the last space to get the display name
+      // because there may be a space between display name and email address
+      // eg. myname <[email protected]>
+      // the display name is `myname` instead of `myname `, so need to trim the last space
+      if (display_name.endsWith(' ')) {
+        display_name = display_name.slice(0, -1);
+      }
+      if (!validateDisplayName(display_name)) {
+        return false;
+      }
+    } else if (options.require_display_name) {
+      return false;
+    }
+  }
+  if (!options.ignore_max_length && str.length > defaultMaxEmailLength) {
+    return false;
+  }
+  var parts = str.split('@');
+  var domain = parts.pop();
+  var lower_domain = domain.toLowerCase();
+  if (options.host_blacklist.length > 0 && (0, _checkHost.default)(lower_domain, options.host_blacklist)) {
+    return false;
+  }
+  if (options.host_whitelist.length > 0 && !(0, _checkHost.default)(lower_domain, options.host_whitelist)) {
+    return false;
+  }
+  var user = parts.join('@');
+  if (options.domain_specific_validation && (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com')) {
+    /*
+    Previously we removed dots for gmail addresses before validating.
+    This was removed because it allows `[email protected]`
+    to be reported as valid, but it is not.
+    Gmail only normalizes single dots, removing them from here is pointless,
+    should be done in normalizeEmail
+    */
+    user = user.toLowerCase();
+
+    // Removing sub-address from username before gmail validation
+    var username = user.split('+')[0];
+
+    // Dots are not included in gmail length restriction
+    if (!(0, _isByteLength.default)(username.replace(/\./g, ''), {
+      min: 6,
+      max: 30
+    })) {
+      return false;
+    }
+    var _user_parts = username.split('.');
+    for (var i = 0; i < _user_parts.length; i++) {
+      if (!gmailUserPart.test(_user_parts[i])) {
+        return false;
+      }
+    }
+  }
+  if (options.ignore_max_length === false && (!(0, _isByteLength.default)(user, {
+    max: 64
+  }) || !(0, _isByteLength.default)(domain, {
+    max: 254
+  }))) {
+    return false;
+  }
+  if (!(0, _isFQDN.default)(domain, {
+    require_tld: options.require_tld,
+    ignore_max_length: options.ignore_max_length,
+    allow_underscores: options.allow_underscores
+  })) {
+    if (!options.allow_ip_domain) {
+      return false;
+    }
+    if (!(0, _isIP.default)(domain)) {
+      if (!domain.startsWith('[') || !domain.endsWith(']')) {
+        return false;
+      }
+      var noBracketdomain = domain.slice(1, -1);
+      if (noBracketdomain.length === 0 || !(0, _isIP.default)(noBracketdomain)) {
+        return false;
+      }
+    }
+  }
+  if (options.blacklisted_chars) {
+    if (user.search(new RegExp("[".concat(options.blacklisted_chars, "]+"), 'g')) !== -1) return false;
+  }
+  if (user[0] === '"' && user[user.length - 1] === '"') {
+    user = user.slice(1, user.length - 1);
+    return options.allow_utf8_local_part ? quotedEmailUserUtf8.test(user) : quotedEmailUser.test(user);
+  }
+  var pattern = options.allow_utf8_local_part ? emailUserUtf8Part : emailUserPart;
+  var user_parts = user.split('.');
+  for (var _i = 0; _i < user_parts.length; _i++) {
+    if (!pattern.test(user_parts[_i])) {
+      return false;
+    }
+  }
+  return true;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 9534:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isHalfWidth;
+exports.halfWidth = void 0;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var halfWidth = exports.halfWidth = /[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/;
+function isHalfWidth(str) {
+  (0, _assertString.default)(str);
+  return halfWidth.test(str);
+}
+
+/***/ }),
+
+/***/ 9546:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isOctal;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var octal = /^(0o)?[0-7]+$/i;
+function isOctal(str) {
+  (0, _assertString.default)(str);
+  return octal.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 9666:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isFullWidth;
+exports.fullWidth = void 0;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var fullWidth = exports.fullWidth = /[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/;
+function isFullWidth(str) {
+  (0, _assertString.default)(str);
+  return fullWidth.test(str);
+}
+
+/***/ }),
+
+/***/ 9717:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isISBN;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var possibleIsbn10 = /^(?:[0-9]{9}X|[0-9]{10})$/;
+var possibleIsbn13 = /^(?:[0-9]{13})$/;
+var factor = [1, 3];
+function isISBN(isbn, options) {
+  (0, _assertString.default)(isbn);
+
+  // For backwards compatibility:
+  // isISBN(str [, version]), i.e. `options` could be used as argument for the legacy `version`
+  var version = String((options === null || options === void 0 ? void 0 : options.version) || options);
+  if (!(options !== null && options !== void 0 && options.version || options)) {
+    return isISBN(isbn, {
+      version: 10
+    }) || isISBN(isbn, {
+      version: 13
+    });
+  }
+  var sanitizedIsbn = isbn.replace(/[\s-]+/g, '');
+  var checksum = 0;
+  if (version === '10') {
+    if (!possibleIsbn10.test(sanitizedIsbn)) {
+      return false;
+    }
+    for (var i = 0; i < version - 1; i++) {
+      checksum += (i + 1) * sanitizedIsbn.charAt(i);
+    }
+    if (sanitizedIsbn.charAt(9) === 'X') {
+      checksum += 10 * 10;
+    } else {
+      checksum += 10 * sanitizedIsbn.charAt(9);
+    }
+    if (checksum % 11 === 0) {
+      return true;
+    }
+  } else if (version === '13') {
+    if (!possibleIsbn13.test(sanitizedIsbn)) {
+      return false;
+    }
+    for (var _i = 0; _i < 12; _i++) {
+      checksum += factor[_i % 2] * sanitizedIsbn.charAt(_i);
+    }
+    if (sanitizedIsbn.charAt(12) - (10 - checksum % 10) % 10 === 0) {
+      return true;
+    }
+  }
+  return false;
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 9745:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isMD5;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var md5 = /^[a-f0-9]{32}$/;
+function isMD5(str) {
+  (0, _assertString.default)(str);
+  return md5.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 9790:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = escape;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function escape(str) {
+  (0, _assertString.default)(str);
+  return str.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\//g, '&#x2F;').replace(/\\/g, '&#x5C;').replace(/`/g, '&#96;');
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 9841:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isSemVer;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+var _multilineRegex = _interopRequireDefault(__webpack_require__(5730));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/**
+ * Regular Expression to match
+ * semantic versioning (SemVer)
+ * built from multi-line, multi-parts regexp
+ * Reference: https://semver.org/
+ */
+var semanticVersioningRegex = (0, _multilineRegex.default)(['^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)', '(?:-((?:0|[1-9]\\d*|\\d*[a-z-][0-9a-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-z-][0-9a-z-]*))*))', '?(?:\\+([0-9a-z-]+(?:\\.[0-9a-z-]+)*))?$'], 'i');
+function isSemVer(str) {
+  (0, _assertString.default)(str);
+  return semanticVersioningRegex.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ }),
+
+/***/ 9877:
+/***/ ((module, exports, __webpack_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = isULID;
+var _assertString = _interopRequireDefault(__webpack_require__(3399));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function isULID(str) {
+  (0, _assertString.default)(str);
+  return /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/i.test(str);
+}
+module.exports = exports.default;
+module.exports["default"] = exports.default;
+
+/***/ })
+
+/******/ 	});
+/************************************************************************/
+/******/ 	// The module cache
+/******/ 	var __webpack_module_cache__ = {};
+/******/ 	
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/ 		// Check if module is in cache
+/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
+/******/ 		if (cachedModule !== undefined) {
+/******/ 			return cachedModule.exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = __webpack_module_cache__[moduleId] = {
+/******/ 			// no module.id needed
+/******/ 			// no module.loaded needed
+/******/ 			exports: {}
+/******/ 		};
+/******/ 	
+/******/ 		// Execute the module function
+/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/ 	
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/ 	
+/************************************************************************/
+/******/ 	/* webpack/runtime/define property getters */
+/******/ 	(() => {
+/******/ 		// define getter functions for harmony exports
+/******/ 		__webpack_require__.d = (exports, definition) => {
+/******/ 			for(var key in definition) {
+/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ 				}
+/******/ 			}
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
+/******/ 	(() => {
+/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/make namespace object */
+/******/ 	(() => {
+/******/ 		// define __esModule on exports
+/******/ 		__webpack_require__.r = (exports) => {
+/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 			}
+/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/************************************************************************/
+var __webpack_exports__ = {};
+// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
+(() => {
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   runTest: () => (/* binding */ runTest)
+/* harmony export */ });
+/* harmony import */ var validator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7761);
+// Original Source: https://raw.githubusercontent.com/validatorjs/validator.js/refs/heads/master/test/validators.test.js
+// Version: https://github.com/validatorjs/validator.js/tree/13.15.15
+
+
+
+let assertionCount = 0;
+
+function assert(condition, ...args) {
+  assertionCount++;
+  if (!condition) throw new Error(`Assertion failure: ${args}`);
+}
+
+function describe(name, body) {
+  body();
+}
+
+function it(name, body) {
+  body();
+}
+
+function test({ validator, args = [], valid, invalid }) {
+  const validatorMethod = validator__WEBPACK_IMPORTED_MODULE_0__[validator];
+  valid?.forEach((validValue) => {
+    assert(validatorMethod(validValue, ...args), validValue, ...args);
+  });
+  invalid?.forEach((validValue) => {
+    assert(!validatorMethod(validValue, ...args), validValue, ...args);
+  });
+}
+
+function runTest() {
+  assertionCount = 0;
+
+  describe("Validators", () => {
+    it("should validate email addresses", () => {
+      test({
+        validator: "isEmail",
+        valid: [
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "hans.m\[email protected]",
+          "hans@m\u7aefller.com",
+          "test|123@m\u7aefller.com",
+          "[email protected]",
+          "[email protected]",
+          '"foobar"@example.com',
+          '"  foo  m\u7aefller "@example.com',
+          '"foo\\@bar"@example.com',
+          `${"a".repeat(64)}@${"a".repeat(63)}.com`,
+          `${"a".repeat(64)}@${"a".repeat(63)}.com`,
+          `${"a".repeat(31)}@gmail.com`,
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+        ],
+        invalid: [
+          "invalidemail@",
+          "invalid.com",
+          "@invalid.com",
+          "[email protected].",
+          "foo@_bar.com",
+          "somename@\uff47\uff4d\uff41\uff49\uff4c.com",
+          "[email protected].",
+          "[email protected]",
+          "\uff47\uff4d\uff41\uff49\uff4c\uff47\uff4d\uff41\uff49\uff4c\uff47\uff4d\uff41\uff49\uff4c\uff47\uff4d\uff41\uff49\uff4c\uff47\uff4d\uff41\uff49\[email protected]",
+          `${"a".repeat(64)}@${"a".repeat(251)}.com`,
+          `${"a".repeat(65)}@${"a".repeat(250)}.com`,
+          `${"a".repeat(64)}@${"a".repeat(64)}.com`,
+          `${"a".repeat(64)}@${"a".repeat(63)}.${"a".repeat(63)}.${"a".repeat(
+            63
+          )}.${"a".repeat(58)}.com`,
+          "[email protected]\u2006m",
+          "[email protected]\u2002m",
+          "[email protected]\u2004m",
+          "[email protected]\u2005m",
+          "[email protected]\u2006m",
+          "[email protected]\u2007m",
+          "[email protected]\u2008m",
+          "[email protected]\u2009m",
+          "[email protected]\u200am",
+          "[email protected]\u202fm",
+          "[email protected]\u205fm",
+          "[email protected]\u3000m",
+          "[email protected]\u3000m",
+          "[email protected]",
+          "test123+invalid! [email protected]",
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          'wrong()[]",:;<>@@gmail.com',
+          '"wrong()[]",:;<>@@gmail.com',
+          "[email protected]\ufffd",
+          "[email protected]\u00a9",
+          "nbsp\[email protected]",
+          "nbsp_test@te\u00a0st.com",
+          "[email protected]\u00a0m",
+          '"[email protected]',
+          '"foo"[email protected]',
+          'foo"bar"@gmail.com',
+        ],
+      });
+    });
+
+    it("should validate email addresses with domain specific validation", () => {
+      test({
+        validator: "isEmail",
+        args: [{ domain_specific_validation: true }],
+        valid: [
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          `${"a".repeat(30)}@gmail.com`,
+        ],
+        invalid: [
+          `${"a".repeat(31)}@gmail.com`,
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+        ],
+      });
+    });
+
+    it("should validate email addresses with underscores in the domain", () => {
+      test({
+        validator: "isEmail",
+        args: [{ allow_underscores: true }],
+        valid: ["foobar@my_sarisari_store.typepad.com"],
+        invalid: [],
+      });
+    });
+
+    it("should validate email addresses without UTF8 characters in local part", () => {
+      test({
+        validator: "isEmail",
+        args: [{ allow_utf8_local_part: false }],
+        valid: [
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "hans@m\u7aefller.com",
+          "test|123@m\u7aefller.com",
+          "[email protected]",
+          "[email protected]",
+          '"foobar"@example.com',
+          '"foo\\@bar"@example.com',
+          '"  foo  bar  "@example.com',
+        ],
+        invalid: [
+          "invalidemail@",
+          "invalid.com",
+          "@invalid.com",
+          "[email protected].",
+          "[email protected].",
+          "somename@\uff47\uff4d\uff41\uff49\uff4c.com",
+          "hans.m\[email protected]",
+          "[email protected]",
+          "t\[email protected]",
+          "nbsp\[email protected]",
+        ],
+      });
+    });
+
+    it("should validate email addresses with display names", () => {
+      test({
+        validator: "isEmail",
+        args: [{ allow_display_name: true }],
+        valid: [
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "hans.m\[email protected]",
+          "hans@m\u7aefller.com",
+          "test|123@m\u7aefller.com",
+          "[email protected]",
+          "[email protected]",
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Name <hans.m\[email protected]>",
+          "Some Name <hans@m\u7aefller.com>",
+          "Some Name <test|123@m\u7aefller.com>",
+          "Some Name <[email protected]>",
+          "'Foo Bar, Esq'<[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Middle Name <[email protected]>",
+          "Name <[email protected]>",
+          "Name<[email protected]>",
+          "Some Name <[email protected]>",
+          "Name\ud83c\udf53With\ud83c\udf51Emoji\ud83d\udeb4\u200d\u2640\ufe0f\ud83c\udfc6<[email protected]>",
+          "\ud83c\udf47\ud83c\udf57\ud83c\udf51<[email protected]>",
+          '"<displayNameInBrackets>"<[email protected]>',
+          '"\\"quotes\\""<[email protected]>',
+          '"name;"<[email protected]>',
+          '"name;" <[email protected]>',
+        ],
+        invalid: [
+          "invalidemail@",
+          "invalid.com",
+          "@invalid.com",
+          "[email protected].",
+          "[email protected].",
+          "Some Name <invalidemail@>",
+          "Some Name <invalid.com>",
+          "Some Name <@invalid.com>",
+          "Some Name <[email protected].>",
+          "Some Name <[email protected].>",
+          "Some Name [email protected].>",
+          "Some Name <[email protected].",
+          "Some Name < [email protected] >",
+          "Name [email protected]",
+          "Some Name <[email protected]>",
+          "Some Name<emoji_in_address\ud83c\[email protected]>",
+          "invisibleCharacter\u001F<[email protected]>",
+          "<displayNameInBrackets><[email protected]>",
+          '\\"quotes\\"<[email protected]>',
+          '""quotes""<[email protected]>',
+          "name;<[email protected]>",
+          "    <[email protected]>",
+          '"    "<[email protected]>',
+        ],
+      });
+    });
+
+    it("should validate email addresses with required display names", () => {
+      test({
+        validator: "isEmail",
+        args: [{ require_display_name: true }],
+        valid: [
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Name <hans.m\[email protected]>",
+          "Some Name <hans@m\u7aefller.com>",
+          "Some Name <test|123@m\u7aefller.com>",
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Middle Name <[email protected]>",
+          "Name <[email protected]>",
+          "Name<[email protected]>",
+        ],
+        invalid: [
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "hans.m\[email protected]",
+          "hans@m\u7aefller.com",
+          "test|123@m\u7aefller.com",
+          "[email protected]",
+          "invalidemail@",
+          "invalid.com",
+          "@invalid.com",
+          "[email protected].",
+          "[email protected].",
+          "Some Name <invalidemail@>",
+          "Some Name <invalid.com>",
+          "Some Name <@invalid.com>",
+          "Some Name <[email protected].>",
+          "Some Name <[email protected].>",
+          "Some Name [email protected].>",
+          "Some Name <[email protected].",
+          "Some Name < [email protected] >",
+          "Name [email protected]",
+        ],
+      });
+    });
+
+    it("should validate email addresses with allowed IPs", () => {
+      test({
+        validator: "isEmail",
+        args: [{ allow_ip_domain: true }],
+        valid: ["email@[123.123.123.123]", "[email protected]"],
+        invalid: [
+          "[email protected]",
+          "[email protected]",
+          "email@[266.266.266.266]",
+        ],
+      });
+    });
+
+    it("should not validate email addresses with blacklisted chars in the name", () => {
+      test({
+        validator: "isEmail",
+        args: [{ blacklisted_chars: 'abc"' }],
+        valid: ["[email protected]"],
+        invalid: [
+          "[email protected]",
+          '"foobr"@example.com',
+          '" foo m\u7aefller "@example.com',
+          '"foo@br"@example.com',
+        ],
+      });
+    });
+
+    it("should validate really long emails if ignore_max_length is set", () => {
+      test({
+        validator: "isEmail",
+        args: [{ ignore_max_length: false }],
+        valid: [],
+        invalid: [
+          "Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@example.com",
+        ],
+      });
+
+      test({
+        validator: "isEmail",
+        args: [{ ignore_max_length: true }],
+        valid: [
+          "Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@example.com",
+        ],
+        invalid: [],
+      });
+
+      test({
+        validator: "isEmail",
+        args: [{ ignore_max_length: true }],
+        valid: [
+          "Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX.com",
+        ],
+        invalid: [],
+      });
+    });
+
+    it("should not validate email addresses with denylisted domains", () => {
+      test({
+        validator: "isEmail",
+        args: [{ host_blacklist: ["gmail.com", "foo.bar.com"] }],
+        valid: ["[email protected]"],
+        invalid: ["[email protected]", "[email protected]"],
+      });
+    });
+
+    it("should allow regular expressions in the host blacklist of isEmail", () => {
+      test({
+        validator: "isEmail",
+        args: [
+          {
+            host_blacklist: ["bar.com", "foo.com", /\.foo\.com$/],
+          },
+        ],
+        valid: ["[email protected]", "[email protected]", "[email protected]"],
+        invalid: ["[email protected]", "[email protected]", "[email protected]"],
+      });
+    });
+
+    it("should validate only email addresses with whitelisted domains", () => {
+      test({
+        validator: "isEmail",
+        args: [{ host_whitelist: ["gmail.com", "foo.bar.com"] }],
+        valid: ["[email protected]", "[email protected]"],
+        invalid: ["[email protected]", "[email protected]", "[email protected]"],
+      });
+    });
+
+    it("should allow regular expressions in the host whitelist of isEmail", () => {
+      test({
+        validator: "isEmail",
+        args: [
+          {
+            host_whitelist: ["bar.com", "foo.com", /\.foo\.com$/],
+          },
+        ],
+        valid: ["[email protected]", "[email protected]", "[email protected]"],
+        invalid: ["[email protected]", "[email protected]", "[email protected]"],
+      });
+    });
+
+    it("should validate URLs", () => {
+      test({
+        validator: "isURL",
+        valid: [
+          "foobar.com",
+          "www.foobar.com",
+          "foobar.com/",
+          "valid.au",
+          "http://www.foobar.com/",
+          "HTTP://WWW.FOOBAR.COM/",
+          "https://www.foobar.com/",
+          "HTTPS://WWW.FOOBAR.COM/",
+          "http://www.foobar.com:23/",
+          "http://www.foobar.com:65535/",
+          "http://www.foobar.com:5/",
+          "https://www.foobar.com/",
+          "ftp://www.foobar.com/",
+          "http://www.foobar.com/~foobar",
+          "http://user:[email protected]/",
+          "http://user:@www.foobar.com/",
+          "http://:[email protected]/",
+          "http://[email protected]",
+          "http://127.0.0.1/",
+          "http://10.0.0.0/",
+          "http://189.123.14.13/",
+          "http://duckduckgo.com/?q=%2F",
+          "http://foobar.com/t$-_.+!*'(),",
+          "http://foobar.com/?foo=bar#baz=qux",
+          "http://foobar.com?foo=bar",
+          "http://foobar.com#baz=qux",
+          "http://www.xn--froschgrn-x9a.net/",
+          "http://xn--froschgrn-x9a.com/",
+          "http://foo--bar.com",
+          "http://h\u00f8yfjellet.no",
+          "http://xn--j1aac5a4g.xn--j1amh",
+          "http://xn------eddceddeftq7bvv7c4ke4c.xn--p1ai",
+          "http://\u043a\u0443\u043b\u0456\u043a.\u0443\u043a\u0440",
+          "test.com?ref=http://test2.com",
+          "http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html",
+          "http://[1080:0:0:0:8:800:200C:417A]/index.html",
+          "http://[3ffe:2a00:100:7031::1]",
+          "http://[1080::8:800:200C:417A]/foo",
+          "http://[::192.9.5.5]/ipng",
+          "http://[::FFFF:129.144.52.38]:80/index.html",
+          "http://[2010:836B:4179::836B:4179]",
+          "http://example.com/example.json#/foo/bar",
+          "http://1337.com",
+        ],
+        invalid: [
+          "http://localhost:3000/",
+          "//foobar.com",
+          "xyz://foobar.com",
+          "invalid/",
+          "invalid.x",
+          "invalid.",
+          ".com",
+          "http://com/",
+          "http://300.0.0.1/",
+          "mailto:[email protected]",
+          "rtmp://foobar.com",
+          "http://www.xn--.com/",
+          "http://xn--.com/",
+          "http://www.foobar.com:0/",
+          "http://www.foobar.com:70000/",
+          "http://www.foobar.com:99999/",
+          "http://www.-foobar.com/",
+          "http://www.foobar-.com/",
+          "http://foobar/# lol",
+          "http://foobar/? lol",
+          "http://foobar/ lol/",
+          "http://lol @foobar.com/",
+          "http://lol:lol @foobar.com/",
+          "http://lol:lol:[email protected]/",
+          "http://lol: @foobar.com/",
+          "http://www.foo_bar.com/",
+          "http://www.foobar.com/\t",
+          "http://@foobar.com",
+          "http://:@foobar.com",
+          "http://\[email protected]/",
+          "",
+          `http://foobar.com/${new Array(2083).join("f")}`,
+          "http://*.foo.com",
+          "*.foo.com",
+          "!.foo.com",
+          "http://example.com.",
+          "http://localhost:61500this is an invalid url!!!!",
+          "////foobar.com",
+          "http:////foobar.com",
+          "https://example.com/foo/<script>alert('XSS')</script>/",
+        ],
+      });
+    });
+
+    it("should validate URLs with custom protocols", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            protocols: ["rtmp"],
+          },
+        ],
+        valid: ["rtmp://foobar.com"],
+        invalid: ["http://foobar.com"],
+      });
+    });
+
+    it("should validate file URLs without a host", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            protocols: ["file"],
+            require_host: false,
+            require_tld: false,
+          },
+        ],
+        valid: ["file://localhost/foo.txt", "file:///foo.txt", "file:///"],
+        invalid: ["http://foobar.com", "file://"],
+      });
+    });
+
+    it("should validate postgres URLs without a host", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            protocols: ["postgres"],
+            require_host: false,
+          },
+        ],
+        valid: ["postgres://user:pw@/test"],
+        invalid: ["http://foobar.com", "postgres://"],
+      });
+    });
+
+    it("should validate URLs with any protocol", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            require_valid_protocol: false,
+          },
+        ],
+        valid: ["rtmp://foobar.com", "http://foobar.com", "test://foobar.com"],
+        invalid: ["mailto:[email protected]"],
+      });
+    });
+
+    it("should validate URLs with underscores", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            allow_underscores: true,
+          },
+        ],
+        valid: [
+          "http://foo_bar.com",
+          "http://pr.example_com.294.example.com/",
+          "http://foo__bar.com",
+          "http://_.example.com",
+        ],
+        invalid: [],
+      });
+    });
+
+    it("should validate URLs that do not have a TLD", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            require_tld: false,
+          },
+        ],
+        valid: [
+          "http://foobar.com/",
+          "http://foobar/",
+          "http://localhost/",
+          "foobar/",
+          "foobar",
+        ],
+        invalid: [],
+      });
+    });
+
+    it("should validate URLs with a trailing dot option", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            allow_trailing_dot: true,
+            require_tld: false,
+          },
+        ],
+        valid: ["http://example.com.", "foobar."],
+      });
+    });
+
+    it("should validate URLs with column and no port", () => {
+      test({
+        validator: "isURL",
+        valid: ["http://example.com:", "ftp://example.com:"],
+        invalid: ["https://example.com:abc"],
+      });
+    });
+
+    it("should validate sftp protocol URL containing column and no port", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            protocols: ["sftp"],
+          },
+        ],
+        valid: ["sftp://user:[email protected]:/incoming/things.csv"],
+      });
+    });
+
+    it("should validate protocol relative URLs", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            allow_protocol_relative_urls: true,
+          },
+        ],
+        valid: ["//foobar.com", "http://foobar.com", "foobar.com"],
+        invalid: [
+          "://foobar.com",
+          "/foobar.com",
+          "////foobar.com",
+          "http:////foobar.com",
+        ],
+      });
+    });
+
+    it("should not validate URLs with fragments when allow fragments is false", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            allow_fragments: false,
+          },
+        ],
+        valid: ["http://foobar.com", "foobar.com"],
+        invalid: ["http://foobar.com#part", "foobar.com#part"],
+      });
+    });
+
+    it("should not validate URLs with query components when allow query components is false", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            allow_query_components: false,
+          },
+        ],
+        valid: ["http://foobar.com", "foobar.com"],
+        invalid: [
+          "http://foobar.com?foo=bar",
+          "http://foobar.com?foo=bar&bar=foo",
+          "foobar.com?foo=bar",
+          "foobar.com?foo=bar&bar=foo",
+        ],
+      });
+    });
+
+    it("should not validate protocol relative URLs when require protocol is true", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            allow_protocol_relative_urls: true,
+            require_protocol: true,
+          },
+        ],
+        valid: ["http://foobar.com"],
+        invalid: ["//foobar.com", "://foobar.com", "/foobar.com", "foobar.com"],
+      });
+    });
+
+    it("should let users specify whether URLs require a protocol", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            require_protocol: true,
+          },
+        ],
+        valid: ["http://foobar.com/"],
+        invalid: ["http://localhost/", "foobar.com", "foobar"],
+      });
+    });
+
+    it("should let users specify a host whitelist", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            host_whitelist: ["foo.com", "bar.com"],
+          },
+        ],
+        valid: ["http://bar.com/", "http://foo.com/"],
+        invalid: ["http://foobar.com", "http://foo.bar.com/", "http://qux.com"],
+      });
+    });
+
+    it("should allow regular expressions in the host whitelist", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            host_whitelist: ["bar.com", "foo.com", /\.foo\.com$/],
+          },
+        ],
+        valid: [
+          "http://bar.com/",
+          "http://foo.com/",
+          "http://images.foo.com/",
+          "http://cdn.foo.com/",
+          "http://a.b.c.foo.com/",
+        ],
+        invalid: ["http://foobar.com", "http://foo.bar.com/", "http://qux.com"],
+      });
+    });
+
+    it("should let users specify a host blacklist", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            host_blacklist: ["foo.com", "bar.com"],
+          },
+        ],
+        valid: ["http://foobar.com", "http://foo.bar.com/", "http://qux.com"],
+        invalid: ["http://bar.com/", "http://foo.com/"],
+      });
+    });
+
+    it("should allow regular expressions in the host blacklist", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            host_blacklist: ["bar.com", "foo.com", /\.foo\.com$/],
+          },
+        ],
+        valid: ["http://foobar.com", "http://foo.bar.com/", "http://qux.com"],
+        invalid: [
+          "http://bar.com/",
+          "http://foo.com/",
+          "http://images.foo.com/",
+          "http://cdn.foo.com/",
+          "http://a.b.c.foo.com/",
+        ],
+      });
+    });
+
+    it("should allow rejecting urls containing authentication information", () => {
+      test({
+        validator: "isURL",
+        args: [{ disallow_auth: true }],
+        valid: ["doe.com"],
+        invalid: ["[email protected]", "john:[email protected]"],
+      });
+    });
+
+    it("should accept urls containing authentication information", () => {
+      test({
+        validator: "isURL",
+        args: [{ disallow_auth: false }],
+        valid: [
+          "[email protected]",
+          "user:@example.com",
+          "user:[email protected]",
+        ],
+        invalid: [
+          "user:user:[email protected]",
+          "@example.com",
+          ":@example.com",
+          ":example.com",
+        ],
+      });
+    });
+
+    it("should allow user to skip URL length validation", () => {
+      test({
+        validator: "isURL",
+        args: [{ validate_length: false }],
+        valid: [
+          "http://foobar.com/f",
+          `http://foobar.com/${new Array(2083).join("f")}`,
+        ],
+        invalid: [],
+      });
+    });
+
+    it("should allow user to configure the maximum URL length", () => {
+      test({
+        validator: "isURL",
+        args: [{ max_allowed_length: 20 }],
+        valid: [
+          "http://foobar.com/12", // 20 characters
+          "http://foobar.com/",
+        ],
+        invalid: [
+          "http://foobar.com/123", // 21 characters
+          "http://foobar.com/1234567890",
+        ],
+      });
+    });
+
+    it("should validate URLs with port present", () => {
+      test({
+        validator: "isURL",
+        args: [{ require_port: true }],
+        valid: [
+          "http://user:[email protected]:1",
+          "http://user:@www.foobar.com:65535",
+          "http://127.0.0.1:23",
+          "http://10.0.0.0:256",
+          "http://189.123.14.13:256",
+          "http://duckduckgo.com:65535?q=%2F",
+        ],
+        invalid: [
+          "http://user:[email protected]/",
+          "http://user:@www.foobar.com/",
+          "http://127.0.0.1/",
+          "http://10.0.0.0/",
+          "http://189.123.14.13/",
+          "http://duckduckgo.com/?q=%2F",
+        ],
+      });
+    });
+
+    it("should validate MAC addresses", () => {
+      test({
+        validator: "isMACAddress",
+        valid: [
+          "ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:ab",
+          "01:AB:03:04:05:06",
+          "A9 C5 D4 9F EB D3",
+          "01 02 03 04 05 ab",
+          "01-02-03-04-05-ab",
+          "0102.0304.05ab",
+          "ab:ab:ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:06:07:ab",
+          "01:AB:03:04:05:06:07:08",
+          "A9 C5 D4 9F EB D3 B6 65",
+          "01 02 03 04 05 06 07 ab",
+          "01-02-03-04-05-06-07-ab",
+          "0102.0304.0506.07ab",
+        ],
+        invalid: [
+          "abc",
+          "01:02:03:04:05",
+          "01:02:03:04:05:z0",
+          "01:02:03:04::ab",
+          "1:2:3:4:5:6",
+          "AB:CD:EF:GH:01:02",
+          "A9C5 D4 9F EB D3",
+          "01-02 03:04 05 ab",
+          "0102.03:04.05ab",
+          "900f/dffs/sdea",
+          "01:02:03:04:05:06:07",
+          "01:02:03:04:05:06:07:z0",
+          "01:02:03:04:05:06::ab",
+          "1:2:3:4:5:6:7:8",
+          "AB:CD:EF:GH:01:02:03:04",
+          "A9C5 D4 9F EB D3 B6 65",
+          "01-02 03:04 05 06 07 ab",
+          "0102.03:04.0506.07ab",
+          "900f/dffs/sdea/54gh",
+        ],
+      });
+      test({
+        validator: "isMACAddress",
+        args: [
+          {
+            eui: "48",
+          },
+        ],
+        valid: [
+          "ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:ab",
+          "01:AB:03:04:05:06",
+          "A9 C5 D4 9F EB D3",
+          "01 02 03 04 05 ab",
+          "01-02-03-04-05-ab",
+          "0102.0304.05ab",
+        ],
+        invalid: [
+          "ab:ab:ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:06:07:ab",
+          "01:AB:03:04:05:06:07:08",
+          "A9 C5 D4 9F EB D3 B6 65",
+          "01 02 03 04 05 06 07 ab",
+          "01-02-03-04-05-06-07-ab",
+          "0102.0304.0506.07ab",
+        ],
+      });
+      test({
+        validator: "isMACAddress",
+        args: [
+          {
+            eui: "64",
+          },
+        ],
+        valid: [
+          "ab:ab:ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:06:07:ab",
+          "01:AB:03:04:05:06:07:08",
+          "A9 C5 D4 9F EB D3 B6 65",
+          "01 02 03 04 05 06 07 ab",
+          "01-02-03-04-05-06-07-ab",
+          "0102.0304.0506.07ab",
+        ],
+        invalid: [
+          "ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:ab",
+          "01:AB:03:04:05:06",
+          "A9 C5 D4 9F EB D3",
+          "01 02 03 04 05 ab",
+          "01-02-03-04-05-ab",
+          "0102.0304.05ab",
+        ],
+      });
+    });
+
+    it("should validate MAC addresses without separator", () => {
+      test({
+        validator: "isMACAddress",
+        args: [
+          {
+            no_separators: true,
+          },
+        ],
+        valid: [
+          "abababababab",
+          "FFFFFFFFFFFF",
+          "0102030405ab",
+          "01AB03040506",
+          "abababababababab",
+          "FFFFFFFFFFFFFFFF",
+          "01020304050607ab",
+          "01AB030405060708",
+        ],
+        invalid: [
+          "abc",
+          "01:02:03:04:05",
+          "01:02:03:04::ab",
+          "1:2:3:4:5:6",
+          "AB:CD:EF:GH:01:02",
+          "ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:ab",
+          "01:AB:03:04:05:06",
+          "0102030405",
+          "01020304ab",
+          "123456",
+          "ABCDEFGH0102",
+          "01:02:03:04:05:06:07",
+          "01:02:03:04:05:06::ab",
+          "1:2:3:4:5:6:7:8",
+          "AB:CD:EF:GH:01:02:03:04",
+          "ab:ab:ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:06:07:ab",
+          "01:AB:03:04:05:06:07:08",
+          "01020304050607",
+          "010203040506ab",
+          "12345678",
+          "ABCDEFGH01020304",
+        ],
+      });
+      test({
+        validator: "isMACAddress",
+        args: [
+          {
+            no_separators: true,
+            eui: "48",
+          },
+        ],
+        valid: ["abababababab", "FFFFFFFFFFFF", "0102030405ab", "01AB03040506"],
+        invalid: [
+          "abababababababab",
+          "FFFFFFFFFFFFFFFF",
+          "01020304050607ab",
+          "01AB030405060708",
+        ],
+      });
+      test({
+        validator: "isMACAddress",
+        args: [
+          {
+            no_separators: true,
+            eui: "64",
+          },
+        ],
+        valid: [
+          "abababababababab",
+          "FFFFFFFFFFFFFFFF",
+          "01020304050607ab",
+          "01AB030405060708",
+        ],
+        invalid: [
+          "abababababab",
+          "FFFFFFFFFFFF",
+          "0102030405ab",
+          "01AB03040506",
+        ],
+      });
+    });
+
+    it("should validate isIPRange", () => {
+      test({
+        validator: "isIPRange",
+        valid: [
+          "127.0.0.1/24",
+          "0.0.0.0/0",
+          "255.255.255.0/32",
+          "::/0",
+          "::/128",
+          "2001::/128",
+          "2001:800::/128",
+          "::ffff:127.0.0.1/128",
+        ],
+        invalid: [
+          "abc",
+          "127.200.230.1/35",
+          "127.200.230.1/-1",
+          "1.1.1.1/011",
+          "1.1.1/24.1",
+          "1.1.1.1/01",
+          "1.1.1.1/1.1",
+          "1.1.1.1/1.",
+          "1.1.1.1/1/1",
+          "1.1.1.1",
+          "::1",
+          "::1/164",
+          "2001::/240",
+          "2001::/-1",
+          "2001::/001",
+          "2001::/24.1",
+          "2001:db8:0000:1:1:1:1:1",
+          "::ffff:127.0.0.1",
+        ],
+      });
+      test({
+        validator: "isIPRange",
+        args: [4],
+        valid: [
+          "127.0.0.1/1",
+          "0.0.0.0/1",
+          "255.255.255.255/1",
+          "1.2.3.4/1",
+          "255.0.0.1/1",
+          "0.0.1.1/1",
+        ],
+        invalid: [
+          "abc",
+          "::1",
+          "2001:db8:0000:1:1:1:1:1",
+          "::ffff:127.0.0.1",
+          "137.132.10.01",
+          "0.256.0.256",
+          "255.256.255.256",
+        ],
+      });
+      test({
+        validator: "isIPRange",
+        args: [6],
+        valid: ["::1/1", "2001:db8:0000:1:1:1:1:1/1", "::ffff:127.0.0.1/1"],
+        invalid: [
+          "abc",
+          "127.0.0.1",
+          "0.0.0.0",
+          "255.255.255.255",
+          "1.2.3.4",
+          "::ffff:287.0.0.1",
+          "::ffff:287.0.0.1/254",
+          "%",
+          "fe80::1234%",
+          "fe80::1234%1%3%4",
+          "fe80%fe80%",
+        ],
+      });
+      test({
+        validator: "isIPRange",
+        args: [10],
+        valid: [],
+        invalid: [
+          "abc",
+          "127.0.0.1/1",
+          "0.0.0.0/1",
+          "255.255.255.255/1",
+          "1.2.3.4/1",
+          "::1/1",
+          "2001:db8:0000:1:1:1:1:1/1",
+        ],
+      });
+    });
+
+    it("should validate FQDN", () => {
+      test({
+        validator: "isFQDN",
+        valid: [
+          "domain.com",
+          "dom.plato",
+          "a.domain.co",
+          "foo--bar.com",
+          "xn--froschgrn-x9a.com",
+          "rebecca.blackfriday",
+          "1337.com",
+        ],
+        invalid: [
+          "abc",
+          "256.0.0.0",
+          "_.com",
+          "*.some.com",
+          "s!ome.com",
+          "domain.com/",
+          "/more.com",
+          "domain.com\ufffd",
+          "domain.co\u00A0m",
+          "domain.co\u1680m",
+          "domain.co\u2006m",
+          "domain.co\u2028m",
+          "domain.co\u2029m",
+          "domain.co\u202Fm",
+          "domain.co\u205Fm",
+          "domain.co\u3000m",
+          "domain.com\uDC00",
+          "domain.co\uEFFFm",
+          "domain.co\uFDDAm",
+          "domain.co\uFFF4m",
+          "domain.com\u00a9",
+          "example.0",
+          "192.168.0.9999",
+          "192.168.0",
+        ],
+      });
+    });
+    it("should validate FQDN with trailing dot option", () => {
+      test({
+        validator: "isFQDN",
+        args: [{ allow_trailing_dot: true }],
+        valid: ["example.com."],
+      });
+    });
+    it("should invalidate FQDN when not require_tld", () => {
+      test({
+        validator: "isFQDN",
+        args: [{ require_tld: false }],
+        invalid: ["example.0", "192.168.0", "192.168.0.9999"],
+      });
+    });
+    it("should validate FQDN when not require_tld but allow_numeric_tld", () => {
+      test({
+        validator: "isFQDN",
+        args: [{ allow_numeric_tld: true, require_tld: false }],
+        valid: ["example.0", "192.168.0", "192.168.0.9999"],
+      });
+    });
+    it("should validate FQDN with wildcard option", () => {
+      test({
+        validator: "isFQDN",
+        args: [{ allow_wildcard: true }],
+        valid: ["*.example.com", "*.shop.example.com"],
+      });
+    });
+    it("should validate FQDN with required allow_trailing_dot, allow_underscores and allow_numeric_tld options", () => {
+      test({
+        validator: "isFQDN",
+        args: [
+          {
+            allow_trailing_dot: true,
+            allow_underscores: true,
+            allow_numeric_tld: true,
+          },
+        ],
+        valid: ["abc.efg.g1h.", "as1s.sad3s.ssa2d."],
+      });
+    });
+
+    it("should validate alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        valid: ["abc", "ABC", "FoObar"],
+        invalid: ["abc1", "  foo  ", "", "\u00c4BC", "F\u00dc\u00fcbar", "J\u00f6n", "Hei\u00df"],
+      });
+    });
+
+    it("should validate alpha string with ignored characters", () => {
+      test({
+        validator: "isAlpha",
+        args: ["en-US", { ignore: "- /" }], // ignore [space-/]
+        valid: ["en-US", "this is a valid alpha string", "us/usa"],
+        invalid: [
+          "1. this is not a valid alpha string",
+          "this$is also not a valid.alpha string",
+          "this is also not a valid alpha string.",
+        ],
+      });
+
+      test({
+        validator: "isAlpha",
+        args: ["en-US", { ignore: /[\s/-]/g }], // ignore [space -]
+        valid: ["en-US", "this is a valid alpha string"],
+        invalid: [
+          "1. this is not a valid alpha string",
+          "this$is also not a valid.alpha string",
+          "this is also not a valid alpha string.",
+        ],
+      });
+
+      test({
+        validator: "isAlpha",
+        args: ["en-US", { ignore: 1234 }], // invalid ignore matcher
+        error: ["alpha"],
+      });
+    });
+
+    it("should validate Azerbaijani alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["az-AZ"],
+        valid: [
+          "Az\u0259rbaycan",
+          "Bak\u0131",
+          "\u00fc\u00f6\u011f\u0131\u0259\u00e7\u015f",
+          "sizAz\u0259rbaycanla\u015fd\u0131r\u0131lm\u0131\u015flardans\u0131n\u0131zm\u0131",
+          "dahaBirD\u00fczg\u00fcnString",
+          "abc\u00e7de\u0259fg\u011fhx\u0131ijkqlmno\u00f6prs\u015ftu\u00fcvyz",
+        ],
+        invalid: ["r\u0259q\u0259m1", "  foo  ", "", "ab(cd)", "simvol@", "w\u0259kil"],
+      });
+    });
+
+    it("should validate bulgarian alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["bg-BG"],
+        valid: ["\u0430\u0431\u0432", "\u0410\u0411\u0412", "\u0436\u0430\u0431\u0430", "\u044f\u0413\u043e\u0414\u0430"],
+        invalid: ["abc1", "  foo  ", "", "\u0401\u0427\u041f\u0421", "_\u0430\u0437_\u043e\u0431\u0438\u0447\u0430\u043c_\u043e\u0431\u0443\u0432\u043a\u0438_", "\u0435\u0445\u043e!"],
+      });
+    });
+
+    it("should validate Bengali alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["bn-BD"],
+        valid: ["\u0985\u09df\u09be\u0993\u09b0", "\u09ab\u0997\u09ab\u09a6\u09cd\u09b0\u09a4", "\u09ab\u09a6\u09cd\u09ae\u09cd\u09af\u09a4\u09ad", "\u09ac\u09c7\u09b0\u09c7\u0993\u09ad\u099a\u09a8\u09ad\u09a8", "\u0986\u09ae\u09be\u09b0\u09ac\u09be\u09b8\u0997\u09be"],
+        invalid: ["\u09a6\u09be\u09b8\u09e8\u09e9\u09ea", "  \u09a6\u09cd\u0997\u09ab\u09b9\u09cd\u09a8\u09ad  ", "", "(\u0997\u09ab\u09a6)"],
+      });
+    });
+
+    it("should validate czech alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["cs-CZ"],
+        valid: ["\u017elu\u0165ou\u010dk\u00fd", "K\u016e\u0147", "P\u011bl", "\u010e\u00e1belsk\u00e9", "\u00f3dy"],
+        invalid: ["\u00e1bc1", "  f\u016fj  ", ""],
+      });
+    });
+
+    it("should validate slovak alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["sk-SK"],
+        valid: [
+          "m\u00f4j",
+          "\u013e\u00fab\u00edm",
+          "m\u00e4k\u010de\u0148",
+          "st\u0139p",
+          "v\u0155ba",
+          "\u0148orimberk",
+          "\u0165ava",
+          "\u017ean\u00e9ta",
+          "\u010e\u00e1belsk\u00e9",
+          "\u00f3dy",
+        ],
+        invalid: ["1moj", "\u4f60\u597d\u4e16\u754c", "  \u041f\u0440\u0438\u0432\u0435\u0442 \u043c\u0438\u0440  ", "\u0645\u0631\u062d\u0628\u0627 \u0627\u0644\u0639\u0627 "],
+      });
+    });
+
+    it("should validate danish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["da-DK"],
+        valid: ["a\u00f8\u00e5", "\u00c6re", "\u00d8re", "\u00c5re"],
+        invalid: ["\u00e4bc123", "\u00c4BC11", ""],
+      });
+    });
+
+    it("should validate dutch alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["nl-NL"],
+        valid: ["K\u00e1n", "\u00e9\u00e9n", "v\u00f3\u00f3r", "n\u00fa", "h\u00e9\u00e9l"],
+        invalid: ["\u00e4ca ", "abc\u00df", "\u00d8re"],
+      });
+    });
+
+    it("should validate german alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["de-DE"],
+        valid: ["\u00e4bc", "\u00c4BC", "F\u00f6\u00d6b\u00e4r", "Hei\u00df"],
+        invalid: ["\u00e4bc1", "  f\u00f6\u00f6  ", ""],
+      });
+    });
+
+    it("should validate hungarian alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["hu-HU"],
+        valid: ["\u00e1rv\u00edzt\u0171r\u0151t\u00fck\u00f6rf\u00far\u00f3g\u00e9p", "\u00c1RV\u00cdZT\u0170R\u0150T\u00dcK\u00d6RF\u00daR\u00d3G\u00c9P"],
+        invalid: ["\u00e4bc1", "  f\u00e4\u00f6  ", "Hei\u00df", ""],
+      });
+    });
+
+    it("should validate portuguese alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["pt-PT"],
+        valid: ["pal\u00edndromo", "\u00f3rg\u00e3o", "qw\u00e9rty\u00fa\u00e3o", "\u00e0\u00e4\u00e3c\u00eb\u00fc\u00ef\u00c4\u00cf\u00dc"],
+        invalid: ["12abc", "Hei\u00df", "\u00d8re", "\u00e6\u00f8\u00e5", ""],
+      });
+    });
+
+    it("should validate italian alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["it-IT"],
+        valid: [
+          "\u00e0\u00e9\u00e8\u00ec\u00ee\u00f3\u00f2\u00f9",
+          "correnti",
+          "DEFINIZIONE",
+          "compilazione",
+          "metr\u00f3",
+          "p\u00e8sca",
+          "P\u00c9SCA",
+          "gen\u00ee",
+        ],
+        invalid: ["\u00e4bc123", "\u00c4BC11", "\u00e6\u00f8\u00e5", ""],
+      });
+    });
+
+    it("should validate Japanese alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["ja-JP"],
+        valid: [
+          "\u3042\u3044\u3046\u3048\u304a",
+          "\u304c\u304e\u3050\u3052\u3054",
+          "\u3041\u3043\u3045\u3047\u3049",
+          "\u30a2\u30a4\u30a6\u30a8\u30aa",
+          "\u30a1\u30a3\u30a5\u30a7",
+          "\uff71\uff72\uff73\uff74\uff75",
+          "\u543e\u8f29\u306f\u732b\u3067\u3042\u308b",
+          "\u81e5\u85aa\u5617\u80c6",
+          "\u65b0\u4e16\u7d00\u30a8\u30f4\u30a1\u30f3\u30b2\u30ea\u30aa\u30f3",
+          "\u5929\u56fd\u3068\u5730\u7344",
+          "\u4e03\u4eba\u306e\u4f8d",
+          "\u30b7\u30f3\u30fb\u30a6\u30eb\u30c8\u30e9\u30de\u30f3",
+        ],
+        invalid: ["\u3042\u3044\u3046123", "abc\u3042\u3044\u3046", "\uff11\uff19\uff18\uff14"],
+      });
+    });
+
+    it("should validate kazakh alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["kk-KZ"],
+        valid: [
+          "\u0421\u04d9\u043b\u0435\u043c",
+          "\u049b\u0430\u043d\u0430\u0493\u0430\u0442\u0442\u0430\u043d\u0434\u044b\u0440\u044b\u043b\u043c\u0430\u0493\u0430\u043d\u0434\u044b\u049b\u0442\u0430\u0440\u044b\u04a3\u044b\u0437\u0434\u0430\u043d",
+          "\u041a\u0435\u0448\u0456\u0440\u0456\u04a3\u0456\u0437",
+          "\u04e8\u043a\u0456\u043d\u0456\u0448\u043a\u0435",
+          "\u049a\u0430\u0439\u0442\u0430\u043b\u0430\u04a3\u044b\u0437\u0448\u044b",
+          "\u0430\u0493\u044b\u043b\u0448\u044b\u043d\u0448\u0430",
+          "\u0442\u04af\u0441\u0456\u043d\u0431\u0435\u0434\u0456\u043c",
+        ],
+        invalid: ["\u041a\u0435\u0448\u0456\u0440\u0456\u04a3\u0456\u04371", "  \u041a\u0435\u0442 \u0431\u0430\u0440  ", "\u0645\u0631\u062d\u0628\u0627 \u0627\u0644\u0639\u0627"],
+      });
+    });
+
+    it("should validate Vietnamese alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["vi-VN"],
+        valid: ["thi\u1ebfn", "nghi\u00eang", "xin", "ch\u00e0o", "th\u1ebf", "gi\u1edbi"],
+        invalid: ["th\u1ea7y3", "Ba g\u00e0", ""],
+      });
+    });
+
+    it("should validate arabic alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["ar"],
+        valid: ["\u0623\u0628\u062a", "\u0627\u064e\u0628\u0650\u062a\u064e\u062b\u0651\u062c\u064b"],
+        invalid: [
+          "\u0661\u0662\u0663\u0623\u0628\u062a",
+          "\u0661\u0662\u0663",
+          "abc1",
+          "  foo  ",
+          "",
+          "\u00c4BC",
+          "F\u00dc\u00fcbar",
+          "J\u00f6n",
+          "Hei\u00df",
+        ],
+      });
+    });
+
+    it("should validate farsi alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["fa-IR"],
+        valid: ["\u067e\u062f\u0631", "\u0645\u0627\u062f\u0631", "\u0628\u0631\u0627\u062f\u0631", "\u062e\u0648\u0627\u0647\u0631"],
+        invalid: [
+          "\u0641\u0627\u0631\u0633\u06cc\u06f1\u06f2\u06f3",
+          "\u06f1\u06f6\u06f4",
+          "abc1",
+          "  foo  ",
+          "",
+          "\u00c4BC",
+          "F\u00dc\u00fcbar",
+          "J\u00f6n",
+          "Hei\u00df",
+        ],
+      });
+    });
+
+    it("should validate finnish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["fi-FI"],
+        valid: ["\u00e4iti", "\u00d6ljy", "\u00c5ke", "test\u00d6"],
+        invalid: ["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ", "\u00e4\u00f6\u00e5123", ""],
+      });
+    });
+
+    it("should validate kurdish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["ku-IQ"],
+        valid: ["\u0626\u0624\u06a4\u06af\u06ce", "\u06a9\u0648\u0631\u062f\u0633\u062a\u0627\u0646"],
+        invalid: [
+          "\u0626\u0624\u06a4\u06af\u06ce\u0661\u0662\u0663",
+          "\u0661\u0662\u0663",
+          "abc1",
+          "  foo  ",
+          "",
+          "\u00c4BC",
+          "F\u00dc\u00fcbar",
+          "J\u00f6n",
+          "Hei\u00df",
+        ],
+      });
+    });
+
+    it("should validate norwegian alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["nb-NO"],
+        valid: ["a\u00f8\u00e5", "\u00c6re", "\u00d8re", "\u00c5re"],
+        invalid: ["\u00e4bc123", "\u00c4BC11", ""],
+      });
+    });
+
+    it("should validate polish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["pl-PL"],
+        valid: [
+          "kresk\u0105",
+          "zamkni\u0119te",
+          "zwyk\u0142e",
+          "kropk\u0105",
+          "przyj\u0119\u0142y",
+          "\u015bwi\u0119ty",
+          "Pozw\u00f3l",
+        ],
+        invalid: ["12\u0159i\u010f ", "bl\u00e9!!", "f\u00f6\u00f6!2!"],
+      });
+    });
+
+    it("should validate serbian cyrillic alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["sr-RS"],
+        valid: ["\u0428\u045b\u0436\u0402\u0459\u0415", "\u0427\u041f\u0421\u0422\u040b\u040f"],
+        invalid: ["\u0159i\u010f ", "bl\u00e933!!", "f\u00f6\u00f6!!"],
+      });
+    });
+
+    it("should validate serbian latin alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["sr-RS@latin"],
+        valid: ["\u0160Aab\u010d\u0161\u0111\u0107\u017e", "\u0160ATRO\u0106\u010d\u0111\u0161"],
+        invalid: ["12\u0159i\u010f ", "bl\u00e9!!", "f\u00f6\u00f6!2!"],
+      });
+    });
+
+    it("should validate spanish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["es-ES"],
+        valid: ["\u00e1bc\u00f3", "\u00c1BC\u00d3", "dorm\u00eds", "volv\u00e9s", "espa\u00f1ol"],
+        invalid: ["\u00e4ca ", "abc\u00df", "f\u00f6\u00f6!!"],
+      });
+    });
+
+    it("should validate swedish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["sv-SE"],
+        valid: ["religi\u00f6s", "stj\u00e4la", "v\u00e4stg\u00f6te", "\u00c5re"],
+        invalid: ["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ", "religi\u00f6s23", ""],
+      });
+    });
+
+    it("should validate defined arabic locales alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["ar-SY"],
+        valid: ["\u0623\u0628\u062a", "\u0627\u064e\u0628\u0650\u062a\u064e\u062b\u0651\u062c\u064b"],
+        invalid: [
+          "\u0661\u0662\u0663\u0623\u0628\u062a",
+          "\u0661\u0662\u0663",
+          "abc1",
+          "  foo  ",
+          "",
+          "\u00c4BC",
+          "F\u00dc\u00fcbar",
+          "J\u00f6n",
+          "Hei\u00df",
+        ],
+      });
+    });
+
+    it("should validate turkish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["tr-TR"],
+        valid: ["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ"],
+        invalid: [
+          "0A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ1",
+          "  A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ  ",
+          "abc1",
+          "  foo  ",
+          "",
+          "\u00c4BC",
+          "Hei\u00df",
+        ],
+      });
+    });
+
+    it("should validate urkrainian alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["uk-UA"],
+        valid: ["\u0410\u0411\u0412\u0413\u0490\u0414\u0415\u0404\u0416\u0417\u0418I\u0407\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0428\u0429\u042c\u042e\u042f"],
+        invalid: [
+          "0A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ1",
+          "  A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ  ",
+          "abc1",
+          "  foo  ",
+          "",
+          "\u00c4BC",
+          "Hei\u00df",
+          "\u042b\u044b\u042a\u044a\u042d\u044d",
+        ],
+      });
+    });
+
+    it("should validate greek alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["el-GR"],
+        valid: [
+          "\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9",
+          "\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9",
+          "\u03ac\u03ad\u03ae\u03af\u03b0\u03ca\u03cb\u03cc\u03cd\u03ce",
+          "\u0386\u0388\u0389\u038a\u03aa\u03ab\u038e\u038f",
+        ],
+        invalid: [
+          "0A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ1",
+          "  A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ  ",
+          "\u00c4BC",
+          "Hei\u00df",
+          "\u042b\u044b\u042a\u044a\u042d\u044d",
+          "120",
+          "j\u03b1ck\u03b3",
+        ],
+      });
+    });
+
+    it("should validate Hebrew alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["he"],
+        valid: ["\u05d1\u05d3\u05d9\u05e7\u05d4", "\u05e9\u05dc\u05d5\u05dd"],
+        invalid: ["\u05d1\u05d3\u05d9\u05e7\u05d4123", "  foo  ", "abc1", ""],
+      });
+    });
+
+    it("should validate Hindi alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["hi-IN"],
+        valid: [
+          "\u0905\u0924\u0905\u092a\u0928\u093e\u0905\u092a\u0928\u0940\u0905\u092a\u0928\u0947\u0905\u092d\u0940\u0905\u0902\u0926\u0930\u0906\u0926\u093f\u0906\u092a\u0907\u0924\u094d\u092f\u093e\u0926\u093f\u0907\u0928\u0907\u0928\u0915\u093e\u0907\u0928\u094d\u0939\u0940\u0902\u0907\u0928\u094d\u0939\u0947\u0902\u0907\u0928\u094d\u0939\u094b\u0902\u0907\u0938\u0907\u0938\u0915\u093e\u0907\u0938\u0915\u0940\u0907\u0938\u0915\u0947\u0907\u0938\u092e\u0947\u0902\u0907\u0938\u0940\u0907\u0938\u0947\u0909\u0928\u0909\u0928\u0915\u093e\u0909\u0928\u0915\u0940\u0909\u0928\u0915\u0947\u0909\u0928\u0915\u094b\u0909\u0928\u094d\u0939\u0940\u0902\u0909\u0928\u094d\u0939\u0947\u0902\u0909\u0928\u094d\u0939\u094b\u0902\u0909\u0938\u0909\u0938\u0915\u0947\u0909\u0938\u0940\u0909\u0938\u0947\u090f\u0915\u090f\u0935\u0902\u090f\u0938\u0910\u0938\u0947\u0914\u0930\u0915\u0908\u0915\u0930\u0915\u0930\u0924\u093e\u0915\u0930\u0924\u0947\u0915\u0930\u0928\u093e\u0915\u0930\u0928\u0947\u0915\u0930\u0947\u0902\u0915\u0939\u0924\u0947\u0915\u0939\u093e\u0915\u093e\u0915\u093e\u095e\u0940\u0915\u093f\u0915\u093f\u0924\u0928\u093e\u0915\u093f\u0928\u094d\u0939\u0947\u0902\u0915\u093f\u0928\u094d\u0939\u094b\u0902\u0915\u093f\u092f\u093e\u0915\u093f\u0930\u0915\u093f\u0938\u0915\u093f\u0938\u0940\u0915\u093f\u0938\u0947\u0915\u0940\u0915\u0941\u091b\u0915\u0941\u0932\u0915\u0947\u0915\u094b\u0915\u094b\u0908\u0915\u094c\u0928\u0915\u094c\u0928\u0938\u093e\u0917\u092f\u093e\u0918\u0930\u091c\u092c\u091c\u0939\u093e\u0901\u091c\u093e\u091c\u093f\u0924\u0928\u093e\u091c\u093f\u0928\u091c\u093f\u0928\u094d\u0939\u0947\u0902\u091c\u093f\u0928\u094d\u0939\u094b\u0902\u091c\u093f\u0938\u091c\u093f\u0938\u0947\u091c\u0940\u0927\u0930\u091c\u0948\u0938\u093e\u091c\u0948\u0938\u0947\u091c\u094b\u0924\u0915\u0924\u092c\u0924\u0930\u0939\u0924\u093f\u0928\u0924\u093f\u0928\u094d\u0939\u0947\u0902\u0924\u093f\u0928\u094d\u0939\u094b\u0902\u0924\u093f\u0938\u0924\u093f\u0938\u0947\u0924\u094b\u0925\u093e\u0925\u0940\u0925\u0947\u0926\u092c\u093e\u0930\u093e\u0926\u093f\u092f\u093e\u0926\u0941\u0938\u0930\u093e\u0926\u0942\u0938\u0930\u0947\u0926\u094b\u0926\u094d\u0935\u093e\u0930\u093e\u0928\u0928\u0915\u0947\u0928\u0939\u0940\u0902\u0928\u093e\u0928\u093f\u0939\u093e\u092f\u0924\u0928\u0940\u091a\u0947\u0928\u0947\u092a\u0930\u092a\u0939\u0932\u0947\u092a\u0942\u0930\u093e\u092a\u0947\u092b\u093f\u0930\u092c\u0928\u0940\u092c\u0939\u0940\u092c\u0939\u0941\u0924\u092c\u093e\u0926\u092c\u093e\u0932\u093e\u092c\u093f\u0932\u0915\u0941\u0932\u092d\u0940\u092d\u0940\u0924\u0930\u092e\u0917\u0930\u092e\u093e\u0928\u094b\u092e\u0947\u092e\u0947\u0902\u092f\u0926\u093f\u092f\u0939\u092f\u0939\u093e\u0901\u092f\u0939\u0940\u092f\u093e\u092f\u093f\u0939\u092f\u0947\u0930\u0916\u0947\u0902\u0930\u0939\u093e\u0930\u0939\u0947\u0931\u094d\u0935\u093e\u0938\u093e\u0932\u093f\u090f\u0932\u093f\u092f\u0947\u0932\u0947\u0915\u093f\u0928\u0935\u0935\u095a\u0948\u0930\u0939\u0935\u0930\u094d\u0917\u0935\u0939\u0935\u0939\u093e\u0901\u0935\u0939\u0940\u0902\u0935\u093e\u0932\u0947\u0935\u0941\u0939\u0935\u0947\u0935\u094b\u0938\u0915\u0924\u093e\u0938\u0915\u0924\u0947\u0938\u092c\u0938\u0947\u0938\u092d\u0940\u0938\u093e\u0925\u0938\u093e\u092c\u0941\u0924\u0938\u093e\u092d\u0938\u093e\u0930\u093e\u0938\u0947\u0938\u094b\u0938\u0902\u0917\u0939\u0940\u0939\u0941\u0906\u0939\u0941\u0908\u0939\u0941\u090f\u0939\u0948\u0939\u0948\u0902\u0939\u094b\u0939\u094b\u0924\u093e\u0939\u094b\u0924\u0940\u0939\u094b\u0924\u0947\u0939\u094b\u0928\u093e\u0939\u094b\u0928\u0947",
+          "\u0907\u0928\u094d\u0939\u0947\u0902",
+        ],
+        invalid: ["\u0905\u0924\u0966\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", "\u0905\u0924 12", " \u0905\u0924 ", "abc1", "abc", ""],
+      });
+    });
+
+    it("should validate persian alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["fa-IR"],
+        valid: ["\u062a\u0633\u062a", "\u0639\u0632\u06cc\u0632\u0645", "\u062d"],
+        invalid: ["\u062a\u0633\u062a 1", "  \u0639\u0632\u06cc\u0632\u0645  ", ""],
+      });
+    });
+
+    it("should validate Thai alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["th-TH"],
+        valid: ["\u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35", "\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a \u0e40\u0e17\u0e2a\u0e40\u0e04\u0e2a"],
+        invalid: ["\u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35Hi", "123 \u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a", "\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a-\u0e51\u0e52\u0e53"],
+      });
+    });
+
+    it("should validate Korea alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["ko-KR"],
+        valid: [
+          "\u3131",
+          "\u3151",
+          "\u3131\u3134\u3137\u314f\u3155",
+          "\uc138\uc885\ub300\uc655",
+          "\ub098\ub78f\ub9d0\uc2f8\ubbf8\ub4d5\uadc1\uc5d0\ub2ec\uc544\ubb38\uc790\uc640\ub85c\uc11c\ub974\uc0ac\ub9db\ub514\uc544\ub2c8\ud560\uc384",
+        ],
+        invalid: [
+          "abc",
+          "123",
+          "\ud765\uc120\ub300\uc6d0\uad70 \ubb38\ud638\uac1c\ubc29",
+          "1592\ub144\uc784\uc9c4\uc65c\ub780",
+          "\ub300\ud55c\ubbfc\uad6d!",
+        ],
+      });
+    });
+
+    it("should validate Sinhala alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["si-LK"],
+        valid: ["\u0da0\u0dad\u0dd4\u0dbb", "\u0d9a\u0da0\u0da7\u0daf\u0db6", "\u0d8e\u0d8f\u0daf\u0dcf\u0ddb\u0db4\u0dc3\u0dd4\u0d9c\u0ddc"],
+        invalid: ["\u0b86\u0b90\u0905\u0924\u0d9a", "\u0d9a\u0da0\u0da7 12", " \u0d8e ", "abc1", "abc", ""],
+      });
+    });
+
+    it("should validate Esperanto alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["eo"],
+        valid: [
+          "saluton",
+          "e\u0125o\u015dan\u011do\u0109iu\u0135a\u016dde",
+          "E\u0124O\u015cAN\u011cO\u0108IU\u0134A\u016cDE",
+          "Esperanto",
+          "La\u016dLudovikoZamenhofBongustasFre\u015da\u0108e\u0125aMan\u011da\u0135oKunSpicoj",
+        ],
+        invalid: ["qwxyz", "1887", "qwxyz 1887"],
+      });
+    });
+
+    it("should error on invalid locale", () => {
+      test({
+        validator: "isAlpha",
+        args: ["is-NOT"],
+        error: ["abc", "ABC"],
+      });
+    });
+
+    it("should validate alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        valid: ["abc123", "ABC11"],
+        invalid: ["abc ", "foo!!", "\u00c4BC", "F\u00dc\u00fcbar", "J\u00f6n"],
+      });
+    });
+
+    it("should validate alphanumeric string with ignored characters", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["en-US", { ignore: "@_- " }], // ignore [@ space _ -]
+        valid: [
+          "Hello@123",
+          "this is a valid alphaNumeric string",
+          "En-US @ alpha_numeric",
+        ],
+        invalid: ["In*Valid", "hello$123", "{invalid}"],
+      });
+
+      test({
+        validator: "isAlphanumeric",
+        args: ["en-US", { ignore: /[\s/-]/g }], // ignore [space -]
+        valid: ["en-US", "this is a valid alphaNumeric string"],
+        invalid: ["INVALID$ AlphaNum Str", "hello@123", "abc*123"],
+      });
+
+      test({
+        validator: "isAlphanumeric",
+        args: ["en-US", { ignore: 1234 }], // invalid ignore matcher (ignore should be instance of a String or RegExp)
+        error: ["alpha"],
+      });
+    });
+
+    it("should validate defined english aliases", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["en-GB"],
+        valid: ["abc123", "ABC11"],
+        invalid: ["abc ", "foo!!", "\u00c4BC", "F\u00dc\u00fcbar", "J\u00f6n"],
+      });
+    });
+
+    it("should validate Azerbaijani alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["az-AZ"],
+        valid: ["Az\u0259rbaycan", "Bak\u0131", "abc1", "abc\u00e72", "3k\u0259r\u02594k\u0259r\u0259"],
+        invalid: ["  foo1  ", "", "ab(cd)", "simvol@", "w\u0259kil"],
+      });
+    });
+
+    it("should validate bulgarian alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["bg-BG"],
+        valid: ["\u0430\u0431\u04321", "4\u0410\u04115\u04126", "\u0436\u0430\u0431\u0430", "\u044f\u0413\u043e\u0414\u04302", "\u0439\u042e\u044f", "123"],
+        invalid: [" ", "789  ", "hello000"],
+      });
+    });
+
+    it("should validate Bengali alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["bn-BD"],
+        valid: [
+          "\u09a6\u09cd\u0997\u099c\u09cd\u099e\u09b9\u09cd\u09b0\u09a4\u09cd\u09af\u09e7\u09e8\u09e9",
+          "\u09a6\u09cd\u0997\u0997\u09ab\u09ee\u09ef\u09e6",
+          "\u099a\u09ac\u09e9\u09ec\u09eb\u09ad\u09ac\u099a",
+          "\u09e7\u09e8\u09e9\u09ea",
+          "\u09e9\u09ea\u09e8\u09e9\u09ea\u09a6\u09ab\u099c\u09cd\u099e\u09a6\u09ab",
+        ],
+        invalid: [" ", "\u09e7\u09e8\u09e9  ", "hel\u09e9\u09e80"],
+      });
+    });
+
+    it("should validate czech alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["cs-CZ"],
+        valid: ["\u0159i\u0165123", "K\u016e\u014711"],
+        invalid: ["\u0159i\u010f ", "bl\u00e9!!"],
+      });
+    });
+
+    it("should validate slovak alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["sk-SK"],
+        valid: [
+          "1m\u00f4j",
+          "2\u013e\u00fab\u00edm",
+          "3m\u00e4k\u010de\u0148",
+          "4st\u0139p",
+          "5v\u0155ba",
+          "6\u0148orimberk",
+          "7\u0165ava",
+          "8\u017ean\u00e9ta",
+          "9\u010e\u00e1belsk\u00e9",
+          "10\u00f3dy",
+        ],
+        invalid: ["1moj!", "\u4f60\u597d\u4e16\u754c", "  \u041f\u0440\u0438\u0432\u0435\u0442 \u043c\u0438\u0440  "],
+      });
+    });
+
+    it("should validate danish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["da-DK"],
+        valid: ["\u00c6\u00d8\u00c5123", "\u00c6re321", "321\u00d8re", "123\u00c5re"],
+        invalid: ["\u00e4bc123", "\u00c4BC11", ""],
+      });
+    });
+
+    it("should validate dutch alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["nl-NL"],
+        valid: ["K\u00e1n123", "\u00e9\u00e9n354", "v4\u00f3\u00f3r", "n\u00fa234", "h\u00e954\u00e9l"],
+        invalid: ["1\u00e4ca ", "ab3c\u00df", "\u00d8re"],
+      });
+    });
+
+    it("should validate finnish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["fi-FI"],
+        valid: ["\u00e4iti124", "\u00d6LJY1234", "123\u00c5ke", "451\u00e5\u00e523"],
+        invalid: ["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ", "foo!!", ""],
+      });
+    });
+
+    it("should validate german alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["de-DE"],
+        valid: ["\u00e4bc123", "\u00c4BC11"],
+        invalid: ["\u00e4ca ", "f\u00f6\u00f6!!"],
+      });
+    });
+
+    it("should validate hungarian alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["hu-HU"],
+        valid: ["0\u00e1rv\u00edzt\u0171r\u0151t\u00fck\u00f6rf\u00far\u00f3g\u00e9p123", "0\u00c1RV\u00cdZT\u0170R\u0150T\u00dcK\u00d6RF\u00daR\u00d3G\u00c9P123"],
+        invalid: ["1id\u0151\u00far!", "\u00e4bc1", "  f\u00e4\u00f6  ", "Hei\u00df!", ""],
+      });
+    });
+
+    it("should validate portuguese alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["pt-PT"],
+        valid: ["pal\u00edndromo", "2\u00f3rg\u00e3o", "qw\u00e9rty\u00fa\u00e3o9", "\u00e0\u00e4\u00e3c\u00eb4\u00fc\u00ef\u00c4\u00cf\u00dc"],
+        invalid: ["!abc", "Hei\u00df", "\u00d8re", "\u00e6\u00f8\u00e5", ""],
+      });
+    });
+
+    it("should validate italian alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["it-IT"],
+        valid: [
+          "123\u00e0\u00e9\u00e8\u00ec\u00ee\u00f3\u00f2\u00f9",
+          "123correnti",
+          "DEFINIZIONE321",
+          "compil123azione",
+          "met23r\u00f3",
+          "p\u00e8s56ca",
+          "P\u00c9S45CA",
+          "gen45\u00ee",
+        ],
+        invalid: ["\u00e4bc123", "\u00c4BC11", "\u00e6\u00f8\u00e5", ""],
+      });
+    });
+
+    it("should validate spanish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["es-ES"],
+        valid: ["\u00e1bc\u00f3123", "\u00c1BC\u00d311"],
+        invalid: ["\u00e4ca ", "abc\u00df", "f\u00f6\u00f6!!"],
+      });
+    });
+
+    it("should validate Vietnamese alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["vi-VN"],
+        valid: ["Th\u1ea7y3", "3G\u00e0"],
+        invalid: ["toang!", "C\u1eadu V\u00e0ng"],
+      });
+    });
+
+    it("should validate arabic alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["ar"],
+        valid: ["\u0623\u0628\u062a123", "\u0623\u0628\u062a\u064e\u064f\u0650\u0661\u0662\u0663"],
+        invalid: ["\u00e4ca ", "abc\u00df", "f\u00f6\u00f6!!"],
+      });
+    });
+
+    it("should validate Hindi alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["hi-IN"],
+        valid: [
+          "\u0905\u0924\u0905\u092a\u0928\u093e\u0905\u092a\u0928\u0940\u0905\u092a\u0928\u0947\u0905\u092d\u0940\u0905\u0902\u0926\u0930\u0906\u0926\u093f\u0906\u092a\u0907\u0924\u094d\u092f\u093e\u0926\u093f\u0907\u0928\u0907\u0928\u0915\u093e\u0907\u0928\u094d\u0939\u0940\u0902\u0907\u0928\u094d\u0939\u0947\u0902\u0907\u0928\u094d\u0939\u094b\u0902\u0907\u0938\u0907\u0938\u0915\u093e\u0907\u0938\u0915\u0940\u0907\u0938\u0915\u0947\u0907\u0938\u092e\u0947\u0902\u0907\u0938\u0940\u0907\u0938\u0947\u0909\u0928\u0909\u0928\u0915\u093e\u0909\u0928\u0915\u0940\u0909\u0928\u0915\u0947\u0909\u0928\u0915\u094b\u0909\u0928\u094d\u0939\u0940\u0902\u0909\u0928\u094d\u0939\u0947\u0902\u0909\u0928\u094d\u0939\u094b\u0902\u0909\u0938\u0909\u0938\u0915\u0947\u0909\u0938\u0940\u0909\u0938\u0947\u090f\u0915\u090f\u0935\u0902\u090f\u0938\u0910\u0938\u0947\u0914\u0930\u0915\u0908\u0915\u0930\u0915\u0930\u0924\u093e\u0915\u0930\u0924\u0947\u0915\u0930\u0928\u093e\u0915\u0930\u0928\u0947\u0915\u0930\u0947\u0902\u0915\u0939\u0924\u0947\u0915\u0939\u093e\u0915\u093e\u0915\u093e\u095e\u0940\u0915\u093f\u0915\u093f\u0924\u0928\u093e\u0915\u093f\u0928\u094d\u0939\u0947\u0902\u0915\u093f\u0928\u094d\u0939\u094b\u0902\u0915\u093f\u092f\u093e\u0915\u093f\u0930\u0915\u093f\u0938\u0915\u093f\u0938\u0940\u0915\u093f\u0938\u0947\u0915\u0940\u0915\u0941\u091b\u0915\u0941\u0932\u0915\u0947\u0915\u094b\u0915\u094b\u0908\u0915\u094c\u0928\u0915\u094c\u0928\u0938\u093e\u0917\u092f\u093e\u0918\u0930\u091c\u092c\u091c\u0939\u093e\u0901\u091c\u093e\u091c\u093f\u0924\u0928\u093e\u091c\u093f\u0928\u091c\u093f\u0928\u094d\u0939\u0947\u0902\u091c\u093f\u0928\u094d\u0939\u094b\u0902\u091c\u093f\u0938\u091c\u093f\u0938\u0947\u091c\u0940\u0927\u0930\u091c\u0948\u0938\u093e\u091c\u0948\u0938\u0947\u091c\u094b\u0924\u0915\u0924\u092c\u0924\u0930\u0939\u0924\u093f\u0928\u0924\u093f\u0928\u094d\u0939\u0947\u0902\u0924\u093f\u0928\u094d\u0939\u094b\u0902\u0924\u093f\u0938\u0924\u093f\u0938\u0947\u0924\u094b\u0925\u093e\u0925\u0940\u0925\u0947\u0926\u092c\u093e\u0930\u093e\u0926\u093f\u092f\u093e\u0926\u0941\u0938\u0930\u093e\u0926\u0942\u0938\u0930\u0947\u0926\u094b\u0926\u094d\u0935\u093e\u0930\u093e\u0928\u0928\u0915\u0947\u0928\u0939\u0940\u0902\u0928\u093e\u0928\u093f\u0939\u093e\u092f\u0924\u0928\u0940\u091a\u0947\u0928\u0947\u092a\u0930\u092a\u0939\u0932\u0947\u092a\u0942\u0930\u093e\u092a\u0947\u092b\u093f\u0930\u092c\u0928\u0940\u092c\u0939\u0940\u092c\u0939\u0941\u0924\u092c\u093e\u0926\u092c\u093e\u0932\u093e\u092c\u093f\u0932\u0915\u0941\u0932\u092d\u0940\u092d\u0940\u0924\u0930\u092e\u0917\u0930\u092e\u093e\u0928\u094b\u092e\u0947\u092e\u0947\u0902\u092f\u0926\u093f\u092f\u0939\u092f\u0939\u093e\u0901\u092f\u0939\u0940\u092f\u093e\u092f\u093f\u0939\u092f\u0947\u0930\u0916\u0947\u0902\u0930\u0939\u093e\u0930\u0939\u0947\u0931\u094d\u0935\u093e\u0938\u093e\u0932\u093f\u090f\u0932\u093f\u092f\u0947\u0932\u0947\u0915\u093f\u0928\u0935\u0935\u095a\u0948\u0930\u0939\u0935\u0930\u094d\u0917\u0935\u0939\u0935\u0939\u093e\u0901\u0935\u0939\u0940\u0902\u0935\u093e\u0932\u0947\u0935\u0941\u0939\u0935\u0947\u0935\u094b\u0938\u0915\u0924\u093e\u0938\u0915\u0924\u0947\u0938\u092c\u0938\u0947\u0938\u092d\u0940\u0938\u093e\u0925\u0938\u093e\u092c\u0941\u0924\u0938\u093e\u092d\u0938\u093e\u0930\u093e\u0938\u0947\u0938\u094b\u0938\u0902\u0917\u0939\u0940\u0939\u0941\u0906\u0939\u0941\u0908\u0939\u0941\u090f\u0939\u0948\u0939\u0948\u0902\u0939\u094b\u0939\u094b\u0924\u093e\u0939\u094b\u0924\u0940\u0939\u094b\u0924\u0947\u0939\u094b\u0928\u093e\u0939\u094b\u0928\u0947\u0966\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f",
+          "\u0907\u0928\u094d\u0939\u0947\u0902\u096a\u096b\u096c\u096d\u096e\u096f",
+        ],
+        invalid: ["\u0905\u0924 \u0966\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", " \u0969\u096a\u096b\u096c\u096d\u096e\u096f", "12 ", " \u0905\u0924 ", "abc1", "abc", ""],
+      });
+    });
+
+    it("should validate farsi alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["fa-IR"],
+        valid: ["\u067e\u0627\u0631\u0633\u06cc\u06f1\u06f2\u06f3", "\u06f1\u06f4\u06f5\u06f6", "\u0645\u0698\u06af\u0627\u06469"],
+        invalid: ["\u00e4ca ", "abc\u00df\u0629", "f\u00f6\u00f6!!", "\u0664\u0665\u0666"],
+      });
+    });
+
+    it("should validate Japanese alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["ja-JP"],
+        valid: [
+          "\u3042\u3044\u3046\u3048\u304a123",
+          "123\u304c\u304e\u3050\u3052\u3054",
+          "\u3041\u3043\u3045\u3047\u3049",
+          "\u30a2\u30a4\u30a6\u30a8\u30aa",
+          "\u30a1\u30a3\u30a5\u30a7",
+          "\uff71\uff72\uff73\uff74\uff75",
+          "\uff12\uff10\u4e16\u7d00\u5c11\u5e74",
+          "\u83ef\u6c0f\uff14\uff15\uff11\u5ea6",
+        ],
+        invalid: [" \u3042\u3044\u3046123 ", "abc\u3042\u3044\u3046", "\u751f\u304d\u308d!!"],
+      });
+    });
+
+    it("should validate kazakh alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["kk-KZ"],
+        valid: [
+          "\u0421\u04d9\u043b\u0435\u043c777",
+          "123\u0411\u04d9\u0441\u0435",
+          "\u0441\u043e\u043b\u0430\u0439",
+          "\u0416\u0438\u0435\u043d\u0441\u0443",
+          "90\u0442\u043e\u049b\u0441\u0430\u043d",
+          "\u0436\u0430\u043b\u0493\u044b\u0437",
+          "570\u0431\u0435\u0440\u0434\u0456\u043c",
+        ],
+        invalid: [" \u043a\u0435\u0448\u0456\u0440\u0456\u04a3\u0456\u0437 ", "abc\u0430\u0493\u044b\u043b\u0448\u044b\u043d\u0448\u0430", "\u043c\u04af\u043c\u043a\u0456\u043d!!"],
+      });
+    });
+
+    it("should validate kurdish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["ku-IQ"],
+        valid: ["\u0626\u0624\u06a4\u06af\u06ce\u0661\u0662\u0663"],
+        invalid: ["\u00e4ca ", "abc\u00df", "f\u00f6\u00f6!!"],
+      });
+    });
+
+    it("should validate defined arabic aliases", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["ar-SY"],
+        valid: ["\u0623\u0628\u062a123", "\u0623\u0628\u062a\u064e\u064f\u0650\u0661\u0662\u0663"],
+        invalid: ["abc ", "foo!!", "\u00c4BC", "F\u00dc\u00fcbar", "J\u00f6n"],
+      });
+    });
+
+    it("should validate norwegian alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["nb-NO"],
+        valid: ["\u00c6\u00d8\u00c5123", "\u00c6re321", "321\u00d8re", "123\u00c5re"],
+        invalid: ["\u00e4bc123", "\u00c4BC11", ""],
+      });
+    });
+
+    it("should validate polish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["pl-PL"],
+        valid: [
+          "kre123sk\u0105",
+          "zam21kni\u0119te",
+          "zw23yk\u0142e",
+          "123",
+          "prz23yj\u0119\u0142y",
+          "\u015bwi23\u0119ty",
+          "Poz1322w\u00f3l",
+        ],
+        invalid: ["12\u0159i\u010f ", "bl\u00e9!!", "f\u00f6\u00f6!2!"],
+      });
+    });
+
+    it("should validate serbian cyrillic alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["sr-RS"],
+        valid: ["\u0428\u045b\u0436\u0402\u0459\u0415123", "\u0427\u041f\u0421\u0422132\u040b\u040f"],
+        invalid: ["\u0159i\u010f ", "bl\u00e9!!", "f\u00f6\u00f6!!"],
+      });
+    });
+
+    it("should validate serbian latin alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["sr-RS@latin"],
+        valid: ["\u0160Aab\u010d\u0161\u0111\u0107\u017e123", "\u0160ATRO11\u0106\u010d\u0111\u0161"],
+        invalid: ["\u0159i\u010f ", "bl\u00e9!!", "f\u00f6\u00f6!!"],
+      });
+    });
+
+    it("should validate swedish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["sv-SE"],
+        valid: ["religi\u00f6s13", "st23j\u00e4la", "v\u00e4stg\u00f6te123", "123\u00c5re"],
+        invalid: ["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ", "foo!!", ""],
+      });
+    });
+
+    it("should validate turkish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["tr-TR"],
+        valid: ["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ123"],
+        invalid: ["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ ", "foo!!", "\u00c4BC"],
+      });
+    });
+
+    it("should validate urkrainian alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["uk-UA"],
+        valid: ["\u0410\u0411\u0412\u0413\u0490\u0414\u0415\u0404\u0416\u0417\u0418I\u0407\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0428\u0429\u042c\u042e\u042f123"],
+        invalid: ["\u00e9eoc ", "foo!!", "\u00c4BC", "\u042b\u044b\u042a\u044a\u042d\u044d"],
+      });
+    });
+
+    it("should validate greek alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["el-GR"],
+        valid: [
+          "\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9",
+          "\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9",
+          "20\u03b8",
+          "1234568960",
+        ],
+        invalid: [
+          "0A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ1",
+          "  A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ  ",
+          "\u00c4BC",
+          "Hei\u00df",
+          "\u042b\u044b\u042a\u044a\u042d\u044d",
+          "j\u03b1ck\u03b3",
+        ],
+      });
+    });
+
+    it("should validate Hebrew alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["he"],
+        valid: ["\u05d0\u05d1\u05d2123", "\u05e9\u05dc\u05d5\u05dd11"],
+        invalid: ["\u05d0\u05d1\u05d2 ", "\u05dc\u05d0!!", "abc", "  foo  "],
+      });
+    });
+
+    it("should validate Thai alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["th-TH"],
+        valid: ["\u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35 \u0e51\u0e52\u0e53", "\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a\u0e17\u0e31\u0e49\u0e07 \u0e52 \u0e04\u0e19"],
+        invalid: ["1.\u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35", "\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a\u0e17\u0e31\u0e49\u0e07 2 \u0e04\u0e19"],
+      });
+    });
+
+    it("should validate Korea alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["ko-KR"],
+        valid: ["2002", "\ud6c8\ubbfc\uc815\uc74c", "1446\ub144\ud6c8\ubbfc\uc815\uc74c\ubc18\ud3ec"],
+        invalid: ["2022!", "2019 \ucf54\ub85c\ub098\uc2dc\uc791", "1.\ub85c\ub818\uc785\uc228"],
+      });
+    });
+
+    it("should validate Sinhala alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["si-LK"],
+        valid: ["\u0da0\u0dad\u0dd4\u0dbb", "\u0d9a\u0da0\u0da712", "\u0d8e\u0d8f\u0daf\u0dcf\u0ddb\u0db4\u0dc3\u0dd4\u0d9c\u0ddc2", "1234"],
+        invalid: ["\u0b86\u0b90\u0905\u0924\u0d9a", "\u0d9a\u0da0\u0da7 12", " \u0d8e ", "a1234", "abc", ""],
+      });
+    });
+
+    it("should validate Esperanto alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["eo"],
+        valid: [
+          "saluton",
+          "e\u0125o\u015dan\u011do\u0109iu\u0135a\u016dde0123456789",
+          "E\u0124O\u015cAN\u011cO\u0108IU\u0134A\u016cDE0123456789",
+          "Esperanto1887",
+          "La\u016dLudovikoZamenhofBongustasFre\u015da\u0108e\u0125aMan\u011da\u0135oKunSpicoj",
+        ],
+        invalid: ["qwxyz", "qwxyz 1887"],
+      });
+    });
+
+    it("should error on invalid locale", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["is-NOT"],
+        error: ["1234568960", "abc123"],
+      });
+    });
+
+    it("should validate numeric strings", () => {
+      test({
+        validator: "isNumeric",
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "123.123",
+          "+000000",
+        ],
+        invalid: [" ", "", "."],
+      });
+    });
+
+    it("should validate numeric strings without symbols", () => {
+      test({
+        validator: "isNumeric",
+        args: [
+          {
+            no_symbols: true,
+          },
+        ],
+        valid: ["123", "00123", "0"],
+        invalid: ["-0", "+000000", "", "+123", "123.123", "-00123", " ", "."],
+      });
+    });
+
+    it("should validate numeric strings with locale", () => {
+      test({
+        validator: "isNumeric",
+        args: [
+          {
+            locale: "fr-FR",
+          },
+        ],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "123,123",
+          "+000000",
+        ],
+        invalid: [" ", "", ","],
+      });
+    });
+
+    it("should validate numeric strings with locale", () => {
+      test({
+        validator: "isNumeric",
+        args: [
+          {
+            locale: "fr-CA",
+          },
+        ],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "123,123",
+          "+000000",
+        ],
+        invalid: [" ", "", "."],
+      });
+    });
+
+    it("should validate ports", () => {
+      test({
+        validator: "isPort",
+        valid: ["0", "22", "80", "443", "3000", "8080", "65535"],
+        invalid: ["", "-1", "65536", "0080"],
+      });
+    });
+
+    it("should validate passport number", () => {
+      test({
+        validator: "isPassportNumber",
+        args: ["AM"],
+        valid: ["AF0549358"],
+        invalid: ["A1054935"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["ID"],
+        valid: ["C1253473", "B5948378", "A4859472"],
+        invalid: ["D39481728", "A-3847362", "324132132"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["AR"],
+        valid: ["AAC811035"],
+        invalid: ["A11811035"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["AT"],
+        valid: ["P 1630837", "P 4366918"],
+        invalid: ["0 1630837"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["AU"],
+        valid: ["N0995852", "L4819236"],
+        invalid: ["1A012345"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["AZ"],
+        valid: ["A16175905", "A16175958"],
+        invalid: ["AZ1234584"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["BE"],
+        valid: ["EM000000", "LA080402"],
+        invalid: ["00123456"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["BG"],
+        valid: ["346395366", "039903356"],
+        invalid: ["ABC123456"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["BR"],
+        valid: ["FZ973689", "GH231233"],
+        invalid: ["ABX29332"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["BY"],
+        valid: ["MP3899901"],
+        invalid: ["345333454", "FG53334542"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["CA"],
+        valid: ["GA302922", "ZE000509", "A123456AB", "Z556378HG"],
+        invalid: [
+          "AB0123456",
+          "AZ556378H",
+          "556378HCX",
+          "556378432",
+          "5563784",
+          "#B12345FD",
+          "A43F12354",
+        ],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["CH"],
+        valid: ["S1100409", "S5200073", "X4028791"],
+        invalid: ["AB123456"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["CN"],
+        valid: ["G25352389", "E00160027", "EA1234567"],
+        invalid: [
+          "K0123456",
+          "E-1234567",
+          "G.1234567",
+          "GA1234567",
+          "EI1234567",
+          "GO1234567",
+        ],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["CY"],
+        valid: ["K00000413"],
+        invalid: ["K10100"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["CZ"],
+        valid: ["99003853", "42747260"],
+        invalid: ["012345678", "AB123456"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["DE"],
+        valid: ["C01X00T47", "C26VMVVC3"],
+        invalid: ["AS0123456", "A012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["DK"],
+        valid: ["900010172"],
+        invalid: ["01234567", "K01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["DZ"],
+        valid: ["855609385", "154472412", "197025599"],
+        invalid: [
+          "AS0123456",
+          "A012345678",
+          "0123456789",
+          "12345678",
+          "98KK54321",
+        ],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["EE"],
+        valid: ["K4218285", "K3295867", "KB0167630", "VD0023777"],
+        invalid: ["K01234567", "KB00112233"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["ES"],
+        valid: ["AF238143", "ZAB000254"],
+        invalid: ["AF01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["FI"],
+        valid: ["XP8271602", "XD8500003"],
+        invalid: ["A01234567", "ABC012345"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["FR"],
+        valid: ["10CV28144", "60RF19342", "05RP34083"],
+        invalid: ["012345678", "AB0123456", "01C234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["GB"],
+        valid: ["925076473", "107182890", "104121156"],
+        invalid: ["A012345678", "K000000000", "0123456789"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["GR"],
+        valid: ["AE0000005", "AK0219304"],
+        invalid: ["A01234567", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["HR"],
+        valid: ["007007007", "138463188"],
+        invalid: ["A01234567", "00112233"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["HU"],
+        valid: ["ZA084505", "BA0006902"],
+        invalid: ["A01234567", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["IE"],
+        valid: ["D23145890", "X65097105", "XN0019390"],
+        invalid: ["XND012345", "0123456789"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["IN"],
+        valid: ["A-1234567", "A1234567", "X0019390"],
+        invalid: ["AB-1234567", "0123456789"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["IR"],
+        valid: ["J97634522", "A01234567", "Z11977831"],
+        invalid: ["A0123456", "A0123456Z", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["IS"],
+        valid: ["A2040611", "A1197783"],
+        invalid: ["K0000000", "01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["IT"],
+        valid: ["YA8335453", "KK0000000"],
+        invalid: ["01234567", "KAK001122"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["JM"],
+        valid: ["A0123456"],
+        invalid: ["s0123456", "a01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["JP"],
+        valid: ["NH1106002", "TE3180251", "XS1234567"],
+        invalid: ["X12345678", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["KR"],
+        valid: ["M35772699", "M70689098"],
+        invalid: ["X12345678", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["KZ"],
+        valid: ["A0123456", "b0123456"],
+        invalid: ["01234567", "bb0123456"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["LI"],
+        valid: ["a01234", "f01234"],
+        invalid: ["012345"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["LT"],
+        valid: ["20200997", "LB311756"],
+        invalid: ["LB01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["LU"],
+        valid: ["JCU9J4T2", "JC4E7L2H"],
+        invalid: ["JCU9J4T", "JC4E7L2H0"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["LV"],
+        valid: ["LV9000339", "LV4017173"],
+        invalid: ["LV01234567", "4017173LV"],
+      });
+      test({
+        validator: "isPassportNumber",
+        args: ["LY"],
+        valid: ["P79JF34X", "RJ45H4V2"],
+        invalid: ["P79JF34", "RJ45H4V2C", "RJ4-H4V2"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["MT"],
+        valid: ["1026564"],
+        invalid: ["01234567", "MT01234"],
+      });
+      test({
+        validator: "isPassportNumber",
+        args: ["MZ"],
+        valid: ["AB0808212", "08AB12123"],
+        invalid: ["1AB011241", "1AB01121", "ABAB01121"],
+      });
+      test({
+        validator: "isPassportNumber",
+        args: ["MY"],
+        valid: ["A00000000", "H12345678", "K43143233"],
+        invalid: ["A1234567", "C01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["MX"],
+        valid: ["43986369222", "01234567890"],
+        invalid: ["ABC34567890", "34567890"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["NL"],
+        valid: ["XTR110131", "XR1001R58"],
+        invalid: ["XTR11013R", "XR1001R58A"],
+      });
+      test({
+        validator: "isPassportNumber",
+        args: ["PK"],
+        valid: ["QZ1791293", "XR1001458"],
+        invalid: ["XTR11013R", "XR1001R58A"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["PH"],
+        valid: ["X123456", "XY123456", "XY1234567", "X1234567Y"],
+        invalid: ["XY12345", "X12345Z", "XY12345Z"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["NZ"],
+        valid: [
+          "Lf012345",
+          "La012345",
+          "Ld012345",
+          "Lh012345",
+          "ea012345",
+          "ep012345",
+          "n012345",
+        ],
+        invalid: ["Lp012345", "nd012345", "ed012345", "eh012345", "ef012345"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["PL"],
+        valid: ["ZS 0000177", "AN 3000011"],
+        invalid: ["A1 0000177", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["PT"],
+        valid: ["I700044", "K453286"],
+        invalid: ["0700044", "K4532861"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["RO"],
+        valid: ["05485968", "040005646"],
+        invalid: ["R05485968", "0511060461"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["RU"],
+        valid: ["2 32 636829", "012 345321", "439863692"],
+        invalid: [
+          "A 2R YU46J0",
+          "01A 3D5321",
+          "SF233D53T",
+          "12345678",
+          "1234567890",
+        ],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["SE"],
+        valid: ["59000001", "56702928"],
+        invalid: ["SE012345", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["SL"],
+        valid: ["PB0036440", "PB1390281"],
+        invalid: ["SL0123456", "P01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["SK"],
+        valid: ["P0000000"],
+        invalid: ["SK012345", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["TH"],
+        valid: ["A123456", "B1234567", "CD123456", "EF1234567"],
+        invalid: ["123456", "1234567", "010485371AA"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["TR"],
+        valid: ["U 06764100", "U 01048537"],
+        invalid: ["06764100U", "010485371"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["UA"],
+        valid: ["EH345655", "EK000001", "AP841503"],
+        invalid: ["01234567", "012345EH", "A012345P"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["US"],
+        valid: ["790369937", "340007237", "A90583942", "E00007734"],
+        invalid: [
+          "US0123456",
+          "0123456US",
+          "7903699371",
+          "90583942",
+          "E000077341",
+        ],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["ZA"],
+        valid: ["T12345678", "A12345678", "M12345678", "D12345678"],
+        invalid: ["123456789", "Z12345678"],
+      });
+    });
+
+    it("should validate decimal numbers", () => {
+      test({
+        validator: "isDecimal",
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0.01",
+          ".1",
+          "1.0",
+          "-.25",
+          "-0",
+          "0.0000000000001",
+        ],
+        invalid: [
+          "0,01",
+          ",1",
+          "1,0",
+          "-,25",
+          "0,0000000000001",
+          "0\u066b01",
+          "\u066b1",
+          "1\u066b0",
+          "-\u066b25",
+          "0\u066b0000000000001",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ locale: "en-AU" }],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0.01",
+          ".1",
+          "1.0",
+          "-.25",
+          "-0",
+          "0.0000000000001",
+        ],
+        invalid: [
+          "0,01",
+          ",1",
+          "1,0",
+          "-,25",
+          "0,0000000000001",
+          "0\u066b01",
+          "\u066b1",
+          "1\u066b0",
+          "-\u066b25",
+          "0\u066b0000000000001",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ locale: ["bg-BG"] }],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0,01",
+          ",1",
+          "1,0",
+          "-,25",
+          "-0",
+          "0,0000000000001",
+        ],
+        invalid: [
+          "0.0000000000001",
+          "0.01",
+          ".1",
+          "1.0",
+          "-.25",
+          "0\u066b01",
+          "\u066b1",
+          "1\u066b0",
+          "-\u066b25",
+          "0\u066b0000000000001",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ locale: ["cs-CZ"] }],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0,01",
+          ",1",
+          "1,0",
+          "-,25",
+          "-0",
+          "0,0000000000001",
+        ],
+        invalid: [
+          "0.0000000000001",
+          "0.01",
+          ".1",
+          "1.0",
+          "-.25",
+          "0\u066b01",
+          "\u066b1",
+          "1\u066b0",
+          "-\u066b25",
+          "0\u066b0000000000001",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ locale: ["ar-JO"] }],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0\u066b01",
+          "\u066b1",
+          "1\u066b0",
+          "-\u066b25",
+          "-0",
+          "0\u066b0000000000001",
+        ],
+        invalid: [
+          "0,0000000000001",
+          "0,01",
+          ",1",
+          "1,0",
+          "-,25",
+          "0.0000000000001",
+          "0.01",
+          ".1",
+          "1.0",
+          "-.25",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ locale: ["ar-EG"] }],
+        valid: ["0.01"],
+        invalid: ["0,01"],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ locale: ["en-ZM"] }],
+        valid: ["0,01"],
+        invalid: ["0.01"],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ force_decimal: true }],
+        valid: ["0.01", ".1", "1.0", "-.25", "0.0000000000001"],
+        invalid: [
+          "-0",
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0,0000000000001",
+          "0,01",
+          ",1",
+          "1,0",
+          "-,25",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ decimal_digits: "2,3" }],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0.01",
+          "1.043",
+          ".15",
+          "-.255",
+          "-0",
+        ],
+        invalid: [
+          "0.0000000000001",
+          "0.0",
+          ".1",
+          "1.0",
+          "-.2564",
+          "0.0",
+          "\u066b1",
+          "1\u066b0",
+          "-\u066b25",
+          "0\u066b0000000000001",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+    });
+
+    it("should error on invalid locale", () => {
+      test({
+        validator: "isDecimal",
+        args: [{ locale: ["is-NOT"] }],
+        error: ["123", "0.01", "0,01"],
+      });
+    });
+
+    it("should validate lowercase strings", () => {
+      test({
+        validator: "isLowercase",
+        valid: ["abc", "abc123", "this is lowercase.", "tr\u7aeas \u7aefber"],
+        invalid: ["fooBar", "123A"],
+      });
+    });
+
+    it("should validate imei strings", () => {
+      test({
+        validator: "isIMEI",
+        valid: [
+          "352099001761481",
+          "868932036356090",
+          "490154203237518",
+          "546918475942169",
+          "998227667144730",
+          "532729766805999",
+        ],
+        invalid: ["490154203237517", "3568680000414120", "3520990017614823"],
+      });
+    });
+
+    it("should validate imei strings with hyphens", () => {
+      test({
+        validator: "isIMEI",
+        args: [{ allow_hyphens: true }],
+        valid: [
+          "35-209900-176148-1",
+          "86-893203-635609-0",
+          "49-015420-323751-8",
+          "54-691847-594216-9",
+          "99-822766-714473-0",
+          "53-272976-680599-9",
+        ],
+        invalid: [
+          "49-015420-323751-7",
+          "35-686800-0041412-0",
+          "35-209900-1761482-3",
+        ],
+      });
+    });
+
+    it("should validate uppercase strings", () => {
+      test({
+        validator: "isUppercase",
+        valid: ["ABC", "ABC123", "ALL CAPS IS FUN.", "   ."],
+        invalid: ["fooBar", "123abc"],
+      });
+    });
+
+    it("should validate integers", () => {
+      test({
+        validator: "isInt",
+        valid: ["13", "123", "0", "123", "-0", "+1", "01", "-01", "000"],
+        invalid: ["100e10", "123.123", "   ", ""],
+      });
+      test({
+        validator: "isInt",
+        args: [{ allow_leading_zeroes: false }],
+        valid: ["13", "123", "0", "123", "-0", "+1"],
+        invalid: ["01", "-01", "000", "100e10", "123.123", "   ", ""],
+      });
+      test({
+        validator: "isInt",
+        args: [{ allow_leading_zeroes: true }],
+        valid: [
+          "13",
+          "123",
+          "0",
+          "123",
+          "-0",
+          "+1",
+          "01",
+          "-01",
+          "000",
+          "-000",
+          "+000",
+        ],
+        invalid: ["100e10", "123.123", "   ", ""],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            min: 10,
+          },
+        ],
+        valid: ["15", "80", "99"],
+        invalid: ["9", "6", "3.2", "a"],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            min: 10,
+            max: 15,
+          },
+        ],
+        valid: ["15", "11", "13"],
+        invalid: ["9", "2", "17", "3.2", "33", "a"],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            gt: 10,
+            lt: 15,
+          },
+        ],
+        valid: ["14", "11", "13"],
+        invalid: ["10", "15", "17", "3.2", "33", "a"],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            min: undefined,
+            max: undefined,
+          },
+        ],
+        valid: ["143", "15", "767777575"],
+        invalid: ["10.4", "bar", "10a", "c44"],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            gt: undefined,
+            lt: undefined,
+          },
+        ],
+        valid: ["289373466", "55", "989"],
+        invalid: ["10.4", "baz", "66a", "c21"],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            gt: null,
+            max: null,
+          },
+        ],
+        valid: ["1", "886", "84512345"],
+        invalid: ["10.4", "h", "1.2", "+"],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            lt: null,
+            min: null,
+          },
+        ],
+        valid: ["289373466", "55", "989"],
+        invalid: [",", "+11212+", "fail", "111987234i"],
+      });
+    });
+
+    it("should validate floats", () => {
+      test({
+        validator: "isFloat",
+        valid: [
+          "123",
+          "123.",
+          "123.123",
+          "-123.123",
+          "-0.123",
+          "+0.123",
+          "0.123",
+          ".0",
+          "-.123",
+          "+.123",
+          "01.123",
+          "-0.22250738585072011e-307",
+        ],
+        invalid: [
+          "+",
+          "-",
+          "  ",
+          "",
+          ".",
+          ",",
+          "foo",
+          "20.foo",
+          "2020-01-06T14:31:00.135Z",
+        ],
+      });
+
+      test({
+        validator: "isFloat",
+        args: [{ locale: "en-AU" }],
+        valid: [
+          "123",
+          "123.",
+          "123.123",
+          "-123.123",
+          "-0.123",
+          "+0.123",
+          "0.123",
+          ".0",
+          "-.123",
+          "+.123",
+          "01.123",
+          "-0.22250738585072011e-307",
+        ],
+        invalid: ["123\u066b123", "123,123", "  ", "", ".", "foo"],
+      });
+
+      test({
+        validator: "isFloat",
+        args: [{ locale: "de-DE" }],
+        valid: [
+          "123",
+          "123,",
+          "123,123",
+          "-123,123",
+          "-0,123",
+          "+0,123",
+          "0,123",
+          ",0",
+          "-,123",
+          "+,123",
+          "01,123",
+          "-0,22250738585072011e-307",
+        ],
+        invalid: ["123.123", "123\u066b123", "  ", "", ".", "foo"],
+      });
+
+      test({
+        validator: "isFloat",
+        args: [{ locale: "ar-JO" }],
+        valid: [
+          "123",
+          "123\u066b",
+          "123\u066b123",
+          "-123\u066b123",
+          "-0\u066b123",
+          "+0\u066b123",
+          "0\u066b123",
+          "\u066b0",
+          "-\u066b123",
+          "+\u066b123",
+          "01\u066b123",
+          "-0\u066b22250738585072011e-307",
+        ],
+        invalid: ["123,123", "123.123", "  ", "", ".", "foo"],
+      });
+
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            min: 3.7,
+          },
+        ],
+        valid: ["3.888", "3.92", "4.5", "50", "3.7", "3.71"],
+        invalid: ["3.6", "3.69", "3", "1.5", "a"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            min: 0.1,
+            max: 1.0,
+          },
+        ],
+        valid: ["0.1", "1.0", "0.15", "0.33", "0.57", "0.7"],
+        invalid: ["0", "0.0", "a", "1.3", "0.05", "5"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            gt: -5.5,
+            lt: 10,
+          },
+        ],
+        valid: ["9.9", "1.0", "0", "-1", "7", "-5.4"],
+        invalid: ["10", "-5.5", "a", "-20.3", "20e3", "10.00001"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            min: -5.5,
+            max: 10,
+            gt: -5.5,
+            lt: 10,
+          },
+        ],
+        valid: ["9.99999", "-5.499999"],
+        invalid: ["10", "-5.5"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            locale: "de-DE",
+            min: 3.1,
+          },
+        ],
+        valid: ["123", "123,", "123,123", "3,1", "3,100001"],
+        invalid: [
+          "3,09",
+          "-,123",
+          "+,123",
+          "01,123",
+          "-0,22250738585072011e-307",
+          "-123,123",
+          "-0,123",
+          "+0,123",
+          "0,123",
+          ",0",
+          "123.123",
+          "123\u066b123",
+          "  ",
+          "",
+          ".",
+          "foo",
+        ],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            min: undefined,
+            max: undefined,
+          },
+        ],
+        valid: ["123", "123.", "123.123", "-767.767", "+111.111"],
+        invalid: ["ab565", "-,123", "+,123", "7866.t", "123,123", "123,"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            gt: undefined,
+            lt: undefined,
+          },
+        ],
+        valid: ["14.34343", "11.1", "456"],
+        invalid: ["ab565", "-,123", "+,123", "7866.t"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            locale: "ar",
+            gt: null,
+            max: null,
+          },
+        ],
+        valid: ["13324\u066b", "12321", "444\u066b83874"],
+        invalid: ["55.55.55", "1;23", "+-123", "1111111l1", "3.3"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            locale: "ru-RU",
+            lt: null,
+            min: null,
+          },
+        ],
+        valid: ["11231554,34343", "11,1", "456", ",311"],
+        invalid: ["ab565", "-.123", "+.123", "7866.t", "22.3"],
+      });
+    });
+
+    it("should validate hexadecimal strings", () => {
+      test({
+        validator: "isHexadecimal",
+        valid: [
+          "deadBEEF",
+          "ff0044",
+          "0xff0044",
+          "0XfF0044",
+          "0x0123456789abcDEF",
+          "0X0123456789abcDEF",
+          "0hfedCBA9876543210",
+          "0HfedCBA9876543210",
+          "0123456789abcDEF",
+        ],
+        invalid: [
+          "abcdefg",
+          "",
+          "..",
+          "0xa2h",
+          "0xa20x",
+          "0x0123456789abcDEFq",
+          "0hfedCBA9876543210q",
+          "01234q56789abcDEF",
+        ],
+      });
+    });
+
+    it("should validate octal strings", () => {
+      test({
+        validator: "isOctal",
+        valid: ["076543210", "0o01234567"],
+        invalid: [
+          "abcdefg",
+          "012345678",
+          "012345670c",
+          "00c12345670c",
+          "",
+          "..",
+        ],
+      });
+    });
+
+    it("should validate hexadecimal color strings", () => {
+      test({
+        validator: "isHexColor",
+        valid: ["#ff0000ff", "#ff0034", "#CCCCCC", "0f38", "fff", "#f00"],
+        invalid: ["#ff", "fff0a", "#ff12FG"],
+      });
+    });
+
+    it("should validate HSL color strings", () => {
+      test({
+        validator: "isHSL",
+        valid: [
+          "hsl(360,0000000000100%,000000100%)",
+          "hsl(000010, 00000000001%, 00000040%)",
+          "HSL(00000,0000000000100%,000000100%)",
+          "hsL(0, 0%, 0%)",
+          "hSl(  360  , 100%  , 100%   )",
+          "Hsl(  00150  , 000099%  , 01%   )",
+          "hsl(01080, 03%, 4%)",
+          "hsl(-540, 03%, 4%)",
+          "hsla(+540, 03%, 4%)",
+          "hsla(+540, 03%, 4%, 500)",
+          "hsl(+540deg, 03%, 4%, 500)",
+          "hsl(+540gRaD, 03%, 4%, 500)",
+          "hsl(+540.01e-98rad, 03%, 4%, 500)",
+          "hsl(-540.5turn, 03%, 4%, 500)",
+          "hsl(+540, 03%, 4%, 500e-01)",
+          "hsl(+540, 03%, 4%, 500e+80)",
+          "hsl(4.71239rad, 60%, 70%)",
+          "hsl(270deg, 60%, 70%)",
+          "hsl(200, +.1%, 62%, 1)",
+          "hsl(270 60% 70%)",
+          "hsl(200, +.1e-9%, 62e10%, 1)",
+          "hsl(.75turn, 60%, 70%)",
+          // 'hsl(200grad+.1%62%/1)', //supposed to pass, but need to handle delimiters
+          "hsl(200grad +.1% 62% / 1)",
+          "hsl(270, 60%, 50%, .15)",
+          "hsl(270, 60%, 50%, 15%)",
+          "hsl(270 60% 50% / .15)",
+          "hsl(270 60% 50% / 15%)",
+        ],
+        invalid: [
+          "hsl (360,0000000000100%,000000100%)",
+          "hsl(0260, 100 %, 100%)",
+          "hsl(0160, 100%, 100%, 100 %)",
+          "hsl(-0160, 100%, 100a)",
+          "hsl(-0160, 100%, 100)",
+          "hsl(-0160 100%, 100%, )",
+          "hsl(270 deg, 60%, 70%)",
+          "hsl( deg, 60%, 70%)",
+          "hsl(, 60%, 70%)",
+          "hsl(3000deg, 70%)",
+        ],
+      });
+    });
+
+    it("should validate rgb color strings", () => {
+      test({
+        validator: "isRgbColor",
+        valid: [
+          "rgb(0,0,0)",
+          "rgb(255,255,255)",
+          "rgba(0,0,0,0)",
+          "rgba(255,255,255,1)",
+          "rgba(255,255,255,.1)",
+          "rgba(255,255,255,0.1)",
+          "rgba(255,255,255,.12)",
+          "rgb(5%,5%,5%)",
+          "rgba(5%,5%,5%,.3)",
+          "rgba(5%,5%,5%,.32)",
+        ],
+        invalid: [
+          "rgb(0,0,0,)",
+          "rgb(0,0,)",
+          "rgb(0,0,256)",
+          "rgb()",
+          "rgba(0,0,0)",
+          "rgba(255,255,255,2)",
+          "rgba(255,255,255,.123)",
+          "rgba(255,255,256,0.1)",
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "rgba(3,3,3%,.3)",
+          "rgba(5%,5%,5%,.321)",
+          "rgb(101%,101%,101%)",
+          "rgba(3%,3%,101%,0.3)",
+          "rgb(101%,101%,101%) additional invalid string part",
+          "rgba(3%,3%,101%,0.3) additional invalid string part",
+          "r         g    b(   0,         251,       222     )",
+          "r         g    ba(   0,         251,       222     )",
+          "rg ba(0, 251, 22, 0.5)",
+          "rgb( 255,255 ,255)",
+          "rgba(255, 255, 255, 0.5)",
+          "rgba(255, 255, 255, 0.5)",
+          "rgb(5%, 5%, 5%)",
+        ],
+      });
+
+      // test empty options object
+      test({
+        validator: "isRgbColor",
+        args: [{}],
+        valid: [
+          "rgb(0,0,0)",
+          "rgb(255,255,255)",
+          "rgba(0,0,0,0)",
+          "rgba(255,255,255,1)",
+          "rgba(255,255,255,.1)",
+          "rgba(255,255,255,.12)",
+          "rgba(255,255,255,0.1)",
+          "rgb(5%,5%,5%)",
+          "rgba(5%,5%,5%,.3)",
+        ],
+        invalid: [
+          "rgb(0,0,0,)",
+          "rgb(0,0,)",
+          "rgb(0,0,256)",
+          "rgb()",
+          "rgba(0,0,0)",
+          "rgba(255,255,255,2)",
+          "rgba(255,255,256,0.1)",
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "rgba(3,3,3%,.3)",
+          "rgb(101%,101%,101%)",
+          "rgba(3%,3%,101%,0.3)",
+          "r         g    b(   0,         251,       222     )",
+          "r         g    ba(   0,         251,       222     )",
+          "rg ba(0, 251, 22, 0.5)",
+          "rgb( 255,255 ,255)",
+          "rgba(255, 255, 255, 0.5)",
+          "rgba(255, 255, 255, 0.5)",
+          "rgb(5%, 5%, 5%)",
+        ],
+      });
+      // test where includePercentValues is given as false
+      test({
+        validator: "isRgbColor",
+        args: [false],
+        valid: ["rgb(5,5,5)", "rgba(5,5,5,.3)"],
+        invalid: [
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "r         g    b(   0,         251,       222     )",
+          "r         g    ba(   0,         251,       222     )",
+        ],
+      });
+
+      // test where includePercentValues is given as false as part of options object
+      test({
+        validator: "isRgbColor",
+        args: [{ includePercentValues: false }],
+        valid: ["rgb(5,5,5)", "rgba(5,5,5,.3)"],
+        invalid: [
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "r         g    b(   0,         251,       222     )",
+          "rgba(255, 255, 255 ,0.2)",
+          "r         g    ba(   0,         251,       222     )",
+        ],
+      });
+
+      // test where include percent is true explciitly
+      test({
+        validator: "isRgbColor",
+        args: [true],
+        valid: [
+          "rgb(5,5,5)",
+          "rgba(5,5,5,.3)",
+          "rgb(0,0,0)",
+          "rgb(255,255,255)",
+          "rgba(0,0,0,0)",
+          "rgba(255,255,255,1)",
+          "rgba(255,255,255,.1)",
+          "rgba(255,255,255,.12)",
+          "rgba(255,255,255,0.1)",
+          "rgb(5%,5%,5%)",
+          "rgba(5%,5%,5%,.3)",
+          "rgb(5%,5%,5%)",
+          "rgba(255,255,255,0.5)",
+        ],
+        invalid: [
+          "rgba(255, 255, 255, 0.5)",
+          "rgb(5%, 5%, 5%)",
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "r         g    b(   0,         251,       222     )",
+          "r         g    ba(   0,         251,       222     )",
+          "rgb(0,0,0,)",
+          "rgb(0,0,)",
+          "rgb(0,0,256)",
+          "rgb()",
+          "rgba(0,0,0)",
+          "rgba(255,255,255,2)",
+          "rgba(255,255,256,0.1)",
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "rgba(3,3,3%,.3)",
+          "rgb(101%,101%,101%)",
+          "rgba(3%,3%,101%,0.3)",
+        ],
+      });
+
+      // test where percent value is false and allowSpaces is true as part of options object
+      test({
+        validator: "isRgbColor",
+        args: [{ includePercentValues: false, allowSpaces: true }],
+        valid: [
+          "rgb(5,5,5)",
+          "rgba(5,5,5,.3)",
+          "rgba(255,255,255,0.2)",
+          "rgba(255, 255, 255 ,0.2)",
+        ],
+        invalid: [
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "rgba(5% ,5%, 5%)",
+          "r         g    b(   0,         251,       222     )",
+          "r         g    ba(   0,         251,       222     )",
+          "rgb(0,0,)",
+          "rgb()",
+          "rgb(4,4,5%)",
+          "rgb(5%,5%,5%)",
+          "rgba(3,3,3%,.3)",
+          "rgb(101%, 101%, 101%)",
+          "rgba(3%,3%,101%,0.3)",
+        ],
+      });
+
+      // test where both are true as part of options object
+      test({
+        validator: "isRgbColor",
+        args: [{ includePercentValues: true, allowSpaces: true }],
+        valid: [
+          "rgb(  5, 5, 5)",
+          "rgba(5, 5, 5, .3)",
+          "rgb(0, 0, 0)",
+          "rgb(255, 255, 255)",
+          "rgba(0, 0, 0, 0)",
+          "rgba(255, 255, 255, 1)",
+          "rgba(255, 255, 255, .1)",
+          "rgba(255, 255, 255, 0.1)",
+          "rgb(5% ,5% ,5%)",
+          "rgba(5%,5%,5%, .3)",
+        ],
+        invalid: [
+          "r         g    b(   0,         251,       222     )",
+          "rgb(4,4,5%)",
+          "rgb(101%,101%,101%)",
+        ],
+      });
+
+      // test where allowSpaces is false as part of options object
+      test({
+        validator: "isRgbColor",
+        args: [{ includePercentValues: true, allowSpaces: false }],
+        valid: [
+          "rgb(5,5,5)",
+          "rgba(5,5,5,.3)",
+          "rgb(0,0,0)",
+          "rgb(255,255,255)",
+          "rgba(0,0,0,0)",
+          "rgba(255,255,255,1)",
+          "rgba(255,255,255,.1)",
+          "rgba(255,255,255,.12)",
+          "rgba(255,255,255,0.1)",
+          "rgb(5%,5%,5%)",
+          "rgba(5%,5%,5%,.3)",
+        ],
+        invalid: [
+          "rgb( 255,255 ,255)",
+          "rgba(255, 255, 255, 0.5)",
+          "rgb(5%, 5%, 5%)",
+          "rgba(255, 255, 255, 0.5)",
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "r         g    b(   0,         251,       222     )",
+          "r         g    ba(   0,         251,       222     )",
+          "rgb(0,0,0,)",
+          "rgb(0,0,)",
+          "rgb(0,0,256)",
+          "rgb()",
+          "rgba(0,0,0)",
+          "rgba(255,255,255,2)",
+          "rgba(255,255,256,0.1)",
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "rgba(3,3,3%,.3)",
+          "rgb(101%,101%,101%)",
+          "rgba(3%,3%,101%,0.3)",
+        ],
+      });
+    });
+
+    it("should validate ISRC code strings", () => {
+      test({
+        validator: "isISRC",
+        valid: ["USAT29900609", "GBAYE6800011", "USRC15705223", "USCA29500702"],
+        invalid: [
+          "USAT2990060",
+          "SRC15705223",
+          "US-CA29500702",
+          "USARC15705223",
+        ],
+      });
+    });
+
+    it("should validate md5 strings", () => {
+      test({
+        validator: "isMD5",
+        valid: [
+          "d94f3f016ae679c3008de268209132f2",
+          "751adbc511ccbe8edf23d486fa4581cd",
+          "88dae00e614d8f24cfd5a8b3f8002e93",
+          "0bf1c35032a71a14c2f719e5a14c1e96",
+        ],
+        invalid: [
+          "KYT0bf1c35032a71a14c2f719e5a14c1",
+          "q94375dj93458w34",
+          "39485729348",
+          "%&FHKJFvk",
+        ],
+      });
+    });
+
+    it("should validate hash strings", () => {
+      ["md5", "md4", "ripemd128", "tiger128"].forEach((algorithm) => {
+        test({
+          validator: "isHash",
+          args: [algorithm],
+          valid: [
+            "d94f3f016ae679c3008de268209132f2",
+            "751adbc511ccbe8edf23d486fa4581cd",
+            "88dae00e614d8f24cfd5a8b3f8002e93",
+            "0bf1c35032a71a14c2f719e5a14c1e96",
+            "d94f3F016Ae679C3008de268209132F2",
+            "88DAE00e614d8f24cfd5a8b3f8002E93",
+          ],
+          invalid: [
+            "q94375dj93458w34",
+            "39485729348",
+            "%&FHKJFvk",
+            "KYT0bf1c35032a71a14c2f719e5a1",
+          ],
+        });
+      });
+
+      ["crc32", "crc32b"].forEach((algorithm) => {
+        test({
+          validator: "isHash",
+          args: [algorithm],
+          valid: [
+            "d94f3f01",
+            "751adbc5",
+            "88dae00e",
+            "0bf1c350",
+            "88DAE00e",
+            "751aDBc5",
+          ],
+          invalid: [
+            "KYT0bf1c35032a71a14c2f719e5a14c1",
+            "q94375dj93458w34",
+            "q943",
+            "39485729348",
+            "%&FHKJFvk",
+          ],
+        });
+      });
+
+      ["sha1", "tiger160", "ripemd160"].forEach((algorithm) => {
+        test({
+          validator: "isHash",
+          args: [algorithm],
+          valid: [
+            "3ca25ae354e192b26879f651a51d92aa8a34d8d3",
+            "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d",
+            "beb8c3f30da46be179b8df5f5ecb5e4b10508230",
+            "efd5d3b190e893ed317f38da2420d63b7ae0d5ed",
+            "AAF4c61ddCC5e8a2dabede0f3b482cd9AEA9434D",
+            "3ca25AE354e192b26879f651A51d92aa8a34d8D3",
+          ],
+          invalid: [
+            "KYT0bf1c35032a71a14c2f719e5a14c1",
+            "KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk",
+            "q94375dj93458w34",
+            "39485729348",
+            "%&FHKJFvk",
+          ],
+        });
+      });
+
+      test({
+        validator: "isHash",
+        args: ["sha256"],
+        valid: [
+          "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824",
+          "1d996e033d612d9af2b44b70061ee0e868bfd14c2dd90b129e1edeb7953e7985",
+          "80f70bfeaed5886e33536bcfa8c05c60afef5a0e48f699a7912d5e399cdcc441",
+          "579282cfb65ca1f109b78536effaf621b853c9f7079664a3fbe2b519f435898c",
+          "2CF24dba5FB0a30e26E83b2AC5b9E29E1b161e5C1fa7425E73043362938b9824",
+          "80F70bFEAed5886e33536bcfa8c05c60aFEF5a0e48f699a7912d5e399cdCC441",
+        ],
+        invalid: [
+          "KYT0bf1c35032a71a14c2f719e5a14c1",
+          "KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk",
+          "q94375dj93458w34",
+          "39485729348",
+          "%&FHKJFvk",
+        ],
+      });
+      test({
+        validator: "isHash",
+        args: ["sha384"],
+        valid: [
+          "3fed1f814d28dc5d63e313f8a601ecc4836d1662a19365cbdcf6870f6b56388850b58043f7ebf2418abb8f39c3a42e31",
+          "b330f4e575db6e73500bd3b805db1a84b5a034e5d21f0041d91eec85af1dfcb13e40bb1c4d36a72487e048ac6af74b58",
+          "bf547c3fc5841a377eb1519c2890344dbab15c40ae4150b4b34443d2212e5b04aa9d58865bf03d8ae27840fef430b891",
+          "fc09a3d11368386530f985dacddd026ae1e44e0e297c805c3429d50744e6237eb4417c20ffca8807b071823af13a3f65",
+          "3fed1f814d28dc5d63e313f8A601ecc4836d1662a19365CBDCf6870f6b56388850b58043f7ebf2418abb8f39c3a42e31",
+          "b330f4E575db6e73500bd3b805db1a84b5a034e5d21f0041d91EEC85af1dfcb13e40bb1c4d36a72487e048ac6af74b58",
+        ],
+        invalid: [
+          "KYT0bf1c35032a71a14c2f719e5a14c1",
+          "KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk",
+          "q94375dj93458w34",
+          "39485729348",
+          "%&FHKJFvk",
+        ],
+      });
+      test({
+        validator: "isHash",
+        args: ["sha512"],
+        valid: [
+          "9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043",
+          "83c586381bf5ba94c8d9ba8b6b92beb0997d76c257708742a6c26d1b7cbb9269af92d527419d5b8475f2bb6686d2f92a6649b7f174c1d8306eb335e585ab5049",
+          "45bc5fa8cb45ee408c04b6269e9f1e1c17090c5ce26ffeeda2af097735b29953ce547e40ff3ad0d120e5361cc5f9cee35ea91ecd4077f3f589b4d439168f91b9",
+          "432ac3d29e4f18c7f604f7c3c96369a6c5c61fc09bf77880548239baffd61636d42ed374f41c261e424d20d98e320e812a6d52865be059745fdb2cb20acff0ab",
+          "9B71D224bd62f3785D96d46ad3ea3d73319bFBC2890CAAdae2dff72519673CA72323C3d99ba5c11d7c7ACC6e14b8c5DA0c4663475c2E5c3adef46f73bcDEC043",
+          "432AC3d29E4f18c7F604f7c3c96369A6C5c61fC09Bf77880548239baffd61636d42ed374f41c261e424d20d98e320e812a6d52865be059745fdb2cb20acff0ab",
+        ],
+        invalid: [
+          "KYT0bf1c35032a71a14c2f719e5a14c1",
+          "KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk",
+          "q94375dj93458w34",
+          "39485729348",
+          "%&FHKJFvk",
+        ],
+      });
+      test({
+        validator: "isHash",
+        args: ["tiger192"],
+        valid: [
+          "6281a1f098c5e7290927ed09150d43ff3990a0fe1a48267c",
+          "56268f7bc269cf1bc83d3ce42e07a85632394737918f4760",
+          "46fc0125a148788a3ac1d649566fc04eb84a746f1a6e4fa7",
+          "7731ea1621ae99ea3197b94583d034fdbaa4dce31a67404a",
+          "6281A1f098c5e7290927ed09150d43ff3990a0fe1a48267C",
+          "46FC0125a148788a3AC1d649566fc04eb84A746f1a6E4fa7",
+        ],
+        invalid: [
+          "KYT0bf1c35032a71a14c2f719e5a14c1",
+          "KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk",
+          "q94375dj93458w34",
+          "39485729348",
+          "%&FHKJFvk",
+        ],
+      });
+    });
+    it("should validate JWT tokens", () => {
+      test({
+        validator: "isJWT",
+        valid: [
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI",
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb3JlbSI6Imlwc3VtIn0.ymiJSsMJXR6tMSr8G9usjQ15_8hKPDv_CArLhxw28MI",
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2xvciI6InNpdCIsImFtZXQiOlsibG9yZW0iLCJpcHN1bSJdfQ.rRpe04zbWbbJjwM43VnHzAboDzszJtGrNsUxaqQ-GQ8",
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqb2huIjp7ImFnZSI6MjUsImhlaWdodCI6MTg1fSwiamFrZSI6eyJhZ2UiOjMwLCJoZWlnaHQiOjI3MH19.YRLPARDmhGMC3BBk_OhtwwK21PIkVCqQe8ncIRPKo-E",
+        ],
+        invalid: [
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI6MTUxNjIzOTAyMn0",
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI6MTYxNjY1Mzg3Mn0.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tIiwiaWF0IjoxNjE2NjUzODcyLCJleHAiOjE2MTY2NTM4ODJ9.a1jLRQkO5TV5y5ERcaPAiM9Xm2gBdRjKrrCpHkGr_8M",
+          "$Zs.ewu.su84",
+          "ks64$S/9.dy$\u00a7kz.3sd73b",
+        ],
+        error: [[], {}, null, undefined],
+      });
+    });
+
+    it("should validate null strings", () => {
+      test({
+        validator: "isEmpty",
+        valid: [""],
+        invalid: [" ", "foo", "3"],
+      });
+      test({
+        validator: "isEmpty",
+        args: [{ ignore_whitespace: false }],
+        valid: [""],
+        invalid: [" ", "foo", "3"],
+      });
+      test({
+        validator: "isEmpty",
+        args: [{ ignore_whitespace: true }],
+        valid: ["", " "],
+        invalid: ["foo", "3"],
+      });
+    });
+
+    it("should validate strings against an expected value", () => {
+      test({
+        validator: "equals",
+        args: ["abc"],
+        valid: ["abc"],
+        invalid: ["Abc", "123"],
+      });
+    });
+
+    it("should validate strings contain another string", () => {
+      test({
+        validator: "contains",
+        args: ["foo"],
+        valid: ["foo", "foobar", "bazfoo"],
+        invalid: ["bar", "fobar"],
+      });
+
+      test({
+        validator: "contains",
+        args: [
+          "foo",
+          {
+            ignoreCase: true,
+          },
+        ],
+        valid: ["Foo", "FOObar", "BAZfoo"],
+        invalid: ["bar", "fobar", "baxoof"],
+      });
+
+      test({
+        validator: "contains",
+        args: [
+          "foo",
+          {
+            minOccurrences: 2,
+          },
+        ],
+        valid: ["foofoofoo", "12foo124foo", "fofooofoooofoooo", "foo1foo"],
+        invalid: ["foo", "foobar", "Fooofoo", "foofo"],
+      });
+    });
+
+    it("should validate strings against a pattern", () => {
+      test({
+        validator: "matches",
+        args: [/abc/],
+        valid: ["abc", "abcdef", "123abc"],
+        invalid: ["acb", "Abc"],
+      });
+      test({
+        validator: "matches",
+        args: ["abc"],
+        valid: ["abc", "abcdef", "123abc"],
+        invalid: ["acb", "Abc"],
+      });
+      test({
+        validator: "matches",
+        args: ["abc", "i"],
+        valid: ["abc", "abcdef", "123abc", "AbC"],
+        invalid: ["acb"],
+      });
+    });
+
+    it("should validate strings by length (deprecated api)", () => {
+      test({
+        validator: "isLength",
+        args: [2],
+        valid: ["abc", "de", "abcd"],
+        invalid: ["", "a"],
+      });
+      test({
+        validator: "isLength",
+        args: [2, 3],
+        valid: ["abc", "de"],
+        invalid: ["", "a", "abcd"],
+      });
+      test({
+        validator: "isLength",
+        args: [2, 3],
+        valid: ["\u5e72\ud867\ude3d", "\ud842\udfb7\u91ce\u5bb6"],
+        invalid: ["", "\ud840\udc0b", "\u5343\u7ac8\u901a\u308a"],
+      });
+      test({
+        validator: "isLength",
+        args: [0, 0],
+        valid: [""],
+        invalid: ["a", "ab"],
+      });
+    });
+
+    it("should validate isLocale codes", () => {
+      test({
+        validator: "isLocale",
+        valid: [
+          "uz_Latn_UZ",
+          "en",
+          "gsw",
+          "en-US",
+          "es_ES",
+          "es-419",
+          "sw_KE",
+          "am_ET",
+          "zh-CHS",
+          "ca_ES_VALENCIA",
+          "en_US_POSIX",
+          "hak-CN",
+          "zh-Hant",
+          "zh-Hans",
+          "sr-Cyrl",
+          "sr-Latn",
+          "zh-cmn-Hans-CN",
+          "cmn-Hans-CN",
+          "zh-yue-HK",
+          "yue-HK",
+          "zh-Hans-CN",
+          "sr-Latn-RS",
+          "sl-rozaj",
+          "sl-rozaj-biske",
+          "sl-nedis",
+          "de-CH-1901",
+          "sl-IT-nedis",
+          "hy-Latn-IT-arevela",
+          "i-enochian",
+          "en-scotland-fonipa",
+          "sl-IT-rozaj-biske-1994",
+          "de-CH-x-phonebk",
+          "az-Arab-x-AZE-derbend",
+          "x-whatever",
+          "qaa-Qaaa-QM-x-southern",
+          "de-Qaaa",
+          "sr-Latn-QM",
+          "sr-Qaaa-RS",
+          "en-US-u-islamcal",
+          "zh-CN-a-myext-x-private",
+          "en-a-myext-b-another",
+        ],
+        invalid: ["lo_POP", "12", "12_DD", "de-419-DE", "a-DE"],
+      });
+    });
+
+    it("should validate strings by byte length (deprecated api)", () => {
+      test({
+        validator: "isByteLength",
+        args: [2],
+        valid: ["abc", "de", "abcd", "\uff47\uff4d\uff41\uff49\uff4c"],
+        invalid: ["", "a"],
+      });
+      test({
+        validator: "isByteLength",
+        args: [2, 3],
+        valid: ["abc", "de", "\uff47"],
+        invalid: ["", "a", "abcd", "\uff47\uff4d"],
+      });
+      test({
+        validator: "isByteLength",
+        args: [0, 0],
+        valid: [""],
+        invalid: ["\uff47", "a"],
+      });
+    });
+
+    it("should validate strings by length", () => {
+      test({
+        validator: "isLength",
+        args: [{ min: 2 }],
+        valid: ["abc", "de", "abcd"],
+        invalid: ["", "a"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ min: 2, max: 3 }],
+        valid: ["abc", "de"],
+        invalid: ["", "a", "abcd"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ min: 2, max: 3 }],
+        valid: ["\u5e72\ud867\ude3d", "\ud842\udfb7\u91ce\u5bb6"],
+        invalid: ["", "\ud840\udc0b", "\u5343\u7ac8\u901a\u308a"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ max: 3 }],
+        valid: ["abc", "de", "a", ""],
+        invalid: ["abcd"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ max: 6, discreteLengths: 5 }],
+        valid: ["abcd", "vfd", "ff", "", "k"],
+        invalid: ["abcdefgh", "hfjdksks"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ min: 2, max: 6, discreteLengths: 5 }],
+        valid: ["bsa", "vfvd", "ff"],
+        invalid: ["", " ", "hfskdunvc"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ min: 1, discreteLengths: 2 }],
+        valid: [" ", "hello", "bsa"],
+        invalid: [""],
+      });
+      test({
+        validator: "isLength",
+        args: [{ max: 0 }],
+        valid: [""],
+        invalid: ["a", "ab"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ min: 5, max: 10, discreteLengths: [2, 6, 8, 9] }],
+        valid: ["helloguy", "shopping", "validator", "length"],
+        invalid: ["abcde", "abcdefg"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ discreteLengths: "9" }],
+        valid: ["a", "abcd", "abcdefghijkl"],
+        invalid: [],
+      });
+      test({
+        validator: "isLength",
+        valid: ["a", "", "asds"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ max: 8 }],
+        valid: ["\ud83d\udc69\ud83e\uddb0\ud83d\udc69\ud83d\udc69\ud83d\udc66\ud83d\udc66\ud83c\udff3\ufe0f\ud83c\udf08", "\u23e9\ufe0e\u23e9\ufe0e\u23ea\ufe0e\u23ea\ufe0e\u23ed\ufe0e\u23ed\ufe0e\u23ee\ufe0e\u23ee\ufe0e"],
+      });
+    });
+
+    it("should validate strings by byte length", () => {
+      test({
+        validator: "isByteLength",
+        args: [{ min: 2 }],
+        valid: ["abc", "de", "abcd", "\uff47\uff4d\uff41\uff49\uff4c"],
+        invalid: ["", "a"],
+      });
+      test({
+        validator: "isByteLength",
+        args: [{ min: 2, max: 3 }],
+        valid: ["abc", "de", "\uff47"],
+        invalid: ["", "a", "abcd", "\uff47\uff4d"],
+      });
+      test({
+        validator: "isByteLength",
+        args: [{ max: 3 }],
+        valid: ["abc", "de", "\uff47", "a", ""],
+        invalid: ["abcd", "\uff47\uff4d"],
+      });
+      test({
+        validator: "isByteLength",
+        args: [{ max: 0 }],
+        valid: [""],
+        invalid: ["\uff47", "a"],
+      });
+    });
+
+    it("should validate ULIDs", () => {
+      test({
+        validator: "isULID",
+        valid: [
+          "01HBGW8CWQ5Q6DTT7XP89VV4KT",
+          "01HBGW8CWR8MZQMBG6FA2QHMDD",
+          "01HBGW8CWS3MEEK12Y9G7SVW4V",
+          "01hbgw8cws1tq2njavy9amb0wx",
+          "01HBGW8cwS43H4jkQ0A4ZRJ7QV",
+        ],
+        invalid: [
+          "",
+          "01HBGW-CWS3MEEK1#Y9G7SVW4V",
+          "91HBGW8CWS3MEEK12Y9G7SVW4V",
+          "81HBGW8CWS3MEEK12Y9G7SVW4V",
+          "934859",
+          "01HBGW8CWS3MEEK12Y9G7SVW4VXXX",
+          "01UBGW8IWS3MOEK12Y9G7SVW4V",
+          "01HBGW8CuS43H4JKQ0A4ZRJ7QV",
+        ],
+      });
+    });
+
+    it("should validate UUIDs", () => {
+      test({
+        validator: "isUUID",
+        valid: [
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "934859",
+          "987FBC9-4BED-3078-CF07A-9141BA07C9F3",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [undefined],
+        valid: [
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A117FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+        invalid: [
+          "",
+          "A117FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "A11AAAAA-1111-1111-AAAG-111111111111",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [null],
+        valid: [
+          "A127FBC9-4BED-3078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A127FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A127FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "912859",
+          "A12AAAAA-1111-1111-AAAG-111111111111",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [1],
+        valid: ["E034B584-7D89-11E9-9669-1AECF481A97B"],
+        invalid: [
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "AAAAAAAA-1111-2222-AAAG",
+          "AAAAAAAA-1111-2222-AAAG-111111111111",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [2],
+        valid: ["A987FBC9-4BED-2078-AF07-9141BA07C9F3"],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "11111",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "A987FBC9-4BED-2078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [3],
+        valid: ["9deb20fe-a6e0-355c-81ea-288b009e4f6d"],
+        invalid: [
+          "",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "934859",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [4],
+        valid: [
+          "713ae7e3-cb32-45f9-adcb-7c4fa86b90c1",
+          "625e63f3-58f5-40b7-83a1-a72ad31acffb",
+          "57b73598-8764-4ad0-a76a-679bb6640eb1",
+          "9c858901-8a57-4791-81fe-4c455b099bc9",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "934859",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [5],
+        valid: [
+          "987FBC97-4BED-5078-AF07-9141BA07C9F3",
+          "987FBC97-4BED-5078-BF07-9141BA07C9F3",
+          "987FBC97-4BED-5078-8F07-9141BA07C9F3",
+          "987FBC97-4BED-5078-9F07-9141BA07C9F3",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "934859",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "9c858901-8a57-4791-81fe-4c455b099bc9",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [6],
+        valid: ["1ef29908-cde1-69d0-be16-bfc8518a95f0"],
+        invalid: [
+          "987FBC97-4BED-1078-AF07-9141BA07C9F3",
+          "987FBC97-4BED-2078-AF07-9141BA07C9F3",
+          "987FBC97-4BED-3078-AF07-9141BA07C9F3",
+          "987FBC97-4BED-4078-AF07-9141BA07C9F3",
+          "987FBC97-4BED-5078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "987FBC97-4BED-8078-AF07-9141BA07C9F3",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [7],
+        valid: ["018C544A-D384-7000-BB74-3B1738ABE43C"],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "934859",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+          "713ae7e3-cb32-45f9-adcb-7c4fa86b90c1",
+          "625e63f3-58f5-40b7-83a1-a72ad31acffb",
+          "57b73598-8764-4ad0-a76a-679bb6640eb1",
+          "9c858901-8a57-4791-81fe-4c455b099bc9",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [8],
+        valid: ["018C544A-D384-8000-BB74-3B1738ABE43C"],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "934859",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-7078-AF07-9141BA07C9F3",
+          "713ae7e3-cb32-45f9-adcb-7c4fa86b90c1",
+          "625e63f3-58f5-40b7-83a1-a72ad31acffb",
+          "57b73598-8764-4ad0-a76a-679bb6640eb1",
+          "9c858901-8a57-4791-81fe-4c455b099bc9",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: ["nil"],
+        valid: ["00000000-0000-0000-0000-000000000000"],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "934859",
+          "987FBC9-4BED-3078-CF07A-9141BA07C9F3",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+          "ffffffff-ffff-ffff-ffff-ffffffffffff",
+          "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: ["max"],
+        valid: [
+          "ffffffff-ffff-ffff-ffff-ffffffffffff",
+          "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "934859",
+          "987FBC9-4BED-3078-CF07A-9141BA07C9F3",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+          "00000000-0000-0000-0000-000000000000",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: ["loose"],
+        valid: [
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+          "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
+          "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA",
+          "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee",
+          "EEEEEEEE-EEEE-EEEE-EEEE-EEEEEEEEEEEE",
+          "99999999-9999-9999-9999-999999999999",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "987FBC9-4BED-3078-CF07A-9141BA07C9F3",
+          "934859",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: ["all"],
+        valid: [
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+          "00000000-0000-0000-0000-000000000000",
+          "ffffffff-ffff-ffff-ffff-ffffffffffff",
+          "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "934859",
+          "987FBC9-4BED-3078-CF07A-9141BA07C9F3",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: ["invalid"],
+        valid: [],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "934859",
+          "987FBC9-4BED-3078-CF07A-9141BA07C9F3",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+          "00000000-0000-0000-0000-000000000000",
+          "ffffffff-ffff-ffff-ffff-ffffffffffff",
+          "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF",
+        ],
+      });
+    });
+
+    it("should validate a string that is in another string or array", () => {
+      test({
+        validator: "isIn",
+        args: ["foobar"],
+        valid: ["foo", "bar", "foobar", ""],
+        invalid: ["foobarbaz", "barfoo"],
+      });
+      test({
+        validator: "isIn",
+        args: [["foo", "bar"]],
+        valid: ["foo", "bar"],
+        invalid: ["foobar", "barfoo", ""],
+      });
+      test({
+        validator: "isIn",
+        args: [["1", "2", "3"]],
+        valid: ["1", "2", "3"],
+        invalid: ["4", ""],
+      });
+      test({
+        validator: "isIn",
+        args: [["1", "2", "3", { foo: "bar" }, () => 5, { toString: "test" }]],
+        valid: ["1", "2", "3", ""],
+        invalid: ["4"],
+      });
+      test({ validator: "isIn", invalid: ["foo", ""] });
+    });
+
+    it("should validate a string that is in another object", () => {
+      test({
+        validator: "isIn",
+        args: [{ foo: 1, bar: 2, foobar: 3 }],
+        valid: ["foo", "bar", "foobar"],
+        invalid: ["foobarbaz", "barfoo", ""],
+      });
+      test({
+        validator: "isIn",
+        args: [{ 1: 3, 2: 0, 3: 1 }],
+        valid: ["1", "2", "3"],
+        invalid: ["4", ""],
+      });
+    });
+
+    it("should validate ABA routing number", () => {
+      test({
+        validator: "isAbaRouting",
+        valid: ["322070381", "011103093", "263170175", "124303065"],
+        invalid: [
+          "426317017",
+          "789456124",
+          "603558459",
+          "qwerty",
+          "12430306",
+          "382070381",
+        ],
+      });
+    });
+
+    it("should validate IBAN", () => {
+      test({
+        validator: "isIBAN",
+        valid: [
+          "SC52BAHL01031234567890123456USD",
+          "LC14BOSL123456789012345678901234",
+          "MT31MALT01100000000000000000123",
+          "SV43ACAT00000000000000123123",
+          "EG800002000156789012345180002",
+          "BE71 0961 2345 6769",
+          "FR76 3000 6000 0112 3456 7890 189",
+          "DE91 1000 0000 0123 4567 89",
+          "GR96 0810 0010 0000 0123 4567 890",
+          "RO09 BCYP 0000 0012 3456 7890",
+          "SA44 2000 0001 2345 6789 1234",
+          "ES79 2100 0813 6101 2345 6789",
+          "CH56 0483 5012 3456 7800 9",
+          "GB98 MIDL 0700 9312 3456 78",
+          "IL170108000000012612345",
+          "IT60X0542811101000000123456",
+          "JO71CBJO0000000000001234567890",
+          "TR320010009999901234567890",
+          "BR1500000000000010932840814P2",
+          "LB92000700000000123123456123",
+          "IR200170000000339545727003",
+          "MZ97123412341234123412341",
+          "MA64011519000001205000534921",
+          "VG96VPVG0000012345678901",
+          "DZ580002100001113000000570",
+          "IE29AIBK93115212345678",
+          "PS92PALS000000000400123456702",
+          "PS92PALS00000000040012345670O",
+        ],
+        invalid: [
+          "XX22YYY1234567890123",
+          "FR14 2004 1010 0505 0001 3",
+          "FR7630006000011234567890189@",
+          "FR7630006000011234567890189\ud83d\ude05",
+          "FR763000600001123456!!\ud83e\udd287890189@",
+          "VG46H07Y0223060094359858",
+          "IE95TE8270900834048660",
+          "PS072435171802145240705922007",
+        ],
+      });
+      test({
+        validator: "isIBAN",
+        args: [{ whitelist: ["DK", "GB"] }],
+        valid: ["DK5000400440116243", "GB29NWBK60161331926819"],
+        invalid: [
+          "BE71 0961 2345 6769",
+          "FR76 3000 6000 0112 3456 7890 189",
+          "DE91 1000 0000 0123 4567 89",
+          "GR96 0810 0010 0000 0123 4567 890",
+          "RO09 BCYP 0000 0012 3456 7890",
+          "SA44 2000 0001 2345 6789 1234",
+          "ES79 2100 0813 6101 2345 6789",
+          "XX22YYY1234567890123",
+          "FR14 2004 1010 0505 0001 3",
+          "FR7630006000011234567890189@",
+          "FR7630006000011234567890189\ud83d\ude05",
+          "FR763000600001123456!!\ud83e\udd287890189@",
+        ],
+      });
+      test({
+        validator: "isIBAN",
+        args: [{ whitelist: ["XX", "AA"] }],
+        invalid: [
+          "DK5000400440116243",
+          "GB29NWBK60161331926819",
+          "BE71 0961 2345 6769",
+          "FR76 3000 6000 0112 3456 7890 189",
+          "DE91 1000 0000 0123 4567 89",
+          "GR96 0810 0010 0000 0123 4567 890",
+          "RO09 BCYP 0000 0012 3456 7890",
+          "SA44 2000 0001 2345 6789 1234",
+          "ES79 2100 0813 6101 2345 6789",
+          "XX22YYY1234567890123",
+          "FR14 2004 1010 0505 0001 3",
+          "FR7630006000011234567890189@",
+          "FR7630006000011234567890189\ud83d\ude05",
+          "FR763000600001123456!!\ud83e\udd287890189@",
+        ],
+      });
+      test({
+        validator: "isIBAN",
+        args: [{ blacklist: ["IT"] }],
+        valid: [
+          "SC52BAHL01031234567890123456USD",
+          "LC14BOSL123456789012345678901234",
+          "MT31MALT01100000000000000000123",
+          "SV43ACAT00000000000000123123",
+          "EG800002000156789012345180002",
+          "BE71 0961 2345 6769",
+          "FR76 3000 6000 0112 3456 7890 189",
+          "DE91 1000 0000 0123 4567 89",
+          "GR96 0810 0010 0000 0123 4567 890",
+          "RO09 BCYP 0000 0012 3456 7890",
+          "SA44 2000 0001 2345 6789 1234",
+          "ES79 2100 0813 6101 2345 6789",
+          "CH56 0483 5012 3456 7800 9",
+          "GB98 MIDL 0700 9312 3456 78",
+          "IL170108000000012612345",
+          "JO71CBJO0000000000001234567890",
+          "TR320010009999901234567890",
+          "BR1500000000000010932840814P2",
+          "LB92000700000000123123456123",
+          "IR200170000000339545727003",
+          "MZ97123412341234123412341",
+        ],
+        invalid: [
+          "XX22YYY1234567890123",
+          "FR14 2004 1010 0505 0001 3",
+          "FR7630006000011234567890189@",
+          "FR7630006000011234567890189\ud83d\ude05",
+          "FR763000600001123456!!\ud83e\udd287890189@",
+          "IT60X0542811101000000123456",
+        ],
+      });
+    });
+
+    it("should validate BIC codes", () => {
+      test({
+        validator: "isBIC",
+        valid: [
+          "SBICKEN1345",
+          "SBICKEN1",
+          "SBICKENY",
+          "SBICKEN1YYP",
+          "SBICXKN1YYP",
+        ],
+        invalid: [
+          "SBIC23NXXX",
+          "S23CKENXXXX",
+          "SBICKENXX",
+          "SBICKENXX9",
+          "SBICKEN13458",
+          "SBICKEN",
+          "SBICXK",
+        ],
+      });
+    });
+
+    it("should validate that integer strings are divisible by a number", () => {
+      test({
+        validator: "isDivisibleBy",
+        args: [2],
+        valid: ["2", "4", "100", "1000"],
+        invalid: ["1", "2.5", "101", "foo", "", "2020-01-06T14:31:00.135Z"],
+      });
+    });
+
+    it("should validate luhn numbers", () => {
+      test({
+        validator: "isLuhnNumber",
+        valid: [
+          "0",
+          "5421",
+          "01234567897",
+          "0123456789012345678906",
+          "0123456789012345678901234567891",
+          "123456789012345678906",
+          "375556917985515",
+          "36050234196908",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4929 7226 5379 7141",
+        ],
+        invalid: [
+          "",
+          "1",
+          "5422",
+          "foo",
+          "prefix6234917882863855",
+          "623491788middle2863855",
+          "6234917882863855suffix",
+        ],
+      });
+    });
+
+    it("should validate credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        valid: [
+          "375556917985515",
+          "36050234196908",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4929 7226 5379 7141",
+          "5398228707871527",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "6765780016990268",
+          "4716989580001715211",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+        invalid: [
+          "foo",
+          "foo",
+          "5398228707871528",
+          "2718760626256571",
+          "2721465526338453",
+          "2220175103860763",
+          "375556917985515999999993",
+          "899999996234917882863855",
+          "prefix6234917882863855",
+          "623491788middle2863855",
+          "6234917882863855suffix",
+          "4716989580001715213",
+        ],
+      });
+    });
+
+    it("should validate credit cards without a proper provider", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "Plorf" }],
+        error: [
+          "foo",
+          // valid cc #
+          "375556917985515",
+          "4716-2210-5188-5662",
+          "375556917985515999999993",
+          "6234917882863855suffix",
+        ],
+      });
+    });
+
+    it("should validate AmEx provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "AmEx" }],
+        valid: ["375556917985515"],
+        invalid: [
+          "foo",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "36050234196908",
+          "375556917985515999999993",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+          "5398228707871527",
+          "6234917882863855suffix",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+      });
+    });
+
+    it("should validate Diners Club provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "DinersClub" }],
+        valid: ["36050234196908"],
+        invalid: [
+          "foo",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "375556917985515",
+          "375556917985515999999993",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+          "5398228707871527",
+          "6234917882863855suffix",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+      });
+    });
+
+    it("should validate Discover provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "Discover" }],
+        valid: ["6011111111111117", "6011000990139424"],
+        invalid: [
+          "foo",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "36050234196908",
+          "375556917985515",
+          "375556917985515999999993",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+          "5398228707871527",
+          "6234917882863855suffix",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+      });
+    });
+
+    it("should validate JCB provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "JCB" }],
+        valid: ["3530111333300000", "3566002020360505"],
+        invalid: [
+          "foo",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "36050234196908",
+          "375556917985515",
+          "375556917985515999999993",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+          "5398228707871527",
+          "6234917882863855suffix",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+      });
+    });
+
+    it("should validate Mastercard provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "Mastercard" }],
+        valid: [
+          "2222155765072228",
+          "2225855203075256",
+          "2718760626256570",
+          "2720428011723762",
+          "5398228707871527",
+        ],
+        invalid: [
+          "foo",
+          "36050234196908",
+          "375556917985515",
+          "375556917985515999999993",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+          "6234917882863855suffix",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+      });
+    });
+
+    it("should validate Union Pay provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "UnionPay" }],
+        valid: [
+          "6226050967750613",
+          "6234917882863855",
+          "6234698580215388",
+          "6246281879460688",
+          "6263892624162870",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+        invalid: [
+          "foo",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "36050234196908",
+          "375556917985515",
+          "375556917985515999999993",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+          "5398228707871527",
+          "6234917882863855suffix",
+        ],
+      });
+    });
+
+    it("should validate Visa provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "Visa" }],
+        valid: [
+          "4716-2210-5188-5662",
+          "4716461583322103",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+        ],
+        invalid: [
+          "foo",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "36050234196908",
+          "375556917985515",
+          "375556917985515999999993",
+          "5398228707871527",
+          "6234917882863855suffix",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+      });
+    });
+
+    it("should validate identity cards", () => {
+      const fixtures = [
+        {
+          locale: "PK",
+          valid: [
+            "45504-4185771-3",
+            "39915-6182971-9",
+            "21143-6182971-2",
+            "34543-2323471-1",
+            "72345-2345678-7",
+            "63456-8765432-8",
+            "55672-1234567-5",
+            "21234-9876543-6",
+          ],
+          invalid: [
+            "08000-1234567-5",
+            "74321-87654321-1",
+            "51234-98765-2",
+            "00000-0000000-0",
+            "88888-88888888-0",
+            "99999-9999999-9",
+            "11111",
+          ],
+        },
+        {
+          locale: "zh-HK",
+          valid: [
+            "OV290326[A]",
+            "Q803337[0]",
+            "Z0977986",
+            "W520128(7)",
+            "A494866[4]",
+            "A494866(4)",
+            "Z867821A",
+            "ag293013(9)",
+            "k348609(5)",
+          ],
+          invalid: [
+            "A1234567890",
+            "98765432",
+            "O962472(9)",
+            "M4578601",
+            "X731324[8]",
+            "C503134(5)",
+            "RH265886(3)",
+          ],
+        },
+        {
+          locale: "LK",
+          valid: [
+            "722222222v",
+            "722222222V",
+            "993151225x",
+            "993151225X",
+            "188888388x",
+            "935632124V",
+            "199931512253",
+            "200023125632",
+          ],
+          invalid: [
+            "023125648V",
+            "023345621v",
+            "021354211X",
+            "055321231x",
+            "02135465462",
+            "199931512253X",
+          ],
+        },
+        {
+          locale: "PL",
+          valid: [
+            "99012229019",
+            "09210215408",
+            "20313034701",
+            "86051575214",
+            "77334586883",
+            "54007481320",
+            "06566860643",
+            "77552478861",
+          ],
+          invalid: [
+            "aa",
+            "5",
+            "195",
+            "",
+            " ",
+            "12345678901",
+            "99212229019",
+            "09210215402",
+            "20313534701",
+            "86241579214",
+          ],
+        },
+        {
+          locale: "ES",
+          valid: [
+            "99999999R",
+            "12345678Z",
+            "01234567L",
+            "01234567l",
+            "X1234567l",
+            "x1234567l",
+            "X1234567L",
+            "Y1234567X",
+            "Z1234567R",
+          ],
+          invalid: [
+            "123456789",
+            "12345678A",
+            "12345 678Z",
+            "12345678-Z",
+            "1234*6789",
+            "1234*678Z",
+            "12345678!",
+            "1234567L",
+            "A1234567L",
+            "X1234567A",
+            "Y1234567B",
+            "Z1234567C",
+          ],
+        },
+        {
+          locale: "FI",
+          valid: [
+            "131052-308T", // People born in 1900s
+            "131052A308T", // People born in 2000s
+            "131052+308T", // People born in 1800s
+            "131052-313Y",
+          ],
+          invalid: ["131052308T", "131052-308T ", "131052-308A"],
+        },
+        {
+          locale: "IN",
+          valid: ["298448863364", "2984 4886 3364"],
+          invalid: [
+            "99999999R",
+            "12345678Z",
+            "01234567L",
+            "01234567l",
+            "X1234567l",
+            "x1234567l",
+            "X1234567L",
+          ],
+        },
+        {
+          locale: "IR",
+          valid: [
+            "0499370899",
+            "0790419904",
+            "0084575948",
+            "0963695398",
+            "0684159414",
+            "0067749828",
+            "0650451252",
+            "1583250689",
+            "4032152314",
+            "0076229645",
+            "4271467685",
+            "0200203241",
+          ],
+          invalid: [
+            "1260293040",
+            "0000000001",
+            "1999999999",
+            "9999999991",
+            "AAAAAAAAAA",
+            "0684159415",
+          ],
+        },
+        {
+          locale: "IT",
+          valid: ["CR43675TM", "CA79382RA"],
+          invalid: ["CA00000AA", "CB2342TG", "CS123456A", "C1236EC"],
+        },
+        {
+          locale: "NO",
+          valid: [
+            "09053426694",
+            "26028338723",
+            "08031470790",
+            "12051539514",
+            "02077448074",
+            "14035638319",
+            "13031379673",
+            "29126214926",
+          ],
+          invalid: ["09053426699", "00000000000", "26028338724", "92031470790"],
+        },
+        {
+          locale: "TH",
+          valid: ["1101230000001", "1101230000060"],
+          invalid: [
+            "abc",
+            "1101230",
+            "11012300000011",
+            "aaaaaaaaaaaaa",
+            "110123abcd001",
+            "1101230000007",
+            "0101123450000",
+            "0101123450004",
+            "9101123450008",
+          ],
+        },
+        {
+          locale: "he-IL",
+          valid: [
+            "219472156",
+            "219486610",
+            "219488962",
+            "219566726",
+            "219640216",
+            "219645041",
+            "334795465",
+            "335211686",
+            "335240479",
+            "335472171",
+            "336999842",
+            "337090443",
+          ],
+          invalid: [
+            "123456789",
+            "12345678A",
+            "12345 678Z",
+            "12345678-Z",
+            "1234*6789",
+            "1234*678Z",
+            "12345678!",
+            "1234567L",
+            "A1234567L",
+            "X1234567A",
+            "Y1234567B",
+            "Z1234567C",
+            "219772156",
+            "219487710",
+            "334705465",
+            "336000842",
+          ],
+        },
+        {
+          locale: "ar-LY",
+          valid: [
+            "119803455876",
+            "120024679875",
+            "219624876201",
+            "220103480657",
+          ],
+          invalid: [
+            "987654320123",
+            "123-456-7890",
+            "012345678912",
+            "1234567890",
+            "AFJBHUYTREWR",
+            "C4V6B1X0M5T6",
+            "9876543210123",
+          ],
+        },
+        {
+          locale: "ar-TN",
+          valid: [
+            "09958092",
+            "09151092",
+            "65126506",
+            "79378815",
+            "58994407",
+            "73089789",
+            "73260311",
+          ],
+          invalid: [
+            "123456789546",
+            "123456789",
+            "023456789",
+            "12345678A",
+            "12345",
+            "1234578A",
+            "123 578A",
+            "12345 678Z",
+            "12345678-Z",
+            "1234*6789",
+            "1234*678Z",
+            "GE9800as98",
+            "X231071922",
+            "1234*678Z",
+            "12345678!",
+          ],
+        },
+        {
+          locale: "zh-CN",
+          valid: [
+            "235407195106112745",
+            "210203197503102721",
+            "520323197806058856",
+            "110101491001001",
+          ],
+          invalid: [
+            "160323197806058856",
+            "010203197503102721",
+            "520323297806058856",
+            "520323197802318856",
+            "235407195106112742",
+            "010101491001001",
+            "110101491041001",
+            "160101491001001",
+            "110101940231001",
+            "xx1234567",
+            "135407195106112742",
+            "123456789546",
+            "123456789",
+            "023456789",
+            "12345678A",
+            "12345",
+            "1234578A",
+            "123 578A",
+            "12345 678Z",
+            "12345678-Z",
+            "1234*6789",
+            "1234*678Z",
+            "GE9800as98",
+            "X231071922",
+            "1234*678Z",
+            "12345678!",
+            "235407207006112742",
+          ],
+        },
+        {
+          locale: "zh-TW",
+          valid: [
+            "B176944193",
+            "K101189797",
+            "F112866121",
+            "A219758834",
+            "A244144802",
+            "A146047171",
+            "Q170219004",
+            "Z277018381",
+            "X231071923",
+          ],
+          invalid: [
+            "123456789",
+            "A185034995",
+            "X431071923",
+            "GE9800as98",
+            "X231071922",
+            "1234*678Z",
+            "12345678!",
+            "1234567L",
+            "A1234567L",
+            "X1234567A",
+            "Y1234567B",
+            "Z1234567C",
+            "219772156",
+            "219487710",
+            "334705465",
+            "336000842",
+          ],
+        },
+      ];
+
+      let allValid = [];
+
+      // Test fixtures
+      fixtures.forEach((fixture) => {
+        if (fixture.valid) allValid = allValid.concat(fixture.valid);
+        test({
+          validator: "isIdentityCard",
+          valid: fixture.valid,
+          invalid: fixture.invalid,
+          args: [fixture.locale],
+        });
+      });
+
+      // Test generics
+      test({
+        validator: "isIdentityCard",
+        valid: [...allValid],
+        invalid: ["foo"],
+        args: ["any"],
+      });
+    });
+
+    it("should error on invalid locale", () => {
+      test({
+        validator: "isIdentityCard",
+        args: ["is-NOT"],
+        error: ["99999999R", "12345678Z"],
+      });
+    });
+
+    it("should validate ISINs", () => {
+      test({
+        validator: "isISIN",
+        valid: [
+          "AU0000XVGZA3",
+          "DE000BAY0017",
+          "BE0003796134",
+          "SG1G55870362",
+          "GB0001411924",
+          "DE000WCH8881",
+          "PLLWBGD00016",
+          "US0378331005",
+        ],
+        invalid: ["DE000BAY0018", "PLLWBGD00019", "foo", "5398228707871528"],
+      });
+    });
+
+    it("should validate EANs", () => {
+      test({
+        validator: "isEAN",
+        valid: [
+          "9421023610112",
+          "1234567890128",
+          "4012345678901",
+          "9771234567003",
+          "9783161484100",
+          "73513537",
+          "00012345600012",
+          "10012345678902",
+          "20012345678909",
+        ],
+        invalid: ["5901234123451", "079777681629", "0705632085948"],
+      });
+    });
+
+    it("should validate ISSNs", () => {
+      test({
+        validator: "isISSN",
+        valid: [
+          "0378-5955",
+          "0000-0000",
+          "2434-561X",
+          "2434-561x",
+          "01896016",
+          "20905076",
+        ],
+        invalid: [
+          "0378-5954",
+          "0000-0001",
+          "0378-123",
+          "037-1234",
+          "0",
+          "2434-561c",
+          "1684-5370",
+          "19960791",
+          "",
+        ],
+      });
+      test({
+        validator: "isISSN",
+        args: [{ case_sensitive: true }],
+        valid: ["2434-561X", "2434561X", "0378-5955", "03785955"],
+        invalid: ["2434-561x", "2434561x"],
+      });
+      test({
+        validator: "isISSN",
+        args: [{ require_hyphen: true }],
+        valid: ["2434-561X", "2434-561x", "0378-5955"],
+        invalid: ["2434561X", "2434561x", "03785955"],
+      });
+      test({
+        validator: "isISSN",
+        args: [{ case_sensitive: true, require_hyphen: true }],
+        valid: ["2434-561X", "0378-5955"],
+        invalid: ["2434-561x", "2434561X", "2434561x", "03785955"],
+      });
+    });
+
+    it("should validate JSON", () => {
+      test({
+        validator: "isJSON",
+        valid: ['{ "key": "value" }', "{}"],
+        invalid: [
+          '{ key: "value" }',
+          "{ 'key': 'value' }",
+          "null",
+          "1234",
+          '"nope"',
+        ],
+      });
+    });
+
+    it("should validate JSON with primitives", () => {
+      test({
+        validator: "isJSON",
+        args: [{ allow_primitives: true }],
+        valid: ['{ "key": "value" }', "{}", "null", "false", "true"],
+        invalid: [
+          '{ key: "value" }',
+          "{ 'key': 'value' }",
+          '{ "key": value }',
+          "1234",
+          '"nope"',
+        ],
+      });
+    });
+
+    it("should validate multibyte strings", () => {
+      test({
+        validator: "isMultibyte",
+        valid: [
+          "\u3072\u3089\u304c\u306a\u30fb\u30ab\u30bf\u30ab\u30ca\u3001\uff0e\u6f22\u5b57",
+          "\u3042\u3044\u3046\u3048\u304a foobar",
+          "test\uff20example.com",
+          "1234abcDE\uff58\uff59\uff5a",
+          "\uff76\uff80\uff76\uff85",
+          "\u4e2d\u6587",
+        ],
+        invalid: ["abc", "abc123", '<>@" *.'],
+      });
+    });
+
+    it("should validate ascii strings", () => {
+      test({
+        validator: "isAscii",
+        valid: ["foobar", "0987654321", "[email protected]", "1234abcDEF"],
+        invalid: ["\uff46\uff4f\uff4fbar", "\uff58\uff59\uff5a\uff10\uff19\uff18", "\uff11\uff12\uff13456", "\uff76\uff80\uff76\uff85"],
+      });
+    });
+
+    it("should validate full-width strings", () => {
+      test({
+        validator: "isFullWidth",
+        valid: [
+          "\u3072\u3089\u304c\u306a\u30fb\u30ab\u30bf\u30ab\u30ca\u3001\uff0e\u6f22\u5b57",
+          "\uff13\u30fc\uff10\u3000\uff41\uff20\uff43\uff4f\uff4d",
+          "\uff26\uff76\uff80\uff76\uff85\uff9e\uffac",
+          "Good\uff1dParts",
+        ],
+        invalid: ["abc", "abc123", '!"#$%&()<>/+=-_? ~^|.,@`{}[]'],
+      });
+    });
+
+    it("should validate half-width strings", () => {
+      test({
+        validator: "isHalfWidth",
+        valid: [
+          '!"#$%&()<>/+=-_? ~^|.,@`{}[]',
+          "l-btn_02--active",
+          "abc123\u3044",
+          "\uff76\uff80\uff76\uff85\uff9e\uffac\uffe9",
+        ],
+        invalid: ["\u3042\u3044\u3046\u3048\u304a", "\uff10\uff10\uff11\uff11"],
+      });
+    });
+
+    it("should validate variable-width strings", () => {
+      test({
+        validator: "isVariableWidth",
+        valid: [
+          "\u3072\u3089\u304c\u306a\u30ab\u30bf\u30ab\u30ca\u6f22\u5b57ABCDE",
+          "\uff13\u30fc\uff10123",
+          "\uff26\uff76\uff80\uff76\uff85\uff9e\uffac",
+          "Good\uff1dParts",
+        ],
+        invalid: [
+          "abc",
+          "abc123",
+          '!"#$%&()<>/+=-_? ~^|.,@`{}[]',
+          "\u3072\u3089\u304c\u306a\u30fb\u30ab\u30bf\u30ab\u30ca\u3001\uff0e\u6f22\u5b57",
+          "\uff11\uff12\uff13\uff14\uff15\uff16",
+          "\uff76\uff80\uff76\uff85\uff9e\uffac",
+        ],
+      });
+    });
+
+    it("should validate surrogate pair strings", () => {
+      test({
+        validator: "isSurrogatePair",
+        valid: ["\ud842\udfb7\u91ce\ud842\udfb7", "\ud867\ude3d", "ABC\u5343\ud856\uddc41-2-3"],
+        invalid: ["\u5409\u91ce\u7ac8", "\u9baa", "ABC1-2-3"],
+      });
+    });
+
+    it("should validate Semantic Versioning Specification (SemVer) strings", () => {
+      test({
+        validator: "isSemVer",
+        valid: [
+          "0.0.4",
+          "1.2.3",
+          "10.20.30",
+          "1.1.2-prerelease+meta",
+          "1.1.2+meta",
+          "1.1.2+meta-valid",
+          "1.0.0-alpha",
+          "1.0.0-beta",
+          "1.0.0-alpha.beta",
+          "1.0.0-alpha.beta.1",
+          "1.0.0-alpha.1",
+          "1.0.0-alpha0.valid",
+          "1.0.0-alpha.0valid",
+          "1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay",
+          "1.0.0-rc.1+build.1",
+          "2.0.0-rc.1+build.123",
+          "1.2.3-beta",
+          "10.2.3-DEV-SNAPSHOT",
+          "1.2.3-SNAPSHOT-123",
+          "1.0.0",
+          "2.0.0",
+          "1.1.7",
+          "2.0.0+build.1848",
+          "2.0.1-alpha.1227",
+          "1.0.0-alpha+beta",
+          "1.2.3----RC-SNAPSHOT.12.9.1--.12+788",
+          "1.2.3----R-S.12.9.1--.12+meta",
+          "1.2.3----RC-SNAPSHOT.12.9.1--.12",
+          "1.0.0+0.build.1-rc.10000aaa-kk-0.1",
+          "99999999999999999999999.999999999999999999.99999999999999999",
+          "1.0.0-0A.is.legal",
+        ],
+        invalid: [
+          "-invalid+invalid",
+          "-invalid.01",
+          "alpha",
+          "alpha.beta",
+          "alpha.beta.1",
+          "alpha.1",
+          "alpha+beta",
+          "alpha_beta",
+          "alpha.",
+          "alpha..",
+          "beta",
+          "1.0.0-alpha_beta",
+          "-alpha.",
+          "1.0.0-alpha..",
+          "1.0.0-alpha..1",
+          "1.0.0-alpha...1",
+          "1.0.0-alpha....1",
+          "1.0.0-alpha.....1",
+          "1.0.0-alpha......1",
+          "1.0.0-alpha.......1",
+          "01.1.1",
+          "1.01.1",
+          "1.1.01",
+          "1.2",
+          "1.2.3.DEV",
+          "1.2-SNAPSHOT",
+          "1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788",
+          "1.2-RC-SNAPSHOT",
+          "-1.0.3-gamma+b7718",
+          "+justmeta",
+          "9.8.7+meta+meta",
+          "9.8.7-whatever+meta+meta",
+          "99999999999999999999999.999999999999999999.99999999999999999-",
+          "---RC-SNAPSHOT.12.09.1--------------------------------..12",
+        ],
+      });
+    });
+
+    it("should validate base32 strings", () => {
+      test({
+        validator: "isBase32",
+        valid: [
+          "ZG======",
+          "JBSQ====",
+          "JBSWY===",
+          "JBSWY3A=",
+          "JBSWY3DP",
+          "JBSWY3DPEA======",
+          "K5SWYY3PNVSSA5DPEBXG6ZA=",
+          "K5SWYY3PNVSSA5DPEBXG6===",
+        ],
+        invalid: [
+          "12345",
+          "",
+          "JBSWY3DPtesting123",
+          "ZG=====",
+          "Z======",
+          "Zm=8JBSWY3DP",
+          "=m9vYg==",
+          "Zm9vYm/y====",
+        ],
+      });
+    });
+
+    it("should validate base32 strings with crockford alternative", () => {
+      test({
+        validator: "isBase32",
+        args: [{ crockford: true }],
+        valid: ["91JPRV3F41BPYWKCCGGG", "60", "64", "B5QQA833C5Q20S3F41MQ8"],
+        invalid: [
+          "91JPRV3F41BUPYWKCCGGG",
+          "B5QQA833C5Q20S3F41MQ8L",
+          "60I",
+          "B5QQA833OULIC5Q20S3F41MQ8",
+        ],
+      });
+    });
+
+    it("should validate base58 strings", () => {
+      test({
+        validator: "isBase58",
+        valid: [
+          "BukQL",
+          "3KMUV89zab",
+          "91GHkLMNtyo98",
+          "YyjKm3H",
+          "Mkhss145TRFg",
+          "7678765677",
+          "abcodpq",
+          "AAVHJKLPY",
+        ],
+        invalid: [
+          "0OPLJH",
+          "IMKLP23",
+          "KLMOmk986",
+          "LL1l1985hG",
+          "*MP9K",
+          "Zm=8JBSWY3DP",
+          ")()(=9292929MKL",
+        ],
+      });
+    });
+
+    it("should validate hex-encoded MongoDB ObjectId", () => {
+      test({
+        validator: "isMongoId",
+        valid: ["507f1f77bcf86cd799439011"],
+        invalid: [
+          "507f1f77bcf86cd7994390",
+          "507f1f77bcf86cd79943901z",
+          "",
+          "507f1f77bcf86cd799439011 ",
+        ],
+      });
+    });
+
+    it("should validate mobile phone number", () => {
+      let fixtures = [
+        {
+          locale: "am-AM",
+          valid: [
+            "+37433123456",
+            "+37441123456",
+            "+37443123456",
+            "+37444123456",
+            "+37455123456",
+            "+37477123456",
+            "+37488123456",
+            "+37491123456",
+            "+37493123456",
+            "+37494123456",
+            "+37495123456",
+            "+37496123456",
+            "+37498123456",
+            "+37499123456",
+            "055123456",
+            "37455123456",
+          ],
+          invalid: [
+            "12345",
+            "+37403498855",
+            "+37416498123",
+            "05614988556",
+            "",
+            "37456789000",
+            "37486789000",
+            "+37431312345",
+            "+37430312345",
+            "+37460123456",
+            "+37410324123",
+            "+37422298765",
+            "+37431276521",
+            "022698763",
+            "+37492123456",
+          ],
+        },
+        {
+          locale: "ar-AE",
+          valid: [
+            "+971502674453",
+            "+971521247658",
+            "+971541255684",
+            "+971555454458",
+            "+971561498855",
+            "+971585215778",
+            "971585215778",
+            "0585215778",
+            "585215778",
+          ],
+          invalid: [
+            "12345",
+            "+971511498855",
+            "+9715614988556",
+            "+9745614988556",
+            "",
+            "+9639626626262",
+            "+963332210972",
+            "0114152198",
+            "962796477263",
+          ],
+        },
+        {
+          locale: "ar-BH",
+          valid: [
+            "+97335078110",
+            "+97339534385",
+            "+97366331055",
+            "+97333146000",
+            "97335078110",
+            "35078110",
+            "66331055",
+          ],
+          invalid: [
+            "12345",
+            "+973350781101",
+            "+97379534385",
+            "+973035078110",
+            "",
+            "+9639626626262",
+            "+963332210972",
+            "0114152198",
+            "962796477263",
+            "035078110",
+            "16331055",
+            "hello",
+            "+9733507811a",
+          ],
+        },
+        {
+          locale: "ar-EG",
+          valid: [
+            "+201004513789",
+            "+201111453489",
+            "+201221204610",
+            "+201144621154",
+            "+201200124304",
+            "+201011201564",
+            "+201124679001",
+            "+201064790156",
+            "+201274652177",
+            "+201280134679",
+            "+201090124576",
+            "+201583728900",
+            "201599495596",
+            "201090124576",
+            "01090124576",
+            "01538920744",
+            "1593075993",
+            "1090124576",
+          ],
+          invalid: [
+            "+221004513789",
+            "+201404513789",
+            "12345",
+            "",
+            "+9639626626262",
+            "+963332210972",
+            "0114152198",
+            "962796477263",
+          ],
+        },
+        {
+          locale: "ar-JO",
+          valid: [
+            "0796477263",
+            "0777866254",
+            "0786725261",
+            "+962796477263",
+            "+962777866254",
+            "+962786725261",
+            "962796477263",
+            "962777866254",
+            "962786725261",
+          ],
+          invalid: [
+            "00962786725261",
+            "00962796477263",
+            "12345",
+            "",
+            "+9639626626262",
+            "+963332210972",
+            "0114152198",
+          ],
+        },
+        {
+          locale: "ar-KW",
+          valid: [
+            "96550000000",
+            "96560000000",
+            "96590000000",
+            "96541000000",
+            "+96550000000",
+            "+96550000220",
+            "+96551111220",
+            "+96541000000",
+          ],
+          invalid: [
+            "+96570000220",
+            "00962786725261",
+            "00962796477263",
+            "12345",
+            "",
+            "+9639626626262",
+            "+963332210972",
+            "0114152198",
+            "+96540000000",
+          ],
+        },
+        {
+          locale: "ar-LB",
+          valid: [
+            "+96171234568",
+            "+9613123456",
+            "3456123",
+            "3123456",
+            "81978468",
+            "77675798",
+          ],
+          invalid: [
+            "+961712345688888",
+            "00912220000",
+            "7767579888",
+            "+0921110000",
+            "+3123456888",
+            "021222200000",
+            "213333444444",
+            "",
+            "+212234",
+            "+21",
+            "02122333",
+          ],
+        },
+        {
+          locale: "ar-LY",
+          valid: [
+            "912220000",
+            "0923330000",
+            "218945550000",
+            "+218958880000",
+            "212220000",
+            "0212220000",
+            "+218212220000",
+          ],
+          invalid: [
+            "9122220000",
+            "00912220000",
+            "09211110000",
+            "+0921110000",
+            "+2180921110000",
+            "021222200000",
+            "213333444444",
+            "",
+            "+212234",
+            "+21",
+            "02122333",
+          ],
+        },
+        {
+          locale: "ar-MA",
+          valid: [
+            "0522714782",
+            "0690851123",
+            "0708186135",
+            "+212522714782",
+            "+212690851123",
+            "+212708186135",
+            "00212522714782",
+            "00212690851123",
+            "00212708186135",
+          ],
+          invalid: [
+            "522714782",
+            "690851123",
+            "708186135",
+            "212522714782",
+            "212690851123",
+            "212708186135",
+            "0212522714782",
+            "0212690851123",
+            "0212708186135",
+            "",
+            "12345",
+            "0922714782",
+            "+212190851123",
+            "00212408186135",
+          ],
+        },
+        {
+          locale: "dz-BT",
+          valid: [
+            "+97517374354",
+            "+97517454971",
+            "77324646",
+            "016329712",
+            "97517265559",
+          ],
+          invalid: ["", "9898347255", "+96326626262", "963372", "0114152198"],
+        },
+        {
+          locale: "ar-OM",
+          valid: [
+            "+96891212121",
+            "+96871212121",
+            "0096899999999",
+            "93112211",
+            "99099009",
+          ],
+          invalid: [
+            "+96890212121",
+            "0096890999999",
+            "0090999999",
+            "+9689021212",
+            "",
+            "+212234",
+            "+21",
+            "02122333",
+          ],
+        },
+        {
+          locale: "ar-PS",
+          valid: ["+970563459876", "970592334218", "0566372345", "0598273583"],
+          invalid: [
+            "+9759029487",
+            "97059123456789",
+            "598372348",
+            "97058aaaafjd",
+            "",
+            "05609123484",
+            "+97059",
+            "+970",
+            "97056",
+          ],
+        },
+        {
+          locale: "ar-SY",
+          valid: [
+            "0944549710",
+            "+963944549710",
+            "956654379",
+            "0944549710",
+            "0962655597",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "+9639626626262",
+            "+963332210972",
+            "0114152198",
+          ],
+        },
+        {
+          locale: "ar-SA",
+          valid: [
+            "0556578654",
+            "+966556578654",
+            "966556578654",
+            "596578654",
+            "572655597",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "+9665626626262",
+            "+96633221097",
+            "0114152198",
+          ],
+        },
+        {
+          locale: "ar-SD",
+          valid: ["0128652312", "+249919425113", "249123212345", "0993212345"],
+          invalid: [
+            "12345",
+            "",
+            "+249972662622",
+            "+24946266262",
+            "+24933221097",
+            "0614152198",
+            "096554",
+          ],
+        },
+        {
+          locale: "ar-TN",
+          valid: ["23456789", "+21623456789", "21623456789"],
+          invalid: [
+            "12345",
+            "75200123",
+            "+216512345678",
+            "13520459",
+            "85479520",
+          ],
+        },
+        {
+          locale: "bg-BG",
+          valid: ["+359897123456", "+359898888888", "0897123123"],
+          invalid: [
+            "",
+            "0898123",
+            "+359212555666",
+            "18001234567",
+            "12125559999",
+          ],
+        },
+        {
+          locale: "bn-BD",
+          valid: [
+            "+8801794626846",
+            "01399098893",
+            "8801671163269",
+            "01717112029",
+            "8801898765432",
+            "+8801312345678",
+            "01494676946",
+          ],
+          invalid: [
+            "",
+            "0174626346",
+            "017943563469",
+            "18001234567",
+            "0131234567",
+          ],
+        },
+        {
+          locale: "bs-BA",
+          valid: [
+            "060123456",
+            "061123456",
+            "062123456",
+            "063123456",
+            "0641234567",
+            "065123456",
+            "066123456",
+            "+38760123456",
+            "+38761123456",
+            "+38762123456",
+            "+38763123456",
+            "+387641234567",
+            "+38765123456",
+            "+38766123456",
+            "0038760123456",
+            "0038761123456",
+            "0038762123456",
+            "0038763123456",
+            "00387641234567",
+            "0038765123456",
+            "0038766123456",
+          ],
+          invalid: [
+            "0601234567",
+            "0611234567",
+            "06212345",
+            "06312345",
+            "064123456",
+            "0651234567",
+            "06612345",
+            "+3866123456",
+            "+3856123456",
+            "00038760123456",
+            "038761123456",
+          ],
+        },
+        {
+          locale: "cs-CZ",
+          valid: [
+            "+420 123 456 789",
+            "+420 123456789",
+            "+420123456789",
+            "123 456 789",
+            "123456789",
+          ],
+          invalid: [
+            "",
+            "+42012345678",
+            "+421 123 456 789",
+            "+420 023456789",
+            "+4201234567892",
+          ],
+        },
+        {
+          locale: "sk-SK",
+          valid: [
+            "+421 123 456 789",
+            "+421 123456789",
+            "+421123456789",
+            "123 456 789",
+            "123456789",
+          ],
+          invalid: [
+            "",
+            "+42112345678",
+            "+422 123 456 789",
+            "+421 023456789",
+            "+4211234567892",
+          ],
+        },
+        {
+          locale: "de-DE",
+          valid: [
+            "+4915123456789",
+            "015123456789",
+            "015123456789",
+            "015623456789",
+            "015623456789",
+            "01601234567",
+            "016012345678",
+            "01621234567",
+            "01631234567",
+            "01701234567",
+            "017612345678",
+          ],
+          invalid: [
+            "+4930405044550",
+            "34412345678",
+            "14412345678",
+            "16212345678",
+            "1761234567",
+            "16412345678",
+            "17012345678",
+            "+4912345678910",
+            "+49015123456789",
+            "015345678910",
+            "015412345678",
+          ],
+        },
+        {
+          locale: "de-AT",
+          valid: [
+            "+436761234567",
+            "06761234567",
+            "00436123456789",
+            "+436123456789",
+            "01999",
+            "+4372876",
+            "06434908989562345",
+          ],
+          invalid: ["167612345678", "1234", "064349089895623459"],
+        },
+        {
+          locale: "hu-HU",
+          valid: ["06301234567", "+36201234567", "06701234567"],
+          invalid: ["1234", "06211234567", "+3620123456"],
+        },
+        {
+          locale: "mz-MZ",
+          valid: [
+            "+258849229754",
+            "258849229754",
+            "849229754",
+            "829229754",
+            "839229754",
+            "869229754",
+            "859229754",
+            "869229754",
+            "879229754",
+            "+258829229754",
+            "+258839229754",
+            "+258869229754",
+            "+258859229754",
+            "+258869229754",
+            "+258879229754",
+            "258829229754",
+            "258839229754",
+            "258869229754",
+            "258859229754",
+            "258869229754",
+            "258879229754",
+          ],
+          invalid: [
+            "+248849229754",
+            "158849229754",
+            "249229754",
+            "819229754",
+            "899229754",
+            "889229754",
+            "89229754",
+            "8619229754",
+            "87922975411",
+            "257829229754",
+            "+255839229754",
+            "+2258869229754",
+            "+1258859229754",
+            "+2588692297541",
+            "+2588792519754",
+            "25882922975411",
+          ],
+        },
+        {
+          locale: "pt-BR",
+          valid: [
+            "+55 12 996551215",
+            "+55 15 97661234",
+            "+55 (12) 996551215",
+            "+55 (15) 97661234",
+            "55 (17) 96332-2155",
+            "55 (17) 6332-2155",
+            "55 15 976612345",
+            "55 15 75661234",
+            "+5512984567890",
+            "+551283456789",
+            "5512984567890",
+            "551283456789",
+            "015994569878",
+            "01593456987",
+            "022995678947",
+            "02299567894",
+            "(22)99567894",
+            "(22)9956-7894",
+            "(22) 99567894",
+            "(22) 9956-7894",
+            "(22)999567894",
+            "(22)99956-7894",
+            "(22) 999567894",
+            "(22) 99956-7894",
+            "(11) 94123-4567",
+            "(11) 91431-4567",
+            "+55 (11) 91431-4567",
+            "+55 11 91431-4567",
+            "+551191431-4567",
+            "5511914314567",
+            "5511912345678",
+          ],
+          invalid: [
+            "0819876543",
+            "+55 15 7566123",
+            "+017 123456789",
+            "5501599623874",
+            "+55012962308",
+            "+55 015 1234-3214",
+            "+55 11 90431-4567",
+            "+55 (11) 90431-4567",
+            "+551190431-4567",
+            "5511904314567",
+            "5511902345678",
+            "(11) 90431-4567",
+          ],
+        },
+        {
+          locale: "zh-CN",
+          valid: [
+            "13523333233",
+            "13838389438",
+            "14899230918",
+            "14999230918",
+            "15323456787",
+            "15052052020",
+            "16237108167",
+            "008616238234822",
+            "+8616238234822",
+            "16565600001",
+            "17269427292",
+            "17469427292",
+            "18199617480",
+            "19151751717",
+            "19651751717",
+            "+8613238234822",
+            "+8613487234567",
+            "+8617823492338",
+            "+8617823492338",
+            "+8616637108167",
+            "+8616637108167",
+            "+8616712341234",
+            "+8619912341234",
+            "+8619812341234",
+            "+8619712341234",
+            "+8619612341234",
+            "+8619512341234",
+            "+8619312341234",
+            "+8619212341234",
+            "+8619112341234",
+            "+8617269427292",
+            "008618812341234",
+            "008618812341234",
+            "008617269427292",
+            // Reserve number segments in the future.
+            "92138389438",
+            "+8692138389438",
+            "008692138389438",
+            "98199649964",
+            "+8698099649964",
+            "008698099649964",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "12038389438",
+            "12838389438",
+            "013838389438",
+            "+86-13838389438",
+            "+08613811211114",
+            "+008613811211114",
+            "08613811211114",
+            "0086-13811211114",
+            "0086-138-1121-1114",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "010-38238383",
+          ],
+        },
+        {
+          locale: "zh-TW",
+          valid: [
+            "0987123456",
+            "+886987123456",
+            "886987123456",
+            "+886-987123456",
+            "886-987123456",
+          ],
+          invalid: ["12345", "", "Vml2YW11cyBmZXJtZtesting123", "0-987123456"],
+        },
+        {
+          locale: "en-LS",
+          valid: [
+            "+26622123456",
+            "+26628123456",
+            "+26657123456",
+            "+26658123456",
+            "+26659123456",
+            "+26627123456",
+            "+26652123456",
+          ],
+          invalid: [
+            "+26612345678",
+            "",
+            "2664512-21",
+            "+2662212345678",
+            "someString",
+          ],
+        },
+        {
+          locale: "en-BM",
+          valid: ["+14417974653", "14413986653", "4415370973", "+14415005489"],
+          invalid: [
+            "85763287",
+            "+14412020436",
+            "+14412236546",
+            "+14418245567",
+            "+14416546789",
+            "44087635627",
+            "+4418970973",
+            "",
+            "+1441897465",
+            "+1441897465 additional invalid string part",
+          ],
+        },
+        {
+          locale: "en-BS",
+          valid: [
+            "+12421231234",
+            "2421231234",
+            "+1-2421231234",
+            "+1-242-123-1234",
+            "(242)-123-1234",
+            "+1 (242)-123-1234",
+            "242 123-1234",
+            "(242) 123 1234",
+          ],
+          invalid: [
+            "85763287",
+            "+1 242 12 12 12 12",
+            "+1424123123",
+            "+14418245567",
+            "+14416546789",
+            "not a number",
+            "",
+          ],
+        },
+        {
+          locale: "en-ZA",
+          valid: ["0821231234", "+27821231234", "27821231234"],
+          invalid: [
+            "082123",
+            "08212312345",
+            "21821231234",
+            "+21821231234",
+            "+0821231234",
+          ],
+        },
+        {
+          locale: "en-AU",
+          valid: ["61404111222", "+61411222333", "0417123456"],
+          invalid: [
+            "082123",
+            "08212312345",
+            "21821231234",
+            "+21821231234",
+            "+0821231234",
+            "04123456789",
+          ],
+        },
+        {
+          locale: "es-BO",
+          valid: [
+            "+59175553635",
+            "+59162223685",
+            "+59179783890",
+            "+59160081890",
+            "79783890",
+            "60081890",
+          ],
+          invalid: [
+            "082123",
+            "08212312345",
+            "21821231234",
+            "+21821231234",
+            "+59199783890",
+          ],
+        },
+        {
+          locale: "en-GG",
+          valid: [
+            "+441481123456",
+            "+441481789123",
+            "441481123456",
+            "441481789123",
+          ],
+          invalid: ["999", "+441481123456789", "+447123456789"],
+        },
+        {
+          locale: "en-GH",
+          valid: [
+            "0202345671",
+            "0502345671",
+            "0242345671",
+            "0542345671",
+            "0532345671",
+            "0272345671",
+            "0572345671",
+            "0262345671",
+            "0562345671",
+            "0232345671",
+            "0282345671",
+            "+233202345671",
+            "+233502345671",
+            "+233242345671",
+            "+233542345671",
+            "+233532345671",
+            "+233272345671",
+            "+233572345671",
+            "+233262345671",
+            "+233562345671",
+            "+233232345671",
+            "+233282345671",
+            "+233592349493",
+            "0550298219",
+          ],
+          invalid: ["082123", "232345671", "0292345671", "+233292345671"],
+        },
+        {
+          locale: "en-GY",
+          valid: ["+5926121234", "06121234", "06726381", "+5926726381"],
+          invalid: [
+            "5926121234",
+            "6121234",
+            "+592 6121234",
+            "05926121234",
+            "+592-6121234",
+          ],
+        },
+        {
+          locale: "en-HK",
+          valid: [
+            "91234567",
+            "9123-4567",
+            "61234567",
+            "51234567",
+            "+85291234567",
+            "+852-91234567",
+            "+852-9123-4567",
+            "+852 9123 4567",
+            "9123 4567",
+            "852-91234567",
+          ],
+          invalid: ["999", "+852-912345678", "123456789", "+852-1234-56789"],
+        },
+        {
+          locale: "en-MO",
+          valid: [
+            "61234567",
+            "+85361234567",
+            "+853-61234567",
+            "+853-6123-4567",
+            "+853 6123 4567",
+            "6123 4567",
+            "853-61234567",
+          ],
+          invalid: [
+            "999",
+            "12345678",
+            "612345678",
+            "+853-12345678",
+            "+853-22345678",
+            "+853-82345678",
+            "+853-612345678",
+            "+853-1234-5678",
+            "+853 1234 5678",
+            "+853-6123-45678",
+          ],
+        },
+        {
+          locale: "en-IE",
+          valid: [
+            "+353871234567",
+            "353831234567",
+            "353851234567",
+            "353861234567",
+            "353871234567",
+            "353881234567",
+            "353891234567",
+            "0871234567",
+            "0851234567",
+          ],
+          invalid: [
+            "999",
+            "+353341234567",
+            "+33589484858",
+            "353841234567",
+            "353811234567",
+          ],
+        },
+        {
+          locale: "en-JM",
+          valid: ["+8761021234", "8761211234", "8763511274", "+8764511274"],
+          invalid: [
+            "999",
+            "+876102123422",
+            "+8861021234",
+            "8761021212213",
+            "876102123",
+          ],
+        },
+        {
+          locale: "en-KE",
+          valid: [
+            "+254728590432",
+            "+254733875610",
+            "254728590234",
+            "0733346543",
+            "0700459022",
+            "0110934567",
+            "+254110456794",
+            "254198452389",
+          ],
+          invalid: ["999", "+25489032", "123456789", "+254800723845"],
+        },
+        {
+          locale: "fr-CF",
+          valid: [
+            "+23670850000",
+            "+23675038756",
+            "+23677859002",
+            "+23672854202",
+            "+23621854052",
+            "+23622854072",
+            "72234650",
+            "70045902",
+            "77934567",
+            "21456794",
+            "22452389",
+          ],
+          invalid: [
+            "+23689032",
+            "123456789",
+            "+236723845987",
+            "022452389",
+            "+236772345678",
+            "+236700456794",
+          ],
+        },
+        {
+          locale: "en-KI",
+          valid: ["+68673140000", "68673059999", "+68663000000", "68663019999"],
+          invalid: [
+            "+68653000000",
+            "68664019999",
+            "+68619019999",
+            "686123456789",
+            "+686733445",
+          ],
+        },
+        {
+          locale: "en-MT",
+          valid: ["+35699000000", "+35679000000", "99000000"],
+          invalid: ["356", "+35699000", "+35610000000"],
+        },
+        {
+          locale: "en-PH",
+          valid: [
+            "+639275149120",
+            "+639275142327",
+            "+639003002023",
+            "09275149116",
+            "09194877624",
+          ],
+          invalid: [
+            "12112-13-345",
+            "12345678901",
+            "sx23YW11cyBmZxxXJt123123",
+            "010-38238383",
+            "966684123123-2590",
+          ],
+        },
+        {
+          locale: "en-UG",
+          valid: [
+            "+256728590432",
+            "+256733875610",
+            "256728590234",
+            "0773346543",
+            "0700459022",
+          ],
+          invalid: [
+            "999",
+            "+254728590432",
+            "+25489032",
+            "123456789",
+            "+254800723845",
+          ],
+        },
+        {
+          locale: "en-RW",
+          valid: [
+            "+250728590432",
+            "+250733875610",
+            "250738590234",
+            "0753346543",
+            "0780459022",
+          ],
+          invalid: [
+            "999",
+            "+254728590432",
+            "+25089032",
+            "123456789",
+            "+250800723845",
+          ],
+        },
+        {
+          locale: "en-TZ",
+          valid: [
+            "+255728590432",
+            "+255733875610",
+            "255628590234",
+            "0673346543",
+            "0600459022",
+          ],
+          invalid: [
+            "999",
+            "+254728590432",
+            "+25589032",
+            "123456789",
+            "+255800723845",
+          ],
+        },
+        {
+          locale: "en-MW",
+          valid: [
+            "+265994563785",
+            "+265111785436",
+            "+265318596857",
+            "0320008744",
+            "01256258",
+            "0882541896",
+            "+265984563214",
+          ],
+          invalid: [
+            "58563",
+            "+2658256258",
+            "0896328741",
+            "0708574896",
+            "+26570857489635",
+          ],
+        },
+        {
+          locale: "es-PE",
+          valid: [
+            "+51912232764",
+            "+51923464567",
+            "+51968267382",
+            "+51908792973",
+            "974980472",
+            "908792973",
+            "+51974980472",
+          ],
+          invalid: [
+            "999",
+            "+51812232764",
+            "+5181223276499",
+            "+25589032",
+            "123456789",
+          ],
+        },
+        {
+          locale: "fr-FR",
+          valid: [
+            "0612457898",
+            "+33612457898",
+            "33612457898",
+            "0712457898",
+            "+33712457898",
+            "33712457898",
+          ],
+          invalid: [
+            "061245789",
+            "06124578980",
+            "0112457898",
+            "0212457898",
+            "0312457898",
+            "0412457898",
+            "0512457898",
+            "0812457898",
+            "0912457898",
+            "+34612457898",
+            "+336124578980",
+            "+3361245789",
+          ],
+        },
+        {
+          locale: "fr-BF",
+          valid: [
+            "+22661245789",
+            "+22665903092",
+            "+22672457898",
+            "+22673572346",
+            "061245789",
+            "071245783",
+          ],
+          invalid: [
+            "0612457892",
+            "06124578980",
+            "0112457898",
+            "0212457898",
+            "0312457898",
+            "0412457898",
+            "0512457898",
+            "0812457898",
+            "0912457898",
+            "+22762457898",
+            "+226724578980",
+            "+22634523",
+          ],
+        },
+        {
+          locale: "fr-BJ",
+          valid: [
+            "+22920215789",
+            "+22920293092",
+            "+22921307898",
+            "+22921736346",
+            "+22922416346",
+            "+22923836346",
+          ],
+          invalid: [
+            "0612457892",
+            "01122921737346",
+            "+22762457898",
+            "+226724578980",
+            "+22634523",
+          ],
+        },
+        {
+          locale: "fr-CA",
+          valid: ["19876543210", "8005552222", "+15673628910"],
+          invalid: [
+            "564785",
+            "0123456789",
+            "1437439210",
+            "+10345672645",
+            "11435213543",
+          ],
+        },
+        {
+          locale: "fr-CD",
+          valid: [
+            "+243818590432",
+            "+243893875610",
+            "243978590234",
+            "0813346543",
+            "0820459022",
+            "+243902590221",
+          ],
+          invalid: [
+            "243",
+            "+254818590432",
+            "+24389032",
+            "123456789",
+            "+243700723845",
+          ],
+        },
+        {
+          locale: "fr-GF",
+          valid: [
+            "0612457898",
+            "+594612457898",
+            "594612457898",
+            "0712457898",
+            "+594712457898",
+            "594712457898",
+          ],
+          invalid: [
+            "061245789",
+            "06124578980",
+            "0112457898",
+            "0212457898",
+            "0312457898",
+            "0412457898",
+            "0512457898",
+            "0812457898",
+            "0912457898",
+            "+54612457898",
+            "+5946124578980",
+            "+59461245789",
+          ],
+        },
+        {
+          locale: "fr-GP",
+          valid: [
+            "0612457898",
+            "+590612457898",
+            "590612457898",
+            "0712457898",
+            "+590712457898",
+            "590712457898",
+          ],
+          invalid: [
+            "061245789",
+            "06124578980",
+            "0112457898",
+            "0212457898",
+            "0312457898",
+            "0412457898",
+            "0512457898",
+            "0812457898",
+            "0912457898",
+            "+594612457898",
+            "+5906124578980",
+            "+59061245789",
+          ],
+        },
+        {
+          locale: "fr-MQ",
+          valid: [
+            "0612457898",
+            "+596612457898",
+            "596612457898",
+            "0712457898",
+            "+596712457898",
+            "596712457898",
+          ],
+          invalid: [
+            "061245789",
+            "06124578980",
+            "0112457898",
+            "0212457898",
+            "0312457898",
+            "0412457898",
+            "0512457898",
+            "0812457898",
+            "0912457898",
+            "+594612457898",
+            "+5966124578980",
+            "+59661245789",
+          ],
+        },
+        {
+          locale: "fr-RE",
+          valid: [
+            "0612457898",
+            "+262612457898",
+            "262612457898",
+            "0712457898",
+            "+262712457898",
+            "262712457898",
+          ],
+          invalid: [
+            "061245789",
+            "06124578980",
+            "0112457898",
+            "0212457898",
+            "0312457898",
+            "0412457898",
+            "0512457898",
+            "0812457898",
+            "0912457898",
+            "+264612457898",
+            "+2626124578980",
+            "+26261245789",
+          ],
+        },
+        {
+          locale: "fr-PF",
+          valid: [
+            "87123456",
+            "88123456",
+            "89123456",
+            "+68987123456",
+            "+68988123456",
+            "+68989123456",
+            "68987123456",
+            "68988123456",
+            "68989123456",
+          ],
+          invalid: [
+            "7123456",
+            "86123456",
+            "87 12 34 56",
+            "definitely not a number",
+            "01+68988123456",
+            "6898912345",
+          ],
+        },
+        {
+          locale: "fr-WF",
+          valid: [
+            "+681408500",
+            "+681499387",
+            "+681728590",
+            "+681808542",
+            "+681828540",
+            "+681832014",
+            "408500",
+            "499387",
+            "728590",
+            "808542",
+            "828540",
+            "832014",
+          ],
+          invalid: [
+            "+68189032",
+            "123456789",
+            "+681723845987",
+            "022452389",
+            "+681772345678",
+            "+681700456794",
+          ],
+        },
+        {
+          locale: "ka-GE",
+          valid: [
+            "+995500011111",
+            "+995515352134",
+            "+995798526662",
+            "798526662",
+            "500011119",
+            "798526662",
+            "+995799766525",
+          ],
+          invalid: [
+            "+99550001111",
+            "+9957997665250",
+            "+9959997665251",
+            "+995780011111",
+            "20000000000",
+            "68129485729",
+            "6589394827",
+            "298RI89572",
+          ],
+        },
+        {
+          locale: "el-GR",
+          valid: [
+            "+306944848966",
+            "306944848966",
+            "06904567890",
+            "6944848966",
+            "6904567890",
+            "6914567890",
+            "6934567890",
+            "6944567890",
+            "6954567890",
+            "6974567890",
+            "6984567890",
+            "6994567890",
+            "6854567890",
+            "6864567890",
+            "6874567890",
+            "6884567890",
+            "6894567890",
+          ],
+          invalid: [
+            "2102323234",
+            "+302646041461",
+            "120000000",
+            "20000000000",
+            "68129485729",
+            "6589394827",
+            "298RI89572",
+            "6924567890",
+            "6964567890",
+            "6844567890",
+            "690456789",
+            "00690456789",
+            "not a number",
+          ],
+        },
+        {
+          locale: "el-CY",
+          valid: [
+            "96546247",
+            "96978927",
+            "+35799837145",
+            "+35799646792",
+            "96056927",
+            "99629593",
+            "99849980",
+            "3599701619",
+            "+3599148725",
+            "96537247",
+            "3596676533",
+            "+35795123455",
+            "+35797012204",
+            "35799123456",
+            "+35794123456",
+            "+35796123456",
+          ],
+          invalid: [
+            "",
+            "somechars",
+            "9697892",
+            "998499803",
+            "33799837145",
+            "+3799646792",
+            "93056927",
+          ],
+        },
+        {
+          locale: "en-GB",
+          valid: ["447789345856", "+447861235675", "07888814488"],
+          invalid: [
+            "67699567",
+            "0773894868",
+            "077389f8688",
+            "+07888814488",
+            "0152456999",
+            "442073456754",
+            "+443003434751",
+            "05073456754",
+            "08001123123",
+            "07043425232",
+            "01273884231",
+            "03332654034",
+          ],
+        },
+        {
+          locale: "en-SG",
+          valid: [
+            "32891278",
+            "87654321",
+            "98765432",
+            "+6587654321",
+            "+6598765432",
+            "+6565241234",
+          ],
+          invalid: [
+            "332891231",
+            "987654321",
+            "876543219",
+            "8765432",
+            "9876543",
+            "12345678",
+            "+98765432",
+            "+9876543212",
+            "+15673628910",
+            "19876543210",
+            "8005552222",
+          ],
+        },
+        {
+          locale: "en-US",
+          valid: [
+            "19876543210",
+            "8005552222",
+            "+15673628910",
+            "+1(567)3628910",
+            "+1(567)362-8910",
+            "+1(567) 362-8910",
+            "1(567)362-8910",
+            "1(567)362 8910",
+            "223-456-7890",
+          ],
+          invalid: [
+            "564785",
+            "0123456789",
+            "1437439210",
+            "+10345672645",
+            "11435213543",
+            "1(067)362-8910",
+            "1(167)362-8910",
+            "+2(267)362-8910",
+            "+3365520145",
+          ],
+        },
+        {
+          locale: "en-CA",
+          valid: ["19876543210", "8005552222", "+15673628910"],
+          invalid: [
+            "564785",
+            "0123456789",
+            "1437439210",
+            "+10345672645",
+            "11435213543",
+          ],
+        },
+        {
+          locale: "en-ZM",
+          valid: [
+            "0956684590",
+            "0966684590",
+            "0976684590",
+            "+260956684590",
+            "+260966684590",
+            "+260976684590",
+            "260976684590",
+            "+260779493521",
+            "+260760010936",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "010-38238383",
+            "966684590",
+            "760010936",
+          ],
+        },
+        {
+          locale: ["en-ZW"],
+          valid: [
+            "+263561890123",
+            "+263715558041",
+            "+263775551112",
+            "+263775551695",
+            "+263715556633",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+2631234567890",
+            "+2641234567",
+            "+263981234",
+            "4736338855",
+            "66338855",
+          ],
+        },
+        {
+          locale: ["en-NA"],
+          valid: [
+            "+26466189012",
+            "+26461555804",
+            "+26461434221",
+            "+26487555169",
+            "+26481555663",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+2641234567890",
+            "+2641234567",
+            "+2648143422",
+            "+264981234",
+            "4736338855",
+            "66338855",
+          ],
+        },
+        {
+          locale: "ru-RU",
+          valid: ["+79676338855", "79676338855", "89676338855", "9676338855"],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "010-38238383",
+            "+9676338855",
+            "19676338855",
+            "6676338855",
+            "+99676338855",
+          ],
+        },
+        {
+          locale: "si-LK",
+          valid: [
+            "+94766661206",
+            "94713114340",
+            "0786642116",
+            "078 7642116",
+            "078-7642116",
+            "0749994567",
+          ],
+          invalid: [
+            "9912349956789",
+            "12345",
+            "1678123456",
+            "0731234567",
+            "0797878674",
+          ],
+        },
+        {
+          locale: "sr-RS",
+          valid: [
+            "0640133338",
+            "063333133",
+            "0668888878",
+            "+381645678912",
+            "+381611314000",
+            "0655885010",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "010-38238383",
+            "+9676338855",
+            "19676338855",
+            "6676338855",
+            "+99676338855",
+          ],
+        },
+        {
+          locale: "en-NZ",
+          valid: ["+6427987035", "642240512347", "0293981646", "029968425"],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+642956696123566",
+            "+02119620856",
+            "+9676338855",
+            "19676338855",
+            "6676338855",
+            "+99676338855",
+          ],
+        },
+        {
+          locale: "en-MU",
+          valid: ["+23012341234", "12341234", "012341234"],
+          invalid: [
+            "41234",
+            "",
+            "+230",
+            "+2301",
+            "+23012",
+            "+230123",
+            "+2301234",
+            "+23012341",
+            "+230123412",
+            "+2301234123",
+            "+230123412341",
+            "+2301234123412",
+            "+23012341234123",
+          ],
+        },
+        {
+          locale: ["nb-NO", "nn-NO"], // for multiple locales
+          valid: [
+            "+4796338855",
+            "+4746338855",
+            "4796338855",
+            "4746338855",
+            "46338855",
+            "96338855",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+4676338855",
+            "19676338855",
+            "+4726338855",
+            "4736338855",
+            "66338855",
+          ],
+        },
+        {
+          locale: ["ne-NP"],
+          valid: [
+            "+9779817385479",
+            "+9779717385478",
+            "+9779862002615",
+            "+9779853660020",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+97796123456789",
+            "+9771234567",
+            "+977981234",
+            "4736338855",
+            "66338855",
+          ],
+        },
+        {
+          locale: "vi-VN",
+          valid: [
+            "0336012403",
+            "+84586012403",
+            "84981577798",
+            "0708001240",
+            "84813601243",
+            "0523803765",
+            "0863803732",
+            "0883805866",
+            "0892405867",
+            "+84888696413",
+            "0878123456",
+            "84781234567",
+            "0553803765",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "010-38238383",
+            "260976684590",
+            "01678912345",
+            "+841698765432",
+            "841626543219",
+            "0533803765",
+            "08712345678",
+            "+0321234567",
+          ],
+        },
+        {
+          locale: "es-AR",
+          valid: [
+            "5491143214321",
+            "+5491143214321",
+            "+5492414321432",
+            "5498418432143",
+          ],
+          invalid: [
+            "1143214321",
+            "91143214321",
+            "+91143214321",
+            "549841004321432",
+            "549 11 43214321",
+            "549111543214321",
+            "5714003425432",
+            "549114a214321",
+            "54 9 11 4321-4321",
+          ],
+        },
+        {
+          locale: "es-CO",
+          valid: [
+            "+573003321235",
+            "573003321235",
+            "3003321235",
+            "3213321235",
+            "3103321235",
+            "3243321235",
+            "573011140876",
+          ],
+          invalid: [
+            "1234",
+            "+57443875615",
+            "57309875615",
+            "57109834567",
+            "5792434567",
+            "5702345689",
+            "5714003425432",
+            "5703013347567",
+            "069834567",
+            "969834567",
+            "579871235",
+            "574321235",
+            "5784321235",
+            "5784321235",
+            "9821235",
+            "0698345",
+            "3321235",
+          ],
+        },
+        {
+          locale: "es-CL",
+          valid: ["+56733875615", "56928590234", "0928590294", "0208590294"],
+          invalid: [
+            "1234",
+            "+5633875615",
+            "563875615",
+            "56109834567",
+            "56069834567",
+          ],
+        },
+        {
+          locale: "es-EC",
+          valid: [
+            "+593987654321",
+            "593987654321",
+            "0987654321",
+            "027332615",
+            "+59323456789",
+          ],
+          invalid: [
+            "03321321",
+            "+593387561",
+            "59312345677",
+            "02344635",
+            "593123456789",
+            "081234567",
+            "+593912345678",
+            "+593902345678",
+            "+593287654321",
+            "593287654321",
+          ],
+        },
+        {
+          locale: "es-CR",
+          valid: [
+            "+50688888888",
+            "+50665408090",
+            "+50640895069",
+            "25789563",
+            "85789563",
+          ],
+          invalid: [
+            "+5081",
+            "+5067777777",
+            "+50188888888",
+            "+50e987643254",
+            "+506e4t4",
+            "-50688888888",
+            "50688888888",
+            "12345678",
+            "98765432",
+            "01234567",
+          ],
+        },
+        {
+          locale: "es-CU",
+          valid: ["+5351234567", "005353216547", "51234567", "53214567"],
+          invalid: [
+            "1234",
+            "+5341234567",
+            "0041234567",
+            "41234567",
+            "11234567",
+            "21234567",
+            "31234567",
+            "60303456",
+            "71234567",
+            "81234567",
+            "91234567",
+            "+5343216547",
+            "+5332165498",
+            "+53121234567",
+            "",
+            "abc",
+            "+535123457",
+            "56043029304",
+          ],
+        },
+        {
+          locale: "es-DO",
+          valid: [
+            "+18096622563",
+            "+18295614488",
+            "+18495259567",
+            "8492283478",
+            "8092324576",
+            "8292387713",
+          ],
+          invalid: [
+            "+18091",
+            "+1849777777",
+            "-18296643245",
+            "+18086643245",
+            "+18396643245",
+            "8196643245",
+            "+38492283478",
+            "6492283478",
+            "8192283478",
+          ],
+        },
+        {
+          locale: "es-HN",
+          valid: [
+            "+50495551876",
+            "+50488908787",
+            "+50493456789",
+            "+50489234567",
+            "+50488987896",
+            "+50497567389",
+            "+50427367389",
+            "+50422357389",
+            "+50431257389",
+            "+50430157389",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+34683456543",
+            "65478932",
+            "+50298787654",
+            "+504989874",
+          ],
+        },
+        {
+          locale: "es-ES",
+          valid: [
+            "+34654789321",
+            "654789321",
+            "+34714789321",
+            "714789321",
+            "+34744789321",
+            "744789321",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+3465478932",
+            "65478932",
+            "+346547893210",
+            "6547893210",
+            "+3470478932",
+            "7047893210",
+            "+34854789321",
+            "7547893219",
+          ],
+        },
+        {
+          locale: "es-MX",
+          valid: [
+            "+52019654789321",
+            "+52199654789321",
+            "+5201965478932",
+            "+5219654789321",
+            "52019654789321",
+            "52199654789321",
+            "5201965478932",
+            "5219654789321",
+            "87654789321",
+            "8654789321",
+            "0187654789321",
+            "18654789321",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+3465478932",
+            "65478932",
+            "+346547893210",
+            "+34704789321",
+            "704789321",
+            "+34754789321",
+          ],
+        },
+        {
+          locale: "es-NI",
+          valid: [
+            "+5051234567",
+            "+50512345678",
+            "5051234567",
+            "50512345678",
+            "+50555555555",
+          ],
+          invalid: [
+            "1234",
+            "",
+            "1234567",
+            "12345678",
+            "+12345678",
+            "+505123456789",
+            "+50612345678",
+            "+50712345678",
+            "-50512345678",
+          ],
+        },
+        {
+          locale: "es-PA",
+          valid: ["+5076784565", "+5074321557", "5073331112", "+50723431212"],
+          invalid: [
+            "+50755555",
+            "+207123456",
+            "2001236542",
+            "+507987643254",
+            "+507jjjghtf",
+          ],
+        },
+        {
+          locale: "es-PY",
+          valid: [
+            "+595991372649",
+            "+595992847352",
+            "+595993847593",
+            "+595994857473",
+            "+595995348532",
+            "+595996435231",
+            "+595981847362",
+            "+595982435452",
+            "+595983948502",
+            "+595984342351",
+            "+595985403481",
+            "+595986384012",
+            "+595971435231",
+            "+595972103924",
+            "+595973438542",
+            "+595974425864",
+            "+595975425843",
+            "+595976342546",
+            "+595961435234",
+            "+595963425043",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "65478932",
+            "+59599384712",
+            "+5959938471234",
+            "+595547893218",
+            "+591993546843",
+          ],
+        },
+        {
+          locale: "es-SV",
+          valid: [
+            "62136634",
+            "50361366631",
+            "+50361366634",
+            "+50361367217",
+            "+50361367460",
+            "+50371367632",
+            "+50371367767",
+            "+50371368314",
+          ],
+          invalid: [
+            "+5032136663",
+            "21346663",
+            "+50321366663",
+            "12345",
+            "El salvador",
+            "this should fail",
+            "+5032222",
+            "+503 1111 1111",
+            "00 +503 1234 5678",
+          ],
+        },
+        {
+          locale: "es-UY",
+          valid: ["+59899123456", "099123456", "+59894654321", "091111111"],
+          invalid: [
+            "54321",
+            "montevideo",
+            "",
+            "+598099123456",
+            "090883338",
+            "099 999 999",
+          ],
+        },
+        {
+          locale: "es-VE",
+          valid: ["+582125457765", "+582125458053", "+584125458053"],
+          invalid: ["+585129934395", "+58212993439", ""],
+        },
+        {
+          locale: "et-EE",
+          valid: [
+            "+372 512 34 567",
+            "372 512 34 567",
+            "+37251234567",
+            "51234567",
+            "81234567",
+            "+372842345678",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "NotANumber",
+            "+333 51234567",
+            "61234567",
+            "+51234567",
+            "+372 539 57 4",
+            "+372 900 1234",
+            "12345678",
+          ],
+        },
+        {
+          locale: "pl-PL",
+          valid: [
+            "+48512689767",
+            "+48 56 376 87 47",
+            "56 566 78 46",
+            "657562855",
+            "+48657562855",
+            "+48 887472765",
+            "+48 56 6572724",
+            "+48 67 621 5461",
+            "48 67 621 5461",
+            "+48 45 621 5461",
+          ],
+          invalid: [
+            "+48  67 621 5461",
+            "+55657562855",
+            "3454535",
+            "teststring",
+            "",
+            "1800-88-8687",
+            "+6019-5830837",
+            "357562855",
+            "+48 44 621 5461",
+          ],
+        },
+        {
+          locale: "fa-IR",
+          valid: [
+            "+989123456789",
+            "989223456789",
+            "09323456789",
+            "09021456789",
+            "+98-990-345-6789",
+            "+98 938 345 6789",
+            "0938 345 6789",
+          ],
+          invalid: [
+            "",
+            "+989623456789",
+            "+981123456789",
+            "01234567890",
+            "09423456789",
+            "09823456789",
+            "9123456789",
+            "091234567890",
+            "0912345678",
+            "+98 912 3456 6789",
+            "0912 345 678",
+          ],
+        },
+        {
+          locale: "fi-FI",
+          valid: [
+            "+358505557171",
+            "0455571",
+            "0505557171",
+            "358505557171",
+            "04412345",
+            "0457 123 45 67",
+            "+358457 123 45 67",
+            "+358 50 555 7171",
+            "0501234",
+            "+358501234",
+            "050 1234",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "045557",
+            "045555717112312332423423421",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "010-38238383",
+            "+3-585-0555-7171",
+            "+9676338855",
+            "19676338855",
+            "6676338855",
+            "+99676338855",
+            "044123",
+            "019123456789012345678901",
+          ],
+        },
+        {
+          locale: "fj-FJ",
+          valid: [
+            "+6799898679",
+            "6793788679",
+            "+679 989 8679",
+            "679 989 8679",
+            "679 3456799",
+            "679908 8909",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "04555792",
+            "902w99900030900000000099",
+            "8uiuiuhhyy&GUU88d",
+            "010-38238383",
+            "19676338855",
+            "679 9 89 8679",
+            "6793 45679",
+          ],
+        },
+        {
+          locale: "ms-MY",
+          valid: [
+            "+60128228789",
+            "+60195830837",
+            "+6019-5830837",
+            "+6019-5830837",
+            "+6010-4357675",
+            "+60172012370",
+            "0128737867",
+            "0172012370",
+            "01468987837",
+            "01112347345",
+            "016-2838768",
+            "016 2838768",
+          ],
+          invalid: [
+            "12345",
+            "601238788657",
+            "088387675",
+            "16-2838768",
+            "032551433",
+            "6088-387888",
+            "088-261987",
+            "1800-88-8687",
+            "088-320000",
+            "+01112353576",
+            "+0111419752",
+          ],
+        },
+        {
+          locale: "fr-CM",
+          valid: [
+            "+237677936141",
+            "237623456789",
+            "+237698124842",
+            "237693029202",
+          ],
+          invalid: [
+            "NotANumber",
+            "+(703)-572-2920",
+            "+237 623 45 67 890",
+            "+2379981247429",
+          ],
+        },
+        {
+          locale: "ko-KR",
+          valid: [
+            "+82-010-1234-5678",
+            "+82-10-1234-5678",
+            "82-010-1234-5678",
+            "82-10-1234-5678",
+            "+82 10 1234 5678",
+            "010-123-5678",
+            "10-1234-5678",
+            "+82 10 1234 5678",
+            "011 1234 5678",
+            "+820112345678",
+            "01012345678",
+            "+82 016 1234 5678",
+            "82 19 1234 5678",
+            "+82 010 12345678",
+          ],
+          invalid: [
+            "abcdefghi",
+            "+82 10 1234 567",
+            "+82 10o 1234 1234",
+            "+82 101 1234 5678",
+            "+82 10 12 5678",
+            "+011 7766 1234",
+            "011_7766_1234",
+            "+820 11 7766 1234",
+          ],
+        },
+        {
+          locale: "ky-KG",
+          valid: [
+            "+996553033300",
+            "+996 222 123456",
+            "+996 500 987654",
+            "+996 555 111222",
+            "+996 700 333444",
+            "+996 770 555666",
+            "+996 880 777888",
+            "+996 990 999000",
+            "+996 995 555666",
+            "+996 996 555666",
+            "+996 997 555666",
+            "+996 998 555666",
+          ],
+          invalid: [
+            "+996 201 123456",
+            "+996 312 123456",
+            "+996 3960 12345",
+            "+996 3961 12345",
+            "+996 3962 12345",
+            "+996 3963 12345",
+            "+996 3964 12345",
+            "+996 3965 12345",
+            "+996 3966 12345",
+            "+996 3967 12345",
+            "+996 3968 12345",
+            "+996 511 123456",
+            "+996 522 123456",
+            "+996 561 123456",
+            "+996 571 123456",
+            "+996 624 123456",
+            "+996 623 123456",
+            "+996 622 123456",
+            "+996 609 123456",
+            "+996 100 12345",
+            "+996 100 1234567",
+            "996 100 123456",
+            "0 100 123456",
+            "0 100 123abc",
+          ],
+        },
+        {
+          locale: "ja-JP",
+          valid: [
+            "09012345678",
+            "08012345678",
+            "07012345678",
+            "06012345678",
+            "090 1234 5678",
+            "+8190-1234-5678",
+            "+81 (0)90-1234-5678",
+            "+819012345678",
+            "+81-(0)90-1234-5678",
+            "+81 90 1234 5678",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "045555717112312332423423421",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+3-585-0555-7171",
+            "0 1234 5689",
+            "16 1234 5689",
+            "03_1234_5689",
+            "0312345678",
+            "0721234567",
+            "06 1234 5678",
+            "072 123 4567",
+            "0729 12 3456",
+            "07296 1 2345",
+            "072961 2345",
+            "03-1234-5678",
+            "+81312345678",
+            "+816-1234-5678",
+            "+81 090 1234 5678",
+            "+8109012345678",
+            "+81-090-1234-5678",
+            "90 1234 5678",
+          ],
+        },
+        {
+          locale: "ir-IR",
+          valid: [
+            "09023818688",
+            "09123809999",
+            "+989023818688",
+            "+989103923523",
+          ],
+          invalid: [
+            "19023818688",
+            "323254",
+            "+903232323257",
+            "++3567868",
+            "0902381888832",
+          ],
+        },
+        {
+          locale: "it-IT",
+          valid: [
+            "370 3175423",
+            "333202925",
+            "+39 310 7688449",
+            "+39 3339847632",
+          ],
+          invalid: ["011 7387545", "12345", "+45 345 6782395"],
+        },
+        {
+          locale: "fr-BE",
+          valid: [
+            "0470123456",
+            "+32470123456",
+            "32470123456",
+            "0421234567",
+            "+32421234567",
+            "32421234567",
+          ],
+          invalid: [
+            "12345",
+            "+3212345",
+            "3212345",
+            "04701234567",
+            "+3204701234567",
+            "3204701234567",
+            "0212345678",
+            "+320212345678",
+            "320212345678",
+            "021234567",
+            "+3221234567",
+            "3221234567",
+          ],
+        },
+        {
+          locale: "nl-BE",
+          valid: [
+            "0470123456",
+            "+32470123456",
+            "32470123456",
+            "0421234567",
+            "+32421234567",
+            "32421234567",
+          ],
+          invalid: [
+            "12345",
+            "+3212345",
+            "3212345",
+            "04701234567",
+            "+3204701234567",
+            "3204701234567",
+            "0212345678",
+            "+320212345678",
+            "320212345678",
+            "021234567",
+            "+3221234567",
+            "3221234567",
+          ],
+        },
+        {
+          locale: "nl-NL",
+          valid: [
+            "0670123456",
+            "0612345678",
+            "31612345678",
+            "31670123456",
+            "+31612345678",
+            "+31670123456",
+            "+31(0)612345678",
+            "0031612345678",
+            "0031(0)612345678",
+          ],
+          invalid: [
+            "12345",
+            "+3112345",
+            "3112345",
+            "06701234567",
+            "012345678",
+            "+3104701234567",
+            "3104701234567",
+            "0212345678",
+            "021234567",
+            "+3121234567",
+            "3121234567",
+            "+310212345678",
+            "310212345678",
+          ],
+        },
+        {
+          locale: "nl-AW",
+          valid: [
+            "2975612345",
+            "2976412345",
+            "+2975612345",
+            "+2975912345",
+            "+2976412345",
+            "+2977312345",
+            "+2977412345",
+            "+2979912345",
+          ],
+          invalid: [
+            "12345",
+            "+2972345",
+            "2972345",
+            "06701234567",
+            "012345678",
+            "+2974701234567",
+            "2974701234567",
+            "0297345678",
+            "029734567",
+            "+2971234567",
+            "2971234567",
+            "+297212345678",
+            "297212345678",
+            "number",
+          ],
+        },
+        {
+          locale: "ro-MD",
+          valid: [
+            "+37360375781",
+            "+37361945673",
+            "+37362387563",
+            "+37368447788",
+            "+37369000101",
+            "+37367568910",
+            "+37376758294",
+            "+37378457892",
+            "+37379067436",
+            "37362387563",
+            "37368447788",
+            "37369000101",
+            "37367568910",
+          ],
+          invalid: [
+            "",
+            "+37363373381",
+            "+37364310581",
+            "+37365578199",
+            "+37371088636",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "123456",
+            "740123456",
+            "+40640123456",
+            "+40210123456",
+          ],
+        },
+        {
+          locale: "ro-RO",
+          valid: [
+            "+40740123456",
+            "+40 740123456",
+            "+40740 123 456",
+            "+40740.123.456",
+            "+40740-123-456",
+            "40740123456",
+            "40 740123456",
+            "40740 123 456",
+            "40740.123.456",
+            "40740-123-456",
+            "0740123456",
+            "0740/123456",
+            "0740 123 456",
+            "0740.123.456",
+            "0740-123-456",
+          ],
+          invalid: [
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "123456",
+            "740123456",
+            "+40640123456",
+            "+40210123456",
+            "+0765351689",
+            "+0711419752",
+          ],
+        },
+        {
+          locale: "id-ID",
+          valid: [
+            "0811 778 998",
+            "0811 7785 9983",
+            "0812 7784 9984",
+            "0813 7782 9982",
+            "0821 1234 1234",
+            "0822 1234 1234",
+            "0823 1234 1234",
+            "0852 1234 6764",
+            "0853 1234 6764",
+            "0851 1234 6764",
+            "0814 7782 9982",
+            "0815 7782 9982",
+            "0816 7782 9982",
+            "0855 7782 9982",
+            "0856 7782 9982",
+            "0857 7782 9982",
+            "0858 7782 9982",
+            "0817 7785 9983",
+            "0818 7784 9984",
+            "0819 7782 9982",
+            "0859 1234 1234",
+            "0877 1234 1234",
+            "0878 1234 1234",
+            "0895 7785 9983",
+            "0896 7784 9984",
+            "0897 7782 9982",
+            "0898 1234 1234",
+            "0899 1234 1234",
+            "0881 7785 9983",
+            "0882 7784 9984",
+            "0883 7782 9982",
+            "0884 1234 1234",
+            "0886 1234 1234",
+            "0887 1234 1234",
+            "0888 7785 9983",
+            "0889 7784 9984",
+            "0828 7784 9984",
+            "0838 7784 9984",
+            "0831 7784 9984",
+            "0832 7784 9984",
+            "0833 7784 9984",
+            "089931236181900",
+            "62811 778 998",
+            "62811778998",
+            "628993123618190",
+            "62898 740123456",
+            "62899 7401 2346",
+            "+62811 778 998",
+            "+62811778998",
+            "+62812 9650 3508",
+            "08197231819",
+            "085361008008",
+            "+62811787391",
+          ],
+          invalid: [
+            "0899312361819001",
+            "0217123456",
+            "622178878890",
+            "6221 740123456",
+            "0341 8123456",
+            "0778 89800910",
+            "0741 123456",
+            "+6221740123456",
+            "+65740 123 456",
+            "",
+            "ASDFGJKLmZXJtZtesting123",
+            "123456",
+            "740123456",
+            "+65640123456",
+            "+64210123456",
+          ],
+        },
+        {
+          locale: "lt-LT",
+          valid: ["+37051234567", "851234567"],
+          invalid: [
+            "+65740 123 456",
+            "",
+            "ASDFGJKLmZXJtZtesting123",
+            "123456",
+            "740123456",
+            "+65640123456",
+            "+64210123456",
+          ],
+        },
+        {
+          locale: "uk-UA",
+          valid: [
+            "+380501234567",
+            "+380631234567",
+            "+380661234567",
+            "+380671234567",
+            "+380681234567",
+            "+380731234567",
+            "+380751234567",
+            "+380771234567",
+            "+380911234567",
+            "+380921234567",
+            "+380931234567",
+            "+380941234567",
+            "+380951234567",
+            "+380961234567",
+            "+380971234567",
+            "+380981234567",
+            "+380991234567",
+            "380501234567",
+            "380631234567",
+            "380661234567",
+            "380671234567",
+            "380681234567",
+            "380731234567",
+            "380751234567",
+            "380771234567",
+            "380911234567",
+            "380921234567",
+            "380931234567",
+            "380941234567",
+            "380951234567",
+            "380961234567",
+            "380971234567",
+            "380981234567",
+            "380991234567",
+            "0501234567",
+            "0631234567",
+            "0661234567",
+            "0671234567",
+            "0681234567",
+            "0731234567",
+            "0751234567",
+            "0771234567",
+            "0911234567",
+            "0921234567",
+            "0931234567",
+            "0941234567",
+            "0951234567",
+            "0961234567",
+            "0971234567",
+            "0981234567",
+            "0991234567",
+          ],
+          invalid: [
+            "+30982345679",
+            "+380321234567",
+            "+380441234567",
+            "982345679",
+            "80982345679",
+            "+380 98 234 5679",
+            "+380-98-234-5679",
+            "+380 (98) 234-56-79",
+            "",
+            "ASDFGJKLmZXJtZtesting123",
+            "123456",
+            "740123456",
+          ],
+        },
+        {
+          locale: "uz-UZ",
+          valid: [
+            "+998664835244",
+            "998664835244",
+            "664835244",
+            "+998957124555",
+            "998957124555",
+            "957124555",
+          ],
+          invalid: [
+            "+998644835244",
+            "998644835244",
+            "644835244",
+            "+99664835244",
+            "ASDFGJKLmZXJtZtesting123",
+            "123456789",
+            "870123456",
+            "",
+            "+998",
+            "998",
+          ],
+        },
+        {
+          locale: "da-DK",
+          valid: [
+            "12345678",
+            "12 34 56 78",
+            "45 12345678",
+            "4512345678",
+            "45 12 34 56 78",
+            "+45 12 34 56 78",
+          ],
+          invalid: [
+            "",
+            "+45010203",
+            "ASDFGJKLmZXJtZtesting123",
+            "123456",
+            "12 34 56",
+            "123 123 12",
+          ],
+        },
+        {
+          locale: "sv-SE",
+          valid: [
+            "+46701234567",
+            "46701234567",
+            "0721234567",
+            "073-1234567",
+            "0761-234567",
+            "079-123 45 67",
+          ],
+          invalid: [
+            "12345",
+            "+4670123456",
+            "+46301234567",
+            "+0731234567",
+            "0731234 56",
+            "+7312345678",
+            "",
+          ],
+        },
+        {
+          locale: "fo-FO",
+          valid: [
+            "123456",
+            "12 34 56",
+            "298 123456",
+            "298123456",
+            "298 12 34 56",
+            "+298 12 34 56",
+          ],
+          invalid: [
+            "",
+            "+4501020304",
+            "ASDFGJKLmZXJtZtesting123",
+            "12345678",
+            "12 34 56 78",
+          ],
+        },
+        {
+          locale: "kl-GL",
+          valid: [
+            "123456",
+            "12 34 56",
+            "299 123456",
+            "299123456",
+            "299 12 34 56",
+            "+299 12 34 56",
+          ],
+          invalid: [
+            "",
+            "+4501020304",
+            "ASDFGJKLmZXJtZtesting123",
+            "12345678",
+            "12 34 56 78",
+          ],
+        },
+        {
+          locale: "kk-KZ",
+          valid: ["+77254716212", "77254716212", "87254716212", "7254716212"],
+          invalid: [
+            "12345",
+            "",
+            "ASDFGJKLmZXJtZtesting123",
+            "010-38238383",
+            "+9676338855",
+            "19676338855",
+            "6676338855",
+            "+99676338855",
+          ],
+        },
+        {
+          locale: "be-BY",
+          valid: [
+            "+375241234567",
+            "+375251234567",
+            "+375291234567",
+            "+375331234567",
+            "+375441234567",
+            "375331234567",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "ASDFGJKLmZXJtZtesting123",
+            "010-38238383",
+            "+9676338855",
+            "19676338855",
+            "6676338855",
+            "+99676338855",
+          ],
+        },
+        {
+          locale: "th-TH",
+          valid: ["0912345678", "+66912345678", "66912345678"],
+          invalid: ["99123456789", "12345", "67812345623", "081234567891"],
+        },
+        {
+          locale: "tk-TM",
+          valid: [
+            "+99312495154",
+            "99312130136",
+            "+99312918407",
+            "99312183399",
+            "812391717",
+          ],
+          invalid: ["12345", "+99412495154", "99412495154", "998900066506"],
+        },
+        {
+          locale: "en-SL",
+          valid: ["+23274560591", "23274560591", "074560591"],
+          invalid: [
+            "0745605912",
+            "12345",
+            "232745605917",
+            "0797878674",
+            "23274560591 ",
+          ],
+        },
+        {
+          locale: "en-BW",
+          valid: [
+            "+26772868545",
+            "+26776368790",
+            "+26774560512",
+            "26774560591",
+            "26778560512",
+            "74560512",
+            "76710284",
+          ],
+          invalid: [
+            "0799375902",
+            "12345",
+            "+2670745605448",
+            "2670745605482",
+            "+26779685451",
+            "+26770685451",
+            "267074560",
+            "2670ab5608",
+            "+267074560",
+            "70560512",
+            "79710284",
+          ],
+        },
+        {
+          locale: "az-AZ",
+          valid: [
+            "+994707007070",
+            "0707007070",
+            "+994502111111",
+            "0505436743",
+            "0554328772",
+            "0104328772",
+            "0993301022",
+            "+994776007139",
+            "+994106007139",
+          ],
+          invalid: [
+            "wrong-number",
+            "",
+            "994707007070",
+            "++9945005050",
+            "556007070",
+            "1234566",
+            "+994778008080a",
+          ],
+        },
+        {
+          locale: "de-LU",
+          valid: ["601123456", "+352601123456"],
+          invalid: [
+            "NaN",
+            "791234",
+            "+352791234",
+            "26791234",
+            "+35226791234",
+            "+112039812",
+            "+352703123456",
+            "1234",
+          ],
+        },
+        {
+          locale: "it-SM",
+          valid: [
+            "612345",
+            "05496123456",
+            "+37861234567",
+            "+390549612345678",
+            "+37805496123456789",
+          ],
+          invalid: [
+            "61234567890",
+            "6123",
+            "1234567",
+            "+49123456",
+            "NotANumber",
+          ],
+        },
+        {
+          locale: "so-SO",
+          valid: [
+            "+252601234567",
+            "+252650101010",
+            "+252794567120",
+            "252650647388",
+            "252751234567",
+            "0601234567",
+            "0609876543",
+          ],
+          invalid: [
+            "",
+            "not a number",
+            "+2526012345678",
+            "25260123456",
+            "+252705555555",
+            "+0601234567",
+            "06945454545",
+          ],
+        },
+        {
+          locale: "sq-AL",
+          valid: [
+            "0621234567",
+            "0661234567",
+            "0671234567",
+            "0681234567",
+            "0691234567",
+            "+355621234567",
+            "+355651234567",
+            "+355661234567",
+            "+355671234567",
+            "+355681234567",
+            "+355691234567",
+          ],
+          invalid: [
+            "67123456",
+            "06712345",
+            "067123456",
+            "06712345678",
+            "0571234567",
+            "+3556712345",
+            "+35565123456",
+            "+35157123456",
+            "NotANumber",
+          ],
+        },
+        {
+          locale: "ca-AD",
+          valid: ["+376312345", "312345"],
+          invalid: ["31234", "31234567", "512345", "NotANumber"],
+        },
+        {
+          locale: "pt-AO",
+          valid: ["+244911123432", "911123432", "244911123432"],
+          invalid: [
+            "+2449111234321",
+            "+244811123432",
+            "31234",
+            "31234567",
+            "512345",
+            "NotANumber",
+          ],
+        },
+        {
+          locale: "lv-LV",
+          valid: ["+37121234567", "37121234567"],
+          invalid: [
+            "+37201234567",
+            "+3754321",
+            "3712123456",
+            "+371212345678",
+            "NotANumber",
+          ],
+        },
+        {
+          locale: "mg-MG",
+          valid: [
+            "+261204269174",
+            "261204269174",
+            "0204269174",
+            "0209269174",
+            "0374269174",
+            "4269174",
+          ],
+          invalid: [
+            "0261204269174",
+            "+261 20 4 269174",
+            "+261 20 4269174",
+            "020 4269174",
+            "204269174",
+            "0404269174",
+            "NotANumber",
+          ],
+        },
+        {
+          locale: "mn-MN",
+          valid: [
+            "+97699112222",
+            "97696112222",
+            "97695112222",
+            "01197691112222",
+            "0097688112222",
+            "+97677112222",
+            "+97694112222",
+            "+97681112222",
+          ],
+          invalid: [
+            "+97888112222",
+            "+97977112222",
+            "+97094112222",
+            "+97281112222",
+            "02297681112222",
+          ],
+        },
+        {
+          locale: "my-MM",
+          valid: [
+            "+959750202595",
+            "09750202595",
+            "9750202595",
+            "+959260000966",
+            "09256000323",
+            "09276000323",
+            "09426000323",
+            "09456000323",
+            "09761234567",
+            "09791234567",
+            "09961234567",
+            "09771234567",
+            "09660000234",
+          ],
+          invalid: [
+            "59750202595",
+            "+9597502025",
+            "08943234524",
+            "09950000966",
+            "959240000966",
+            "09246000323",
+            "09466000323",
+            "09951234567",
+            "09801234567",
+            "09650000234",
+          ],
+        },
+        {
+          locale: "en-PG",
+          valid: [
+            "+67570123456",
+            "67570123456",
+            "+67571123456",
+            "+67572123456",
+            "+67573123456",
+            "+67574123456",
+            "+67575123456",
+            "+67576123456",
+            "+67577123456",
+            "+67578123456",
+            "+67579123456",
+            "+67581123456",
+            "+67588123456",
+          ],
+          invalid: [
+            "",
+            "not a number",
+            "12345",
+            "+675123456789",
+            "+67580123456",
+            "+67569123456",
+            "+67582123456",
+            "+6757012345",
+          ],
+        },
+        {
+          locale: "en-AG",
+          valid: [
+            "12687151234",
+            "+12687151234",
+            "+12684641234",
+            "12684641234",
+            "+12687211234",
+            "+12687302468",
+            "+12687642456",
+            "+12687763333",
+          ],
+          invalid: [
+            "2687151234",
+            "+12687773333",
+            "+126846412333",
+            "+12684641",
+            "+12687123456",
+            "+12687633456",
+          ],
+        },
+        {
+          locale: "en-AI",
+          valid: [
+            "+12642351234",
+            "12642351234",
+            "+12644612222",
+            "+12645366326",
+            "+12645376326",
+            "+12647246326",
+            "+12647726326",
+          ],
+          invalid: [
+            "",
+            "not a number",
+            "+22642351234",
+            "+12902351234",
+            "+12642331234",
+            "+1264235",
+            "22642353456",
+            "+12352643456",
+          ],
+        },
+        {
+          locale: "en-KN",
+          valid: [
+            "+18694699040",
+            "18694699040",
+            "+18697652917",
+            "18697652917",
+            "18694658472",
+            "+18696622969",
+            "+18694882224",
+          ],
+          invalid: [
+            "",
+            "+18694238545",
+            "+1 8694882224",
+            "8694658472",
+            "+186946990",
+            "+1869469904",
+            "1869469904",
+          ],
+        },
+        {
+          locale: "en-PK",
+          valid: [
+            "+923412877421",
+            "+923001234567",
+            "00923001234567",
+            "923001234567",
+            "03001234567",
+          ],
+          invalid: [
+            "+3001234567",
+            "+933001234567",
+            "+924001234567",
+            "+92300123456720",
+            "030012345672",
+            "30012345673",
+            "0030012345673",
+            "3001234567",
+          ],
+        },
+        {
+          locale: ["tg-TJ"],
+          valid: [
+            "+992553388551",
+            "+992553322551",
+            "992553388551",
+            "992553322551",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+995563388559",
+            "+9955633559",
+            "19676338855",
+            "+992263388505",
+            "9923633885",
+            "99255363885",
+            "66338855",
+          ],
+        },
+        {
+          locale: "dv-MV",
+          valid: [
+            "+9609112345",
+            "+9609958973",
+            "+9607258963",
+            "+9607958463",
+            "9609112345",
+            "9609958973",
+            "9607212963",
+            "9607986963",
+            "9112345",
+            "9958973",
+            "7258963",
+            "7958963",
+          ],
+          invalid: [
+            "+96059234567",
+            "+96045789",
+            "7812463784",
+            "NotANumber",
+            "+9607112345",
+            "+9609012345",
+            "+609012345",
+            "+96071123456",
+            "3412345",
+            "9603412345",
+          ],
+        },
+        {
+          locale: "ar-YE",
+          valid: ["737198225", "733111355", "+967700990270"],
+          invalid: [
+            "+5032136663",
+            "21346663",
+            "+50321366663",
+            "12345",
+            "Yemen",
+            "this should fail",
+            "+5032222",
+            "+503 1111 1111",
+            "00 +503 1234 5678",
+          ],
+        },
+        {
+          locale: "ar-EH",
+          valid: [
+            "+212-5288-12312",
+            "+212-5288 12312",
+            "+212 5288 12312",
+            "212528912312",
+            "+212528912312",
+            "+212528812312",
+          ],
+          invalid: [
+            "212528812312123",
+            "+212-5290-12312",
+            "++212528812312",
+            "12345",
+            "Wester Sahara",
+            "this should fail",
+            "212  5288---12312",
+            "+503 1111 1111",
+            "00 +503 1234 5678",
+          ],
+        },
+        {
+          locale: "fa-AF",
+          valid: ["0511231231", "+93511231231", "+93281234567"],
+          invalid: [
+            "212528812312123",
+            "+212-5290-12312",
+            "++212528812312",
+            "12345",
+            "Afghanistan",
+            "this should fail",
+            "212  5288---12312",
+            "+503 1111 1111",
+            "00 +503 1234 5678",
+          ],
+        },
+        {
+          locale: "en-SS",
+          valid: [
+            "+211928530422",
+            "+211913384561",
+            "+211972879174",
+            "+211952379334",
+            "0923346543",
+            "0950459022",
+            "0970934567",
+            "211979841238",
+            "211929843238",
+            "211959840238",
+          ],
+          invalid: [
+            "911",
+            "+211999",
+            "123456789909",
+            "South Sudan",
+            "21195 840 238",
+            "+211981234567",
+            "+211931234567",
+            "+211901234567",
+            "+211991234567",
+          ],
+        },
+        {
+          locale: "es-GT",
+          valid: [
+            "+50221234567",
+            "+50277654321",
+            "50226753421",
+            "50272332468",
+            "50278984455",
+            "+50273472492",
+            "71234567",
+            "21132398",
+          ],
+          invalid: [
+            "44",
+            "+5022712345678",
+            "1234567899",
+            "502712345678",
+            "This should fail",
+            "5021931234567",
+            "+50281234567",
+          ],
+        },
+        {
+          locale: "mk-MK",
+          valid: [
+            "+38923234567",
+            "38931234567",
+            "022123456",
+            "22234567",
+            "71234567",
+            "31234567",
+            "+38923091500",
+            "80091234",
+            "81123456",
+            "54123456",
+          ],
+          invalid: [
+            "38912345678",
+            "+389123456789",
+            "21234567",
+            "123456789",
+            "+3891234567",
+            "700012345",
+            "510123456",
+            "This should fail",
+            "+389123456",
+            "389123456",
+            "80912345",
+          ],
+        },
+      ];
+
+      let allValid = [];
+
+      fixtures.forEach((fixture) => {
+        // to be used later on for validating 'any' locale
+        if (fixture.valid) allValid = allValid.concat(fixture.valid);
+
+        if (Array.isArray(fixture.locale)) {
+          test({
+            validator: "isMobilePhone",
+            valid: fixture.valid,
+            invalid: fixture.invalid,
+            args: [fixture.locale],
+          });
+        } else {
+          test({
+            validator: "isMobilePhone",
+            valid: fixture.valid,
+            invalid: fixture.invalid,
+            args: [fixture.locale],
+          });
+        }
+      });
+
+      test({
+        validator: "isMobilePhone",
+        valid: allValid.slice(0, 20),
+        invalid: [
+          "",
+          "asdf",
+          "1",
+          "ASDFGJKLmZXJtZtesting123",
+          "Vml2YW11cyBmZXJtZtesting123",
+        ],
+        args: ["any"],
+      });
+
+      // strict mode
+      test({
+        validator: "isMobilePhone",
+        valid: ["+254728530234", "+299 12 34 56", "+94766660206"],
+        invalid: [
+          "254728530234",
+          "0728530234",
+          "+728530234",
+          "766667206",
+          "0766670206",
+        ],
+        args: ["any", { strictMode: true }],
+      });
+
+      // falsey locale defaults to 'any'
+      test({
+        validator: "isMobilePhone",
+        valid: allValid.slice(0, 20),
+        invalid: [
+          "",
+          "asdf",
+          "1",
+          "ASDFGJKLmZXJtZtesting123",
+          "Vml2YW11cyBmZXJtZtesting123",
+        ],
+        args: [],
+      });
+    });
+
+    // de-CH, fr-CH, it-CH
+    test({
+      validator: "isMobilePhone",
+      valid: [
+        "+41751112233",
+        "+41761112233",
+        "+41771112233",
+        "+41781112233",
+        "+41791112233",
+        "+411122112211",
+      ],
+      invalid: ["+41041112233"],
+      args: [],
+    });
+
+    it("should error on invalid locale", () => {
+      test({
+        validator: "isMobilePhone",
+        args: [{ locale: ["is-NOT"] }],
+        error: ["+123456789", "012345"],
+      });
+    });
+
+    it("should validate currency", () => {
+      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)
+      test({
+        validator: "isCurrency",
+        valid: [
+          "-$10,123.45",
+          "$10,123.45",
+          "$10123.45",
+          "10,123.45",
+          "10123.45",
+          "10,123",
+          "1,123,456",
+          "1123456",
+          "1.39",
+          ".03",
+          "0.10",
+          "$0.10",
+          "-$0.01",
+          "-$.99",
+          "$100,234,567.89",
+          "$10,123",
+          "10,123",
+          "-10123",
+        ],
+        invalid: [
+          "1.234",
+          "$1.1",
+          "$ 32.50",
+          "500$",
+          ".0001",
+          "$.001",
+          "$0.001",
+          "12,34.56",
+          "123456,123,123456",
+          "123,4",
+          ",123",
+          "$-,123",
+          "$",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "- $",
+        ],
+      });
+
+      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            allow_decimal: false,
+          },
+        ],
+        valid: [
+          "-$10,123",
+          "$10,123",
+          "$10123",
+          "10,123",
+          "10123",
+          "10,123",
+          "1,123,456",
+          "1123456",
+          "1",
+          "0",
+          "$0",
+          "-$0",
+          "$100,234,567",
+          "$10,123",
+          "10,123",
+          "-10123",
+        ],
+        invalid: [
+          "-$10,123.45",
+          "$10,123.45",
+          "$10123.45",
+          "10,123.45",
+          "10123.45",
+          "1.39",
+          ".03",
+          "0.10",
+          "$0.10",
+          "-$0.01",
+          "-$.99",
+          "$100,234,567.89",
+          "1.234",
+          "$1.1",
+          "$ 32.50",
+          ".0001",
+          "$.001",
+          "$0.001",
+          "12,34.56",
+          "123,4",
+          ",123",
+          "$-,123",
+          "$",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "- $",
+        ],
+      });
+
+      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            require_decimal: true,
+          },
+        ],
+        valid: [
+          "-$10,123.45",
+          "$10,123.45",
+          "$10123.45",
+          "10,123.45",
+          "10123.45",
+          "10,123.00",
+          "1.39",
+          ".03",
+          "0.10",
+          "$0.10",
+          "-$0.01",
+          "-$.99",
+          "$100,234,567.89",
+        ],
+        invalid: [
+          "$10,123",
+          "10,123",
+          "-10123",
+          "1,123,456",
+          "1123456",
+          "1.234",
+          "$1.1",
+          "$ 32.50",
+          "500$",
+          ".0001",
+          "$.001",
+          "$0.001",
+          "12,34.56",
+          "123456,123,123456",
+          "123,4",
+          ",123",
+          "$-,123",
+          "$",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "- $",
+        ],
+      });
+
+      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            digits_after_decimal: [1, 3],
+          },
+        ],
+        valid: [
+          "-$10,123.4",
+          "$10,123.454",
+          "$10123.452",
+          "10,123.453",
+          "10123.450",
+          "10,123",
+          "1,123,456",
+          "1123456",
+          "1.3",
+          ".030",
+          "0.100",
+          "$0.1",
+          "-$0.0",
+          "-$.9",
+          "$100,234,567.893",
+          "$10,123",
+          "10,123.123",
+          "-10123.1",
+        ],
+        invalid: [
+          "1.23",
+          "$1.13322",
+          "$ 32.50",
+          "500$",
+          ".0001",
+          "$.01",
+          "$0.01",
+          "12,34.56",
+          "123456,123,123456",
+          "123,4",
+          ",123",
+          "$-,123",
+          "$",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "- $",
+        ],
+      });
+
+      // -$##,###.## with $ required (en-US, en-CA, en-AU, en-NZ, en-HK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            require_symbol: true,
+          },
+        ],
+        valid: [
+          "-$10,123.45",
+          "$10,123.45",
+          "$10123.45",
+          "$10,123.45",
+          "$10,123",
+          "$1,123,456",
+          "$1123456",
+          "$1.39",
+          "$.03",
+          "$0.10",
+          "$0.10",
+          "-$0.01",
+          "-$.99",
+          "$100,234,567.89",
+          "$10,123",
+          "-$10123",
+        ],
+        invalid: [
+          "1.234",
+          "$1.234",
+          "1.1",
+          "$1.1",
+          "$ 32.50",
+          " 32.50",
+          "500",
+          "10,123,456",
+          ".0001",
+          "$.001",
+          "$0.001",
+          "1,234.56",
+          "123456,123,123456",
+          "$123456,123,123456",
+          "123.4",
+          "$123.4",
+          ",123",
+          "$,123",
+          "$-,123",
+          "$",
+          ".",
+          "$.",
+          ",",
+          "$,",
+          "00",
+          "$00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "$ ",
+          "- $",
+        ],
+      });
+
+      // \u00a5-##,###.## (zh-CN)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "\u00a5",
+            negative_sign_before_digits: true,
+          },
+        ],
+        valid: [
+          "123,456.78",
+          "-123,456.78",
+          "\u00a56,954,231",
+          "\u00a5-6,954,231",
+          "\u00a510.03",
+          "\u00a5-10.03",
+          "10.03",
+          "1.39",
+          ".03",
+          "0.10",
+          "\u00a5-10567.01",
+          "\u00a50.01",
+          "\u00a51,234,567.89",
+          "\u00a510,123",
+          "\u00a5-10,123",
+          "\u00a5-10,123.45",
+          "10,123",
+          "10123",
+          "\u00a5-100",
+        ],
+        invalid: [
+          "1.234",
+          "\u00a51.1",
+          "5,00",
+          ".0001",
+          "\u00a5.001",
+          "\u00a50.001",
+          "12,34.56",
+          "123456,123,123456",
+          "123 456",
+          ",123",
+          "\u00a5-,123",
+          "",
+          " ",
+          "\u00a5",
+          "\u00a5-",
+          "\u00a5-,.",
+          "-",
+          "- \u00a5",
+          "-\u00a5",
+        ],
+      });
+
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            negative_sign_after_digits: true,
+          },
+        ],
+        valid: [
+          "$10,123.45-",
+          "$10,123.45",
+          "$10123.45",
+          "10,123.45",
+          "10123.45",
+          "10,123",
+          "1,123,456",
+          "1123456",
+          "1.39",
+          ".03",
+          "0.10",
+          "$0.10",
+          "$0.01-",
+          "$.99-",
+          "$100,234,567.89",
+          "$10,123",
+          "10,123",
+          "10123-",
+        ],
+        invalid: [
+          "-123",
+          "1.234",
+          "$1.1",
+          "$ 32.50",
+          "500$",
+          ".0001",
+          "$.001",
+          "$0.001",
+          "12,34.56",
+          "123456,123,123456",
+          "123,4",
+          ",123",
+          "$-,123",
+          "$",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "- $",
+        ],
+      });
+
+      // \u00a5##,###.## with no negatives (zh-CN)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "\u00a5",
+            allow_negatives: false,
+          },
+        ],
+        valid: [
+          "123,456.78",
+          "\u00a56,954,231",
+          "\u00a510.03",
+          "10.03",
+          "1.39",
+          ".03",
+          "0.10",
+          "\u00a50.01",
+          "\u00a51,234,567.89",
+          "\u00a510,123",
+          "10,123",
+          "10123",
+          "\u00a5100",
+        ],
+        invalid: [
+          "1.234",
+          "-123,456.78",
+          "\u00a5-6,954,231",
+          "\u00a5-10.03",
+          "\u00a5-10567.01",
+          "\u00a51.1",
+          "\u00a5-10,123",
+          "\u00a5-10,123.45",
+          "5,00",
+          "\u00a5-100",
+          ".0001",
+          "\u00a5.001",
+          "\u00a5-.001",
+          "\u00a50.001",
+          "12,34.56",
+          "123456,123,123456",
+          "123 456",
+          ",123",
+          "\u00a5-,123",
+          "",
+          " ",
+          "\u00a5",
+          "\u00a5-",
+          "\u00a5-,.",
+          "-",
+          "- \u00a5",
+          "-\u00a5",
+        ],
+      });
+
+      // R ## ###,## and R-10 123,25 (el-ZA)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "R",
+            negative_sign_before_digits: true,
+            thousands_separator: " ",
+            decimal_separator: ",",
+            allow_negative_sign_placeholder: true,
+          },
+        ],
+        valid: [
+          "123 456,78",
+          "-10 123",
+          "R-10 123",
+          "R 6 954 231",
+          "R10,03",
+          "10,03",
+          "1,39",
+          ",03",
+          "0,10",
+          "R10567,01",
+          "R0,01",
+          "R1 234 567,89",
+          "R10 123",
+          "R 10 123",
+          "R 10123",
+          "R-10123",
+          "10 123",
+          "10123",
+        ],
+        invalid: [
+          "1,234",
+          "R -10123",
+          "R- 10123",
+          "R,1",
+          ",0001",
+          "R,001",
+          "R0,001",
+          "12 34,56",
+          "123456 123 123456",
+          " 123",
+          "- 123",
+          "123 ",
+          "",
+          " ",
+          "R",
+          "R- .1",
+          "R-",
+          "-",
+          "-R 10123",
+          "R00",
+          "R -",
+          "-R",
+        ],
+      });
+
+      // -\u20ac ##.###,## (it-IT)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "\u20ac",
+            thousands_separator: ".",
+            decimal_separator: ",",
+            allow_space_after_symbol: true,
+          },
+        ],
+        valid: [
+          "123.456,78",
+          "-123.456,78",
+          "\u20ac6.954.231",
+          "-\u20ac6.954.231",
+          "\u20ac 896.954.231",
+          "-\u20ac 896.954.231",
+          "16.954.231",
+          "-16.954.231",
+          "\u20ac10,03",
+          "-\u20ac10,03",
+          "10,03",
+          "-10,03",
+          "-1,39",
+          ",03",
+          "0,10",
+          "-\u20ac10567,01",
+          "-\u20ac 10567,01",
+          "\u20ac 0,01",
+          "\u20ac1.234.567,89",
+          "\u20ac10.123",
+          "10.123",
+          "-\u20ac10.123",
+          "\u20ac 10.123",
+          "\u20ac10.123",
+          "\u20ac 10123",
+          "10.123",
+          "-10123",
+        ],
+        invalid: [
+          "1,234",
+          "\u20ac 1,1",
+          "50#,50",
+          "123,@\u20ac ",
+          "\u20ac\u20ac500",
+          ",0001",
+          "\u20ac ,001",
+          "\u20ac0,001",
+          "12.34,56",
+          "123456.123.123456",
+          "\u20ac123\u20ac",
+          "",
+          " ",
+          "\u20ac",
+          " \u20ac",
+          "\u20ac ",
+          "\u20ac\u20ac",
+          " 123",
+          "- 123",
+          ".123",
+          "-\u20ac.123",
+          "123 ",
+          "\u20ac-",
+          "- \u20ac",
+          "\u20ac - ",
+          "-",
+          "- ",
+          "-\u20ac",
+        ],
+      });
+
+      // -##.###,## \u20ac (el-GR)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "\u20ac",
+            thousands_separator: ".",
+            symbol_after_digits: true,
+            decimal_separator: ",",
+            allow_space_after_digits: true,
+          },
+        ],
+        valid: [
+          "123.456,78",
+          "-123.456,78",
+          "6.954.231 \u20ac",
+          "-6.954.231 \u20ac",
+          "896.954.231",
+          "-896.954.231",
+          "16.954.231",
+          "-16.954.231",
+          "10,03\u20ac",
+          "-10,03\u20ac",
+          "10,03",
+          "-10,03",
+          "1,39",
+          ",03",
+          "-,03",
+          "-,03 \u20ac",
+          "-,03\u20ac",
+          "0,10",
+          "10567,01\u20ac",
+          "0,01 \u20ac",
+          "1.234.567,89\u20ac",
+          "10.123\u20ac",
+          "10.123",
+          "10.123\u20ac",
+          "10.123 \u20ac",
+          "10123 \u20ac",
+          "10.123",
+          "10123",
+        ],
+        invalid: [
+          "1,234",
+          "1,1 \u20ac",
+          ",0001",
+          ",001 \u20ac",
+          "0,001\u20ac",
+          "12.34,56",
+          "123456.123.123456",
+          "\u20ac123\u20ac",
+          "",
+          " ",
+          "\u20ac",
+          " \u20ac",
+          "\u20ac ",
+          " 123",
+          "- 123",
+          ".123",
+          "-.123\u20ac",
+          "-.123 \u20ac",
+          "123 ",
+          "-\u20ac",
+          "- \u20ac",
+          "-",
+          "- ",
+        ],
+      });
+
+      // kr. -##.###,## (da-DK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "kr.",
+            negative_sign_before_digits: true,
+            thousands_separator: ".",
+            decimal_separator: ",",
+            allow_space_after_symbol: true,
+          },
+        ],
+        valid: [
+          "123.456,78",
+          "-10.123",
+          "kr. -10.123",
+          "kr.-10.123",
+          "kr. 6.954.231",
+          "kr.10,03",
+          "kr. -10,03",
+          "10,03",
+          "1,39",
+          ",03",
+          "0,10",
+          "kr. 10567,01",
+          "kr. 0,01",
+          "kr. 1.234.567,89",
+          "kr. -1.234.567,89",
+          "10.123",
+          "kr. 10.123",
+          "kr.10.123",
+          "10123",
+          "10.123",
+          "kr.-10123",
+        ],
+        invalid: [
+          "1,234",
+          "kr.  -10123",
+          "kr.,1",
+          ",0001",
+          "kr. ,001",
+          "kr.0,001",
+          "12.34,56",
+          "123456.123.123456",
+          ".123",
+          "kr.-.123",
+          "kr. -.123",
+          "- 123",
+          "123 ",
+          "",
+          " ",
+          "kr.",
+          " kr.",
+          "kr. ",
+          "kr.-",
+          "kr. -",
+          "kr. - ",
+          " - ",
+          "-",
+          "- kr.",
+          "-kr.",
+        ],
+      });
+
+      // kr. ##.###,## with no negatives (da-DK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "kr.",
+            allow_negatives: false,
+            negative_sign_before_digits: true,
+            thousands_separator: ".",
+            decimal_separator: ",",
+            allow_space_after_symbol: true,
+          },
+        ],
+        valid: [
+          "123.456,78",
+          "10.123",
+          "kr. 10.123",
+          "kr.10.123",
+          "kr. 6.954.231",
+          "kr.10,03",
+          "kr. 10,03",
+          "10,03",
+          "1,39",
+          ",03",
+          "0,10",
+          "kr. 10567,01",
+          "kr. 0,01",
+          "kr. 1.234.567,89",
+          "kr.1.234.567,89",
+          "10.123",
+          "kr. 10.123",
+          "kr.10.123",
+          "10123",
+          "10.123",
+          "kr.10123",
+        ],
+        invalid: [
+          "1,234",
+          "-10.123",
+          "kr. -10.123",
+          "kr. -1.234.567,89",
+          "kr.-10123",
+          "kr.  -10123",
+          "kr.-10.123",
+          "kr. -10,03",
+          "kr.,1",
+          ",0001",
+          "kr. ,001",
+          "kr.0,001",
+          "12.34,56",
+          "123456.123.123456",
+          ".123",
+          "kr.-.123",
+          "kr. -.123",
+          "- 123",
+          "123 ",
+          "",
+          " ",
+          "kr.",
+          " kr.",
+          "kr. ",
+          "kr.-",
+          "kr. -",
+          "kr. - ",
+          " - ",
+          "-",
+          "- kr.",
+          "-kr.",
+        ],
+      });
+
+      // ($##,###.##) (en-US, en-HK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            parens_for_negatives: true,
+          },
+        ],
+        valid: [
+          "1,234",
+          "(1,234)",
+          "($6,954,231)",
+          "$10.03",
+          "(10.03)",
+          "($10.03)",
+          "1.39",
+          ".03",
+          "(.03)",
+          "($.03)",
+          "0.10",
+          "$10567.01",
+          "($0.01)",
+          "$1,234,567.89",
+          "$10,123",
+          "(10,123)",
+          "10123",
+        ],
+        invalid: [
+          "1.234",
+          "($1.1)",
+          "-$1.10",
+          "$ 32.50",
+          "500$",
+          ".0001",
+          "$.001",
+          "($0.001)",
+          "12,34.56",
+          "123456,123,123456",
+          "( 123)",
+          ",123",
+          "$-,123",
+          "",
+          " ",
+          "  ",
+          "   ",
+          "$",
+          "$ ",
+          " $",
+          " 123",
+          "(123) ",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$ - ",
+          "$- ",
+          " - ",
+          "-",
+          "- $",
+          "-$",
+          "()",
+          "( )",
+          "(  -)",
+          "(  - )",
+          "(  -  )",
+          "(-)",
+          "(-$)",
+        ],
+      });
+      // $##,###.## with no negatives (en-US, en-CA, en-AU, en-HK)
+      test({
+        validator: "isCurrency",
+        args: [{ allow_negatives: false }],
+        valid: [
+          "$10,123.45",
+          "$10123.45",
+          "10,123.45",
+          "10123.45",
+          "10,123",
+          "1,123,456",
+          "1123456",
+          "1.39",
+          ".03",
+          "0.10",
+          "$0.10",
+          "$100,234,567.89",
+          "$10,123",
+          "10,123",
+        ],
+        invalid: [
+          "1.234",
+          "-1.234",
+          "-10123",
+          "-$0.01",
+          "-$.99",
+          "$1.1",
+          "-$1.1",
+          "$ 32.50",
+          "500$",
+          ".0001",
+          "$.001",
+          "$0.001",
+          "12,34.56",
+          "123456,123,123456",
+          "-123456,123,123456",
+          "123,4",
+          ",123",
+          "$-,123",
+          "$",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "- $",
+          "-$10,123.45",
+        ],
+      });
+
+      //  R$ ##,###.## (pt_BR)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "R$",
+            require_symbol: true,
+            allow_space_after_symbol: true,
+            symbol_after_digits: false,
+            thousands_separator: ".",
+            decimal_separator: ",",
+          },
+        ],
+        valid: ["R$ 1.400,00", "R$ 400,00"],
+        invalid: ["$ 1.400,00", "$R 1.400,00"],
+      });
+    });
+
+    it("should validate Ethereum addresses", () => {
+      test({
+        validator: "isEthereumAddress",
+        valid: [
+          "0x0000000000000000000000000000000000000001",
+          "0x683E07492fBDfDA84457C16546ac3f433BFaa128",
+          "0x88dA6B6a8D3590e88E0FcadD5CEC56A7C9478319",
+          "0x8a718a84ee7B1621E63E680371e0C03C417cCaF6",
+          "0xFCb5AFB808b5679b4911230Aa41FfCD0cd335b42",
+        ],
+        invalid: [
+          "0xGHIJK05pwm37asdf5555QWERZCXV2345AoEuIdHt",
+          "0xFCb5AFB808b5679b4911230Aa41FfCD0cd335b422222",
+          "0xFCb5AFB808b5679b4911230Aa41FfCD0cd33",
+          "0b0110100001100101011011000110110001101111",
+          "683E07492fBDfDA84457C16546ac3f433BFaa128",
+          "1C6o5CDkLxjsVpnLSuqRs1UBFozXLEwYvU",
+        ],
+      });
+    });
+
+    it("should validate Bitcoin addresses", () => {
+      test({
+        validator: "isBtcAddress",
+        valid: [
+          "1MUz4VMYui5qY1mxUiG8BQ1Luv6tqkvaiL",
+          "mucFNhKMYoBQYUAEsrFVscQ1YaFQPekBpg",
+          "3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy",
+          "2NFUBBRcTJbYc1D4HSCbJhKZp6YCV4PQFpQ",
+          "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",
+          "14qViLJfdGaP4EeHnDyJbEGQysnCpwk3gd",
+          "35bSzXvRKLpHsHMrzb82f617cV4Srnt7hS",
+          "17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhemt",
+          "bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4",
+          "tb1qxhkl607frtvjsy9nlyeg03lf6fsq947pl2pe82",
+          "bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297",
+          "tb1pzpelffrdh9ptpaqnurwx30dlewqv57rcxfeetp86hsssk30p4cws38tr9y",
+        ],
+        invalid: [
+          "3J98t1WpEZ73CNmQviecrnyiWrnqh0WNL0",
+          "3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLo",
+          "3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLI",
+          "3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLl",
+          "4J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy",
+          "0x56F0B8A998425c53c75C4A303D4eF987533c5597",
+          "pp8skudq3x5hzw8ew7vzsw8tn4k8wxsqsv0lt0mf3g",
+          "17VZNX1SN5NlKa8UQFxwQbFeFc3iqRYhem",
+          "BC1QW508D6QEJXTDG4Y5R3ZARVAYR0C5XW7KV8F3T4",
+          "bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3291",
+          "bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329b",
+          "bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329i",
+          "bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329o",
+          "BC1P5D7RJQ7G6RDK2YHZKS9SMLAQTEDR4DEKQ08GE8ZTWAC72SFR9RUSXG3297",
+          "TB1PZPELFFRDH9PTPAQNURWX30DLEWQV57RCXFEETP86HSSSK30P4CWS38TR9Y",
+        ],
+      });
+    });
+
+    it("should validate booleans", () => {
+      test({
+        validator: "isBoolean",
+        valid: ["true", "false", "0", "1"],
+        invalid: ["1.0", "0.0", "true ", "False", "True", "yes"],
+      });
+    });
+
+    it("should validate booleans with option loose set to true", () => {
+      test({
+        validator: "isBoolean",
+        args: [{ loose: true }],
+        valid: [
+          "true",
+          "True",
+          "TRUE",
+          "false",
+          "False",
+          "FALSE",
+          "0",
+          "1",
+          "yes",
+          "Yes",
+          "YES",
+          "no",
+          "No",
+          "NO",
+        ],
+        invalid: ["1.0", "0.0", "true ", " false"],
+      });
+    });
+
+    it("should validate ISO 639-1 language codes", () => {
+      test({
+        validator: "isISO6391",
+        valid: ["ay", "az", "ba", "be", "bg"],
+        invalid: ["aj", "al", "pe", "pf", "abc", "123", ""],
+      });
+    });
+
+    const validISO8601 = [
+      "2009-12T12:34",
+      "2009",
+      "2009-05-19",
+      "2009-05-19",
+      "20090519",
+      "2009123",
+      "2009-05",
+      "2009-123",
+      "2009-222",
+      "2009-001",
+      "2009-W01-1",
+      "2009-W51-1",
+      "2009-W511",
+      "2009-W33",
+      "2009W511",
+      "2009-05-19",
+      "2009-05-19 00:00",
+      "2009-05-19 14",
+      "2009-05-19 14:31",
+      "2009-05-19 14:39:22",
+      "2009-05-19T14:39Z",
+      "2009-W21-2",
+      "2009-W21-2T01:22",
+      "2009-139",
+      "2009-05-19 14:39:22-06:00",
+      "2009-05-19 14:39:22+0600",
+      "2009-05-19 14:39:22-01",
+      "20090621T0545Z",
+      "2007-04-06T00:00",
+      "2007-04-05T24:00",
+      "2010-02-18T16:23:48.5",
+      "2010-02-18T16:23:48,444",
+      "2010-02-18T16:23:48,3-06:00",
+      "2010-02-18T16:23.4",
+      "2010-02-18T16:23,25",
+      "2010-02-18T16:23.33+0600",
+      "2010-02-18T16.23334444",
+      "2010-02-18T16,2283",
+      "2009-05-19 143922.500",
+      "2009-05-19 1439,55",
+      "2009-10-10",
+      "2020-366",
+      "2000-366",
+    ];
+
+    const invalidISO8601 = [
+      "200905",
+      "2009367",
+      "2009-",
+      "2007-04-05T24:50",
+      "2009-000",
+      "2009-M511",
+      "2009M511",
+      "2009-05-19T14a39r",
+      "2009-05-19T14:3924",
+      "2009-0519",
+      "2009-05-1914:39",
+      "2009-05-19 14:",
+      "2009-05-19r14:39",
+      "2009-05-19 14a39a22",
+      "200912-01",
+      "2009-05-19 14:39:22+06a00",
+      "2009-05-19 146922.500",
+      "2010-02-18T16.5:23.35:48",
+      "2010-02-18T16:23.35:48",
+      "2010-02-18T16:23.35:48.45",
+      "2009-05-19 14.5.44",
+      "2010-02-18T16:23.33.600",
+      "2010-02-18T16,25:23:48,444",
+      "2010-13-1",
+      "nonsense2021-01-01T00:00:00Z",
+      "2021-01-01T00:00:00Znonsense",
+    ];
+
+    it("should validate ISO 8601 dates", () => {
+      // from http://www.pelagodesign.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/
+      test({
+        validator: "isISO8601",
+        valid: validISO8601,
+        invalid: invalidISO8601,
+      });
+    });
+
+    it("should validate ISO 8601 dates, with strict = true (regression)", () => {
+      test({
+        validator: "isISO8601",
+        args: [{ strict: true }],
+        valid: validISO8601,
+        invalid: invalidISO8601,
+      });
+    });
+
+    it("should validate ISO 8601 dates, with strict = true", () => {
+      test({
+        validator: "isISO8601",
+        args: [{ strict: true }],
+        valid: ["2000-02-29", "2009-123", "2009-222", "2020-366", "2400-366"],
+        invalid: ["2010-02-30", "2009-02-29", "2009-366", "2019-02-31"],
+      });
+    });
+
+    it("should validate ISO 8601 dates, with strictSeparator = true", () => {
+      test({
+        validator: "isISO8601",
+        args: [{ strictSeparator: true }],
+        valid: [
+          "2009-12T12:34",
+          "2009",
+          "2009-05-19",
+          "2009-05-19",
+          "20090519",
+          "2009123",
+          "2009-05",
+          "2009-123",
+          "2009-222",
+          "2009-001",
+          "2009-W01-1",
+          "2009-W51-1",
+          "2009-W511",
+          "2009-W33",
+          "2009W511",
+          "2009-05-19",
+          "2009-05-19T14:39Z",
+          "2009-W21-2",
+          "2009-W21-2T01:22",
+          "2009-139",
+          "20090621T0545Z",
+          "2007-04-06T00:00",
+          "2007-04-05T24:00",
+          "2010-02-18T16:23:48.5",
+          "2010-02-18T16:23:48,444",
+          "2010-02-18T16:23:48,3-06:00",
+          "2010-02-18T16:23.4",
+          "2010-02-18T16:23,25",
+          "2010-02-18T16:23.33+0600",
+          "2010-02-18T16.23334444",
+          "2010-02-18T16,2283",
+          "2009-10-10",
+          "2020-366",
+          "2000-366",
+        ],
+        invalid: [
+          "200905",
+          "2009367",
+          "2009-",
+          "2007-04-05T24:50",
+          "2009-000",
+          "2009-M511",
+          "2009M511",
+          "2009-05-19T14a39r",
+          "2009-05-19T14:3924",
+          "2009-0519",
+          "2009-05-1914:39",
+          "2009-05-19 14:",
+          "2009-05-19r14:39",
+          "2009-05-19 14a39a22",
+          "200912-01",
+          "2009-05-19 14:39:22+06a00",
+          "2009-05-19 146922.500",
+          "2010-02-18T16.5:23.35:48",
+          "2010-02-18T16:23.35:48",
+          "2010-02-18T16:23.35:48.45",
+          "2009-05-19 14.5.44",
+          "2010-02-18T16:23.33.600",
+          "2010-02-18T16,25:23:48,444",
+          "2010-13-1",
+          "2009-05-19 00:00",
+          // Previously valid cases
+          "2009-05-19 14",
+          "2009-05-19 14:31",
+          "2009-05-19 14:39:22",
+          "2009-05-19 14:39:22-06:00",
+          "2009-05-19 14:39:22+0600",
+          "2009-05-19 14:39:22-01",
+        ],
+      });
+    });
+
+    it("should validate ISO 8601 dates, with strict = true and strictSeparator = true (regression)", () => {
+      test({
+        validator: "isISO8601",
+        args: [{ strict: true, strictSeparator: true }],
+        valid: ["2000-02-29", "2009-123", "2009-222", "2020-366", "2400-366"],
+        invalid: [
+          "2010-02-30",
+          "2009-02-29",
+          "2009-366",
+          "2019-02-31",
+          "2009-05-19 14",
+          "2009-05-19 14:31",
+          "2009-05-19 14:39:22",
+          "2009-05-19 14:39:22-06:00",
+          "2009-05-19 14:39:22+0600",
+          "2009-05-19 14:39:22-01",
+        ],
+      });
+    });
+
+    it("should validate ISO 15924 script codes", () => {
+      test({
+        validator: "isISO15924",
+        valid: ["Adlm", "Bass", "Copt", "Dsrt", "Egyd", "Latn", "Zzzz"],
+        invalid: ["", "arab", "zzzz", "Qaby", "Lati"],
+      });
+    });
+
+    it("should validate RFC 3339 dates", () => {
+      test({
+        validator: "isRFC3339",
+        valid: [
+          "2009-05-19 14:39:22-06:00",
+          "2009-05-19 14:39:22+06:00",
+          "2009-05-19 14:39:22Z",
+          "2009-05-19T14:39:22-06:00",
+          "2009-05-19T14:39:22Z",
+          "2010-02-18T16:23:48.3-06:00",
+          "2010-02-18t16:23:33+06:00",
+          "2010-02-18t16:23:33+06:00",
+          "2010-02-18t16:12:23.23334444z",
+          "2010-02-18T16:23:55.2283Z",
+          "2009-05-19 14:39:22.500Z",
+          "2009-05-19 14:39:55Z",
+          "2009-05-31 14:39:55Z",
+          "2009-05-31 14:53:60Z",
+          "2010-02-18t00:23:23.33+06:00",
+          "2010-02-18t00:23:32.33+00:00",
+          "2010-02-18t00:23:32.33+23:00",
+        ],
+        invalid: [
+          "2010-02-18t00:23:32.33+24:00",
+          "2009-05-31 14:60:55Z",
+          "2010-02-18t24:23.33+0600",
+          "2009-05-00 1439,55Z",
+          "2009-13-19 14:39:22-06:00",
+          "2009-05-00 14:39:22+0600",
+          "2009-00-1 14:39:22Z",
+          "2009-05-19T14:39:22",
+          "nonsense2021-01-01T00:00:00Z",
+          "2021-01-01T00:00:00Znonsense",
+        ],
+      });
+    });
+
+    it("should validate ISO 3166-1 alpha 2 country codes", () => {
+      // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
+      test({
+        validator: "isISO31661Alpha2",
+        valid: [
+          "FR",
+          "fR",
+          "GB",
+          "PT",
+          "CM",
+          "JP",
+          "PM",
+          "ZW",
+          "MM",
+          "cc",
+          "GG",
+        ],
+        invalid: ["", "FRA", "AA", "PI", "RP", "WV", "WL", "UK", "ZZ"],
+      });
+    });
+
+    it("should validate ISO 3166-1 alpha 3 country codes", () => {
+      // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3
+      test({
+        validator: "isISO31661Alpha3",
+        valid: ["ABW", "HND", "KHM", "RWA"],
+        invalid: ["", "FR", "fR", "GB", "PT", "CM", "JP", "PM", "ZW"],
+      });
+    });
+
+    it("should validate ISO 3166-1 numeric country codes", () => {
+      // from https://en.wikipedia.org/wiki/ISO_3166-1_numeric
+      test({
+        validator: "isISO31661Numeric",
+        valid: [
+          "076",
+          "208",
+          "276",
+          "348",
+          "380",
+          "410",
+          "440",
+          "528",
+          "554",
+          "826",
+        ],
+        invalid: [
+          "",
+          "NL",
+          "NLD",
+          "002",
+          "197",
+          "249",
+          "569",
+          "810",
+          "900",
+          "999",
+        ],
+      });
+    });
+
+    it("should validate ISO 4217 corrency codes", () => {
+      // from https://en.wikipedia.org/wiki/ISO_4217
+      test({
+        validator: "isISO4217",
+        valid: [
+          "AED",
+          "aed",
+          "AUD",
+          "CUP",
+          "EUR",
+          "GBP",
+          "LYD",
+          "MYR",
+          "SGD",
+          "SLE",
+          "USD",
+          "VED",
+          "SLE",
+        ],
+        invalid: [
+          "",
+          "$",
+          "US",
+          "us",
+          "AAA",
+          "aaa",
+          "RWA",
+          "EURO",
+          "euro",
+          "HRK",
+          "CUC",
+        ],
+      });
+    });
+
+    it("should validate whitelisted characters", () => {
+      test({
+        validator: "isWhitelisted",
+        args: ["abcdefghijklmnopqrstuvwxyz-"],
+        valid: ["foo", "foobar", "baz-foo"],
+        invalid: ["foo bar", "fo.bar", "t\u00fcrk\u00e7e"],
+      });
+    });
+
+    it("should error on non-string input", () => {
+      test({
+        validator: "isEmpty",
+        error: [undefined, null, [], NaN],
+      });
+    });
+
+    it("should validate dataURI", () => {
+      /* eslint-disable max-len */
+      test({
+        validator: "isDataURI",
+        valid: [
+          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC",
+          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC",
+          "data:application/media_control+xml;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC",
+          "   data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC   ",
+          "data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%3E%3Crect%20fill%3D%22%2300B1FF%22%20width%3D%22100%22%20height%3D%22100%22%2F%3E%3C%2Fsvg%3E",
+          "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIj48cmVjdCBmaWxsPSIjMDBCMUZGIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPjwvc3ZnPg==",
+          " data:,Hello%2C%20World!",
+          " data:,Hello World!",
+          " data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D",
+          " data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E",
+          "data:,A%20brief%20note",
+          "data:text/html;charset=US-ASCII,%3Ch1%3EHello!%3C%2Fh1%3E",
+          "data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,dGVzdC5kb2N4",
+        ],
+        invalid: [
+          "dataxbase64",
+          "data:HelloWorld",
+          "data:,A%20brief%20invalid%20[note",
+          "file:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D",
+          "data:text/html;charset=,%3Ch1%3EHello!%3C%2Fh1%3E",
+          "data:text/html;charset,%3Ch1%3EHello!%3C%2Fh1%3E",
+          "data:base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC",
+          "",
+          "http://wikipedia.org",
+          "base64",
+          "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC",
+        ],
+      });
+      /* eslint-enable max-len */
+    });
+
+    it("should validate magnetURI", () => {
+      /* eslint-disable max-len */
+      test({
+        validator: "isMagnetURI",
+        valid: [
+          "magnet:?xt.1=urn:sha1:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456&xt.2=urn:sha1:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456",
+          "magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=helloword2000&tr=udp://helloworld:1337/announce",
+          "magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=foo",
+          "magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=&tr=&nonexisting=hello world",
+          "magnet:?xt=urn:md5:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456",
+          "magnet:?xt=urn:tree:tiger:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456",
+          "magnet:?xt=urn:ed2k:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magnet:?tr=udp://helloworld:1337/announce&xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magnet:?xt=urn:btmh:1220caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e",
+        ],
+        invalid: [
+          ":?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magneta:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magnet:?xt=uarn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magnet:?xt=urn:btihz",
+          "magnet::?xt=urn:btih:UHWY2892JNEJ2GTEYOMDNU67E8ICGICYE92JDUGH",
+          "magnet:?xt:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+          "magnet:?xt:urn:nonexisting:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magnet:?xt.2=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magnet:?xt=urn:ed2k:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890123456789ABCD",
+          "magnet:?xt=urn:btmh:1120caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e",
+          "magnet:?ttxt=urn:btmh:1220caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e",
+        ],
+      });
+      /* eslint-enable max-len */
+    });
+
+    it("should validate LatLong", () => {
+      test({
+        validator: "isLatLong",
+        valid: [
+          "(-17.738223, 85.605469)",
+          "(-12.3456789, +12.3456789)",
+          "(-60.978437, -0.175781)",
+          "(77.719772, -37.529297)",
+          "(7.264394, 165.058594)",
+          "0.955766, -19.863281",
+          "(31.269161,164.355469)",
+          "+12.3456789, -12.3456789",
+          "-15.379543, -137.285156",
+          "(11.770570, -162.949219)",
+          "-55.034319, 113.027344",
+          "58.025555, 36.738281",
+          "55.720923,-28.652344",
+          "-90.00000,-180.00000",
+          "(-71, -146)",
+          "(-71.616864, -146.616864)",
+          "-0.55, +0.22",
+          "90, 180",
+          "+90, -180",
+          "-90,+180",
+          "90,180",
+          "0, 0",
+        ],
+        invalid: [
+          "(020.000000, 010.000000000)",
+          "89.9999999989, 360.0000000",
+          "90.1000000, 180.000000",
+          "+90.000000, -180.00001",
+          "090.0000, 0180.0000",
+          "126, -158",
+          "(-126.400010, -158.400010)",
+          "-95, -96",
+          "-95.738043, -96.738043",
+          "137, -148",
+          "(-137.5942, -148.5942)",
+          "(-120, -203)",
+          "(-119, -196)",
+          "+119.821728, -196.821728",
+          "(-110, -223)",
+          "-110.369532, 223.369532",
+          "(-120.969949, +203.969949)",
+          "-116, -126",
+          "-116.894222, -126.894222",
+          "-112, -160",
+          "-112.96381, -160.96381",
+          "-90., -180.",
+          "+90.1, -180.1",
+          "(-17.738223, 85.605469",
+          "0.955766, -19.863281)",
+          "+,-",
+          "(,)",
+          ",",
+          " ",
+        ],
+      });
+
+      test({
+        validator: "isLatLong",
+        args: [
+          {
+            checkDMS: true,
+          },
+        ],
+        valid: [
+          "40\u00b0 26\u2032 46\u2033 N, 79\u00b0 58\u2032 56\u2033 W",
+          "40\u00b0 26\u2032 46\u2033 S, 79\u00b0 58\u2032 56\u2033 E",
+          "90\u00b0 0\u2032 0\u2033 S, 180\u00b0 0\u2032 0\u2033 E",
+          "40\u00b0 26\u2032 45.9996\u2033 N, 79\u00b0 58\u2032 55.2\u2033 E",
+          "40\u00b0 26\u2032 46\u2033 n, 79\u00b0 58\u2032 56\u2033 w",
+          "40\u00b026\u203246\u2033s, 79\u00b058\u203256\u2033e",
+          "11\u00b0 0\u2032 0.005\u2033 S, 180\u00b0 0\u2032 0\u2033 E",
+          "40\u00b026\u203245.9996\u2033N, 79\u00b058\u203255.2\u2033E",
+        ],
+        invalid: [
+          "100\u00b0 26\u2032 46\u2033 N, 79\u00b0 70\u2032 56\u2033 W",
+          "40\u00b0 89\u2032 46\u2033 S, 79\u00b0 58\u2032 100\u2033 E",
+          "40\u00b0 26.445\u2032 45\u2033 N, 79\u00b0 58\u2032 55.2\u2033 E",
+          "40\u00b0 46\u2033 N, 79\u00b0 58\u2032 56\u2033 W",
+        ],
+      });
+    });
+
+    it("should validate postal code", () => {
+      const fixtures = [
+        {
+          locale: "AU",
+          valid: ["4000", "2620", "3000", "2017", "0800"],
+        },
+        {
+          locale: "BD",
+          valid: [
+            "1000",
+            "1200",
+            "1300",
+            "1400",
+            "1500",
+            "2000",
+            "3000",
+            "4000",
+            "5000",
+            "6000",
+            "7000",
+            "8000",
+            "9000",
+            "9400",
+            "9499",
+          ],
+          invalid: [
+            "0999",
+            "9500",
+            "10000",
+            "12345",
+            "123",
+            "123456",
+            "abcd",
+            "123a",
+            "a123",
+            "12 34",
+            "12-34",
+          ],
+        },
+        {
+          locale: "BY",
+          valid: ["225320", "211120", "247710", "231960"],
+          invalid: ["test 225320", "211120 test", "317543", "267946"],
+        },
+        {
+          locale: "CA",
+          valid: [
+            "L4T 0A5",
+            "G1A-0A2",
+            "A1A 1A1",
+            "X0A-0H0",
+            "V5K 0A1",
+            "A1C 3S4",
+            "A1C3S4",
+            "a1c 3s4",
+            "V9A 7N2",
+            "B3K 5X5",
+            "K8N 5W6",
+            "K1A 0B1",
+            "B1Z 0B9",
+          ],
+          invalid: [
+            "        ",
+            "invalid value",
+            "a1a1a",
+            "A1A  1A1",
+            "K1A 0D1",
+            "W1A 0B1",
+            "Z1A 0B1",
+          ],
+        },
+        {
+          locale: "CO",
+          valid: ["050034", "110221", "441029", "910001"],
+          invalid: ["11001", "000000", "109999", "329999"],
+        },
+        {
+          locale: "ES",
+          valid: ["01001", "52999", "27880"],
+          invalid: ["123", "1234", "53000", "052999", "0123", "abcde"],
+        },
+        {
+          locale: "JP",
+          valid: ["135-0000", "874-8577", "669-1161", "470-0156", "672-8031"],
+        },
+        {
+          locale: "GR",
+          valid: ["022 93", "29934", "90293", "299 42", "94944"],
+        },
+        {
+          locale: "GB",
+          valid: [
+            "TW8 9GS",
+            "BS98 1TL",
+            "DE99 3GG",
+            "DE55 4SW",
+            "DH98 1BT",
+            "DH99 1NS",
+            "GIR0aa",
+            "SA99",
+            "W1N 4DJ",
+            "AA9A 9AA",
+            "AA99 9AA",
+            "BS98 1TL",
+            "DE993GG",
+          ],
+        },
+        {
+          locale: "FR",
+          valid: ["75008", "44522", "38499", "39940", "01000"],
+          invalid: ["44 522", "38 499", "96000", "98025"],
+        },
+        {
+          locale: "ID",
+          valid: ["10210", "40181", "55161", "60233"],
+        },
+        {
+          locale: "IE",
+          valid: ["A65 TF12", "A6W U9U9"],
+          invalid: [
+            "123",
+            "75690HG",
+            "AW5  TF12",
+            "AW5 TF12",
+            "756  90HG",
+            "A65T F12",
+            "O62 O1O2",
+          ],
+        },
+        {
+          locale: "IN",
+          valid: ["364240", "360005"],
+          invalid: [
+            "123",
+            "012345",
+            "011111",
+            "101123",
+            "291123",
+            "351123",
+            "541123",
+            "551123",
+            "651123",
+            "661123",
+            "861123",
+            "871123",
+            "881123",
+            "891123",
+          ],
+        },
+        {
+          locale: "IL",
+          valid: [
+            "10200",
+            "10292",
+            "10300",
+            "10329",
+            "3885500",
+            "4290500",
+            "4286000",
+            "7080000",
+          ],
+          invalid: [
+            "123",
+            "012345",
+            "011111",
+            "101123",
+            "291123",
+            "351123",
+            "541123",
+            "551123",
+            "651123",
+            "661123",
+            "861123",
+            "871123",
+            "881123",
+            "891123",
+          ],
+        },
+        {
+          locale: "BG",
+          valid: ["1000"],
+        },
+        {
+          locale: "IR",
+          valid: ["4351666456", "5614736867"],
+          invalid: [
+            "43516 6456",
+            "123443516 6456",
+            "891123",
+            "test 4351666456",
+            "4351666456 test",
+            "test 4351666456 test",
+          ],
+        },
+        {
+          locale: "CZ",
+          valid: ["20134", "392 90", "39919", "938 29", "39949"],
+        },
+        {
+          locale: "NL",
+          valid: ["1012 SZ", "3432FE", "1118 BH", "3950IO", "3997 GH"],
+          invalid: ["1234", "0603 JV", "5194SA", "9164 SD", "1841SS"],
+        },
+        {
+          locale: "NP",
+          valid: ["10811", "32600", "56806", "977"],
+          invalid: ["11977", "asds", "13 32", "-977", "97765"],
+        },
+        {
+          locale: "PL",
+          valid: [
+            "47-260",
+            "12-930",
+            "78-399",
+            "39-490",
+            "38-483",
+            "05-800",
+            "54-060",
+          ],
+        },
+        {
+          locale: "TW",
+          valid: ["360", "90312", "399", "935", "38842", "546023"],
+        },
+        {
+          locale: "LI",
+          valid: ["9485", "9497", "9491", "9489", "9496"],
+        },
+        {
+          locale: "PT",
+          valid: ["4829-489", "0294-348", "8156-392"],
+        },
+        {
+          locale: "SE",
+          valid: ["12994", "284 39", "39556", "489 39", "499 49"],
+        },
+        {
+          locale: "AD",
+          valid: [
+            "AD100",
+            "AD200",
+            "AD300",
+            "AD400",
+            "AD500",
+            "AD600",
+            "AD700",
+          ],
+        },
+        {
+          locale: "UA",
+          valid: ["65000", "65080", "01000", "51901", "51909", "49125"],
+        },
+        {
+          locale: "BR",
+          valid: [
+            "39100-000",
+            "22040-020",
+            "39400-152",
+            "39100000",
+            "22040020",
+            "39400152",
+          ],
+          invalid: [
+            "79800A12",
+            "13165-00",
+            "38175-abc",
+            "81470-2763",
+            "78908",
+            "13010|111",
+          ],
+        },
+        {
+          locale: "NZ",
+          valid: ["7843", "3581", "0449", "0984", "4144"],
+        },
+        {
+          locale: "PK",
+          valid: ["25000", "44000", "54810", "74200"],
+          invalid: ["5400", "540000", "NY540", "540CA", "540-0"],
+        },
+        {
+          locale: "MG",
+          valid: ["101", "303", "407", "512"],
+        },
+        {
+          locale: "MT",
+          valid: ["VLT2345", "VLT 2345", "ATD1234", "MSK8723"],
+        },
+        {
+          locale: "MY",
+          valid: ["56000", "12000", "79502"],
+        },
+        {
+          locale: "PR",
+          valid: ["00979", "00631", "00786", "00987"],
+        },
+        {
+          locale: "AZ",
+          valid: ["AZ0100", "AZ0121", "AZ3500"],
+          invalid: ["", " AZ0100", "AZ100", "AZ34340", "EN2020", "AY3030"],
+        },
+        {
+          locale: "DO",
+          valid: ["12345"],
+          invalid: ["A1234", "123", "123456"],
+        },
+        {
+          locale: "HT",
+          valid: ["HT1234"],
+          invalid: ["HT123", "HT12345", "AA1234"],
+        },
+        {
+          locale: "TH",
+          valid: ["10250", "72170", "12140"],
+          invalid: ["T1025", "T72170", "12140TH"],
+        },
+        {
+          locale: "SG",
+          valid: ["308215", "546080"],
+        },
+        {
+          locale: "CN",
+          valid: ["150237", "100000"],
+          invalid: ["141234", "386789", "ab1234"],
+        },
+        {
+          locale: "KR",
+          valid: ["17008", "339012"],
+          invalid: ["1412347", "ab1234"],
+        },
+        {
+          locale: "LK",
+          valid: ["11500", "22200", "10370", "43000"],
+          invalid: ["1234", "789389", "982"],
+        },
+        {
+          locale: "BA",
+          valid: ["76300", "71000", "75412", "76100", "88202", "88313"],
+          invalid: ["1234", "789389", "98212", "11000"],
+        },
+      ];
+
+      let allValid = [];
+
+      // Test fixtures
+      fixtures.forEach((fixture) => {
+        if (fixture.valid) allValid = allValid.concat(fixture.valid);
+        test({
+          validator: "isPostalCode",
+          valid: fixture.valid,
+          invalid: fixture.invalid,
+          args: [fixture.locale],
+        });
+      });
+
+      // Test generics
+      test({
+        validator: "isPostalCode",
+        valid: [
+          ...allValid,
+          "1234",
+          "6900",
+          "1292",
+          "9400",
+          "27616",
+          "90210",
+          "10001",
+          "21201",
+          "33142",
+          "060623",
+          "123456",
+          "293940",
+          "002920",
+        ],
+        invalid: [
+          "asdf",
+          "1",
+          "ASDFGJKLmZXJtZtesting123",
+          "Vml2YW11cyBmZXJtZtesting123",
+          "48380480343",
+          "29923-329393-2324",
+          "4294924224",
+          "13",
+        ],
+        args: ["any"],
+      });
+    });
+
+    it("should error on invalid locale", () => {
+      test({
+        validator: "isPostalCode",
+        args: ["is-NOT"],
+        error: ["293940", "1234"],
+      });
+    });
+
+    it("should validate MIME types", () => {
+      test({
+        validator: "isMimeType",
+        valid: [
+          "application/json",
+          "application/xhtml+xml",
+          "audio/mp4",
+          "image/bmp",
+          "font/woff2",
+          "message/http",
+          "model/vnd.gtw",
+          "application/media_control+xml",
+          "multipart/form-data",
+          "multipart/form-data; boundary=something",
+          "multipart/form-data; charset=utf-8; boundary=something",
+          "multipart/form-data; boundary=something; charset=utf-8",
+          'multipart/form-data; boundary=something; charset="utf-8"',
+          'multipart/form-data; boundary="something"; charset=utf-8',
+          'multipart/form-data; boundary="something"; charset="utf-8"',
+          "text/css",
+          "text/plain; charset=utf8",
+          'Text/HTML;Charset="utf-8"',
+          "text/html;charset=UTF-8",
+          "Text/html;charset=UTF-8",
+          "text/html; charset=us-ascii",
+          "text/html; charset=us-ascii (Plain text)",
+          'text/html; charset="us-ascii"',
+          "video/mp4",
+        ],
+        invalid: [
+          "",
+          " ",
+          "/",
+          "f/b",
+          "application",
+          "application\\json",
+          "application/json/text",
+          "application/json; charset=utf-8",
+          "audio/mp4; charset=utf-8",
+          "image/bmp; charset=utf-8",
+          "font/woff2; charset=utf-8",
+          "message/http; charset=utf-8",
+          "model/vnd.gtw; charset=utf-8",
+          "video/mp4; charset=utf-8",
+        ],
+      });
+    });
+
+    it("should validate ISO6346 shipping containerID", () => {
+      test({
+        validator: "isISO6346",
+        valid: [
+          "HLXU2008419",
+          "TGHU7599330",
+          "ECMU4657496",
+          "MEDU6246078",
+          "YMLU2809976",
+          "MRKU0046221",
+          "EMCU3811879",
+          "OOLU8643084",
+          "HJCU1922713",
+          "QJRZ123456",
+        ],
+        invalid: [
+          "OOLU1922713",
+          "HJCU1922413",
+          "FCUI985619",
+          "ECMJ4657496",
+          "TBJA7176445",
+          "AFFU5962593",
+        ],
+      });
+    });
+    it("should validate ISO6346 shipping containerID", () => {
+      test({
+        validator: "isFreightContainerID",
+        valid: [
+          "HLXU2008419",
+          "TGHU7599330",
+          "ECMU4657496",
+          "MEDU6246078",
+          "YMLU2809976",
+          "MRKU0046221",
+          "EMCU3811879",
+          "OOLU8643084",
+          "HJCU1922713",
+          "QJRZ123456",
+        ],
+        invalid: [
+          "OOLU1922713",
+          "HJCU1922413",
+          "FCUI985619",
+          "ECMJ4657496",
+          "TBJA7176445",
+          "AFFU5962593",
+        ],
+      });
+    });
+
+    it("should validate ISO6346 shipping container IDs with checksum digit 10 represented as 0", () => {
+      test({
+        validator: "isISO6346",
+        valid: [
+          "APZU3789870",
+          "TEMU1002030",
+          "DFSU1704420",
+          "CMAU2221480",
+          "SEGU5060260",
+          "FCIU8939320",
+          "TRHU3495670",
+          "MEDU3871410",
+          "CMAU2184010",
+          "TCLU2265970",
+        ],
+        invalid: [
+          "APZU3789871", // Incorrect check digit
+          "TEMU1002031",
+          "DFSU1704421",
+          "CMAU2221481",
+          "SEGU5060261",
+        ],
+      });
+    });
+    it("should validate ISO6346 shipping container IDs with checksum digit 10 represented as 0", () => {
+      test({
+        validator: "isFreightContainerID",
+        valid: [
+          "APZU3789870",
+          "TEMU1002030",
+          "DFSU1704420",
+          "CMAU2221480",
+          "SEGU5060260",
+          "FCIU8939320",
+          "TRHU3495670",
+          "MEDU3871410",
+          "CMAU2184010",
+          "TCLU2265970",
+        ],
+        invalid: [
+          "APZU3789871", // Incorrect check digit
+          "TEMU1002031",
+          "DFSU1704421",
+          "CMAU2221481",
+          "SEGU5060261",
+        ],
+      });
+    });
+
+    // EU-UK valid numbers sourced from https://ec.europa.eu/taxation_customs/tin/specs/FS-TIN%20Algorithms-Public.docx or constructed by @tplessas.
+    it("should validate taxID", () => {
+      test({
+        validator: "isTaxID",
+        args: ["bg-BG"],
+        valid: [
+          "7501010010",
+          "0101010012",
+          "0111010010",
+          "7521010014",
+          "7541010019",
+        ],
+        invalid: [
+          "750101001",
+          "75010100101",
+          "75-01010/01 0",
+          "7521320010",
+          "7501010019",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["cs-CZ"],
+        valid: [
+          "530121999",
+          "530121/999",
+          "530121/9990",
+          "5301219990",
+          "1602295134",
+          "5451219994",
+          "0424175466",
+          "0532175468",
+          "7159079940",
+        ],
+        invalid: [
+          "53-0121 999",
+          "530121000",
+          "960121999",
+          "0124175466",
+          "0472301754",
+          "1975116400",
+          "7159079945",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["de-AT"],
+        valid: ["931736581", "93-173/6581", "93--173/6581"],
+        invalid: ["999999999", "93 173 6581", "93-173/65811", "93-173/658"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["de-DE"],
+        valid: [
+          "26954371827",
+          "86095742719",
+          "65929970489",
+          "79608434120",
+          "659/299/7048/9",
+        ],
+        invalid: [
+          "26954371828",
+          "86095752719",
+          "8609575271",
+          "860957527190",
+          "65299970489",
+          "65999970489",
+          "6592997048-9",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["dk-DK"],
+        valid: [
+          "010111-1113",
+          "0101110117",
+          "2110084008",
+          "2110489008",
+          "2110595002",
+          "2110197007",
+          "0101110117",
+          "0101110230",
+        ],
+        invalid: [
+          "010111/1113",
+          "010111111",
+          "01011111133",
+          "2110485008",
+          "2902034000",
+          "0101110630",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["el-CY"],
+        valid: ["00123123T", "99652156X"],
+        invalid: [
+          "99652156A",
+          "00124123T",
+          "00123123",
+          "001123123T",
+          "00 12-3123/T",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["el-GR"],
+        valid: ["758426713", "032792320", "054100004"],
+        invalid: [
+          "054100005",
+          "05410000",
+          "0541000055",
+          "05 4100005",
+          "05-410/0005",
+          "658426713",
+          "558426713",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["en-CA"],
+        valid: [
+          "000000000",
+          "521719666",
+          "469317481",
+          "120217450",
+          "480534858",
+          "325268597",
+          "336475660",
+          "744797853",
+          "130692544",
+          "046454286",
+        ],
+        invalid: [
+          "        ",
+          "any value",
+          "012345678",
+          "111111111",
+          "999999999",
+          "657449110",
+          "74 47 978 53",
+          "744 797 853",
+          "744-797-853",
+          "981062432",
+          "267500713",
+          "2675o0713",
+          "70597312",
+          "7058973122",
+          "069437151",
+          "046454281",
+          "146452286",
+          "30x92544",
+          "30692544",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["en-GB"],
+        valid: ["1234567890", "AA123456A", "AA123456 "],
+        invalid: [
+          "GB123456A",
+          "123456789",
+          "12345678901",
+          "NK123456A",
+          "TN123456A",
+          "ZZ123456A",
+          "GB123456Z",
+          "DM123456A",
+          "AO123456A",
+          "GB-123456A",
+          "GB 123456 A",
+          "GB123456  ",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["en-IE"],
+        valid: ["1234567T", "1234567TW", "1234577W", "1234577WW", "1234577IA"],
+        invalid: ["1234567", "1234577WWW", "1234577A", "1234577JA"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["en-US"],
+        valid: [
+          "01-1234567",
+          "01 1234567",
+          "011234567",
+          "10-1234567",
+          "02-1234567",
+          "67-1234567",
+          "15-1234567",
+          "31-1234567",
+          "99-1234567",
+        ],
+        invalid: [
+          "0-11234567",
+          "01#1234567",
+          "01  1234567",
+          "01 1234 567",
+          "07-1234567",
+          "28-1234567",
+          "96-1234567",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["es-AR"],
+        valid: [
+          "20271633638",
+          "23274986069",
+          "27333234519",
+          "30678561165",
+          "33693450239",
+          "30534868460",
+          "23111111129",
+          "34557619099",
+        ],
+        invalid: [
+          "20-27163363-8",
+          "20.27163363.8",
+          "33693450231",
+          "69345023",
+          "693450233123123",
+          "3369ew50231",
+          "34557619095",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["es-ES"],
+        valid: [
+          "00054237A",
+          "54237A",
+          "X1234567L",
+          "Z1234567R",
+          "M2812345C",
+          "Y2812345B",
+        ],
+        invalid: ["M2812345CR", "A2812345C", "0/005 423-7A", "00054237U"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["et-EE"],
+        valid: ["10001010080", "46304280206", "37102250382", "32708101201"],
+        invalid: [
+          "46304280205",
+          "61002293333",
+          "4-6304 28/0206",
+          "4630428020",
+          "463042802066",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["fi-FI"],
+        valid: ["131052-308T", "131002+308W", "131019A3089"],
+        invalid: [
+          "131052308T",
+          "131052-308TT",
+          "131052S308T",
+          "13 1052-308/T",
+          "290219A1111",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["fr-BE"],
+        valid: ["00012511119"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["fr-FR"],
+        valid: ["30 23 217 600 053", "3023217600053"],
+        invalid: [
+          "30 2 3 217 600 053",
+          "3 023217-600/053",
+          "3023217600052",
+          "3023217500053",
+          "30232176000534",
+          "302321760005",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["nl-BE"],
+        valid: ["00012511148", "00/0125-11148", "00000011115"],
+        invalid: [
+          "00 01 2511148",
+          "01022911148",
+          "00013211148",
+          "0001251114",
+          "000125111480",
+          "00012511149",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["fr-LU"],
+        valid: ["1893120105732"],
+        invalid: [
+          "189312010573",
+          "18931201057322",
+          "1893 12-01057/32",
+          "1893120105742",
+          "1893120105733",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["lb-LU"],
+        invalid: ["2016023005732"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["hr-HR"],
+        valid: ["94577403194"],
+        invalid: [
+          "94 57-7403/194",
+          "9457740319",
+          "945774031945",
+          "94577403197",
+          "94587403194",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["hu-HU"],
+        valid: ["8071592153"],
+        invalid: [
+          "80 71-592/153",
+          "80715921534",
+          "807159215",
+          "8071592152",
+          "8071582153",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["lt-LT"],
+        valid: ["33309240064"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["it-IT"],
+        valid: ["DMLPRY77D15H501F", "AXXFAXTTD41H501D"],
+        invalid: [
+          "DML PRY/77D15H501-F",
+          "DMLPRY77D15H501",
+          "DMLPRY77D15H501FF",
+          "AAPPRY77D15H501F",
+          "DMLAXA77D15H501F",
+          "AXXFAX90A01Z001F",
+          "DMLPRY77B29H501F",
+          "AXXFAX3TD41H501E",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["lv-LV"],
+        valid: ["01011012344", "32579461005", "01019902341", "325794-61005"],
+        invalid: ["010110123444", "0101101234", "01001612345", "290217-22343"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["mt-MT"],
+        valid: ["1234567A", "882345608", "34581M", "199Z"],
+        invalid: [
+          "812345608",
+          "88234560",
+          "8823456088",
+          "11234567A",
+          "12/34-567 A",
+          "88 23-456/08",
+          "1234560A",
+          "0000000M",
+          "3200100G",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["nl-NL"],
+        valid: ["174559434"],
+        invalid: ["17455943", "1745594344", "17 455-94/34"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["pl-PL"],
+        valid: [
+          "2234567895",
+          "02070803628",
+          "02870803622",
+          "02670803626",
+          "01510813623",
+        ],
+        invalid: [
+          "020708036285",
+          "223456789",
+          "22 345-678/95",
+          "02 070-8036/28",
+          "2234567855",
+          "02223013623",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["pt-BR"],
+        valid: [
+          "35161990910",
+          "74407265027",
+          "05423994000172",
+          "11867044000130",
+        ],
+        invalid: [
+          "ABCDEFGH",
+          "170.691.440-72",
+          "11494282142",
+          "74405265037",
+          "11111111111",
+          "48469799384",
+          "94.592.973/0001-82",
+          "28592361000192",
+          "11111111111111",
+          "111111111111112",
+          "61938188550993",
+          "82168365502729",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["pt-PT"],
+        valid: ["299999998", "299992020"],
+        invalid: ["2999999988", "29999999", "29 999-999/8"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["ro-RO"],
+        valid: [
+          "8001011234563",
+          "9000123456789",
+          "1001011234560",
+          "3001011234564",
+          "5001011234568",
+        ],
+        invalid: [
+          "5001011234569",
+          "500 1011-234/568",
+          "500101123456",
+          "50010112345688",
+          "5001011504568",
+          "8000230234563",
+          "6000230234563",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["sk-SK"],
+        valid: [
+          "530121999",
+          "536221/999",
+          "031121999",
+          "520229999",
+          "1234567890",
+        ],
+        invalid: [
+          "53012199999",
+          "990101999",
+          "530121000",
+          "53012199",
+          "53-0121 999",
+          "535229999",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["sl-SI"],
+        valid: ["15012557", "15012590"],
+        invalid: ["150125577", "1501255", "15 01-255/7"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["sv-SE"],
+        valid: [
+          "640823-3234",
+          "640883-3231",
+          "6408833231",
+          "19640823-3233",
+          "196408233233",
+          "19640883-3230",
+          "200228+5266",
+          "20180101-5581",
+        ],
+        invalid: [
+          "640823+3234",
+          "160230-3231",
+          "160260-3231",
+          "160260-323",
+          "160260323",
+          "640823+323",
+          "640823323",
+          "640823+32344",
+          "64082332344",
+          "19640823-32333",
+          "1964082332333",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["uk-UA"],
+        valid: ["3006321856", "3003102490", "2164212906"],
+        invalid: ["2565975632", "256597563287", "\u041a\u042100123456", "2896235845"],
+      });
+      test({
+        validator: "isTaxID",
+        valid: ["01-1234567"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["is-NOT"],
+        error: [
+          "01-1234567",
+          "01 1234567",
+          "011234567",
+          "0-11234567",
+          "01#1234567",
+          "01  1234567",
+          "01 1234 567",
+          "07-1234567",
+          "28-1234567",
+          "96-1234567",
+        ],
+      });
+    });
+
+    it("should validate slug", () => {
+      test({
+        validator: "isSlug",
+        valid: [
+          "foo",
+          "foo-bar",
+          "foo_bar",
+          "foo-bar-foo",
+          "foo-bar_foo",
+          "foo-bar_foo*75-b4r-**_foo",
+          "foo-bar_foo*75-b4r-**_foo-&&",
+        ],
+        invalid: [
+          "not-----------slug",
+          "@#_$@",
+          "-not-slug",
+          "not-slug-",
+          "_not-slug",
+          "not-slug_",
+          "not slug",
+        ],
+      });
+    });
+
+    it("should validate strong passwords", () => {
+      test({
+        validator: "isStrongPassword",
+        args: [
+          {
+            minLength: 8,
+            minLowercase: 1,
+            minUppercase: 1,
+            minNumbers: 1,
+            minSymbols: 1,
+          },
+        ],
+        valid: [
+          '%2%k{7BsL"M%Kd6e',
+          "EXAMPLE of very long_password123!",
+          "mxH_+2vs&54_+H3P",
+          "+&DxJ=X7-4L8jRCD",
+          "etV*p%Nr6w&H%FeF",
+          "\u00a33.ndSau_7",
+          "VaLIDWith\\Symb0l",
+        ],
+        invalid: [
+          "",
+          "password",
+          "hunter2",
+          "hello world",
+          "passw0rd",
+          "password!",
+          "PASSWORD!",
+        ],
+      });
+    });
+
+    it("should validate date", () => {
+      test({
+        validator: "isDate",
+        valid: [
+          new Date(),
+          new Date(2014, 2, 15),
+          new Date("2014-03-15"),
+          "2020/02/29",
+          "2020-02-19",
+        ],
+        invalid: [
+          "",
+          "15072002",
+          null,
+          undefined,
+          { year: 2002, month: 7, day: 15 },
+          42,
+          {
+            toString() {
+              return "[object Date]";
+            },
+          }, // faking
+          "2020-02-30", // invalid date
+          "2019-02-29", // non-leap year
+          "2020-04-31", // invalid date
+          "2020/03-15", // mixed delimiter
+          "-2020-04-19",
+          "-2023/05/24",
+          "abc-2023/05/24",
+          "2024",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01-",
+          "2024-05-01-abc",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: ["DD/MM/YYYY"], // old format for backward compatibility
+        valid: ["15-07-2002", "15/07/2002"],
+        invalid: [
+          "15/7/2002",
+          "15-7-2002",
+          "15/7/02",
+          "15-7-02",
+          "15-07/2002",
+          "2024",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01-",
+          "2024-05-01-abc",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+          "15/",
+          "15/07",
+          "15/07/",
+          "15/07/2024/",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ format: "DD/MM/YYYY" }],
+        valid: ["15-07-2002", "15/07/2002"],
+        invalid: [
+          "15/7/2002",
+          "15-7-2002",
+          "15/7/02",
+          "15-7-02",
+          "15-07/2002",
+          "2024",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01-",
+          "2024-05-01-abc",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+          "15/",
+          "15/07",
+          "15/07/",
+          "15/07/2024/",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ format: "DD/MM/YY" }],
+        valid: ["15-07-02", "15/07/02"],
+        invalid: [
+          "15/7/2002",
+          "15-7-2002",
+          "15/07-02",
+          "30/04/--",
+          "2024",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01-",
+          "2024-05-01-abc",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+          "15/",
+          "15/07",
+          "15/07/",
+          "15/07/2024/",
+          "15/07/24/",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ format: "D/M/YY" }],
+        valid: ["5-7-02", "5/7/02"],
+        invalid: [
+          "5/07/02",
+          "15/7/02",
+          "15-7-02",
+          "5/7-02",
+          "3/4/aa",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+          "15/",
+          "15/07",
+          "15/07/",
+          "15/07/2024/",
+          "15/07/24/",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ format: "DD/MM/YYYY", strictMode: true }],
+        valid: ["15/07/2002"],
+        invalid: [
+          "15-07-2002",
+          "15/7/2002",
+          "15-7-2002",
+          "15/7/02",
+          "15-7-02",
+          "15-07/2002",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+          "15/",
+          "15/07",
+          "15/07/",
+          "15/07/2024/",
+          "15/07/24/",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ strictMode: true }],
+        valid: ["2020/01/15", "2014/02/15", "2014/03/15", "2020/02/29"],
+        invalid: [
+          "2014-02-15",
+          "2020-02-29",
+          "15-07/2002",
+          new Date(),
+          new Date(2014, 2, 15),
+          new Date("2014-03-15"),
+          "-2020-04-19",
+          "-2023/05/24",
+          "abc-2023/05/24",
+          "2024",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01-",
+          "2024-05-01-abc",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ delimiters: ["/", " "] }],
+        valid: [
+          new Date(),
+          new Date(2014, 2, 15),
+          new Date("2014-03-15"),
+          "2020/02/29",
+          "2020 02 29",
+        ],
+        invalid: [
+          "2020-02-29",
+          "",
+          "15072002",
+          null,
+          undefined,
+          { year: 2002, month: 7, day: 15 },
+          42,
+          {
+            toString() {
+              return "[object Date]";
+            },
+          },
+          "2020/02/30",
+          "2019/02/29",
+          "2020/04/31",
+          "2020/03-15",
+          "-2020-04-19",
+          "-2023/05/24",
+          "abc-2023/05/24",
+          "2024",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01-",
+          "2024-05-01-abc",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+          "2024 05 01 abc",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ format: "MM.DD.YYYY", delimiters: ["."], strictMode: true }],
+        valid: ["01.15.2020", "02.15.2014", "03.15.2014", "02.29.2020"],
+        invalid: [
+          "2014-02-15",
+          "2020-02-29",
+          "15-07/2002",
+          new Date(),
+          new Date(2014, 2, 15),
+          new Date("2014-03-15"),
+          "29.02.2020",
+          "02.29.2020.20",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01",
+          "-2020-04-19",
+          "-2023/05/24",
+          "abc-2023/05/24",
+          "04.05.2024.",
+          "04.05.2024.abc",
+          "abc.04.05.2024",
+        ],
+      });
+    });
+    it("should validate time", () => {
+      test({
+        validator: "isTime",
+        valid: ["00:00", "23:59", "9:00"],
+        invalid: [
+          "",
+          null,
+          undefined,
+          0,
+          "07:00 PM",
+          "23",
+          "00:60",
+          "00:",
+          "01:0 ",
+          "001:01",
+        ],
+      });
+      test({
+        validator: "isTime",
+        args: [{ hourFormat: "hour24", mode: "withSeconds" }],
+        valid: ["23:59:59", "00:00:00", "9:50:01"],
+        invalid: [
+          "",
+          null,
+          undefined,
+          23,
+          "01:00:01 PM",
+          "13:00:",
+          "00",
+          "26",
+          "00;01",
+          "0 :09",
+          "59:59:59",
+          "24:00:00",
+          "00:59:60",
+          "99:99:99",
+          "009:50:01",
+        ],
+      });
+      test({
+        validator: "isTime",
+        args: [{ hourFormat: "hour24", mode: "withOptionalSeconds" }],
+        valid: ["23:59:59", "00:00:00", "9:50:01", "00:00", "23:59", "9:00"],
+        invalid: [
+          "",
+          null,
+          undefined,
+          23,
+          "01:00:01 PM",
+          "13:00:",
+          "00",
+          "26",
+          "00;01",
+          "0 :09",
+          "59:59:59",
+          "24:00:00",
+          "00:59:60",
+          "99:99:99",
+          "009:50:01",
+        ],
+      });
+      test({
+        validator: "isTime",
+        args: [{ hourFormat: "hour12" }],
+        valid: ["12:59 PM", "12:59 AM", "01:00 PM", "01:00 AM", "7:00 AM"],
+        invalid: [
+          "",
+          null,
+          undefined,
+          0,
+          "12:59 MM",
+          "12:59 MA",
+          "12:59 PA",
+          "12:59 A M",
+          "13:00 PM",
+          "23",
+          "00:60",
+          "00:",
+          "9:00",
+          "01:0 ",
+          "001:01",
+          "12:59:00 PM",
+          "12:59:00 A M",
+          "12:59:00 ",
+        ],
+      });
+      test({
+        validator: "isTime",
+        args: [{ hourFormat: "hour12", mode: "withSeconds" }],
+        valid: ["12:59:59 PM", "2:34:45 AM", "7:00:00 AM"],
+        invalid: [
+          "",
+          null,
+          undefined,
+          23,
+          "01:00: 1 PM",
+          "13:00:",
+          "13:00:00 PM",
+          "00",
+          "26",
+          "00;01",
+          "0 :09",
+          "59:59:59",
+          "24:00:00",
+          "00:59:60",
+          "99:99:99",
+          "9:50:01",
+          "009:50:01",
+        ],
+      });
+      test({
+        validator: "isTime",
+        args: [{ hourFormat: "hour12", mode: "withOptionalSeconds" }],
+        valid: [
+          "12:59:59 PM",
+          "2:34:45 AM",
+          "7:00:00 AM",
+          "12:59 PM",
+          "12:59 AM",
+          "01:00 PM",
+          "01:00 AM",
+          "7:00 AM",
+        ],
+        invalid: [
+          "",
+          null,
+          undefined,
+          23,
+          "01:00: 1 PM",
+          "13:00:",
+          "00",
+          "26",
+          "00;01",
+          "0 :09",
+          "59:59:59",
+          "24:00:00",
+          "00:59:60",
+          "99:99:99",
+          "9:50:01",
+          "009:50:01",
+        ],
+      });
+    });
+    it("should be valid license plate", () => {
+      test({
+        validator: "isLicensePlate",
+        args: ["es-AR"],
+        valid: ["AB 123 CD", "AB123CD", "ABC 123", "ABC123"],
+        invalid: [
+          "",
+          "notalicenseplate",
+          "AB-123-CD",
+          "ABC-123",
+          "AABC 123",
+          "AB CDE FG",
+          "ABC DEF",
+          "12 ABC 34",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["pt-PT"],
+        valid: [
+          "AA-12-34",
+          "12-AA-34",
+          "12-34-AA",
+          "AA-12-AA",
+          "AA\u00b712\u00b734",
+          "12\u00b7AB\u00b734",
+          "12\u00b734\u00b7AB",
+          "AB\u00b734\u00b7AB",
+          "AA 12 34",
+          "12 AA 34",
+          "12 34 AA",
+          "AB 12 CD",
+          "AA1234",
+          "12AA34",
+          "1234AA",
+          "AB12CD",
+        ],
+        invalid: [
+          "",
+          "notalicenseplate",
+          "AA-AA-00",
+          "00-AA-AA",
+          "AA-AA-AA",
+          "00-00-00",
+          "AA\u00b7AA\u00b700",
+          "00\u00b7AA\u00b7AA",
+          "AA\u00b7AA\u00b7AA",
+          "00\u00b700\u00b700",
+          "AA AA 00",
+          "00 AA AA",
+          "AA AA AA",
+          "00 00 00",
+          "A1-B2-C3",
+          "1A-2B-3C",
+          "ABC-1-EF",
+          "AB-C1D-EF",
+          "AB-C1-DEF",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["de-LI"],
+        valid: ["FL 1", "FL 99999", "FL 1337"],
+        invalid: ["", "FL 999999", "AB 12345", "FL -1"],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["de-DE"],
+        valid: [
+          "M A 1",
+          "M A 12",
+          "M A 123",
+          "M A 1234",
+          "M AB 1",
+          "M AB 12",
+          "M AB 123",
+          "M AB 1234",
+          "FS A 1",
+          "FS A 12",
+          "FS A 123",
+          "FS A 1234",
+          "FS AB 1",
+          "FS AB 12",
+          "FS AB 123",
+          "FS AB 1234",
+          "FSAB1234",
+          "FS-AB-1234",
+          "FS AB 1234 H",
+          "FS AB 1234 E",
+          "FSAB1234E",
+          "FS-AB-1234-E",
+          "FS AB-1234-E",
+          "FSAB1234 E",
+          "FS AB1234E",
+          "LRO AB 123",
+          "LRO-AB-123-E",
+          "LRO-AB-123E",
+          "LRO-AB-123 E",
+          "LRO-AB-123-H",
+          "LRO-AB-123H",
+          "LRO-AB-123 H",
+        ],
+        invalid: [
+          "YY AB 123",
+          "PAF AB 1234",
+          "M ABC 123",
+          "M AB 12345",
+          "FS AB 1234 A",
+          "LRO-AB-1234",
+          "HRO ABC 123",
+          "HRO ABC 1234",
+          "LDK-AB-1234-E",
+          "\u00d6HR FA 123D",
+          "MZG-AB-123X",
+          "OBG-ABD-123",
+          "PAF-AB2-123",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["fi-FI"],
+        valid: [
+          "ABC-123",
+          "ABC 123",
+          "ABC123",
+          "A100",
+          "A 100",
+          "A-100",
+          "C10001",
+          "C 10001",
+          "C-10001",
+          "123-ABC",
+          "123 ABC",
+          "123ABC",
+          "123-A",
+          "123 A",
+          "123A",
+          "199AA",
+          "199 AA",
+          "199-AA",
+        ],
+        invalid: [
+          " ",
+          "A-1",
+          "A1A-100",
+          "1-A-2",
+          "C1234567",
+          "A B C 1 2 3",
+          "abc-123",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["sq-AL"],
+        valid: ["AA 000 AA", "ZZ 999 ZZ"],
+        invalid: ["", "AA 0 A", "AAA 00 AAA"],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["cs-CZ"],
+        valid: [
+          "ALA4011",
+          "4A23000",
+          "DICTAT0R",
+          "VETERAN",
+          "AZKVIZ8",
+          "2A45876",
+          "DIC-TAT0R",
+        ],
+        invalid: [
+          "",
+          "invalidlicenseplate",
+          "LN5758898",
+          "X-|$|-X",
+          "AE0F-OP4",
+          "GO0MER",
+          "2AAAAAAAA",
+          "FS AB 1234 E",
+          "GB999 9999 00",
+        ],
+      });
+
+      test({
+        validator: "isLicensePlate",
+        args: ["pt-BR"],
+        valid: [
+          "ABC1234",
+          "ABC 1234",
+          "ABC-1234",
+          "ABC1D23",
+          "ABC1K23",
+          "ABC1Z23",
+          "ABC 1D23",
+          "ABC-1D23",
+        ],
+        invalid: ["", "AA 0 A", "AAA 00 AAA", "ABCD123", "AB12345", "AB123DC"],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["hu-HU"],
+        valid: [
+          "AAB-001",
+          "AVC-987",
+          "KOC-124",
+          "JCM-871",
+          "AWQ-777",
+          "BPO-001",
+          "BPI-002",
+          "UCO-342",
+          "UDO-385",
+          "XAO-987",
+          "AAI-789",
+          "ABI-789",
+          "ACI-789",
+          "AAO-789",
+          "ABO-789",
+          "ACO-789",
+          "YAA-123",
+          "XAA-123",
+          "WAA-258",
+          "XZZ-784",
+          "M123456",
+          "CK 12-34",
+          "DT 12-34",
+          "CD 12-34",
+          "HC 12-34",
+          "HB 12-34",
+          "HK 12-34",
+          "MA 12-34",
+          "OT 12-34",
+          "RR 17-87",
+          "CD 124-348",
+          "C-C 2021",
+          "C-X 2458",
+          "X-A 7842",
+          "E-72345",
+          "Z-07458",
+          "S ACF 83",
+          "SP 04-68",
+        ],
+        invalid: [
+          "AAA-547",
+          "aab-001",
+          "AAB 001",
+          "AB34",
+          "789-LKJ",
+          "BBO-987",
+          "BBI-987",
+          "BWQ-777",
+          "BQW-987",
+          "BAI-789",
+          "BBI-789",
+          "BCI-789",
+          "BAO-789",
+          "BBO-789",
+          "BCO-789",
+          "ADI-789",
+          "ADO-789",
+          "KOC-1234",
+          "M1234567",
+          "W-12345",
+          "S BCF 83",
+          "X-D 1234",
+          "C-D 1234",
+          "HU 12-34",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["any"],
+        valid: ["FL 1", "FS AB 123"],
+        invalid: ["", "FL 999999", "FS AB 1234 A"],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["asdfasdf"],
+        error: ["FL 1", "FS AB 123", "FL 999999", "FS AB 1234 A"],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["sv-SE"],
+        valid: [
+          "ABC 123",
+          "ABC 12A",
+          "ABC123",
+          "ABC12A",
+          "A WORD",
+          "WORD",
+          "\u00c5SNA",
+          "EN VARG",
+          "CERISE",
+          "AA",
+          "ABCDEFG",
+          "\u00c5\u00c4\u00d6",
+          "\u00c5\u00c4\u00d6 \u00c5\u00c4\u00d6",
+        ],
+        invalid: [
+          "",
+          "    ",
+          "IQV 123",
+          "IQV123",
+          "ABI 12Q",
+          "\u00c5\u00c4\u00d6 123",
+          "\u00c5\u00c4\u00d6 12A",
+          "AB1 A23",
+          "AB1 12A",
+          "lower",
+          "abc 123",
+          "abc 12A",
+          "abc 12a",
+          "AbC 12a",
+          "WORDLONGERTHANSEVENCHARACTERS",
+          "A",
+          "ABC-123",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["en-IN"],
+        valid: [
+          "MH 04 AD 0001",
+          "HR26DQ0001",
+          "WB-04-ZU-2001",
+          "KL 18 X 5800",
+          "DL 4 CAF 4856",
+          "KA-41CE-5289",
+          "GJ 04-AD 5822",
+        ],
+        invalid: [
+          "mh04ad0045",
+          "invalidlicenseplate",
+          "4578",
+          "",
+          "GJ054GH4785",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["en-SG"],
+        valid: ["SGX 1234 A", "SGX-1234-A", "SGB1234Z"],
+        invalid: ["sg1234a", "invalidlicenseplate", "4578", "", "GJ054GH4785"],
+      });
+    });
+    it("should validate VAT numbers", () => {
+      test({
+        validator: "isVAT",
+        args: ["AT"],
+        valid: ["ATU12345678", "U12345678"],
+        invalid: ["AT 12345678", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["BE"],
+        valid: ["BE1234567890", "1234567890"],
+        invalid: ["BE 1234567890", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["BG"],
+        valid: ["BG1234567890", "1234567890", "BG123456789", "123456789"],
+        invalid: ["BG 1234567890", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["HR"],
+        valid: ["HR12345678901", "12345678901"],
+        invalid: ["HR 12345678901", "1234567890"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CY"],
+        valid: ["CY123456789", "123456789"],
+        invalid: ["CY 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CZ"],
+        valid: [
+          "CZ1234567890",
+          "CZ123456789",
+          "CZ12345678",
+          "1234567890",
+          "123456789",
+          "12345678",
+        ],
+        invalid: ["CZ 123456789", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["DK"],
+        valid: ["DK12345678", "12345678"],
+        invalid: ["DK 12345678", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["EE"],
+        valid: ["EE123456789", "123456789"],
+        invalid: ["EE 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["FI"],
+        valid: ["FI12345678", "12345678"],
+        invalid: ["FI 12345678", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["FR"],
+        valid: ["FRAA123456789", "AA123456789"],
+        invalid: ["FR AA123456789", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["DE"],
+        valid: ["DE123456789", "123456789"],
+        invalid: ["DE 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["EL"],
+        valid: ["EL123456789", "123456789"],
+        invalid: ["EL 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["HU"],
+        valid: ["HU12345678", "12345678"],
+        invalid: ["HU 12345678", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["IE"],
+        valid: ["IE1234567AW", "1234567AW"],
+        invalid: ["IE 1234567", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["IT"],
+        valid: ["IT12345678910", "12345678910"],
+        invalid: [
+          "IT12345678 910",
+          "IT 123456789101",
+          "IT123456789101",
+          "GB12345678910",
+          "IT123456789",
+        ],
+      });
+      test({
+        validator: "isVAT",
+        args: ["LV"],
+        valid: ["LV12345678901", "12345678901"],
+        invalid: ["LV 12345678901", "1234567890"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["LT"],
+        valid: [
+          "LT123456789012",
+          "123456789012",
+          "LT12345678901",
+          "12345678901",
+          "LT1234567890",
+          "1234567890",
+          "LT123456789",
+          "123456789",
+        ],
+        invalid: ["LT 123456789012", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["LU"],
+        valid: ["LU12345678", "12345678"],
+        invalid: ["LU 12345678", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["MT"],
+        valid: ["MT12345678", "12345678"],
+        invalid: ["MT 12345678", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["NL"],
+        valid: ["NL123456789B10", "123456789B10"],
+        invalid: [
+          "NL12345678 910",
+          "NL 123456789101",
+          "NL123456789B1",
+          "GB12345678910",
+          "NL123456789",
+        ],
+      });
+      test({
+        validator: "isVAT",
+        args: ["PL"],
+        valid: [
+          "PL1234567890",
+          "1234567890",
+          "PL123-456-78-90",
+          "123-456-78-90",
+          "PL123-45-67-890",
+          "123-45-67-890",
+        ],
+        invalid: ["PL 1234567890", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["PT"],
+        valid: ["PT123456789", "123456789"],
+        invalid: ["PT 123456789", "000000001"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["RO"],
+        valid: ["RO1234567890", "1234567890", "RO12", "12"],
+        invalid: ["RO 12", "1"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["SK"],
+        valid: ["SK1234567890", "1234567890"],
+        invalid: ["SK 1234567890", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["SI"],
+        valid: ["SI12345678", "12345678"],
+        invalid: ["SI 12345678", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["ES"],
+        valid: ["ESA1234567A", "A1234567A"],
+        invalid: ["ES 1234567A", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["SE"],
+        valid: ["SE123456789012", "123456789012"],
+        invalid: ["SE 123456789012", "12345678901"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["AL"],
+        valid: ["AL123456789A", "123456789A"],
+        invalid: ["AL 123456789A", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["MK"],
+        valid: ["MK1234567890123", "1234567890123"],
+        invalid: ["MK 1234567890123", "123456789012"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["AU"],
+        valid: [
+          "AU53004085616",
+          "53004085616",
+          "AU65613309809",
+          "65613309809",
+          "AU34118972998",
+          "34118972998",
+        ],
+        invalid: [
+          "AU65613309808",
+          "65613309808",
+          "AU55613309809",
+          "55613309809",
+          "AU65613319809",
+          "65613319809",
+          "AU34117972998",
+          "34117972998",
+          "AU12345678901",
+          "12345678901",
+          "AU 12345678901",
+          "1234567890",
+        ],
+      });
+      test({
+        validator: "isVAT",
+        args: ["BY"],
+        valid: ["\u0423\u041d\u041f 123456789", "123456789"],
+        invalid: ["BY 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CA"],
+        valid: ["CA123456789", "123456789"],
+        invalid: ["CA 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["IS"],
+        valid: ["IS123456", "12345"],
+        invalid: ["IS 12345", "1234"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["IN"],
+        valid: ["IN123456789012345", "123456789012345"],
+        invalid: ["IN 123456789012345", "12345678901234"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["ID"],
+        valid: [
+          "ID123456789012345",
+          "123456789012345",
+          "ID12.345.678.9-012.345",
+          "12.345.678.9-012.345",
+        ],
+        invalid: ["ID 123456789012345", "12345678901234"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["IL"],
+        valid: ["IL123456789", "123456789"],
+        invalid: ["IL 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["KZ"],
+        valid: ["KZ123456789012", "123456789012"],
+        invalid: ["KZ 123456789012", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["NZ"],
+        valid: ["NZ123456789", "123456789"],
+        invalid: ["NZ 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["NG"],
+        valid: [
+          "NG123456789012",
+          "123456789012",
+          "NG12345678-9012",
+          "12345678-9012",
+        ],
+        invalid: ["NG 123456789012", "12345678901"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["NO"],
+        valid: ["NO123456789MVA", "123456789MVA"],
+        invalid: ["NO 123456789MVA", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["PH"],
+        valid: [
+          "PH123456789012",
+          "123456789012",
+          "PH123 456 789 012",
+          "123 456 789 012",
+        ],
+        invalid: ["PH 123456789012", "12345678901"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["RU"],
+        valid: ["RU1234567890", "1234567890", "RU123456789012", "123456789012"],
+        invalid: ["RU 123456789012", "12345678901"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["SM"],
+        valid: ["SM12345", "12345"],
+        invalid: ["SM 12345", "1234"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["SA"],
+        valid: ["SA123456789012345", "123456789012345"],
+        invalid: ["SA 123456789012345", "12345678901234"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["RS"],
+        valid: ["RS123456789", "123456789"],
+        invalid: ["RS 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CH"],
+        valid: [
+          // strictly valid
+          "CHE-116.281.710 MWST",
+          "CHE-116.281.710 IVA",
+          "CHE-116.281.710 TVA",
+          // loosely valid presentation variants
+          "CHE 116 281 710 IVA", // all separators are spaces
+          "CHE-191.398.369MWST", // no space before suffix
+          "CHE-116281710 MWST", // no number separators
+          "CHE-116281710MWST", // no number separators and no space before suffix
+          "CHE105854263MWST", // no separators
+          "CHE-116.285.524", // no suffix (vat abbreviation)
+          "CHE116281710", // no suffix and separators
+          "116.281.710 TVA", // no prefix (CHE, ISO-3166-1 Alpha-3)
+          "116281710MWST", // no prefix and separators
+          "100.218.485", // no prefix and suffix
+          "123456788", // no prefix, separators and suffix
+        ],
+        invalid: [
+          "CH-116.281.710 MWST", // invalid prefix (should be CHE)
+          "CHE-116.281 MWST", // invalid number of digits (should be 9)
+          "CHE-123.456.789 MWST", // invalid last digit (should match the calculated check-number 8)
+          "CHE-123.356.780 MWST", // invalid check-number (there are no swiss UIDs with the calculated check number 10)
+          "CH-116.281.710 VAT", // invalid suffix (should be MWST, IVA or TVA)
+          "CHE-116/281/710 IVA", // invalid number separators (should be all dots or all spaces)
+        ],
+      });
+      test({
+        validator: "isVAT",
+        args: ["TR"],
+        valid: ["TR1234567890", "1234567890"],
+        invalid: ["TR 1234567890", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["UA"],
+        valid: ["UA123456789012", "123456789012"],
+        invalid: ["UA 123456789012", "12345678901"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["GB"],
+        valid: [
+          "GB999 9999 00",
+          "GB999 9999 96",
+          "GB999999999 999",
+          "GBGD000",
+          "GBGD499",
+          "GBHA500",
+          "GBHA999",
+        ],
+        invalid: [
+          "GB999999900",
+          "GB999999996",
+          "GB999 9999 97",
+          "GB999999999999",
+          "GB999999999 9999",
+          "GB9999999999 999",
+          "GBGD 000",
+          "GBGD 499",
+          "GBHA 500",
+          "GBHA 999",
+          "GBGD500",
+          "GBGD999",
+          "GBHA000",
+          "GBHA499",
+        ],
+      });
+      test({
+        validator: "isVAT",
+        args: ["UZ"],
+        valid: ["UZ123456789", "123456789"],
+        invalid: ["UZ 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["AR"],
+        valid: ["AR12345678901", "12345678901"],
+        invalid: ["AR 12345678901", "1234567890"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["BO"],
+        valid: ["BO1234567", "1234567"],
+        invalid: ["BO 1234567", "123456"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["BR"],
+        valid: [
+          "BR12.345.678/9012-34",
+          "12.345.678/9012-34",
+          "BR123.456.789-01",
+          "123.456.789-01",
+        ],
+        invalid: ["BR 12.345.678/9012-34", "12345678901234"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CL"],
+        valid: ["CL12345678-9", "12345678-9"],
+        invalid: ["CL 12345678-9", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CO"],
+        valid: ["CO1234567890", "1234567890"],
+        invalid: ["CO 1234567890", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CR"],
+        valid: ["CR123456789012", "123456789012", "CR123456789", "123456789"],
+        invalid: ["CR 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["EC"],
+        valid: ["EC1234567890123", "1234567890123"],
+        invalid: ["EC 1234567890123", "123456789012"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["SV"],
+        valid: ["SV1234-567890-123-1", "1234-567890-123-1"],
+        invalid: ["SV 1234-567890-123-1", "1234567890123"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["GT"],
+        valid: ["GT1234567-8", "1234567-8"],
+        invalid: ["GT 1234567-8", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["HN"],
+        valid: ["HN"],
+        invalid: ["HN "],
+      });
+      test({
+        validator: "isVAT",
+        args: ["MX"],
+        valid: [
+          "MXABCD123456EFG",
+          "ABCD123456EFG",
+          "MXABC123456DEF",
+          "ABC123456DEF",
+        ],
+        invalid: ["MX ABC123456EFG", "123456"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["NI"],
+        valid: ["NI123-456789-0123A", "123-456789-0123A"],
+        invalid: ["NI 123-456789-0123A", "1234567890123"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["PA"],
+        valid: ["PA"],
+        invalid: ["PA "],
+      });
+      test({
+        validator: "isVAT",
+        args: ["PY"],
+        valid: ["PY12345678-9", "12345678-9", "PY123456-7", "123456-7"],
+        invalid: ["PY 123456-7", "123456"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["PE"],
+        valid: ["PE12345678901", "12345678901"],
+        invalid: ["PE 12345678901", "1234567890"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["DO"],
+        valid: [
+          "DO12345678901",
+          "12345678901",
+          "DO123-4567890-1",
+          "123-4567890-1",
+          "DO123456789",
+          "123456789",
+          "DO1-23-45678-9",
+          "1-23-45678-9",
+        ],
+        invalid: ["DO 12345678901", "1234567890"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["UY"],
+        valid: ["UY123456789012", "123456789012"],
+        invalid: ["UY 123456789012", "12345678901"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["VE"],
+        valid: [
+          "VEJ-123456789",
+          "J-123456789",
+          "VEJ-12345678-9",
+          "J-12345678-9",
+        ],
+        invalid: ["VE J-123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["invalidCountryCode"],
+        error: ["GB999 9999 00"],
+      });
+    });
+    it("should validate mailto URI", () => {
+      test({
+        validator: "isMailtoURI",
+        valid: [
+          "mailto:?subject=something&[email protected]",
+          "mailto:?subject=something&[email protected],[email protected],",
+          "mailto:?subject=something&[email protected]",
+          "mailto:?subject=something&[email protected],[email protected]",
+          "mailto:[email protected],[email protected]",
+          "mailto:[email protected],[email protected]",
+          "mailto:[email protected]",
+          "mailto:[email protected]",
+          "mailto:?subject=something&body=something else",
+          "mailto:?subject=something&body=something else&[email protected],[email protected]",
+          "mailto:?subject=something&body=something else&[email protected],[email protected]",
+          "mailto:?subject=something&body=something else&[email protected]&[email protected],[email protected]",
+          "mailto:[email protected]",
+          "mailto:[email protected]?",
+          "mailto:[email protected]?subject=something",
+          "mailto:[email protected]?subject=something&[email protected]",
+          "mailto:[email protected]?subject=something&[email protected],[email protected],",
+          "mailto:[email protected]?subject=something&[email protected]",
+          "mailto:[email protected]?subject=something&[email protected],[email protected]",
+          "mailto:[email protected][email protected],[email protected]",
+          "mailto:[email protected][email protected],[email protected]",
+          "mailto:[email protected][email protected]",
+          "mailto:[email protected][email protected]&",
+          "mailto:[email protected]?subject=something&body=something else",
+          "mailto:[email protected]?subject=something&body=something else&[email protected],[email protected]",
+          "mailto:[email protected]?subject=something&body=something else&[email protected],[email protected]",
+          "mailto:[email protected]?subject=something&body=something else&[email protected]&[email protected],[email protected]",
+          "mailto:",
+        ],
+        invalid: [
+          "",
+          "something",
+          "[email protected]",
+          "mailto:?subject=okay&subject=444",
+          "mailto:?subject=something&wrong=888",
+          "mailto:somename@\uff47\uff4d\uff41\uff49\uff4c.com",
+          "mailto:[email protected]?cc=somename@\uff47\uff4d\uff41\uff49\uff4c.com",
+          "mailto:[email protected]?bcc=somename@\uff47\uff4d\uff41\uff49\uff4c.com",
+          "mailto:[email protected]?bcc=somename@\uff47\uff4d\uff41\uff49\uff4c.com&bcc",
+          "mailto:[email protected]?subject=anything&body=nothing&cc=&bcc=&key=",
+          "mailto:[email protected]?cc=somename",
+          "mailto:somename",
+          "mailto:[email protected]?subject=something&body=something else&[email protected]&[email protected],[email protected]&",
+          "mailto:?subject=something&body=something else&[email protected]&[email protected],[email protected]&",
+        ],
+      });
+    });
+  });
+
+  describe("isAfter", () => {
+    it("should validate dates against a start date", () => {
+      test({
+        validator: "isAfter",
+        args: [{ comparisonDate: "2011-08-03" }],
+        valid: ["2011-08-04", new Date(2011, 8, 10).toString()],
+        invalid: ["2010-07-02", "2011-08-03", new Date(0).toString(), "foo"],
+      });
+
+      test({
+        validator: "isAfter",
+        valid: ["2100-08-04", new Date(Date.now() + 86400000).toString()],
+        invalid: ["2010-07-02", new Date(0).toString()],
+      });
+
+      test({
+        validator: "isAfter",
+        args: [{ comparisonDate: "2011-08-03" }],
+        valid: ["2015-09-17"],
+        invalid: ["invalid date"],
+      });
+
+      test({
+        validator: "isAfter",
+        args: [{ comparisonDate: "invalid date" }],
+        invalid: ["invalid date", "2015-09-17"],
+      });
+      test({
+        validator: "isAfter",
+        args: [], // will fall back to the current date
+        valid: ["2100-08-04", new Date(Date.now() + 86400000).toString()],
+      });
+      test({
+        validator: "isAfter",
+        args: [undefined], // will fall back to the current date
+        valid: ["2100-08-04", new Date(Date.now() + 86400000).toString()],
+      });
+      test({
+        validator: "isAfter",
+        args: [{ comparisonDate: undefined }], // will fall back to the current date
+        valid: ["2100-08-04", new Date(Date.now() + 86400000).toString()],
+      });
+    });
+
+    describe("(legacy syntax)", () => {
+      it("should validate dates against a start date", () => {
+        test({
+          validator: "isAfter",
+          args: ["2011-08-03"],
+          valid: ["2011-08-04", new Date(2011, 8, 10).toString()],
+          invalid: ["2010-07-02", "2011-08-03", new Date(0).toString(), "foo"],
+        });
+
+        test({
+          validator: "isAfter",
+          valid: ["2100-08-04", new Date(Date.now() + 86400000).toString()],
+          invalid: ["2010-07-02", new Date(0).toString()],
+        });
+
+        test({
+          validator: "isAfter",
+          args: ["2011-08-03"],
+          valid: ["2015-09-17"],
+          invalid: ["invalid date"],
+        });
+
+        test({
+          validator: "isAfter",
+          args: ["invalid date"],
+          invalid: ["invalid date", "2015-09-17"],
+        });
+      });
+    });
+  });
+
+  describe("isBase64", () => {
+    it("should validate base64 strings with default options", () => {
+      test({
+        validator: "isBase64",
+        valid: [
+          "",
+          "Zg==",
+          "Zm8=",
+          "Zm9v",
+          "Zm9vYg==",
+          "Zm9vYmE=",
+          "Zm9vYmFy",
+          "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4=",
+          "Vml2YW11cyBmZXJtZW50dW0gc2VtcGVyIHBvcnRhLg==",
+          "U3VzcGVuZGlzc2UgbGVjdHVzIGxlbw==",
+          "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuMPNS1Ufof9EW/M98FNw" +
+            "UAKrwflsqVxaxQjBQnHQmiI7Vac40t8x7pIb8gLGV6wL7sBTJiPovJ0V7y7oc0Ye" +
+            "rhKh0Rm4skP2z/jHwwZICgGzBvA0rH8xlhUiTvcwDCJ0kc+fh35hNt8srZQM4619" +
+            "FTgB66Xmp4EtVyhpQV+t02g6NzK72oZI0vnAvqhpkxLeLiMCyrI416wHm5Tkukhx" +
+            "QmcL2a6hNOyu0ixX/x2kSFXApEnVrJ+/IxGyfyw8kf4N2IZpW5nEP847lpfj0SZZ" +
+            "Fwrd1mnfnDbYohX2zRptLy2ZUn06Qo9pkG5ntvFEPo9bfZeULtjYzIl6K8gJ2uGZ" +
+            "HQIDAQAB",
+        ],
+        invalid: [
+          "12345",
+          "Vml2YW11cyBmZXJtZtesting123",
+          "Zg=",
+          "Z===",
+          "Zm=8",
+          "=m9vYg==",
+          "Zm9vYmFy====",
+        ],
+      });
+
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: true }],
+        valid: [
+          "",
+          "bGFkaWVzIGFuZCBnZW50bGVtZW4sIHdlIGFyZSBmbG9hdGluZyBpbiBzcGFjZQ",
+          "1234",
+          "bXVtLW5ldmVyLXByb3Vk",
+          "PDw_Pz8-Pg",
+          "VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw",
+        ],
+        invalid: [
+          " AA",
+          "\tAA",
+          "\rAA",
+          "\nAA",
+          "This+isa/bad+base64Url==",
+          "0K3RgtC+INC30LDQutC+0LTQuNGA0L7QstCw0L3QvdCw0Y8g0YHRgtGA0L7QutCw",
+        ],
+        error: [null, undefined, {}, [], 42],
+      });
+
+      // for (let i = 0, str = '', encoded; i < 1000; i++) {
+      //   str += String.fromCharCode(Math.random() * 26 | 97); // eslint-disable-line no-bitwise
+      //   encoded = Buffer.from(str).toString('base64');
+      //   if (!validatorjs.isBase64(encoded)) {
+      //     let msg = format('validator.isBase64() failed with "%s"', encoded);
+      //     throw new Error(msg);
+      //   }
+      // }
+    });
+
+    it("should validate standard Base64 with padding", () => {
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: false, padding: true }],
+        valid: [
+          "",
+          "TWFu",
+          "TWE=",
+          "TQ==",
+          "SGVsbG8=",
+          "U29mdHdhcmU=",
+          "YW55IGNhcm5hbCBwbGVhc3VyZS4=",
+        ],
+        invalid: [
+          "TWF",
+          "TWE===",
+          "SGVsbG8@",
+          "SGVsbG8===",
+          "SGVsb G8=",
+          "====",
+        ],
+      });
+    });
+
+    it("should validate standard Base64 without padding", () => {
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: false, padding: false }],
+        valid: [
+          "",
+          "TWFu",
+          "TWE",
+          "TQ",
+          "SGVsbG8",
+          "U29mdHdhcmU",
+          "YW55IGNhcm5hbCBwbGVhc3VyZS4",
+        ],
+        invalid: [
+          "TWE=",
+          "TQ===",
+          "SGVsbG8@",
+          "SGVsbG8===",
+          "SGVsb G8",
+          "====",
+        ],
+      });
+    });
+
+    it("should validate Base64url with padding", () => {
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: true, padding: true }],
+        valid: [
+          "",
+          "SGVsbG8=",
+          "U29mdHdhcmU=",
+          "YW55IGNhcm5hbCBwbGVhc3VyZS4=",
+          "SGVsbG8-",
+          "SGVsbG8_",
+        ],
+        invalid: ["SGVsbG8===", "SGVsbG8@", "SGVsb G8=", "===="],
+      });
+    });
+
+    it("should validate Base64url without padding", () => {
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: true, padding: false }],
+        valid: [
+          "",
+          "SGVsbG8",
+          "U29mdHdhcmU",
+          "YW55IGNhcm5hbCBwbGVhc3VyZS4",
+          "SGVsbG8-",
+          "SGVsbG8_",
+        ],
+        invalid: ["SGVsbG8=", "SGVsbG8===", "SGVsbG8@", "SGVsb G8", "===="],
+      });
+    });
+
+    it("should handle mixed cases correctly", () => {
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: false, padding: true }],
+        valid: ["", "TWFu", "TWE=", "TQ=="],
+        invalid: ["TWE", "TQ=", "TQ==="],
+      });
+
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: true, padding: false }],
+        valid: ["", "SGVsbG8", "SGVsbG8-", "SGVsbG8_"],
+        invalid: ["SGVsbG8=", "SGVsbG8@", "SGVsb G8"],
+      });
+    });
+  });
+
+  describe("isBefore", () => {
+    describe("should validate dates a given end date", () => {
+      describe("new syntax", () => {
+        test({
+          validator: "isBefore",
+          args: [{ comparisonDate: "08/04/2011" }],
+          valid: ["2010-07-02", "2010-08-04", new Date(0).toString()],
+          invalid: ["08/04/2011", new Date(2011, 9, 10).toString()],
+        });
+        test({
+          validator: "isBefore",
+          args: [{ comparisonDate: new Date(2011, 7, 4).toString() }],
+          valid: ["2010-07-02", "2010-08-04", new Date(0).toString()],
+          invalid: ["08/04/2011", new Date(2011, 9, 10).toString()],
+        });
+        test({
+          validator: "isBefore",
+          args: [{ comparisonDate: "2011-08-03" }],
+          valid: ["1999-12-31"],
+          invalid: ["invalid date"],
+        });
+        test({
+          validator: "isBefore",
+          args: [{ comparisonDate: "invalid date" }],
+          invalid: ["invalid date", "1999-12-31"],
+        });
+      });
+
+      describe("legacy syntax", () => {
+        test({
+          validator: "isBefore",
+          args: ["08/04/2011"],
+          valid: ["2010-07-02", "2010-08-04", new Date(0).toString()],
+          invalid: ["08/04/2011", new Date(2011, 9, 10).toString()],
+        });
+        test({
+          validator: "isBefore",
+          args: [new Date(2011, 7, 4).toString()],
+          valid: ["2010-07-02", "2010-08-04", new Date(0).toString()],
+          invalid: ["08/04/2011", new Date(2011, 9, 10).toString()],
+        });
+        test({
+          validator: "isBefore",
+          args: ["2011-08-03"],
+          valid: ["1999-12-31"],
+          invalid: ["invalid date"],
+        });
+        test({
+          validator: "isBefore",
+          args: ["invalid date"],
+          invalid: ["invalid date", "1999-12-31"],
+        });
+      });
+    });
+
+    describe("should validate dates a default end date", () => {
+      describe("new syntax", () => {
+        test({
+          validator: "isBefore",
+          valid: [
+            "2000-08-04",
+            new Date(0).toString(),
+            new Date(Date.now() - 86400000).toString(),
+          ],
+          invalid: ["2100-07-02", new Date(2217, 10, 10).toString()],
+        });
+        test({
+          validator: "isBefore",
+          args: undefined, // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+        test({
+          validator: "isBefore",
+          args: [], // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+        test({
+          validator: "isBefore",
+          args: [undefined], // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+        test({
+          validator: "isBefore",
+          args: [{ comparisonDate: undefined }], // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+      });
+
+      describe("legacy syntax", () => {
+        test({
+          validator: "isBefore",
+          valid: [
+            "2000-08-04",
+            new Date(0).toString(),
+            new Date(Date.now() - 86400000).toString(),
+          ],
+          invalid: ["2100-07-02", new Date(2217, 10, 10).toString()],
+        });
+        test({
+          validator: "isBefore",
+          args: undefined, // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+        test({
+          validator: "isBefore",
+          args: [], // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+        test({
+          validator: "isBefore",
+          args: [undefined], // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+      });
+    });
+  });
+
+  describe("isFQDN", () => {
+    it("should validate domain names.", () => {
+      test({
+        validator: "isFQDN",
+        args: [],
+        valid: ["google.com"],
+        invalid: ["google.l33t"],
+      });
+      test({
+        validator: "isFQDN",
+        args: [{ allow_numeric_tld: true }],
+        valid: ["google.com", "google.l33t"],
+        invalid: [],
+      });
+    });
+  });
+
+  describe("isIP", () => {
+    it("should validate IP addresses", () => {
+      test({
+        validator: "isIP",
+        valid: [
+          "127.0.0.1",
+          "0.0.0.0",
+          "255.255.255.255",
+          "1.2.3.4",
+          "::1",
+          "2001:db8:0000:1:1:1:1:1",
+          "2001:db8:3:4::192.0.2.33",
+          "2001:41d0:2:a141::1",
+          "::ffff:127.0.0.1",
+          "::0000",
+          "0000::",
+          "1::",
+          "1111:1:1:1:1:1:1:1",
+          "fe80::a6db:30ff:fe98:e946",
+          "::",
+          "::8",
+          "::ffff:127.0.0.1",
+          "::ffff:255.255.255.255",
+          "::ffff:0:255.255.255.255",
+          "::2:3:4:5:6:7:8",
+          "::255.255.255.255",
+          "0:0:0:0:0:ffff:127.0.0.1",
+          "1:2:3:4:5:6:7::",
+          "1:2:3:4:5:6::8",
+          "1::7:8",
+          "1:2:3:4:5::7:8",
+          "1:2:3:4:5::8",
+          "1::6:7:8",
+          "1:2:3:4::6:7:8",
+          "1:2:3:4::8",
+          "1::5:6:7:8",
+          "1:2:3::5:6:7:8",
+          "1:2:3::8",
+          "1::4:5:6:7:8",
+          "1:2::4:5:6:7:8",
+          "1:2::8",
+          "1::3:4:5:6:7:8",
+          "1::8",
+          "fe80::7:8%eth0",
+          "fe80::7:8%1",
+          "64:ff9b::192.0.2.33",
+          "0:0:0:0:0:0:10.0.0.1",
+        ],
+        invalid: [
+          "abc",
+          "256.0.0.0",
+          "0.0.0.256",
+          "26.0.0.256",
+          "0200.200.200.200",
+          "200.0200.200.200",
+          "200.200.0200.200",
+          "200.200.200.0200",
+          "::banana",
+          "banana::",
+          "::1banana",
+          "::1::",
+          "1:",
+          ":1",
+          ":1:1:1::2",
+          "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1",
+          "::11111",
+          "11111:1:1:1:1:1:1:1",
+          "2001:db8:0000:1:1:1:1::1",
+          "0:0:0:0:0:0:ffff:127.0.0.1",
+          "0:0:0:0:ffff:127.0.0.1",
+          "BC:e4d5:c:e7b9::%40i0nccymtl9cwfKo.5vaeXLSGRMe:EDh2qs5wkhnPws5xQKqafjfAMm6wGFCJ.bVFsZfb",
+          "1dC:0DF8:62D:3AC::%KTatXocjaFVioS0RTNQl4mA.V151o0RSy.JIu-D-D8.d3171ZWsSJ7PK4YjkJCRN0F",
+        ],
+      });
+
+      test({
+        validator: "isIP",
+        args: [{ version: "invalid version" }],
+        valid: [],
+        invalid: ["127.0.0.1", "0.0.0.0", "255.255.255.255", "1.2.3.4"],
+      });
+
+      test({
+        validator: "isIP",
+        args: [{ version: null }],
+        valid: ["127.0.0.1", "0.0.0.0", "255.255.255.255", "1.2.3.4"],
+      });
+
+      test({
+        validator: "isIP",
+        args: [{ version: undefined }],
+        valid: ["127.0.0.1", "0.0.0.0", "255.255.255.255", "1.2.3.4"],
+      });
+
+      test({
+        validator: "isIP",
+        args: [{ version: 4 }],
+        valid: [
+          "127.0.0.1",
+          "0.0.0.0",
+          "255.255.255.255",
+          "1.2.3.4",
+          "255.0.0.1",
+          "0.0.1.1",
+        ],
+        invalid: [
+          "::1",
+          "2001:db8:0000:1:1:1:1:1",
+          "::ffff:127.0.0.1",
+          "137.132.10.01",
+          "0.256.0.256",
+          "255.256.255.256",
+        ],
+      });
+
+      test({
+        validator: "isIP",
+        args: [{ version: 6 }],
+        valid: [
+          "::1",
+          "2001:db8:0000:1:1:1:1:1",
+          "::ffff:127.0.0.1",
+          "fe80::1234%1",
+          "ff08::9abc%10",
+          "ff08::9abc%interface10",
+          "ff02::5678%pvc1.3",
+        ],
+        invalid: [
+          "127.0.0.1",
+          "0.0.0.0",
+          "255.255.255.255",
+          "1.2.3.4",
+          "::ffff:287.0.0.1",
+          "%",
+          "fe80::1234%",
+          "fe80::1234%1%3%4",
+          "fe80%fe80%",
+        ],
+      });
+
+      test({
+        validator: "isIP",
+        args: [{ version: 10 }],
+        valid: [],
+        invalid: [
+          "127.0.0.1",
+          "0.0.0.0",
+          "255.255.255.255",
+          "1.2.3.4",
+          "::1",
+          "2001:db8:0000:1:1:1:1:1",
+        ],
+      });
+    });
+
+    describe("legacy syntax", () => {
+      it("should validate IP addresses", () => {
+        test({
+          validator: "isIP",
+          valid: [
+            "127.0.0.1",
+            "0.0.0.0",
+            "255.255.255.255",
+            "1.2.3.4",
+            "::1",
+            "2001:db8:0000:1:1:1:1:1",
+            "2001:db8:3:4::192.0.2.33",
+            "2001:41d0:2:a141::1",
+            "::ffff:127.0.0.1",
+            "::0000",
+            "0000::",
+            "1::",
+            "1111:1:1:1:1:1:1:1",
+            "fe80::a6db:30ff:fe98:e946",
+            "::",
+            "::8",
+            "::ffff:127.0.0.1",
+            "::ffff:255.255.255.255",
+            "::ffff:0:255.255.255.255",
+            "::2:3:4:5:6:7:8",
+            "::255.255.255.255",
+            "0:0:0:0:0:ffff:127.0.0.1",
+            "1:2:3:4:5:6:7::",
+            "1:2:3:4:5:6::8",
+            "1::7:8",
+            "1:2:3:4:5::7:8",
+            "1:2:3:4:5::8",
+            "1::6:7:8",
+            "1:2:3:4::6:7:8",
+            "1:2:3:4::8",
+            "1::5:6:7:8",
+            "1:2:3::5:6:7:8",
+            "1:2:3::8",
+            "1::4:5:6:7:8",
+            "1:2::4:5:6:7:8",
+            "1:2::8",
+            "1::3:4:5:6:7:8",
+            "1::8",
+            "fe80::7:8%eth0",
+            "fe80::7:8%1",
+            "64:ff9b::192.0.2.33",
+            "0:0:0:0:0:0:10.0.0.1",
+          ],
+          invalid: [
+            "abc",
+            "256.0.0.0",
+            "0.0.0.256",
+            "26.0.0.256",
+            "0200.200.200.200",
+            "200.0200.200.200",
+            "200.200.0200.200",
+            "200.200.200.0200",
+            "::banana",
+            "banana::",
+            "::1banana",
+            "::1::",
+            "1:",
+            ":1",
+            ":1:1:1::2",
+            "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1",
+            "::11111",
+            "11111:1:1:1:1:1:1:1",
+            "2001:db8:0000:1:1:1:1::1",
+            "0:0:0:0:0:0:ffff:127.0.0.1",
+            "0:0:0:0:ffff:127.0.0.1",
+          ],
+        });
+        test({
+          validator: "isIP",
+          args: [4],
+          valid: [
+            "127.0.0.1",
+            "0.0.0.0",
+            "255.255.255.255",
+            "1.2.3.4",
+            "255.0.0.1",
+            "0.0.1.1",
+          ],
+          invalid: [
+            "::1",
+            "2001:db8:0000:1:1:1:1:1",
+            "::ffff:127.0.0.1",
+            "137.132.10.01",
+            "0.256.0.256",
+            "255.256.255.256",
+          ],
+        });
+        test({
+          validator: "isIP",
+          args: [6],
+          valid: [
+            "::1",
+            "2001:db8:0000:1:1:1:1:1",
+            "::ffff:127.0.0.1",
+            "fe80::1234%1",
+            "ff08::9abc%10",
+            "ff08::9abc%interface10",
+            "ff02::5678%pvc1.3",
+          ],
+          invalid: [
+            "127.0.0.1",
+            "0.0.0.0",
+            "255.255.255.255",
+            "1.2.3.4",
+            "::ffff:287.0.0.1",
+            "%",
+            "fe80::1234%",
+            "fe80::1234%1%3%4",
+            "fe80%fe80%",
+          ],
+        });
+        test({
+          validator: "isIP",
+          args: [10],
+          valid: [],
+          invalid: [
+            "127.0.0.1",
+            "0.0.0.0",
+            "255.255.255.255",
+            "1.2.3.4",
+            "::1",
+            "2001:db8:0000:1:1:1:1:1",
+          ],
+        });
+      });
+    });
+  });
+  describe("isISBN", () => {
+    it("should validate ISBNs", () => {
+      test({
+        validator: "isISBN",
+        args: [{ version: 10 }],
+        valid: [
+          "3836221195",
+          "3-8362-2119-5",
+          "3 8362 2119 5",
+          "1617290858",
+          "1-61729-085-8",
+          "1 61729 085-8",
+          "0007269706",
+          "0-00-726970-6",
+          "0 00 726970 6",
+          "3423214120",
+          "3-423-21412-0",
+          "3 423 21412 0",
+          "340101319X",
+          "3-401-01319-X",
+          "3 401 01319 X",
+        ],
+        invalid: [
+          "3423214121",
+          "3-423-21412-1",
+          "3 423 21412 1",
+          "978-3836221191",
+          "9783836221191",
+          "123456789a",
+          "foo",
+          "",
+        ],
+      });
+      test({
+        validator: "isISBN",
+        args: [{ version: 13 }],
+        valid: [
+          "9783836221191",
+          "978-3-8362-2119-1",
+          "978 3 8362 2119 1",
+          "9783401013190",
+          "978-3401013190",
+          "978 3401013190",
+          "9784873113685",
+          "978-4-87311-368-5",
+          "978 4 87311 368 5",
+        ],
+        invalid: [
+          "9783836221190",
+          "978-3-8362-2119-0",
+          "978 3 8362 2119 0",
+          "3836221195",
+          "3-8362-2119-5",
+          "3 8362 2119 5",
+          "01234567890ab",
+          "foo",
+          "",
+        ],
+      });
+      test({
+        validator: "isISBN",
+        valid: ["340101319X", "9784873113685"],
+        invalid: ["3423214121", "9783836221190"],
+      });
+      test({
+        validator: "isISBN",
+        args: [{ version: "foo" }],
+        invalid: ["340101319X", "9784873113685"],
+      });
+    });
+
+    describe("(legacy syntax)", () => {
+      it("should validate ISBNs", () => {
+        test({
+          validator: "isISBN",
+          args: [10],
+          valid: [
+            "3836221195",
+            "3-8362-2119-5",
+            "3 8362 2119 5",
+            "1617290858",
+            "1-61729-085-8",
+            "1 61729 085-8",
+            "0007269706",
+            "0-00-726970-6",
+            "0 00 726970 6",
+            "3423214120",
+            "3-423-21412-0",
+            "3 423 21412 0",
+            "340101319X",
+            "3-401-01319-X",
+            "3 401 01319 X",
+          ],
+          invalid: [
+            "3423214121",
+            "3-423-21412-1",
+            "3 423 21412 1",
+            "978-3836221191",
+            "9783836221191",
+            "123456789a",
+            "foo",
+            "",
+          ],
+        });
+        test({
+          validator: "isISBN",
+          args: [13],
+          valid: [
+            "9783836221191",
+            "978-3-8362-2119-1",
+            "978 3 8362 2119 1",
+            "9783401013190",
+            "978-3401013190",
+            "978 3401013190",
+            "9784873113685",
+            "978-4-87311-368-5",
+            "978 4 87311 368 5",
+          ],
+          invalid: [
+            "9783836221190",
+            "978-3-8362-2119-0",
+            "978 3 8362 2119 0",
+            "3836221195",
+            "3-8362-2119-5",
+            "3 8362 2119 5",
+            "01234567890ab",
+            "foo",
+            "",
+          ],
+        });
+        test({
+          validator: "isISBN",
+          valid: ["340101319X", "9784873113685"],
+          invalid: ["3423214121", "9783836221190"],
+        });
+        test({
+          validator: "isISBN",
+          args: ["foo"],
+          invalid: ["340101319X", "9784873113685"],
+        });
+      });
+    });
+  });
+
+  return assertionCount;
+}
+
+})();
+
+ValidatorJSBenchmark = __webpack_exports__;
+/******/ })()
+;
+//# sourceMappingURL=bundle.es6.js.map
\ No newline at end of file
diff --git a/validatorjs/dist/bundle.es6.js.map b/validatorjs/dist/bundle.es6.js.map
new file mode 100644
index 0000000..284fad9
--- /dev/null
+++ b/validatorjs/dist/bundle.es6.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"bundle.es6.js","mappings":"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;AACA,yBAAsB,mB;;;;;;;;ACnDT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,oCAAoC,mBAAO,CAAC,IAAc;AAC1D,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AC3IT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,qCAAqC,mBAAO,CAAC,IAAU;AACvD,qCAAqC,iCAAiC;AACtE,sBAAsB,2BAA2B,oGAAoG,mBAAmB,iBAAiB,sHAAsH;AAC/S;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AClBT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,4CAA4C,mBAAO,CAAC,IAAiB;AACrE,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACdT;;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AI,6BAA6B,qBAAqB,UAAU,YAAY,gKAAgK,uBAAuB,SAAS,kBAAkB,gBAAgB,oBAAoB,kBAAkB,uBAAuB,qBAAqB,gBAAgB,oBAAoB,MAAM,uCAAuC,UAAU;AAC9zB,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,yBAAsB,mB;;;;;;;;ACnFT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACvBT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AChBT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,4CAA4C,mBAAO,CAAC,IAAsB;AAC1E,oCAAoC,mBAAO,CAAC,IAAS;AACrD,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,8BAA8B,EAAE;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,EAAE,UAAU,EAAE,2BAA2B,EAAE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wBAAwB,EAAE,MAAM,EAAE,MAAM,EAAE;;AAE1C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA,wBAAwB,GAAG;AAC3B;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,2CAA2C;AAC3C,gCAAgC,EAAE,MAAM,EAAE;AAC1C,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,6BAA6B,GAAG;;AAEhC;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA,GAAG;AACH;AACA,4BAA4B,EAAE;AAC9B,4BAA4B,GAAG;AAC/B,4DAA4D;AAC5D;AACA,GAAG;AACH;AACA,mBAAmB,EAAE;;AAErB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC,4CAA4C;AAC5C,+CAA+C;AAC/C;AACA;AACA,GAAG;AACH;AACA;AACA,wBAAwB,GAAG;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,mBAAmB,EAAE;;AAErB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,EAAE,sDAAsD,EAAE;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,EAAE,QAAQ,EAAE,sDAAsD,EAAE;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,GAAG,KAAK,GAAG;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,IAAI,MAAM,EAAE;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA,uFAAuF;AACvF;AACA;AACA;AACA;AACA,mDAAmD,oDAAoD;AACvG;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,EAAE;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,4BAA4B,EAAE,OAAO,EAAE;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACzaT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE,mBAAmB,EAAE,SAAS,EAAE;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kBAAkB;AAC1D;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AC/DT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACjBT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACfT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE,oCAAoC,EAAE,sBAAsB,EAAE,IAAI,EAAE,aAAa,EAAE;AACnF,+CAA+C,GAAG;AAClD,0CAA0C,EAAE,IAAI,EAAE,aAAa,EAAE;AACjE,oCAAoC,EAAE,sBAAsB,EAAE,IAAI,EAAE,aAAa,EAAE;AACnF,+CAA+C,GAAG;AAClD,0CAA0C,EAAE,IAAI,EAAE,aAAa,EAAE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,yBAAsB,mB;;;;;;;;AC5CT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AChBT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,oBAAoB,GAAG,sBAAsB,GAAG,kBAAkB,GAAG,eAAe,GAAG,oBAAoB,GAAG,sBAAsB,GAAG,qBAAqB,GAAG,oBAAoB,GAAG,aAAa;AACnM,YAAY,aAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,qBAAqB;AACzC,0BAA0B,2BAA2B;AACrD;AACA;AACA;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C,4BAA4B,6BAA6B;AACzD;AACA;AACA;AACA;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AAC9B,WAAW,EAAE,KAAK,EAAE;AACpB;AACA;AACA;AACA,gBAAgB,EAAE,MAAM,EAAE;AAC1B;AACA;AACA,WAAW,EAAE,MAAM,EAAE;AACrB;AACA;AACA,WAAW,EAAE,IAAI,IAAI;AACrB;AACA,WAAW,EAAE,KAAK,EAAE;AACpB;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;ACzGa;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,+BAA+B;AACrE;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AC7BT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACjBT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA,gHAAgH,EAAE;AAClH;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC,+CAA+C,gDAAgD;AAC/F;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACtBT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6GAA6G,MAAM,KAAK;;AAExH;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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AClHT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE,mMAAmM,EAAE;AACrM,oMAAoM,EAAE;AACtM;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACrBT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,mCAAmC,mBAAO,CAAC,IAAQ;AACnD,qCAAqC,iCAAiC;AACtE,uBAAuB,IAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACjDT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,oCAAoC,mBAAO,CAAC,IAAc;AAC1D,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AClGT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE,0IAA0I,GAAG,YAAY,EAAE,qBAAqB,GAAG;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACjBT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACbT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,oCAAoC,mBAAO,CAAC,IAAc;AAC1D,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,GAAG,aAAa,GAAG;AACvH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,yBAAsB,mB;;;;;;;;AC3ET;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,oCAAoC,mBAAO,CAAC,IAAc;AAC1D,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AC3BT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA,4BAA4B,wBAAwB,sBAAsB,sBAAsB,wBAAwB,wBAAwB,wBAAwB,uBAAuB;AAC/L,WAAW;AACX;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AChBT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,aAAa,eAAe;AACnD;AACA;AACA;AACA;AACA;AACA,0BAA0B,EAAE,IAAI,GAAG,IAAI,GAAG;;AAE1C;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AC7ET;;AAEb,sBAAsB,2BAA2B,oGAAoG,mBAAmB,iBAAiB,sHAAsH;AAC/S,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,yCAAyC,mBAAO,CAAC,IAAmB;AACpE,qCAAqC,mBAAO,CAAC,IAAU;AACvD,yCAAyC,4EAA4E,2EAA2E,uCAAuC,gBAAgB,+BAA+B,8EAA8E,qBAAqB,+BAA+B,eAAe,wCAAwC,gKAAgK,WAAW;AAC1nB,qCAAqC,iCAAiC;AACtE,iCAAiC;AACjC,gCAAgC;AAChC,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,+BAA+B;AAC/B,iCAAiC;AACjC,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,kBAAkB,0BAA0B;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,uBAAuB;AACvB,qBAAqB,gCAAgC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;;AAEA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,UAAU;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,gCAAgC;AAC1F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA,sBAAsB,WAAW;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,GAAG;AACnB,gBAAgB,EAAE,GAAG,IAAI,GAAG,IAAI;AAChC,gBAAgB,EAAE;AAClB,qBAAqB,GAAG;AACxB,gBAAgB,EAAE,EAAE,IAAI,GAAG,EAAE;AAC7B,oBAAoB,EAAE;AACtB,6BAA6B,EAAE;AAC/B,gBAAgB,EAAE;AAClB,gBAAgB,GAAG,wDAAwD,EAAE;AAC7E,gBAAgB,EAAE,YAAY,IAAI;AAClC,gBAAgB,EAAE,KAAK,IAAI,GAAG,EAAE;AAChC,wCAAwC,EAAE;AAC1C,iBAAiB,IAAI,YAAY,EAAE;AACnC,qBAAqB,EAAE,gCAAgC,EAAE;AACzD,gBAAgB,EAAE,QAAQ,EAAE;AAC5B,gBAAgB,GAAG;AACnB,qBAAqB,GAAG,eAAe,EAAE,MAAM,EAAE,EAAE,EAAE;AACrD;AACA,gBAAgB,GAAG;AACnB,gBAAgB,GAAG;AACnB,iBAAiB,EAAE;AACnB,mBAAmB,EAAE,YAAY,E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AC3D,uCAAuC,mBAAO,CAAC,IAAgB;AAC/D,uCAAuC,mBAAO,CAAC,GAAgB;AAC/D,wCAAwC,mBAAO,CAAC,IAAiB;AACjE,wCAAwC,mBAAO,CAAC,GAAiB;AACjE,4CAA4C,mBAAO,CAAC,GAAqB;AACzE,6CAA6C,mBAAO,CAAC,IAAsB;AAC3E,qCAAqC,mBAAO,CAAC,IAAc;AAC3D,6CAA6C,mBAAO,CAAC,GAAsB;AAC3E,+CAA+C,mBAAO,CAAC,IAAwB;AAC/E,oCAAoC,mBAAO,CAAC,IAAa;AACzD,yCAAyC,4EAA4E,2EAA2E,uCAAuC,gBAAgB,+BAA+B,8EAA8E,qBAAqB,+BAA+B,eAAe,wCAAwC,gKAAgK,WAAW;AAC1nB,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kBAAe;AAC9B;AACA,yBAAsB,mB;;;;;;;;ACpOT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,wCAAwC,mBAAO,CAAC,IAAkB;AAClE,6CAA6C,mBAAO,CAAC,IAAuB;AAC5E,qCAAqC,mBAAO,CAAC,IAAU;AACvD,mCAAmC,mBAAO,CAAC,IAAQ;AACnD,oCAAoC,mBAAO,CAAC,IAAc;AAC1D,qCAAqC,iCAAiC;AACtE,gCAAgC;AAChC,8BAA8B;AAC9B,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AACzI,uCAAuC,kGAAkG,iBAAiB,wCAAwC,MAAM,yCAAyC,6BAA6B,UAAU,YAAY,kEAAkE,WAAW,YAAY,iBAAiB,UAAU,MAAM,2EAA2E,UAAU,oBAAoB;AACvgB,8BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACxKT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AAC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UAAU,IAAI,WAAW,EAAE,GAAG,EAAE,UAAU,IAAI,UAAU,IAAI,WAAW,EAAE,GAAG,EAAE;AAC7I;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,0BAA0B,8BAA8B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACrGT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,mBAAO,CAAC,IAAY;AACzD,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,yBAAsB,mB;;;;;;;;ACvBT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,uCAAuC,mBAAO,CAAC,IAAiB;AAChE,oCAAoC,mBAAO,CAAC,IAAc;AAC1D,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACvBT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE,uCAAuC,GAAG;AAC1C;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACdT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,uCAAuC,mBAAO,CAAC,IAAiB;AAChE,qCAAqC,iCAAiC;AACtE,sBAAsB,2BAA2B,oGAAoG,mBAAmB,iBAAiB,sHAAsH;AAC/S;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AC/BT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE,sBAAsB,2BAA2B,oGAAoG,mBAAmB,iBAAiB,sHAAsH;AAC/S;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AClCT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,wCAAwC,mBAAO,CAAC,IAAkB;AAClE,2CAA2C,mBAAO,CAAC,IAAgB;AACnE,qCAAqC,mBAAO,CAAC,IAAU;AACvD,mCAAmC,mBAAO,CAAC,IAAQ;AACnD,oCAAoC,mBAAO,CAAC,IAAc;AAC1D,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAmD,GAAG;AACtD;AACA;AACA,uDAAuD,GAAG;AAC1D;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wBAAwB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;AC7KT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,iBAAiB;AACjB,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA,C;;;;;;;;ACba;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACdT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,iBAAiB;AACjB,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA,C;;;;;;;;ACba;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE,gCAAgC,EAAE,QAAQ,GAAG;AAC7C,gCAAgC,GAAG;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACvDT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE,qBAAqB,GAAG;AACxB;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACdT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA,iCAAiC,wBAAwB,wBAAwB,sBAAsB,sBAAsB,yBAAyB,yBAAyB,uBAAuB;AACtM;AACA;AACA,yBAAsB,mB;;;;;;;;ACbT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,6CAA6C,mBAAO,CAAC,IAAuB;AAC5E,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAsB,mB;;;;;;;;ACrBT;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,2CAA2C,mBAAO,CAAC,IAAqB;AACxE,qCAAqC,iCAAiC;AACtE;AACA;AACA,mCAAmC,GAAG;AACtC;AACA;AACA,yBAAsB,mB;;;;;;UCbtB;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA,E;;;;;WCPA,wF;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D,E;;;;;;;;;;;;;ACNA;AACA;;AAEmD;;AAEnD;;AAEA;AACA;AACA,wDAAwD,KAAK;AAC7D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,sCAAsC;AACtD,0BAA0B,sCAAW;AACrC;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;;AAEO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,eAAe,GAAG,eAAe;AAC9C,aAAa,eAAe,GAAG,eAAe;AAC9C,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,eAAe,GAAG,gBAAgB;AAC/C,aAAa,eAAe,GAAG,gBAAgB;AAC/C,aAAa,eAAe,GAAG,eAAe;AAC9C,aAAa,eAAe,GAAG,eAAe,GAAG,eAAe,GAAG;AACnE;AACA,YAAY,GAAG,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA;AACA,aAAa,eAAe;AAC5B;AACA;AACA,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,8BAA8B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,4BAA4B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,8CAA8C;AAC/D;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,8CAA8C;AAC/D;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0BAA0B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,wBAAwB;AACzC;AACA;AACA,+BAA+B,0BAA0B;AACzD;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,iBAAiB,oBAAoB;AACrC;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,iBAAiB,6CAA6C;AAC9D;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,0BAA0B,eAAe;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,0BAA0B,cAAc;AACxC;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,0BAA0B,gBAAgB;AAC1C;AACA;AACA;AACA;AACA;AACA,6CAA6C,QAAQ;AACrD,OAAO;;AAEP;AACA;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA,OAAO;;AAEP;AACA;AACA,0BAA0B,cAAc;AACxC;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,oBAAoB;AACrC;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,6BAA6B;AAC9C;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,4BAA4B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,iCAAiC;AACjC,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,iBAAiB,6BAA6B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,iBAAiB,gDAAgD;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,iBAAiB,+CAA+C;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,iBAAiB,gDAAgD;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,4BAA4B;AAC7C;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,oCAAoC;AACrD;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,4BAA4B;AAC7C;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,gDAAgD;AACjE;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iCAAiC,YAAY,aAAa,kBAAkB;AAC5E;AACA;AACA,OAAO;AACP,aAAa,yCAAyC;AACtD,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,4CAA4C;AAC7D;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,mBAAmB,gBAAgB,MAAM;AACzC;AACA,aAAa,cAAc;AAC3B,aAAa,gBAAgB;AAC7B;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,wBAAwB;AACzC,mBAAmB,gBAAgB,MAAM;AACzC;AACA,aAAa,cAAc;AAC3B,aAAa,gBAAgB;AAC7B,aAAa,cAAc;AAC3B;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;AAC9D,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,oBAAoB;AACrC;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,iBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,qCAAqC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,0BAA0B;AAC1B,8CAA8C;AAC9C,6BAA6B;AAC7B,8BAA8B;AAC9B,8BAA8B;AAC9B;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,0BAA0B;AAC1B,wFAAwF;AACxF;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,0BAA0B;AAC1B,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,gCAAgC,eAAe;AAC/C,gCAAgC,oBAAoB;AACpD,gCAAgC,oBAAoB;AACpD,gCAAgC,sBAAsB;AACtD,gCAAgC,sBAAsB;AACtD;AACA,uBAAuB;AACvB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,yBAAyB;AACzB,0BAA0B;AAC1B,sBAAsB;AACtB;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,+BAA+B;AAC3C;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,wCAAwC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,+BAA+B;AAC3C;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,2DAA2D;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,2CAA2C;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,mDAAmD;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,2CAA2C;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,mDAAmD;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA,iBAAiB,8BAA8B;AAC/C;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,8BAA8B;AAC/C;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,gCAAgC;AACjD;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,2BAA2B;AAC5C;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,OAAO;;AAEP,4CAA4C,UAAU;AACtD,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,+BAA+B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,gCAAgC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,8BAA8B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,+BAA+B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,iBAAiB,+BAA+B;AAChD;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,+BAA+B;AAChD;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,mBAAmB,8BAA8B;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA,mBAAmB,iDAAiD;AACpE;AACA;AACA,SAAS;AACT;AACA;AACA,mBAAmB,8BAA8B;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA,mBAAmB,gCAAgC;AACnD;AACA,SAAS;AACT,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,mBAAmB,2BAA2B;AAC9C;AACA,SAAS;AACT,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,4BAA4B;AAC7C;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,eAAe;AAChC;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,oBAAoB;AACrC;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;;AAEH;AACA","sources":["webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isEthereumAddress.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/trim.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/blacklist.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/stripLow.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISSN.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isWhitelisted.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isLicensePlate.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/equals.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/nullUndefinedCheck.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/toInt.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isFloat.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isCreditCard.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/normalizeEmail.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isAfter.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMongoId.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/toFloat.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isVariableWidth.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/checkHost.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isRFC3339.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isNumeric.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBoolean.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISRC.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/whitelist.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isHexadecimal.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isEmpty.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/ltrim.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMailtoURI.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/rtrim.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/matches.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isIdentityCard.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISIN.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMultibyte.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO31661Numeric.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMACAddress.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/toBoolean.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/alpha.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/assertString.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO15924.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isPassportNumber.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isSurrogatePair.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isDataURI.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isLuhnNumber.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/merge.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isIBAN.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isDivisibleBy.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/toDate.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO31661Alpha3.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isPort.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isPostalCode.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isHash.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isAscii.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isAbaRouting.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMimeType.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/includesString.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isHexColor.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/algorithms.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isUUID.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMobilePhone.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBIC.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isVAT.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isIP.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isRgbColor.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isUppercase.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/multilineRegex.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBtcAddress.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isJSON.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/toString.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO6346.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isLatLong.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isDecimal.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isInt.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO8601.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isByteLength.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isAlpha.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBase58.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBefore.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isCurrency.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isLocale.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isHSL.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isIPRange.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isStrongPassword.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMagnetURI.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isLowercase.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isFQDN.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBase32.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/unescape.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isEAN.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isTaxID.js","webpack://ValidatorJSBenchmark/./node_modules/validator/index.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isURL.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO6391.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBase64.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO4217.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO31661Alpha2.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isIMEI.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/includesArray.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isTime.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isAlphanumeric.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isDate.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isJWT.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/contains.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isSlug.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isIn.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isLength.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isEmail.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isHalfWidth.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isOctal.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isFullWidth.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISBN.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMD5.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/escape.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isSemVer.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isULID.js","webpack://ValidatorJSBenchmark/webpack/bootstrap","webpack://ValidatorJSBenchmark/webpack/runtime/define property getters","webpack://ValidatorJSBenchmark/webpack/runtime/hasOwnProperty shorthand","webpack://ValidatorJSBenchmark/webpack/runtime/make namespace object","webpack://ValidatorJSBenchmark/./src/test.mjs"],"sourcesContent":["\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isEthereumAddress;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar eth = /^(0x)[0-9a-f]{40}$/i;\nfunction isEthereumAddress(str) {\n  (0, _assertString.default)(str);\n  return eth.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = trim;\nvar _rtrim = _interopRequireDefault(require(\"./rtrim\"));\nvar _ltrim = _interopRequireDefault(require(\"./ltrim\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction trim(str, chars) {\n  return (0, _rtrim.default)((0, _ltrim.default)(str, chars), chars);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = blacklist;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction blacklist(str, chars) {\n  (0, _assertString.default)(str);\n  return str.replace(new RegExp(\"[\".concat(chars, \"]+\"), 'g'), '');\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = stripLow;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _blacklist = _interopRequireDefault(require(\"./blacklist\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction stripLow(str, keep_new_lines) {\n  (0, _assertString.default)(str);\n  var chars = keep_new_lines ? '\\\\x00-\\\\x09\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F' : '\\\\x00-\\\\x1F\\\\x7F';\n  return (0, _blacklist.default)(str, chars);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISSN;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar issn = '^\\\\d{4}-?\\\\d{3}[\\\\dX]$';\nfunction isISSN(str) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  (0, _assertString.default)(str);\n  var testIssn = issn;\n  testIssn = options.require_hyphen ? testIssn.replace('?', '') : testIssn;\n  testIssn = options.case_sensitive ? new RegExp(testIssn) : new RegExp(testIssn, 'i');\n  if (!testIssn.test(str)) {\n    return false;\n  }\n  var digits = str.replace('-', '').toUpperCase();\n  var checksum = 0;\n  for (var i = 0; i < digits.length; i++) {\n    var digit = digits[i];\n    checksum += (digit === 'X' ? 10 : +digit) * (8 - i);\n  }\n  return checksum % 11 === 0;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isWhitelisted;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isWhitelisted(str, chars) {\n  (0, _assertString.default)(str);\n  for (var i = str.length - 1; i >= 0; i--) {\n    if (chars.indexOf(str[i]) === -1) {\n      return false;\n    }\n  }\n  return true;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLicensePlate;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar validators = {\n  'cs-CZ': function csCZ(str) {\n    return /^(([ABCDEFHIJKLMNPRSTUVXYZ]|[0-9])-?){5,8}$/.test(str);\n  },\n  'de-DE': function deDE(str) {\n    return /^((A|AA|AB|AC|AE|AH|AK|AM|AN|AÖ|AP|AS|AT|AU|AW|AZ|B|BA|BB|BC|BE|BF|BH|BI|BK|BL|BM|BN|BO|BÖ|BS|BT|BZ|C|CA|CB|CE|CO|CR|CW|D|DA|DD|DE|DH|DI|DL|DM|DN|DO|DU|DW|DZ|E|EA|EB|ED|EE|EF|EG|EH|EI|EL|EM|EN|ER|ES|EU|EW|F|FB|FD|FF|FG|FI|FL|FN|FO|FR|FS|FT|FÜ|FW|FZ|G|GA|GC|GD|GE|GF|GG|GI|GK|GL|GM|GN|GÖ|GP|GR|GS|GT|GÜ|GV|GW|GZ|H|HA|HB|HC|HD|HE|HF|HG|HH|HI|HK|HL|HM|HN|HO|HP|HR|HS|HU|HV|HX|HY|HZ|IK|IL|IN|IZ|J|JE|JL|K|KA|KB|KC|KE|KF|KG|KH|KI|KK|KL|KM|KN|KO|KR|KS|KT|KU|KW|KY|L|LA|LB|LC|LD|LF|LG|LH|LI|LL|LM|LN|LÖ|LP|LR|LU|M|MA|MB|MC|MD|ME|MG|MH|MI|MK|ML|MM|MN|MO|MQ|MR|MS|MÜ|MW|MY|MZ|N|NB|ND|NE|NF|NH|NI|NK|NM|NÖ|NP|NR|NT|NU|NW|NY|NZ|OA|OB|OC|OD|OE|OF|OG|OH|OK|OL|OP|OS|OZ|P|PA|PB|PE|PF|PI|PL|PM|PN|PR|PS|PW|PZ|R|RA|RC|RD|RE|RG|RH|RI|RL|RM|RN|RO|RP|RS|RT|RU|RV|RW|RZ|S|SB|SC|SE|SG|SI|SK|SL|SM|SN|SO|SP|SR|ST|SU|SW|SY|SZ|TE|TF|TG|TO|TP|TR|TS|TT|TÜ|ÜB|UE|UH|UL|UM|UN|V|VB|VG|VK|VR|VS|W|WA|WB|WE|WF|WI|WK|WL|WM|WN|WO|WR|WS|WT|WÜ|WW|WZ|Z|ZE|ZI|ZP|ZR|ZW|ZZ)[- ]?[A-Z]{1,2}[- ]?\\d{1,4}|(ABG|ABI|AIB|AIC|ALF|ALZ|ANA|ANG|ANK|APD|ARN|ART|ASL|ASZ|AUR|AZE|BAD|BAR|BBG|BCH|BED|BER|BGD|BGL|BID|BIN|BIR|BIT|BIW|BKS|BLB|BLK|BNA|BOG|BOH|BOR|BOT|BRA|BRB|BRG|BRK|BRL|BRV|BSB|BSK|BTF|BÜD|BUL|BÜR|BÜS|BÜZ|CAS|CHA|CLP|CLZ|COC|COE|CUX|DAH|DAN|DAU|DBR|DEG|DEL|DGF|DIL|DIN|DIZ|DKB|DLG|DON|DUD|DÜW|EBE|EBN|EBS|ECK|EIC|EIL|EIN|EIS|EMD|EMS|ERB|ERH|ERK|ERZ|ESB|ESW|FDB|FDS|FEU|FFB|FKB|FLÖ|FOR|FRG|FRI|FRW|FTL|FÜS|GAN|GAP|GDB|GEL|GEO|GER|GHA|GHC|GLA|GMN|GNT|GOA|GOH|GRA|GRH|GRI|GRM|GRZ|GTH|GUB|GUN|GVM|HAB|HAL|HAM|HAS|HBN|HBS|HCH|HDH|HDL|HEB|HEF|HEI|HER|HET|HGN|HGW|HHM|HIG|HIP|HMÜ|HOG|HOH|HOL|HOM|HOR|HÖS|HOT|HRO|HSK|HST|HVL|HWI|IGB|ILL|JÜL|KEH|KEL|KEM|KIB|KLE|KLZ|KÖN|KÖT|KÖZ|KRU|KÜN|KUS|KYF|LAN|LAU|LBS|LBZ|LDK|LDS|LEO|LER|LEV|LIB|LIF|LIP|LÖB|LOS|LRO|LSZ|LÜN|LUP|LWL|MAB|MAI|MAK|MAL|MED|MEG|MEI|MEK|MEL|MER|MET|MGH|MGN|MHL|MIL|MKK|MOD|MOL|MON|MOS|MSE|MSH|MSP|MST|MTK|MTL|MÜB|MÜR|MYK|MZG|NAB|NAI|NAU|NDH|NEA|NEB|NEC|NEN|NES|NEW|NMB|NMS|NOH|NOL|NOM|NOR|NVP|NWM|OAL|OBB|OBG|OCH|OHA|ÖHR|OHV|OHZ|OPR|OSL|OVI|OVL|OVP|PAF|PAN|PAR|PCH|PEG|PIR|PLÖ|PRÜ|QFT|QLB|RDG|REG|REH|REI|RID|RIE|ROD|ROF|ROK|ROL|ROS|ROT|ROW|RSL|RÜD|RÜG|SAB|SAD|SAN|SAW|SBG|SBK|SCZ|SDH|SDL|SDT|SEB|SEE|SEF|SEL|SFB|SFT|SGH|SHA|SHG|SHK|SHL|SIG|SIM|SLE|SLF|SLK|SLN|SLS|SLÜ|SLZ|SMÜ|SOB|SOG|SOK|SÖM|SON|SPB|SPN|SRB|SRO|STA|STB|STD|STE|STL|SUL|SÜW|SWA|SZB|TBB|TDO|TET|TIR|TÖL|TUT|UEM|UER|UFF|USI|VAI|VEC|VER|VIB|VIE|VIT|VOH|WAF|WAK|WAN|WAR|WAT|WBS|WDA|WEL|WEN|WER|WES|WHV|WIL|WIS|WIT|WIZ|WLG|WMS|WND|WOB|WOH|WOL|WOR|WOS|WRN|WSF|WST|WSW|WTL|WTM|WUG|WÜM|WUN|WUR|WZL|ZEL|ZIG)[- ]?(([A-Z][- ]?\\d{1,4})|([A-Z]{2}[- ]?\\d{1,3})))[- ]?(E|H)?$/.test(str);\n  },\n  'de-LI': function deLI(str) {\n    return /^FL[- ]?\\d{1,5}[UZ]?$/.test(str);\n  },\n  'en-IN': function enIN(str) {\n    return /^[A-Z]{2}[ -]?[0-9]{1,2}(?:[ -]?[A-Z])(?:[ -]?[A-Z]*)?[ -]?[0-9]{4}$/.test(str);\n  },\n  'en-SG': function enSG(str) {\n    return /^[A-Z]{3}[ -]?[\\d]{4}[ -]?[A-Z]{1}$/.test(str);\n  },\n  'es-AR': function esAR(str) {\n    return /^(([A-Z]{2} ?[0-9]{3} ?[A-Z]{2})|([A-Z]{3} ?[0-9]{3}))$/.test(str);\n  },\n  'fi-FI': function fiFI(str) {\n    return /^(?=.{4,7})(([A-Z]{1,3}|[0-9]{1,3})[\\s-]?([A-Z]{1,3}|[0-9]{1,5}))$/.test(str);\n  },\n  'hu-HU': function huHU(str) {\n    return /^((((?!AAA)(([A-NPRSTVZWXY]{1})([A-PR-Z]{1})([A-HJ-NPR-Z]))|(A[ABC]I)|A[ABC]O|A[A-W]Q|BPI|BPO|UCO|UDO|XAO)-(?!000)\\d{3})|(M\\d{6})|((CK|DT|CD|HC|H[ABEFIKLMNPRSTVX]|MA|OT|R[A-Z]) \\d{2}-\\d{2})|(CD \\d{3}-\\d{3})|(C-(C|X) \\d{4})|(X-(A|B|C) \\d{4})|(([EPVZ]-\\d{5}))|(S A[A-Z]{2} \\d{2})|(SP \\d{2}-\\d{2}))$/.test(str);\n  },\n  'pt-BR': function ptBR(str) {\n    return /^[A-Z]{3}[ -]?[0-9][A-Z][0-9]{2}|[A-Z]{3}[ -]?[0-9]{4}$/.test(str);\n  },\n  'pt-PT': function ptPT(str) {\n    return /^(([A-Z]{2}[ -·]?[0-9]{2}[ -·]?[0-9]{2})|([0-9]{2}[ -·]?[A-Z]{2}[ -·]?[0-9]{2})|([0-9]{2}[ -·]?[0-9]{2}[ -·]?[A-Z]{2})|([A-Z]{2}[ -·]?[0-9]{2}[ -·]?[A-Z]{2}))$/.test(str);\n  },\n  'sq-AL': function sqAL(str) {\n    return /^[A-Z]{2}[- ]?((\\d{3}[- ]?(([A-Z]{2})|T))|(R[- ]?\\d{3}))$/.test(str);\n  },\n  'sv-SE': function svSE(str) {\n    return /^[A-HJ-PR-UW-Z]{3} ?[\\d]{2}[A-HJ-PR-UW-Z1-9]$|(^[A-ZÅÄÖ ]{2,7}$)/.test(str.trim());\n  },\n  'en-PK': function enPK(str) {\n    return /(^[A-Z]{2}((\\s|-){0,1})[0-9]{3,4}((\\s|-)[0-9]{2}){0,1}$)|(^[A-Z]{3}((\\s|-){0,1})[0-9]{3,4}((\\s|-)[0-9]{2}){0,1}$)|(^[A-Z]{4}((\\s|-){0,1})[0-9]{3,4}((\\s|-)[0-9]{2}){0,1}$)|(^[A-Z]((\\s|-){0,1})[0-9]{4}((\\s|-)[0-9]{2}){0,1}$)/.test(str.trim());\n  }\n};\nfunction isLicensePlate(str, locale) {\n  (0, _assertString.default)(str);\n  if (locale in validators) {\n    return validators[locale](str);\n  } else if (locale === 'any') {\n    for (var key in validators) {\n      /* eslint guard-for-in: 0 */\n      var validator = validators[key];\n      if (validator(str)) {\n        return true;\n      }\n    }\n    return false;\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = equals;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction equals(str, comparison) {\n  (0, _assertString.default)(str);\n  return str === comparison;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isNullOrUndefined;\nfunction isNullOrUndefined(value) {\n  return value === null || value === undefined;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toInt;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction toInt(str, radix) {\n  (0, _assertString.default)(str);\n  return parseInt(str, radix || 10);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isFloat;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _nullUndefinedCheck = _interopRequireDefault(require(\"./util/nullUndefinedCheck\"));\nvar _alpha = require(\"./alpha\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isFloat(str, options) {\n  (0, _assertString.default)(str);\n  options = options || {};\n  var float = new RegExp(\"^(?:[-+])?(?:[0-9]+)?(?:\\\\\".concat(options.locale ? _alpha.decimal[options.locale] : '.', \"[0-9]*)?(?:[eE][\\\\+\\\\-]?(?:[0-9]+))?$\"));\n  if (str === '' || str === '.' || str === ',' || str === '-' || str === '+') {\n    return false;\n  }\n  var value = parseFloat(str.replace(',', '.'));\n  return float.test(str) && (!options.hasOwnProperty('min') || (0, _nullUndefinedCheck.default)(options.min) || value >= options.min) && (!options.hasOwnProperty('max') || (0, _nullUndefinedCheck.default)(options.max) || value <= options.max) && (!options.hasOwnProperty('lt') || (0, _nullUndefinedCheck.default)(options.lt) || value < options.lt) && (!options.hasOwnProperty('gt') || (0, _nullUndefinedCheck.default)(options.gt) || value > options.gt);\n}\nvar locales = exports.locales = Object.keys(_alpha.decimal);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isCreditCard;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _isLuhnNumber = _interopRequireDefault(require(\"./isLuhnNumber\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar cards = {\n  amex: /^3[47][0-9]{13}$/,\n  dinersclub: /^3(?:0[0-5]|[68][0-9])[0-9]{11}$/,\n  discover: /^6(?:011|5[0-9][0-9])[0-9]{12,15}$/,\n  jcb: /^(?:2131|1800|35\\d{3})\\d{11}$/,\n  mastercard: /^5[1-5][0-9]{2}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$/,\n  // /^[25][1-7][0-9]{14}$/;\n  unionpay: /^(6[27][0-9]{14}|^(81[0-9]{14,17}))$/,\n  visa: /^(?:4[0-9]{12})(?:[0-9]{3,6})?$/\n};\nvar allCards = function () {\n  var tmpCardsArray = [];\n  for (var cardProvider in cards) {\n    // istanbul ignore else\n    if (cards.hasOwnProperty(cardProvider)) {\n      tmpCardsArray.push(cards[cardProvider]);\n    }\n  }\n  return tmpCardsArray;\n}();\nfunction isCreditCard(card) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  (0, _assertString.default)(card);\n  var provider = options.provider;\n  var sanitized = card.replace(/[- ]+/g, '');\n  if (provider && provider.toLowerCase() in cards) {\n    // specific provider in the list\n    if (!cards[provider.toLowerCase()].test(sanitized)) {\n      return false;\n    }\n  } else if (provider && !(provider.toLowerCase() in cards)) {\n    /* specific provider not in the list */\n    throw new Error(\"\".concat(provider, \" is not a valid credit card provider.\"));\n  } else if (!allCards.some(function (cardProvider) {\n    return cardProvider.test(sanitized);\n  })) {\n    // no specific provider\n    return false;\n  }\n  return (0, _isLuhnNumber.default)(card);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = normalizeEmail;\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar default_normalize_email_options = {\n  // The following options apply to all email addresses\n  // Lowercases the local part of the email address.\n  // Please note this may violate RFC 5321 as per http://stackoverflow.com/a/9808332/192024).\n  // The domain is always lowercased, as per RFC 1035\n  all_lowercase: true,\n  // The following conversions are specific to GMail\n  // Lowercases the local part of the GMail address (known to be case-insensitive)\n  gmail_lowercase: true,\n  // Removes dots from the local part of the email address, as that's ignored by GMail\n  gmail_remove_dots: true,\n  // Removes the subaddress (e.g. \"+foo\") from the email address\n  gmail_remove_subaddress: true,\n  // Conversts the googlemail.com domain to gmail.com\n  gmail_convert_googlemaildotcom: true,\n  // The following conversions are specific to Outlook.com / Windows Live / Hotmail\n  // Lowercases the local part of the Outlook.com address (known to be case-insensitive)\n  outlookdotcom_lowercase: true,\n  // Removes the subaddress (e.g. \"+foo\") from the email address\n  outlookdotcom_remove_subaddress: true,\n  // The following conversions are specific to Yahoo\n  // Lowercases the local part of the Yahoo address (known to be case-insensitive)\n  yahoo_lowercase: true,\n  // Removes the subaddress (e.g. \"-foo\") from the email address\n  yahoo_remove_subaddress: true,\n  // The following conversions are specific to Yandex\n  // Lowercases the local part of the Yandex address (known to be case-insensitive)\n  yandex_lowercase: true,\n  // all yandex domains are equal, this explicitly sets the domain to 'yandex.ru'\n  yandex_convert_yandexru: true,\n  // The following conversions are specific to iCloud\n  // Lowercases the local part of the iCloud address (known to be case-insensitive)\n  icloud_lowercase: true,\n  // Removes the subaddress (e.g. \"+foo\") from the email address\n  icloud_remove_subaddress: true\n};\n\n// List of domains used by iCloud\nvar icloud_domains = ['icloud.com', 'me.com'];\n\n// List of domains used by Outlook.com and its predecessors\n// This list is likely incomplete.\n// Partial reference:\n// https://blogs.office.com/2013/04/17/outlook-com-gets-two-step-verification-sign-in-by-alias-and-new-international-domains/\nvar outlookdotcom_domains = ['hotmail.at', 'hotmail.be', 'hotmail.ca', 'hotmail.cl', 'hotmail.co.il', 'hotmail.co.nz', 'hotmail.co.th', 'hotmail.co.uk', 'hotmail.com', 'hotmail.com.ar', 'hotmail.com.au', 'hotmail.com.br', 'hotmail.com.gr', 'hotmail.com.mx', 'hotmail.com.pe', 'hotmail.com.tr', 'hotmail.com.vn', 'hotmail.cz', 'hotmail.de', 'hotmail.dk', 'hotmail.es', 'hotmail.fr', 'hotmail.hu', 'hotmail.id', 'hotmail.ie', 'hotmail.in', 'hotmail.it', 'hotmail.jp', 'hotmail.kr', 'hotmail.lv', 'hotmail.my', 'hotmail.ph', 'hotmail.pt', 'hotmail.sa', 'hotmail.sg', 'hotmail.sk', 'live.be', 'live.co.uk', 'live.com', 'live.com.ar', 'live.com.mx', 'live.de', 'live.es', 'live.eu', 'live.fr', 'live.it', 'live.nl', 'msn.com', 'outlook.at', 'outlook.be', 'outlook.cl', 'outlook.co.il', 'outlook.co.nz', 'outlook.co.th', 'outlook.com', 'outlook.com.ar', 'outlook.com.au', 'outlook.com.br', 'outlook.com.gr', 'outlook.com.pe', 'outlook.com.tr', 'outlook.com.vn', 'outlook.cz', 'outlook.de', 'outlook.dk', 'outlook.es', 'outlook.fr', 'outlook.hu', 'outlook.id', 'outlook.ie', 'outlook.in', 'outlook.it', 'outlook.jp', 'outlook.kr', 'outlook.lv', 'outlook.my', 'outlook.ph', 'outlook.pt', 'outlook.sa', 'outlook.sg', 'outlook.sk', 'passport.com'];\n\n// List of domains used by Yahoo Mail\n// This list is likely incomplete\nvar yahoo_domains = ['rocketmail.com', 'yahoo.ca', 'yahoo.co.uk', 'yahoo.com', 'yahoo.de', 'yahoo.fr', 'yahoo.in', 'yahoo.it', 'ymail.com'];\n\n// List of domains used by yandex.ru\nvar yandex_domains = ['yandex.ru', 'yandex.ua', 'yandex.kz', 'yandex.com', 'yandex.by', 'ya.ru'];\n\n// replace single dots, but not multiple consecutive dots\nfunction dotsReplacer(match) {\n  if (match.length > 1) {\n    return match;\n  }\n  return '';\n}\nfunction normalizeEmail(email, options) {\n  options = (0, _merge.default)(options, default_normalize_email_options);\n  var raw_parts = email.split('@');\n  var domain = raw_parts.pop();\n  var user = raw_parts.join('@');\n  var parts = [user, domain];\n\n  // The domain is always lowercased, as it's case-insensitive per RFC 1035\n  parts[1] = parts[1].toLowerCase();\n  if (parts[1] === 'gmail.com' || parts[1] === 'googlemail.com') {\n    // Address is GMail\n    if (options.gmail_remove_subaddress) {\n      parts[0] = parts[0].split('+')[0];\n    }\n    if (options.gmail_remove_dots) {\n      // this does not replace consecutive dots like [email protected]\n      parts[0] = parts[0].replace(/\\.+/g, dotsReplacer);\n    }\n    if (!parts[0].length) {\n      return false;\n    }\n    if (options.all_lowercase || options.gmail_lowercase) {\n      parts[0] = parts[0].toLowerCase();\n    }\n    parts[1] = options.gmail_convert_googlemaildotcom ? 'gmail.com' : parts[1];\n  } else if (icloud_domains.indexOf(parts[1]) >= 0) {\n    // Address is iCloud\n    if (options.icloud_remove_subaddress) {\n      parts[0] = parts[0].split('+')[0];\n    }\n    if (!parts[0].length) {\n      return false;\n    }\n    if (options.all_lowercase || options.icloud_lowercase) {\n      parts[0] = parts[0].toLowerCase();\n    }\n  } else if (outlookdotcom_domains.indexOf(parts[1]) >= 0) {\n    // Address is Outlook.com\n    if (options.outlookdotcom_remove_subaddress) {\n      parts[0] = parts[0].split('+')[0];\n    }\n    if (!parts[0].length) {\n      return false;\n    }\n    if (options.all_lowercase || options.outlookdotcom_lowercase) {\n      parts[0] = parts[0].toLowerCase();\n    }\n  } else if (yahoo_domains.indexOf(parts[1]) >= 0) {\n    // Address is Yahoo\n    if (options.yahoo_remove_subaddress) {\n      var components = parts[0].split('-');\n      parts[0] = components.length > 1 ? components.slice(0, -1).join('-') : components[0];\n    }\n    if (!parts[0].length) {\n      return false;\n    }\n    if (options.all_lowercase || options.yahoo_lowercase) {\n      parts[0] = parts[0].toLowerCase();\n    }\n  } else if (yandex_domains.indexOf(parts[1]) >= 0) {\n    if (options.all_lowercase || options.yandex_lowercase) {\n      parts[0] = parts[0].toLowerCase();\n    }\n    parts[1] = options.yandex_convert_yandexru ? 'yandex.ru' : parts[1];\n  } else if (options.all_lowercase) {\n    // Any other address\n    parts[0] = parts[0].toLowerCase();\n  }\n  return parts.join('@');\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isAfter;\nvar _toDate = _interopRequireDefault(require(\"./toDate\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction isAfter(date, options) {\n  // For backwards compatibility:\n  // isAfter(str [, date]), i.e. `options` could be used as argument for the legacy `date`\n  var comparisonDate = (_typeof(options) === 'object' ? options.comparisonDate : options) || Date().toString();\n  var comparison = (0, _toDate.default)(comparisonDate);\n  var original = (0, _toDate.default)(date);\n  return !!(original && comparison && original > comparison);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMongoId;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _isHexadecimal = _interopRequireDefault(require(\"./isHexadecimal\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isMongoId(str) {\n  (0, _assertString.default)(str);\n  return (0, _isHexadecimal.default)(str) && str.length === 24;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toFloat;\nvar _isFloat = _interopRequireDefault(require(\"./isFloat\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction toFloat(str) {\n  if (!(0, _isFloat.default)(str)) return NaN;\n  return parseFloat(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isVariableWidth;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _isFullWidth = require(\"./isFullWidth\");\nvar _isHalfWidth = require(\"./isHalfWidth\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isVariableWidth(str) {\n  (0, _assertString.default)(str);\n  return _isFullWidth.fullWidth.test(str) && _isHalfWidth.halfWidth.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = checkHost;\nfunction isRegExp(obj) {\n  return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nfunction checkHost(host, matches) {\n  for (var i = 0; i < matches.length; i++) {\n    var match = matches[i];\n    if (host === match || isRegExp(match) && match.test(host)) {\n      return true;\n    }\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isRFC3339;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/* Based on https://tools.ietf.org/html/rfc3339#section-5.6 */\n\nvar dateFullYear = /[0-9]{4}/;\nvar dateMonth = /(0[1-9]|1[0-2])/;\nvar dateMDay = /([12]\\d|0[1-9]|3[01])/;\nvar timeHour = /([01][0-9]|2[0-3])/;\nvar timeMinute = /[0-5][0-9]/;\nvar timeSecond = /([0-5][0-9]|60)/;\nvar timeSecFrac = /(\\.[0-9]+)?/;\nvar timeNumOffset = new RegExp(\"[-+]\".concat(timeHour.source, \":\").concat(timeMinute.source));\nvar timeOffset = new RegExp(\"([zZ]|\".concat(timeNumOffset.source, \")\"));\nvar partialTime = new RegExp(\"\".concat(timeHour.source, \":\").concat(timeMinute.source, \":\").concat(timeSecond.source).concat(timeSecFrac.source));\nvar fullDate = new RegExp(\"\".concat(dateFullYear.source, \"-\").concat(dateMonth.source, \"-\").concat(dateMDay.source));\nvar fullTime = new RegExp(\"\".concat(partialTime.source).concat(timeOffset.source));\nvar rfc3339 = new RegExp(\"^\".concat(fullDate.source, \"[ tT]\").concat(fullTime.source, \"$\"));\nfunction isRFC3339(str) {\n  (0, _assertString.default)(str);\n  return rfc3339.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isNumeric;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _alpha = require(\"./alpha\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar numericNoSymbols = /^[0-9]+$/;\nfunction isNumeric(str, options) {\n  (0, _assertString.default)(str);\n  if (options && options.no_symbols) {\n    return numericNoSymbols.test(str);\n  }\n  return new RegExp(\"^[+-]?([0-9]*[\".concat((options || {}).locale ? _alpha.decimal[options.locale] : '.', \"])?[0-9]+$\")).test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBoolean;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _includesArray = _interopRequireDefault(require(\"./util/includesArray\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar defaultOptions = {\n  loose: false\n};\nvar strictBooleans = ['true', 'false', '1', '0'];\nvar looseBooleans = [].concat(strictBooleans, ['yes', 'no']);\nfunction isBoolean(str) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOptions;\n  (0, _assertString.default)(str);\n  if (options.loose) {\n    return (0, _includesArray.default)(looseBooleans, str.toLowerCase());\n  }\n  return (0, _includesArray.default)(strictBooleans, str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISRC;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// see http://isrc.ifpi.org/en/isrc-standard/code-syntax\nvar isrc = /^[A-Z]{2}[0-9A-Z]{3}\\d{2}\\d{5}$/;\nfunction isISRC(str) {\n  (0, _assertString.default)(str);\n  return isrc.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = whitelist;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction whitelist(str, chars) {\n  (0, _assertString.default)(str);\n  return str.replace(new RegExp(\"[^\".concat(chars, \"]+\"), 'g'), '');\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isHexadecimal;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar hexadecimal = /^(0x|0h)?[0-9A-F]+$/i;\nfunction isHexadecimal(str) {\n  (0, _assertString.default)(str);\n  return hexadecimal.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isEmpty;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar default_is_empty_options = {\n  ignore_whitespace: false\n};\nfunction isEmpty(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, default_is_empty_options);\n  return (options.ignore_whitespace ? str.trim().length : str.length) === 0;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = ltrim;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction ltrim(str, chars) {\n  (0, _assertString.default)(str);\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n  var pattern = chars ? new RegExp(\"^[\".concat(chars.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), \"]+\"), 'g') : /^\\s+/g;\n  return str.replace(pattern, '');\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMailtoURI;\nvar _trim = _interopRequireDefault(require(\"./trim\"));\nvar _isEmail = _interopRequireDefault(require(\"./isEmail\"));\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction parseMailtoQueryString(queryString) {\n  var allowedParams = new Set(['subject', 'body', 'cc', 'bcc']),\n    query = {\n      cc: '',\n      bcc: ''\n    };\n  var isParseFailed = false;\n  var queryParams = queryString.split('&');\n  if (queryParams.length > 4) {\n    return false;\n  }\n  var _iterator = _createForOfIteratorHelper(queryParams),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var q = _step.value;\n      var _q$split = q.split('='),\n        _q$split2 = _slicedToArray(_q$split, 2),\n        key = _q$split2[0],\n        value = _q$split2[1];\n\n      // checked for invalid and duplicated query params\n      if (key && !allowedParams.has(key)) {\n        isParseFailed = true;\n        break;\n      }\n      if (value && (key === 'cc' || key === 'bcc')) {\n        query[key] = value;\n      }\n      if (key) {\n        allowedParams.delete(key);\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  return isParseFailed ? false : query;\n}\nfunction isMailtoURI(url, options) {\n  (0, _assertString.default)(url);\n  if (url.indexOf('mailto:') !== 0) {\n    return false;\n  }\n  var _url$replace$split = url.replace('mailto:', '').split('?'),\n    _url$replace$split2 = _slicedToArray(_url$replace$split, 2),\n    to = _url$replace$split2[0],\n    _url$replace$split2$ = _url$replace$split2[1],\n    queryString = _url$replace$split2$ === void 0 ? '' : _url$replace$split2$;\n  if (!to && !queryString) {\n    return true;\n  }\n  var query = parseMailtoQueryString(queryString);\n  if (!query) {\n    return false;\n  }\n  return \"\".concat(to, \",\").concat(query.cc, \",\").concat(query.bcc).split(',').every(function (email) {\n    email = (0, _trim.default)(email, ' ');\n    if (email) {\n      return (0, _isEmail.default)(email, options);\n    }\n    return true;\n  });\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = rtrim;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction rtrim(str, chars) {\n  (0, _assertString.default)(str);\n  if (chars) {\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n    var pattern = new RegExp(\"[\".concat(chars.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), \"]+$\"), 'g');\n    return str.replace(pattern, '');\n  }\n  // Use a faster and more safe than regex trim method https://blog.stevenlevithan.com/archives/faster-trim-javascript\n  var strIndex = str.length - 1;\n  while (/\\s/.test(str.charAt(strIndex))) {\n    strIndex -= 1;\n  }\n  return str.slice(0, strIndex + 1);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = matches;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction matches(str, pattern, modifiers) {\n  (0, _assertString.default)(str);\n  if (Object.prototype.toString.call(pattern) !== '[object RegExp]') {\n    pattern = new RegExp(pattern, modifiers);\n  }\n  return !!str.match(pattern);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isIdentityCard;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _includesArray = _interopRequireDefault(require(\"./util/includesArray\"));\nvar _isInt = _interopRequireDefault(require(\"./isInt\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar validators = {\n  PL: function PL(str) {\n    (0, _assertString.default)(str);\n    var weightOfDigits = {\n      1: 1,\n      2: 3,\n      3: 7,\n      4: 9,\n      5: 1,\n      6: 3,\n      7: 7,\n      8: 9,\n      9: 1,\n      10: 3,\n      11: 0\n    };\n    if (str != null && str.length === 11 && (0, _isInt.default)(str, {\n      allow_leading_zeroes: true\n    })) {\n      var digits = str.split('').slice(0, -1);\n      var sum = digits.reduce(function (acc, digit, index) {\n        return acc + Number(digit) * weightOfDigits[index + 1];\n      }, 0);\n      var modulo = sum % 10;\n      var lastDigit = Number(str.charAt(str.length - 1));\n      if (modulo === 0 && lastDigit === 0 || lastDigit === 10 - modulo) {\n        return true;\n      }\n    }\n    return false;\n  },\n  ES: function ES(str) {\n    (0, _assertString.default)(str);\n    var DNI = /^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/;\n    var charsValue = {\n      X: 0,\n      Y: 1,\n      Z: 2\n    };\n    var controlDigits = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E'];\n\n    // sanitize user input\n    var sanitized = str.trim().toUpperCase();\n\n    // validate the data structure\n    if (!DNI.test(sanitized)) {\n      return false;\n    }\n\n    // validate the control digit\n    var number = sanitized.slice(0, -1).replace(/[X,Y,Z]/g, function (char) {\n      return charsValue[char];\n    });\n    return sanitized.endsWith(controlDigits[number % 23]);\n  },\n  FI: function FI(str) {\n    // https://dvv.fi/en/personal-identity-code#:~:text=control%20character%20for%20a-,personal,-identity%20code%20calculated\n    (0, _assertString.default)(str);\n    if (str.length !== 11) {\n      return false;\n    }\n    if (!str.match(/^\\d{6}[\\-A\\+]\\d{3}[0-9ABCDEFHJKLMNPRSTUVWXY]{1}$/)) {\n      return false;\n    }\n    var checkDigits = '0123456789ABCDEFHJKLMNPRSTUVWXY';\n    var idAsNumber = parseInt(str.slice(0, 6), 10) * 1000 + parseInt(str.slice(7, 10), 10);\n    var remainder = idAsNumber % 31;\n    var checkDigit = checkDigits[remainder];\n    return checkDigit === str.slice(10, 11);\n  },\n  IN: function IN(str) {\n    var DNI = /^[1-9]\\d{3}\\s?\\d{4}\\s?\\d{4}$/;\n\n    // multiplication table\n    var d = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 0, 6, 7, 8, 9, 5], [2, 3, 4, 0, 1, 7, 8, 9, 5, 6], [3, 4, 0, 1, 2, 8, 9, 5, 6, 7], [4, 0, 1, 2, 3, 9, 5, 6, 7, 8], [5, 9, 8, 7, 6, 0, 4, 3, 2, 1], [6, 5, 9, 8, 7, 1, 0, 4, 3, 2], [7, 6, 5, 9, 8, 2, 1, 0, 4, 3], [8, 7, 6, 5, 9, 3, 2, 1, 0, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]];\n\n    // permutation table\n    var p = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 5, 7, 6, 2, 8, 3, 0, 9, 4], [5, 8, 0, 3, 7, 9, 6, 1, 4, 2], [8, 9, 1, 6, 0, 4, 3, 5, 2, 7], [9, 4, 5, 3, 1, 2, 6, 8, 7, 0], [4, 2, 8, 6, 5, 7, 3, 9, 0, 1], [2, 7, 9, 3, 8, 0, 6, 4, 1, 5], [7, 0, 4, 6, 9, 1, 3, 2, 5, 8]];\n\n    // sanitize user input\n    var sanitized = str.trim();\n\n    // validate the data structure\n    if (!DNI.test(sanitized)) {\n      return false;\n    }\n    var c = 0;\n    var invertedArray = sanitized.replace(/\\s/g, '').split('').map(Number).reverse();\n    invertedArray.forEach(function (val, i) {\n      c = d[c][p[i % 8][val]];\n    });\n    return c === 0;\n  },\n  IR: function IR(str) {\n    if (!str.match(/^\\d{10}$/)) return false;\n    str = \"0000\".concat(str).slice(str.length - 6);\n    if (parseInt(str.slice(3, 9), 10) === 0) return false;\n    var lastNumber = parseInt(str.slice(9, 10), 10);\n    var sum = 0;\n    for (var i = 0; i < 9; i++) {\n      sum += parseInt(str.slice(i, i + 1), 10) * (10 - i);\n    }\n    sum %= 11;\n    return sum < 2 && lastNumber === sum || sum >= 2 && lastNumber === 11 - sum;\n  },\n  IT: function IT(str) {\n    if (str.length !== 9) return false;\n    if (str === 'CA00000AA') return false; // https://it.wikipedia.org/wiki/Carta_d%27identit%C3%A0_elettronica_italiana\n    return str.search(/C[A-Z]\\d{5}[A-Z]{2}/i) > -1;\n  },\n  NO: function NO(str) {\n    var sanitized = str.trim();\n    if (isNaN(Number(sanitized))) return false;\n    if (sanitized.length !== 11) return false;\n    if (sanitized === '00000000000') return false;\n\n    // https://no.wikipedia.org/wiki/F%C3%B8dselsnummer\n    var f = sanitized.split('').map(Number);\n    var k1 = (11 - (3 * f[0] + 7 * f[1] + 6 * f[2] + 1 * f[3] + 8 * f[4] + 9 * f[5] + 4 * f[6] + 5 * f[7] + 2 * f[8]) % 11) % 11;\n    var k2 = (11 - (5 * f[0] + 4 * f[1] + 3 * f[2] + 2 * f[3] + 7 * f[4] + 6 * f[5] + 5 * f[6] + 4 * f[7] + 3 * f[8] + 2 * k1) % 11) % 11;\n    if (k1 !== f[9] || k2 !== f[10]) return false;\n    return true;\n  },\n  TH: function TH(str) {\n    if (!str.match(/^[1-8]\\d{12}$/)) return false;\n\n    // validate check digit\n    var sum = 0;\n    for (var i = 0; i < 12; i++) {\n      sum += parseInt(str[i], 10) * (13 - i);\n    }\n    return str[12] === ((11 - sum % 11) % 10).toString();\n  },\n  LK: function LK(str) {\n    var old_nic = /^[1-9]\\d{8}[vx]$/i;\n    var new_nic = /^[1-9]\\d{11}$/i;\n    if (str.length === 10 && old_nic.test(str)) return true;else if (str.length === 12 && new_nic.test(str)) return true;\n    return false;\n  },\n  'he-IL': function heIL(str) {\n    var DNI = /^\\d{9}$/;\n\n    // sanitize user input\n    var sanitized = str.trim();\n\n    // validate the data structure\n    if (!DNI.test(sanitized)) {\n      return false;\n    }\n    var id = sanitized;\n    var sum = 0,\n      incNum;\n    for (var i = 0; i < id.length; i++) {\n      incNum = Number(id[i]) * (i % 2 + 1); // Multiply number by 1 or 2\n      sum += incNum > 9 ? incNum - 9 : incNum; // Sum the digits up and add to total\n    }\n    return sum % 10 === 0;\n  },\n  'ar-LY': function arLY(str) {\n    // Libya National Identity Number NIN is 12 digits, the first digit is either 1 or 2\n    var NIN = /^(1|2)\\d{11}$/;\n\n    // sanitize user input\n    var sanitized = str.trim();\n\n    // validate the data structure\n    if (!NIN.test(sanitized)) {\n      return false;\n    }\n    return true;\n  },\n  'ar-TN': function arTN(str) {\n    var DNI = /^\\d{8}$/;\n\n    // sanitize user input\n    var sanitized = str.trim();\n\n    // validate the data structure\n    if (!DNI.test(sanitized)) {\n      return false;\n    }\n    return true;\n  },\n  'zh-CN': function zhCN(str) {\n    var provincesAndCities = ['11',\n    // 北京\n    '12',\n    // 天津\n    '13',\n    // 河北\n    '14',\n    // 山西\n    '15',\n    // 内蒙古\n    '21',\n    // 辽宁\n    '22',\n    // 吉林\n    '23',\n    // 黑龙江\n    '31',\n    // 上海\n    '32',\n    // 江苏\n    '33',\n    // 浙江\n    '34',\n    // 安徽\n    '35',\n    // 福建\n    '36',\n    // 江西\n    '37',\n    // 山东\n    '41',\n    // 河南\n    '42',\n    // 湖北\n    '43',\n    // 湖南\n    '44',\n    // 广东\n    '45',\n    // 广西\n    '46',\n    // 海南\n    '50',\n    // 重庆\n    '51',\n    // 四川\n    '52',\n    // 贵州\n    '53',\n    // 云南\n    '54',\n    // 西藏\n    '61',\n    // 陕西\n    '62',\n    // 甘肃\n    '63',\n    // 青海\n    '64',\n    // 宁夏\n    '65',\n    // 新疆\n    '71',\n    // 台湾\n    '81',\n    // 香港\n    '82',\n    // 澳门\n    '91' // 国外\n    ];\n    var powers = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2'];\n    var parityBit = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n    var checkAddressCode = function checkAddressCode(addressCode) {\n      return (0, _includesArray.default)(provincesAndCities, addressCode);\n    };\n    var checkBirthDayCode = function checkBirthDayCode(birDayCode) {\n      var yyyy = parseInt(birDayCode.substring(0, 4), 10);\n      var mm = parseInt(birDayCode.substring(4, 6), 10);\n      var dd = parseInt(birDayCode.substring(6), 10);\n      var xdata = new Date(yyyy, mm - 1, dd);\n      if (xdata > new Date()) {\n        return false;\n        // eslint-disable-next-line max-len\n      } else if (xdata.getFullYear() === yyyy && xdata.getMonth() === mm - 1 && xdata.getDate() === dd) {\n        return true;\n      }\n      return false;\n    };\n    var getParityBit = function getParityBit(idCardNo) {\n      var id17 = idCardNo.substring(0, 17);\n      var power = 0;\n      for (var i = 0; i < 17; i++) {\n        power += parseInt(id17.charAt(i), 10) * parseInt(powers[i], 10);\n      }\n      var mod = power % 11;\n      return parityBit[mod];\n    };\n    var checkParityBit = function checkParityBit(idCardNo) {\n      return getParityBit(idCardNo) === idCardNo.charAt(17).toUpperCase();\n    };\n    var check15IdCardNo = function check15IdCardNo(idCardNo) {\n      var check = /^[1-9]\\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\\d{3}$/.test(idCardNo);\n      if (!check) return false;\n      var addressCode = idCardNo.substring(0, 2);\n      check = checkAddressCode(addressCode);\n      if (!check) return false;\n      var birDayCode = \"19\".concat(idCardNo.substring(6, 12));\n      check = checkBirthDayCode(birDayCode);\n      if (!check) return false;\n      return true;\n    };\n    var check18IdCardNo = function check18IdCardNo(idCardNo) {\n      var check = /^[1-9]\\d{5}[1-9]\\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\\d{3}(\\d|x|X)$/.test(idCardNo);\n      if (!check) return false;\n      var addressCode = idCardNo.substring(0, 2);\n      check = checkAddressCode(addressCode);\n      if (!check) return false;\n      var birDayCode = idCardNo.substring(6, 14);\n      check = checkBirthDayCode(birDayCode);\n      if (!check) return false;\n      return checkParityBit(idCardNo);\n    };\n    var checkIdCardNo = function checkIdCardNo(idCardNo) {\n      var check = /^\\d{15}|(\\d{17}(\\d|x|X))$/.test(idCardNo);\n      if (!check) return false;\n      if (idCardNo.length === 15) {\n        return check15IdCardNo(idCardNo);\n      }\n      return check18IdCardNo(idCardNo);\n    };\n    return checkIdCardNo(str);\n  },\n  'zh-HK': function zhHK(str) {\n    // sanitize user input\n    str = str.trim();\n\n    // HKID number starts with 1 or 2 letters, followed by 6 digits,\n    // then a checksum contained in square / round brackets or nothing\n    var regexHKID = /^[A-Z]{1,2}[0-9]{6}((\\([0-9A]\\))|(\\[[0-9A]\\])|([0-9A]))$/;\n    var regexIsDigit = /^[0-9]$/;\n\n    // convert the user input to all uppercase and apply regex\n    str = str.toUpperCase();\n    if (!regexHKID.test(str)) return false;\n    str = str.replace(/\\[|\\]|\\(|\\)/g, '');\n    if (str.length === 8) str = \"3\".concat(str);\n    var checkSumVal = 0;\n    for (var i = 0; i <= 7; i++) {\n      var convertedChar = void 0;\n      if (!regexIsDigit.test(str[i])) convertedChar = (str[i].charCodeAt(0) - 55) % 11;else convertedChar = str[i];\n      checkSumVal += convertedChar * (9 - i);\n    }\n    checkSumVal %= 11;\n    var checkSumConverted;\n    if (checkSumVal === 0) checkSumConverted = '0';else if (checkSumVal === 1) checkSumConverted = 'A';else checkSumConverted = String(11 - checkSumVal);\n    if (checkSumConverted === str[str.length - 1]) return true;\n    return false;\n  },\n  'zh-TW': function zhTW(str) {\n    var ALPHABET_CODES = {\n      A: 10,\n      B: 11,\n      C: 12,\n      D: 13,\n      E: 14,\n      F: 15,\n      G: 16,\n      H: 17,\n      I: 34,\n      J: 18,\n      K: 19,\n      L: 20,\n      M: 21,\n      N: 22,\n      O: 35,\n      P: 23,\n      Q: 24,\n      R: 25,\n      S: 26,\n      T: 27,\n      U: 28,\n      V: 29,\n      W: 32,\n      X: 30,\n      Y: 31,\n      Z: 33\n    };\n    var sanitized = str.trim().toUpperCase();\n    if (!/^[A-Z][0-9]{9}$/.test(sanitized)) return false;\n    return Array.from(sanitized).reduce(function (sum, number, index) {\n      if (index === 0) {\n        var code = ALPHABET_CODES[number];\n        return code % 10 * 9 + Math.floor(code / 10);\n      }\n      if (index === 9) {\n        return (10 - sum % 10 - Number(number)) % 10 === 0;\n      }\n      return sum + Number(number) * (9 - index);\n    }, 0);\n  },\n  PK: function PK(str) {\n    // Pakistani National Identity Number CNIC is 13 digits\n    var CNIC = /^[1-7][0-9]{4}-[0-9]{7}-[1-9]$/;\n\n    // sanitize user input\n    var sanitized = str.trim();\n\n    // validate the data structure\n    return CNIC.test(sanitized);\n  }\n};\nfunction isIdentityCard(str, locale) {\n  (0, _assertString.default)(str);\n  if (locale in validators) {\n    return validators[locale](str);\n  } else if (locale === 'any') {\n    for (var key in validators) {\n      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes\n      // istanbul ignore else\n      if (validators.hasOwnProperty(key)) {\n        var validator = validators[key];\n        if (validator(str)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISIN;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar isin = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/;\n\n// this link details how the check digit is calculated:\n// https://www.isin.org/isin-format/. it is a little bit\n// odd in that it works with digits, not numbers. in order\n// to make only one pass through the ISIN characters, the\n// each alpha character is handled as 2 characters within\n// the loop.\n\nfunction isISIN(str) {\n  (0, _assertString.default)(str);\n  if (!isin.test(str)) {\n    return false;\n  }\n  var double = true;\n  var sum = 0;\n  // convert values\n  for (var i = str.length - 2; i >= 0; i--) {\n    if (str[i] >= 'A' && str[i] <= 'Z') {\n      var value = str[i].charCodeAt(0) - 55;\n      var lo = value % 10;\n      var hi = Math.trunc(value / 10);\n      // letters have two digits, so handle the low order\n      // and high order digits separately.\n      for (var _i = 0, _arr = [lo, hi]; _i < _arr.length; _i++) {\n        var digit = _arr[_i];\n        if (double) {\n          if (digit >= 5) {\n            sum += 1 + (digit - 5) * 2;\n          } else {\n            sum += digit * 2;\n          }\n        } else {\n          sum += digit;\n        }\n        double = !double;\n      }\n    } else {\n      var _digit = str[i].charCodeAt(0) - '0'.charCodeAt(0);\n      if (double) {\n        if (_digit >= 5) {\n          sum += 1 + (_digit - 5) * 2;\n        } else {\n          sum += _digit * 2;\n        }\n      } else {\n        sum += _digit;\n      }\n      double = !double;\n    }\n  }\n  var check = Math.trunc((sum + 9) / 10) * 10 - sum;\n  return +str[str.length - 1] === check;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMultibyte;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/* eslint-disable no-control-regex */\nvar multibyte = /[^\\x00-\\x7F]/;\n/* eslint-enable no-control-regex */\n\nfunction isMultibyte(str) {\n  (0, _assertString.default)(str);\n  return multibyte.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISO31661Numeric;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// from https://en.wikipedia.org/wiki/ISO_3166-1_numeric\nvar validISO31661NumericCountriesCodes = new Set(['004', '008', '010', '012', '016', '020', '024', '028', '031', '032', '036', '040', '044', '048', '050', '051', '052', '056', '060', '064', '068', '070', '072', '074', '076', '084', '086', '090', '092', '096', '100', '104', '108', '112', '116', '120', '124', '132', '136', '140', '144', '148', '152', '156', '158', '162', '166', '170', '174', '175', '178', '180', '184', '188', '191', '192', '196', '203', '204', '208', '212', '214', '218', '222', '226', '231', '232', '233', '234', '238', '239', '242', '246', '248', '250', '254', '258', '260', '262', '266', '268', '270', '275', '276', '288', '292', '296', '300', '304', '308', '312', '316', '320', '324', '328', '332', '334', '336', '340', '344', '348', '352', '356', '360', '364', '368', '372', '376', '380', '384', '388', '392', '398', '400', '404', '408', '410', '414', '417', '418', '422', '426', '428', '430', '434', '438', '440', '442', '446', '450', '454', '458', '462', '466', '470', '474', '478', '480', '484', '492', '496', '498', '499', '500', '504', '508', '512', '516', '520', '524', '528', '531', '533', '534', '535', '540', '548', '554', '558', '562', '566', '570', '574', '578', '580', '581', '583', '584', '585', '586', '591', '598', '600', '604', '608', '612', '616', '620', '624', '626', '630', '634', '638', '642', '643', '646', '652', '654', '659', '660', '662', '663', '666', '670', '674', '678', '682', '686', '688', '690', '694', '702', '703', '704', '705', '706', '710', '716', '724', '728', '729', '732', '740', '744', '748', '752', '756', '760', '762', '764', '768', '772', '776', '780', '784', '788', '792', '795', '796', '798', '800', '804', '807', '818', '826', '831', '832', '833', '834', '840', '850', '854', '858', '860', '862', '876', '882', '887', '894']);\nfunction isISO31661Numeric(str) {\n  (0, _assertString.default)(str);\n  return validISO31661NumericCountriesCodes.has(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMACAddress;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar macAddress48 = /^(?:[0-9a-fA-F]{2}([-:\\s]))([0-9a-fA-F]{2}\\1){4}([0-9a-fA-F]{2})$/;\nvar macAddress48NoSeparators = /^([0-9a-fA-F]){12}$/;\nvar macAddress48WithDots = /^([0-9a-fA-F]{4}\\.){2}([0-9a-fA-F]{4})$/;\nvar macAddress64 = /^(?:[0-9a-fA-F]{2}([-:\\s]))([0-9a-fA-F]{2}\\1){6}([0-9a-fA-F]{2})$/;\nvar macAddress64NoSeparators = /^([0-9a-fA-F]){16}$/;\nvar macAddress64WithDots = /^([0-9a-fA-F]{4}\\.){3}([0-9a-fA-F]{4})$/;\nfunction isMACAddress(str, options) {\n  (0, _assertString.default)(str);\n  if (options !== null && options !== void 0 && options.eui) {\n    options.eui = String(options.eui);\n  }\n  /**\n   * @deprecated `no_colons` TODO: remove it in the next major\n  */\n  if (options !== null && options !== void 0 && options.no_colons || options !== null && options !== void 0 && options.no_separators) {\n    if (options.eui === '48') {\n      return macAddress48NoSeparators.test(str);\n    }\n    if (options.eui === '64') {\n      return macAddress64NoSeparators.test(str);\n    }\n    return macAddress48NoSeparators.test(str) || macAddress64NoSeparators.test(str);\n  }\n  if ((options === null || options === void 0 ? void 0 : options.eui) === '48') {\n    return macAddress48.test(str) || macAddress48WithDots.test(str);\n  }\n  if ((options === null || options === void 0 ? void 0 : options.eui) === '64') {\n    return macAddress64.test(str) || macAddress64WithDots.test(str);\n  }\n  return isMACAddress(str, {\n    eui: '48'\n  }) || isMACAddress(str, {\n    eui: '64'\n  });\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toBoolean;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction toBoolean(str, strict) {\n  (0, _assertString.default)(str);\n  if (strict) {\n    return str === '1' || /^true$/i.test(str);\n  }\n  return str !== '0' && !/^false$/i.test(str) && str !== '';\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.farsiLocales = exports.englishLocales = exports.dotDecimal = exports.decimal = exports.commaDecimal = exports.bengaliLocales = exports.arabicLocales = exports.alphanumeric = exports.alpha = void 0;\nvar alpha = exports.alpha = {\n  'en-US': /^[A-Z]+$/i,\n  'az-AZ': /^[A-VXYZÇƏĞİıÖŞÜ]+$/i,\n  'bg-BG': /^[А-Я]+$/i,\n  'cs-CZ': /^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i,\n  'da-DK': /^[A-ZÆØÅ]+$/i,\n  'de-DE': /^[A-ZÄÖÜß]+$/i,\n  'el-GR': /^[Α-ώ]+$/i,\n  'es-ES': /^[A-ZÁÉÍÑÓÚÜ]+$/i,\n  'fa-IR': /^[ابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی]+$/i,\n  'fi-FI': /^[A-ZÅÄÖ]+$/i,\n  'fr-FR': /^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,\n  'it-IT': /^[A-ZÀÉÈÌÎÓÒÙ]+$/i,\n  'ja-JP': /^[ぁ-んァ-ヶヲ-゚一-龠ー・。、]+$/i,\n  'nb-NO': /^[A-ZÆØÅ]+$/i,\n  'nl-NL': /^[A-ZÁÉËÏÓÖÜÚ]+$/i,\n  'nn-NO': /^[A-ZÆØÅ]+$/i,\n  'hu-HU': /^[A-ZÁÉÍÓÖŐÚÜŰ]+$/i,\n  'pl-PL': /^[A-ZĄĆĘŚŁŃÓŻŹ]+$/i,\n  'pt-PT': /^[A-ZÃÁÀÂÄÇÉÊËÍÏÕÓÔÖÚÜ]+$/i,\n  'ru-RU': /^[А-ЯЁ]+$/i,\n  'kk-KZ': /^[А-ЯЁ\\u04D8\\u04B0\\u0406\\u04A2\\u0492\\u04AE\\u049A\\u04E8\\u04BA]+$/i,\n  'sl-SI': /^[A-ZČĆĐŠŽ]+$/i,\n  'sk-SK': /^[A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i,\n  'sr-RS@latin': /^[A-ZČĆŽŠĐ]+$/i,\n  'sr-RS': /^[А-ЯЂЈЉЊЋЏ]+$/i,\n  'sv-SE': /^[A-ZÅÄÖ]+$/i,\n  'th-TH': /^[ก-๐\\s]+$/i,\n  'tr-TR': /^[A-ZÇĞİıÖŞÜ]+$/i,\n  'uk-UA': /^[А-ЩЬЮЯЄIЇҐі]+$/i,\n  'vi-VN': /^[A-ZÀÁẠẢÃÂẦẤẬẨẪĂẰẮẶẲẴĐÈÉẸẺẼÊỀẾỆỂỄÌÍỊỈĨÒÓỌỎÕÔỒỐỘỔỖƠỜỚỢỞỠÙÚỤỦŨƯỪỨỰỬỮỲÝỴỶỸ]+$/i,\n  'ko-KR': /^[ㄱ-ㅎㅏ-ㅣ가-힣]*$/,\n  'ku-IQ': /^[ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i,\n  ar: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/,\n  he: /^[א-ת]+$/,\n  fa: /^['آاءأؤئبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهةی']+$/i,\n  bn: /^['ঀঁংঃঅআইঈউঊঋঌএঐওঔকখগঘঙচছজঝঞটঠডঢণতথদধনপফবভমযরলশষসহ়ঽািীুূৃৄেৈোৌ্ৎৗড়ঢ়য়ৠৡৢৣৰৱ৲৳৴৵৶৷৸৹৺৻']+$/,\n  eo: /^[ABCĈD-GĜHĤIJĴK-PRSŜTUŬVZ]+$/i,\n  'hi-IN': /^[\\u0900-\\u0961]+[\\u0972-\\u097F]*$/i,\n  'si-LK': /^[\\u0D80-\\u0DFF]+$/\n};\nvar alphanumeric = exports.alphanumeric = {\n  'en-US': /^[0-9A-Z]+$/i,\n  'az-AZ': /^[0-9A-VXYZÇƏĞİıÖŞÜ]+$/i,\n  'bg-BG': /^[0-9А-Я]+$/i,\n  'cs-CZ': /^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i,\n  'da-DK': /^[0-9A-ZÆØÅ]+$/i,\n  'de-DE': /^[0-9A-ZÄÖÜß]+$/i,\n  'el-GR': /^[0-9Α-ω]+$/i,\n  'es-ES': /^[0-9A-ZÁÉÍÑÓÚÜ]+$/i,\n  'fi-FI': /^[0-9A-ZÅÄÖ]+$/i,\n  'fr-FR': /^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,\n  'it-IT': /^[0-9A-ZÀÉÈÌÎÓÒÙ]+$/i,\n  'ja-JP': /^[0-90-9ぁ-んァ-ヶヲ-゚一-龠ー・。、]+$/i,\n  'hu-HU': /^[0-9A-ZÁÉÍÓÖŐÚÜŰ]+$/i,\n  'nb-NO': /^[0-9A-ZÆØÅ]+$/i,\n  'nl-NL': /^[0-9A-ZÁÉËÏÓÖÜÚ]+$/i,\n  'nn-NO': /^[0-9A-ZÆØÅ]+$/i,\n  'pl-PL': /^[0-9A-ZĄĆĘŚŁŃÓŻŹ]+$/i,\n  'pt-PT': /^[0-9A-ZÃÁÀÂÄÇÉÊËÍÏÕÓÔÖÚÜ]+$/i,\n  'ru-RU': /^[0-9А-ЯЁ]+$/i,\n  'kk-KZ': /^[0-9А-ЯЁ\\u04D8\\u04B0\\u0406\\u04A2\\u0492\\u04AE\\u049A\\u04E8\\u04BA]+$/i,\n  'sl-SI': /^[0-9A-ZČĆĐŠŽ]+$/i,\n  'sk-SK': /^[0-9A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i,\n  'sr-RS@latin': /^[0-9A-ZČĆŽŠĐ]+$/i,\n  'sr-RS': /^[0-9А-ЯЂЈЉЊЋЏ]+$/i,\n  'sv-SE': /^[0-9A-ZÅÄÖ]+$/i,\n  'th-TH': /^[ก-๙\\s]+$/i,\n  'tr-TR': /^[0-9A-ZÇĞİıÖŞÜ]+$/i,\n  'uk-UA': /^[0-9А-ЩЬЮЯЄIЇҐі]+$/i,\n  'ko-KR': /^[0-9ㄱ-ㅎㅏ-ㅣ가-힣]*$/,\n  'ku-IQ': /^[٠١٢٣٤٥٦٧٨٩0-9ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i,\n  'vi-VN': /^[0-9A-ZÀÁẠẢÃÂẦẤẬẨẪĂẰẮẶẲẴĐÈÉẸẺẼÊỀẾỆỂỄÌÍỊỈĨÒÓỌỎÕÔỒỐỘỔỖƠỜỚỢỞỠÙÚỤỦŨƯỪỨỰỬỮỲÝỴỶỸ]+$/i,\n  ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/,\n  he: /^[0-9א-ת]+$/,\n  fa: /^['0-9آاءأؤئبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهةی۱۲۳۴۵۶۷۸۹۰']+$/i,\n  bn: /^['ঀঁংঃঅআইঈউঊঋঌএঐওঔকখগঘঙচছজঝঞটঠডঢণতথদধনপফবভমযরলশষসহ়ঽািীুূৃৄেৈোৌ্ৎৗড়ঢ়য়ৠৡৢৣ০১২৩৪৫৬৭৮৯ৰৱ৲৳৴৵৶৷৸৹৺৻']+$/,\n  eo: /^[0-9ABCĈD-GĜHĤIJĴK-PRSŜTUŬVZ]+$/i,\n  'hi-IN': /^[\\u0900-\\u0963]+[\\u0966-\\u097F]*$/i,\n  'si-LK': /^[0-9\\u0D80-\\u0DFF]+$/\n};\nvar decimal = exports.decimal = {\n  'en-US': '.',\n  ar: '٫'\n};\nvar englishLocales = exports.englishLocales = ['AU', 'GB', 'HK', 'IN', 'NZ', 'ZA', 'ZM'];\nfor (var locale, i = 0; i < englishLocales.length; i++) {\n  locale = \"en-\".concat(englishLocales[i]);\n  alpha[locale] = alpha['en-US'];\n  alphanumeric[locale] = alphanumeric['en-US'];\n  decimal[locale] = decimal['en-US'];\n}\n\n// Source: http://www.localeplanet.com/java/\nvar arabicLocales = exports.arabicLocales = ['AE', 'BH', 'DZ', 'EG', 'IQ', 'JO', 'KW', 'LB', 'LY', 'MA', 'QM', 'QA', 'SA', 'SD', 'SY', 'TN', 'YE'];\nfor (var _locale, _i = 0; _i < arabicLocales.length; _i++) {\n  _locale = \"ar-\".concat(arabicLocales[_i]);\n  alpha[_locale] = alpha.ar;\n  alphanumeric[_locale] = alphanumeric.ar;\n  decimal[_locale] = decimal.ar;\n}\nvar farsiLocales = exports.farsiLocales = ['IR', 'AF'];\nfor (var _locale2, _i2 = 0; _i2 < farsiLocales.length; _i2++) {\n  _locale2 = \"fa-\".concat(farsiLocales[_i2]);\n  alphanumeric[_locale2] = alphanumeric.fa;\n  decimal[_locale2] = decimal.ar;\n}\nvar bengaliLocales = exports.bengaliLocales = ['BD', 'IN'];\nfor (var _locale3, _i3 = 0; _i3 < bengaliLocales.length; _i3++) {\n  _locale3 = \"bn-\".concat(bengaliLocales[_i3]);\n  alpha[_locale3] = alpha.bn;\n  alphanumeric[_locale3] = alphanumeric.bn;\n  decimal[_locale3] = decimal['en-US'];\n}\n\n// Source: https://en.wikipedia.org/wiki/Decimal_mark\nvar dotDecimal = exports.dotDecimal = ['ar-EG', 'ar-LB', 'ar-LY'];\nvar commaDecimal = exports.commaDecimal = ['bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-ZM', 'eo', 'es-ES', 'fr-CA', 'fr-FR', 'id-ID', 'it-IT', 'ku-IQ', 'hi-IN', 'hu-HU', 'nb-NO', 'nn-NO', 'nl-NL', 'pl-PL', 'pt-PT', 'ru-RU', 'kk-KZ', 'si-LK', 'sl-SI', 'sr-RS@latin', 'sr-RS', 'sv-SE', 'tr-TR', 'uk-UA', 'vi-VN'];\nfor (var _i4 = 0; _i4 < dotDecimal.length; _i4++) {\n  decimal[dotDecimal[_i4]] = decimal['en-US'];\n}\nfor (var _i5 = 0; _i5 < commaDecimal.length; _i5++) {\n  decimal[commaDecimal[_i5]] = ',';\n}\nalpha['fr-CA'] = alpha['fr-FR'];\nalphanumeric['fr-CA'] = alphanumeric['fr-FR'];\nalpha['pt-BR'] = alpha['pt-PT'];\nalphanumeric['pt-BR'] = alphanumeric['pt-PT'];\ndecimal['pt-BR'] = decimal['pt-PT'];\n\n// see #862\nalpha['pl-Pl'] = alpha['pl-PL'];\nalphanumeric['pl-Pl'] = alphanumeric['pl-PL'];\ndecimal['pl-Pl'] = decimal['pl-PL'];\n\n// see #1455\nalpha['fa-AF'] = alpha.fa;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = assertString;\nfunction assertString(input) {\n  if (input === undefined || input === null) throw new TypeError(\"Expected a string but received a \".concat(input));\n  if (input.constructor.name !== 'String') throw new TypeError(\"Expected a string but received a \".concat(input.constructor.name));\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ScriptCodes = void 0;\nexports.default = isISO15924;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// from https://www.unicode.org/iso15924/iso15924-codes.html\nvar validISO15924Codes = new Set(['Adlm', 'Afak', 'Aghb', 'Ahom', 'Arab', 'Aran', 'Armi', 'Armn', 'Avst', 'Bali', 'Bamu', 'Bass', 'Batk', 'Beng', 'Bhks', 'Blis', 'Bopo', 'Brah', 'Brai', 'Bugi', 'Buhd', 'Cakm', 'Cans', 'Cari', 'Cham', 'Cher', 'Chis', 'Chrs', 'Cirt', 'Copt', 'Cpmn', 'Cprt', 'Cyrl', 'Cyrs', 'Deva', 'Diak', 'Dogr', 'Dsrt', 'Dupl', 'Egyd', 'Egyh', 'Egyp', 'Elba', 'Elym', 'Ethi', 'Gara', 'Geok', 'Geor', 'Glag', 'Gong', 'Gonm', 'Goth', 'Gran', 'Grek', 'Gujr', 'Gukh', 'Guru', 'Hanb', 'Hang', 'Hani', 'Hano', 'Hans', 'Hant', 'Hatr', 'Hebr', 'Hira', 'Hluw', 'Hmng', 'Hmnp', 'Hrkt', 'Hung', 'Inds', 'Ital', 'Jamo', 'Java', 'Jpan', 'Jurc', 'Kali', 'Kana', 'Kawi', 'Khar', 'Khmr', 'Khoj', 'Kitl', 'Kits', 'Knda', 'Kore', 'Kpel', 'Krai', 'Kthi', 'Lana', 'Laoo', 'Latf', 'Latg', 'Latn', 'Leke', 'Lepc', 'Limb', 'Lina', 'Linb', 'Lisu', 'Loma', 'Lyci', 'Lydi', 'Mahj', 'Maka', 'Mand', 'Mani', 'Marc', 'Maya', 'Medf', 'Mend', 'Merc', 'Mero', 'Mlym', 'Modi', 'Mong', 'Moon', 'Mroo', 'Mtei', 'Mult', 'Mymr', 'Nagm', 'Nand', 'Narb', 'Nbat', 'Newa', 'Nkdb', 'Nkgb', 'Nkoo', 'Nshu', 'Ogam', 'Olck', 'Onao', 'Orkh', 'Orya', 'Osge', 'Osma', 'Ougr', 'Palm', 'Pauc', 'Pcun', 'Pelm', 'Perm', 'Phag', 'Phli', 'Phlp', 'Phlv', 'Phnx', 'Plrd', 'Piqd', 'Prti', 'Psin', 'Qaaa', 'Qaab', 'Qaac', 'Qaad', 'Qaae', 'Qaaf', 'Qaag', 'Qaah', 'Qaai', 'Qaaj', 'Qaak', 'Qaal', 'Qaam', 'Qaan', 'Qaao', 'Qaap', 'Qaaq', 'Qaar', 'Qaas', 'Qaat', 'Qaau', 'Qaav', 'Qaaw', 'Qaax', 'Qaay', 'Qaaz', 'Qaba', 'Qabb', 'Qabc', 'Qabd', 'Qabe', 'Qabf', 'Qabg', 'Qabh', 'Qabi', 'Qabj', 'Qabk', 'Qabl', 'Qabm', 'Qabn', 'Qabo', 'Qabp', 'Qabq', 'Qabr', 'Qabs', 'Qabt', 'Qabu', 'Qabv', 'Qabw', 'Qabx', 'Ranj', 'Rjng', 'Rohg', 'Roro', 'Runr', 'Samr', 'Sara', 'Sarb', 'Saur', 'Sgnw', 'Shaw', 'Shrd', 'Shui', 'Sidd', 'Sidt', 'Sind', 'Sinh', 'Sogd', 'Sogo', 'Sora', 'Soyo', 'Sund', 'Sunu', 'Sylo', 'Syrc', 'Syre', 'Syrj', 'Syrn', 'Tagb', 'Takr', 'Tale', 'Talu', 'Taml', 'Tang', 'Tavt', 'Tayo', 'Telu', 'Teng', 'Tfng', 'Tglg', 'Thaa', 'Thai', 'Tibt', 'Tirh', 'Tnsa', 'Todr', 'Tols', 'Toto', 'Tutg', 'Ugar', 'Vaii', 'Visp', 'Vith', 'Wara', 'Wcho', 'Wole', 'Xpeo', 'Xsux', 'Yezi', 'Yiii', 'Zanb', 'Zinh', 'Zmth', 'Zsye', 'Zsym', 'Zxxx', 'Zyyy', 'Zzzz']);\nfunction isISO15924(str) {\n  (0, _assertString.default)(str);\n  return validISO15924Codes.has(str);\n}\nvar ScriptCodes = exports.ScriptCodes = validISO15924Codes;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isPassportNumber;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/**\n * Reference:\n * https://en.wikipedia.org/ -- Wikipedia\n * https://docs.microsoft.com/en-us/microsoft-365/compliance/eu-passport-number -- EU Passport Number\n * https://countrycode.org/ -- Country Codes\n */\nvar passportRegexByCountryCode = {\n  AM: /^[A-Z]{2}\\d{7}$/,\n  // ARMENIA\n  AR: /^[A-Z]{3}\\d{6}$/,\n  // ARGENTINA\n  AT: /^[A-Z]\\d{7}$/,\n  // AUSTRIA\n  AU: /^[A-Z]\\d{7}$/,\n  // AUSTRALIA\n  AZ: /^[A-Z]{1}\\d{8}$/,\n  // AZERBAIJAN\n  BE: /^[A-Z]{2}\\d{6}$/,\n  // BELGIUM\n  BG: /^\\d{9}$/,\n  // BULGARIA\n  BR: /^[A-Z]{2}\\d{6}$/,\n  // BRAZIL\n  BY: /^[A-Z]{2}\\d{7}$/,\n  // BELARUS\n  CA: /^[A-Z]{2}\\d{6}$|^[A-Z]\\d{6}[A-Z]{2}$/,\n  // CANADA\n  CH: /^[A-Z]\\d{7}$/,\n  // SWITZERLAND\n  CN: /^G\\d{8}$|^E(?![IO])[A-Z0-9]\\d{7}$/,\n  // CHINA [G=Ordinary, E=Electronic] followed by 8-digits, or E followed by any UPPERCASE letter (except I and O) followed by 7 digits\n  CY: /^[A-Z](\\d{6}|\\d{8})$/,\n  // CYPRUS\n  CZ: /^\\d{8}$/,\n  // CZECH REPUBLIC\n  DE: /^[CFGHJKLMNPRTVWXYZ0-9]{9}$/,\n  // GERMANY\n  DK: /^\\d{9}$/,\n  // DENMARK\n  DZ: /^\\d{9}$/,\n  // ALGERIA\n  EE: /^([A-Z]\\d{7}|[A-Z]{2}\\d{7})$/,\n  // ESTONIA (K followed by 7-digits), e-passports have 2 UPPERCASE followed by 7 digits\n  ES: /^[A-Z0-9]{2}([A-Z0-9]?)\\d{6}$/,\n  // SPAIN\n  FI: /^[A-Z]{2}\\d{7}$/,\n  // FINLAND\n  FR: /^\\d{2}[A-Z]{2}\\d{5}$/,\n  // FRANCE\n  GB: /^\\d{9}$/,\n  // UNITED KINGDOM\n  GR: /^[A-Z]{2}\\d{7}$/,\n  // GREECE\n  HR: /^\\d{9}$/,\n  // CROATIA\n  HU: /^[A-Z]{2}(\\d{6}|\\d{7})$/,\n  // HUNGARY\n  IE: /^[A-Z0-9]{2}\\d{7}$/,\n  // IRELAND\n  IN: /^[A-Z]{1}-?\\d{7}$/,\n  // INDIA\n  ID: /^[A-C]\\d{7}$/,\n  // INDONESIA\n  IR: /^[A-Z]\\d{8}$/,\n  // IRAN\n  IS: /^(A)\\d{7}$/,\n  // ICELAND\n  IT: /^[A-Z0-9]{2}\\d{7}$/,\n  // ITALY\n  JM: /^[Aa]\\d{7}$/,\n  // JAMAICA\n  JP: /^[A-Z]{2}\\d{7}$/,\n  // JAPAN\n  KR: /^[MS]\\d{8}$/,\n  // SOUTH KOREA, REPUBLIC OF KOREA, [S=PS Passports, M=PM Passports]\n  KZ: /^[a-zA-Z]\\d{7}$/,\n  // KAZAKHSTAN\n  LI: /^[a-zA-Z]\\d{5}$/,\n  // LIECHTENSTEIN\n  LT: /^[A-Z0-9]{8}$/,\n  // LITHUANIA\n  LU: /^[A-Z0-9]{8}$/,\n  // LUXEMBURG\n  LV: /^[A-Z0-9]{2}\\d{7}$/,\n  // LATVIA\n  LY: /^[A-Z0-9]{8}$/,\n  // LIBYA\n  MT: /^\\d{7}$/,\n  // MALTA\n  MZ: /^([A-Z]{2}\\d{7})|(\\d{2}[A-Z]{2}\\d{5})$/,\n  // MOZAMBIQUE\n  MY: /^[AHK]\\d{8}$/,\n  // MALAYSIA\n  MX: /^\\d{10,11}$/,\n  // MEXICO\n  NL: /^[A-Z]{2}[A-Z0-9]{6}\\d$/,\n  // NETHERLANDS\n  NZ: /^([Ll]([Aa]|[Dd]|[Ff]|[Hh])|[Ee]([Aa]|[Pp])|[Nn])\\d{6}$/,\n  // NEW ZEALAND\n  PH: /^([A-Z](\\d{6}|\\d{7}[A-Z]))|([A-Z]{2}(\\d{6}|\\d{7}))$/,\n  // PHILIPPINES\n  PK: /^[A-Z]{2}\\d{7}$/,\n  // PAKISTAN\n  PL: /^[A-Z]{2}\\d{7}$/,\n  // POLAND\n  PT: /^[A-Z]\\d{6}$/,\n  // PORTUGAL\n  RO: /^\\d{8,9}$/,\n  // ROMANIA\n  RU: /^\\d{9}$/,\n  // RUSSIAN FEDERATION\n  SE: /^\\d{8}$/,\n  // SWEDEN\n  SL: /^(P)[A-Z]\\d{7}$/,\n  // SLOVENIA\n  SK: /^[0-9A-Z]\\d{7}$/,\n  // SLOVAKIA\n  TH: /^[A-Z]{1,2}\\d{6,7}$/,\n  // THAILAND\n  TR: /^[A-Z]\\d{8}$/,\n  // TURKEY\n  UA: /^[A-Z]{2}\\d{6}$/,\n  // UKRAINE\n  US: /^\\d{9}$|^[A-Z]\\d{8}$/,\n  // UNITED STATES\n  ZA: /^[TAMD]\\d{8}$/ // SOUTH AFRICA\n};\nvar locales = exports.locales = Object.keys(passportRegexByCountryCode);\n\n/**\n * Check if str is a valid passport number\n * relative to provided ISO Country Code.\n *\n * @param {string} str\n * @param {string} countryCode\n * @return {boolean}\n */\nfunction isPassportNumber(str, countryCode) {\n  (0, _assertString.default)(str);\n  /** Remove All Whitespaces, Convert to UPPERCASE */\n  var normalizedStr = str.replace(/\\s/g, '').toUpperCase();\n  return countryCode.toUpperCase() in passportRegexByCountryCode && passportRegexByCountryCode[countryCode].test(normalizedStr);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isSurrogatePair;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar surrogatePair = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/;\nfunction isSurrogatePair(str) {\n  (0, _assertString.default)(str);\n  return surrogatePair.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isDataURI;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar validMediaType = /^[a-z]+\\/[a-z0-9\\-\\+\\._]+$/i;\nvar validAttribute = /^[a-z\\-]+=[a-z0-9\\-]+$/i;\nvar validData = /^[a-z0-9!\\$&'\\(\\)\\*\\+,;=\\-\\._~:@\\/\\?%\\s]*$/i;\nfunction isDataURI(str) {\n  (0, _assertString.default)(str);\n  var data = str.split(',');\n  if (data.length < 2) {\n    return false;\n  }\n  var attributes = data.shift().trim().split(';');\n  var schemeAndMediaType = attributes.shift();\n  if (schemeAndMediaType.slice(0, 5) !== 'data:') {\n    return false;\n  }\n  var mediaType = schemeAndMediaType.slice(5);\n  if (mediaType !== '' && !validMediaType.test(mediaType)) {\n    return false;\n  }\n  for (var i = 0; i < attributes.length; i++) {\n    if (!(i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') && !validAttribute.test(attributes[i])) {\n      return false;\n    }\n  }\n  for (var _i = 0; _i < data.length; _i++) {\n    if (!validData.test(data[_i])) {\n      return false;\n    }\n  }\n  return true;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLuhnNumber;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isLuhnNumber(str) {\n  (0, _assertString.default)(str);\n  var sanitized = str.replace(/[- ]+/g, '');\n  var sum = 0;\n  var digit;\n  var tmpNum;\n  var shouldDouble;\n  for (var i = sanitized.length - 1; i >= 0; i--) {\n    digit = sanitized.substring(i, i + 1);\n    tmpNum = parseInt(digit, 10);\n    if (shouldDouble) {\n      tmpNum *= 2;\n      if (tmpNum >= 10) {\n        sum += tmpNum % 10 + 1;\n      } else {\n        sum += tmpNum;\n      }\n    } else {\n      sum += tmpNum;\n    }\n    shouldDouble = !shouldDouble;\n  }\n  return !!(sum % 10 === 0 ? sanitized : false);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = merge;\nfunction merge() {\n  var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var defaults = arguments.length > 1 ? arguments[1] : undefined;\n  for (var key in defaults) {\n    if (typeof obj[key] === 'undefined') {\n      obj[key] = defaults[key];\n    }\n  }\n  return obj;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isIBAN;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _includesArray = _interopRequireDefault(require(\"./util/includesArray\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/**\n * List of country codes with\n * corresponding IBAN regular expression\n * Reference: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n */\nvar ibanRegexThroughCountryCode = {\n  AD: /^(AD[0-9]{2})\\d{8}[A-Z0-9]{12}$/,\n  AE: /^(AE[0-9]{2})\\d{3}\\d{16}$/,\n  AL: /^(AL[0-9]{2})\\d{8}[A-Z0-9]{16}$/,\n  AT: /^(AT[0-9]{2})\\d{16}$/,\n  AZ: /^(AZ[0-9]{2})[A-Z0-9]{4}\\d{20}$/,\n  BA: /^(BA[0-9]{2})\\d{16}$/,\n  BE: /^(BE[0-9]{2})\\d{12}$/,\n  BG: /^(BG[0-9]{2})[A-Z]{4}\\d{6}[A-Z0-9]{8}$/,\n  BH: /^(BH[0-9]{2})[A-Z]{4}[A-Z0-9]{14}$/,\n  BR: /^(BR[0-9]{2})\\d{23}[A-Z]{1}[A-Z0-9]{1}$/,\n  BY: /^(BY[0-9]{2})[A-Z0-9]{4}\\d{20}$/,\n  CH: /^(CH[0-9]{2})\\d{5}[A-Z0-9]{12}$/,\n  CR: /^(CR[0-9]{2})\\d{18}$/,\n  CY: /^(CY[0-9]{2})\\d{8}[A-Z0-9]{16}$/,\n  CZ: /^(CZ[0-9]{2})\\d{20}$/,\n  DE: /^(DE[0-9]{2})\\d{18}$/,\n  DK: /^(DK[0-9]{2})\\d{14}$/,\n  DO: /^(DO[0-9]{2})[A-Z]{4}\\d{20}$/,\n  DZ: /^(DZ\\d{24})$/,\n  EE: /^(EE[0-9]{2})\\d{16}$/,\n  EG: /^(EG[0-9]{2})\\d{25}$/,\n  ES: /^(ES[0-9]{2})\\d{20}$/,\n  FI: /^(FI[0-9]{2})\\d{14}$/,\n  FO: /^(FO[0-9]{2})\\d{14}$/,\n  FR: /^(FR[0-9]{2})\\d{10}[A-Z0-9]{11}\\d{2}$/,\n  GB: /^(GB[0-9]{2})[A-Z]{4}\\d{14}$/,\n  GE: /^(GE[0-9]{2})[A-Z0-9]{2}\\d{16}$/,\n  GI: /^(GI[0-9]{2})[A-Z]{4}[A-Z0-9]{15}$/,\n  GL: /^(GL[0-9]{2})\\d{14}$/,\n  GR: /^(GR[0-9]{2})\\d{7}[A-Z0-9]{16}$/,\n  GT: /^(GT[0-9]{2})[A-Z0-9]{4}[A-Z0-9]{20}$/,\n  HR: /^(HR[0-9]{2})\\d{17}$/,\n  HU: /^(HU[0-9]{2})\\d{24}$/,\n  IE: /^(IE[0-9]{2})[A-Z]{4}\\d{14}$/,\n  IL: /^(IL[0-9]{2})\\d{19}$/,\n  IQ: /^(IQ[0-9]{2})[A-Z]{4}\\d{15}$/,\n  IR: /^(IR[0-9]{2})0\\d{2}0\\d{18}$/,\n  IS: /^(IS[0-9]{2})\\d{22}$/,\n  IT: /^(IT[0-9]{2})[A-Z]{1}\\d{10}[A-Z0-9]{12}$/,\n  JO: /^(JO[0-9]{2})[A-Z]{4}\\d{22}$/,\n  KW: /^(KW[0-9]{2})[A-Z]{4}[A-Z0-9]{22}$/,\n  KZ: /^(KZ[0-9]{2})\\d{3}[A-Z0-9]{13}$/,\n  LB: /^(LB[0-9]{2})\\d{4}[A-Z0-9]{20}$/,\n  LC: /^(LC[0-9]{2})[A-Z]{4}[A-Z0-9]{24}$/,\n  LI: /^(LI[0-9]{2})\\d{5}[A-Z0-9]{12}$/,\n  LT: /^(LT[0-9]{2})\\d{16}$/,\n  LU: /^(LU[0-9]{2})\\d{3}[A-Z0-9]{13}$/,\n  LV: /^(LV[0-9]{2})[A-Z]{4}[A-Z0-9]{13}$/,\n  MA: /^(MA[0-9]{26})$/,\n  MC: /^(MC[0-9]{2})\\d{10}[A-Z0-9]{11}\\d{2}$/,\n  MD: /^(MD[0-9]{2})[A-Z0-9]{20}$/,\n  ME: /^(ME[0-9]{2})\\d{18}$/,\n  MK: /^(MK[0-9]{2})\\d{3}[A-Z0-9]{10}\\d{2}$/,\n  MR: /^(MR[0-9]{2})\\d{23}$/,\n  MT: /^(MT[0-9]{2})[A-Z]{4}\\d{5}[A-Z0-9]{18}$/,\n  MU: /^(MU[0-9]{2})[A-Z]{4}\\d{19}[A-Z]{3}$/,\n  MZ: /^(MZ[0-9]{2})\\d{21}$/,\n  NL: /^(NL[0-9]{2})[A-Z]{4}\\d{10}$/,\n  NO: /^(NO[0-9]{2})\\d{11}$/,\n  PK: /^(PK[0-9]{2})[A-Z0-9]{4}\\d{16}$/,\n  PL: /^(PL[0-9]{2})\\d{24}$/,\n  PS: /^(PS[0-9]{2})[A-Z]{4}[A-Z0-9]{21}$/,\n  PT: /^(PT[0-9]{2})\\d{21}$/,\n  QA: /^(QA[0-9]{2})[A-Z]{4}[A-Z0-9]{21}$/,\n  RO: /^(RO[0-9]{2})[A-Z]{4}[A-Z0-9]{16}$/,\n  RS: /^(RS[0-9]{2})\\d{18}$/,\n  SA: /^(SA[0-9]{2})\\d{2}[A-Z0-9]{18}$/,\n  SC: /^(SC[0-9]{2})[A-Z]{4}\\d{20}[A-Z]{3}$/,\n  SE: /^(SE[0-9]{2})\\d{20}$/,\n  SI: /^(SI[0-9]{2})\\d{15}$/,\n  SK: /^(SK[0-9]{2})\\d{20}$/,\n  SM: /^(SM[0-9]{2})[A-Z]{1}\\d{10}[A-Z0-9]{12}$/,\n  SV: /^(SV[0-9]{2})[A-Z0-9]{4}\\d{20}$/,\n  TL: /^(TL[0-9]{2})\\d{19}$/,\n  TN: /^(TN[0-9]{2})\\d{20}$/,\n  TR: /^(TR[0-9]{2})\\d{5}[A-Z0-9]{17}$/,\n  UA: /^(UA[0-9]{2})\\d{6}[A-Z0-9]{19}$/,\n  VA: /^(VA[0-9]{2})\\d{18}$/,\n  VG: /^(VG[0-9]{2})[A-Z]{4}\\d{16}$/,\n  XK: /^(XK[0-9]{2})\\d{16}$/\n};\n\n/**\n * Check if the country codes passed are valid using the\n * ibanRegexThroughCountryCode as a reference\n *\n * @param {array} countryCodeArray\n * @return {boolean}\n */\n\nfunction hasOnlyValidCountryCodes(countryCodeArray) {\n  var countryCodeArrayFilteredWithObjectIbanCode = countryCodeArray.filter(function (countryCode) {\n    return !(countryCode in ibanRegexThroughCountryCode);\n  });\n  if (countryCodeArrayFilteredWithObjectIbanCode.length > 0) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * Check whether string has correct universal IBAN format\n * The IBAN consists of up to 34 alphanumeric characters, as follows:\n * Country Code using ISO 3166-1 alpha-2, two letters\n * check digits, two digits and\n * Basic Bank Account Number (BBAN), up to 30 alphanumeric characters.\n * NOTE: Permitted IBAN characters are: digits [0-9] and the 26 latin alphabetic [A-Z]\n *\n * @param {string} str - string under validation\n * @param {object} options - object to pass the countries to be either whitelisted or blacklisted\n * @return {boolean}\n */\nfunction hasValidIbanFormat(str, options) {\n  // Strip white spaces and hyphens\n  var strippedStr = str.replace(/[\\s\\-]+/gi, '').toUpperCase();\n  var isoCountryCode = strippedStr.slice(0, 2).toUpperCase();\n  var isoCountryCodeInIbanRegexCodeObject = isoCountryCode in ibanRegexThroughCountryCode;\n  if (options.whitelist) {\n    if (!hasOnlyValidCountryCodes(options.whitelist)) {\n      return false;\n    }\n    var isoCountryCodeInWhiteList = (0, _includesArray.default)(options.whitelist, isoCountryCode);\n    if (!isoCountryCodeInWhiteList) {\n      return false;\n    }\n  }\n  if (options.blacklist) {\n    var isoCountryCodeInBlackList = (0, _includesArray.default)(options.blacklist, isoCountryCode);\n    if (isoCountryCodeInBlackList) {\n      return false;\n    }\n  }\n  return isoCountryCodeInIbanRegexCodeObject && ibanRegexThroughCountryCode[isoCountryCode].test(strippedStr);\n}\n\n/**\n   * Check whether string has valid IBAN Checksum\n   * by performing basic mod-97 operation and\n   * the remainder should equal 1\n   * -- Start by rearranging the IBAN by moving the four initial characters to the end of the string\n   * -- Replace each letter in the string with two digits, A -> 10, B = 11, Z = 35\n   * -- Interpret the string as a decimal integer and\n   * -- compute the remainder on division by 97 (mod 97)\n   * Reference: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n   *\n   * @param {string} str\n   * @return {boolean}\n   */\nfunction hasValidIbanChecksum(str) {\n  var strippedStr = str.replace(/[^A-Z0-9]+/gi, '').toUpperCase(); // Keep only digits and A-Z latin alphabetic\n  var rearranged = strippedStr.slice(4) + strippedStr.slice(0, 4);\n  var alphaCapsReplacedWithDigits = rearranged.replace(/[A-Z]/g, function (char) {\n    return char.charCodeAt(0) - 55;\n  });\n  var remainder = alphaCapsReplacedWithDigits.match(/\\d{1,7}/g).reduce(function (acc, value) {\n    return Number(acc + value) % 97;\n  }, '');\n  return remainder === 1;\n}\nfunction isIBAN(str) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  (0, _assertString.default)(str);\n  return hasValidIbanFormat(str, options) && hasValidIbanChecksum(str);\n}\nvar locales = exports.locales = Object.keys(ibanRegexThroughCountryCode);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isDivisibleBy;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _toFloat = _interopRequireDefault(require(\"./toFloat\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isDivisibleBy(str, num) {\n  (0, _assertString.default)(str);\n  return (0, _toFloat.default)(str) % parseInt(num, 10) === 0;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toDate;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction toDate(date) {\n  (0, _assertString.default)(date);\n  date = Date.parse(date);\n  return !isNaN(date) ? new Date(date) : null;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISO31661Alpha3;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3\nvar validISO31661Alpha3CountriesCodes = new Set(['AFG', 'ALA', 'ALB', 'DZA', 'ASM', 'AND', 'AGO', 'AIA', 'ATA', 'ATG', 'ARG', 'ARM', 'ABW', 'AUS', 'AUT', 'AZE', 'BHS', 'BHR', 'BGD', 'BRB', 'BLR', 'BEL', 'BLZ', 'BEN', 'BMU', 'BTN', 'BOL', 'BES', 'BIH', 'BWA', 'BVT', 'BRA', 'IOT', 'BRN', 'BGR', 'BFA', 'BDI', 'KHM', 'CMR', 'CAN', 'CPV', 'CYM', 'CAF', 'TCD', 'CHL', 'CHN', 'CXR', 'CCK', 'COL', 'COM', 'COG', 'COD', 'COK', 'CRI', 'CIV', 'HRV', 'CUB', 'CUW', 'CYP', 'CZE', 'DNK', 'DJI', 'DMA', 'DOM', 'ECU', 'EGY', 'SLV', 'GNQ', 'ERI', 'EST', 'ETH', 'FLK', 'FRO', 'FJI', 'FIN', 'FRA', 'GUF', 'PYF', 'ATF', 'GAB', 'GMB', 'GEO', 'DEU', 'GHA', 'GIB', 'GRC', 'GRL', 'GRD', 'GLP', 'GUM', 'GTM', 'GGY', 'GIN', 'GNB', 'GUY', 'HTI', 'HMD', 'VAT', 'HND', 'HKG', 'HUN', 'ISL', 'IND', 'IDN', 'IRN', 'IRQ', 'IRL', 'IMN', 'ISR', 'ITA', 'JAM', 'JPN', 'JEY', 'JOR', 'KAZ', 'KEN', 'KIR', 'PRK', 'KOR', 'KWT', 'KGZ', 'LAO', 'LVA', 'LBN', 'LSO', 'LBR', 'LBY', 'LIE', 'LTU', 'LUX', 'MAC', 'MKD', 'MDG', 'MWI', 'MYS', 'MDV', 'MLI', 'MLT', 'MHL', 'MTQ', 'MRT', 'MUS', 'MYT', 'MEX', 'FSM', 'MDA', 'MCO', 'MNG', 'MNE', 'MSR', 'MAR', 'MOZ', 'MMR', 'NAM', 'NRU', 'NPL', 'NLD', 'NCL', 'NZL', 'NIC', 'NER', 'NGA', 'NIU', 'NFK', 'MNP', 'NOR', 'OMN', 'PAK', 'PLW', 'PSE', 'PAN', 'PNG', 'PRY', 'PER', 'PHL', 'PCN', 'POL', 'PRT', 'PRI', 'QAT', 'REU', 'ROU', 'RUS', 'RWA', 'BLM', 'SHN', 'KNA', 'LCA', 'MAF', 'SPM', 'VCT', 'WSM', 'SMR', 'STP', 'SAU', 'SEN', 'SRB', 'SYC', 'SLE', 'SGP', 'SXM', 'SVK', 'SVN', 'SLB', 'SOM', 'ZAF', 'SGS', 'SSD', 'ESP', 'LKA', 'SDN', 'SUR', 'SJM', 'SWZ', 'SWE', 'CHE', 'SYR', 'TWN', 'TJK', 'TZA', 'THA', 'TLS', 'TGO', 'TKL', 'TON', 'TTO', 'TUN', 'TUR', 'TKM', 'TCA', 'TUV', 'UGA', 'UKR', 'ARE', 'GBR', 'USA', 'UMI', 'URY', 'UZB', 'VUT', 'VEN', 'VNM', 'VGB', 'VIR', 'WLF', 'ESH', 'YEM', 'ZMB', 'ZWE']);\nfunction isISO31661Alpha3(str) {\n  (0, _assertString.default)(str);\n  return validISO31661Alpha3CountriesCodes.has(str.toUpperCase());\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isPort;\nvar _isInt = _interopRequireDefault(require(\"./isInt\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isPort(str) {\n  return (0, _isInt.default)(str, {\n    allow_leading_zeroes: false,\n    min: 0,\n    max: 65535\n  });\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isPostalCode;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// common patterns\nvar threeDigit = /^\\d{3}$/;\nvar fourDigit = /^\\d{4}$/;\nvar fiveDigit = /^\\d{5}$/;\nvar sixDigit = /^\\d{6}$/;\nvar patterns = {\n  AD: /^AD\\d{3}$/,\n  AT: fourDigit,\n  AU: fourDigit,\n  AZ: /^AZ\\d{4}$/,\n  BA: /^([7-8]\\d{4}$)/,\n  BD: /^([1-8][0-9]{3}|9[0-4][0-9]{2})$/,\n  BE: fourDigit,\n  BG: fourDigit,\n  BR: /^\\d{5}-?\\d{3}$/,\n  BY: /^2[1-4]\\d{4}$/,\n  CA: /^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][\\s\\-]?\\d[ABCEGHJ-NPRSTV-Z]\\d$/i,\n  CH: fourDigit,\n  CN: /^(0[1-7]|1[012356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[1-5]|8[1345]|9[09])\\d{4}$/,\n  CO: /^(05|08|11|13|15|17|18|19|20|23|25|27|41|44|47|50|52|54|63|66|68|70|73|76|81|85|86|88|91|94|95|97|99)(\\d{4})$/,\n  CZ: /^\\d{3}\\s?\\d{2}$/,\n  DE: fiveDigit,\n  DK: fourDigit,\n  DO: fiveDigit,\n  DZ: fiveDigit,\n  EE: fiveDigit,\n  ES: /^(5[0-2]{1}|[0-4]{1}\\d{1})\\d{3}$/,\n  FI: fiveDigit,\n  FR: /^(?:(?:0[1-9]|[1-8]\\d|9[0-5])\\d{3}|97[1-46]\\d{2})$/,\n  GB: /^(gir\\s?0aa|[a-z]{1,2}\\d[\\da-z]?\\s?(\\d[a-z]{2})?)$/i,\n  GR: /^\\d{3}\\s?\\d{2}$/,\n  HR: /^([1-5]\\d{4}$)/,\n  HT: /^HT\\d{4}$/,\n  HU: fourDigit,\n  ID: fiveDigit,\n  IE: /^(?!.*(?:o))[A-Za-z]\\d[\\dw]\\s\\w{4}$/i,\n  IL: /^(\\d{5}|\\d{7})$/,\n  IN: /^((?!10|29|35|54|55|65|66|86|87|88|89)[1-9][0-9]{5})$/,\n  IR: /^(?!(\\d)\\1{3})[13-9]{4}[1346-9][013-9]{5}$/,\n  IS: threeDigit,\n  IT: fiveDigit,\n  JP: /^\\d{3}\\-\\d{4}$/,\n  KE: fiveDigit,\n  KR: /^(\\d{5}|\\d{6})$/,\n  LI: /^(948[5-9]|949[0-7])$/,\n  LT: /^LT\\-\\d{5}$/,\n  LU: fourDigit,\n  LV: /^LV\\-\\d{4}$/,\n  LK: fiveDigit,\n  MG: threeDigit,\n  MX: fiveDigit,\n  MT: /^[A-Za-z]{3}\\s{0,1}\\d{4}$/,\n  MY: fiveDigit,\n  NL: /^[1-9]\\d{3}\\s?(?!sa|sd|ss)[a-z]{2}$/i,\n  NO: fourDigit,\n  NP: /^(10|21|22|32|33|34|44|45|56|57)\\d{3}$|^(977)$/i,\n  NZ: fourDigit,\n  // https://www.pakpost.gov.pk/postcodes.php\n  PK: fiveDigit,\n  PL: /^\\d{2}\\-\\d{3}$/,\n  PR: /^00[679]\\d{2}([ -]\\d{4})?$/,\n  PT: /^\\d{4}\\-\\d{3}?$/,\n  RO: sixDigit,\n  RU: sixDigit,\n  SA: fiveDigit,\n  SE: /^[1-9]\\d{2}\\s?\\d{2}$/,\n  SG: sixDigit,\n  SI: fourDigit,\n  SK: /^\\d{3}\\s?\\d{2}$/,\n  TH: fiveDigit,\n  TN: fourDigit,\n  TW: /^\\d{3}(\\d{2,3})?$/,\n  UA: fiveDigit,\n  US: /^\\d{5}(-\\d{4})?$/,\n  ZA: fourDigit,\n  ZM: fiveDigit\n};\nvar locales = exports.locales = Object.keys(patterns);\nfunction isPostalCode(str, locale) {\n  (0, _assertString.default)(str);\n  if (locale in patterns) {\n    return patterns[locale].test(str);\n  } else if (locale === 'any') {\n    for (var key in patterns) {\n      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes\n      // istanbul ignore else\n      if (patterns.hasOwnProperty(key)) {\n        var pattern = patterns[key];\n        if (pattern.test(str)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isHash;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar lengths = {\n  md5: 32,\n  md4: 32,\n  sha1: 40,\n  sha256: 64,\n  sha384: 96,\n  sha512: 128,\n  ripemd128: 32,\n  ripemd160: 40,\n  tiger128: 32,\n  tiger160: 40,\n  tiger192: 48,\n  crc32: 8,\n  crc32b: 8\n};\nfunction isHash(str, algorithm) {\n  (0, _assertString.default)(str);\n  var hash = new RegExp(\"^[a-fA-F0-9]{\".concat(lengths[algorithm], \"}$\"));\n  return hash.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isAscii;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/* eslint-disable no-control-regex */\nvar ascii = /^[\\x00-\\x7F]+$/;\n/* eslint-enable no-control-regex */\n\nfunction isAscii(str) {\n  (0, _assertString.default)(str);\n  return ascii.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isAbaRouting;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// http://www.brainjar.com/js/validation/\n// https://www.aba.com/news-research/research-analysis/routing-number-policy-procedures\n// series reserved for future use are excluded\nvar isRoutingReg = /^(?!(1[3-9])|(20)|(3[3-9])|(4[0-9])|(5[0-9])|(60)|(7[3-9])|(8[1-9])|(9[0-2])|(9[3-9]))[0-9]{9}$/;\nfunction isAbaRouting(str) {\n  (0, _assertString.default)(str);\n  if (!isRoutingReg.test(str)) return false;\n  var checkSumVal = 0;\n  for (var i = 0; i < str.length; i++) {\n    if (i % 3 === 0) checkSumVal += str[i] * 3;else if (i % 3 === 1) checkSumVal += str[i] * 7;else checkSumVal += str[i] * 1;\n  }\n  return checkSumVal % 10 === 0;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMimeType;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/*\n  Checks if the provided string matches to a correct Media type format (MIME type)\n\n  This function only checks is the string format follows the\n  established rules by the according RFC specifications.\n  This function supports 'charset' in textual media types\n  (https://tools.ietf.org/html/rfc6657).\n\n  This function does not check against all the media types listed\n  by the IANA (https://www.iana.org/assignments/media-types/media-types.xhtml)\n  because of lightness purposes : it would require to include\n  all these MIME types in this library, which would weigh it\n  significantly. This kind of effort maybe is not worth for the use that\n  this function has in this entire library.\n\n  More information in the RFC specifications :\n  - https://tools.ietf.org/html/rfc2045\n  - https://tools.ietf.org/html/rfc2046\n  - https://tools.ietf.org/html/rfc7231#section-3.1.1.1\n  - https://tools.ietf.org/html/rfc7231#section-3.1.1.5\n*/\n\n// Match simple MIME types\n// NB :\n//   Subtype length must not exceed 100 characters.\n//   This rule does not comply to the RFC specs (what is the max length ?).\nvar mimeTypeSimple = /^(application|audio|font|image|message|model|multipart|text|video)\\/[a-zA-Z0-9\\.\\-\\+_]{1,100}$/i; // eslint-disable-line max-len\n\n// Handle \"charset\" in \"text/*\"\nvar mimeTypeText = /^text\\/[a-zA-Z0-9\\.\\-\\+]{1,100};\\s?charset=(\"[a-zA-Z0-9\\.\\-\\+\\s]{0,70}\"|[a-zA-Z0-9\\.\\-\\+]{0,70})(\\s?\\([a-zA-Z0-9\\.\\-\\+\\s]{1,20}\\))?$/i; // eslint-disable-line max-len\n\n// Handle \"boundary\" in \"multipart/*\"\nvar mimeTypeMultipart = /^multipart\\/[a-zA-Z0-9\\.\\-\\+]{1,100}(;\\s?(boundary|charset)=(\"[a-zA-Z0-9\\.\\-\\+\\s]{0,70}\"|[a-zA-Z0-9\\.\\-\\+]{0,70})(\\s?\\([a-zA-Z0-9\\.\\-\\+\\s]{1,20}\\))?){0,2}$/i; // eslint-disable-line max-len\n\nfunction isMimeType(str) {\n  (0, _assertString.default)(str);\n  return mimeTypeSimple.test(str) || mimeTypeText.test(str) || mimeTypeMultipart.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar includes = function includes(str, val) {\n  return str.indexOf(val) !== -1;\n};\nvar _default = exports.default = includes;\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isHexColor;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar hexcolor = /^#?([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$/i;\nfunction isHexColor(str) {\n  (0, _assertString.default)(str);\n  return hexcolor.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.iso7064Check = iso7064Check;\nexports.luhnCheck = luhnCheck;\nexports.reverseMultiplyAndSum = reverseMultiplyAndSum;\nexports.verhoeffCheck = verhoeffCheck;\n/**\n * Algorithmic validation functions\n * May be used as is or implemented in the workflow of other validators.\n */\n\n/*\n * ISO 7064 validation function\n * Called with a string of numbers (incl. check digit)\n * to validate according to ISO 7064 (MOD 11, 10).\n */\nfunction iso7064Check(str) {\n  var checkvalue = 10;\n  for (var i = 0; i < str.length - 1; i++) {\n    checkvalue = (parseInt(str[i], 10) + checkvalue) % 10 === 0 ? 10 * 2 % 11 : (parseInt(str[i], 10) + checkvalue) % 10 * 2 % 11;\n  }\n  checkvalue = checkvalue === 1 ? 0 : 11 - checkvalue;\n  return checkvalue === parseInt(str[10], 10);\n}\n\n/*\n * Luhn (mod 10) validation function\n * Called with a string of numbers (incl. check digit)\n * to validate according to the Luhn algorithm.\n */\nfunction luhnCheck(str) {\n  var checksum = 0;\n  var second = false;\n  for (var i = str.length - 1; i >= 0; i--) {\n    if (second) {\n      var product = parseInt(str[i], 10) * 2;\n      if (product > 9) {\n        // sum digits of product and add to checksum\n        checksum += product.toString().split('').map(function (a) {\n          return parseInt(a, 10);\n        }).reduce(function (a, b) {\n          return a + b;\n        }, 0);\n      } else {\n        checksum += product;\n      }\n    } else {\n      checksum += parseInt(str[i], 10);\n    }\n    second = !second;\n  }\n  return checksum % 10 === 0;\n}\n\n/*\n * Reverse TIN multiplication and summation helper function\n * Called with an array of single-digit integers and a base multiplier\n * to calculate the sum of the digits multiplied in reverse.\n * Normally used in variations of MOD 11 algorithmic checks.\n */\nfunction reverseMultiplyAndSum(digits, base) {\n  var total = 0;\n  for (var i = 0; i < digits.length; i++) {\n    total += digits[i] * (base - i);\n  }\n  return total;\n}\n\n/*\n * Verhoeff validation helper function\n * Called with a string of numbers\n * to validate according to the Verhoeff algorithm.\n */\nfunction verhoeffCheck(str) {\n  var d_table = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 0, 6, 7, 8, 9, 5], [2, 3, 4, 0, 1, 7, 8, 9, 5, 6], [3, 4, 0, 1, 2, 8, 9, 5, 6, 7], [4, 0, 1, 2, 3, 9, 5, 6, 7, 8], [5, 9, 8, 7, 6, 0, 4, 3, 2, 1], [6, 5, 9, 8, 7, 1, 0, 4, 3, 2], [7, 6, 5, 9, 8, 2, 1, 0, 4, 3], [8, 7, 6, 5, 9, 3, 2, 1, 0, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]];\n  var p_table = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 5, 7, 6, 2, 8, 3, 0, 9, 4], [5, 8, 0, 3, 7, 9, 6, 1, 4, 2], [8, 9, 1, 6, 0, 4, 3, 5, 2, 7], [9, 4, 5, 3, 1, 2, 6, 8, 7, 0], [4, 2, 8, 6, 5, 7, 3, 9, 0, 1], [2, 7, 9, 3, 8, 0, 6, 4, 1, 5], [7, 0, 4, 6, 9, 1, 3, 2, 5, 8]];\n\n  // Copy (to prevent replacement) and reverse\n  var str_copy = str.split('').reverse().join('');\n  var checksum = 0;\n  for (var i = 0; i < str_copy.length; i++) {\n    checksum = d_table[checksum][p_table[i % 8][parseInt(str_copy[i], 10)]];\n  }\n  return checksum === 0;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isUUID;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar uuid = {\n  1: /^[0-9A-F]{8}-[0-9A-F]{4}-1[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  2: /^[0-9A-F]{8}-[0-9A-F]{4}-2[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  3: /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  4: /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  5: /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  6: /^[0-9A-F]{8}-[0-9A-F]{4}-6[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  7: /^[0-9A-F]{8}-[0-9A-F]{4}-7[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  8: /^[0-9A-F]{8}-[0-9A-F]{4}-8[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  nil: /^00000000-0000-0000-0000-000000000000$/i,\n  max: /^ffffffff-ffff-ffff-ffff-ffffffffffff$/i,\n  loose: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i,\n  // From https://github.com/uuidjs/uuid/blob/main/src/regex.js\n  all: /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i\n};\nfunction isUUID(str, version) {\n  (0, _assertString.default)(str);\n  if (version === undefined || version === null) {\n    version = 'all';\n  }\n  return version in uuid ? uuid[version].test(str) : false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMobilePhone;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/* eslint-disable max-len */\nvar phones = {\n  'am-AM': /^(\\+?374|0)(33|4[134]|55|77|88|9[13-689])\\d{6}$/,\n  'ar-AE': /^((\\+?971)|0)?5[024568]\\d{7}$/,\n  'ar-BH': /^(\\+?973)?(3|6)\\d{7}$/,\n  'ar-DZ': /^(\\+?213|0)(5|6|7)\\d{8}$/,\n  'ar-LB': /^(\\+?961)?((3|81)\\d{6}|7\\d{7})$/,\n  'ar-EG': /^((\\+?20)|0)?1[0125]\\d{8}$/,\n  'ar-IQ': /^(\\+?964|0)?7[0-9]\\d{8}$/,\n  'ar-JO': /^(\\+?962|0)?7[789]\\d{7}$/,\n  'ar-KW': /^(\\+?965)([569]\\d{7}|41\\d{6})$/,\n  'ar-LY': /^((\\+?218)|0)?(9[1-6]\\d{7}|[1-8]\\d{7,9})$/,\n  'ar-MA': /^(?:(?:\\+|00)212|0)[5-7]\\d{8}$/,\n  'ar-OM': /^((\\+|00)968)?([79][1-9])\\d{6}$/,\n  'ar-PS': /^(\\+?970|0)5[6|9](\\d{7})$/,\n  'ar-SA': /^(!?(\\+?966)|0)?5\\d{8}$/,\n  'ar-SD': /^((\\+?249)|0)?(9[012369]|1[012])\\d{7}$/,\n  'ar-SY': /^(!?(\\+?963)|0)?9\\d{8}$/,\n  'ar-TN': /^(\\+?216)?[2459]\\d{7}$/,\n  'az-AZ': /^(\\+994|0)(10|5[015]|7[07]|99)\\d{7}$/,\n  'bs-BA': /^((((\\+|00)3876)|06))((([0-3]|[5-6])\\d{6})|(4\\d{7}))$/,\n  'be-BY': /^(\\+?375)?(24|25|29|33|44)\\d{7}$/,\n  'bg-BG': /^(\\+?359|0)?8[789]\\d{7}$/,\n  'bn-BD': /^(\\+?880|0)1[13456789][0-9]{8}$/,\n  'ca-AD': /^(\\+376)?[346]\\d{5}$/,\n  'cs-CZ': /^(\\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,\n  'da-DK': /^(\\+?45)?\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}$/,\n  'de-DE': /^((\\+49|0)1)(5[0-25-9]\\d|6([23]|0\\d?)|7([0-57-9]|6\\d))\\d{7,9}$/,\n  'de-AT': /^(\\+43|0)\\d{1,4}\\d{3,12}$/,\n  'de-CH': /^(\\+41|0)([1-9])\\d{1,9}$/,\n  'de-LU': /^(\\+352)?((6\\d1)\\d{6})$/,\n  'dv-MV': /^(\\+?960)?(7[2-9]|9[1-9])\\d{5}$/,\n  'el-GR': /^(\\+?30|0)?6(8[5-9]|9(?![26])[0-9])\\d{7}$/,\n  'el-CY': /^(\\+?357?)?(9(9|7|6|5|4)\\d{6})$/,\n  'en-AI': /^(\\+?1|0)264(?:2(35|92)|4(?:6[1-2]|76|97)|5(?:3[6-9]|8[1-4])|7(?:2(4|9)|72))\\d{4}$/,\n  'en-AU': /^(\\+?61|0)4\\d{8}$/,\n  'en-AG': /^(?:\\+1|1)268(?:464|7(?:1[3-9]|[28]\\d|3[0246]|64|7[0-689]))\\d{4}$/,\n  'en-BM': /^(\\+?1)?441(((3|7)\\d{6}$)|(5[0-3][0-9]\\d{4}$)|(59\\d{5}$))/,\n  'en-BS': /^(\\+?1[-\\s]?|0)?\\(?242\\)?[-\\s]?\\d{3}[-\\s]?\\d{4}$/,\n  'en-GB': /^(\\+?44|0)7[1-9]\\d{8}$/,\n  'en-GG': /^(\\+?44|0)1481\\d{6}$/,\n  'en-GH': /^(\\+233|0)(20|50|24|54|27|57|26|56|23|53|28|55|59)\\d{7}$/,\n  'en-GY': /^(\\+592|0)6\\d{6}$/,\n  'en-HK': /^(\\+?852[-\\s]?)?[456789]\\d{3}[-\\s]?\\d{4}$/,\n  'en-MO': /^(\\+?853[-\\s]?)?[6]\\d{3}[-\\s]?\\d{4}$/,\n  'en-IE': /^(\\+?353|0)8[356789]\\d{7}$/,\n  'en-IN': /^(\\+?91|0)?[6789]\\d{9}$/,\n  'en-JM': /^(\\+?876)?\\d{7}$/,\n  'en-KE': /^(\\+?254|0)(7|1)\\d{8}$/,\n  'fr-CF': /^(\\+?236| ?)(70|75|77|72|21|22)\\d{6}$/,\n  'en-SS': /^(\\+?211|0)(9[1257])\\d{7}$/,\n  'en-KI': /^((\\+686|686)?)?( )?((6|7)(2|3|8)[0-9]{6})$/,\n  'en-KN': /^(?:\\+1|1)869(?:46\\d|48[89]|55[6-8]|66\\d|76[02-7])\\d{4}$/,\n  'en-LS': /^(\\+?266)(22|28|57|58|59|27|52)\\d{6}$/,\n  'en-MT': /^(\\+?356|0)?(99|79|77|21|27|22|25)[0-9]{6}$/,\n  'en-MU': /^(\\+?230|0)?\\d{8}$/,\n  'en-MW': /^(\\+?265|0)(((77|88|31|99|98|21)\\d{7})|(((111)|1)\\d{6})|(32000\\d{4}))$/,\n  'en-NA': /^(\\+?264|0)(6|8)\\d{7}$/,\n  'en-NG': /^(\\+?234|0)?[789]\\d{9}$/,\n  'en-NZ': /^(\\+?64|0)[28]\\d{7,9}$/,\n  'en-PG': /^(\\+?675|0)?(7\\d|8[18])\\d{6}$/,\n  'en-PK': /^((00|\\+)?92|0)3[0-6]\\d{8}$/,\n  'en-PH': /^(09|\\+639)\\d{9}$/,\n  'en-RW': /^(\\+?250|0)?[7]\\d{8}$/,\n  'en-SG': /^(\\+65)?[3689]\\d{7}$/,\n  'en-SL': /^(\\+?232|0)\\d{8}$/,\n  'en-TZ': /^(\\+?255|0)?[67]\\d{8}$/,\n  'en-UG': /^(\\+?256|0)?[7]\\d{8}$/,\n  'en-US': /^((\\+1|1)?( |-)?)?(\\([2-9][0-9]{2}\\)|[2-9][0-9]{2})( |-)?([2-9][0-9]{2}( |-)?[0-9]{4})$/,\n  'en-ZA': /^(\\+?27|0)\\d{9}$/,\n  'en-ZM': /^(\\+?26)?0[79][567]\\d{7}$/,\n  'en-ZW': /^(\\+263)[0-9]{9}$/,\n  'en-BW': /^(\\+?267)?(7[1-8]{1})\\d{6}$/,\n  'es-AR': /^\\+?549(11|[2368]\\d)\\d{8}$/,\n  'es-BO': /^(\\+?591)?(6|7)\\d{7}$/,\n  'es-CO': /^(\\+?57)?3(0(0|1|2|4|5)|1\\d|2[0-4]|5(0|1))\\d{7}$/,\n  'es-CL': /^(\\+?56|0)[2-9]\\d{1}\\d{7}$/,\n  'es-CR': /^(\\+506)?[2-8]\\d{7}$/,\n  'es-CU': /^(\\+53|0053)?5\\d{7}$/,\n  'es-DO': /^(\\+?1)?8[024]9\\d{7}$/,\n  'es-HN': /^(\\+?504)?[9|8|3|2]\\d{7}$/,\n  'es-EC': /^(\\+?593|0)([2-7]|9[2-9])\\d{7}$/,\n  'es-ES': /^(\\+?34)?[6|7]\\d{8}$/,\n  'es-GT': /^(\\+?502)?[2|6|7]\\d{7}$/,\n  'es-PE': /^(\\+?51)?9\\d{8}$/,\n  'es-MX': /^(\\+?52)?(1|01)?\\d{10,11}$/,\n  'es-NI': /^(\\+?505)\\d{7,8}$/,\n  'es-PA': /^(\\+?507)\\d{7,8}$/,\n  'es-PY': /^(\\+?595|0)9[9876]\\d{7}$/,\n  'es-SV': /^(\\+?503)?[67]\\d{7}$/,\n  'es-UY': /^(\\+598|0)9[1-9][\\d]{6}$/,\n  'es-VE': /^(\\+?58)?(2|4)\\d{9}$/,\n  'et-EE': /^(\\+?372)?\\s?(5|8[1-4])\\s?([0-9]\\s?){6,7}$/,\n  'fa-IR': /^(\\+?98[\\-\\s]?|0)9[0-39]\\d[\\-\\s]?\\d{3}[\\-\\s]?\\d{4}$/,\n  'fi-FI': /^(\\+?358|0)\\s?(4[0-6]|50)\\s?(\\d\\s?){4,8}$/,\n  'fj-FJ': /^(\\+?679)?\\s?\\d{3}\\s?\\d{4}$/,\n  'fo-FO': /^(\\+?298)?\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}$/,\n  'fr-BF': /^(\\+226|0)[67]\\d{7}$/,\n  'fr-BJ': /^(\\+229)\\d{8}$/,\n  'fr-CD': /^(\\+?243|0)?(8|9)\\d{8}$/,\n  'fr-CM': /^(\\+?237)6[0-9]{8}$/,\n  'fr-FR': /^(\\+?33|0)[67]\\d{8}$/,\n  'fr-GF': /^(\\+?594|0|00594)[67]\\d{8}$/,\n  'fr-GP': /^(\\+?590|0|00590)[67]\\d{8}$/,\n  'fr-MQ': /^(\\+?596|0|00596)[67]\\d{8}$/,\n  'fr-PF': /^(\\+?689)?8[789]\\d{6}$/,\n  'fr-RE': /^(\\+?262|0|00262)[67]\\d{8}$/,\n  'fr-WF': /^(\\+681)?\\d{6}$/,\n  'he-IL': /^(\\+972|0)([23489]|5[012345689]|77)[1-9]\\d{6}$/,\n  'hu-HU': /^(\\+?36|06)(20|30|31|50|70)\\d{7}$/,\n  'id-ID': /^(\\+?62|0)8(1[123456789]|2[1238]|3[1238]|5[12356789]|7[78]|9[56789]|8[123456789])([\\s?|\\d]{5,11})$/,\n  'ir-IR': /^(\\+98|0)?9\\d{9}$/,\n  'it-IT': /^(\\+?39)?\\s?3\\d{2} ?\\d{6,7}$/,\n  'it-SM': /^((\\+378)|(0549)|(\\+390549)|(\\+3780549))?6\\d{5,9}$/,\n  'ja-JP': /^(\\+81[ \\-]?(\\(0\\))?|0)[6789]0[ \\-]?\\d{4}[ \\-]?\\d{4}$/,\n  'ka-GE': /^(\\+?995)?(79\\d{7}|5\\d{8})$/,\n  'kk-KZ': /^(\\+?7|8)?7\\d{9}$/,\n  'kl-GL': /^(\\+?299)?\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}$/,\n  'ko-KR': /^((\\+?82)[ \\-]?)?0?1([0|1|6|7|8|9]{1})[ \\-]?\\d{3,4}[ \\-]?\\d{4}$/,\n  'ky-KG': /^(\\+996\\s?)?(22[0-9]|50[0-9]|55[0-9]|70[0-9]|75[0-9]|77[0-9]|880|990|995|996|997|998)\\s?\\d{3}\\s?\\d{3}$/,\n  'lt-LT': /^(\\+370|8)\\d{8}$/,\n  'lv-LV': /^(\\+?371)2\\d{7}$/,\n  'mg-MG': /^((\\+?261|0)(2|3)\\d)?\\d{7}$/,\n  'mn-MN': /^(\\+|00|011)?976(77|81|88|91|94|95|96|99)\\d{6}$/,\n  'my-MM': /^(\\+?959|09|9)(2[5-7]|3[1-2]|4[0-5]|6[6-9]|7[5-9]|9[6-9])[0-9]{7}$/,\n  'ms-MY': /^(\\+?60|0)1(([0145](-|\\s)?\\d{7,8})|([236-9](-|\\s)?\\d{7}))$/,\n  'mz-MZ': /^(\\+?258)?8[234567]\\d{7}$/,\n  'nb-NO': /^(\\+?47)?[49]\\d{7}$/,\n  'ne-NP': /^(\\+?977)?9[78]\\d{8}$/,\n  'nl-BE': /^(\\+?32|0)4\\d{8}$/,\n  'nl-NL': /^(((\\+|00)?31\\(0\\))|((\\+|00)?31)|0)6{1}\\d{8}$/,\n  'nl-AW': /^(\\+)?297(56|59|64|73|74|99)\\d{5}$/,\n  'nn-NO': /^(\\+?47)?[49]\\d{7}$/,\n  'pl-PL': /^(\\+?48)? ?([5-8]\\d|45) ?\\d{3} ?\\d{2} ?\\d{2}$/,\n  'pt-BR': /^((\\+?55\\ ?[1-9]{2}\\ ?)|(\\+?55\\ ?\\([1-9]{2}\\)\\ ?)|(0[1-9]{2}\\ ?)|(\\([1-9]{2}\\)\\ ?)|([1-9]{2}\\ ?))((\\d{4}\\-?\\d{4})|(9[1-9]{1}\\d{3}\\-?\\d{4}))$/,\n  'pt-PT': /^(\\+?351)?9[1236]\\d{7}$/,\n  'pt-AO': /^(\\+?244)?9\\d{8}$/,\n  'ro-MD': /^(\\+?373|0)((6(0|1|2|6|7|8|9))|(7(6|7|8|9)))\\d{6}$/,\n  'ro-RO': /^(\\+?40|0)\\s?7\\d{2}(\\/|\\s|\\.|-)?\\d{3}(\\s|\\.|-)?\\d{3}$/,\n  'ru-RU': /^(\\+?7|8)?9\\d{9}$/,\n  'si-LK': /^(?:0|94|\\+94)?(7(0|1|2|4|5|6|7|8)( |-)?)\\d{7}$/,\n  'sl-SI': /^(\\+386\\s?|0)(\\d{1}\\s?\\d{3}\\s?\\d{2}\\s?\\d{2}|\\d{2}\\s?\\d{3}\\s?\\d{3})$/,\n  'sk-SK': /^(\\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,\n  'so-SO': /^(\\+?252|0)((6[0-9])\\d{7}|(7[1-9])\\d{7})$/,\n  'sq-AL': /^(\\+355|0)6[2-9]\\d{7}$/,\n  'sr-RS': /^(\\+3816|06)[- \\d]{5,9}$/,\n  'sv-SE': /^(\\+?46|0)[\\s\\-]?7[\\s\\-]?[02369]([\\s\\-]?\\d){7}$/,\n  'tg-TJ': /^(\\+?992)?[5][5]\\d{7}$/,\n  'th-TH': /^(\\+66|66|0)\\d{9}$/,\n  'tr-TR': /^(\\+?90|0)?5\\d{9}$/,\n  'tk-TM': /^(\\+993|993|8)\\d{8}$/,\n  'uk-UA': /^(\\+?38)?0(50|6[36-8]|7[357]|9[1-9])\\d{7}$/,\n  'uz-UZ': /^(\\+?998)?(6[125-79]|7[1-69]|88|9\\d)\\d{7}$/,\n  'vi-VN': /^((\\+?84)|0)((3([2-9]))|(5([25689]))|(7([0|6-9]))|(8([1-9]))|(9([0-9])))([0-9]{7})$/,\n  'zh-CN': /^((\\+|00)86)?(1[3-9]|9[28])\\d{9}$/,\n  'zh-TW': /^(\\+?886\\-?|0)?9\\d{8}$/,\n  'dz-BT': /^(\\+?975|0)?(17|16|77|02)\\d{6}$/,\n  'ar-YE': /^(((\\+|00)9677|0?7)[0137]\\d{7}|((\\+|00)967|0)[1-7]\\d{6})$/,\n  'ar-EH': /^(\\+?212|0)[\\s\\-]?(5288|5289)[\\s\\-]?\\d{5}$/,\n  'fa-AF': /^(\\+93|0)?(2{1}[0-8]{1}|[3-5]{1}[0-4]{1})(\\d{7})$/,\n  'mk-MK': /^(\\+?389|0)?((?:2[2-9]\\d{6}|(?:3[1-4]|4[2-8])\\d{6}|500\\d{5}|5[2-9]\\d{6}|7[0-9][2-9]\\d{5}|8[1-9]\\d{6}|800\\d{5}|8009\\d{4}))$/\n};\n/* eslint-enable max-len */\n\n// aliases\nphones['en-CA'] = phones['en-US'];\nphones['fr-CA'] = phones['en-CA'];\nphones['fr-BE'] = phones['nl-BE'];\nphones['zh-HK'] = phones['en-HK'];\nphones['zh-MO'] = phones['en-MO'];\nphones['ga-IE'] = phones['en-IE'];\nphones['fr-CH'] = phones['de-CH'];\nphones['it-CH'] = phones['fr-CH'];\nfunction isMobilePhone(str, locale, options) {\n  (0, _assertString.default)(str);\n  if (options && options.strictMode && !str.startsWith('+')) {\n    return false;\n  }\n  if (Array.isArray(locale)) {\n    return locale.some(function (key) {\n      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes\n      // istanbul ignore else\n      if (phones.hasOwnProperty(key)) {\n        var phone = phones[key];\n        if (phone.test(str)) {\n          return true;\n        }\n      }\n      return false;\n    });\n  } else if (locale in phones) {\n    return phones[locale].test(str);\n    // alias falsey locale as 'any'\n  } else if (!locale || locale === 'any') {\n    for (var key in phones) {\n      // istanbul ignore else\n      if (phones.hasOwnProperty(key)) {\n        var phone = phones[key];\n        if (phone.test(str)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}\nvar locales = exports.locales = Object.keys(phones);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBIC;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _isISO31661Alpha = require(\"./isISO31661Alpha2\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// https://en.wikipedia.org/wiki/ISO_9362\nvar isBICReg = /^[A-Za-z]{6}[A-Za-z0-9]{2}([A-Za-z0-9]{3})?$/;\nfunction isBIC(str) {\n  (0, _assertString.default)(str);\n\n  // toUpperCase() should be removed when a new major version goes out that changes\n  // the regex to [A-Z] (per the spec).\n  var countryCode = str.slice(4, 6).toUpperCase();\n  if (!_isISO31661Alpha.CountryCodes.has(countryCode) && countryCode !== 'XK') {\n    return false;\n  }\n  return isBICReg.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isVAT;\nexports.vatMatchers = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar algorithms = _interopRequireWildcard(require(\"./util/algorithms\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar AU = function AU(str) {\n  var match = str.match(/^(AU)?(\\d{11})$/);\n  if (!match) {\n    return false;\n  }\n  // @see {@link https://abr.business.gov.au/Help/AbnFormat}\n  var weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];\n  str = str.replace(/^AU/, '');\n  var ABN = (parseInt(str.slice(0, 1), 10) - 1).toString() + str.slice(1);\n  var total = 0;\n  for (var i = 0; i < 11; i++) {\n    total += weights[i] * ABN.charAt(i);\n  }\n  return total !== 0 && total % 89 === 0;\n};\nvar CH = function CH(str) {\n  // @see {@link https://www.ech.ch/de/ech/ech-0097/5.2.0}\n  var hasValidCheckNumber = function hasValidCheckNumber(digits) {\n    var lastDigit = digits.pop(); // used as check number\n    var weights = [5, 4, 3, 2, 7, 6, 5, 4];\n    var calculatedCheckNumber = (11 - digits.reduce(function (acc, el, idx) {\n      return acc + el * weights[idx];\n    }, 0) % 11) % 11;\n    return lastDigit === calculatedCheckNumber;\n  };\n\n  // @see {@link https://www.estv.admin.ch/estv/de/home/mehrwertsteuer/uid/mwst-uid-nummer.html}\n  return /^(CHE[- ]?)?(\\d{9}|(\\d{3}\\.\\d{3}\\.\\d{3})|(\\d{3} \\d{3} \\d{3})) ?(TVA|MWST|IVA)?$/.test(str) && hasValidCheckNumber(str.match(/\\d/g).map(function (el) {\n    return +el;\n  }));\n};\nvar PT = function PT(str) {\n  var match = str.match(/^(PT)?(\\d{9})$/);\n  if (!match) {\n    return false;\n  }\n  var tin = match[2];\n  var checksum = 11 - algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 8).map(function (a) {\n    return parseInt(a, 10);\n  }), 9) % 11;\n  if (checksum > 9) {\n    return parseInt(tin[8], 10) === 0;\n  }\n  return checksum === parseInt(tin[8], 10);\n};\nvar vatMatchers = exports.vatMatchers = {\n  /**\r\n   * European Union VAT identification numbers\r\n   */\n  AT: function AT(str) {\n    return /^(AT)?U\\d{8}$/.test(str);\n  },\n  BE: function BE(str) {\n    return /^(BE)?\\d{10}$/.test(str);\n  },\n  BG: function BG(str) {\n    return /^(BG)?\\d{9,10}$/.test(str);\n  },\n  HR: function HR(str) {\n    return /^(HR)?\\d{11}$/.test(str);\n  },\n  CY: function CY(str) {\n    return /^(CY)?\\w{9}$/.test(str);\n  },\n  CZ: function CZ(str) {\n    return /^(CZ)?\\d{8,10}$/.test(str);\n  },\n  DK: function DK(str) {\n    return /^(DK)?\\d{8}$/.test(str);\n  },\n  EE: function EE(str) {\n    return /^(EE)?\\d{9}$/.test(str);\n  },\n  FI: function FI(str) {\n    return /^(FI)?\\d{8}$/.test(str);\n  },\n  FR: function FR(str) {\n    return /^(FR)?\\w{2}\\d{9}$/.test(str);\n  },\n  DE: function DE(str) {\n    return /^(DE)?\\d{9}$/.test(str);\n  },\n  EL: function EL(str) {\n    return /^(EL)?\\d{9}$/.test(str);\n  },\n  HU: function HU(str) {\n    return /^(HU)?\\d{8}$/.test(str);\n  },\n  IE: function IE(str) {\n    return /^(IE)?\\d{7}\\w{1}(W)?$/.test(str);\n  },\n  IT: function IT(str) {\n    return /^(IT)?\\d{11}$/.test(str);\n  },\n  LV: function LV(str) {\n    return /^(LV)?\\d{11}$/.test(str);\n  },\n  LT: function LT(str) {\n    return /^(LT)?\\d{9,12}$/.test(str);\n  },\n  LU: function LU(str) {\n    return /^(LU)?\\d{8}$/.test(str);\n  },\n  MT: function MT(str) {\n    return /^(MT)?\\d{8}$/.test(str);\n  },\n  NL: function NL(str) {\n    return /^(NL)?\\d{9}B\\d{2}$/.test(str);\n  },\n  PL: function PL(str) {\n    return /^(PL)?(\\d{10}|(\\d{3}-\\d{3}-\\d{2}-\\d{2})|(\\d{3}-\\d{2}-\\d{2}-\\d{3}))$/.test(str);\n  },\n  PT: PT,\n  RO: function RO(str) {\n    return /^(RO)?\\d{2,10}$/.test(str);\n  },\n  SK: function SK(str) {\n    return /^(SK)?\\d{10}$/.test(str);\n  },\n  SI: function SI(str) {\n    return /^(SI)?\\d{8}$/.test(str);\n  },\n  ES: function ES(str) {\n    return /^(ES)?\\w\\d{7}[A-Z]$/.test(str);\n  },\n  SE: function SE(str) {\n    return /^(SE)?\\d{12}$/.test(str);\n  },\n  /**\r\n   * VAT numbers of non-EU countries\r\n   */\n  AL: function AL(str) {\n    return /^(AL)?\\w{9}[A-Z]$/.test(str);\n  },\n  MK: function MK(str) {\n    return /^(MK)?\\d{13}$/.test(str);\n  },\n  AU: AU,\n  BY: function BY(str) {\n    return /^(УНП )?\\d{9}$/.test(str);\n  },\n  CA: function CA(str) {\n    return /^(CA)?\\d{9}$/.test(str);\n  },\n  IS: function IS(str) {\n    return /^(IS)?\\d{5,6}$/.test(str);\n  },\n  IN: function IN(str) {\n    return /^(IN)?\\d{15}$/.test(str);\n  },\n  ID: function ID(str) {\n    return /^(ID)?(\\d{15}|(\\d{2}.\\d{3}.\\d{3}.\\d{1}-\\d{3}.\\d{3}))$/.test(str);\n  },\n  IL: function IL(str) {\n    return /^(IL)?\\d{9}$/.test(str);\n  },\n  KZ: function KZ(str) {\n    return /^(KZ)?\\d{12}$/.test(str);\n  },\n  NZ: function NZ(str) {\n    return /^(NZ)?\\d{9}$/.test(str);\n  },\n  NG: function NG(str) {\n    return /^(NG)?(\\d{12}|(\\d{8}-\\d{4}))$/.test(str);\n  },\n  NO: function NO(str) {\n    return /^(NO)?\\d{9}MVA$/.test(str);\n  },\n  PH: function PH(str) {\n    return /^(PH)?(\\d{12}|\\d{3} \\d{3} \\d{3} \\d{3})$/.test(str);\n  },\n  RU: function RU(str) {\n    return /^(RU)?(\\d{10}|\\d{12})$/.test(str);\n  },\n  SM: function SM(str) {\n    return /^(SM)?\\d{5}$/.test(str);\n  },\n  SA: function SA(str) {\n    return /^(SA)?\\d{15}$/.test(str);\n  },\n  RS: function RS(str) {\n    return /^(RS)?\\d{9}$/.test(str);\n  },\n  CH: CH,\n  TR: function TR(str) {\n    return /^(TR)?\\d{10}$/.test(str);\n  },\n  UA: function UA(str) {\n    return /^(UA)?\\d{12}$/.test(str);\n  },\n  GB: function GB(str) {\n    return /^GB((\\d{3} \\d{4} ([0-8][0-9]|9[0-6]))|(\\d{9} \\d{3})|(((GD[0-4])|(HA[5-9]))[0-9]{2}))$/.test(str);\n  },\n  UZ: function UZ(str) {\n    return /^(UZ)?\\d{9}$/.test(str);\n  },\n  /**\r\n   * VAT numbers of Latin American countries\r\n   */\n  AR: function AR(str) {\n    return /^(AR)?\\d{11}$/.test(str);\n  },\n  BO: function BO(str) {\n    return /^(BO)?\\d{7}$/.test(str);\n  },\n  BR: function BR(str) {\n    return /^(BR)?((\\d{2}.\\d{3}.\\d{3}\\/\\d{4}-\\d{2})|(\\d{3}.\\d{3}.\\d{3}-\\d{2}))$/.test(str);\n  },\n  CL: function CL(str) {\n    return /^(CL)?\\d{8}-\\d{1}$/.test(str);\n  },\n  CO: function CO(str) {\n    return /^(CO)?\\d{10}$/.test(str);\n  },\n  CR: function CR(str) {\n    return /^(CR)?\\d{9,12}$/.test(str);\n  },\n  EC: function EC(str) {\n    return /^(EC)?\\d{13}$/.test(str);\n  },\n  SV: function SV(str) {\n    return /^(SV)?\\d{4}-\\d{6}-\\d{3}-\\d{1}$/.test(str);\n  },\n  GT: function GT(str) {\n    return /^(GT)?\\d{7}-\\d{1}$/.test(str);\n  },\n  HN: function HN(str) {\n    return /^(HN)?$/.test(str);\n  },\n  MX: function MX(str) {\n    return /^(MX)?\\w{3,4}\\d{6}\\w{3}$/.test(str);\n  },\n  NI: function NI(str) {\n    return /^(NI)?\\d{3}-\\d{6}-\\d{4}\\w{1}$/.test(str);\n  },\n  PA: function PA(str) {\n    return /^(PA)?$/.test(str);\n  },\n  PY: function PY(str) {\n    return /^(PY)?\\d{6,8}-\\d{1}$/.test(str);\n  },\n  PE: function PE(str) {\n    return /^(PE)?\\d{11}$/.test(str);\n  },\n  DO: function DO(str) {\n    return /^(DO)?(\\d{11}|(\\d{3}-\\d{7}-\\d{1})|[1,4,5]{1}\\d{8}|([1,4,5]{1})-\\d{2}-\\d{5}-\\d{1})$/.test(str);\n  },\n  UY: function UY(str) {\n    return /^(UY)?\\d{12}$/.test(str);\n  },\n  VE: function VE(str) {\n    return /^(VE)?[J,G,V,E]{1}-(\\d{9}|(\\d{8}-\\d{1}))$/.test(str);\n  }\n};\nfunction isVAT(str, countryCode) {\n  (0, _assertString.default)(str);\n  (0, _assertString.default)(countryCode);\n  if (countryCode in vatMatchers) {\n    return vatMatchers[countryCode](str);\n  }\n  throw new Error(\"Invalid country code: '\".concat(countryCode, \"'\"));\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isIP;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/**\n11.3.  Examples\n\n   The following addresses\n\n             fe80::1234 (on the 1st link of the node)\n             ff02::5678 (on the 5th link of the node)\n             ff08::9abc (on the 10th organization of the node)\n\n   would be represented as follows:\n\n             fe80::1234%1\n             ff02::5678%5\n             ff08::9abc%10\n\n   (Here we assume a natural translation from a zone index to the\n   <zone_id> part, where the Nth zone of any scope is translated into\n   \"N\".)\n\n   If we use interface names as <zone_id>, those addresses could also be\n   represented as follows:\n\n            fe80::1234%ne0\n            ff02::5678%pvc1.3\n            ff08::9abc%interface10\n\n   where the interface \"ne0\" belongs to the 1st link, \"pvc1.3\" belongs\n   to the 5th link, and \"interface10\" belongs to the 10th organization.\n * * */\nvar IPv4SegmentFormat = '(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';\nvar IPv4AddressFormat = \"(\".concat(IPv4SegmentFormat, \"[.]){3}\").concat(IPv4SegmentFormat);\nvar IPv4AddressRegExp = new RegExp(\"^\".concat(IPv4AddressFormat, \"$\"));\nvar IPv6SegmentFormat = '(?:[0-9a-fA-F]{1,4})';\nvar IPv6AddressRegExp = new RegExp('^(' + \"(?:\".concat(IPv6SegmentFormat, \":){7}(?:\").concat(IPv6SegmentFormat, \"|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){6}(?:\").concat(IPv4AddressFormat, \"|:\").concat(IPv6SegmentFormat, \"|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){5}(?::\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,2}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){4}(?:(:\").concat(IPv6SegmentFormat, \"){0,1}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,3}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){3}(?:(:\").concat(IPv6SegmentFormat, \"){0,2}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,4}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){2}(?:(:\").concat(IPv6SegmentFormat, \"){0,3}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,5}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){1}(?:(:\").concat(IPv6SegmentFormat, \"){0,4}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,6}|:)|\") + \"(?::((?::\".concat(IPv6SegmentFormat, \"){0,5}:\").concat(IPv4AddressFormat, \"|(?::\").concat(IPv6SegmentFormat, \"){1,7}|:))\") + ')(%[0-9a-zA-Z.]{1,})?$');\nfunction isIP(ipAddress) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  (0, _assertString.default)(ipAddress);\n\n  // accessing 'arguments' for backwards compatibility: isIP(ipAddress [, version])\n  // eslint-disable-next-line prefer-rest-params\n  var version = (_typeof(options) === 'object' ? options.version : arguments[1]) || '';\n  if (!version) {\n    return isIP(ipAddress, {\n      version: 4\n    }) || isIP(ipAddress, {\n      version: 6\n    });\n  }\n  if (version.toString() === '4') {\n    return IPv4AddressRegExp.test(ipAddress);\n  }\n  if (version.toString() === '6') {\n    return IPv6AddressRegExp.test(ipAddress);\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isRgbColor;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); } /* eslint-disable prefer-rest-params */\nvar rgbColor = /^rgb\\((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]),){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\)$/;\nvar rgbaColor = /^rgba\\((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]),){3}(0?\\.\\d\\d?|1(\\.0)?|0(\\.0)?)\\)$/;\nvar rgbColorPercent = /^rgb\\((([0-9]%|[1-9][0-9]%|100%),){2}([0-9]%|[1-9][0-9]%|100%)\\)$/;\nvar rgbaColorPercent = /^rgba\\((([0-9]%|[1-9][0-9]%|100%),){3}(0?\\.\\d\\d?|1(\\.0)?|0(\\.0)?)\\)$/;\nvar startsWithRgb = /^rgba?/;\nfunction isRgbColor(str, options) {\n  (0, _assertString.default)(str);\n  // default options to true for percent and false for spaces\n  var allowSpaces = false;\n  var includePercentValues = true;\n  if (_typeof(options) !== 'object') {\n    if (arguments.length >= 2) {\n      includePercentValues = arguments[1];\n    }\n  } else {\n    allowSpaces = options.allowSpaces !== undefined ? options.allowSpaces : allowSpaces;\n    includePercentValues = options.includePercentValues !== undefined ? options.includePercentValues : includePercentValues;\n  }\n  if (allowSpaces) {\n    // make sure it starts with continous rgba? without spaces before stripping\n    if (!startsWithRgb.test(str)) {\n      return false;\n    }\n    // strip all whitespace\n    str = str.replace(/\\s/g, '');\n  }\n  if (!includePercentValues) {\n    return rgbColor.test(str) || rgbaColor.test(str);\n  }\n  return rgbColor.test(str) || rgbaColor.test(str) || rgbColorPercent.test(str) || rgbaColorPercent.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isUppercase;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isUppercase(str) {\n  (0, _assertString.default)(str);\n  return str === str.toUpperCase();\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = multilineRegexp;\n/**\n * Build RegExp object from an array\n * of multiple/multi-line regexp parts\n *\n * @param {string[]} parts\n * @param {string} flags\n * @return {object} - RegExp object\n */\nfunction multilineRegexp(parts, flags) {\n  var regexpAsStringLiteral = parts.join('');\n  return new RegExp(regexpAsStringLiteral, flags);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBtcAddress;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar bech32 = /^(bc1|tb1|bc1p|tb1p)[ac-hj-np-z02-9]{39,58}$/;\nvar base58 = /^(1|2|3|m)[A-HJ-NP-Za-km-z1-9]{25,39}$/;\nfunction isBtcAddress(str) {\n  (0, _assertString.default)(str);\n  return bech32.test(str) || base58.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isJSON;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _includesArray = _interopRequireDefault(require(\"./util/includesArray\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar default_json_options = {\n  allow_primitives: false\n};\nfunction isJSON(str, options) {\n  (0, _assertString.default)(str);\n  try {\n    options = (0, _merge.default)(options, default_json_options);\n    var primitives = [];\n    if (options.allow_primitives) {\n      primitives = [null, false, true];\n    }\n    var obj = JSON.parse(str);\n    return (0, _includesArray.default)(primitives, obj) || !!obj && _typeof(obj) === 'object';\n  } catch (e) {/* ignore */}\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toString;\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction toString(input) {\n  if (_typeof(input) === 'object' && input !== null) {\n    if (typeof input.toString === 'function') {\n      input = input.toString();\n    } else {\n      input = '[object Object]';\n    }\n  } else if (input === null || typeof input === 'undefined' || isNaN(input) && !input.length) {\n    input = '';\n  }\n  return String(input);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isFreightContainerID = void 0;\nexports.isISO6346 = isISO6346;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// https://en.wikipedia.org/wiki/ISO_6346\n// according to ISO6346 standard, checksum digit is mandatory for freight container but recommended\n// for other container types (J and Z)\nvar isISO6346Str = /^[A-Z]{3}(U[0-9]{7})|([J,Z][0-9]{6,7})$/;\nvar isDigit = /^[0-9]$/;\nfunction isISO6346(str) {\n  (0, _assertString.default)(str);\n  str = str.toUpperCase();\n  if (!isISO6346Str.test(str)) return false;\n  if (str.length === 11) {\n    var sum = 0;\n    for (var i = 0; i < str.length - 1; i++) {\n      if (!isDigit.test(str[i])) {\n        var convertedCode = void 0;\n        var letterCode = str.charCodeAt(i) - 55;\n        if (letterCode < 11) convertedCode = letterCode;else if (letterCode >= 11 && letterCode <= 20) convertedCode = 12 + letterCode % 11;else if (letterCode >= 21 && letterCode <= 30) convertedCode = 23 + letterCode % 21;else convertedCode = 34 + letterCode % 31;\n        sum += convertedCode * Math.pow(2, i);\n      } else sum += str[i] * Math.pow(2, i);\n    }\n    var checkSumDigit = sum % 11;\n    if (checkSumDigit === 10) checkSumDigit = 0;\n    return Number(str[str.length - 1]) === checkSumDigit;\n  }\n  return true;\n}\nvar isFreightContainerID = exports.isFreightContainerID = isISO6346;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLatLong;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nvar _includesString = _interopRequireDefault(require(\"./util/includesString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar lat = /^\\(?[+-]?(90(\\.0+)?|[1-8]?\\d(\\.\\d+)?)$/;\nvar long = /^\\s?[+-]?(180(\\.0+)?|1[0-7]\\d(\\.\\d+)?|\\d{1,2}(\\.\\d+)?)\\)?$/;\nvar latDMS = /^(([1-8]?\\d)\\D+([1-5]?\\d|60)\\D+([1-5]?\\d|60)(\\.\\d+)?|90\\D+0\\D+0)\\D+[NSns]?$/i;\nvar longDMS = /^\\s*([1-7]?\\d{1,2}\\D+([1-5]?\\d|60)\\D+([1-5]?\\d|60)(\\.\\d+)?|180\\D+0\\D+0)\\D+[EWew]?$/i;\nvar defaultLatLongOptions = {\n  checkDMS: false\n};\nfunction isLatLong(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, defaultLatLongOptions);\n  if (!(0, _includesString.default)(str, ',')) return false;\n  var pair = str.split(',');\n  if (pair[0].startsWith('(') && !pair[1].endsWith(')') || pair[1].endsWith(')') && !pair[0].startsWith('(')) return false;\n  if (options.checkDMS) {\n    return latDMS.test(pair[0]) && longDMS.test(pair[1]);\n  }\n  return lat.test(pair[0]) && long.test(pair[1]);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isDecimal;\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _includesArray = _interopRequireDefault(require(\"./util/includesArray\"));\nvar _alpha = require(\"./alpha\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction decimalRegExp(options) {\n  var regExp = new RegExp(\"^[-+]?([0-9]+)?(\\\\\".concat(_alpha.decimal[options.locale], \"[0-9]{\").concat(options.decimal_digits, \"})\").concat(options.force_decimal ? '' : '?', \"$\"));\n  return regExp;\n}\nvar default_decimal_options = {\n  force_decimal: false,\n  decimal_digits: '1,',\n  locale: 'en-US'\n};\nvar blacklist = ['', '-', '+'];\nfunction isDecimal(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, default_decimal_options);\n  if (options.locale in _alpha.decimal) {\n    return !(0, _includesArray.default)(blacklist, str.replace(/ /g, '')) && decimalRegExp(options).test(str);\n  }\n  throw new Error(\"Invalid locale '\".concat(options.locale, \"'\"));\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isInt;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _nullUndefinedCheck = _interopRequireDefault(require(\"./util/nullUndefinedCheck\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar int = /^(?:[-+]?(?:0|[1-9][0-9]*))$/;\nvar intLeadingZeroes = /^[-+]?[0-9]+$/;\nfunction isInt(str, options) {\n  (0, _assertString.default)(str);\n  options = options || {};\n\n  // Get the regex to use for testing, based on whether\n  // leading zeroes are allowed or not.\n  var regex = options.allow_leading_zeroes === false ? int : intLeadingZeroes;\n\n  // Check min/max/lt/gt\n  var minCheckPassed = !options.hasOwnProperty('min') || (0, _nullUndefinedCheck.default)(options.min) || str >= options.min;\n  var maxCheckPassed = !options.hasOwnProperty('max') || (0, _nullUndefinedCheck.default)(options.max) || str <= options.max;\n  var ltCheckPassed = !options.hasOwnProperty('lt') || (0, _nullUndefinedCheck.default)(options.lt) || str < options.lt;\n  var gtCheckPassed = !options.hasOwnProperty('gt') || (0, _nullUndefinedCheck.default)(options.gt) || str > options.gt;\n  return regex.test(str) && minCheckPassed && maxCheckPassed && ltCheckPassed && gtCheckPassed;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISO8601;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/* eslint-disable max-len */\n// from http://goo.gl/0ejHHW\nvar iso8601 = /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/;\n// same as above, except with a strict 'T' separator between date and time\nvar iso8601StrictSeparator = /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/;\n/* eslint-enable max-len */\nvar isValidDate = function isValidDate(str) {\n  // str must have passed the ISO8601 check\n  // this check is meant to catch invalid dates\n  // like 2009-02-31\n  // first check for ordinal dates\n  var ordinalMatch = str.match(/^(\\d{4})-?(\\d{3})([ T]{1}\\.*|$)/);\n  if (ordinalMatch) {\n    var oYear = Number(ordinalMatch[1]);\n    var oDay = Number(ordinalMatch[2]);\n    // if is leap year\n    if (oYear % 4 === 0 && oYear % 100 !== 0 || oYear % 400 === 0) return oDay <= 366;\n    return oDay <= 365;\n  }\n  var match = str.match(/(\\d{4})-?(\\d{0,2})-?(\\d*)/).map(Number);\n  var year = match[1];\n  var month = match[2];\n  var day = match[3];\n  var monthString = month ? \"0\".concat(month).slice(-2) : month;\n  var dayString = day ? \"0\".concat(day).slice(-2) : day;\n\n  // create a date object and compare\n  var d = new Date(\"\".concat(year, \"-\").concat(monthString || '01', \"-\").concat(dayString || '01'));\n  if (month && day) {\n    return d.getUTCFullYear() === year && d.getUTCMonth() + 1 === month && d.getUTCDate() === day;\n  }\n  return true;\n};\nfunction isISO8601(str) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  (0, _assertString.default)(str);\n  var check = options.strictSeparator ? iso8601StrictSeparator.test(str) : iso8601.test(str);\n  if (check && options.strict) return isValidDate(str);\n  return check;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isByteLength;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/* eslint-disable prefer-rest-params */\nfunction isByteLength(str, options) {\n  (0, _assertString.default)(str);\n  var min;\n  var max;\n  if (_typeof(options) === 'object') {\n    min = options.min || 0;\n    max = options.max;\n  } else {\n    // backwards compatibility: isByteLength(str, min [, max])\n    min = arguments[1];\n    max = arguments[2];\n  }\n  var len = encodeURI(str).split(/%..|./).length - 1;\n  return len >= min && (typeof max === 'undefined' || len <= max);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isAlpha;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _alpha = require(\"./alpha\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isAlpha(_str) {\n  var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  (0, _assertString.default)(_str);\n  var str = _str;\n  var ignore = options.ignore;\n  if (ignore) {\n    if (ignore instanceof RegExp) {\n      str = str.replace(ignore, '');\n    } else if (typeof ignore === 'string') {\n      str = str.replace(new RegExp(\"[\".concat(ignore.replace(/[-[\\]{}()*+?.,\\\\^$|#\\\\s]/g, '\\\\$&'), \"]\"), 'g'), ''); // escape regex for ignore\n    } else {\n      throw new Error('ignore should be instance of a String or RegExp');\n    }\n  }\n  if (locale in _alpha.alpha) {\n    return _alpha.alpha[locale].test(str);\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}\nvar locales = exports.locales = Object.keys(_alpha.alpha);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBase58;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// Accepted chars - 123456789ABCDEFGH JKLMN PQRSTUVWXYZabcdefghijk mnopqrstuvwxyz\nvar base58Reg = /^[A-HJ-NP-Za-km-z1-9]*$/;\nfunction isBase58(str) {\n  (0, _assertString.default)(str);\n  if (base58Reg.test(str)) {\n    return true;\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBefore;\nvar _toDate = _interopRequireDefault(require(\"./toDate\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction isBefore(date, options) {\n  // For backwards compatibility:\n  // isBefore(str [, date]), i.e. `options` could be used as argument for the legacy `date`\n  var comparisonDate = (_typeof(options) === 'object' ? options.comparisonDate : options) || Date().toString();\n  var comparison = (0, _toDate.default)(comparisonDate);\n  var original = (0, _toDate.default)(date);\n  return !!(original && comparison && original < comparison);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isCurrency;\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction currencyRegex(options) {\n  var decimal_digits = \"\\\\d{\".concat(options.digits_after_decimal[0], \"}\");\n  options.digits_after_decimal.forEach(function (digit, index) {\n    if (index !== 0) decimal_digits = \"\".concat(decimal_digits, \"|\\\\d{\").concat(digit, \"}\");\n  });\n  var symbol = \"(\".concat(options.symbol.replace(/\\W/, function (m) {\n      return \"\\\\\".concat(m);\n    }), \")\").concat(options.require_symbol ? '' : '?'),\n    negative = '-?',\n    whole_dollar_amount_without_sep = '[1-9]\\\\d*',\n    whole_dollar_amount_with_sep = \"[1-9]\\\\d{0,2}(\\\\\".concat(options.thousands_separator, \"\\\\d{3})*\"),\n    valid_whole_dollar_amounts = ['0', whole_dollar_amount_without_sep, whole_dollar_amount_with_sep],\n    whole_dollar_amount = \"(\".concat(valid_whole_dollar_amounts.join('|'), \")?\"),\n    decimal_amount = \"(\\\\\".concat(options.decimal_separator, \"(\").concat(decimal_digits, \"))\").concat(options.require_decimal ? '' : '?');\n  var pattern = whole_dollar_amount + (options.allow_decimal || options.require_decimal ? decimal_amount : '');\n\n  // default is negative sign before symbol, but there are two other options (besides parens)\n  if (options.allow_negatives && !options.parens_for_negatives) {\n    if (options.negative_sign_after_digits) {\n      pattern += negative;\n    } else if (options.negative_sign_before_digits) {\n      pattern = negative + pattern;\n    }\n  }\n\n  // South African Rand, for example, uses R 123 (space) and R-123 (no space)\n  if (options.allow_negative_sign_placeholder) {\n    pattern = \"( (?!\\\\-))?\".concat(pattern);\n  } else if (options.allow_space_after_symbol) {\n    pattern = \" ?\".concat(pattern);\n  } else if (options.allow_space_after_digits) {\n    pattern += '( (?!$))?';\n  }\n  if (options.symbol_after_digits) {\n    pattern += symbol;\n  } else {\n    pattern = symbol + pattern;\n  }\n  if (options.allow_negatives) {\n    if (options.parens_for_negatives) {\n      pattern = \"(\\\\(\".concat(pattern, \"\\\\)|\").concat(pattern, \")\");\n    } else if (!(options.negative_sign_before_digits || options.negative_sign_after_digits)) {\n      pattern = negative + pattern;\n    }\n  }\n\n  // ensure there's a dollar and/or decimal amount, and that\n  // it doesn't start with a space or a negative sign followed by a space\n  return new RegExp(\"^(?!-? )(?=.*\\\\d)\".concat(pattern, \"$\"));\n}\nvar default_currency_options = {\n  symbol: '$',\n  require_symbol: false,\n  allow_space_after_symbol: false,\n  symbol_after_digits: false,\n  allow_negatives: true,\n  parens_for_negatives: false,\n  negative_sign_before_digits: false,\n  negative_sign_after_digits: false,\n  allow_negative_sign_placeholder: false,\n  thousands_separator: ',',\n  decimal_separator: '.',\n  allow_decimal: true,\n  require_decimal: false,\n  digits_after_decimal: [2],\n  allow_space_after_digits: false\n};\nfunction isCurrency(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, default_currency_options);\n  return currencyRegex(options).test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLocale;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/*\n  = 3ALPHA              ; selected ISO 639 codes\n    *2(\"-\" 3ALPHA)      ; permanently reserved\n */\nvar extlang = '([A-Za-z]{3}(-[A-Za-z]{3}){0,2})';\n\n/*\n  = 2*3ALPHA            ; shortest ISO 639 code\n    [\"-\" extlang]       ; sometimes followed by\n                        ; extended language subtags\n  / 4ALPHA              ; or reserved for future use\n  / 5*8ALPHA            ; or registered language subtag\n */\nvar language = \"(([a-zA-Z]{2,3}(-\".concat(extlang, \")?)|([a-zA-Z]{5,8}))\");\n\n/*\n  = 4ALPHA              ; ISO 15924 code\n */\nvar script = '([A-Za-z]{4})';\n\n/*\n  = 2ALPHA              ; ISO 3166-1 code\n  / 3DIGIT              ; UN M.49 code\n */\nvar region = '([A-Za-z]{2}|\\\\d{3})';\n\n/*\n  = 5*8alphanum         ; registered variants\n  / (DIGIT 3alphanum)\n */\nvar variant = '([A-Za-z0-9]{5,8}|(\\\\d[A-Z-a-z0-9]{3}))';\n\n/*\n  = DIGIT               ; 0 - 9\n  / %x41-57             ; A - W\n  / %x59-5A             ; Y - Z\n  / %x61-77             ; a - w\n  / %x79-7A             ; y - z\n */\nvar singleton = '(\\\\d|[A-W]|[Y-Z]|[a-w]|[y-z])';\n\n/*\n  = singleton 1*(\"-\" (2*8alphanum))\n                        ; Single alphanumerics\n                        ; \"x\" reserved for private use\n */\nvar extension = \"(\".concat(singleton, \"(-[A-Za-z0-9]{2,8})+)\");\n\n/*\n  = \"x\" 1*(\"-\" (1*8alphanum))\n */\nvar privateuse = '(x(-[A-Za-z0-9]{1,8})+)';\n\n// irregular tags do not match the 'langtag' production and would not\n// otherwise be considered 'well-formed'. These tags are all valid, but\n// most are deprecated in favor of more modern subtags or subtag combination\n\nvar irregular = '((en-GB-oed)|(i-ami)|(i-bnn)|(i-default)|(i-enochian)|' + '(i-hak)|(i-klingon)|(i-lux)|(i-mingo)|(i-navajo)|(i-pwn)|(i-tao)|' + '(i-tay)|(i-tsu)|(sgn-BE-FR)|(sgn-BE-NL)|(sgn-CH-DE))';\n\n// regular tags match the 'langtag' production, but their subtags are not\n// extended language or variant subtags: their meaning is defined by\n// their registration and all of these are deprecated in favor of a more\n// modern subtag or sequence of subtags\n\nvar regular = '((art-lojban)|(cel-gaulish)|(no-bok)|(no-nyn)|(zh-guoyu)|' + '(zh-hakka)|(zh-min)|(zh-min-nan)|(zh-xiang))';\n\n/*\n  = irregular           ; non-redundant tags registered\n  / regular             ; during the RFC 3066 era\n\n */\nvar grandfathered = \"(\".concat(irregular, \"|\").concat(regular, \")\");\n\n/*\n  RFC 5646 defines delimitation of subtags via a hyphen:\n\n      \"Subtag\" refers to a specific section of a tag, delimited by a\n      hyphen, such as the subtags 'zh', 'Hant', and 'CN' in the tag \"zh-\n      Hant-CN\".  Examples of subtags in this document are enclosed in\n      single quotes ('Hant')\n\n  However, we need to add \"_\" to maintain the existing behaviour.\n */\nvar delimiter = '(-|_)';\n\n/*\n  = language\n    [\"-\" script]\n    [\"-\" region]\n    *(\"-\" variant)\n    *(\"-\" extension)\n    [\"-\" privateuse]\n */\nvar langtag = \"\".concat(language, \"(\").concat(delimiter).concat(script, \")?(\").concat(delimiter).concat(region, \")?(\").concat(delimiter).concat(variant, \")*(\").concat(delimiter).concat(extension, \")*(\").concat(delimiter).concat(privateuse, \")?\");\n\n/*\n  Regex implementation based on BCP RFC 5646\n  Tags for Identifying Languages\n  https://www.rfc-editor.org/rfc/rfc5646.html\n */\nvar languageTagRegex = new RegExp(\"(^\".concat(privateuse, \"$)|(^\").concat(grandfathered, \"$)|(^\").concat(langtag, \"$)\"));\nfunction isLocale(str) {\n  (0, _assertString.default)(str);\n  return languageTagRegex.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isHSL;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar hslComma = /^hsla?\\(((\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?))(deg|grad|rad|turn)?(,(\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?)%){2}(,((\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?)%?))?\\)$/i;\nvar hslSpace = /^hsla?\\(((\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?))(deg|grad|rad|turn)?(\\s(\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?)%){2}\\s?(\\/\\s((\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?)%?)\\s?)?\\)$/i;\nfunction isHSL(str) {\n  (0, _assertString.default)(str);\n\n  // Strip duplicate spaces before calling the validation regex (See  #1598 for more info)\n  var strippedStr = str.replace(/\\s+/g, ' ').replace(/\\s?(hsla?\\(|\\)|,)\\s?/ig, '$1');\n  if (strippedStr.indexOf(',') !== -1) {\n    return hslComma.test(strippedStr);\n  }\n  return hslSpace.test(strippedStr);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isIPRange;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _isIP = _interopRequireDefault(require(\"./isIP\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar subnetMaybe = /^\\d{1,3}$/;\nvar v4Subnet = 32;\nvar v6Subnet = 128;\nfunction isIPRange(str) {\n  var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  (0, _assertString.default)(str);\n  var parts = str.split('/');\n\n  // parts[0] -> ip, parts[1] -> subnet\n  if (parts.length !== 2) {\n    return false;\n  }\n  if (!subnetMaybe.test(parts[1])) {\n    return false;\n  }\n\n  // Disallow preceding 0 i.e. 01, 02, ...\n  if (parts[1].length > 1 && parts[1].startsWith('0')) {\n    return false;\n  }\n  var isValidIP = (0, _isIP.default)(parts[0], version);\n  if (!isValidIP) {\n    return false;\n  }\n\n  // Define valid subnet according to IP's version\n  var expectedSubnet = null;\n  switch (String(version)) {\n    case '4':\n      expectedSubnet = v4Subnet;\n      break;\n    case '6':\n      expectedSubnet = v6Subnet;\n      break;\n    default:\n      expectedSubnet = (0, _isIP.default)(parts[0], '6') ? v6Subnet : v4Subnet;\n  }\n  return parts[1] <= expectedSubnet && parts[1] >= 0;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isStrongPassword;\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar upperCaseRegex = /^[A-Z]$/;\nvar lowerCaseRegex = /^[a-z]$/;\nvar numberRegex = /^[0-9]$/;\nvar symbolRegex = /^[-#!$@£%^&*()_+|~=`{}\\[\\]:\";'<>?,.\\/\\\\ ]$/;\nvar defaultOptions = {\n  minLength: 8,\n  minLowercase: 1,\n  minUppercase: 1,\n  minNumbers: 1,\n  minSymbols: 1,\n  returnScore: false,\n  pointsPerUnique: 1,\n  pointsPerRepeat: 0.5,\n  pointsForContainingLower: 10,\n  pointsForContainingUpper: 10,\n  pointsForContainingNumber: 10,\n  pointsForContainingSymbol: 10\n};\n\n/* Counts number of occurrences of each char in a string\n * could be moved to util/ ?\n*/\nfunction countChars(str) {\n  var result = {};\n  Array.from(str).forEach(function (char) {\n    var curVal = result[char];\n    if (curVal) {\n      result[char] += 1;\n    } else {\n      result[char] = 1;\n    }\n  });\n  return result;\n}\n\n/* Return information about a password */\nfunction analyzePassword(password) {\n  var charMap = countChars(password);\n  var analysis = {\n    length: password.length,\n    uniqueChars: Object.keys(charMap).length,\n    uppercaseCount: 0,\n    lowercaseCount: 0,\n    numberCount: 0,\n    symbolCount: 0\n  };\n  Object.keys(charMap).forEach(function (char) {\n    /* istanbul ignore else */\n    if (upperCaseRegex.test(char)) {\n      analysis.uppercaseCount += charMap[char];\n    } else if (lowerCaseRegex.test(char)) {\n      analysis.lowercaseCount += charMap[char];\n    } else if (numberRegex.test(char)) {\n      analysis.numberCount += charMap[char];\n    } else if (symbolRegex.test(char)) {\n      analysis.symbolCount += charMap[char];\n    }\n  });\n  return analysis;\n}\nfunction scorePassword(analysis, scoringOptions) {\n  var points = 0;\n  points += analysis.uniqueChars * scoringOptions.pointsPerUnique;\n  points += (analysis.length - analysis.uniqueChars) * scoringOptions.pointsPerRepeat;\n  if (analysis.lowercaseCount > 0) {\n    points += scoringOptions.pointsForContainingLower;\n  }\n  if (analysis.uppercaseCount > 0) {\n    points += scoringOptions.pointsForContainingUpper;\n  }\n  if (analysis.numberCount > 0) {\n    points += scoringOptions.pointsForContainingNumber;\n  }\n  if (analysis.symbolCount > 0) {\n    points += scoringOptions.pointsForContainingSymbol;\n  }\n  return points;\n}\nfunction isStrongPassword(str) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  (0, _assertString.default)(str);\n  var analysis = analyzePassword(str);\n  options = (0, _merge.default)(options || {}, defaultOptions);\n  if (options.returnScore) {\n    return scorePassword(analysis, options);\n  }\n  return analysis.length >= options.minLength && analysis.lowercaseCount >= options.minLowercase && analysis.uppercaseCount >= options.minUppercase && analysis.numberCount >= options.minNumbers && analysis.symbolCount >= options.minSymbols;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMagnetURI;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar magnetURIComponent = /(?:^magnet:\\?|[^?&]&)xt(?:\\.1)?=urn:(?:(?:aich|bitprint|btih|ed2k|ed2khash|kzhash|md5|sha1|tree:tiger):[a-z0-9]{32}(?:[a-z0-9]{8})?|btmh:1220[a-z0-9]{64})(?:$|&)/i;\nfunction isMagnetURI(url) {\n  (0, _assertString.default)(url);\n  if (url.indexOf('magnet:?') !== 0) {\n    return false;\n  }\n  return magnetURIComponent.test(url);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLowercase;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isLowercase(str) {\n  (0, _assertString.default)(str);\n  return str === str.toLowerCase();\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isFQDN;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar default_fqdn_options = {\n  require_tld: true,\n  allow_underscores: false,\n  allow_trailing_dot: false,\n  allow_numeric_tld: false,\n  allow_wildcard: false,\n  ignore_max_length: false\n};\nfunction isFQDN(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, default_fqdn_options);\n\n  /* Remove the optional trailing dot before checking validity */\n  if (options.allow_trailing_dot && str[str.length - 1] === '.') {\n    str = str.substring(0, str.length - 1);\n  }\n\n  /* Remove the optional wildcard before checking validity */\n  if (options.allow_wildcard === true && str.indexOf('*.') === 0) {\n    str = str.substring(2);\n  }\n  var parts = str.split('.');\n  var tld = parts[parts.length - 1];\n  if (options.require_tld) {\n    // disallow fqdns without tld\n    if (parts.length < 2) {\n      return false;\n    }\n    if (!options.allow_numeric_tld && !/^([a-z\\u00A1-\\u00A8\\u00AA-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {\n      return false;\n    }\n\n    // disallow spaces\n    if (/\\s/.test(tld)) {\n      return false;\n    }\n  }\n\n  // reject numeric TLDs\n  if (!options.allow_numeric_tld && /^\\d+$/.test(tld)) {\n    return false;\n  }\n  return parts.every(function (part) {\n    if (part.length > 63 && !options.ignore_max_length) {\n      return false;\n    }\n    if (!/^[a-z_\\u00a1-\\uffff0-9-]+$/i.test(part)) {\n      return false;\n    }\n\n    // disallow full-width chars\n    if (/[\\uff01-\\uff5e]/.test(part)) {\n      return false;\n    }\n\n    // disallow parts starting or ending with hyphen\n    if (/^-|-$/.test(part)) {\n      return false;\n    }\n    if (!options.allow_underscores && /_/.test(part)) {\n      return false;\n    }\n    return true;\n  });\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBase32;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar base32 = /^[A-Z2-7]+=*$/;\nvar crockfordBase32 = /^[A-HJKMNP-TV-Z0-9]+$/;\nvar defaultBase32Options = {\n  crockford: false\n};\nfunction isBase32(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, defaultBase32Options);\n  if (options.crockford) {\n    return crockfordBase32.test(str);\n  }\n  var len = str.length;\n  if (len % 8 === 0 && base32.test(str)) {\n    return true;\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = unescape;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction unescape(str) {\n  (0, _assertString.default)(str);\n  return str.replace(/&quot;/g, '\"').replace(/&#x27;/g, \"'\").replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&#x2F;/g, '/').replace(/&#x5C;/g, '\\\\').replace(/&#96;/g, '`').replace(/&amp;/g, '&');\n  // &amp; replacement has to be the last one to prevent\n  // bugs with intermediate strings containing escape sequences\n  // See: https://github.com/validatorjs/validator.js/issues/1827\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isEAN;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/**\n * The most commonly used EAN standard is\n * the thirteen-digit EAN-13, while the\n * less commonly used 8-digit EAN-8 barcode was\n * introduced for use on small packages.\n * Also EAN/UCC-14 is used for Grouping of individual\n * trade items above unit level(Intermediate, Carton or Pallet).\n * For more info about EAN-14 checkout: https://www.gtin.info/itf-14-barcodes/\n * EAN consists of:\n * GS1 prefix, manufacturer code, product code and check digit\n * Reference: https://en.wikipedia.org/wiki/International_Article_Number\n * Reference: https://www.gtin.info/\n */\n\n/**\n * Define EAN Lengths; 8 for EAN-8; 13 for EAN-13; 14 for EAN-14\n * and Regular Expression for valid EANs (EAN-8, EAN-13, EAN-14),\n * with exact numeric matching of 8 or 13 or 14 digits [0-9]\n */\nvar LENGTH_EAN_8 = 8;\nvar LENGTH_EAN_14 = 14;\nvar validEanRegex = /^(\\d{8}|\\d{13}|\\d{14})$/;\n\n/**\n * Get position weight given:\n * EAN length and digit index/position\n *\n * @param {number} length\n * @param {number} index\n * @return {number}\n */\nfunction getPositionWeightThroughLengthAndIndex(length, index) {\n  if (length === LENGTH_EAN_8 || length === LENGTH_EAN_14) {\n    return index % 2 === 0 ? 3 : 1;\n  }\n  return index % 2 === 0 ? 1 : 3;\n}\n\n/**\n * Calculate EAN Check Digit\n * Reference: https://en.wikipedia.org/wiki/International_Article_Number#Calculation_of_checksum_digit\n *\n * @param {string} ean\n * @return {number}\n */\nfunction calculateCheckDigit(ean) {\n  var checksum = ean.slice(0, -1).split('').map(function (char, index) {\n    return Number(char) * getPositionWeightThroughLengthAndIndex(ean.length, index);\n  }).reduce(function (acc, partialSum) {\n    return acc + partialSum;\n  }, 0);\n  var remainder = 10 - checksum % 10;\n  return remainder < 10 ? remainder : 0;\n}\n\n/**\n * Check if string is valid EAN:\n * Matches EAN-8/EAN-13/EAN-14 regex\n * Has valid check digit.\n *\n * @param {string} str\n * @return {boolean}\n */\nfunction isEAN(str) {\n  (0, _assertString.default)(str);\n  var actualCheckDigit = Number(str.slice(-1));\n  return validEanRegex.test(str) && actualCheckDigit === calculateCheckDigit(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isTaxID;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar algorithms = _interopRequireWildcard(require(\"./util/algorithms\"));\nvar _isDate = _interopRequireDefault(require(\"./isDate\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n/**\n * TIN Validation\n * Validates Tax Identification Numbers (TINs) from the US, EU member states and the United Kingdom.\n *\n * EU-UK:\n * National TIN validity is calculated using public algorithms as made available by DG TAXUD.\n *\n * See `https://ec.europa.eu/taxation_customs/tin/specs/FS-TIN%20Algorithms-Public.docx` for more information.\n *\n * US:\n * An Employer Identification Number (EIN), also known as a Federal Tax Identification Number,\n *  is used to identify a business entity.\n *\n * NOTES:\n *  - Prefix 47 is being reserved for future use\n *  - Prefixes 26, 27, 45, 46 and 47 were previously assigned by the Philadelphia campus.\n *\n * See `http://www.irs.gov/Businesses/Small-Businesses-&-Self-Employed/How-EINs-are-Assigned-and-Valid-EIN-Prefixes`\n * for more information.\n */\n\n// Locale functions\n\n/*\n * bg-BG validation function\n * (Edinen graždanski nomer (EGN/ЕГН), persons only)\n * Checks if birth date (first six digits) is valid and calculates check (last) digit\n */\nfunction bgBgCheck(tin) {\n  // Extract full year, normalize month and check birth date validity\n  var century_year = tin.slice(0, 2);\n  var month = parseInt(tin.slice(2, 4), 10);\n  if (month > 40) {\n    month -= 40;\n    century_year = \"20\".concat(century_year);\n  } else if (month > 20) {\n    month -= 20;\n    century_year = \"18\".concat(century_year);\n  } else {\n    century_year = \"19\".concat(century_year);\n  }\n  if (month < 10) {\n    month = \"0\".concat(month);\n  }\n  var date = \"\".concat(century_year, \"/\").concat(month, \"/\").concat(tin.slice(4, 6));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // split digits into an array for further processing\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n\n  // Calculate checksum by multiplying digits with fixed values\n  var multip_lookup = [2, 4, 8, 5, 10, 9, 7, 3, 6];\n  var checksum = 0;\n  for (var i = 0; i < multip_lookup.length; i++) {\n    checksum += digits[i] * multip_lookup[i];\n  }\n  checksum = checksum % 11 === 10 ? 0 : checksum % 11;\n  return checksum === digits[9];\n}\n\n/**\n * Check if an input is a valid Canadian SIN (Social Insurance Number)\n *\n * The Social Insurance Number (SIN) is a 9 digit number that\n * you need to work in Canada or to have access to government programs and benefits.\n *\n * https://en.wikipedia.org/wiki/Social_Insurance_Number\n * https://www.canada.ca/en/employment-social-development/services/sin.html\n * https://www.codercrunch.com/challenge/819302488/sin-validator\n *\n * @param {string} input\n * @return {boolean}\n */\nfunction isCanadianSIN(input) {\n  var digitsArray = input.split('');\n  var even = digitsArray.filter(function (_, idx) {\n    return idx % 2;\n  }).map(function (i) {\n    return Number(i) * 2;\n  }).join('').split('');\n  var total = digitsArray.filter(function (_, idx) {\n    return !(idx % 2);\n  }).concat(even).map(function (i) {\n    return Number(i);\n  }).reduce(function (acc, cur) {\n    return acc + cur;\n  });\n  return total % 10 === 0;\n}\n\n/*\n * cs-CZ validation function\n * (Rodné číslo (RČ), persons only)\n * Checks if birth date (first six digits) is valid and divisibility by 11\n * Material not in DG TAXUD document sourced from:\n * -`https://lorenc.info/3MA381/overeni-spravnosti-rodneho-cisla.htm`\n * -`https://www.mvcr.cz/clanek/rady-a-sluzby-dokumenty-rodne-cislo.aspx`\n */\nfunction csCzCheck(tin) {\n  tin = tin.replace(/\\W/, '');\n\n  // Extract full year from TIN length\n  var full_year = parseInt(tin.slice(0, 2), 10);\n  if (tin.length === 10) {\n    if (full_year < 54) {\n      full_year = \"20\".concat(full_year);\n    } else {\n      full_year = \"19\".concat(full_year);\n    }\n  } else {\n    if (tin.slice(6) === '000') {\n      return false;\n    } // Three-zero serial not assigned before 1954\n    if (full_year < 54) {\n      full_year = \"19\".concat(full_year);\n    } else {\n      return false; // No 18XX years seen in any of the resources\n    }\n  }\n  // Add missing zero if needed\n  if (full_year.length === 3) {\n    full_year = [full_year.slice(0, 2), '0', full_year.slice(2)].join('');\n  }\n\n  // Extract month from TIN and normalize\n  var month = parseInt(tin.slice(2, 4), 10);\n  if (month > 50) {\n    month -= 50;\n  }\n  if (month > 20) {\n    // Month-plus-twenty was only introduced in 2004\n    if (parseInt(full_year, 10) < 2004) {\n      return false;\n    }\n    month -= 20;\n  }\n  if (month < 10) {\n    month = \"0\".concat(month);\n  }\n\n  // Check date validity\n  var date = \"\".concat(full_year, \"/\").concat(month, \"/\").concat(tin.slice(4, 6));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // Verify divisibility by 11\n  if (tin.length === 10) {\n    if (parseInt(tin, 10) % 11 !== 0) {\n      // Some numbers up to and including 1985 are still valid if\n      // check (last) digit equals 0 and modulo of first 9 digits equals 10\n      var checkdigit = parseInt(tin.slice(0, 9), 10) % 11;\n      if (parseInt(full_year, 10) < 1986 && checkdigit === 10) {\n        if (parseInt(tin.slice(9), 10) !== 0) {\n          return false;\n        }\n      } else {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n/*\n * de-AT validation function\n * (Abgabenkontonummer, persons/entities)\n * Verify TIN validity by calling luhnCheck()\n */\nfunction deAtCheck(tin) {\n  return algorithms.luhnCheck(tin);\n}\n\n/*\n * de-DE validation function\n * (Steueridentifikationsnummer (Steuer-IdNr.), persons only)\n * Tests for single duplicate/triplicate value, then calculates ISO 7064 check (last) digit\n * Partial implementation of spec (same result with both algorithms always)\n */\nfunction deDeCheck(tin) {\n  // Split digits into an array for further processing\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n\n  // Fill array with strings of number positions\n  var occurrences = [];\n  for (var i = 0; i < digits.length - 1; i++) {\n    occurrences.push('');\n    for (var j = 0; j < digits.length - 1; j++) {\n      if (digits[i] === digits[j]) {\n        occurrences[i] += j;\n      }\n    }\n  }\n\n  // Remove digits with one occurrence and test for only one duplicate/triplicate\n  occurrences = occurrences.filter(function (a) {\n    return a.length > 1;\n  });\n  if (occurrences.length !== 2 && occurrences.length !== 3) {\n    return false;\n  }\n\n  // In case of triplicate value only two digits are allowed next to each other\n  if (occurrences[0].length === 3) {\n    var trip_locations = occurrences[0].split('').map(function (a) {\n      return parseInt(a, 10);\n    });\n    var recurrent = 0; // Amount of neighbor occurrences\n    for (var _i = 0; _i < trip_locations.length - 1; _i++) {\n      if (trip_locations[_i] + 1 === trip_locations[_i + 1]) {\n        recurrent += 1;\n      }\n    }\n    if (recurrent === 2) {\n      return false;\n    }\n  }\n  return algorithms.iso7064Check(tin);\n}\n\n/*\n * dk-DK validation function\n * (CPR-nummer (personnummer), persons only)\n * Checks if birth date (first six digits) is valid and assigned to century (seventh) digit,\n * and calculates check (last) digit\n */\nfunction dkDkCheck(tin) {\n  tin = tin.replace(/\\W/, '');\n\n  // Extract year, check if valid for given century digit and add century\n  var year = parseInt(tin.slice(4, 6), 10);\n  var century_digit = tin.slice(6, 7);\n  switch (century_digit) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n      year = \"19\".concat(year);\n      break;\n    case '4':\n    case '9':\n      if (year < 37) {\n        year = \"20\".concat(year);\n      } else {\n        year = \"19\".concat(year);\n      }\n      break;\n    default:\n      if (year < 37) {\n        year = \"20\".concat(year);\n      } else if (year > 58) {\n        year = \"18\".concat(year);\n      } else {\n        return false;\n      }\n      break;\n  }\n  // Add missing zero if needed\n  if (year.length === 3) {\n    year = [year.slice(0, 2), '0', year.slice(2)].join('');\n  }\n  // Check date validity\n  var date = \"\".concat(year, \"/\").concat(tin.slice(2, 4), \"/\").concat(tin.slice(0, 2));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // Split digits into an array for further processing\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n  var checksum = 0;\n  var weight = 4;\n  // Multiply by weight and add to checksum\n  for (var i = 0; i < 9; i++) {\n    checksum += digits[i] * weight;\n    weight -= 1;\n    if (weight === 1) {\n      weight = 7;\n    }\n  }\n  checksum %= 11;\n  if (checksum === 1) {\n    return false;\n  }\n  return checksum === 0 ? digits[9] === 0 : digits[9] === 11 - checksum;\n}\n\n/*\n * el-CY validation function\n * (Arithmos Forologikou Mitroou (AFM/ΑΦΜ), persons only)\n * Verify TIN validity by calculating ASCII value of check (last) character\n */\nfunction elCyCheck(tin) {\n  // split digits into an array for further processing\n  var digits = tin.slice(0, 8).split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n  var checksum = 0;\n  // add digits in even places\n  for (var i = 1; i < digits.length; i += 2) {\n    checksum += digits[i];\n  }\n\n  // add digits in odd places\n  for (var _i2 = 0; _i2 < digits.length; _i2 += 2) {\n    if (digits[_i2] < 2) {\n      checksum += 1 - digits[_i2];\n    } else {\n      checksum += 2 * (digits[_i2] - 2) + 5;\n      if (digits[_i2] > 4) {\n        checksum += 2;\n      }\n    }\n  }\n  return String.fromCharCode(checksum % 26 + 65) === tin.charAt(8);\n}\n\n/*\n * el-GR validation function\n * (Arithmos Forologikou Mitroou (AFM/ΑΦΜ), persons/entities)\n * Verify TIN validity by calculating check (last) digit\n * Algorithm not in DG TAXUD document- sourced from:\n * - `http://epixeirisi.gr/%CE%9A%CE%A1%CE%99%CE%A3%CE%99%CE%9C%CE%91-%CE%98%CE%95%CE%9C%CE%91%CE%A4%CE%91-%CE%A6%CE%9F%CE%A1%CE%9F%CE%9B%CE%9F%CE%93%CE%99%CE%91%CE%A3-%CE%9A%CE%91%CE%99-%CE%9B%CE%9F%CE%93%CE%99%CE%A3%CE%A4%CE%99%CE%9A%CE%97%CE%A3/23791/%CE%91%CF%81%CE%B9%CE%B8%CE%BC%CF%8C%CF%82-%CE%A6%CE%BF%CF%81%CE%BF%CE%BB%CE%BF%CE%B3%CE%B9%CE%BA%CE%BF%CF%8D-%CE%9C%CE%B7%CF%84%CF%81%CF%8E%CE%BF%CF%85`\n */\nfunction elGrCheck(tin) {\n  // split digits into an array for further processing\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n  var checksum = 0;\n  for (var i = 0; i < 8; i++) {\n    checksum += digits[i] * Math.pow(2, 8 - i);\n  }\n  return checksum % 11 % 10 === digits[8];\n}\n\n/*\n * en-GB validation function (should go here if needed)\n * (National Insurance Number (NINO) or Unique Taxpayer Reference (UTR),\n * persons/entities respectively)\n */\n\n/*\n * en-IE validation function\n * (Personal Public Service Number (PPS No), persons only)\n * Verify TIN validity by calculating check (second to last) character\n */\nfunction enIeCheck(tin) {\n  var checksum = algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 7).map(function (a) {\n    return parseInt(a, 10);\n  }), 8);\n  if (tin.length === 9 && tin[8] !== 'W') {\n    checksum += (tin[8].charCodeAt(0) - 64) * 9;\n  }\n  checksum %= 23;\n  if (checksum === 0) {\n    return tin[7].toUpperCase() === 'W';\n  }\n  return tin[7].toUpperCase() === String.fromCharCode(64 + checksum);\n}\n\n// Valid US IRS campus prefixes\nvar enUsCampusPrefix = {\n  andover: ['10', '12'],\n  atlanta: ['60', '67'],\n  austin: ['50', '53'],\n  brookhaven: ['01', '02', '03', '04', '05', '06', '11', '13', '14', '16', '21', '22', '23', '25', '34', '51', '52', '54', '55', '56', '57', '58', '59', '65'],\n  cincinnati: ['30', '32', '35', '36', '37', '38', '61'],\n  fresno: ['15', '24'],\n  internet: ['20', '26', '27', '45', '46', '47'],\n  kansas: ['40', '44'],\n  memphis: ['94', '95'],\n  ogden: ['80', '90'],\n  philadelphia: ['33', '39', '41', '42', '43', '46', '48', '62', '63', '64', '66', '68', '71', '72', '73', '74', '75', '76', '77', '81', '82', '83', '84', '85', '86', '87', '88', '91', '92', '93', '98', '99'],\n  sba: ['31']\n};\n\n// Return an array of all US IRS campus prefixes\nfunction enUsGetPrefixes() {\n  var prefixes = [];\n  for (var location in enUsCampusPrefix) {\n    // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes\n    // istanbul ignore else\n    if (enUsCampusPrefix.hasOwnProperty(location)) {\n      prefixes.push.apply(prefixes, _toConsumableArray(enUsCampusPrefix[location]));\n    }\n  }\n  return prefixes;\n}\n\n/*\n * en-US validation function\n * Verify that the TIN starts with a valid IRS campus prefix\n */\nfunction enUsCheck(tin) {\n  return enUsGetPrefixes().indexOf(tin.slice(0, 2)) !== -1;\n}\n\n/*\n * es-AR validation function\n * Clave Única de Identificación Tributaria (CUIT/CUIL)\n * Sourced from:\n * - https://servicioscf.afip.gob.ar/publico/abc/ABCpaso2.aspx?id_nivel1=3036&id_nivel2=3040&p=Conceptos%20b%C3%A1sicos\n * - https://es.wikipedia.org/wiki/Clave_%C3%9Anica_de_Identificaci%C3%B3n_Tributaria\n */\n\nfunction esArCheck(tin) {\n  var accum = 0;\n  var digits = tin.split('');\n  var digit = parseInt(digits.pop(), 10);\n  for (var i = 0; i < digits.length; i++) {\n    accum += digits[9 - i] * (2 + i % 6);\n  }\n  var verif = 11 - accum % 11;\n  if (verif === 11) {\n    verif = 0;\n  } else if (verif === 10) {\n    verif = 9;\n  }\n  return digit === verif;\n}\n\n/*\n * es-ES validation function\n * (Documento Nacional de Identidad (DNI)\n * or Número de Identificación de Extranjero (NIE), persons only)\n * Verify TIN validity by calculating check (last) character\n */\nfunction esEsCheck(tin) {\n  // Split characters into an array for further processing\n  var chars = tin.toUpperCase().split('');\n\n  // Replace initial letter if needed\n  if (isNaN(parseInt(chars[0], 10)) && chars.length > 1) {\n    var lead_replace = 0;\n    switch (chars[0]) {\n      case 'Y':\n        lead_replace = 1;\n        break;\n      case 'Z':\n        lead_replace = 2;\n        break;\n      default:\n    }\n    chars.splice(0, 1, lead_replace);\n    // Fill with zeros if smaller than proper\n  } else {\n    while (chars.length < 9) {\n      chars.unshift(0);\n    }\n  }\n\n  // Calculate checksum and check according to lookup\n  var lookup = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E'];\n  chars = chars.join('');\n  var checksum = parseInt(chars.slice(0, 8), 10) % 23;\n  return chars[8] === lookup[checksum];\n}\n\n/*\n * et-EE validation function\n * (Isikukood (IK), persons only)\n * Checks if birth date (century digit and six following) is valid and calculates check (last) digit\n * Material not in DG TAXUD document sourced from:\n * - `https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Estonia-TIN.pdf`\n */\nfunction etEeCheck(tin) {\n  // Extract year and add century\n  var full_year = tin.slice(1, 3);\n  var century_digit = tin.slice(0, 1);\n  switch (century_digit) {\n    case '1':\n    case '2':\n      full_year = \"18\".concat(full_year);\n      break;\n    case '3':\n    case '4':\n      full_year = \"19\".concat(full_year);\n      break;\n    default:\n      full_year = \"20\".concat(full_year);\n      break;\n  }\n  // Check date validity\n  var date = \"\".concat(full_year, \"/\").concat(tin.slice(3, 5), \"/\").concat(tin.slice(5, 7));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // Split digits into an array for further processing\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n  var checksum = 0;\n  var weight = 1;\n  // Multiply by weight and add to checksum\n  for (var i = 0; i < 10; i++) {\n    checksum += digits[i] * weight;\n    weight += 1;\n    if (weight === 10) {\n      weight = 1;\n    }\n  }\n  // Do again if modulo 11 of checksum is 10\n  if (checksum % 11 === 10) {\n    checksum = 0;\n    weight = 3;\n    for (var _i3 = 0; _i3 < 10; _i3++) {\n      checksum += digits[_i3] * weight;\n      weight += 1;\n      if (weight === 10) {\n        weight = 1;\n      }\n    }\n    if (checksum % 11 === 10) {\n      return digits[10] === 0;\n    }\n  }\n  return checksum % 11 === digits[10];\n}\n\n/*\n * fi-FI validation function\n * (Henkilötunnus (HETU), persons only)\n * Checks if birth date (first six digits plus century symbol) is valid\n * and calculates check (last) digit\n */\nfunction fiFiCheck(tin) {\n  // Extract year and add century\n  var full_year = tin.slice(4, 6);\n  var century_symbol = tin.slice(6, 7);\n  switch (century_symbol) {\n    case '+':\n      full_year = \"18\".concat(full_year);\n      break;\n    case '-':\n      full_year = \"19\".concat(full_year);\n      break;\n    default:\n      full_year = \"20\".concat(full_year);\n      break;\n  }\n  // Check date validity\n  var date = \"\".concat(full_year, \"/\").concat(tin.slice(2, 4), \"/\").concat(tin.slice(0, 2));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // Calculate check character\n  var checksum = parseInt(tin.slice(0, 6) + tin.slice(7, 10), 10) % 31;\n  if (checksum < 10) {\n    return checksum === parseInt(tin.slice(10), 10);\n  }\n  checksum -= 10;\n  var letters_lookup = ['A', 'B', 'C', 'D', 'E', 'F', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y'];\n  return letters_lookup[checksum] === tin.slice(10);\n}\n\n/*\n * fr/nl-BE validation function\n * (Numéro national (N.N.), persons only)\n * Checks if birth date (first six digits) is valid and calculates check (last two) digits\n */\nfunction frBeCheck(tin) {\n  // Zero month/day value is acceptable\n  if (tin.slice(2, 4) !== '00' || tin.slice(4, 6) !== '00') {\n    // Extract date from first six digits of TIN\n    var date = \"\".concat(tin.slice(0, 2), \"/\").concat(tin.slice(2, 4), \"/\").concat(tin.slice(4, 6));\n    if (!(0, _isDate.default)(date, 'YY/MM/DD')) {\n      return false;\n    }\n  }\n  var checksum = 97 - parseInt(tin.slice(0, 9), 10) % 97;\n  var checkdigits = parseInt(tin.slice(9, 11), 10);\n  if (checksum !== checkdigits) {\n    checksum = 97 - parseInt(\"2\".concat(tin.slice(0, 9)), 10) % 97;\n    if (checksum !== checkdigits) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/*\n * fr-FR validation function\n * (Numéro fiscal de référence (numéro SPI), persons only)\n * Verify TIN validity by calculating check (last three) digits\n */\nfunction frFrCheck(tin) {\n  tin = tin.replace(/\\s/g, '');\n  var checksum = parseInt(tin.slice(0, 10), 10) % 511;\n  var checkdigits = parseInt(tin.slice(10, 13), 10);\n  return checksum === checkdigits;\n}\n\n/*\n * fr/lb-LU validation function\n * (numéro d’identification personnelle, persons only)\n * Verify birth date validity and run Luhn and Verhoeff checks\n */\nfunction frLuCheck(tin) {\n  // Extract date and check validity\n  var date = \"\".concat(tin.slice(0, 4), \"/\").concat(tin.slice(4, 6), \"/\").concat(tin.slice(6, 8));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // Run Luhn check\n  if (!algorithms.luhnCheck(tin.slice(0, 12))) {\n    return false;\n  }\n  // Remove Luhn check digit and run Verhoeff check\n  return algorithms.verhoeffCheck(\"\".concat(tin.slice(0, 11)).concat(tin[12]));\n}\n\n/*\n * hr-HR validation function\n * (Osobni identifikacijski broj (OIB), persons/entities)\n * Verify TIN validity by calling iso7064Check(digits)\n */\nfunction hrHrCheck(tin) {\n  return algorithms.iso7064Check(tin);\n}\n\n/*\n * hu-HU validation function\n * (Adóazonosító jel, persons only)\n * Verify TIN validity by calculating check (last) digit\n */\nfunction huHuCheck(tin) {\n  // split digits into an array for further processing\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n  var checksum = 8;\n  for (var i = 1; i < 9; i++) {\n    checksum += digits[i] * (i + 1);\n  }\n  return checksum % 11 === digits[9];\n}\n\n/*\n * lt-LT validation function (should go here if needed)\n * (Asmens kodas, persons/entities respectively)\n * Current validation check is alias of etEeCheck- same format applies\n */\n\n/*\n * it-IT first/last name validity check\n * Accepts it-IT TIN-encoded names as a three-element character array and checks their validity\n * Due to lack of clarity between resources (\"Are only Italian consonants used?\n * What happens if a person has X in their name?\" etc.) only two test conditions\n * have been implemented:\n * Vowels may only be followed by other vowels or an X character\n * and X characters after vowels may only be followed by other X characters.\n */\nfunction itItNameCheck(name) {\n  // true at the first occurrence of a vowel\n  var vowelflag = false;\n\n  // true at the first occurrence of an X AFTER vowel\n  // (to properly handle last names with X as consonant)\n  var xflag = false;\n  for (var i = 0; i < 3; i++) {\n    if (!vowelflag && /[AEIOU]/.test(name[i])) {\n      vowelflag = true;\n    } else if (!xflag && vowelflag && name[i] === 'X') {\n      xflag = true;\n    } else if (i > 0) {\n      if (vowelflag && !xflag) {\n        if (!/[AEIOU]/.test(name[i])) {\n          return false;\n        }\n      }\n      if (xflag) {\n        if (!/X/.test(name[i])) {\n          return false;\n        }\n      }\n    }\n  }\n  return true;\n}\n\n/*\n * it-IT validation function\n * (Codice fiscale (TIN-IT), persons only)\n * Verify name, birth date and codice catastale validity\n * and calculate check character.\n * Material not in DG-TAXUD document sourced from:\n * `https://en.wikipedia.org/wiki/Italian_fiscal_code`\n */\nfunction itItCheck(tin) {\n  // Capitalize and split characters into an array for further processing\n  var chars = tin.toUpperCase().split('');\n\n  // Check first and last name validity calling itItNameCheck()\n  if (!itItNameCheck(chars.slice(0, 3))) {\n    return false;\n  }\n  if (!itItNameCheck(chars.slice(3, 6))) {\n    return false;\n  }\n\n  // Convert letters in number spaces back to numbers if any\n  var number_locations = [6, 7, 9, 10, 12, 13, 14];\n  var number_replace = {\n    L: '0',\n    M: '1',\n    N: '2',\n    P: '3',\n    Q: '4',\n    R: '5',\n    S: '6',\n    T: '7',\n    U: '8',\n    V: '9'\n  };\n  for (var _i4 = 0, _number_locations = number_locations; _i4 < _number_locations.length; _i4++) {\n    var i = _number_locations[_i4];\n    if (chars[i] in number_replace) {\n      chars.splice(i, 1, number_replace[chars[i]]);\n    }\n  }\n\n  // Extract month and day, and check date validity\n  var month_replace = {\n    A: '01',\n    B: '02',\n    C: '03',\n    D: '04',\n    E: '05',\n    H: '06',\n    L: '07',\n    M: '08',\n    P: '09',\n    R: '10',\n    S: '11',\n    T: '12'\n  };\n  var month = month_replace[chars[8]];\n  var day = parseInt(chars[9] + chars[10], 10);\n  if (day > 40) {\n    day -= 40;\n  }\n  if (day < 10) {\n    day = \"0\".concat(day);\n  }\n  var date = \"\".concat(chars[6]).concat(chars[7], \"/\").concat(month, \"/\").concat(day);\n  if (!(0, _isDate.default)(date, 'YY/MM/DD')) {\n    return false;\n  }\n\n  // Calculate check character by adding up even and odd characters as numbers\n  var checksum = 0;\n  for (var _i5 = 1; _i5 < chars.length - 1; _i5 += 2) {\n    var char_to_int = parseInt(chars[_i5], 10);\n    if (isNaN(char_to_int)) {\n      char_to_int = chars[_i5].charCodeAt(0) - 65;\n    }\n    checksum += char_to_int;\n  }\n  var odd_convert = {\n    // Maps of characters at odd places\n    A: 1,\n    B: 0,\n    C: 5,\n    D: 7,\n    E: 9,\n    F: 13,\n    G: 15,\n    H: 17,\n    I: 19,\n    J: 21,\n    K: 2,\n    L: 4,\n    M: 18,\n    N: 20,\n    O: 11,\n    P: 3,\n    Q: 6,\n    R: 8,\n    S: 12,\n    T: 14,\n    U: 16,\n    V: 10,\n    W: 22,\n    X: 25,\n    Y: 24,\n    Z: 23,\n    0: 1,\n    1: 0\n  };\n  for (var _i6 = 0; _i6 < chars.length - 1; _i6 += 2) {\n    var _char_to_int = 0;\n    if (chars[_i6] in odd_convert) {\n      _char_to_int = odd_convert[chars[_i6]];\n    } else {\n      var multiplier = parseInt(chars[_i6], 10);\n      _char_to_int = 2 * multiplier + 1;\n      if (multiplier > 4) {\n        _char_to_int += 2;\n      }\n    }\n    checksum += _char_to_int;\n  }\n  if (String.fromCharCode(65 + checksum % 26) !== chars[15]) {\n    return false;\n  }\n  return true;\n}\n\n/*\n * lv-LV validation function\n * (Personas kods (PK), persons only)\n * Check validity of birth date and calculate check (last) digit\n * Support only for old format numbers (not starting with '32', issued before 2017/07/01)\n * Material not in DG TAXUD document sourced from:\n * `https://boot.ritakafija.lv/forums/index.php?/topic/88314-personas-koda-algoritms-%C4%8Deksumma/`\n */\nfunction lvLvCheck(tin) {\n  tin = tin.replace(/\\W/, '');\n  // Extract date from TIN\n  var day = tin.slice(0, 2);\n  if (day !== '32') {\n    // No date/checksum check if new format\n    var month = tin.slice(2, 4);\n    if (month !== '00') {\n      // No date check if unknown month\n      var full_year = tin.slice(4, 6);\n      switch (tin[6]) {\n        case '0':\n          full_year = \"18\".concat(full_year);\n          break;\n        case '1':\n          full_year = \"19\".concat(full_year);\n          break;\n        default:\n          full_year = \"20\".concat(full_year);\n          break;\n      }\n      // Check date validity\n      var date = \"\".concat(full_year, \"/\").concat(tin.slice(2, 4), \"/\").concat(day);\n      if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n        return false;\n      }\n    }\n\n    // Calculate check digit\n    var checksum = 1101;\n    var multip_lookup = [1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n    for (var i = 0; i < tin.length - 1; i++) {\n      checksum -= parseInt(tin[i], 10) * multip_lookup[i];\n    }\n    return parseInt(tin[10], 10) === checksum % 11;\n  }\n  return true;\n}\n\n/*\n * mt-MT validation function\n * (Identity Card Number or Unique Taxpayer Reference, persons/entities)\n * Verify Identity Card Number structure (no other tests found)\n */\nfunction mtMtCheck(tin) {\n  if (tin.length !== 9) {\n    // No tests for UTR\n    var chars = tin.toUpperCase().split('');\n    // Fill with zeros if smaller than proper\n    while (chars.length < 8) {\n      chars.unshift(0);\n    }\n    // Validate format according to last character\n    switch (tin[7]) {\n      case 'A':\n      case 'P':\n        if (parseInt(chars[6], 10) === 0) {\n          return false;\n        }\n        break;\n      default:\n        {\n          var first_part = parseInt(chars.join('').slice(0, 5), 10);\n          if (first_part > 32000) {\n            return false;\n          }\n          var second_part = parseInt(chars.join('').slice(5, 7), 10);\n          if (first_part === second_part) {\n            return false;\n          }\n        }\n    }\n  }\n  return true;\n}\n\n/*\n * nl-NL validation function\n * (Burgerservicenummer (BSN) or Rechtspersonen Samenwerkingsverbanden Informatie Nummer (RSIN),\n * persons/entities respectively)\n * Verify TIN validity by calculating check (last) digit (variant of MOD 11)\n */\nfunction nlNlCheck(tin) {\n  return algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 8).map(function (a) {\n    return parseInt(a, 10);\n  }), 9) % 11 === parseInt(tin[8], 10);\n}\n\n/*\n * pl-PL validation function\n * (Powszechny Elektroniczny System Ewidencji Ludności (PESEL)\n * or Numer identyfikacji podatkowej (NIP), persons/entities)\n * Verify TIN validity by validating birth date (PESEL) and calculating check (last) digit\n */\nfunction plPlCheck(tin) {\n  // NIP\n  if (tin.length === 10) {\n    // Calculate last digit by multiplying with lookup\n    var lookup = [6, 5, 7, 2, 3, 4, 5, 6, 7];\n    var _checksum = 0;\n    for (var i = 0; i < lookup.length; i++) {\n      _checksum += parseInt(tin[i], 10) * lookup[i];\n    }\n    _checksum %= 11;\n    if (_checksum === 10) {\n      return false;\n    }\n    return _checksum === parseInt(tin[9], 10);\n  }\n\n  // PESEL\n  // Extract full year using month\n  var full_year = tin.slice(0, 2);\n  var month = parseInt(tin.slice(2, 4), 10);\n  if (month > 80) {\n    full_year = \"18\".concat(full_year);\n    month -= 80;\n  } else if (month > 60) {\n    full_year = \"22\".concat(full_year);\n    month -= 60;\n  } else if (month > 40) {\n    full_year = \"21\".concat(full_year);\n    month -= 40;\n  } else if (month > 20) {\n    full_year = \"20\".concat(full_year);\n    month -= 20;\n  } else {\n    full_year = \"19\".concat(full_year);\n  }\n  // Add leading zero to month if needed\n  if (month < 10) {\n    month = \"0\".concat(month);\n  }\n  // Check date validity\n  var date = \"\".concat(full_year, \"/\").concat(month, \"/\").concat(tin.slice(4, 6));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // Calculate last digit by multiplying with odd one-digit numbers except 5\n  var checksum = 0;\n  var multiplier = 1;\n  for (var _i7 = 0; _i7 < tin.length - 1; _i7++) {\n    checksum += parseInt(tin[_i7], 10) * multiplier % 10;\n    multiplier += 2;\n    if (multiplier > 10) {\n      multiplier = 1;\n    } else if (multiplier === 5) {\n      multiplier += 2;\n    }\n  }\n  checksum = 10 - checksum % 10;\n  return checksum === parseInt(tin[10], 10);\n}\n\n/*\n* pt-BR validation function\n* (Cadastro de Pessoas Físicas (CPF, persons)\n* Cadastro Nacional de Pessoas Jurídicas (CNPJ, entities)\n* Both inputs will be validated\n*/\n\nfunction ptBrCheck(tin) {\n  if (tin.length === 11) {\n    var _sum;\n    var remainder;\n    _sum = 0;\n    if (\n    // Reject known invalid CPFs\n    tin === '11111111111' || tin === '22222222222' || tin === '33333333333' || tin === '44444444444' || tin === '55555555555' || tin === '66666666666' || tin === '77777777777' || tin === '88888888888' || tin === '99999999999' || tin === '00000000000') return false;\n    for (var i = 1; i <= 9; i++) _sum += parseInt(tin.substring(i - 1, i), 10) * (11 - i);\n    remainder = _sum * 10 % 11;\n    if (remainder === 10) remainder = 0;\n    if (remainder !== parseInt(tin.substring(9, 10), 10)) return false;\n    _sum = 0;\n    for (var _i8 = 1; _i8 <= 10; _i8++) _sum += parseInt(tin.substring(_i8 - 1, _i8), 10) * (12 - _i8);\n    remainder = _sum * 10 % 11;\n    if (remainder === 10) remainder = 0;\n    if (remainder !== parseInt(tin.substring(10, 11), 10)) return false;\n    return true;\n  }\n  if (\n  // Reject know invalid CNPJs\n  tin === '00000000000000' || tin === '11111111111111' || tin === '22222222222222' || tin === '33333333333333' || tin === '44444444444444' || tin === '55555555555555' || tin === '66666666666666' || tin === '77777777777777' || tin === '88888888888888' || tin === '99999999999999') {\n    return false;\n  }\n  var length = tin.length - 2;\n  var identifiers = tin.substring(0, length);\n  var verificators = tin.substring(length);\n  var sum = 0;\n  var pos = length - 7;\n  for (var _i9 = length; _i9 >= 1; _i9--) {\n    sum += identifiers.charAt(length - _i9) * pos;\n    pos -= 1;\n    if (pos < 2) {\n      pos = 9;\n    }\n  }\n  var result = sum % 11 < 2 ? 0 : 11 - sum % 11;\n  if (result !== parseInt(verificators.charAt(0), 10)) {\n    return false;\n  }\n  length += 1;\n  identifiers = tin.substring(0, length);\n  sum = 0;\n  pos = length - 7;\n  for (var _i0 = length; _i0 >= 1; _i0--) {\n    sum += identifiers.charAt(length - _i0) * pos;\n    pos -= 1;\n    if (pos < 2) {\n      pos = 9;\n    }\n  }\n  result = sum % 11 < 2 ? 0 : 11 - sum % 11;\n  if (result !== parseInt(verificators.charAt(1), 10)) {\n    return false;\n  }\n  return true;\n}\n\n/*\n * pt-PT validation function\n * (Número de identificação fiscal (NIF), persons/entities)\n * Verify TIN validity by calculating check (last) digit (variant of MOD 11)\n */\nfunction ptPtCheck(tin) {\n  var checksum = 11 - algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 8).map(function (a) {\n    return parseInt(a, 10);\n  }), 9) % 11;\n  if (checksum > 9) {\n    return parseInt(tin[8], 10) === 0;\n  }\n  return checksum === parseInt(tin[8], 10);\n}\n\n/*\n * ro-RO validation function\n * (Cod Numeric Personal (CNP) or Cod de înregistrare fiscală (CIF),\n * persons only)\n * Verify CNP validity by calculating check (last) digit (test not found for CIF)\n * Material not in DG TAXUD document sourced from:\n * `https://en.wikipedia.org/wiki/National_identification_number#Romania`\n */\nfunction roRoCheck(tin) {\n  if (tin.slice(0, 4) !== '9000') {\n    // No test found for this format\n    // Extract full year using century digit if possible\n    var full_year = tin.slice(1, 3);\n    switch (tin[0]) {\n      case '1':\n      case '2':\n        full_year = \"19\".concat(full_year);\n        break;\n      case '3':\n      case '4':\n        full_year = \"18\".concat(full_year);\n        break;\n      case '5':\n      case '6':\n        full_year = \"20\".concat(full_year);\n        break;\n      default:\n    }\n\n    // Check date validity\n    var date = \"\".concat(full_year, \"/\").concat(tin.slice(3, 5), \"/\").concat(tin.slice(5, 7));\n    if (date.length === 8) {\n      if (!(0, _isDate.default)(date, 'YY/MM/DD')) {\n        return false;\n      }\n    } else if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n      return false;\n    }\n\n    // Calculate check digit\n    var digits = tin.split('').map(function (a) {\n      return parseInt(a, 10);\n    });\n    var multipliers = [2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9];\n    var checksum = 0;\n    for (var i = 0; i < multipliers.length; i++) {\n      checksum += digits[i] * multipliers[i];\n    }\n    if (checksum % 11 === 10) {\n      return digits[12] === 1;\n    }\n    return digits[12] === checksum % 11;\n  }\n  return true;\n}\n\n/*\n * sk-SK validation function\n * (Rodné číslo (RČ) or bezvýznamové identifikačné číslo (BIČ), persons only)\n * Checks validity of pre-1954 birth numbers (rodné číslo) only\n * Due to the introduction of the pseudo-random BIČ it is not possible to test\n * post-1954 birth numbers without knowing whether they are BIČ or RČ beforehand\n */\nfunction skSkCheck(tin) {\n  if (tin.length === 9) {\n    tin = tin.replace(/\\W/, '');\n    if (tin.slice(6) === '000') {\n      return false;\n    } // Three-zero serial not assigned before 1954\n\n    // Extract full year from TIN length\n    var full_year = parseInt(tin.slice(0, 2), 10);\n    if (full_year > 53) {\n      return false;\n    }\n    if (full_year < 10) {\n      full_year = \"190\".concat(full_year);\n    } else {\n      full_year = \"19\".concat(full_year);\n    }\n\n    // Extract month from TIN and normalize\n    var month = parseInt(tin.slice(2, 4), 10);\n    if (month > 50) {\n      month -= 50;\n    }\n    if (month < 10) {\n      month = \"0\".concat(month);\n    }\n\n    // Check date validity\n    var date = \"\".concat(full_year, \"/\").concat(month, \"/\").concat(tin.slice(4, 6));\n    if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/*\n * sl-SI validation function\n * (Davčna številka, persons/entities)\n * Verify TIN validity by calculating check (last) digit (variant of MOD 11)\n */\nfunction slSiCheck(tin) {\n  var checksum = 11 - algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 7).map(function (a) {\n    return parseInt(a, 10);\n  }), 8) % 11;\n  if (checksum === 10) {\n    return parseInt(tin[7], 10) === 0;\n  }\n  return checksum === parseInt(tin[7], 10);\n}\n\n/*\n * sv-SE validation function\n * (Personnummer or samordningsnummer, persons only)\n * Checks validity of birth date and calls luhnCheck() to validate check (last) digit\n */\nfunction svSeCheck(tin) {\n  // Make copy of TIN and normalize to two-digit year form\n  var tin_copy = tin.slice(0);\n  if (tin.length > 11) {\n    tin_copy = tin_copy.slice(2);\n  }\n\n  // Extract date of birth\n  var full_year = '';\n  var month = tin_copy.slice(2, 4);\n  var day = parseInt(tin_copy.slice(4, 6), 10);\n  if (tin.length > 11) {\n    full_year = tin.slice(0, 4);\n  } else {\n    full_year = tin.slice(0, 2);\n    if (tin.length === 11 && day < 60) {\n      // Extract full year from centenarian symbol\n      // Should work just fine until year 10000 or so\n      var current_year = new Date().getFullYear().toString();\n      var current_century = parseInt(current_year.slice(0, 2), 10);\n      current_year = parseInt(current_year, 10);\n      if (tin[6] === '-') {\n        if (parseInt(\"\".concat(current_century).concat(full_year), 10) > current_year) {\n          full_year = \"\".concat(current_century - 1).concat(full_year);\n        } else {\n          full_year = \"\".concat(current_century).concat(full_year);\n        }\n      } else {\n        full_year = \"\".concat(current_century - 1).concat(full_year);\n        if (current_year - parseInt(full_year, 10) < 100) {\n          return false;\n        }\n      }\n    }\n  }\n\n  // Normalize day and check date validity\n  if (day > 60) {\n    day -= 60;\n  }\n  if (day < 10) {\n    day = \"0\".concat(day);\n  }\n  var date = \"\".concat(full_year, \"/\").concat(month, \"/\").concat(day);\n  if (date.length === 8) {\n    if (!(0, _isDate.default)(date, 'YY/MM/DD')) {\n      return false;\n    }\n  } else if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n  return algorithms.luhnCheck(tin.replace(/\\W/, ''));\n}\n\n/**\n * uk-UA validation function\n * Verify TIN validity by calculating check (last) digit (variant of MOD 11)\n */\nfunction ukUaCheck(tin) {\n  // Calculate check digit\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n  var multipliers = [-1, 5, 7, 9, 4, 6, 10, 5, 7];\n  var checksum = 0;\n  for (var i = 0; i < multipliers.length; i++) {\n    checksum += digits[i] * multipliers[i];\n  }\n  return checksum % 11 === 10 ? digits[9] === 0 : digits[9] === checksum % 11;\n}\n\n// Locale lookup objects\n\n/*\n * Tax id regex formats for various locales\n *\n * Where not explicitly specified in DG-TAXUD document both\n * uppercase and lowercase letters are acceptable.\n */\nvar taxIdFormat = {\n  'bg-BG': /^\\d{10}$/,\n  'cs-CZ': /^\\d{6}\\/{0,1}\\d{3,4}$/,\n  'de-AT': /^\\d{9}$/,\n  'de-DE': /^[1-9]\\d{10}$/,\n  'dk-DK': /^\\d{6}-{0,1}\\d{4}$/,\n  'el-CY': /^[09]\\d{7}[A-Z]$/,\n  'el-GR': /^([0-4]|[7-9])\\d{8}$/,\n  'en-CA': /^\\d{9}$/,\n  'en-GB': /^\\d{10}$|^(?!GB|NK|TN|ZZ)(?![DFIQUV])[A-Z](?![DFIQUVO])[A-Z]\\d{6}[ABCD ]$/i,\n  'en-IE': /^\\d{7}[A-W][A-IW]{0,1}$/i,\n  'en-US': /^\\d{2}[- ]{0,1}\\d{7}$/,\n  'es-AR': /(20|23|24|27|30|33|34)[0-9]{8}[0-9]/,\n  'es-ES': /^(\\d{0,8}|[XYZKLM]\\d{7})[A-HJ-NP-TV-Z]$/i,\n  'et-EE': /^[1-6]\\d{6}(00[1-9]|0[1-9][0-9]|[1-6][0-9]{2}|70[0-9]|710)\\d$/,\n  'fi-FI': /^\\d{6}[-+A]\\d{3}[0-9A-FHJ-NPR-Y]$/i,\n  'fr-BE': /^\\d{11}$/,\n  'fr-FR': /^[0-3]\\d{12}$|^[0-3]\\d\\s\\d{2}(\\s\\d{3}){3}$/,\n  // Conforms both to official spec and provided example\n  'fr-LU': /^\\d{13}$/,\n  'hr-HR': /^\\d{11}$/,\n  'hu-HU': /^8\\d{9}$/,\n  'it-IT': /^[A-Z]{6}[L-NP-V0-9]{2}[A-EHLMPRST][L-NP-V0-9]{2}[A-ILMZ][L-NP-V0-9]{3}[A-Z]$/i,\n  'lv-LV': /^\\d{6}-{0,1}\\d{5}$/,\n  // Conforms both to DG TAXUD spec and original research\n  'mt-MT': /^\\d{3,7}[APMGLHBZ]$|^([1-8])\\1\\d{7}$/i,\n  'nl-NL': /^\\d{9}$/,\n  'pl-PL': /^\\d{10,11}$/,\n  'pt-BR': /(?:^\\d{11}$)|(?:^\\d{14}$)/,\n  'pt-PT': /^\\d{9}$/,\n  'ro-RO': /^\\d{13}$/,\n  'sk-SK': /^\\d{6}\\/{0,1}\\d{3,4}$/,\n  'sl-SI': /^[1-9]\\d{7}$/,\n  'sv-SE': /^(\\d{6}[-+]{0,1}\\d{4}|(18|19|20)\\d{6}[-+]{0,1}\\d{4})$/,\n  'uk-UA': /^\\d{10}$/\n};\n// taxIdFormat locale aliases\ntaxIdFormat['lb-LU'] = taxIdFormat['fr-LU'];\ntaxIdFormat['lt-LT'] = taxIdFormat['et-EE'];\ntaxIdFormat['nl-BE'] = taxIdFormat['fr-BE'];\ntaxIdFormat['fr-CA'] = taxIdFormat['en-CA'];\n\n// Algorithmic tax id check functions for various locales\nvar taxIdCheck = {\n  'bg-BG': bgBgCheck,\n  'cs-CZ': csCzCheck,\n  'de-AT': deAtCheck,\n  'de-DE': deDeCheck,\n  'dk-DK': dkDkCheck,\n  'el-CY': elCyCheck,\n  'el-GR': elGrCheck,\n  'en-CA': isCanadianSIN,\n  'en-IE': enIeCheck,\n  'en-US': enUsCheck,\n  'es-AR': esArCheck,\n  'es-ES': esEsCheck,\n  'et-EE': etEeCheck,\n  'fi-FI': fiFiCheck,\n  'fr-BE': frBeCheck,\n  'fr-FR': frFrCheck,\n  'fr-LU': frLuCheck,\n  'hr-HR': hrHrCheck,\n  'hu-HU': huHuCheck,\n  'it-IT': itItCheck,\n  'lv-LV': lvLvCheck,\n  'mt-MT': mtMtCheck,\n  'nl-NL': nlNlCheck,\n  'pl-PL': plPlCheck,\n  'pt-BR': ptBrCheck,\n  'pt-PT': ptPtCheck,\n  'ro-RO': roRoCheck,\n  'sk-SK': skSkCheck,\n  'sl-SI': slSiCheck,\n  'sv-SE': svSeCheck,\n  'uk-UA': ukUaCheck\n};\n// taxIdCheck locale aliases\ntaxIdCheck['lb-LU'] = taxIdCheck['fr-LU'];\ntaxIdCheck['lt-LT'] = taxIdCheck['et-EE'];\ntaxIdCheck['nl-BE'] = taxIdCheck['fr-BE'];\ntaxIdCheck['fr-CA'] = taxIdCheck['en-CA'];\n\n// Regexes for locales where characters should be omitted before checking format\nvar allsymbols = /[-\\\\\\/!@#$%\\^&\\*\\(\\)\\+\\=\\[\\]]+/g;\nvar sanitizeRegexes = {\n  'de-AT': allsymbols,\n  'de-DE': /[\\/\\\\]/g,\n  'fr-BE': allsymbols\n};\n// sanitizeRegexes locale aliases\nsanitizeRegexes['nl-BE'] = sanitizeRegexes['fr-BE'];\n\n/*\n * Validator function\n * Return true if the passed string is a valid tax identification number\n * for the specified locale.\n * Throw an error exception if the locale is not supported.\n */\nfunction isTaxID(str) {\n  var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';\n  (0, _assertString.default)(str);\n  // Copy TIN to avoid replacement if sanitized\n  var strcopy = str.slice(0);\n  if (locale in taxIdFormat) {\n    if (locale in sanitizeRegexes) {\n      strcopy = strcopy.replace(sanitizeRegexes[locale], '');\n    }\n    if (!taxIdFormat[locale].test(strcopy)) {\n      return false;\n    }\n    if (locale in taxIdCheck) {\n      return taxIdCheck[locale](strcopy);\n    }\n    // Fallthrough; not all locales have algorithmic checks\n    return true;\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _toDate = _interopRequireDefault(require(\"./lib/toDate\"));\nvar _toFloat = _interopRequireDefault(require(\"./lib/toFloat\"));\nvar _toInt = _interopRequireDefault(require(\"./lib/toInt\"));\nvar _toBoolean = _interopRequireDefault(require(\"./lib/toBoolean\"));\nvar _equals = _interopRequireDefault(require(\"./lib/equals\"));\nvar _contains = _interopRequireDefault(require(\"./lib/contains\"));\nvar _matches = _interopRequireDefault(require(\"./lib/matches\"));\nvar _isEmail = _interopRequireDefault(require(\"./lib/isEmail\"));\nvar _isURL = _interopRequireDefault(require(\"./lib/isURL\"));\nvar _isMACAddress = _interopRequireDefault(require(\"./lib/isMACAddress\"));\nvar _isIP = _interopRequireDefault(require(\"./lib/isIP\"));\nvar _isIPRange = _interopRequireDefault(require(\"./lib/isIPRange\"));\nvar _isFQDN = _interopRequireDefault(require(\"./lib/isFQDN\"));\nvar _isDate = _interopRequireDefault(require(\"./lib/isDate\"));\nvar _isTime = _interopRequireDefault(require(\"./lib/isTime\"));\nvar _isBoolean = _interopRequireDefault(require(\"./lib/isBoolean\"));\nvar _isLocale = _interopRequireDefault(require(\"./lib/isLocale\"));\nvar _isAbaRouting = _interopRequireDefault(require(\"./lib/isAbaRouting\"));\nvar _isAlpha = _interopRequireWildcard(require(\"./lib/isAlpha\"));\nvar _isAlphanumeric = _interopRequireWildcard(require(\"./lib/isAlphanumeric\"));\nvar _isNumeric = _interopRequireDefault(require(\"./lib/isNumeric\"));\nvar _isPassportNumber = _interopRequireWildcard(require(\"./lib/isPassportNumber\"));\nvar _isPort = _interopRequireDefault(require(\"./lib/isPort\"));\nvar _isLowercase = _interopRequireDefault(require(\"./lib/isLowercase\"));\nvar _isUppercase = _interopRequireDefault(require(\"./lib/isUppercase\"));\nvar _isIMEI = _interopRequireDefault(require(\"./lib/isIMEI\"));\nvar _isAscii = _interopRequireDefault(require(\"./lib/isAscii\"));\nvar _isFullWidth = _interopRequireDefault(require(\"./lib/isFullWidth\"));\nvar _isHalfWidth = _interopRequireDefault(require(\"./lib/isHalfWidth\"));\nvar _isVariableWidth = _interopRequireDefault(require(\"./lib/isVariableWidth\"));\nvar _isMultibyte = _interopRequireDefault(require(\"./lib/isMultibyte\"));\nvar _isSemVer = _interopRequireDefault(require(\"./lib/isSemVer\"));\nvar _isSurrogatePair = _interopRequireDefault(require(\"./lib/isSurrogatePair\"));\nvar _isInt = _interopRequireDefault(require(\"./lib/isInt\"));\nvar _isFloat = _interopRequireWildcard(require(\"./lib/isFloat\"));\nvar _isDecimal = _interopRequireDefault(require(\"./lib/isDecimal\"));\nvar _isHexadecimal = _interopRequireDefault(require(\"./lib/isHexadecimal\"));\nvar _isOctal = _interopRequireDefault(require(\"./lib/isOctal\"));\nvar _isDivisibleBy = _interopRequireDefault(require(\"./lib/isDivisibleBy\"));\nvar _isHexColor = _interopRequireDefault(require(\"./lib/isHexColor\"));\nvar _isRgbColor = _interopRequireDefault(require(\"./lib/isRgbColor\"));\nvar _isHSL = _interopRequireDefault(require(\"./lib/isHSL\"));\nvar _isISRC = _interopRequireDefault(require(\"./lib/isISRC\"));\nvar _isIBAN = _interopRequireWildcard(require(\"./lib/isIBAN\"));\nvar _isBIC = _interopRequireDefault(require(\"./lib/isBIC\"));\nvar _isMD = _interopRequireDefault(require(\"./lib/isMD5\"));\nvar _isHash = _interopRequireDefault(require(\"./lib/isHash\"));\nvar _isJWT = _interopRequireDefault(require(\"./lib/isJWT\"));\nvar _isJSON = _interopRequireDefault(require(\"./lib/isJSON\"));\nvar _isEmpty = _interopRequireDefault(require(\"./lib/isEmpty\"));\nvar _isLength = _interopRequireDefault(require(\"./lib/isLength\"));\nvar _isByteLength = _interopRequireDefault(require(\"./lib/isByteLength\"));\nvar _isULID = _interopRequireDefault(require(\"./lib/isULID\"));\nvar _isUUID = _interopRequireDefault(require(\"./lib/isUUID\"));\nvar _isMongoId = _interopRequireDefault(require(\"./lib/isMongoId\"));\nvar _isAfter = _interopRequireDefault(require(\"./lib/isAfter\"));\nvar _isBefore = _interopRequireDefault(require(\"./lib/isBefore\"));\nvar _isIn = _interopRequireDefault(require(\"./lib/isIn\"));\nvar _isLuhnNumber = _interopRequireDefault(require(\"./lib/isLuhnNumber\"));\nvar _isCreditCard = _interopRequireDefault(require(\"./lib/isCreditCard\"));\nvar _isIdentityCard = _interopRequireDefault(require(\"./lib/isIdentityCard\"));\nvar _isEAN = _interopRequireDefault(require(\"./lib/isEAN\"));\nvar _isISIN = _interopRequireDefault(require(\"./lib/isISIN\"));\nvar _isISBN = _interopRequireDefault(require(\"./lib/isISBN\"));\nvar _isISSN = _interopRequireDefault(require(\"./lib/isISSN\"));\nvar _isTaxID = _interopRequireDefault(require(\"./lib/isTaxID\"));\nvar _isMobilePhone = _interopRequireWildcard(require(\"./lib/isMobilePhone\"));\nvar _isEthereumAddress = _interopRequireDefault(require(\"./lib/isEthereumAddress\"));\nvar _isCurrency = _interopRequireDefault(require(\"./lib/isCurrency\"));\nvar _isBtcAddress = _interopRequireDefault(require(\"./lib/isBtcAddress\"));\nvar _isISO = require(\"./lib/isISO6346\");\nvar _isISO2 = _interopRequireDefault(require(\"./lib/isISO6391\"));\nvar _isISO3 = _interopRequireDefault(require(\"./lib/isISO8601\"));\nvar _isRFC = _interopRequireDefault(require(\"./lib/isRFC3339\"));\nvar _isISO4 = _interopRequireDefault(require(\"./lib/isISO15924\"));\nvar _isISO31661Alpha = _interopRequireDefault(require(\"./lib/isISO31661Alpha2\"));\nvar _isISO31661Alpha2 = _interopRequireDefault(require(\"./lib/isISO31661Alpha3\"));\nvar _isISO31661Numeric = _interopRequireDefault(require(\"./lib/isISO31661Numeric\"));\nvar _isISO5 = _interopRequireDefault(require(\"./lib/isISO4217\"));\nvar _isBase = _interopRequireDefault(require(\"./lib/isBase32\"));\nvar _isBase2 = _interopRequireDefault(require(\"./lib/isBase58\"));\nvar _isBase3 = _interopRequireDefault(require(\"./lib/isBase64\"));\nvar _isDataURI = _interopRequireDefault(require(\"./lib/isDataURI\"));\nvar _isMagnetURI = _interopRequireDefault(require(\"./lib/isMagnetURI\"));\nvar _isMailtoURI = _interopRequireDefault(require(\"./lib/isMailtoURI\"));\nvar _isMimeType = _interopRequireDefault(require(\"./lib/isMimeType\"));\nvar _isLatLong = _interopRequireDefault(require(\"./lib/isLatLong\"));\nvar _isPostalCode = _interopRequireWildcard(require(\"./lib/isPostalCode\"));\nvar _ltrim = _interopRequireDefault(require(\"./lib/ltrim\"));\nvar _rtrim = _interopRequireDefault(require(\"./lib/rtrim\"));\nvar _trim = _interopRequireDefault(require(\"./lib/trim\"));\nvar _escape = _interopRequireDefault(require(\"./lib/escape\"));\nvar _unescape = _interopRequireDefault(require(\"./lib/unescape\"));\nvar _stripLow = _interopRequireDefault(require(\"./lib/stripLow\"));\nvar _whitelist = _interopRequireDefault(require(\"./lib/whitelist\"));\nvar _blacklist = _interopRequireDefault(require(\"./lib/blacklist\"));\nvar _isWhitelisted = _interopRequireDefault(require(\"./lib/isWhitelisted\"));\nvar _normalizeEmail = _interopRequireDefault(require(\"./lib/normalizeEmail\"));\nvar _isSlug = _interopRequireDefault(require(\"./lib/isSlug\"));\nvar _isLicensePlate = _interopRequireDefault(require(\"./lib/isLicensePlate\"));\nvar _isStrongPassword = _interopRequireDefault(require(\"./lib/isStrongPassword\"));\nvar _isVAT = _interopRequireDefault(require(\"./lib/isVAT\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar version = '13.15.15';\nvar validator = {\n  version: version,\n  toDate: _toDate.default,\n  toFloat: _toFloat.default,\n  toInt: _toInt.default,\n  toBoolean: _toBoolean.default,\n  equals: _equals.default,\n  contains: _contains.default,\n  matches: _matches.default,\n  isEmail: _isEmail.default,\n  isURL: _isURL.default,\n  isMACAddress: _isMACAddress.default,\n  isIP: _isIP.default,\n  isIPRange: _isIPRange.default,\n  isFQDN: _isFQDN.default,\n  isBoolean: _isBoolean.default,\n  isIBAN: _isIBAN.default,\n  isBIC: _isBIC.default,\n  isAbaRouting: _isAbaRouting.default,\n  isAlpha: _isAlpha.default,\n  isAlphaLocales: _isAlpha.locales,\n  isAlphanumeric: _isAlphanumeric.default,\n  isAlphanumericLocales: _isAlphanumeric.locales,\n  isNumeric: _isNumeric.default,\n  isPassportNumber: _isPassportNumber.default,\n  passportNumberLocales: _isPassportNumber.locales,\n  isPort: _isPort.default,\n  isLowercase: _isLowercase.default,\n  isUppercase: _isUppercase.default,\n  isAscii: _isAscii.default,\n  isFullWidth: _isFullWidth.default,\n  isHalfWidth: _isHalfWidth.default,\n  isVariableWidth: _isVariableWidth.default,\n  isMultibyte: _isMultibyte.default,\n  isSemVer: _isSemVer.default,\n  isSurrogatePair: _isSurrogatePair.default,\n  isInt: _isInt.default,\n  isIMEI: _isIMEI.default,\n  isFloat: _isFloat.default,\n  isFloatLocales: _isFloat.locales,\n  isDecimal: _isDecimal.default,\n  isHexadecimal: _isHexadecimal.default,\n  isOctal: _isOctal.default,\n  isDivisibleBy: _isDivisibleBy.default,\n  isHexColor: _isHexColor.default,\n  isRgbColor: _isRgbColor.default,\n  isHSL: _isHSL.default,\n  isISRC: _isISRC.default,\n  isMD5: _isMD.default,\n  isHash: _isHash.default,\n  isJWT: _isJWT.default,\n  isJSON: _isJSON.default,\n  isEmpty: _isEmpty.default,\n  isLength: _isLength.default,\n  isLocale: _isLocale.default,\n  isByteLength: _isByteLength.default,\n  isULID: _isULID.default,\n  isUUID: _isUUID.default,\n  isMongoId: _isMongoId.default,\n  isAfter: _isAfter.default,\n  isBefore: _isBefore.default,\n  isIn: _isIn.default,\n  isLuhnNumber: _isLuhnNumber.default,\n  isCreditCard: _isCreditCard.default,\n  isIdentityCard: _isIdentityCard.default,\n  isEAN: _isEAN.default,\n  isISIN: _isISIN.default,\n  isISBN: _isISBN.default,\n  isISSN: _isISSN.default,\n  isMobilePhone: _isMobilePhone.default,\n  isMobilePhoneLocales: _isMobilePhone.locales,\n  isPostalCode: _isPostalCode.default,\n  isPostalCodeLocales: _isPostalCode.locales,\n  isEthereumAddress: _isEthereumAddress.default,\n  isCurrency: _isCurrency.default,\n  isBtcAddress: _isBtcAddress.default,\n  isISO6346: _isISO.isISO6346,\n  isFreightContainerID: _isISO.isFreightContainerID,\n  isISO6391: _isISO2.default,\n  isISO8601: _isISO3.default,\n  isISO15924: _isISO4.default,\n  isRFC3339: _isRFC.default,\n  isISO31661Alpha2: _isISO31661Alpha.default,\n  isISO31661Alpha3: _isISO31661Alpha2.default,\n  isISO31661Numeric: _isISO31661Numeric.default,\n  isISO4217: _isISO5.default,\n  isBase32: _isBase.default,\n  isBase58: _isBase2.default,\n  isBase64: _isBase3.default,\n  isDataURI: _isDataURI.default,\n  isMagnetURI: _isMagnetURI.default,\n  isMailtoURI: _isMailtoURI.default,\n  isMimeType: _isMimeType.default,\n  isLatLong: _isLatLong.default,\n  ltrim: _ltrim.default,\n  rtrim: _rtrim.default,\n  trim: _trim.default,\n  escape: _escape.default,\n  unescape: _unescape.default,\n  stripLow: _stripLow.default,\n  whitelist: _whitelist.default,\n  blacklist: _blacklist.default,\n  isWhitelisted: _isWhitelisted.default,\n  normalizeEmail: _normalizeEmail.default,\n  toString: toString,\n  isSlug: _isSlug.default,\n  isStrongPassword: _isStrongPassword.default,\n  isTaxID: _isTaxID.default,\n  isDate: _isDate.default,\n  isTime: _isTime.default,\n  isLicensePlate: _isLicensePlate.default,\n  isVAT: _isVAT.default,\n  ibanLocales: _isIBAN.locales\n};\nvar _default = exports.default = validator;\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isURL;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _checkHost = _interopRequireDefault(require(\"./util/checkHost\"));\nvar _includesString = _interopRequireDefault(require(\"./util/includesString\"));\nvar _isFQDN = _interopRequireDefault(require(\"./isFQDN\"));\nvar _isIP = _interopRequireDefault(require(\"./isIP\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n/*\noptions for isURL method\n\nprotocols - valid protocols can be modified with this option.\nrequire_tld - If set to false isURL will not check if the URL's host includes a top-level domain.\nrequire_protocol - if set to true isURL will return false if protocol is not present in the URL.\nrequire_host - if set to false isURL will not check if host is present in the URL.\nrequire_port - if set to true isURL will check if port is present in the URL.\nrequire_valid_protocol - isURL will check if the URL's protocol is present in the protocols option.\nallow_underscores - if set to true, the validator will allow underscores in the URL.\nhost_whitelist - if set to an array of strings or regexp, and the domain matches none of the strings\n                 defined in it, the validation fails.\nhost_blacklist - if set to an array of strings or regexp, and the domain matches any of the strings\n                 defined in it, the validation fails.\nallow_trailing_dot - if set to true, the validator will allow the domain to end with\n                     a `.` character.\nallow_protocol_relative_urls - if set to true protocol relative URLs will be allowed.\nallow_fragments - if set to false isURL will return false if fragments are present.\nallow_query_components - if set to false isURL will return false if query components are present.\ndisallow_auth - if set to true, the validator will fail if the URL contains an authentication\n                component, e.g. `http://username:[email protected]`\nvalidate_length - if set to false isURL will skip string length validation. `max_allowed_length`\n                  will be ignored if this is set as `false`.\nmax_allowed_length - if set, isURL will not allow URLs longer than the specified value (default is\n                     2084 that IE maximum URL length).\n\n*/\n\nvar default_url_options = {\n  protocols: ['http', 'https', 'ftp'],\n  require_tld: true,\n  require_protocol: false,\n  require_host: true,\n  require_port: false,\n  require_valid_protocol: true,\n  allow_underscores: false,\n  allow_trailing_dot: false,\n  allow_protocol_relative_urls: false,\n  allow_fragments: true,\n  allow_query_components: true,\n  validate_length: true,\n  max_allowed_length: 2084\n};\nvar wrapped_ipv6 = /^\\[([^\\]]+)\\](?::([0-9]+))?$/;\nfunction isURL(url, options) {\n  (0, _assertString.default)(url);\n  if (!url || /[\\s<>]/.test(url)) {\n    return false;\n  }\n  if (url.indexOf('mailto:') === 0) {\n    return false;\n  }\n  options = (0, _merge.default)(options, default_url_options);\n  if (options.validate_length && url.length > options.max_allowed_length) {\n    return false;\n  }\n  if (!options.allow_fragments && (0, _includesString.default)(url, '#')) {\n    return false;\n  }\n  if (!options.allow_query_components && ((0, _includesString.default)(url, '?') || (0, _includesString.default)(url, '&'))) {\n    return false;\n  }\n  var protocol, auth, host, hostname, port, port_str, split, ipv6;\n  split = url.split('#');\n  url = split.shift();\n  split = url.split('?');\n  url = split.shift();\n  split = url.split('://');\n  if (split.length > 1) {\n    protocol = split.shift().toLowerCase();\n    if (options.require_valid_protocol && options.protocols.indexOf(protocol) === -1) {\n      return false;\n    }\n  } else if (options.require_protocol) {\n    return false;\n  } else if (url.slice(0, 2) === '//') {\n    if (!options.allow_protocol_relative_urls) {\n      return false;\n    }\n    split[0] = url.slice(2);\n  }\n  url = split.join('://');\n  if (url === '') {\n    return false;\n  }\n  split = url.split('/');\n  url = split.shift();\n  if (url === '' && !options.require_host) {\n    return true;\n  }\n  split = url.split('@');\n  if (split.length > 1) {\n    if (options.disallow_auth) {\n      return false;\n    }\n    if (split[0] === '') {\n      return false;\n    }\n    auth = split.shift();\n    if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) {\n      return false;\n    }\n    var _auth$split = auth.split(':'),\n      _auth$split2 = _slicedToArray(_auth$split, 2),\n      user = _auth$split2[0],\n      password = _auth$split2[1];\n    if (user === '' && password === '') {\n      return false;\n    }\n  }\n  hostname = split.join('@');\n  port_str = null;\n  ipv6 = null;\n  var ipv6_match = hostname.match(wrapped_ipv6);\n  if (ipv6_match) {\n    host = '';\n    ipv6 = ipv6_match[1];\n    port_str = ipv6_match[2] || null;\n  } else {\n    split = hostname.split(':');\n    host = split.shift();\n    if (split.length) {\n      port_str = split.join(':');\n    }\n  }\n  if (port_str !== null && port_str.length > 0) {\n    port = parseInt(port_str, 10);\n    if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) {\n      return false;\n    }\n  } else if (options.require_port) {\n    return false;\n  }\n  if (options.host_whitelist) {\n    return (0, _checkHost.default)(host, options.host_whitelist);\n  }\n  if (host === '' && !options.require_host) {\n    return true;\n  }\n  if (!(0, _isIP.default)(host) && !(0, _isFQDN.default)(host, options) && (!ipv6 || !(0, _isIP.default)(ipv6, 6))) {\n    return false;\n  }\n  host = host || ipv6;\n  if (options.host_blacklist && (0, _checkHost.default)(host, options.host_blacklist)) {\n    return false;\n  }\n  return true;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISO6391;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar isISO6391Set = new Set(['aa', 'ab', 'ae', 'af', 'ak', 'am', 'an', 'ar', 'as', 'av', 'ay', 'az', 'az', 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ce', 'ch', 'co', 'cr', 'cs', 'cu', 'cv', 'cy', 'da', 'de', 'dv', 'dz', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fj', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hr', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'io', 'is', 'it', 'iu', 'ja', 'jv', 'ka', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ku', 'kv', 'kw', 'ky', 'la', 'lb', 'lg', 'li', 'ln', 'lo', 'lt', 'lu', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mr', 'ms', 'mt', 'my', 'na', 'nb', 'nd', 'ne', 'ng', 'nl', 'nn', 'no', 'nr', 'nv', 'ny', 'oc', 'oj', 'om', 'or', 'os', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu', 'rm', 'rn', 'ro', 'ru', 'rw', 'sa', 'sc', 'sd', 'se', 'sg', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tr', 'ts', 'tt', 'tw', 'ty', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi', 'yo', 'za', 'zh', 'zu']);\nfunction isISO6391(str) {\n  (0, _assertString.default)(str);\n  return isISO6391Set.has(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBase64;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar base64WithPadding = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/;\nvar base64WithoutPadding = /^[A-Za-z0-9+/]+$/;\nvar base64UrlWithPadding = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2}==|[A-Za-z0-9_-]{3}=|[A-Za-z0-9_-]{4})$/;\nvar base64UrlWithoutPadding = /^[A-Za-z0-9_-]+$/;\nfunction isBase64(str, options) {\n  var _options;\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, {\n    urlSafe: false,\n    padding: !((_options = options) !== null && _options !== void 0 && _options.urlSafe)\n  });\n  if (str === '') return true;\n  var regex;\n  if (options.urlSafe) {\n    regex = options.padding ? base64UrlWithPadding : base64UrlWithoutPadding;\n  } else {\n    regex = options.padding ? base64WithPadding : base64WithoutPadding;\n  }\n  return (!options.padding || str.length % 4 === 0) && regex.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CurrencyCodes = void 0;\nexports.default = isISO4217;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// from https://en.wikipedia.org/wiki/ISO_4217\nvar validISO4217CurrencyCodes = new Set(['AED', 'AFN', 'ALL', 'AMD', 'ANG', 'AOA', 'ARS', 'AUD', 'AWG', 'AZN', 'BAM', 'BBD', 'BDT', 'BGN', 'BHD', 'BIF', 'BMD', 'BND', 'BOB', 'BOV', 'BRL', 'BSD', 'BTN', 'BWP', 'BYN', 'BZD', 'CAD', 'CDF', 'CHE', 'CHF', 'CHW', 'CLF', 'CLP', 'CNY', 'COP', 'COU', 'CRC', 'CUP', 'CVE', 'CZK', 'DJF', 'DKK', 'DOP', 'DZD', 'EGP', 'ERN', 'ETB', 'EUR', 'FJD', 'FKP', 'GBP', 'GEL', 'GHS', 'GIP', 'GMD', 'GNF', 'GTQ', 'GYD', 'HKD', 'HNL', 'HTG', 'HUF', 'IDR', 'ILS', 'INR', 'IQD', 'IRR', 'ISK', 'JMD', 'JOD', 'JPY', 'KES', 'KGS', 'KHR', 'KMF', 'KPW', 'KRW', 'KWD', 'KYD', 'KZT', 'LAK', 'LBP', 'LKR', 'LRD', 'LSL', 'LYD', 'MAD', 'MDL', 'MGA', 'MKD', 'MMK', 'MNT', 'MOP', 'MRU', 'MUR', 'MVR', 'MWK', 'MXN', 'MXV', 'MYR', 'MZN', 'NAD', 'NGN', 'NIO', 'NOK', 'NPR', 'NZD', 'OMR', 'PAB', 'PEN', 'PGK', 'PHP', 'PKR', 'PLN', 'PYG', 'QAR', 'RON', 'RSD', 'RUB', 'RWF', 'SAR', 'SBD', 'SCR', 'SDG', 'SEK', 'SGD', 'SHP', 'SLE', 'SLL', 'SOS', 'SRD', 'SSP', 'STN', 'SVC', 'SYP', 'SZL', 'THB', 'TJS', 'TMT', 'TND', 'TOP', 'TRY', 'TTD', 'TWD', 'TZS', 'UAH', 'UGX', 'USD', 'USN', 'UYI', 'UYU', 'UYW', 'UZS', 'VED', 'VES', 'VND', 'VUV', 'WST', 'XAF', 'XAG', 'XAU', 'XBA', 'XBB', 'XBC', 'XBD', 'XCD', 'XDR', 'XOF', 'XPD', 'XPF', 'XPT', 'XSU', 'XTS', 'XUA', 'XXX', 'YER', 'ZAR', 'ZMW', 'ZWL']);\nfunction isISO4217(str) {\n  (0, _assertString.default)(str);\n  return validISO4217CurrencyCodes.has(str.toUpperCase());\n}\nvar CurrencyCodes = exports.CurrencyCodes = validISO4217CurrencyCodes;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CountryCodes = void 0;\nexports.default = isISO31661Alpha2;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\nvar validISO31661Alpha2CountriesCodes = new Set(['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW']);\nfunction isISO31661Alpha2(str) {\n  (0, _assertString.default)(str);\n  return validISO31661Alpha2CountriesCodes.has(str.toUpperCase());\n}\nvar CountryCodes = exports.CountryCodes = validISO31661Alpha2CountriesCodes;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isIMEI;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar imeiRegexWithoutHyphens = /^[0-9]{15}$/;\nvar imeiRegexWithHyphens = /^\\d{2}-\\d{6}-\\d{6}-\\d{1}$/;\nfunction isIMEI(str, options) {\n  (0, _assertString.default)(str);\n  options = options || {};\n\n  // default regex for checking imei is the one without hyphens\n\n  var imeiRegex = imeiRegexWithoutHyphens;\n  if (options.allow_hyphens) {\n    imeiRegex = imeiRegexWithHyphens;\n  }\n  if (!imeiRegex.test(str)) {\n    return false;\n  }\n  str = str.replace(/-/g, '');\n  var sum = 0,\n    mul = 2,\n    l = 14;\n  for (var i = 0; i < l; i++) {\n    var digit = str.substring(l - i - 1, l - i);\n    var tp = parseInt(digit, 10) * mul;\n    if (tp >= 10) {\n      sum += tp % 10 + 1;\n    } else {\n      sum += tp;\n    }\n    if (mul === 1) {\n      mul += 1;\n    } else {\n      mul -= 1;\n    }\n  }\n  var chk = (10 - sum % 10) % 10;\n  if (chk !== parseInt(str.substring(14, 15), 10)) {\n    return false;\n  }\n  return true;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar includes = function includes(arr, val) {\n  return arr.some(function (arrVal) {\n    return val === arrVal;\n  });\n};\nvar _default = exports.default = includes;\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isTime;\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar default_time_options = {\n  hourFormat: 'hour24',\n  mode: 'default'\n};\nvar formats = {\n  hour24: {\n    default: /^([01]?[0-9]|2[0-3]):([0-5][0-9])$/,\n    withSeconds: /^([01]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/,\n    withOptionalSeconds: /^([01]?[0-9]|2[0-3]):([0-5][0-9])(?::([0-5][0-9]))?$/\n  },\n  hour12: {\n    default: /^(0?[1-9]|1[0-2]):([0-5][0-9]) (A|P)M$/,\n    withSeconds: /^(0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) (A|P)M$/,\n    withOptionalSeconds: /^(0?[1-9]|1[0-2]):([0-5][0-9])(?::([0-5][0-9]))? (A|P)M$/\n  }\n};\nfunction isTime(input, options) {\n  options = (0, _merge.default)(options, default_time_options);\n  if (typeof input !== 'string') return false;\n  return formats[options.hourFormat][options.mode].test(input);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isAlphanumeric;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _alpha = require(\"./alpha\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isAlphanumeric(_str) {\n  var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  (0, _assertString.default)(_str);\n  var str = _str;\n  var ignore = options.ignore;\n  if (ignore) {\n    if (ignore instanceof RegExp) {\n      str = str.replace(ignore, '');\n    } else if (typeof ignore === 'string') {\n      str = str.replace(new RegExp(\"[\".concat(ignore.replace(/[-[\\]{}()*+?.,\\\\^$|#\\\\s]/g, '\\\\$&'), \"]\"), 'g'), ''); // escape regex for ignore\n    } else {\n      throw new Error('ignore should be instance of a String or RegExp');\n    }\n  }\n  if (locale in _alpha.alphanumeric) {\n    return _alpha.alphanumeric[locale].test(str);\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}\nvar locales = exports.locales = Object.keys(_alpha.alphanumeric);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isDate;\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar default_date_options = {\n  format: 'YYYY/MM/DD',\n  delimiters: ['/', '-'],\n  strictMode: false\n};\nfunction isValidFormat(format) {\n  return /(^(y{4}|y{2})[.\\/-](m{1,2})[.\\/-](d{1,2})$)|(^(m{1,2})[.\\/-](d{1,2})[.\\/-]((y{4}|y{2})$))|(^(d{1,2})[.\\/-](m{1,2})[.\\/-]((y{4}|y{2})$))/gi.test(format);\n}\nfunction zip(date, format) {\n  var zippedArr = [],\n    len = Math.max(date.length, format.length);\n  for (var i = 0; i < len; i++) {\n    zippedArr.push([date[i], format[i]]);\n  }\n  return zippedArr;\n}\nfunction isDate(input, options) {\n  if (typeof options === 'string') {\n    // Allow backward compatibility for old format isDate(input [, format])\n    options = (0, _merge.default)({\n      format: options\n    }, default_date_options);\n  } else {\n    options = (0, _merge.default)(options, default_date_options);\n  }\n  if (typeof input === 'string' && isValidFormat(options.format)) {\n    if (options.strictMode && input.length !== options.format.length) return false;\n    var formatDelimiter = options.delimiters.find(function (delimiter) {\n      return options.format.indexOf(delimiter) !== -1;\n    });\n    var dateDelimiter = options.strictMode ? formatDelimiter : options.delimiters.find(function (delimiter) {\n      return input.indexOf(delimiter) !== -1;\n    });\n    var dateAndFormat = zip(input.split(dateDelimiter), options.format.toLowerCase().split(formatDelimiter));\n    var dateObj = {};\n    var _iterator = _createForOfIteratorHelper(dateAndFormat),\n      _step;\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var _step$value = _slicedToArray(_step.value, 2),\n          dateWord = _step$value[0],\n          formatWord = _step$value[1];\n        if (!dateWord || !formatWord || dateWord.length !== formatWord.length) {\n          return false;\n        }\n        dateObj[formatWord.charAt(0)] = dateWord;\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n    var fullYear = dateObj.y;\n\n    // Check if the year starts with a hyphen\n    if (fullYear.startsWith('-')) {\n      return false; // Hyphen before year is not allowed\n    }\n    if (dateObj.y.length === 2) {\n      var parsedYear = parseInt(dateObj.y, 10);\n      if (isNaN(parsedYear)) {\n        return false;\n      }\n      var currentYearLastTwoDigits = new Date().getFullYear() % 100;\n      if (parsedYear < currentYearLastTwoDigits) {\n        fullYear = \"20\".concat(dateObj.y);\n      } else {\n        fullYear = \"19\".concat(dateObj.y);\n      }\n    }\n    var month = dateObj.m;\n    if (dateObj.m.length === 1) {\n      month = \"0\".concat(dateObj.m);\n    }\n    var day = dateObj.d;\n    if (dateObj.d.length === 1) {\n      day = \"0\".concat(dateObj.d);\n    }\n    return new Date(\"\".concat(fullYear, \"-\").concat(month, \"-\").concat(day, \"T00:00:00.000Z\")).getUTCDate() === +dateObj.d;\n  }\n  if (!options.strictMode) {\n    return Object.prototype.toString.call(input) === '[object Date]' && isFinite(input);\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isJWT;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _isBase = _interopRequireDefault(require(\"./isBase64\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isJWT(str) {\n  (0, _assertString.default)(str);\n  var dotSplit = str.split('.');\n  var len = dotSplit.length;\n  if (len !== 3) {\n    return false;\n  }\n  return dotSplit.reduce(function (acc, currElem) {\n    return acc && (0, _isBase.default)(currElem, {\n      urlSafe: true\n    });\n  }, true);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = contains;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _toString = _interopRequireDefault(require(\"./util/toString\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar defaultContainsOptions = {\n  ignoreCase: false,\n  minOccurrences: 1\n};\nfunction contains(str, elem, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, defaultContainsOptions);\n  if (options.ignoreCase) {\n    return str.toLowerCase().split((0, _toString.default)(elem).toLowerCase()).length > options.minOccurrences;\n  }\n  return str.split((0, _toString.default)(elem)).length > options.minOccurrences;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isSlug;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar charsetRegex = /^[^\\s-_](?!.*?[-_]{2,})[a-z0-9-\\\\][^\\s]*[^-_\\s]$/;\nfunction isSlug(str) {\n  (0, _assertString.default)(str);\n  return charsetRegex.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isIn;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _toString = _interopRequireDefault(require(\"./util/toString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction isIn(str, options) {\n  (0, _assertString.default)(str);\n  var i;\n  if (Object.prototype.toString.call(options) === '[object Array]') {\n    var array = [];\n    for (i in options) {\n      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes\n      // istanbul ignore else\n      if ({}.hasOwnProperty.call(options, i)) {\n        array[i] = (0, _toString.default)(options[i]);\n      }\n    }\n    return array.indexOf(str) >= 0;\n  } else if (_typeof(options) === 'object') {\n    return options.hasOwnProperty(str);\n  } else if (options && typeof options.indexOf === 'function') {\n    return options.indexOf(str) >= 0;\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLength;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/* eslint-disable prefer-rest-params */\nfunction isLength(str, options) {\n  (0, _assertString.default)(str);\n  var min;\n  var max;\n  if (_typeof(options) === 'object') {\n    min = options.min || 0;\n    max = options.max;\n  } else {\n    // backwards compatibility: isLength(str, min [, max])\n    min = arguments[1] || 0;\n    max = arguments[2];\n  }\n  var presentationSequences = str.match(/(\\uFE0F|\\uFE0E)/g) || [];\n  var surrogatePairs = str.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g) || [];\n  var len = str.length - presentationSequences.length - surrogatePairs.length;\n  var isInsideRange = len >= min && (typeof max === 'undefined' || len <= max);\n  if (isInsideRange && Array.isArray(options === null || options === void 0 ? void 0 : options.discreteLengths)) {\n    return options.discreteLengths.some(function (discreteLen) {\n      return discreteLen === len;\n    });\n  }\n  return isInsideRange;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isEmail;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _checkHost = _interopRequireDefault(require(\"./util/checkHost\"));\nvar _isByteLength = _interopRequireDefault(require(\"./isByteLength\"));\nvar _isFQDN = _interopRequireDefault(require(\"./isFQDN\"));\nvar _isIP = _interopRequireDefault(require(\"./isIP\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar default_email_options = {\n  allow_display_name: false,\n  allow_underscores: false,\n  require_display_name: false,\n  allow_utf8_local_part: true,\n  require_tld: true,\n  blacklisted_chars: '',\n  ignore_max_length: false,\n  host_blacklist: [],\n  host_whitelist: []\n};\n\n/* eslint-disable max-len */\n/* eslint-disable no-control-regex */\nvar splitNameAddress = /^([^\\x00-\\x1F\\x7F-\\x9F\\cX]+)</i;\nvar emailUserPart = /^[a-z\\d!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]+$/i;\nvar gmailUserPart = /^[a-z\\d]+$/;\nvar quotedEmailUser = /^([\\s\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f\\x21\\x23-\\x5b\\x5d-\\x7e]|(\\\\[\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]))*$/i;\nvar emailUserUtf8Part = /^[a-z\\d!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~\\u00A1-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+$/i;\nvar quotedEmailUserUtf8 = /^([\\s\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f\\x21\\x23-\\x5b\\x5d-\\x7e\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|(\\\\[\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))*$/i;\nvar defaultMaxEmailLength = 254;\n/* eslint-enable max-len */\n/* eslint-enable no-control-regex */\n\n/**\n * Validate display name according to the RFC2822: https://tools.ietf.org/html/rfc2822#appendix-A.1.2\n * @param {String} display_name\n */\nfunction validateDisplayName(display_name) {\n  var display_name_without_quotes = display_name.replace(/^\"(.+)\"$/, '$1');\n  // display name with only spaces is not valid\n  if (!display_name_without_quotes.trim()) {\n    return false;\n  }\n\n  // check whether display name contains illegal character\n  var contains_illegal = /[\\.\";<>]/.test(display_name_without_quotes);\n  if (contains_illegal) {\n    // if contains illegal characters,\n    // must to be enclosed in double-quotes, otherwise it's not a valid display name\n    if (display_name_without_quotes === display_name) {\n      return false;\n    }\n\n    // the quotes in display name must start with character symbol \\\n    var all_start_with_back_slash = display_name_without_quotes.split('\"').length === display_name_without_quotes.split('\\\\\"').length;\n    if (!all_start_with_back_slash) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction isEmail(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, default_email_options);\n  if (options.require_display_name || options.allow_display_name) {\n    var display_email = str.match(splitNameAddress);\n    if (display_email) {\n      var display_name = display_email[1];\n\n      // Remove display name and angle brackets to get email address\n      // Can be done in the regex but will introduce a ReDOS (See  #1597 for more info)\n      str = str.replace(display_name, '').replace(/(^<|>$)/g, '');\n\n      // sometimes need to trim the last space to get the display name\n      // because there may be a space between display name and email address\n      // eg. myname <[email protected]>\n      // the display name is `myname` instead of `myname `, so need to trim the last space\n      if (display_name.endsWith(' ')) {\n        display_name = display_name.slice(0, -1);\n      }\n      if (!validateDisplayName(display_name)) {\n        return false;\n      }\n    } else if (options.require_display_name) {\n      return false;\n    }\n  }\n  if (!options.ignore_max_length && str.length > defaultMaxEmailLength) {\n    return false;\n  }\n  var parts = str.split('@');\n  var domain = parts.pop();\n  var lower_domain = domain.toLowerCase();\n  if (options.host_blacklist.length > 0 && (0, _checkHost.default)(lower_domain, options.host_blacklist)) {\n    return false;\n  }\n  if (options.host_whitelist.length > 0 && !(0, _checkHost.default)(lower_domain, options.host_whitelist)) {\n    return false;\n  }\n  var user = parts.join('@');\n  if (options.domain_specific_validation && (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com')) {\n    /*\n    Previously we removed dots for gmail addresses before validating.\n    This was removed because it allows `[email protected]`\n    to be reported as valid, but it is not.\n    Gmail only normalizes single dots, removing them from here is pointless,\n    should be done in normalizeEmail\n    */\n    user = user.toLowerCase();\n\n    // Removing sub-address from username before gmail validation\n    var username = user.split('+')[0];\n\n    // Dots are not included in gmail length restriction\n    if (!(0, _isByteLength.default)(username.replace(/\\./g, ''), {\n      min: 6,\n      max: 30\n    })) {\n      return false;\n    }\n    var _user_parts = username.split('.');\n    for (var i = 0; i < _user_parts.length; i++) {\n      if (!gmailUserPart.test(_user_parts[i])) {\n        return false;\n      }\n    }\n  }\n  if (options.ignore_max_length === false && (!(0, _isByteLength.default)(user, {\n    max: 64\n  }) || !(0, _isByteLength.default)(domain, {\n    max: 254\n  }))) {\n    return false;\n  }\n  if (!(0, _isFQDN.default)(domain, {\n    require_tld: options.require_tld,\n    ignore_max_length: options.ignore_max_length,\n    allow_underscores: options.allow_underscores\n  })) {\n    if (!options.allow_ip_domain) {\n      return false;\n    }\n    if (!(0, _isIP.default)(domain)) {\n      if (!domain.startsWith('[') || !domain.endsWith(']')) {\n        return false;\n      }\n      var noBracketdomain = domain.slice(1, -1);\n      if (noBracketdomain.length === 0 || !(0, _isIP.default)(noBracketdomain)) {\n        return false;\n      }\n    }\n  }\n  if (options.blacklisted_chars) {\n    if (user.search(new RegExp(\"[\".concat(options.blacklisted_chars, \"]+\"), 'g')) !== -1) return false;\n  }\n  if (user[0] === '\"' && user[user.length - 1] === '\"') {\n    user = user.slice(1, user.length - 1);\n    return options.allow_utf8_local_part ? quotedEmailUserUtf8.test(user) : quotedEmailUser.test(user);\n  }\n  var pattern = options.allow_utf8_local_part ? emailUserUtf8Part : emailUserPart;\n  var user_parts = user.split('.');\n  for (var _i = 0; _i < user_parts.length; _i++) {\n    if (!pattern.test(user_parts[_i])) {\n      return false;\n    }\n  }\n  return true;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isHalfWidth;\nexports.halfWidth = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar halfWidth = exports.halfWidth = /[\\u0020-\\u007E\\uFF61-\\uFF9F\\uFFA0-\\uFFDC\\uFFE8-\\uFFEE0-9a-zA-Z]/;\nfunction isHalfWidth(str) {\n  (0, _assertString.default)(str);\n  return halfWidth.test(str);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isOctal;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar octal = /^(0o)?[0-7]+$/i;\nfunction isOctal(str) {\n  (0, _assertString.default)(str);\n  return octal.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isFullWidth;\nexports.fullWidth = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar fullWidth = exports.fullWidth = /[^\\u0020-\\u007E\\uFF61-\\uFF9F\\uFFA0-\\uFFDC\\uFFE8-\\uFFEE0-9a-zA-Z]/;\nfunction isFullWidth(str) {\n  (0, _assertString.default)(str);\n  return fullWidth.test(str);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISBN;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar possibleIsbn10 = /^(?:[0-9]{9}X|[0-9]{10})$/;\nvar possibleIsbn13 = /^(?:[0-9]{13})$/;\nvar factor = [1, 3];\nfunction isISBN(isbn, options) {\n  (0, _assertString.default)(isbn);\n\n  // For backwards compatibility:\n  // isISBN(str [, version]), i.e. `options` could be used as argument for the legacy `version`\n  var version = String((options === null || options === void 0 ? void 0 : options.version) || options);\n  if (!(options !== null && options !== void 0 && options.version || options)) {\n    return isISBN(isbn, {\n      version: 10\n    }) || isISBN(isbn, {\n      version: 13\n    });\n  }\n  var sanitizedIsbn = isbn.replace(/[\\s-]+/g, '');\n  var checksum = 0;\n  if (version === '10') {\n    if (!possibleIsbn10.test(sanitizedIsbn)) {\n      return false;\n    }\n    for (var i = 0; i < version - 1; i++) {\n      checksum += (i + 1) * sanitizedIsbn.charAt(i);\n    }\n    if (sanitizedIsbn.charAt(9) === 'X') {\n      checksum += 10 * 10;\n    } else {\n      checksum += 10 * sanitizedIsbn.charAt(9);\n    }\n    if (checksum % 11 === 0) {\n      return true;\n    }\n  } else if (version === '13') {\n    if (!possibleIsbn13.test(sanitizedIsbn)) {\n      return false;\n    }\n    for (var _i = 0; _i < 12; _i++) {\n      checksum += factor[_i % 2] * sanitizedIsbn.charAt(_i);\n    }\n    if (sanitizedIsbn.charAt(12) - (10 - checksum % 10) % 10 === 0) {\n      return true;\n    }\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMD5;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar md5 = /^[a-f0-9]{32}$/;\nfunction isMD5(str) {\n  (0, _assertString.default)(str);\n  return md5.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = escape;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction escape(str) {\n  (0, _assertString.default)(str);\n  return str.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/'/g, '&#x27;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\//g, '&#x2F;').replace(/\\\\/g, '&#x5C;').replace(/`/g, '&#96;');\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isSemVer;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _multilineRegex = _interopRequireDefault(require(\"./util/multilineRegex\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/**\n * Regular Expression to match\n * semantic versioning (SemVer)\n * built from multi-line, multi-parts regexp\n * Reference: https://semver.org/\n */\nvar semanticVersioningRegex = (0, _multilineRegex.default)(['^(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)', '(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-z-][0-9a-z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-z-][0-9a-z-]*))*))', '?(?:\\\\+([0-9a-z-]+(?:\\\\.[0-9a-z-]+)*))?$'], 'i');\nfunction isSemVer(str) {\n  (0, _assertString.default)(str);\n  return semanticVersioningRegex.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isULID;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isULID(str) {\n  (0, _assertString.default)(str);\n  return /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/i.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// Original Source: https://raw.githubusercontent.com/validatorjs/validator.js/refs/heads/master/test/validators.test.js\n// Version: https://github.com/validatorjs/validator.js/tree/13.15.15\n\nimport { default as validatorjs } from \"validator\";\n\nlet assertionCount = 0;\n\nfunction assert(condition, ...args) {\n  assertionCount++;\n  if (!condition) throw new Error(`Assertion failure: ${args}`);\n}\n\nfunction describe(name, body) {\n  body();\n}\n\nfunction it(name, body) {\n  body();\n}\n\nfunction test({ validator, args = [], valid, invalid }) {\n  const validatorMethod = validatorjs[validator];\n  valid?.forEach((validValue) => {\n    assert(validatorMethod(validValue, ...args), validValue, ...args);\n  });\n  invalid?.forEach((validValue) => {\n    assert(!validatorMethod(validValue, ...args), validValue, ...args);\n  });\n}\n\nexport function runTest() {\n  assertionCount = 0;\n\n  describe(\"Validators\", () => {\n    it(\"should validate email addresses\", () => {\n      test({\n        validator: \"isEmail\",\n        valid: [\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"hans.m端[email protected]\",\n          \"hans@m端ller.com\",\n          \"test|123@m端ller.com\",\n          \"[email protected]\",\n          \"[email protected]\",\n          '\"foobar\"@example.com',\n          '\"  foo  m端ller \"@example.com',\n          '\"foo\\\\@bar\"@example.com',\n          `${\"a\".repeat(64)}@${\"a\".repeat(63)}.com`,\n          `${\"a\".repeat(64)}@${\"a\".repeat(63)}.com`,\n          `${\"a\".repeat(31)}@gmail.com`,\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n        ],\n        invalid: [\n          \"invalidemail@\",\n          \"invalid.com\",\n          \"@invalid.com\",\n          \"[email protected].\",\n          \"foo@_bar.com\",\n          \"somename@gmail.com\",\n          \"[email protected].\",\n          \"[email protected]\",\n          \"gmailgmailgmailgmailgmail@gmail.com\",\n          `${\"a\".repeat(64)}@${\"a\".repeat(251)}.com`,\n          `${\"a\".repeat(65)}@${\"a\".repeat(250)}.com`,\n          `${\"a\".repeat(64)}@${\"a\".repeat(64)}.com`,\n          `${\"a\".repeat(64)}@${\"a\".repeat(63)}.${\"a\".repeat(63)}.${\"a\".repeat(\n            63\n          )}.${\"a\".repeat(58)}.com`,\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected]\",\n          \"test123+invalid! [email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          'wrong()[]\",:;<>@@gmail.com',\n          '\"wrong()[]\",:;<>@@gmail.com',\n          \"[email protected]�\",\n          \"[email protected]©\",\n          \"nbsp [email protected]\",\n          \"nbsp_test@te st.com\",\n          \"[email protected] m\",\n          '\"[email protected]',\n          '\"foo\"[email protected]',\n          'foo\"bar\"@gmail.com',\n        ],\n      });\n    });\n\n    it(\"should validate email addresses with domain specific validation\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ domain_specific_validation: true }],\n        valid: [\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          `${\"a\".repeat(30)}@gmail.com`,\n        ],\n        invalid: [\n          `${\"a\".repeat(31)}@gmail.com`,\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n        ],\n      });\n    });\n\n    it(\"should validate email addresses with underscores in the domain\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ allow_underscores: true }],\n        valid: [\"foobar@my_sarisari_store.typepad.com\"],\n        invalid: [],\n      });\n    });\n\n    it(\"should validate email addresses without UTF8 characters in local part\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ allow_utf8_local_part: false }],\n        valid: [\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"hans@m端ller.com\",\n          \"test|123@m端ller.com\",\n          \"[email protected]\",\n          \"[email protected]\",\n          '\"foobar\"@example.com',\n          '\"foo\\\\@bar\"@example.com',\n          '\"  foo  bar  \"@example.com',\n        ],\n        invalid: [\n          \"invalidemail@\",\n          \"invalid.com\",\n          \"@invalid.com\",\n          \"[email protected].\",\n          \"[email protected].\",\n          \"somename@gmail.com\",\n          \"hans.m端[email protected]\",\n          \"[email protected]\",\n          \"tü[email protected]\",\n          \"nbsp [email protected]\",\n        ],\n      });\n    });\n\n    it(\"should validate email addresses with display names\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ allow_display_name: true }],\n        valid: [\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"hans.m端[email protected]\",\n          \"hans@m端ller.com\",\n          \"test|123@m端ller.com\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <hans.m端[email protected]>\",\n          \"Some Name <hans@m端ller.com>\",\n          \"Some Name <test|123@m端ller.com>\",\n          \"Some Name <[email protected]>\",\n          \"'Foo Bar, Esq'<[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Middle Name <[email protected]>\",\n          \"Name <[email protected]>\",\n          \"Name<[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Name🍓With🍑Emoji🚴‍♀️🏆<[email protected]>\",\n          \"🍇🍗🍑<[email protected]>\",\n          '\"<displayNameInBrackets>\"<[email protected]>',\n          '\"\\\\\"quotes\\\\\"\"<[email protected]>',\n          '\"name;\"<[email protected]>',\n          '\"name;\" <[email protected]>',\n        ],\n        invalid: [\n          \"invalidemail@\",\n          \"invalid.com\",\n          \"@invalid.com\",\n          \"[email protected].\",\n          \"[email protected].\",\n          \"Some Name <invalidemail@>\",\n          \"Some Name <invalid.com>\",\n          \"Some Name <@invalid.com>\",\n          \"Some Name <[email protected].>\",\n          \"Some Name <[email protected].>\",\n          \"Some Name [email protected].>\",\n          \"Some Name <[email protected].\",\n          \"Some Name < [email protected] >\",\n          \"Name [email protected]\",\n          \"Some Name <[email protected]>\",\n          \"Some Name<emoji_in_address🍈@aftership.com>\",\n          \"invisibleCharacter\\u001F<[email protected]>\",\n          \"<displayNameInBrackets><[email protected]>\",\n          '\\\\\"quotes\\\\\"<[email protected]>',\n          '\"\"quotes\"\"<[email protected]>',\n          \"name;<[email protected]>\",\n          \"    <[email protected]>\",\n          '\"    \"<[email protected]>',\n        ],\n      });\n    });\n\n    it(\"should validate email addresses with required display names\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ require_display_name: true }],\n        valid: [\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <hans.m端[email protected]>\",\n          \"Some Name <hans@m端ller.com>\",\n          \"Some Name <test|123@m端ller.com>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Middle Name <[email protected]>\",\n          \"Name <[email protected]>\",\n          \"Name<[email protected]>\",\n        ],\n        invalid: [\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"hans.m端[email protected]\",\n          \"hans@m端ller.com\",\n          \"test|123@m端ller.com\",\n          \"[email protected]\",\n          \"invalidemail@\",\n          \"invalid.com\",\n          \"@invalid.com\",\n          \"[email protected].\",\n          \"[email protected].\",\n          \"Some Name <invalidemail@>\",\n          \"Some Name <invalid.com>\",\n          \"Some Name <@invalid.com>\",\n          \"Some Name <[email protected].>\",\n          \"Some Name <[email protected].>\",\n          \"Some Name [email protected].>\",\n          \"Some Name <[email protected].\",\n          \"Some Name < [email protected] >\",\n          \"Name [email protected]\",\n        ],\n      });\n    });\n\n    it(\"should validate email addresses with allowed IPs\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ allow_ip_domain: true }],\n        valid: [\"email@[123.123.123.123]\", \"[email protected]\"],\n        invalid: [\n          \"[email protected]\",\n          \"[email protected]\",\n          \"email@[266.266.266.266]\",\n        ],\n      });\n    });\n\n    it(\"should not validate email addresses with blacklisted chars in the name\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ blacklisted_chars: 'abc\"' }],\n        valid: [\"[email protected]\"],\n        invalid: [\n          \"[email protected]\",\n          '\"foobr\"@example.com',\n          '\" foo m端ller \"@example.com',\n          '\"foo@br\"@example.com',\n        ],\n      });\n    });\n\n    it(\"should validate really long emails if ignore_max_length is set\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ ignore_max_length: false }],\n        valid: [],\n        invalid: [\n          \"Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@example.com\",\n        ],\n      });\n\n      test({\n        validator: \"isEmail\",\n        args: [{ ignore_max_length: true }],\n        valid: [\n          \"Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@example.com\",\n        ],\n        invalid: [],\n      });\n\n      test({\n        validator: \"isEmail\",\n        args: [{ ignore_max_length: true }],\n        valid: [\n          \"Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX.com\",\n        ],\n        invalid: [],\n      });\n    });\n\n    it(\"should not validate email addresses with denylisted domains\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ host_blacklist: [\"gmail.com\", \"foo.bar.com\"] }],\n        valid: [\"[email protected]\"],\n        invalid: [\"[email protected]\", \"[email protected]\"],\n      });\n    });\n\n    it(\"should allow regular expressions in the host blacklist of isEmail\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [\n          {\n            host_blacklist: [\"bar.com\", \"foo.com\", /\\.foo\\.com$/],\n          },\n        ],\n        valid: [\"[email protected]\", \"[email protected]\", \"[email protected]\"],\n        invalid: [\"[email protected]\", \"[email protected]\", \"[email protected]\"],\n      });\n    });\n\n    it(\"should validate only email addresses with whitelisted domains\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ host_whitelist: [\"gmail.com\", \"foo.bar.com\"] }],\n        valid: [\"[email protected]\", \"[email protected]\"],\n        invalid: [\"[email protected]\", \"[email protected]\", \"[email protected]\"],\n      });\n    });\n\n    it(\"should allow regular expressions in the host whitelist of isEmail\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [\n          {\n            host_whitelist: [\"bar.com\", \"foo.com\", /\\.foo\\.com$/],\n          },\n        ],\n        valid: [\"[email protected]\", \"[email protected]\", \"[email protected]\"],\n        invalid: [\"[email protected]\", \"[email protected]\", \"[email protected]\"],\n      });\n    });\n\n    it(\"should validate URLs\", () => {\n      test({\n        validator: \"isURL\",\n        valid: [\n          \"foobar.com\",\n          \"www.foobar.com\",\n          \"foobar.com/\",\n          \"valid.au\",\n          \"http://www.foobar.com/\",\n          \"HTTP://WWW.FOOBAR.COM/\",\n          \"https://www.foobar.com/\",\n          \"HTTPS://WWW.FOOBAR.COM/\",\n          \"http://www.foobar.com:23/\",\n          \"http://www.foobar.com:65535/\",\n          \"http://www.foobar.com:5/\",\n          \"https://www.foobar.com/\",\n          \"ftp://www.foobar.com/\",\n          \"http://www.foobar.com/~foobar\",\n          \"http://user:[email protected]/\",\n          \"http://user:@www.foobar.com/\",\n          \"http://:[email protected]/\",\n          \"http://[email protected]\",\n          \"http://127.0.0.1/\",\n          \"http://10.0.0.0/\",\n          \"http://189.123.14.13/\",\n          \"http://duckduckgo.com/?q=%2F\",\n          \"http://foobar.com/t$-_.+!*'(),\",\n          \"http://foobar.com/?foo=bar#baz=qux\",\n          \"http://foobar.com?foo=bar\",\n          \"http://foobar.com#baz=qux\",\n          \"http://www.xn--froschgrn-x9a.net/\",\n          \"http://xn--froschgrn-x9a.com/\",\n          \"http://foo--bar.com\",\n          \"http://høyfjellet.no\",\n          \"http://xn--j1aac5a4g.xn--j1amh\",\n          \"http://xn------eddceddeftq7bvv7c4ke4c.xn--p1ai\",\n          \"http://кулік.укр\",\n          \"test.com?ref=http://test2.com\",\n          \"http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html\",\n          \"http://[1080:0:0:0:8:800:200C:417A]/index.html\",\n          \"http://[3ffe:2a00:100:7031::1]\",\n          \"http://[1080::8:800:200C:417A]/foo\",\n          \"http://[::192.9.5.5]/ipng\",\n          \"http://[::FFFF:129.144.52.38]:80/index.html\",\n          \"http://[2010:836B:4179::836B:4179]\",\n          \"http://example.com/example.json#/foo/bar\",\n          \"http://1337.com\",\n        ],\n        invalid: [\n          \"http://localhost:3000/\",\n          \"//foobar.com\",\n          \"xyz://foobar.com\",\n          \"invalid/\",\n          \"invalid.x\",\n          \"invalid.\",\n          \".com\",\n          \"http://com/\",\n          \"http://300.0.0.1/\",\n          \"mailto:[email protected]\",\n          \"rtmp://foobar.com\",\n          \"http://www.xn--.com/\",\n          \"http://xn--.com/\",\n          \"http://www.foobar.com:0/\",\n          \"http://www.foobar.com:70000/\",\n          \"http://www.foobar.com:99999/\",\n          \"http://www.-foobar.com/\",\n          \"http://www.foobar-.com/\",\n          \"http://foobar/# lol\",\n          \"http://foobar/? lol\",\n          \"http://foobar/ lol/\",\n          \"http://lol @foobar.com/\",\n          \"http://lol:lol @foobar.com/\",\n          \"http://lol:lol:[email protected]/\",\n          \"http://lol: @foobar.com/\",\n          \"http://www.foo_bar.com/\",\n          \"http://www.foobar.com/\\t\",\n          \"http://@foobar.com\",\n          \"http://:@foobar.com\",\n          \"http://\\[email protected]/\",\n          \"\",\n          `http://foobar.com/${new Array(2083).join(\"f\")}`,\n          \"http://*.foo.com\",\n          \"*.foo.com\",\n          \"!.foo.com\",\n          \"http://example.com.\",\n          \"http://localhost:61500this is an invalid url!!!!\",\n          \"////foobar.com\",\n          \"http:////foobar.com\",\n          \"https://example.com/foo/<script>alert('XSS')</script>/\",\n        ],\n      });\n    });\n\n    it(\"should validate URLs with custom protocols\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            protocols: [\"rtmp\"],\n          },\n        ],\n        valid: [\"rtmp://foobar.com\"],\n        invalid: [\"http://foobar.com\"],\n      });\n    });\n\n    it(\"should validate file URLs without a host\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            protocols: [\"file\"],\n            require_host: false,\n            require_tld: false,\n          },\n        ],\n        valid: [\"file://localhost/foo.txt\", \"file:///foo.txt\", \"file:///\"],\n        invalid: [\"http://foobar.com\", \"file://\"],\n      });\n    });\n\n    it(\"should validate postgres URLs without a host\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            protocols: [\"postgres\"],\n            require_host: false,\n          },\n        ],\n        valid: [\"postgres://user:pw@/test\"],\n        invalid: [\"http://foobar.com\", \"postgres://\"],\n      });\n    });\n\n    it(\"should validate URLs with any protocol\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            require_valid_protocol: false,\n          },\n        ],\n        valid: [\"rtmp://foobar.com\", \"http://foobar.com\", \"test://foobar.com\"],\n        invalid: [\"mailto:[email protected]\"],\n      });\n    });\n\n    it(\"should validate URLs with underscores\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            allow_underscores: true,\n          },\n        ],\n        valid: [\n          \"http://foo_bar.com\",\n          \"http://pr.example_com.294.example.com/\",\n          \"http://foo__bar.com\",\n          \"http://_.example.com\",\n        ],\n        invalid: [],\n      });\n    });\n\n    it(\"should validate URLs that do not have a TLD\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            require_tld: false,\n          },\n        ],\n        valid: [\n          \"http://foobar.com/\",\n          \"http://foobar/\",\n          \"http://localhost/\",\n          \"foobar/\",\n          \"foobar\",\n        ],\n        invalid: [],\n      });\n    });\n\n    it(\"should validate URLs with a trailing dot option\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            allow_trailing_dot: true,\n            require_tld: false,\n          },\n        ],\n        valid: [\"http://example.com.\", \"foobar.\"],\n      });\n    });\n\n    it(\"should validate URLs with column and no port\", () => {\n      test({\n        validator: \"isURL\",\n        valid: [\"http://example.com:\", \"ftp://example.com:\"],\n        invalid: [\"https://example.com:abc\"],\n      });\n    });\n\n    it(\"should validate sftp protocol URL containing column and no port\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            protocols: [\"sftp\"],\n          },\n        ],\n        valid: [\"sftp://user:[email protected]:/incoming/things.csv\"],\n      });\n    });\n\n    it(\"should validate protocol relative URLs\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            allow_protocol_relative_urls: true,\n          },\n        ],\n        valid: [\"//foobar.com\", \"http://foobar.com\", \"foobar.com\"],\n        invalid: [\n          \"://foobar.com\",\n          \"/foobar.com\",\n          \"////foobar.com\",\n          \"http:////foobar.com\",\n        ],\n      });\n    });\n\n    it(\"should not validate URLs with fragments when allow fragments is false\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            allow_fragments: false,\n          },\n        ],\n        valid: [\"http://foobar.com\", \"foobar.com\"],\n        invalid: [\"http://foobar.com#part\", \"foobar.com#part\"],\n      });\n    });\n\n    it(\"should not validate URLs with query components when allow query components is false\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            allow_query_components: false,\n          },\n        ],\n        valid: [\"http://foobar.com\", \"foobar.com\"],\n        invalid: [\n          \"http://foobar.com?foo=bar\",\n          \"http://foobar.com?foo=bar&bar=foo\",\n          \"foobar.com?foo=bar\",\n          \"foobar.com?foo=bar&bar=foo\",\n        ],\n      });\n    });\n\n    it(\"should not validate protocol relative URLs when require protocol is true\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            allow_protocol_relative_urls: true,\n            require_protocol: true,\n          },\n        ],\n        valid: [\"http://foobar.com\"],\n        invalid: [\"//foobar.com\", \"://foobar.com\", \"/foobar.com\", \"foobar.com\"],\n      });\n    });\n\n    it(\"should let users specify whether URLs require a protocol\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            require_protocol: true,\n          },\n        ],\n        valid: [\"http://foobar.com/\"],\n        invalid: [\"http://localhost/\", \"foobar.com\", \"foobar\"],\n      });\n    });\n\n    it(\"should let users specify a host whitelist\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            host_whitelist: [\"foo.com\", \"bar.com\"],\n          },\n        ],\n        valid: [\"http://bar.com/\", \"http://foo.com/\"],\n        invalid: [\"http://foobar.com\", \"http://foo.bar.com/\", \"http://qux.com\"],\n      });\n    });\n\n    it(\"should allow regular expressions in the host whitelist\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            host_whitelist: [\"bar.com\", \"foo.com\", /\\.foo\\.com$/],\n          },\n        ],\n        valid: [\n          \"http://bar.com/\",\n          \"http://foo.com/\",\n          \"http://images.foo.com/\",\n          \"http://cdn.foo.com/\",\n          \"http://a.b.c.foo.com/\",\n        ],\n        invalid: [\"http://foobar.com\", \"http://foo.bar.com/\", \"http://qux.com\"],\n      });\n    });\n\n    it(\"should let users specify a host blacklist\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            host_blacklist: [\"foo.com\", \"bar.com\"],\n          },\n        ],\n        valid: [\"http://foobar.com\", \"http://foo.bar.com/\", \"http://qux.com\"],\n        invalid: [\"http://bar.com/\", \"http://foo.com/\"],\n      });\n    });\n\n    it(\"should allow regular expressions in the host blacklist\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            host_blacklist: [\"bar.com\", \"foo.com\", /\\.foo\\.com$/],\n          },\n        ],\n        valid: [\"http://foobar.com\", \"http://foo.bar.com/\", \"http://qux.com\"],\n        invalid: [\n          \"http://bar.com/\",\n          \"http://foo.com/\",\n          \"http://images.foo.com/\",\n          \"http://cdn.foo.com/\",\n          \"http://a.b.c.foo.com/\",\n        ],\n      });\n    });\n\n    it(\"should allow rejecting urls containing authentication information\", () => {\n      test({\n        validator: \"isURL\",\n        args: [{ disallow_auth: true }],\n        valid: [\"doe.com\"],\n        invalid: [\"[email protected]\", \"john:[email protected]\"],\n      });\n    });\n\n    it(\"should accept urls containing authentication information\", () => {\n      test({\n        validator: \"isURL\",\n        args: [{ disallow_auth: false }],\n        valid: [\n          \"[email protected]\",\n          \"user:@example.com\",\n          \"user:[email protected]\",\n        ],\n        invalid: [\n          \"user:user:[email protected]\",\n          \"@example.com\",\n          \":@example.com\",\n          \":example.com\",\n        ],\n      });\n    });\n\n    it(\"should allow user to skip URL length validation\", () => {\n      test({\n        validator: \"isURL\",\n        args: [{ validate_length: false }],\n        valid: [\n          \"http://foobar.com/f\",\n          `http://foobar.com/${new Array(2083).join(\"f\")}`,\n        ],\n        invalid: [],\n      });\n    });\n\n    it(\"should allow user to configure the maximum URL length\", () => {\n      test({\n        validator: \"isURL\",\n        args: [{ max_allowed_length: 20 }],\n        valid: [\n          \"http://foobar.com/12\", // 20 characters\n          \"http://foobar.com/\",\n        ],\n        invalid: [\n          \"http://foobar.com/123\", // 21 characters\n          \"http://foobar.com/1234567890\",\n        ],\n      });\n    });\n\n    it(\"should validate URLs with port present\", () => {\n      test({\n        validator: \"isURL\",\n        args: [{ require_port: true }],\n        valid: [\n          \"http://user:[email protected]:1\",\n          \"http://user:@www.foobar.com:65535\",\n          \"http://127.0.0.1:23\",\n          \"http://10.0.0.0:256\",\n          \"http://189.123.14.13:256\",\n          \"http://duckduckgo.com:65535?q=%2F\",\n        ],\n        invalid: [\n          \"http://user:[email protected]/\",\n          \"http://user:@www.foobar.com/\",\n          \"http://127.0.0.1/\",\n          \"http://10.0.0.0/\",\n          \"http://189.123.14.13/\",\n          \"http://duckduckgo.com/?q=%2F\",\n        ],\n      });\n    });\n\n    it(\"should validate MAC addresses\", () => {\n      test({\n        validator: \"isMACAddress\",\n        valid: [\n          \"ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:ab\",\n          \"01:AB:03:04:05:06\",\n          \"A9 C5 D4 9F EB D3\",\n          \"01 02 03 04 05 ab\",\n          \"01-02-03-04-05-ab\",\n          \"0102.0304.05ab\",\n          \"ab:ab:ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:06:07:ab\",\n          \"01:AB:03:04:05:06:07:08\",\n          \"A9 C5 D4 9F EB D3 B6 65\",\n          \"01 02 03 04 05 06 07 ab\",\n          \"01-02-03-04-05-06-07-ab\",\n          \"0102.0304.0506.07ab\",\n        ],\n        invalid: [\n          \"abc\",\n          \"01:02:03:04:05\",\n          \"01:02:03:04:05:z0\",\n          \"01:02:03:04::ab\",\n          \"1:2:3:4:5:6\",\n          \"AB:CD:EF:GH:01:02\",\n          \"A9C5 D4 9F EB D3\",\n          \"01-02 03:04 05 ab\",\n          \"0102.03:04.05ab\",\n          \"900f/dffs/sdea\",\n          \"01:02:03:04:05:06:07\",\n          \"01:02:03:04:05:06:07:z0\",\n          \"01:02:03:04:05:06::ab\",\n          \"1:2:3:4:5:6:7:8\",\n          \"AB:CD:EF:GH:01:02:03:04\",\n          \"A9C5 D4 9F EB D3 B6 65\",\n          \"01-02 03:04 05 06 07 ab\",\n          \"0102.03:04.0506.07ab\",\n          \"900f/dffs/sdea/54gh\",\n        ],\n      });\n      test({\n        validator: \"isMACAddress\",\n        args: [\n          {\n            eui: \"48\",\n          },\n        ],\n        valid: [\n          \"ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:ab\",\n          \"01:AB:03:04:05:06\",\n          \"A9 C5 D4 9F EB D3\",\n          \"01 02 03 04 05 ab\",\n          \"01-02-03-04-05-ab\",\n          \"0102.0304.05ab\",\n        ],\n        invalid: [\n          \"ab:ab:ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:06:07:ab\",\n          \"01:AB:03:04:05:06:07:08\",\n          \"A9 C5 D4 9F EB D3 B6 65\",\n          \"01 02 03 04 05 06 07 ab\",\n          \"01-02-03-04-05-06-07-ab\",\n          \"0102.0304.0506.07ab\",\n        ],\n      });\n      test({\n        validator: \"isMACAddress\",\n        args: [\n          {\n            eui: \"64\",\n          },\n        ],\n        valid: [\n          \"ab:ab:ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:06:07:ab\",\n          \"01:AB:03:04:05:06:07:08\",\n          \"A9 C5 D4 9F EB D3 B6 65\",\n          \"01 02 03 04 05 06 07 ab\",\n          \"01-02-03-04-05-06-07-ab\",\n          \"0102.0304.0506.07ab\",\n        ],\n        invalid: [\n          \"ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:ab\",\n          \"01:AB:03:04:05:06\",\n          \"A9 C5 D4 9F EB D3\",\n          \"01 02 03 04 05 ab\",\n          \"01-02-03-04-05-ab\",\n          \"0102.0304.05ab\",\n        ],\n      });\n    });\n\n    it(\"should validate MAC addresses without separator\", () => {\n      test({\n        validator: \"isMACAddress\",\n        args: [\n          {\n            no_separators: true,\n          },\n        ],\n        valid: [\n          \"abababababab\",\n          \"FFFFFFFFFFFF\",\n          \"0102030405ab\",\n          \"01AB03040506\",\n          \"abababababababab\",\n          \"FFFFFFFFFFFFFFFF\",\n          \"01020304050607ab\",\n          \"01AB030405060708\",\n        ],\n        invalid: [\n          \"abc\",\n          \"01:02:03:04:05\",\n          \"01:02:03:04::ab\",\n          \"1:2:3:4:5:6\",\n          \"AB:CD:EF:GH:01:02\",\n          \"ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:ab\",\n          \"01:AB:03:04:05:06\",\n          \"0102030405\",\n          \"01020304ab\",\n          \"123456\",\n          \"ABCDEFGH0102\",\n          \"01:02:03:04:05:06:07\",\n          \"01:02:03:04:05:06::ab\",\n          \"1:2:3:4:5:6:7:8\",\n          \"AB:CD:EF:GH:01:02:03:04\",\n          \"ab:ab:ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:06:07:ab\",\n          \"01:AB:03:04:05:06:07:08\",\n          \"01020304050607\",\n          \"010203040506ab\",\n          \"12345678\",\n          \"ABCDEFGH01020304\",\n        ],\n      });\n      test({\n        validator: \"isMACAddress\",\n        args: [\n          {\n            no_separators: true,\n            eui: \"48\",\n          },\n        ],\n        valid: [\"abababababab\", \"FFFFFFFFFFFF\", \"0102030405ab\", \"01AB03040506\"],\n        invalid: [\n          \"abababababababab\",\n          \"FFFFFFFFFFFFFFFF\",\n          \"01020304050607ab\",\n          \"01AB030405060708\",\n        ],\n      });\n      test({\n        validator: \"isMACAddress\",\n        args: [\n          {\n            no_separators: true,\n            eui: \"64\",\n          },\n        ],\n        valid: [\n          \"abababababababab\",\n          \"FFFFFFFFFFFFFFFF\",\n          \"01020304050607ab\",\n          \"01AB030405060708\",\n        ],\n        invalid: [\n          \"abababababab\",\n          \"FFFFFFFFFFFF\",\n          \"0102030405ab\",\n          \"01AB03040506\",\n        ],\n      });\n    });\n\n    it(\"should validate isIPRange\", () => {\n      test({\n        validator: \"isIPRange\",\n        valid: [\n          \"127.0.0.1/24\",\n          \"0.0.0.0/0\",\n          \"255.255.255.0/32\",\n          \"::/0\",\n          \"::/128\",\n          \"2001::/128\",\n          \"2001:800::/128\",\n          \"::ffff:127.0.0.1/128\",\n        ],\n        invalid: [\n          \"abc\",\n          \"127.200.230.1/35\",\n          \"127.200.230.1/-1\",\n          \"1.1.1.1/011\",\n          \"1.1.1/24.1\",\n          \"1.1.1.1/01\",\n          \"1.1.1.1/1.1\",\n          \"1.1.1.1/1.\",\n          \"1.1.1.1/1/1\",\n          \"1.1.1.1\",\n          \"::1\",\n          \"::1/164\",\n          \"2001::/240\",\n          \"2001::/-1\",\n          \"2001::/001\",\n          \"2001::/24.1\",\n          \"2001:db8:0000:1:1:1:1:1\",\n          \"::ffff:127.0.0.1\",\n        ],\n      });\n      test({\n        validator: \"isIPRange\",\n        args: [4],\n        valid: [\n          \"127.0.0.1/1\",\n          \"0.0.0.0/1\",\n          \"255.255.255.255/1\",\n          \"1.2.3.4/1\",\n          \"255.0.0.1/1\",\n          \"0.0.1.1/1\",\n        ],\n        invalid: [\n          \"abc\",\n          \"::1\",\n          \"2001:db8:0000:1:1:1:1:1\",\n          \"::ffff:127.0.0.1\",\n          \"137.132.10.01\",\n          \"0.256.0.256\",\n          \"255.256.255.256\",\n        ],\n      });\n      test({\n        validator: \"isIPRange\",\n        args: [6],\n        valid: [\"::1/1\", \"2001:db8:0000:1:1:1:1:1/1\", \"::ffff:127.0.0.1/1\"],\n        invalid: [\n          \"abc\",\n          \"127.0.0.1\",\n          \"0.0.0.0\",\n          \"255.255.255.255\",\n          \"1.2.3.4\",\n          \"::ffff:287.0.0.1\",\n          \"::ffff:287.0.0.1/254\",\n          \"%\",\n          \"fe80::1234%\",\n          \"fe80::1234%1%3%4\",\n          \"fe80%fe80%\",\n        ],\n      });\n      test({\n        validator: \"isIPRange\",\n        args: [10],\n        valid: [],\n        invalid: [\n          \"abc\",\n          \"127.0.0.1/1\",\n          \"0.0.0.0/1\",\n          \"255.255.255.255/1\",\n          \"1.2.3.4/1\",\n          \"::1/1\",\n          \"2001:db8:0000:1:1:1:1:1/1\",\n        ],\n      });\n    });\n\n    it(\"should validate FQDN\", () => {\n      test({\n        validator: \"isFQDN\",\n        valid: [\n          \"domain.com\",\n          \"dom.plato\",\n          \"a.domain.co\",\n          \"foo--bar.com\",\n          \"xn--froschgrn-x9a.com\",\n          \"rebecca.blackfriday\",\n          \"1337.com\",\n        ],\n        invalid: [\n          \"abc\",\n          \"256.0.0.0\",\n          \"_.com\",\n          \"*.some.com\",\n          \"s!ome.com\",\n          \"domain.com/\",\n          \"/more.com\",\n          \"domain.com�\",\n          \"domain.co\\u00A0m\",\n          \"domain.co\\u1680m\",\n          \"domain.co\\u2006m\",\n          \"domain.co\\u2028m\",\n          \"domain.co\\u2029m\",\n          \"domain.co\\u202Fm\",\n          \"domain.co\\u205Fm\",\n          \"domain.co\\u3000m\",\n          \"domain.com\\uDC00\",\n          \"domain.co\\uEFFFm\",\n          \"domain.co\\uFDDAm\",\n          \"domain.co\\uFFF4m\",\n          \"domain.com©\",\n          \"example.0\",\n          \"192.168.0.9999\",\n          \"192.168.0\",\n        ],\n      });\n    });\n    it(\"should validate FQDN with trailing dot option\", () => {\n      test({\n        validator: \"isFQDN\",\n        args: [{ allow_trailing_dot: true }],\n        valid: [\"example.com.\"],\n      });\n    });\n    it(\"should invalidate FQDN when not require_tld\", () => {\n      test({\n        validator: \"isFQDN\",\n        args: [{ require_tld: false }],\n        invalid: [\"example.0\", \"192.168.0\", \"192.168.0.9999\"],\n      });\n    });\n    it(\"should validate FQDN when not require_tld but allow_numeric_tld\", () => {\n      test({\n        validator: \"isFQDN\",\n        args: [{ allow_numeric_tld: true, require_tld: false }],\n        valid: [\"example.0\", \"192.168.0\", \"192.168.0.9999\"],\n      });\n    });\n    it(\"should validate FQDN with wildcard option\", () => {\n      test({\n        validator: \"isFQDN\",\n        args: [{ allow_wildcard: true }],\n        valid: [\"*.example.com\", \"*.shop.example.com\"],\n      });\n    });\n    it(\"should validate FQDN with required allow_trailing_dot, allow_underscores and allow_numeric_tld options\", () => {\n      test({\n        validator: \"isFQDN\",\n        args: [\n          {\n            allow_trailing_dot: true,\n            allow_underscores: true,\n            allow_numeric_tld: true,\n          },\n        ],\n        valid: [\"abc.efg.g1h.\", \"as1s.sad3s.ssa2d.\"],\n      });\n    });\n\n    it(\"should validate alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        valid: [\"abc\", \"ABC\", \"FoObar\"],\n        invalid: [\"abc1\", \"  foo  \", \"\", \"ÄBC\", \"FÜübar\", \"Jön\", \"Heiß\"],\n      });\n    });\n\n    it(\"should validate alpha string with ignored characters\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"en-US\", { ignore: \"- /\" }], // ignore [space-/]\n        valid: [\"en-US\", \"this is a valid alpha string\", \"us/usa\"],\n        invalid: [\n          \"1. this is not a valid alpha string\",\n          \"this$is also not a valid.alpha string\",\n          \"this is also not a valid alpha string.\",\n        ],\n      });\n\n      test({\n        validator: \"isAlpha\",\n        args: [\"en-US\", { ignore: /[\\s/-]/g }], // ignore [space -]\n        valid: [\"en-US\", \"this is a valid alpha string\"],\n        invalid: [\n          \"1. this is not a valid alpha string\",\n          \"this$is also not a valid.alpha string\",\n          \"this is also not a valid alpha string.\",\n        ],\n      });\n\n      test({\n        validator: \"isAlpha\",\n        args: [\"en-US\", { ignore: 1234 }], // invalid ignore matcher\n        error: [\"alpha\"],\n      });\n    });\n\n    it(\"should validate Azerbaijani alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"az-AZ\"],\n        valid: [\n          \"Azərbaycan\",\n          \"Bakı\",\n          \"üöğıəçş\",\n          \"sizAzərbaycanlaşdırılmışlardansınızmı\",\n          \"dahaBirDüzgünString\",\n          \"abcçdeəfgğhxıijkqlmnoöprsştuüvyz\",\n        ],\n        invalid: [\"rəqəm1\", \"  foo  \", \"\", \"ab(cd)\", \"simvol@\", \"wəkil\"],\n      });\n    });\n\n    it(\"should validate bulgarian alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"bg-BG\"],\n        valid: [\"абв\", \"АБВ\", \"жаба\", \"яГоДа\"],\n        invalid: [\"abc1\", \"  foo  \", \"\", \"ЁЧПС\", \"_аз_обичам_обувки_\", \"ехо!\"],\n      });\n    });\n\n    it(\"should validate Bengali alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"bn-BD\"],\n        valid: [\"অয়াওর\", \"ফগফদ্রত\", \"ফদ্ম্যতভ\", \"বেরেওভচনভন\", \"আমারবাসগা\"],\n        invalid: [\"দাস২৩৪\", \"  দ্গফহ্নভ  \", \"\", \"(গফদ)\"],\n      });\n    });\n\n    it(\"should validate czech alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"cs-CZ\"],\n        valid: [\"žluťoučký\", \"KŮŇ\", \"Pěl\", \"Ďábelské\", \"ódy\"],\n        invalid: [\"ábc1\", \"  fůj  \", \"\"],\n      });\n    });\n\n    it(\"should validate slovak alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"sk-SK\"],\n        valid: [\n          \"môj\",\n          \"ľúbím\",\n          \"mäkčeň\",\n          \"stĹp\",\n          \"vŕba\",\n          \"ňorimberk\",\n          \"ťava\",\n          \"žanéta\",\n          \"Ďábelské\",\n          \"ódy\",\n        ],\n        invalid: [\"1moj\", \"你好世界\", \"  Привет мир  \", \"مرحبا العا \"],\n      });\n    });\n\n    it(\"should validate danish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"da-DK\"],\n        valid: [\"aøå\", \"Ære\", \"Øre\", \"Åre\"],\n        invalid: [\"äbc123\", \"ÄBC11\", \"\"],\n      });\n    });\n\n    it(\"should validate dutch alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"nl-NL\"],\n        valid: [\"Kán\", \"één\", \"vóór\", \"nú\", \"héél\"],\n        invalid: [\"äca \", \"abcß\", \"Øre\"],\n      });\n    });\n\n    it(\"should validate german alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"de-DE\"],\n        valid: [\"äbc\", \"ÄBC\", \"FöÖbär\", \"Heiß\"],\n        invalid: [\"äbc1\", \"  föö  \", \"\"],\n      });\n    });\n\n    it(\"should validate hungarian alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"hu-HU\"],\n        valid: [\"árvíztűrőtükörfúrógép\", \"ÁRVÍZTŰRŐTÜKÖRFÚRÓGÉP\"],\n        invalid: [\"äbc1\", \"  fäö  \", \"Heiß\", \"\"],\n      });\n    });\n\n    it(\"should validate portuguese alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"pt-PT\"],\n        valid: [\"palíndromo\", \"órgão\", \"qwértyúão\", \"àäãcëüïÄÏÜ\"],\n        invalid: [\"12abc\", \"Heiß\", \"Øre\", \"æøå\", \"\"],\n      });\n    });\n\n    it(\"should validate italian alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"it-IT\"],\n        valid: [\n          \"àéèìîóòù\",\n          \"correnti\",\n          \"DEFINIZIONE\",\n          \"compilazione\",\n          \"metró\",\n          \"pèsca\",\n          \"PÉSCA\",\n          \"genî\",\n        ],\n        invalid: [\"äbc123\", \"ÄBC11\", \"æøå\", \"\"],\n      });\n    });\n\n    it(\"should validate Japanese alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"ja-JP\"],\n        valid: [\n          \"あいうえお\",\n          \"がぎぐげご\",\n          \"ぁぃぅぇぉ\",\n          \"アイウエオ\",\n          \"ァィゥェ\",\n          \"アイウエオ\",\n          \"吾輩は猫である\",\n          \"臥薪嘗胆\",\n          \"新世紀エヴァンゲリオン\",\n          \"天国と地獄\",\n          \"七人の侍\",\n          \"シン・ウルトラマン\",\n        ],\n        invalid: [\"あいう123\", \"abcあいう\", \"1984\"],\n      });\n    });\n\n    it(\"should validate kazakh alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"kk-KZ\"],\n        valid: [\n          \"Сәлем\",\n          \"қанағаттандырылмағандықтарыңыздан\",\n          \"Кешіріңіз\",\n          \"Өкінішке\",\n          \"Қайталаңызшы\",\n          \"ағылшынша\",\n          \"түсінбедім\",\n        ],\n        invalid: [\"Кешіріңіз1\", \"  Кет бар  \", \"مرحبا العا\"],\n      });\n    });\n\n    it(\"should validate Vietnamese alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"vi-VN\"],\n        valid: [\"thiến\", \"nghiêng\", \"xin\", \"chào\", \"thế\", \"giới\"],\n        invalid: [\"thầy3\", \"Ba gà\", \"\"],\n      });\n    });\n\n    it(\"should validate arabic alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"ar\"],\n        valid: [\"أبت\", \"اَبِتَثّجً\"],\n        invalid: [\n          \"١٢٣أبت\",\n          \"١٢٣\",\n          \"abc1\",\n          \"  foo  \",\n          \"\",\n          \"ÄBC\",\n          \"FÜübar\",\n          \"Jön\",\n          \"Heiß\",\n        ],\n      });\n    });\n\n    it(\"should validate farsi alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"fa-IR\"],\n        valid: [\"پدر\", \"مادر\", \"برادر\", \"خواهر\"],\n        invalid: [\n          \"فارسی۱۲۳\",\n          \"۱۶۴\",\n          \"abc1\",\n          \"  foo  \",\n          \"\",\n          \"ÄBC\",\n          \"FÜübar\",\n          \"Jön\",\n          \"Heiß\",\n        ],\n      });\n    });\n\n    it(\"should validate finnish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"fi-FI\"],\n        valid: [\"äiti\", \"Öljy\", \"Åke\", \"testÖ\"],\n        invalid: [\"AİıÖöÇ窺ĞğÜüZ\", \"äöå123\", \"\"],\n      });\n    });\n\n    it(\"should validate kurdish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"ku-IQ\"],\n        valid: [\"ئؤڤگێ\", \"کوردستان\"],\n        invalid: [\n          \"ئؤڤگێ١٢٣\",\n          \"١٢٣\",\n          \"abc1\",\n          \"  foo  \",\n          \"\",\n          \"ÄBC\",\n          \"FÜübar\",\n          \"Jön\",\n          \"Heiß\",\n        ],\n      });\n    });\n\n    it(\"should validate norwegian alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"nb-NO\"],\n        valid: [\"aøå\", \"Ære\", \"Øre\", \"Åre\"],\n        invalid: [\"äbc123\", \"ÄBC11\", \"\"],\n      });\n    });\n\n    it(\"should validate polish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"pl-PL\"],\n        valid: [\n          \"kreską\",\n          \"zamknięte\",\n          \"zwykłe\",\n          \"kropką\",\n          \"przyjęły\",\n          \"święty\",\n          \"Pozwól\",\n        ],\n        invalid: [\"12řiď \", \"blé!!\", \"föö!2!\"],\n      });\n    });\n\n    it(\"should validate serbian cyrillic alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"sr-RS\"],\n        valid: [\"ШћжЂљЕ\", \"ЧПСТЋЏ\"],\n        invalid: [\"řiď \", \"blé33!!\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate serbian latin alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"sr-RS@latin\"],\n        valid: [\"ŠAabčšđćž\", \"ŠATROĆčđš\"],\n        invalid: [\"12řiď \", \"blé!!\", \"föö!2!\"],\n      });\n    });\n\n    it(\"should validate spanish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"es-ES\"],\n        valid: [\"ábcó\", \"ÁBCÓ\", \"dormís\", \"volvés\", \"español\"],\n        invalid: [\"äca \", \"abcß\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate swedish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"sv-SE\"],\n        valid: [\"religiös\", \"stjäla\", \"västgöte\", \"Åre\"],\n        invalid: [\"AİıÖöÇ窺ĞğÜüZ\", \"religiös23\", \"\"],\n      });\n    });\n\n    it(\"should validate defined arabic locales alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"ar-SY\"],\n        valid: [\"أبت\", \"اَبِتَثّجً\"],\n        invalid: [\n          \"١٢٣أبت\",\n          \"١٢٣\",\n          \"abc1\",\n          \"  foo  \",\n          \"\",\n          \"ÄBC\",\n          \"FÜübar\",\n          \"Jön\",\n          \"Heiß\",\n        ],\n      });\n    });\n\n    it(\"should validate turkish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"tr-TR\"],\n        valid: [\"AİıÖöÇ窺ĞğÜüZ\"],\n        invalid: [\n          \"0AİıÖöÇ窺ĞğÜüZ1\",\n          \"  AİıÖöÇ窺ĞğÜüZ  \",\n          \"abc1\",\n          \"  foo  \",\n          \"\",\n          \"ÄBC\",\n          \"Heiß\",\n        ],\n      });\n    });\n\n    it(\"should validate urkrainian alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"uk-UA\"],\n        valid: [\"АБВГҐДЕЄЖЗИIЇЙКЛМНОПРСТУФХЦШЩЬЮЯ\"],\n        invalid: [\n          \"0AİıÖöÇ窺ĞğÜüZ1\",\n          \"  AİıÖöÇ窺ĞğÜüZ  \",\n          \"abc1\",\n          \"  foo  \",\n          \"\",\n          \"ÄBC\",\n          \"Heiß\",\n          \"ЫыЪъЭэ\",\n        ],\n      });\n    });\n\n    it(\"should validate greek alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"el-GR\"],\n        valid: [\n          \"αβγδεζηθικλμνξοπρςστυφχψω\",\n          \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ\",\n          \"άέήίΰϊϋόύώ\",\n          \"ΆΈΉΊΪΫΎΏ\",\n        ],\n        invalid: [\n          \"0AİıÖöÇ窺ĞğÜüZ1\",\n          \"  AİıÖöÇ窺ĞğÜüZ  \",\n          \"ÄBC\",\n          \"Heiß\",\n          \"ЫыЪъЭэ\",\n          \"120\",\n          \"jαckγ\",\n        ],\n      });\n    });\n\n    it(\"should validate Hebrew alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"he\"],\n        valid: [\"בדיקה\", \"שלום\"],\n        invalid: [\"בדיקה123\", \"  foo  \", \"abc1\", \"\"],\n      });\n    });\n\n    it(\"should validate Hindi alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"hi-IN\"],\n        valid: [\n          \"अतअपनाअपनीअपनेअभीअंदरआदिआपइत्यादिइनइनकाइन्हींइन्हेंइन्होंइसइसकाइसकीइसकेइसमेंइसीइसेउनउनकाउनकीउनकेउनकोउन्हींउन्हेंउन्होंउसउसकेउसीउसेएकएवंएसऐसेऔरकईकरकरताकरतेकरनाकरनेकरेंकहतेकहाकाकाफ़ीकिकितनाकिन्हेंकिन्होंकियाकिरकिसकिसीकिसेकीकुछकुलकेकोकोईकौनकौनसागयाघरजबजहाँजाजितनाजिनजिन्हेंजिन्होंजिसजिसेजीधरजैसाजैसेजोतकतबतरहतिनतिन्हेंतिन्होंतिसतिसेतोथाथीथेदबारादियादुसरादूसरेदोद्वाराननकेनहींनानिहायतनीचेनेपरपहलेपूरापेफिरबनीबहीबहुतबादबालाबिलकुलभीभीतरमगरमानोमेमेंयदियहयहाँयहीयायिहयेरखेंरहारहेऱ्वासालिएलियेलेकिनववग़ैरहवर्गवहवहाँवहींवालेवुहवेवोसकतासकतेसबसेसभीसाथसाबुतसाभसारासेसोसंगहीहुआहुईहुएहैहैंहोहोताहोतीहोतेहोनाहोने\",\n          \"इन्हें\",\n        ],\n        invalid: [\"अत०२३४५६७८९\", \"अत 12\", \" अत \", \"abc1\", \"abc\", \"\"],\n      });\n    });\n\n    it(\"should validate persian alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"fa-IR\"],\n        valid: [\"تست\", \"عزیزم\", \"ح\"],\n        invalid: [\"تست 1\", \"  عزیزم  \", \"\"],\n      });\n    });\n\n    it(\"should validate Thai alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"th-TH\"],\n        valid: [\"สวัสดี\", \"ยินดีต้อนรับ เทสเคส\"],\n        invalid: [\"สวัสดีHi\", \"123 ยินดีต้อนรับ\", \"ยินดีต้อนรับ-๑๒๓\"],\n      });\n    });\n\n    it(\"should validate Korea alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"ko-KR\"],\n        valid: [\n          \"ㄱ\",\n          \"ㅑ\",\n          \"ㄱㄴㄷㅏㅕ\",\n          \"세종대왕\",\n          \"나랏말싸미듕귁에달아문자와로서르사맛디아니할쎄\",\n        ],\n        invalid: [\n          \"abc\",\n          \"123\",\n          \"흥선대원군 문호개방\",\n          \"1592년임진왜란\",\n          \"대한민국!\",\n        ],\n      });\n    });\n\n    it(\"should validate Sinhala alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"si-LK\"],\n        valid: [\"චතුර\", \"කචටදබ\", \"ඎඏදාෛපසුගො\"],\n        invalid: [\"ஆஐअतක\", \"කචට 12\", \" ඎ \", \"abc1\", \"abc\", \"\"],\n      });\n    });\n\n    it(\"should validate Esperanto alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"eo\"],\n        valid: [\n          \"saluton\",\n          \"eĥoŝanĝoĉiuĵaŭde\",\n          \"EĤOŜANĜOĈIUĴAŬDE\",\n          \"Esperanto\",\n          \"LaŭLudovikoZamenhofBongustasFreŝaĈeĥaManĝaĵoKunSpicoj\",\n        ],\n        invalid: [\"qwxyz\", \"1887\", \"qwxyz 1887\"],\n      });\n    });\n\n    it(\"should error on invalid locale\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"is-NOT\"],\n        error: [\"abc\", \"ABC\"],\n      });\n    });\n\n    it(\"should validate alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        valid: [\"abc123\", \"ABC11\"],\n        invalid: [\"abc \", \"foo!!\", \"ÄBC\", \"FÜübar\", \"Jön\"],\n      });\n    });\n\n    it(\"should validate alphanumeric string with ignored characters\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"en-US\", { ignore: \"@_- \" }], // ignore [@ space _ -]\n        valid: [\n          \"Hello@123\",\n          \"this is a valid alphaNumeric string\",\n          \"En-US @ alpha_numeric\",\n        ],\n        invalid: [\"In*Valid\", \"hello$123\", \"{invalid}\"],\n      });\n\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"en-US\", { ignore: /[\\s/-]/g }], // ignore [space -]\n        valid: [\"en-US\", \"this is a valid alphaNumeric string\"],\n        invalid: [\"INVALID$ AlphaNum Str\", \"hello@123\", \"abc*123\"],\n      });\n\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"en-US\", { ignore: 1234 }], // invalid ignore matcher (ignore should be instance of a String or RegExp)\n        error: [\"alpha\"],\n      });\n    });\n\n    it(\"should validate defined english aliases\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"en-GB\"],\n        valid: [\"abc123\", \"ABC11\"],\n        invalid: [\"abc \", \"foo!!\", \"ÄBC\", \"FÜübar\", \"Jön\"],\n      });\n    });\n\n    it(\"should validate Azerbaijani alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"az-AZ\"],\n        valid: [\"Azərbaycan\", \"Bakı\", \"abc1\", \"abcç2\", \"3kərə4kərə\"],\n        invalid: [\"  foo1  \", \"\", \"ab(cd)\", \"simvol@\", \"wəkil\"],\n      });\n    });\n\n    it(\"should validate bulgarian alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"bg-BG\"],\n        valid: [\"абв1\", \"4АБ5В6\", \"жаба\", \"яГоДа2\", \"йЮя\", \"123\"],\n        invalid: [\" \", \"789  \", \"hello000\"],\n      });\n    });\n\n    it(\"should validate Bengali alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"bn-BD\"],\n        valid: [\n          \"দ্গজ্ঞহ্রত্য১২৩\",\n          \"দ্গগফ৮৯০\",\n          \"চব৩৬৫ভবচ\",\n          \"১২৩৪\",\n          \"৩৪২৩৪দফজ্ঞদফ\",\n        ],\n        invalid: [\" \", \"১২৩  \", \"hel৩২0\"],\n      });\n    });\n\n    it(\"should validate czech alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"cs-CZ\"],\n        valid: [\"řiť123\", \"KŮŇ11\"],\n        invalid: [\"řiď \", \"blé!!\"],\n      });\n    });\n\n    it(\"should validate slovak alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"sk-SK\"],\n        valid: [\n          \"1môj\",\n          \"2ľúbím\",\n          \"3mäkčeň\",\n          \"4stĹp\",\n          \"5vŕba\",\n          \"6ňorimberk\",\n          \"7ťava\",\n          \"8žanéta\",\n          \"9Ďábelské\",\n          \"10ódy\",\n        ],\n        invalid: [\"1moj!\", \"你好世界\", \"  Привет мир  \"],\n      });\n    });\n\n    it(\"should validate danish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"da-DK\"],\n        valid: [\"ÆØÅ123\", \"Ære321\", \"321Øre\", \"123Åre\"],\n        invalid: [\"äbc123\", \"ÄBC11\", \"\"],\n      });\n    });\n\n    it(\"should validate dutch alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"nl-NL\"],\n        valid: [\"Kán123\", \"één354\", \"v4óór\", \"nú234\", \"hé54él\"],\n        invalid: [\"1äca \", \"ab3cß\", \"Øre\"],\n      });\n    });\n\n    it(\"should validate finnish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"fi-FI\"],\n        valid: [\"äiti124\", \"ÖLJY1234\", \"123Åke\", \"451åå23\"],\n        invalid: [\"AİıÖöÇ窺ĞğÜüZ\", \"foo!!\", \"\"],\n      });\n    });\n\n    it(\"should validate german alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"de-DE\"],\n        valid: [\"äbc123\", \"ÄBC11\"],\n        invalid: [\"äca \", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate hungarian alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"hu-HU\"],\n        valid: [\"0árvíztűrőtükörfúrógép123\", \"0ÁRVÍZTŰRŐTÜKÖRFÚRÓGÉP123\"],\n        invalid: [\"1időúr!\", \"äbc1\", \"  fäö  \", \"Heiß!\", \"\"],\n      });\n    });\n\n    it(\"should validate portuguese alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"pt-PT\"],\n        valid: [\"palíndromo\", \"2órgão\", \"qwértyúão9\", \"àäãcë4üïÄÏÜ\"],\n        invalid: [\"!abc\", \"Heiß\", \"Øre\", \"æøå\", \"\"],\n      });\n    });\n\n    it(\"should validate italian alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"it-IT\"],\n        valid: [\n          \"123àéèìîóòù\",\n          \"123correnti\",\n          \"DEFINIZIONE321\",\n          \"compil123azione\",\n          \"met23ró\",\n          \"pès56ca\",\n          \"PÉS45CA\",\n          \"gen45î\",\n        ],\n        invalid: [\"äbc123\", \"ÄBC11\", \"æøå\", \"\"],\n      });\n    });\n\n    it(\"should validate spanish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"es-ES\"],\n        valid: [\"ábcó123\", \"ÁBCÓ11\"],\n        invalid: [\"äca \", \"abcß\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate Vietnamese alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"vi-VN\"],\n        valid: [\"Thầy3\", \"3Gà\"],\n        invalid: [\"toang!\", \"Cậu Vàng\"],\n      });\n    });\n\n    it(\"should validate arabic alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"ar\"],\n        valid: [\"أبت123\", \"أبتَُِ١٢٣\"],\n        invalid: [\"äca \", \"abcß\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate Hindi alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"hi-IN\"],\n        valid: [\n          \"अतअपनाअपनीअपनेअभीअंदरआदिआपइत्यादिइनइनकाइन्हींइन्हेंइन्होंइसइसकाइसकीइसकेइसमेंइसीइसेउनउनकाउनकीउनकेउनकोउन्हींउन्हेंउन्होंउसउसकेउसीउसेएकएवंएसऐसेऔरकईकरकरताकरतेकरनाकरनेकरेंकहतेकहाकाकाफ़ीकिकितनाकिन्हेंकिन्होंकियाकिरकिसकिसीकिसेकीकुछकुलकेकोकोईकौनकौनसागयाघरजबजहाँजाजितनाजिनजिन्हेंजिन्होंजिसजिसेजीधरजैसाजैसेजोतकतबतरहतिनतिन्हेंतिन्होंतिसतिसेतोथाथीथेदबारादियादुसरादूसरेदोद्वाराननकेनहींनानिहायतनीचेनेपरपहलेपूरापेफिरबनीबहीबहुतबादबालाबिलकुलभीभीतरमगरमानोमेमेंयदियहयहाँयहीयायिहयेरखेंरहारहेऱ्वासालिएलियेलेकिनववग़ैरहवर्गवहवहाँवहींवालेवुहवेवोसकतासकतेसबसेसभीसाथसाबुतसाभसारासेसोसंगहीहुआहुईहुएहैहैंहोहोताहोतीहोतेहोनाहोने०२३४५६७८९\",\n          \"इन्हें४५६७८९\",\n        ],\n        invalid: [\"अत ०२३४५६७८९\", \" ३४५६७८९\", \"12 \", \" अत \", \"abc1\", \"abc\", \"\"],\n      });\n    });\n\n    it(\"should validate farsi alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"fa-IR\"],\n        valid: [\"پارسی۱۲۳\", \"۱۴۵۶\", \"مژگان9\"],\n        invalid: [\"äca \", \"abcßة\", \"föö!!\", \"٤٥٦\"],\n      });\n    });\n\n    it(\"should validate Japanese alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"ja-JP\"],\n        valid: [\n          \"あいうえお123\",\n          \"123がぎぐげご\",\n          \"ぁぃぅぇぉ\",\n          \"アイウエオ\",\n          \"ァィゥェ\",\n          \"アイウエオ\",\n          \"20世紀少年\",\n          \"華氏451度\",\n        ],\n        invalid: [\" あいう123 \", \"abcあいう\", \"生きろ!!\"],\n      });\n    });\n\n    it(\"should validate kazakh alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"kk-KZ\"],\n        valid: [\n          \"Сәлем777\",\n          \"123Бәсе\",\n          \"солай\",\n          \"Жиенсу\",\n          \"90тоқсан\",\n          \"жалғыз\",\n          \"570бердім\",\n        ],\n        invalid: [\" кешіріңіз \", \"abcағылшынша\", \"мүмкін!!\"],\n      });\n    });\n\n    it(\"should validate kurdish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"ku-IQ\"],\n        valid: [\"ئؤڤگێ١٢٣\"],\n        invalid: [\"äca \", \"abcß\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate defined arabic aliases\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"ar-SY\"],\n        valid: [\"أبت123\", \"أبتَُِ١٢٣\"],\n        invalid: [\"abc \", \"foo!!\", \"ÄBC\", \"FÜübar\", \"Jön\"],\n      });\n    });\n\n    it(\"should validate norwegian alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"nb-NO\"],\n        valid: [\"ÆØÅ123\", \"Ære321\", \"321Øre\", \"123Åre\"],\n        invalid: [\"äbc123\", \"ÄBC11\", \"\"],\n      });\n    });\n\n    it(\"should validate polish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"pl-PL\"],\n        valid: [\n          \"kre123ską\",\n          \"zam21knięte\",\n          \"zw23ykłe\",\n          \"123\",\n          \"prz23yjęły\",\n          \"świ23ęty\",\n          \"Poz1322wól\",\n        ],\n        invalid: [\"12řiď \", \"blé!!\", \"föö!2!\"],\n      });\n    });\n\n    it(\"should validate serbian cyrillic alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"sr-RS\"],\n        valid: [\"ШћжЂљЕ123\", \"ЧПСТ132ЋЏ\"],\n        invalid: [\"řiď \", \"blé!!\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate serbian latin alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"sr-RS@latin\"],\n        valid: [\"ŠAabčšđćž123\", \"ŠATRO11Ćčđš\"],\n        invalid: [\"řiď \", \"blé!!\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate swedish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"sv-SE\"],\n        valid: [\"religiös13\", \"st23jäla\", \"västgöte123\", \"123Åre\"],\n        invalid: [\"AİıÖöÇ窺ĞğÜüZ\", \"foo!!\", \"\"],\n      });\n    });\n\n    it(\"should validate turkish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"tr-TR\"],\n        valid: [\"AİıÖöÇ窺ĞğÜüZ123\"],\n        invalid: [\"AİıÖöÇ窺ĞğÜüZ \", \"foo!!\", \"ÄBC\"],\n      });\n    });\n\n    it(\"should validate urkrainian alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"uk-UA\"],\n        valid: [\"АБВГҐДЕЄЖЗИIЇЙКЛМНОПРСТУФХЦШЩЬЮЯ123\"],\n        invalid: [\"éeoc \", \"foo!!\", \"ÄBC\", \"ЫыЪъЭэ\"],\n      });\n    });\n\n    it(\"should validate greek alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"el-GR\"],\n        valid: [\n          \"αβγδεζηθικλμνξοπρςστυφχψω\",\n          \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ\",\n          \"20θ\",\n          \"1234568960\",\n        ],\n        invalid: [\n          \"0AİıÖöÇ窺ĞğÜüZ1\",\n          \"  AİıÖöÇ窺ĞğÜüZ  \",\n          \"ÄBC\",\n          \"Heiß\",\n          \"ЫыЪъЭэ\",\n          \"jαckγ\",\n        ],\n      });\n    });\n\n    it(\"should validate Hebrew alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"he\"],\n        valid: [\"אבג123\", \"שלום11\"],\n        invalid: [\"אבג \", \"לא!!\", \"abc\", \"  foo  \"],\n      });\n    });\n\n    it(\"should validate Thai alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"th-TH\"],\n        valid: [\"สวัสดี ๑๒๓\", \"ยินดีต้อนรับทั้ง ๒ คน\"],\n        invalid: [\"1.สวัสดี\", \"ยินดีต้อนรับทั้ง 2 คน\"],\n      });\n    });\n\n    it(\"should validate Korea alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"ko-KR\"],\n        valid: [\"2002\", \"훈민정음\", \"1446년훈민정음반포\"],\n        invalid: [\"2022!\", \"2019 코로나시작\", \"1.로렘입숨\"],\n      });\n    });\n\n    it(\"should validate Sinhala alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"si-LK\"],\n        valid: [\"චතුර\", \"කචට12\", \"ඎඏදාෛපසුගො2\", \"1234\"],\n        invalid: [\"ஆஐअतක\", \"කචට 12\", \" ඎ \", \"a1234\", \"abc\", \"\"],\n      });\n    });\n\n    it(\"should validate Esperanto alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"eo\"],\n        valid: [\n          \"saluton\",\n          \"eĥoŝanĝoĉiuĵaŭde0123456789\",\n          \"EĤOŜANĜOĈIUĴAŬDE0123456789\",\n          \"Esperanto1887\",\n          \"LaŭLudovikoZamenhofBongustasFreŝaĈeĥaManĝaĵoKunSpicoj\",\n        ],\n        invalid: [\"qwxyz\", \"qwxyz 1887\"],\n      });\n    });\n\n    it(\"should error on invalid locale\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"is-NOT\"],\n        error: [\"1234568960\", \"abc123\"],\n      });\n    });\n\n    it(\"should validate numeric strings\", () => {\n      test({\n        validator: \"isNumeric\",\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"123.123\",\n          \"+000000\",\n        ],\n        invalid: [\" \", \"\", \".\"],\n      });\n    });\n\n    it(\"should validate numeric strings without symbols\", () => {\n      test({\n        validator: \"isNumeric\",\n        args: [\n          {\n            no_symbols: true,\n          },\n        ],\n        valid: [\"123\", \"00123\", \"0\"],\n        invalid: [\"-0\", \"+000000\", \"\", \"+123\", \"123.123\", \"-00123\", \" \", \".\"],\n      });\n    });\n\n    it(\"should validate numeric strings with locale\", () => {\n      test({\n        validator: \"isNumeric\",\n        args: [\n          {\n            locale: \"fr-FR\",\n          },\n        ],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"123,123\",\n          \"+000000\",\n        ],\n        invalid: [\" \", \"\", \",\"],\n      });\n    });\n\n    it(\"should validate numeric strings with locale\", () => {\n      test({\n        validator: \"isNumeric\",\n        args: [\n          {\n            locale: \"fr-CA\",\n          },\n        ],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"123,123\",\n          \"+000000\",\n        ],\n        invalid: [\" \", \"\", \".\"],\n      });\n    });\n\n    it(\"should validate ports\", () => {\n      test({\n        validator: \"isPort\",\n        valid: [\"0\", \"22\", \"80\", \"443\", \"3000\", \"8080\", \"65535\"],\n        invalid: [\"\", \"-1\", \"65536\", \"0080\"],\n      });\n    });\n\n    it(\"should validate passport number\", () => {\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"AM\"],\n        valid: [\"AF0549358\"],\n        invalid: [\"A1054935\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"ID\"],\n        valid: [\"C1253473\", \"B5948378\", \"A4859472\"],\n        invalid: [\"D39481728\", \"A-3847362\", \"324132132\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"AR\"],\n        valid: [\"AAC811035\"],\n        invalid: [\"A11811035\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"AT\"],\n        valid: [\"P 1630837\", \"P 4366918\"],\n        invalid: [\"0 1630837\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"AU\"],\n        valid: [\"N0995852\", \"L4819236\"],\n        invalid: [\"1A012345\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"AZ\"],\n        valid: [\"A16175905\", \"A16175958\"],\n        invalid: [\"AZ1234584\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"BE\"],\n        valid: [\"EM000000\", \"LA080402\"],\n        invalid: [\"00123456\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"BG\"],\n        valid: [\"346395366\", \"039903356\"],\n        invalid: [\"ABC123456\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"BR\"],\n        valid: [\"FZ973689\", \"GH231233\"],\n        invalid: [\"ABX29332\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"BY\"],\n        valid: [\"MP3899901\"],\n        invalid: [\"345333454\", \"FG53334542\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"CA\"],\n        valid: [\"GA302922\", \"ZE000509\", \"A123456AB\", \"Z556378HG\"],\n        invalid: [\n          \"AB0123456\",\n          \"AZ556378H\",\n          \"556378HCX\",\n          \"556378432\",\n          \"5563784\",\n          \"#B12345FD\",\n          \"A43F12354\",\n        ],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"CH\"],\n        valid: [\"S1100409\", \"S5200073\", \"X4028791\"],\n        invalid: [\"AB123456\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"CN\"],\n        valid: [\"G25352389\", \"E00160027\", \"EA1234567\"],\n        invalid: [\n          \"K0123456\",\n          \"E-1234567\",\n          \"G.1234567\",\n          \"GA1234567\",\n          \"EI1234567\",\n          \"GO1234567\",\n        ],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"CY\"],\n        valid: [\"K00000413\"],\n        invalid: [\"K10100\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"CZ\"],\n        valid: [\"99003853\", \"42747260\"],\n        invalid: [\"012345678\", \"AB123456\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"DE\"],\n        valid: [\"C01X00T47\", \"C26VMVVC3\"],\n        invalid: [\"AS0123456\", \"A012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"DK\"],\n        valid: [\"900010172\"],\n        invalid: [\"01234567\", \"K01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"DZ\"],\n        valid: [\"855609385\", \"154472412\", \"197025599\"],\n        invalid: [\n          \"AS0123456\",\n          \"A012345678\",\n          \"0123456789\",\n          \"12345678\",\n          \"98KK54321\",\n        ],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"EE\"],\n        valid: [\"K4218285\", \"K3295867\", \"KB0167630\", \"VD0023777\"],\n        invalid: [\"K01234567\", \"KB00112233\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"ES\"],\n        valid: [\"AF238143\", \"ZAB000254\"],\n        invalid: [\"AF01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"FI\"],\n        valid: [\"XP8271602\", \"XD8500003\"],\n        invalid: [\"A01234567\", \"ABC012345\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"FR\"],\n        valid: [\"10CV28144\", \"60RF19342\", \"05RP34083\"],\n        invalid: [\"012345678\", \"AB0123456\", \"01C234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"GB\"],\n        valid: [\"925076473\", \"107182890\", \"104121156\"],\n        invalid: [\"A012345678\", \"K000000000\", \"0123456789\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"GR\"],\n        valid: [\"AE0000005\", \"AK0219304\"],\n        invalid: [\"A01234567\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"HR\"],\n        valid: [\"007007007\", \"138463188\"],\n        invalid: [\"A01234567\", \"00112233\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"HU\"],\n        valid: [\"ZA084505\", \"BA0006902\"],\n        invalid: [\"A01234567\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"IE\"],\n        valid: [\"D23145890\", \"X65097105\", \"XN0019390\"],\n        invalid: [\"XND012345\", \"0123456789\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"IN\"],\n        valid: [\"A-1234567\", \"A1234567\", \"X0019390\"],\n        invalid: [\"AB-1234567\", \"0123456789\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"IR\"],\n        valid: [\"J97634522\", \"A01234567\", \"Z11977831\"],\n        invalid: [\"A0123456\", \"A0123456Z\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"IS\"],\n        valid: [\"A2040611\", \"A1197783\"],\n        invalid: [\"K0000000\", \"01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"IT\"],\n        valid: [\"YA8335453\", \"KK0000000\"],\n        invalid: [\"01234567\", \"KAK001122\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"JM\"],\n        valid: [\"A0123456\"],\n        invalid: [\"s0123456\", \"a01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"JP\"],\n        valid: [\"NH1106002\", \"TE3180251\", \"XS1234567\"],\n        invalid: [\"X12345678\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"KR\"],\n        valid: [\"M35772699\", \"M70689098\"],\n        invalid: [\"X12345678\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"KZ\"],\n        valid: [\"A0123456\", \"b0123456\"],\n        invalid: [\"01234567\", \"bb0123456\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"LI\"],\n        valid: [\"a01234\", \"f01234\"],\n        invalid: [\"012345\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"LT\"],\n        valid: [\"20200997\", \"LB311756\"],\n        invalid: [\"LB01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"LU\"],\n        valid: [\"JCU9J4T2\", \"JC4E7L2H\"],\n        invalid: [\"JCU9J4T\", \"JC4E7L2H0\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"LV\"],\n        valid: [\"LV9000339\", \"LV4017173\"],\n        invalid: [\"LV01234567\", \"4017173LV\"],\n      });\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"LY\"],\n        valid: [\"P79JF34X\", \"RJ45H4V2\"],\n        invalid: [\"P79JF34\", \"RJ45H4V2C\", \"RJ4-H4V2\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"MT\"],\n        valid: [\"1026564\"],\n        invalid: [\"01234567\", \"MT01234\"],\n      });\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"MZ\"],\n        valid: [\"AB0808212\", \"08AB12123\"],\n        invalid: [\"1AB011241\", \"1AB01121\", \"ABAB01121\"],\n      });\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"MY\"],\n        valid: [\"A00000000\", \"H12345678\", \"K43143233\"],\n        invalid: [\"A1234567\", \"C01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"MX\"],\n        valid: [\"43986369222\", \"01234567890\"],\n        invalid: [\"ABC34567890\", \"34567890\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"NL\"],\n        valid: [\"XTR110131\", \"XR1001R58\"],\n        invalid: [\"XTR11013R\", \"XR1001R58A\"],\n      });\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"PK\"],\n        valid: [\"QZ1791293\", \"XR1001458\"],\n        invalid: [\"XTR11013R\", \"XR1001R58A\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"PH\"],\n        valid: [\"X123456\", \"XY123456\", \"XY1234567\", \"X1234567Y\"],\n        invalid: [\"XY12345\", \"X12345Z\", \"XY12345Z\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"NZ\"],\n        valid: [\n          \"Lf012345\",\n          \"La012345\",\n          \"Ld012345\",\n          \"Lh012345\",\n          \"ea012345\",\n          \"ep012345\",\n          \"n012345\",\n        ],\n        invalid: [\"Lp012345\", \"nd012345\", \"ed012345\", \"eh012345\", \"ef012345\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"PL\"],\n        valid: [\"ZS 0000177\", \"AN 3000011\"],\n        invalid: [\"A1 0000177\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"PT\"],\n        valid: [\"I700044\", \"K453286\"],\n        invalid: [\"0700044\", \"K4532861\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"RO\"],\n        valid: [\"05485968\", \"040005646\"],\n        invalid: [\"R05485968\", \"0511060461\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"RU\"],\n        valid: [\"2 32 636829\", \"012 345321\", \"439863692\"],\n        invalid: [\n          \"A 2R YU46J0\",\n          \"01A 3D5321\",\n          \"SF233D53T\",\n          \"12345678\",\n          \"1234567890\",\n        ],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"SE\"],\n        valid: [\"59000001\", \"56702928\"],\n        invalid: [\"SE012345\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"SL\"],\n        valid: [\"PB0036440\", \"PB1390281\"],\n        invalid: [\"SL0123456\", \"P01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"SK\"],\n        valid: [\"P0000000\"],\n        invalid: [\"SK012345\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"TH\"],\n        valid: [\"A123456\", \"B1234567\", \"CD123456\", \"EF1234567\"],\n        invalid: [\"123456\", \"1234567\", \"010485371AA\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"TR\"],\n        valid: [\"U 06764100\", \"U 01048537\"],\n        invalid: [\"06764100U\", \"010485371\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"UA\"],\n        valid: [\"EH345655\", \"EK000001\", \"AP841503\"],\n        invalid: [\"01234567\", \"012345EH\", \"A012345P\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"US\"],\n        valid: [\"790369937\", \"340007237\", \"A90583942\", \"E00007734\"],\n        invalid: [\n          \"US0123456\",\n          \"0123456US\",\n          \"7903699371\",\n          \"90583942\",\n          \"E000077341\",\n        ],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"ZA\"],\n        valid: [\"T12345678\", \"A12345678\", \"M12345678\", \"D12345678\"],\n        invalid: [\"123456789\", \"Z12345678\"],\n      });\n    });\n\n    it(\"should validate decimal numbers\", () => {\n      test({\n        validator: \"isDecimal\",\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0.01\",\n          \".1\",\n          \"1.0\",\n          \"-.25\",\n          \"-0\",\n          \"0.0000000000001\",\n        ],\n        invalid: [\n          \"0,01\",\n          \",1\",\n          \"1,0\",\n          \"-,25\",\n          \"0,0000000000001\",\n          \"0٫01\",\n          \"٫1\",\n          \"1٫0\",\n          \"-٫25\",\n          \"0٫0000000000001\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: \"en-AU\" }],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0.01\",\n          \".1\",\n          \"1.0\",\n          \"-.25\",\n          \"-0\",\n          \"0.0000000000001\",\n        ],\n        invalid: [\n          \"0,01\",\n          \",1\",\n          \"1,0\",\n          \"-,25\",\n          \"0,0000000000001\",\n          \"0٫01\",\n          \"٫1\",\n          \"1٫0\",\n          \"-٫25\",\n          \"0٫0000000000001\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: [\"bg-BG\"] }],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0,01\",\n          \",1\",\n          \"1,0\",\n          \"-,25\",\n          \"-0\",\n          \"0,0000000000001\",\n        ],\n        invalid: [\n          \"0.0000000000001\",\n          \"0.01\",\n          \".1\",\n          \"1.0\",\n          \"-.25\",\n          \"0٫01\",\n          \"٫1\",\n          \"1٫0\",\n          \"-٫25\",\n          \"0٫0000000000001\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: [\"cs-CZ\"] }],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0,01\",\n          \",1\",\n          \"1,0\",\n          \"-,25\",\n          \"-0\",\n          \"0,0000000000001\",\n        ],\n        invalid: [\n          \"0.0000000000001\",\n          \"0.01\",\n          \".1\",\n          \"1.0\",\n          \"-.25\",\n          \"0٫01\",\n          \"٫1\",\n          \"1٫0\",\n          \"-٫25\",\n          \"0٫0000000000001\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: [\"ar-JO\"] }],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0٫01\",\n          \"٫1\",\n          \"1٫0\",\n          \"-٫25\",\n          \"-0\",\n          \"0٫0000000000001\",\n        ],\n        invalid: [\n          \"0,0000000000001\",\n          \"0,01\",\n          \",1\",\n          \"1,0\",\n          \"-,25\",\n          \"0.0000000000001\",\n          \"0.01\",\n          \".1\",\n          \"1.0\",\n          \"-.25\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: [\"ar-EG\"] }],\n        valid: [\"0.01\"],\n        invalid: [\"0,01\"],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: [\"en-ZM\"] }],\n        valid: [\"0,01\"],\n        invalid: [\"0.01\"],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ force_decimal: true }],\n        valid: [\"0.01\", \".1\", \"1.0\", \"-.25\", \"0.0000000000001\"],\n        invalid: [\n          \"-0\",\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0,0000000000001\",\n          \"0,01\",\n          \",1\",\n          \"1,0\",\n          \"-,25\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ decimal_digits: \"2,3\" }],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0.01\",\n          \"1.043\",\n          \".15\",\n          \"-.255\",\n          \"-0\",\n        ],\n        invalid: [\n          \"0.0000000000001\",\n          \"0.0\",\n          \".1\",\n          \"1.0\",\n          \"-.2564\",\n          \"0.0\",\n          \"٫1\",\n          \"1٫0\",\n          \"-٫25\",\n          \"0٫0000000000001\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n    });\n\n    it(\"should error on invalid locale\", () => {\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: [\"is-NOT\"] }],\n        error: [\"123\", \"0.01\", \"0,01\"],\n      });\n    });\n\n    it(\"should validate lowercase strings\", () => {\n      test({\n        validator: \"isLowercase\",\n        valid: [\"abc\", \"abc123\", \"this is lowercase.\", \"tr竪s 端ber\"],\n        invalid: [\"fooBar\", \"123A\"],\n      });\n    });\n\n    it(\"should validate imei strings\", () => {\n      test({\n        validator: \"isIMEI\",\n        valid: [\n          \"352099001761481\",\n          \"868932036356090\",\n          \"490154203237518\",\n          \"546918475942169\",\n          \"998227667144730\",\n          \"532729766805999\",\n        ],\n        invalid: [\"490154203237517\", \"3568680000414120\", \"3520990017614823\"],\n      });\n    });\n\n    it(\"should validate imei strings with hyphens\", () => {\n      test({\n        validator: \"isIMEI\",\n        args: [{ allow_hyphens: true }],\n        valid: [\n          \"35-209900-176148-1\",\n          \"86-893203-635609-0\",\n          \"49-015420-323751-8\",\n          \"54-691847-594216-9\",\n          \"99-822766-714473-0\",\n          \"53-272976-680599-9\",\n        ],\n        invalid: [\n          \"49-015420-323751-7\",\n          \"35-686800-0041412-0\",\n          \"35-209900-1761482-3\",\n        ],\n      });\n    });\n\n    it(\"should validate uppercase strings\", () => {\n      test({\n        validator: \"isUppercase\",\n        valid: [\"ABC\", \"ABC123\", \"ALL CAPS IS FUN.\", \"   .\"],\n        invalid: [\"fooBar\", \"123abc\"],\n      });\n    });\n\n    it(\"should validate integers\", () => {\n      test({\n        validator: \"isInt\",\n        valid: [\"13\", \"123\", \"0\", \"123\", \"-0\", \"+1\", \"01\", \"-01\", \"000\"],\n        invalid: [\"100e10\", \"123.123\", \"   \", \"\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [{ allow_leading_zeroes: false }],\n        valid: [\"13\", \"123\", \"0\", \"123\", \"-0\", \"+1\"],\n        invalid: [\"01\", \"-01\", \"000\", \"100e10\", \"123.123\", \"   \", \"\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [{ allow_leading_zeroes: true }],\n        valid: [\n          \"13\",\n          \"123\",\n          \"0\",\n          \"123\",\n          \"-0\",\n          \"+1\",\n          \"01\",\n          \"-01\",\n          \"000\",\n          \"-000\",\n          \"+000\",\n        ],\n        invalid: [\"100e10\", \"123.123\", \"   \", \"\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            min: 10,\n          },\n        ],\n        valid: [\"15\", \"80\", \"99\"],\n        invalid: [\"9\", \"6\", \"3.2\", \"a\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            min: 10,\n            max: 15,\n          },\n        ],\n        valid: [\"15\", \"11\", \"13\"],\n        invalid: [\"9\", \"2\", \"17\", \"3.2\", \"33\", \"a\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            gt: 10,\n            lt: 15,\n          },\n        ],\n        valid: [\"14\", \"11\", \"13\"],\n        invalid: [\"10\", \"15\", \"17\", \"3.2\", \"33\", \"a\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            min: undefined,\n            max: undefined,\n          },\n        ],\n        valid: [\"143\", \"15\", \"767777575\"],\n        invalid: [\"10.4\", \"bar\", \"10a\", \"c44\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            gt: undefined,\n            lt: undefined,\n          },\n        ],\n        valid: [\"289373466\", \"55\", \"989\"],\n        invalid: [\"10.4\", \"baz\", \"66a\", \"c21\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            gt: null,\n            max: null,\n          },\n        ],\n        valid: [\"1\", \"886\", \"84512345\"],\n        invalid: [\"10.4\", \"h\", \"1.2\", \"+\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            lt: null,\n            min: null,\n          },\n        ],\n        valid: [\"289373466\", \"55\", \"989\"],\n        invalid: [\",\", \"+11212+\", \"fail\", \"111987234i\"],\n      });\n    });\n\n    it(\"should validate floats\", () => {\n      test({\n        validator: \"isFloat\",\n        valid: [\n          \"123\",\n          \"123.\",\n          \"123.123\",\n          \"-123.123\",\n          \"-0.123\",\n          \"+0.123\",\n          \"0.123\",\n          \".0\",\n          \"-.123\",\n          \"+.123\",\n          \"01.123\",\n          \"-0.22250738585072011e-307\",\n        ],\n        invalid: [\n          \"+\",\n          \"-\",\n          \"  \",\n          \"\",\n          \".\",\n          \",\",\n          \"foo\",\n          \"20.foo\",\n          \"2020-01-06T14:31:00.135Z\",\n        ],\n      });\n\n      test({\n        validator: \"isFloat\",\n        args: [{ locale: \"en-AU\" }],\n        valid: [\n          \"123\",\n          \"123.\",\n          \"123.123\",\n          \"-123.123\",\n          \"-0.123\",\n          \"+0.123\",\n          \"0.123\",\n          \".0\",\n          \"-.123\",\n          \"+.123\",\n          \"01.123\",\n          \"-0.22250738585072011e-307\",\n        ],\n        invalid: [\"123٫123\", \"123,123\", \"  \", \"\", \".\", \"foo\"],\n      });\n\n      test({\n        validator: \"isFloat\",\n        args: [{ locale: \"de-DE\" }],\n        valid: [\n          \"123\",\n          \"123,\",\n          \"123,123\",\n          \"-123,123\",\n          \"-0,123\",\n          \"+0,123\",\n          \"0,123\",\n          \",0\",\n          \"-,123\",\n          \"+,123\",\n          \"01,123\",\n          \"-0,22250738585072011e-307\",\n        ],\n        invalid: [\"123.123\", \"123٫123\", \"  \", \"\", \".\", \"foo\"],\n      });\n\n      test({\n        validator: \"isFloat\",\n        args: [{ locale: \"ar-JO\" }],\n        valid: [\n          \"123\",\n          \"123٫\",\n          \"123٫123\",\n          \"-123٫123\",\n          \"-0٫123\",\n          \"+0٫123\",\n          \"0٫123\",\n          \"٫0\",\n          \"-٫123\",\n          \"+٫123\",\n          \"01٫123\",\n          \"-0٫22250738585072011e-307\",\n        ],\n        invalid: [\"123,123\", \"123.123\", \"  \", \"\", \".\", \"foo\"],\n      });\n\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            min: 3.7,\n          },\n        ],\n        valid: [\"3.888\", \"3.92\", \"4.5\", \"50\", \"3.7\", \"3.71\"],\n        invalid: [\"3.6\", \"3.69\", \"3\", \"1.5\", \"a\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            min: 0.1,\n            max: 1.0,\n          },\n        ],\n        valid: [\"0.1\", \"1.0\", \"0.15\", \"0.33\", \"0.57\", \"0.7\"],\n        invalid: [\"0\", \"0.0\", \"a\", \"1.3\", \"0.05\", \"5\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            gt: -5.5,\n            lt: 10,\n          },\n        ],\n        valid: [\"9.9\", \"1.0\", \"0\", \"-1\", \"7\", \"-5.4\"],\n        invalid: [\"10\", \"-5.5\", \"a\", \"-20.3\", \"20e3\", \"10.00001\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            min: -5.5,\n            max: 10,\n            gt: -5.5,\n            lt: 10,\n          },\n        ],\n        valid: [\"9.99999\", \"-5.499999\"],\n        invalid: [\"10\", \"-5.5\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            locale: \"de-DE\",\n            min: 3.1,\n          },\n        ],\n        valid: [\"123\", \"123,\", \"123,123\", \"3,1\", \"3,100001\"],\n        invalid: [\n          \"3,09\",\n          \"-,123\",\n          \"+,123\",\n          \"01,123\",\n          \"-0,22250738585072011e-307\",\n          \"-123,123\",\n          \"-0,123\",\n          \"+0,123\",\n          \"0,123\",\n          \",0\",\n          \"123.123\",\n          \"123٫123\",\n          \"  \",\n          \"\",\n          \".\",\n          \"foo\",\n        ],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            min: undefined,\n            max: undefined,\n          },\n        ],\n        valid: [\"123\", \"123.\", \"123.123\", \"-767.767\", \"+111.111\"],\n        invalid: [\"ab565\", \"-,123\", \"+,123\", \"7866.t\", \"123,123\", \"123,\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            gt: undefined,\n            lt: undefined,\n          },\n        ],\n        valid: [\"14.34343\", \"11.1\", \"456\"],\n        invalid: [\"ab565\", \"-,123\", \"+,123\", \"7866.t\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            locale: \"ar\",\n            gt: null,\n            max: null,\n          },\n        ],\n        valid: [\"13324٫\", \"12321\", \"444٫83874\"],\n        invalid: [\"55.55.55\", \"1;23\", \"+-123\", \"1111111l1\", \"3.3\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            locale: \"ru-RU\",\n            lt: null,\n            min: null,\n          },\n        ],\n        valid: [\"11231554,34343\", \"11,1\", \"456\", \",311\"],\n        invalid: [\"ab565\", \"-.123\", \"+.123\", \"7866.t\", \"22.3\"],\n      });\n    });\n\n    it(\"should validate hexadecimal strings\", () => {\n      test({\n        validator: \"isHexadecimal\",\n        valid: [\n          \"deadBEEF\",\n          \"ff0044\",\n          \"0xff0044\",\n          \"0XfF0044\",\n          \"0x0123456789abcDEF\",\n          \"0X0123456789abcDEF\",\n          \"0hfedCBA9876543210\",\n          \"0HfedCBA9876543210\",\n          \"0123456789abcDEF\",\n        ],\n        invalid: [\n          \"abcdefg\",\n          \"\",\n          \"..\",\n          \"0xa2h\",\n          \"0xa20x\",\n          \"0x0123456789abcDEFq\",\n          \"0hfedCBA9876543210q\",\n          \"01234q56789abcDEF\",\n        ],\n      });\n    });\n\n    it(\"should validate octal strings\", () => {\n      test({\n        validator: \"isOctal\",\n        valid: [\"076543210\", \"0o01234567\"],\n        invalid: [\n          \"abcdefg\",\n          \"012345678\",\n          \"012345670c\",\n          \"00c12345670c\",\n          \"\",\n          \"..\",\n        ],\n      });\n    });\n\n    it(\"should validate hexadecimal color strings\", () => {\n      test({\n        validator: \"isHexColor\",\n        valid: [\"#ff0000ff\", \"#ff0034\", \"#CCCCCC\", \"0f38\", \"fff\", \"#f00\"],\n        invalid: [\"#ff\", \"fff0a\", \"#ff12FG\"],\n      });\n    });\n\n    it(\"should validate HSL color strings\", () => {\n      test({\n        validator: \"isHSL\",\n        valid: [\n          \"hsl(360,0000000000100%,000000100%)\",\n          \"hsl(000010, 00000000001%, 00000040%)\",\n          \"HSL(00000,0000000000100%,000000100%)\",\n          \"hsL(0, 0%, 0%)\",\n          \"hSl(  360  , 100%  , 100%   )\",\n          \"Hsl(  00150  , 000099%  , 01%   )\",\n          \"hsl(01080, 03%, 4%)\",\n          \"hsl(-540, 03%, 4%)\",\n          \"hsla(+540, 03%, 4%)\",\n          \"hsla(+540, 03%, 4%, 500)\",\n          \"hsl(+540deg, 03%, 4%, 500)\",\n          \"hsl(+540gRaD, 03%, 4%, 500)\",\n          \"hsl(+540.01e-98rad, 03%, 4%, 500)\",\n          \"hsl(-540.5turn, 03%, 4%, 500)\",\n          \"hsl(+540, 03%, 4%, 500e-01)\",\n          \"hsl(+540, 03%, 4%, 500e+80)\",\n          \"hsl(4.71239rad, 60%, 70%)\",\n          \"hsl(270deg, 60%, 70%)\",\n          \"hsl(200, +.1%, 62%, 1)\",\n          \"hsl(270 60% 70%)\",\n          \"hsl(200, +.1e-9%, 62e10%, 1)\",\n          \"hsl(.75turn, 60%, 70%)\",\n          // 'hsl(200grad+.1%62%/1)', //supposed to pass, but need to handle delimiters\n          \"hsl(200grad +.1% 62% / 1)\",\n          \"hsl(270, 60%, 50%, .15)\",\n          \"hsl(270, 60%, 50%, 15%)\",\n          \"hsl(270 60% 50% / .15)\",\n          \"hsl(270 60% 50% / 15%)\",\n        ],\n        invalid: [\n          \"hsl (360,0000000000100%,000000100%)\",\n          \"hsl(0260, 100 %, 100%)\",\n          \"hsl(0160, 100%, 100%, 100 %)\",\n          \"hsl(-0160, 100%, 100a)\",\n          \"hsl(-0160, 100%, 100)\",\n          \"hsl(-0160 100%, 100%, )\",\n          \"hsl(270 deg, 60%, 70%)\",\n          \"hsl( deg, 60%, 70%)\",\n          \"hsl(, 60%, 70%)\",\n          \"hsl(3000deg, 70%)\",\n        ],\n      });\n    });\n\n    it(\"should validate rgb color strings\", () => {\n      test({\n        validator: \"isRgbColor\",\n        valid: [\n          \"rgb(0,0,0)\",\n          \"rgb(255,255,255)\",\n          \"rgba(0,0,0,0)\",\n          \"rgba(255,255,255,1)\",\n          \"rgba(255,255,255,.1)\",\n          \"rgba(255,255,255,0.1)\",\n          \"rgba(255,255,255,.12)\",\n          \"rgb(5%,5%,5%)\",\n          \"rgba(5%,5%,5%,.3)\",\n          \"rgba(5%,5%,5%,.32)\",\n        ],\n        invalid: [\n          \"rgb(0,0,0,)\",\n          \"rgb(0,0,)\",\n          \"rgb(0,0,256)\",\n          \"rgb()\",\n          \"rgba(0,0,0)\",\n          \"rgba(255,255,255,2)\",\n          \"rgba(255,255,255,.123)\",\n          \"rgba(255,255,256,0.1)\",\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"rgba(3,3,3%,.3)\",\n          \"rgba(5%,5%,5%,.321)\",\n          \"rgb(101%,101%,101%)\",\n          \"rgba(3%,3%,101%,0.3)\",\n          \"rgb(101%,101%,101%) additional invalid string part\",\n          \"rgba(3%,3%,101%,0.3) additional invalid string part\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"r         g    ba(   0,         251,       222     )\",\n          \"rg ba(0, 251, 22, 0.5)\",\n          \"rgb( 255,255 ,255)\",\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgb(5%, 5%, 5%)\",\n        ],\n      });\n\n      // test empty options object\n      test({\n        validator: \"isRgbColor\",\n        args: [{}],\n        valid: [\n          \"rgb(0,0,0)\",\n          \"rgb(255,255,255)\",\n          \"rgba(0,0,0,0)\",\n          \"rgba(255,255,255,1)\",\n          \"rgba(255,255,255,.1)\",\n          \"rgba(255,255,255,.12)\",\n          \"rgba(255,255,255,0.1)\",\n          \"rgb(5%,5%,5%)\",\n          \"rgba(5%,5%,5%,.3)\",\n        ],\n        invalid: [\n          \"rgb(0,0,0,)\",\n          \"rgb(0,0,)\",\n          \"rgb(0,0,256)\",\n          \"rgb()\",\n          \"rgba(0,0,0)\",\n          \"rgba(255,255,255,2)\",\n          \"rgba(255,255,256,0.1)\",\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"rgba(3,3,3%,.3)\",\n          \"rgb(101%,101%,101%)\",\n          \"rgba(3%,3%,101%,0.3)\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"r         g    ba(   0,         251,       222     )\",\n          \"rg ba(0, 251, 22, 0.5)\",\n          \"rgb( 255,255 ,255)\",\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgb(5%, 5%, 5%)\",\n        ],\n      });\n      // test where includePercentValues is given as false\n      test({\n        validator: \"isRgbColor\",\n        args: [false],\n        valid: [\"rgb(5,5,5)\", \"rgba(5,5,5,.3)\"],\n        invalid: [\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"r         g    ba(   0,         251,       222     )\",\n        ],\n      });\n\n      // test where includePercentValues is given as false as part of options object\n      test({\n        validator: \"isRgbColor\",\n        args: [{ includePercentValues: false }],\n        valid: [\"rgb(5,5,5)\", \"rgba(5,5,5,.3)\"],\n        invalid: [\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"rgba(255, 255, 255 ,0.2)\",\n          \"r         g    ba(   0,         251,       222     )\",\n        ],\n      });\n\n      // test where include percent is true explciitly\n      test({\n        validator: \"isRgbColor\",\n        args: [true],\n        valid: [\n          \"rgb(5,5,5)\",\n          \"rgba(5,5,5,.3)\",\n          \"rgb(0,0,0)\",\n          \"rgb(255,255,255)\",\n          \"rgba(0,0,0,0)\",\n          \"rgba(255,255,255,1)\",\n          \"rgba(255,255,255,.1)\",\n          \"rgba(255,255,255,.12)\",\n          \"rgba(255,255,255,0.1)\",\n          \"rgb(5%,5%,5%)\",\n          \"rgba(5%,5%,5%,.3)\",\n          \"rgb(5%,5%,5%)\",\n          \"rgba(255,255,255,0.5)\",\n        ],\n        invalid: [\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgb(5%, 5%, 5%)\",\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"r         g    ba(   0,         251,       222     )\",\n          \"rgb(0,0,0,)\",\n          \"rgb(0,0,)\",\n          \"rgb(0,0,256)\",\n          \"rgb()\",\n          \"rgba(0,0,0)\",\n          \"rgba(255,255,255,2)\",\n          \"rgba(255,255,256,0.1)\",\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"rgba(3,3,3%,.3)\",\n          \"rgb(101%,101%,101%)\",\n          \"rgba(3%,3%,101%,0.3)\",\n        ],\n      });\n\n      // test where percent value is false and allowSpaces is true as part of options object\n      test({\n        validator: \"isRgbColor\",\n        args: [{ includePercentValues: false, allowSpaces: true }],\n        valid: [\n          \"rgb(5,5,5)\",\n          \"rgba(5,5,5,.3)\",\n          \"rgba(255,255,255,0.2)\",\n          \"rgba(255, 255, 255 ,0.2)\",\n        ],\n        invalid: [\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"rgba(5% ,5%, 5%)\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"r         g    ba(   0,         251,       222     )\",\n          \"rgb(0,0,)\",\n          \"rgb()\",\n          \"rgb(4,4,5%)\",\n          \"rgb(5%,5%,5%)\",\n          \"rgba(3,3,3%,.3)\",\n          \"rgb(101%, 101%, 101%)\",\n          \"rgba(3%,3%,101%,0.3)\",\n        ],\n      });\n\n      // test where both are true as part of options object\n      test({\n        validator: \"isRgbColor\",\n        args: [{ includePercentValues: true, allowSpaces: true }],\n        valid: [\n          \"rgb(  5, 5, 5)\",\n          \"rgba(5, 5, 5, .3)\",\n          \"rgb(0, 0, 0)\",\n          \"rgb(255, 255, 255)\",\n          \"rgba(0, 0, 0, 0)\",\n          \"rgba(255, 255, 255, 1)\",\n          \"rgba(255, 255, 255, .1)\",\n          \"rgba(255, 255, 255, 0.1)\",\n          \"rgb(5% ,5% ,5%)\",\n          \"rgba(5%,5%,5%, .3)\",\n        ],\n        invalid: [\n          \"r         g    b(   0,         251,       222     )\",\n          \"rgb(4,4,5%)\",\n          \"rgb(101%,101%,101%)\",\n        ],\n      });\n\n      // test where allowSpaces is false as part of options object\n      test({\n        validator: \"isRgbColor\",\n        args: [{ includePercentValues: true, allowSpaces: false }],\n        valid: [\n          \"rgb(5,5,5)\",\n          \"rgba(5,5,5,.3)\",\n          \"rgb(0,0,0)\",\n          \"rgb(255,255,255)\",\n          \"rgba(0,0,0,0)\",\n          \"rgba(255,255,255,1)\",\n          \"rgba(255,255,255,.1)\",\n          \"rgba(255,255,255,.12)\",\n          \"rgba(255,255,255,0.1)\",\n          \"rgb(5%,5%,5%)\",\n          \"rgba(5%,5%,5%,.3)\",\n        ],\n        invalid: [\n          \"rgb( 255,255 ,255)\",\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgb(5%, 5%, 5%)\",\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"r         g    ba(   0,         251,       222     )\",\n          \"rgb(0,0,0,)\",\n          \"rgb(0,0,)\",\n          \"rgb(0,0,256)\",\n          \"rgb()\",\n          \"rgba(0,0,0)\",\n          \"rgba(255,255,255,2)\",\n          \"rgba(255,255,256,0.1)\",\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"rgba(3,3,3%,.3)\",\n          \"rgb(101%,101%,101%)\",\n          \"rgba(3%,3%,101%,0.3)\",\n        ],\n      });\n    });\n\n    it(\"should validate ISRC code strings\", () => {\n      test({\n        validator: \"isISRC\",\n        valid: [\"USAT29900609\", \"GBAYE6800011\", \"USRC15705223\", \"USCA29500702\"],\n        invalid: [\n          \"USAT2990060\",\n          \"SRC15705223\",\n          \"US-CA29500702\",\n          \"USARC15705223\",\n        ],\n      });\n    });\n\n    it(\"should validate md5 strings\", () => {\n      test({\n        validator: \"isMD5\",\n        valid: [\n          \"d94f3f016ae679c3008de268209132f2\",\n          \"751adbc511ccbe8edf23d486fa4581cd\",\n          \"88dae00e614d8f24cfd5a8b3f8002e93\",\n          \"0bf1c35032a71a14c2f719e5a14c1e96\",\n        ],\n        invalid: [\n          \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n          \"q94375dj93458w34\",\n          \"39485729348\",\n          \"%&FHKJFvk\",\n        ],\n      });\n    });\n\n    it(\"should validate hash strings\", () => {\n      [\"md5\", \"md4\", \"ripemd128\", \"tiger128\"].forEach((algorithm) => {\n        test({\n          validator: \"isHash\",\n          args: [algorithm],\n          valid: [\n            \"d94f3f016ae679c3008de268209132f2\",\n            \"751adbc511ccbe8edf23d486fa4581cd\",\n            \"88dae00e614d8f24cfd5a8b3f8002e93\",\n            \"0bf1c35032a71a14c2f719e5a14c1e96\",\n            \"d94f3F016Ae679C3008de268209132F2\",\n            \"88DAE00e614d8f24cfd5a8b3f8002E93\",\n          ],\n          invalid: [\n            \"q94375dj93458w34\",\n            \"39485729348\",\n            \"%&FHKJFvk\",\n            \"KYT0bf1c35032a71a14c2f719e5a1\",\n          ],\n        });\n      });\n\n      [\"crc32\", \"crc32b\"].forEach((algorithm) => {\n        test({\n          validator: \"isHash\",\n          args: [algorithm],\n          valid: [\n            \"d94f3f01\",\n            \"751adbc5\",\n            \"88dae00e\",\n            \"0bf1c350\",\n            \"88DAE00e\",\n            \"751aDBc5\",\n          ],\n          invalid: [\n            \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n            \"q94375dj93458w34\",\n            \"q943\",\n            \"39485729348\",\n            \"%&FHKJFvk\",\n          ],\n        });\n      });\n\n      [\"sha1\", \"tiger160\", \"ripemd160\"].forEach((algorithm) => {\n        test({\n          validator: \"isHash\",\n          args: [algorithm],\n          valid: [\n            \"3ca25ae354e192b26879f651a51d92aa8a34d8d3\",\n            \"aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d\",\n            \"beb8c3f30da46be179b8df5f5ecb5e4b10508230\",\n            \"efd5d3b190e893ed317f38da2420d63b7ae0d5ed\",\n            \"AAF4c61ddCC5e8a2dabede0f3b482cd9AEA9434D\",\n            \"3ca25AE354e192b26879f651A51d92aa8a34d8D3\",\n          ],\n          invalid: [\n            \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n            \"KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk\",\n            \"q94375dj93458w34\",\n            \"39485729348\",\n            \"%&FHKJFvk\",\n          ],\n        });\n      });\n\n      test({\n        validator: \"isHash\",\n        args: [\"sha256\"],\n        valid: [\n          \"2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824\",\n          \"1d996e033d612d9af2b44b70061ee0e868bfd14c2dd90b129e1edeb7953e7985\",\n          \"80f70bfeaed5886e33536bcfa8c05c60afef5a0e48f699a7912d5e399cdcc441\",\n          \"579282cfb65ca1f109b78536effaf621b853c9f7079664a3fbe2b519f435898c\",\n          \"2CF24dba5FB0a30e26E83b2AC5b9E29E1b161e5C1fa7425E73043362938b9824\",\n          \"80F70bFEAed5886e33536bcfa8c05c60aFEF5a0e48f699a7912d5e399cdCC441\",\n        ],\n        invalid: [\n          \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n          \"KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk\",\n          \"q94375dj93458w34\",\n          \"39485729348\",\n          \"%&FHKJFvk\",\n        ],\n      });\n      test({\n        validator: \"isHash\",\n        args: [\"sha384\"],\n        valid: [\n          \"3fed1f814d28dc5d63e313f8a601ecc4836d1662a19365cbdcf6870f6b56388850b58043f7ebf2418abb8f39c3a42e31\",\n          \"b330f4e575db6e73500bd3b805db1a84b5a034e5d21f0041d91eec85af1dfcb13e40bb1c4d36a72487e048ac6af74b58\",\n          \"bf547c3fc5841a377eb1519c2890344dbab15c40ae4150b4b34443d2212e5b04aa9d58865bf03d8ae27840fef430b891\",\n          \"fc09a3d11368386530f985dacddd026ae1e44e0e297c805c3429d50744e6237eb4417c20ffca8807b071823af13a3f65\",\n          \"3fed1f814d28dc5d63e313f8A601ecc4836d1662a19365CBDCf6870f6b56388850b58043f7ebf2418abb8f39c3a42e31\",\n          \"b330f4E575db6e73500bd3b805db1a84b5a034e5d21f0041d91EEC85af1dfcb13e40bb1c4d36a72487e048ac6af74b58\",\n        ],\n        invalid: [\n          \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n          \"KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk\",\n          \"q94375dj93458w34\",\n          \"39485729348\",\n          \"%&FHKJFvk\",\n        ],\n      });\n      test({\n        validator: \"isHash\",\n        args: [\"sha512\"],\n        valid: [\n          \"9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043\",\n          \"83c586381bf5ba94c8d9ba8b6b92beb0997d76c257708742a6c26d1b7cbb9269af92d527419d5b8475f2bb6686d2f92a6649b7f174c1d8306eb335e585ab5049\",\n          \"45bc5fa8cb45ee408c04b6269e9f1e1c17090c5ce26ffeeda2af097735b29953ce547e40ff3ad0d120e5361cc5f9cee35ea91ecd4077f3f589b4d439168f91b9\",\n          \"432ac3d29e4f18c7f604f7c3c96369a6c5c61fc09bf77880548239baffd61636d42ed374f41c261e424d20d98e320e812a6d52865be059745fdb2cb20acff0ab\",\n          \"9B71D224bd62f3785D96d46ad3ea3d73319bFBC2890CAAdae2dff72519673CA72323C3d99ba5c11d7c7ACC6e14b8c5DA0c4663475c2E5c3adef46f73bcDEC043\",\n          \"432AC3d29E4f18c7F604f7c3c96369A6C5c61fC09Bf77880548239baffd61636d42ed374f41c261e424d20d98e320e812a6d52865be059745fdb2cb20acff0ab\",\n        ],\n        invalid: [\n          \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n          \"KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk\",\n          \"q94375dj93458w34\",\n          \"39485729348\",\n          \"%&FHKJFvk\",\n        ],\n      });\n      test({\n        validator: \"isHash\",\n        args: [\"tiger192\"],\n        valid: [\n          \"6281a1f098c5e7290927ed09150d43ff3990a0fe1a48267c\",\n          \"56268f7bc269cf1bc83d3ce42e07a85632394737918f4760\",\n          \"46fc0125a148788a3ac1d649566fc04eb84a746f1a6e4fa7\",\n          \"7731ea1621ae99ea3197b94583d034fdbaa4dce31a67404a\",\n          \"6281A1f098c5e7290927ed09150d43ff3990a0fe1a48267C\",\n          \"46FC0125a148788a3AC1d649566fc04eb84A746f1a6E4fa7\",\n        ],\n        invalid: [\n          \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n          \"KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk\",\n          \"q94375dj93458w34\",\n          \"39485729348\",\n          \"%&FHKJFvk\",\n        ],\n      });\n    });\n    it(\"should validate JWT tokens\", () => {\n      test({\n        validator: \"isJWT\",\n        valid: [\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI\",\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb3JlbSI6Imlwc3VtIn0.ymiJSsMJXR6tMSr8G9usjQ15_8hKPDv_CArLhxw28MI\",\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2xvciI6InNpdCIsImFtZXQiOlsibG9yZW0iLCJpcHN1bSJdfQ.rRpe04zbWbbJjwM43VnHzAboDzszJtGrNsUxaqQ-GQ8\",\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqb2huIjp7ImFnZSI6MjUsImhlaWdodCI6MTg1fSwiamFrZSI6eyJhZ2UiOjMwLCJoZWlnaHQiOjI3MH19.YRLPARDmhGMC3BBk_OhtwwK21PIkVCqQe8ncIRPKo-E\",\n        ],\n        invalid: [\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\",\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI6MTUxNjIzOTAyMn0\",\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI6MTYxNjY1Mzg3Mn0.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tIiwiaWF0IjoxNjE2NjUzODcyLCJleHAiOjE2MTY2NTM4ODJ9.a1jLRQkO5TV5y5ERcaPAiM9Xm2gBdRjKrrCpHkGr_8M\",\n          \"$Zs.ewu.su84\",\n          \"ks64$S/9.dy$§kz.3sd73b\",\n        ],\n        error: [[], {}, null, undefined],\n      });\n    });\n\n    it(\"should validate null strings\", () => {\n      test({\n        validator: \"isEmpty\",\n        valid: [\"\"],\n        invalid: [\" \", \"foo\", \"3\"],\n      });\n      test({\n        validator: \"isEmpty\",\n        args: [{ ignore_whitespace: false }],\n        valid: [\"\"],\n        invalid: [\" \", \"foo\", \"3\"],\n      });\n      test({\n        validator: \"isEmpty\",\n        args: [{ ignore_whitespace: true }],\n        valid: [\"\", \" \"],\n        invalid: [\"foo\", \"3\"],\n      });\n    });\n\n    it(\"should validate strings against an expected value\", () => {\n      test({\n        validator: \"equals\",\n        args: [\"abc\"],\n        valid: [\"abc\"],\n        invalid: [\"Abc\", \"123\"],\n      });\n    });\n\n    it(\"should validate strings contain another string\", () => {\n      test({\n        validator: \"contains\",\n        args: [\"foo\"],\n        valid: [\"foo\", \"foobar\", \"bazfoo\"],\n        invalid: [\"bar\", \"fobar\"],\n      });\n\n      test({\n        validator: \"contains\",\n        args: [\n          \"foo\",\n          {\n            ignoreCase: true,\n          },\n        ],\n        valid: [\"Foo\", \"FOObar\", \"BAZfoo\"],\n        invalid: [\"bar\", \"fobar\", \"baxoof\"],\n      });\n\n      test({\n        validator: \"contains\",\n        args: [\n          \"foo\",\n          {\n            minOccurrences: 2,\n          },\n        ],\n        valid: [\"foofoofoo\", \"12foo124foo\", \"fofooofoooofoooo\", \"foo1foo\"],\n        invalid: [\"foo\", \"foobar\", \"Fooofoo\", \"foofo\"],\n      });\n    });\n\n    it(\"should validate strings against a pattern\", () => {\n      test({\n        validator: \"matches\",\n        args: [/abc/],\n        valid: [\"abc\", \"abcdef\", \"123abc\"],\n        invalid: [\"acb\", \"Abc\"],\n      });\n      test({\n        validator: \"matches\",\n        args: [\"abc\"],\n        valid: [\"abc\", \"abcdef\", \"123abc\"],\n        invalid: [\"acb\", \"Abc\"],\n      });\n      test({\n        validator: \"matches\",\n        args: [\"abc\", \"i\"],\n        valid: [\"abc\", \"abcdef\", \"123abc\", \"AbC\"],\n        invalid: [\"acb\"],\n      });\n    });\n\n    it(\"should validate strings by length (deprecated api)\", () => {\n      test({\n        validator: \"isLength\",\n        args: [2],\n        valid: [\"abc\", \"de\", \"abcd\"],\n        invalid: [\"\", \"a\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [2, 3],\n        valid: [\"abc\", \"de\"],\n        invalid: [\"\", \"a\", \"abcd\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [2, 3],\n        valid: [\"干𩸽\", \"𠮷野家\"],\n        invalid: [\"\", \"𠀋\", \"千竈通り\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [0, 0],\n        valid: [\"\"],\n        invalid: [\"a\", \"ab\"],\n      });\n    });\n\n    it(\"should validate isLocale codes\", () => {\n      test({\n        validator: \"isLocale\",\n        valid: [\n          \"uz_Latn_UZ\",\n          \"en\",\n          \"gsw\",\n          \"en-US\",\n          \"es_ES\",\n          \"es-419\",\n          \"sw_KE\",\n          \"am_ET\",\n          \"zh-CHS\",\n          \"ca_ES_VALENCIA\",\n          \"en_US_POSIX\",\n          \"hak-CN\",\n          \"zh-Hant\",\n          \"zh-Hans\",\n          \"sr-Cyrl\",\n          \"sr-Latn\",\n          \"zh-cmn-Hans-CN\",\n          \"cmn-Hans-CN\",\n          \"zh-yue-HK\",\n          \"yue-HK\",\n          \"zh-Hans-CN\",\n          \"sr-Latn-RS\",\n          \"sl-rozaj\",\n          \"sl-rozaj-biske\",\n          \"sl-nedis\",\n          \"de-CH-1901\",\n          \"sl-IT-nedis\",\n          \"hy-Latn-IT-arevela\",\n          \"i-enochian\",\n          \"en-scotland-fonipa\",\n          \"sl-IT-rozaj-biske-1994\",\n          \"de-CH-x-phonebk\",\n          \"az-Arab-x-AZE-derbend\",\n          \"x-whatever\",\n          \"qaa-Qaaa-QM-x-southern\",\n          \"de-Qaaa\",\n          \"sr-Latn-QM\",\n          \"sr-Qaaa-RS\",\n          \"en-US-u-islamcal\",\n          \"zh-CN-a-myext-x-private\",\n          \"en-a-myext-b-another\",\n        ],\n        invalid: [\"lo_POP\", \"12\", \"12_DD\", \"de-419-DE\", \"a-DE\"],\n      });\n    });\n\n    it(\"should validate strings by byte length (deprecated api)\", () => {\n      test({\n        validator: \"isByteLength\",\n        args: [2],\n        valid: [\"abc\", \"de\", \"abcd\", \"gmail\"],\n        invalid: [\"\", \"a\"],\n      });\n      test({\n        validator: \"isByteLength\",\n        args: [2, 3],\n        valid: [\"abc\", \"de\", \"g\"],\n        invalid: [\"\", \"a\", \"abcd\", \"gm\"],\n      });\n      test({\n        validator: \"isByteLength\",\n        args: [0, 0],\n        valid: [\"\"],\n        invalid: [\"g\", \"a\"],\n      });\n    });\n\n    it(\"should validate strings by length\", () => {\n      test({\n        validator: \"isLength\",\n        args: [{ min: 2 }],\n        valid: [\"abc\", \"de\", \"abcd\"],\n        invalid: [\"\", \"a\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ min: 2, max: 3 }],\n        valid: [\"abc\", \"de\"],\n        invalid: [\"\", \"a\", \"abcd\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ min: 2, max: 3 }],\n        valid: [\"干𩸽\", \"𠮷野家\"],\n        invalid: [\"\", \"𠀋\", \"千竈通り\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ max: 3 }],\n        valid: [\"abc\", \"de\", \"a\", \"\"],\n        invalid: [\"abcd\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ max: 6, discreteLengths: 5 }],\n        valid: [\"abcd\", \"vfd\", \"ff\", \"\", \"k\"],\n        invalid: [\"abcdefgh\", \"hfjdksks\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ min: 2, max: 6, discreteLengths: 5 }],\n        valid: [\"bsa\", \"vfvd\", \"ff\"],\n        invalid: [\"\", \" \", \"hfskdunvc\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ min: 1, discreteLengths: 2 }],\n        valid: [\" \", \"hello\", \"bsa\"],\n        invalid: [\"\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ max: 0 }],\n        valid: [\"\"],\n        invalid: [\"a\", \"ab\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ min: 5, max: 10, discreteLengths: [2, 6, 8, 9] }],\n        valid: [\"helloguy\", \"shopping\", \"validator\", \"length\"],\n        invalid: [\"abcde\", \"abcdefg\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ discreteLengths: \"9\" }],\n        valid: [\"a\", \"abcd\", \"abcdefghijkl\"],\n        invalid: [],\n      });\n      test({\n        validator: \"isLength\",\n        valid: [\"a\", \"\", \"asds\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ max: 8 }],\n        valid: [\"👩🦰👩👩👦👦🏳️🌈\", \"⏩︎⏩︎⏪︎⏪︎⏭︎⏭︎⏮︎⏮︎\"],\n      });\n    });\n\n    it(\"should validate strings by byte length\", () => {\n      test({\n        validator: \"isByteLength\",\n        args: [{ min: 2 }],\n        valid: [\"abc\", \"de\", \"abcd\", \"gmail\"],\n        invalid: [\"\", \"a\"],\n      });\n      test({\n        validator: \"isByteLength\",\n        args: [{ min: 2, max: 3 }],\n        valid: [\"abc\", \"de\", \"g\"],\n        invalid: [\"\", \"a\", \"abcd\", \"gm\"],\n      });\n      test({\n        validator: \"isByteLength\",\n        args: [{ max: 3 }],\n        valid: [\"abc\", \"de\", \"g\", \"a\", \"\"],\n        invalid: [\"abcd\", \"gm\"],\n      });\n      test({\n        validator: \"isByteLength\",\n        args: [{ max: 0 }],\n        valid: [\"\"],\n        invalid: [\"g\", \"a\"],\n      });\n    });\n\n    it(\"should validate ULIDs\", () => {\n      test({\n        validator: \"isULID\",\n        valid: [\n          \"01HBGW8CWQ5Q6DTT7XP89VV4KT\",\n          \"01HBGW8CWR8MZQMBG6FA2QHMDD\",\n          \"01HBGW8CWS3MEEK12Y9G7SVW4V\",\n          \"01hbgw8cws1tq2njavy9amb0wx\",\n          \"01HBGW8cwS43H4jkQ0A4ZRJ7QV\",\n        ],\n        invalid: [\n          \"\",\n          \"01HBGW-CWS3MEEK1#Y9G7SVW4V\",\n          \"91HBGW8CWS3MEEK12Y9G7SVW4V\",\n          \"81HBGW8CWS3MEEK12Y9G7SVW4V\",\n          \"934859\",\n          \"01HBGW8CWS3MEEK12Y9G7SVW4VXXX\",\n          \"01UBGW8IWS3MOEK12Y9G7SVW4V\",\n          \"01HBGW8CuS43H4JKQ0A4ZRJ7QV\",\n        ],\n      });\n    });\n\n    it(\"should validate UUIDs\", () => {\n      test({\n        validator: \"isUUID\",\n        valid: [\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"934859\",\n          \"987FBC9-4BED-3078-CF07A-9141BA07C9F3\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [undefined],\n        valid: [\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A117FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n        invalid: [\n          \"\",\n          \"A117FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"A11AAAAA-1111-1111-AAAG-111111111111\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [null],\n        valid: [\n          \"A127FBC9-4BED-3078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A127FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A127FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"912859\",\n          \"A12AAAAA-1111-1111-AAAG-111111111111\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [1],\n        valid: [\"E034B584-7D89-11E9-9669-1AECF481A97B\"],\n        invalid: [\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"AAAAAAAA-1111-2222-AAAG\",\n          \"AAAAAAAA-1111-2222-AAAG-111111111111\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [2],\n        valid: [\"A987FBC9-4BED-2078-AF07-9141BA07C9F3\"],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"11111\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"A987FBC9-4BED-2078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [3],\n        valid: [\"9deb20fe-a6e0-355c-81ea-288b009e4f6d\"],\n        invalid: [\n          \"\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"934859\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [4],\n        valid: [\n          \"713ae7e3-cb32-45f9-adcb-7c4fa86b90c1\",\n          \"625e63f3-58f5-40b7-83a1-a72ad31acffb\",\n          \"57b73598-8764-4ad0-a76a-679bb6640eb1\",\n          \"9c858901-8a57-4791-81fe-4c455b099bc9\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"934859\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [5],\n        valid: [\n          \"987FBC97-4BED-5078-AF07-9141BA07C9F3\",\n          \"987FBC97-4BED-5078-BF07-9141BA07C9F3\",\n          \"987FBC97-4BED-5078-8F07-9141BA07C9F3\",\n          \"987FBC97-4BED-5078-9F07-9141BA07C9F3\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"934859\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"9c858901-8a57-4791-81fe-4c455b099bc9\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [6],\n        valid: [\"1ef29908-cde1-69d0-be16-bfc8518a95f0\"],\n        invalid: [\n          \"987FBC97-4BED-1078-AF07-9141BA07C9F3\",\n          \"987FBC97-4BED-2078-AF07-9141BA07C9F3\",\n          \"987FBC97-4BED-3078-AF07-9141BA07C9F3\",\n          \"987FBC97-4BED-4078-AF07-9141BA07C9F3\",\n          \"987FBC97-4BED-5078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"987FBC97-4BED-8078-AF07-9141BA07C9F3\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [7],\n        valid: [\"018C544A-D384-7000-BB74-3B1738ABE43C\"],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"934859\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n          \"713ae7e3-cb32-45f9-adcb-7c4fa86b90c1\",\n          \"625e63f3-58f5-40b7-83a1-a72ad31acffb\",\n          \"57b73598-8764-4ad0-a76a-679bb6640eb1\",\n          \"9c858901-8a57-4791-81fe-4c455b099bc9\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [8],\n        valid: [\"018C544A-D384-8000-BB74-3B1738ABE43C\"],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"934859\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-7078-AF07-9141BA07C9F3\",\n          \"713ae7e3-cb32-45f9-adcb-7c4fa86b90c1\",\n          \"625e63f3-58f5-40b7-83a1-a72ad31acffb\",\n          \"57b73598-8764-4ad0-a76a-679bb6640eb1\",\n          \"9c858901-8a57-4791-81fe-4c455b099bc9\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [\"nil\"],\n        valid: [\"00000000-0000-0000-0000-000000000000\"],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"934859\",\n          \"987FBC9-4BED-3078-CF07A-9141BA07C9F3\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n          \"ffffffff-ffff-ffff-ffff-ffffffffffff\",\n          \"FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [\"max\"],\n        valid: [\n          \"ffffffff-ffff-ffff-ffff-ffffffffffff\",\n          \"FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"934859\",\n          \"987FBC9-4BED-3078-CF07A-9141BA07C9F3\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n          \"00000000-0000-0000-0000-000000000000\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [\"loose\"],\n        valid: [\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n          \"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\",\n          \"AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA\",\n          \"eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee\",\n          \"EEEEEEEE-EEEE-EEEE-EEEE-EEEEEEEEEEEE\",\n          \"99999999-9999-9999-9999-999999999999\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"987FBC9-4BED-3078-CF07A-9141BA07C9F3\",\n          \"934859\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [\"all\"],\n        valid: [\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n          \"00000000-0000-0000-0000-000000000000\",\n          \"ffffffff-ffff-ffff-ffff-ffffffffffff\",\n          \"FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"934859\",\n          \"987FBC9-4BED-3078-CF07A-9141BA07C9F3\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [\"invalid\"],\n        valid: [],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"934859\",\n          \"987FBC9-4BED-3078-CF07A-9141BA07C9F3\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n          \"00000000-0000-0000-0000-000000000000\",\n          \"ffffffff-ffff-ffff-ffff-ffffffffffff\",\n          \"FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF\",\n        ],\n      });\n    });\n\n    it(\"should validate a string that is in another string or array\", () => {\n      test({\n        validator: \"isIn\",\n        args: [\"foobar\"],\n        valid: [\"foo\", \"bar\", \"foobar\", \"\"],\n        invalid: [\"foobarbaz\", \"barfoo\"],\n      });\n      test({\n        validator: \"isIn\",\n        args: [[\"foo\", \"bar\"]],\n        valid: [\"foo\", \"bar\"],\n        invalid: [\"foobar\", \"barfoo\", \"\"],\n      });\n      test({\n        validator: \"isIn\",\n        args: [[\"1\", \"2\", \"3\"]],\n        valid: [\"1\", \"2\", \"3\"],\n        invalid: [\"4\", \"\"],\n      });\n      test({\n        validator: \"isIn\",\n        args: [[\"1\", \"2\", \"3\", { foo: \"bar\" }, () => 5, { toString: \"test\" }]],\n        valid: [\"1\", \"2\", \"3\", \"\"],\n        invalid: [\"4\"],\n      });\n      test({ validator: \"isIn\", invalid: [\"foo\", \"\"] });\n    });\n\n    it(\"should validate a string that is in another object\", () => {\n      test({\n        validator: \"isIn\",\n        args: [{ foo: 1, bar: 2, foobar: 3 }],\n        valid: [\"foo\", \"bar\", \"foobar\"],\n        invalid: [\"foobarbaz\", \"barfoo\", \"\"],\n      });\n      test({\n        validator: \"isIn\",\n        args: [{ 1: 3, 2: 0, 3: 1 }],\n        valid: [\"1\", \"2\", \"3\"],\n        invalid: [\"4\", \"\"],\n      });\n    });\n\n    it(\"should validate ABA routing number\", () => {\n      test({\n        validator: \"isAbaRouting\",\n        valid: [\"322070381\", \"011103093\", \"263170175\", \"124303065\"],\n        invalid: [\n          \"426317017\",\n          \"789456124\",\n          \"603558459\",\n          \"qwerty\",\n          \"12430306\",\n          \"382070381\",\n        ],\n      });\n    });\n\n    it(\"should validate IBAN\", () => {\n      test({\n        validator: \"isIBAN\",\n        valid: [\n          \"SC52BAHL01031234567890123456USD\",\n          \"LC14BOSL123456789012345678901234\",\n          \"MT31MALT01100000000000000000123\",\n          \"SV43ACAT00000000000000123123\",\n          \"EG800002000156789012345180002\",\n          \"BE71 0961 2345 6769\",\n          \"FR76 3000 6000 0112 3456 7890 189\",\n          \"DE91 1000 0000 0123 4567 89\",\n          \"GR96 0810 0010 0000 0123 4567 890\",\n          \"RO09 BCYP 0000 0012 3456 7890\",\n          \"SA44 2000 0001 2345 6789 1234\",\n          \"ES79 2100 0813 6101 2345 6789\",\n          \"CH56 0483 5012 3456 7800 9\",\n          \"GB98 MIDL 0700 9312 3456 78\",\n          \"IL170108000000012612345\",\n          \"IT60X0542811101000000123456\",\n          \"JO71CBJO0000000000001234567890\",\n          \"TR320010009999901234567890\",\n          \"BR1500000000000010932840814P2\",\n          \"LB92000700000000123123456123\",\n          \"IR200170000000339545727003\",\n          \"MZ97123412341234123412341\",\n          \"MA64011519000001205000534921\",\n          \"VG96VPVG0000012345678901\",\n          \"DZ580002100001113000000570\",\n          \"IE29AIBK93115212345678\",\n          \"PS92PALS000000000400123456702\",\n          \"PS92PALS00000000040012345670O\",\n        ],\n        invalid: [\n          \"XX22YYY1234567890123\",\n          \"FR14 2004 1010 0505 0001 3\",\n          \"FR7630006000011234567890189@\",\n          \"FR7630006000011234567890189😅\",\n          \"FR763000600001123456!!🤨7890189@\",\n          \"VG46H07Y0223060094359858\",\n          \"IE95TE8270900834048660\",\n          \"PS072435171802145240705922007\",\n        ],\n      });\n      test({\n        validator: \"isIBAN\",\n        args: [{ whitelist: [\"DK\", \"GB\"] }],\n        valid: [\"DK5000400440116243\", \"GB29NWBK60161331926819\"],\n        invalid: [\n          \"BE71 0961 2345 6769\",\n          \"FR76 3000 6000 0112 3456 7890 189\",\n          \"DE91 1000 0000 0123 4567 89\",\n          \"GR96 0810 0010 0000 0123 4567 890\",\n          \"RO09 BCYP 0000 0012 3456 7890\",\n          \"SA44 2000 0001 2345 6789 1234\",\n          \"ES79 2100 0813 6101 2345 6789\",\n          \"XX22YYY1234567890123\",\n          \"FR14 2004 1010 0505 0001 3\",\n          \"FR7630006000011234567890189@\",\n          \"FR7630006000011234567890189😅\",\n          \"FR763000600001123456!!🤨7890189@\",\n        ],\n      });\n      test({\n        validator: \"isIBAN\",\n        args: [{ whitelist: [\"XX\", \"AA\"] }],\n        invalid: [\n          \"DK5000400440116243\",\n          \"GB29NWBK60161331926819\",\n          \"BE71 0961 2345 6769\",\n          \"FR76 3000 6000 0112 3456 7890 189\",\n          \"DE91 1000 0000 0123 4567 89\",\n          \"GR96 0810 0010 0000 0123 4567 890\",\n          \"RO09 BCYP 0000 0012 3456 7890\",\n          \"SA44 2000 0001 2345 6789 1234\",\n          \"ES79 2100 0813 6101 2345 6789\",\n          \"XX22YYY1234567890123\",\n          \"FR14 2004 1010 0505 0001 3\",\n          \"FR7630006000011234567890189@\",\n          \"FR7630006000011234567890189😅\",\n          \"FR763000600001123456!!🤨7890189@\",\n        ],\n      });\n      test({\n        validator: \"isIBAN\",\n        args: [{ blacklist: [\"IT\"] }],\n        valid: [\n          \"SC52BAHL01031234567890123456USD\",\n          \"LC14BOSL123456789012345678901234\",\n          \"MT31MALT01100000000000000000123\",\n          \"SV43ACAT00000000000000123123\",\n          \"EG800002000156789012345180002\",\n          \"BE71 0961 2345 6769\",\n          \"FR76 3000 6000 0112 3456 7890 189\",\n          \"DE91 1000 0000 0123 4567 89\",\n          \"GR96 0810 0010 0000 0123 4567 890\",\n          \"RO09 BCYP 0000 0012 3456 7890\",\n          \"SA44 2000 0001 2345 6789 1234\",\n          \"ES79 2100 0813 6101 2345 6789\",\n          \"CH56 0483 5012 3456 7800 9\",\n          \"GB98 MIDL 0700 9312 3456 78\",\n          \"IL170108000000012612345\",\n          \"JO71CBJO0000000000001234567890\",\n          \"TR320010009999901234567890\",\n          \"BR1500000000000010932840814P2\",\n          \"LB92000700000000123123456123\",\n          \"IR200170000000339545727003\",\n          \"MZ97123412341234123412341\",\n        ],\n        invalid: [\n          \"XX22YYY1234567890123\",\n          \"FR14 2004 1010 0505 0001 3\",\n          \"FR7630006000011234567890189@\",\n          \"FR7630006000011234567890189😅\",\n          \"FR763000600001123456!!🤨7890189@\",\n          \"IT60X0542811101000000123456\",\n        ],\n      });\n    });\n\n    it(\"should validate BIC codes\", () => {\n      test({\n        validator: \"isBIC\",\n        valid: [\n          \"SBICKEN1345\",\n          \"SBICKEN1\",\n          \"SBICKENY\",\n          \"SBICKEN1YYP\",\n          \"SBICXKN1YYP\",\n        ],\n        invalid: [\n          \"SBIC23NXXX\",\n          \"S23CKENXXXX\",\n          \"SBICKENXX\",\n          \"SBICKENXX9\",\n          \"SBICKEN13458\",\n          \"SBICKEN\",\n          \"SBICXK\",\n        ],\n      });\n    });\n\n    it(\"should validate that integer strings are divisible by a number\", () => {\n      test({\n        validator: \"isDivisibleBy\",\n        args: [2],\n        valid: [\"2\", \"4\", \"100\", \"1000\"],\n        invalid: [\"1\", \"2.5\", \"101\", \"foo\", \"\", \"2020-01-06T14:31:00.135Z\"],\n      });\n    });\n\n    it(\"should validate luhn numbers\", () => {\n      test({\n        validator: \"isLuhnNumber\",\n        valid: [\n          \"0\",\n          \"5421\",\n          \"01234567897\",\n          \"0123456789012345678906\",\n          \"0123456789012345678901234567891\",\n          \"123456789012345678906\",\n          \"375556917985515\",\n          \"36050234196908\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4929 7226 5379 7141\",\n        ],\n        invalid: [\n          \"\",\n          \"1\",\n          \"5422\",\n          \"foo\",\n          \"prefix6234917882863855\",\n          \"623491788middle2863855\",\n          \"6234917882863855suffix\",\n        ],\n      });\n    });\n\n    it(\"should validate credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        valid: [\n          \"375556917985515\",\n          \"36050234196908\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4929 7226 5379 7141\",\n          \"5398228707871527\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"6765780016990268\",\n          \"4716989580001715211\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n        invalid: [\n          \"foo\",\n          \"foo\",\n          \"5398228707871528\",\n          \"2718760626256571\",\n          \"2721465526338453\",\n          \"2220175103860763\",\n          \"375556917985515999999993\",\n          \"899999996234917882863855\",\n          \"prefix6234917882863855\",\n          \"623491788middle2863855\",\n          \"6234917882863855suffix\",\n          \"4716989580001715213\",\n        ],\n      });\n    });\n\n    it(\"should validate credit cards without a proper provider\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"Plorf\" }],\n        error: [\n          \"foo\",\n          // valid cc #\n          \"375556917985515\",\n          \"4716-2210-5188-5662\",\n          \"375556917985515999999993\",\n          \"6234917882863855suffix\",\n        ],\n      });\n    });\n\n    it(\"should validate AmEx provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"AmEx\" }],\n        valid: [\"375556917985515\"],\n        invalid: [\n          \"foo\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"36050234196908\",\n          \"375556917985515999999993\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n          \"5398228707871527\",\n          \"6234917882863855suffix\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n      });\n    });\n\n    it(\"should validate Diners Club provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"DinersClub\" }],\n        valid: [\"36050234196908\"],\n        invalid: [\n          \"foo\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"375556917985515\",\n          \"375556917985515999999993\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n          \"5398228707871527\",\n          \"6234917882863855suffix\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n      });\n    });\n\n    it(\"should validate Discover provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"Discover\" }],\n        valid: [\"6011111111111117\", \"6011000990139424\"],\n        invalid: [\n          \"foo\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"36050234196908\",\n          \"375556917985515\",\n          \"375556917985515999999993\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n          \"5398228707871527\",\n          \"6234917882863855suffix\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n      });\n    });\n\n    it(\"should validate JCB provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"JCB\" }],\n        valid: [\"3530111333300000\", \"3566002020360505\"],\n        invalid: [\n          \"foo\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"36050234196908\",\n          \"375556917985515\",\n          \"375556917985515999999993\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n          \"5398228707871527\",\n          \"6234917882863855suffix\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n      });\n    });\n\n    it(\"should validate Mastercard provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"Mastercard\" }],\n        valid: [\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2718760626256570\",\n          \"2720428011723762\",\n          \"5398228707871527\",\n        ],\n        invalid: [\n          \"foo\",\n          \"36050234196908\",\n          \"375556917985515\",\n          \"375556917985515999999993\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n          \"6234917882863855suffix\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n      });\n    });\n\n    it(\"should validate Union Pay provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"UnionPay\" }],\n        valid: [\n          \"6226050967750613\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6246281879460688\",\n          \"6263892624162870\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n        invalid: [\n          \"foo\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"36050234196908\",\n          \"375556917985515\",\n          \"375556917985515999999993\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n          \"5398228707871527\",\n          \"6234917882863855suffix\",\n        ],\n      });\n    });\n\n    it(\"should validate Visa provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"Visa\" }],\n        valid: [\n          \"4716-2210-5188-5662\",\n          \"4716461583322103\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n        ],\n        invalid: [\n          \"foo\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"36050234196908\",\n          \"375556917985515\",\n          \"375556917985515999999993\",\n          \"5398228707871527\",\n          \"6234917882863855suffix\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n      });\n    });\n\n    it(\"should validate identity cards\", () => {\n      const fixtures = [\n        {\n          locale: \"PK\",\n          valid: [\n            \"45504-4185771-3\",\n            \"39915-6182971-9\",\n            \"21143-6182971-2\",\n            \"34543-2323471-1\",\n            \"72345-2345678-7\",\n            \"63456-8765432-8\",\n            \"55672-1234567-5\",\n            \"21234-9876543-6\",\n          ],\n          invalid: [\n            \"08000-1234567-5\",\n            \"74321-87654321-1\",\n            \"51234-98765-2\",\n            \"00000-0000000-0\",\n            \"88888-88888888-0\",\n            \"99999-9999999-9\",\n            \"11111\",\n          ],\n        },\n        {\n          locale: \"zh-HK\",\n          valid: [\n            \"OV290326[A]\",\n            \"Q803337[0]\",\n            \"Z0977986\",\n            \"W520128(7)\",\n            \"A494866[4]\",\n            \"A494866(4)\",\n            \"Z867821A\",\n            \"ag293013(9)\",\n            \"k348609(5)\",\n          ],\n          invalid: [\n            \"A1234567890\",\n            \"98765432\",\n            \"O962472(9)\",\n            \"M4578601\",\n            \"X731324[8]\",\n            \"C503134(5)\",\n            \"RH265886(3)\",\n          ],\n        },\n        {\n          locale: \"LK\",\n          valid: [\n            \"722222222v\",\n            \"722222222V\",\n            \"993151225x\",\n            \"993151225X\",\n            \"188888388x\",\n            \"935632124V\",\n            \"199931512253\",\n            \"200023125632\",\n          ],\n          invalid: [\n            \"023125648V\",\n            \"023345621v\",\n            \"021354211X\",\n            \"055321231x\",\n            \"02135465462\",\n            \"199931512253X\",\n          ],\n        },\n        {\n          locale: \"PL\",\n          valid: [\n            \"99012229019\",\n            \"09210215408\",\n            \"20313034701\",\n            \"86051575214\",\n            \"77334586883\",\n            \"54007481320\",\n            \"06566860643\",\n            \"77552478861\",\n          ],\n          invalid: [\n            \"aa\",\n            \"5\",\n            \"195\",\n            \"\",\n            \" \",\n            \"12345678901\",\n            \"99212229019\",\n            \"09210215402\",\n            \"20313534701\",\n            \"86241579214\",\n          ],\n        },\n        {\n          locale: \"ES\",\n          valid: [\n            \"99999999R\",\n            \"12345678Z\",\n            \"01234567L\",\n            \"01234567l\",\n            \"X1234567l\",\n            \"x1234567l\",\n            \"X1234567L\",\n            \"Y1234567X\",\n            \"Z1234567R\",\n          ],\n          invalid: [\n            \"123456789\",\n            \"12345678A\",\n            \"12345 678Z\",\n            \"12345678-Z\",\n            \"1234*6789\",\n            \"1234*678Z\",\n            \"12345678!\",\n            \"1234567L\",\n            \"A1234567L\",\n            \"X1234567A\",\n            \"Y1234567B\",\n            \"Z1234567C\",\n          ],\n        },\n        {\n          locale: \"FI\",\n          valid: [\n            \"131052-308T\", // People born in 1900s\n            \"131052A308T\", // People born in 2000s\n            \"131052+308T\", // People born in 1800s\n            \"131052-313Y\",\n          ],\n          invalid: [\"131052308T\", \"131052-308T \", \"131052-308A\"],\n        },\n        {\n          locale: \"IN\",\n          valid: [\"298448863364\", \"2984 4886 3364\"],\n          invalid: [\n            \"99999999R\",\n            \"12345678Z\",\n            \"01234567L\",\n            \"01234567l\",\n            \"X1234567l\",\n            \"x1234567l\",\n            \"X1234567L\",\n          ],\n        },\n        {\n          locale: \"IR\",\n          valid: [\n            \"0499370899\",\n            \"0790419904\",\n            \"0084575948\",\n            \"0963695398\",\n            \"0684159414\",\n            \"0067749828\",\n            \"0650451252\",\n            \"1583250689\",\n            \"4032152314\",\n            \"0076229645\",\n            \"4271467685\",\n            \"0200203241\",\n          ],\n          invalid: [\n            \"1260293040\",\n            \"0000000001\",\n            \"1999999999\",\n            \"9999999991\",\n            \"AAAAAAAAAA\",\n            \"0684159415\",\n          ],\n        },\n        {\n          locale: \"IT\",\n          valid: [\"CR43675TM\", \"CA79382RA\"],\n          invalid: [\"CA00000AA\", \"CB2342TG\", \"CS123456A\", \"C1236EC\"],\n        },\n        {\n          locale: \"NO\",\n          valid: [\n            \"09053426694\",\n            \"26028338723\",\n            \"08031470790\",\n            \"12051539514\",\n            \"02077448074\",\n            \"14035638319\",\n            \"13031379673\",\n            \"29126214926\",\n          ],\n          invalid: [\"09053426699\", \"00000000000\", \"26028338724\", \"92031470790\"],\n        },\n        {\n          locale: \"TH\",\n          valid: [\"1101230000001\", \"1101230000060\"],\n          invalid: [\n            \"abc\",\n            \"1101230\",\n            \"11012300000011\",\n            \"aaaaaaaaaaaaa\",\n            \"110123abcd001\",\n            \"1101230000007\",\n            \"0101123450000\",\n            \"0101123450004\",\n            \"9101123450008\",\n          ],\n        },\n        {\n          locale: \"he-IL\",\n          valid: [\n            \"219472156\",\n            \"219486610\",\n            \"219488962\",\n            \"219566726\",\n            \"219640216\",\n            \"219645041\",\n            \"334795465\",\n            \"335211686\",\n            \"335240479\",\n            \"335472171\",\n            \"336999842\",\n            \"337090443\",\n          ],\n          invalid: [\n            \"123456789\",\n            \"12345678A\",\n            \"12345 678Z\",\n            \"12345678-Z\",\n            \"1234*6789\",\n            \"1234*678Z\",\n            \"12345678!\",\n            \"1234567L\",\n            \"A1234567L\",\n            \"X1234567A\",\n            \"Y1234567B\",\n            \"Z1234567C\",\n            \"219772156\",\n            \"219487710\",\n            \"334705465\",\n            \"336000842\",\n          ],\n        },\n        {\n          locale: \"ar-LY\",\n          valid: [\n            \"119803455876\",\n            \"120024679875\",\n            \"219624876201\",\n            \"220103480657\",\n          ],\n          invalid: [\n            \"987654320123\",\n            \"123-456-7890\",\n            \"012345678912\",\n            \"1234567890\",\n            \"AFJBHUYTREWR\",\n            \"C4V6B1X0M5T6\",\n            \"9876543210123\",\n          ],\n        },\n        {\n          locale: \"ar-TN\",\n          valid: [\n            \"09958092\",\n            \"09151092\",\n            \"65126506\",\n            \"79378815\",\n            \"58994407\",\n            \"73089789\",\n            \"73260311\",\n          ],\n          invalid: [\n            \"123456789546\",\n            \"123456789\",\n            \"023456789\",\n            \"12345678A\",\n            \"12345\",\n            \"1234578A\",\n            \"123 578A\",\n            \"12345 678Z\",\n            \"12345678-Z\",\n            \"1234*6789\",\n            \"1234*678Z\",\n            \"GE9800as98\",\n            \"X231071922\",\n            \"1234*678Z\",\n            \"12345678!\",\n          ],\n        },\n        {\n          locale: \"zh-CN\",\n          valid: [\n            \"235407195106112745\",\n            \"210203197503102721\",\n            \"520323197806058856\",\n            \"110101491001001\",\n          ],\n          invalid: [\n            \"160323197806058856\",\n            \"010203197503102721\",\n            \"520323297806058856\",\n            \"520323197802318856\",\n            \"235407195106112742\",\n            \"010101491001001\",\n            \"110101491041001\",\n            \"160101491001001\",\n            \"110101940231001\",\n            \"xx1234567\",\n            \"135407195106112742\",\n            \"123456789546\",\n            \"123456789\",\n            \"023456789\",\n            \"12345678A\",\n            \"12345\",\n            \"1234578A\",\n            \"123 578A\",\n            \"12345 678Z\",\n            \"12345678-Z\",\n            \"1234*6789\",\n            \"1234*678Z\",\n            \"GE9800as98\",\n            \"X231071922\",\n            \"1234*678Z\",\n            \"12345678!\",\n            \"235407207006112742\",\n          ],\n        },\n        {\n          locale: \"zh-TW\",\n          valid: [\n            \"B176944193\",\n            \"K101189797\",\n            \"F112866121\",\n            \"A219758834\",\n            \"A244144802\",\n            \"A146047171\",\n            \"Q170219004\",\n            \"Z277018381\",\n            \"X231071923\",\n          ],\n          invalid: [\n            \"123456789\",\n            \"A185034995\",\n            \"X431071923\",\n            \"GE9800as98\",\n            \"X231071922\",\n            \"1234*678Z\",\n            \"12345678!\",\n            \"1234567L\",\n            \"A1234567L\",\n            \"X1234567A\",\n            \"Y1234567B\",\n            \"Z1234567C\",\n            \"219772156\",\n            \"219487710\",\n            \"334705465\",\n            \"336000842\",\n          ],\n        },\n      ];\n\n      let allValid = [];\n\n      // Test fixtures\n      fixtures.forEach((fixture) => {\n        if (fixture.valid) allValid = allValid.concat(fixture.valid);\n        test({\n          validator: \"isIdentityCard\",\n          valid: fixture.valid,\n          invalid: fixture.invalid,\n          args: [fixture.locale],\n        });\n      });\n\n      // Test generics\n      test({\n        validator: \"isIdentityCard\",\n        valid: [...allValid],\n        invalid: [\"foo\"],\n        args: [\"any\"],\n      });\n    });\n\n    it(\"should error on invalid locale\", () => {\n      test({\n        validator: \"isIdentityCard\",\n        args: [\"is-NOT\"],\n        error: [\"99999999R\", \"12345678Z\"],\n      });\n    });\n\n    it(\"should validate ISINs\", () => {\n      test({\n        validator: \"isISIN\",\n        valid: [\n          \"AU0000XVGZA3\",\n          \"DE000BAY0017\",\n          \"BE0003796134\",\n          \"SG1G55870362\",\n          \"GB0001411924\",\n          \"DE000WCH8881\",\n          \"PLLWBGD00016\",\n          \"US0378331005\",\n        ],\n        invalid: [\"DE000BAY0018\", \"PLLWBGD00019\", \"foo\", \"5398228707871528\"],\n      });\n    });\n\n    it(\"should validate EANs\", () => {\n      test({\n        validator: \"isEAN\",\n        valid: [\n          \"9421023610112\",\n          \"1234567890128\",\n          \"4012345678901\",\n          \"9771234567003\",\n          \"9783161484100\",\n          \"73513537\",\n          \"00012345600012\",\n          \"10012345678902\",\n          \"20012345678909\",\n        ],\n        invalid: [\"5901234123451\", \"079777681629\", \"0705632085948\"],\n      });\n    });\n\n    it(\"should validate ISSNs\", () => {\n      test({\n        validator: \"isISSN\",\n        valid: [\n          \"0378-5955\",\n          \"0000-0000\",\n          \"2434-561X\",\n          \"2434-561x\",\n          \"01896016\",\n          \"20905076\",\n        ],\n        invalid: [\n          \"0378-5954\",\n          \"0000-0001\",\n          \"0378-123\",\n          \"037-1234\",\n          \"0\",\n          \"2434-561c\",\n          \"1684-5370\",\n          \"19960791\",\n          \"\",\n        ],\n      });\n      test({\n        validator: \"isISSN\",\n        args: [{ case_sensitive: true }],\n        valid: [\"2434-561X\", \"2434561X\", \"0378-5955\", \"03785955\"],\n        invalid: [\"2434-561x\", \"2434561x\"],\n      });\n      test({\n        validator: \"isISSN\",\n        args: [{ require_hyphen: true }],\n        valid: [\"2434-561X\", \"2434-561x\", \"0378-5955\"],\n        invalid: [\"2434561X\", \"2434561x\", \"03785955\"],\n      });\n      test({\n        validator: \"isISSN\",\n        args: [{ case_sensitive: true, require_hyphen: true }],\n        valid: [\"2434-561X\", \"0378-5955\"],\n        invalid: [\"2434-561x\", \"2434561X\", \"2434561x\", \"03785955\"],\n      });\n    });\n\n    it(\"should validate JSON\", () => {\n      test({\n        validator: \"isJSON\",\n        valid: ['{ \"key\": \"value\" }', \"{}\"],\n        invalid: [\n          '{ key: \"value\" }',\n          \"{ 'key': 'value' }\",\n          \"null\",\n          \"1234\",\n          '\"nope\"',\n        ],\n      });\n    });\n\n    it(\"should validate JSON with primitives\", () => {\n      test({\n        validator: \"isJSON\",\n        args: [{ allow_primitives: true }],\n        valid: ['{ \"key\": \"value\" }', \"{}\", \"null\", \"false\", \"true\"],\n        invalid: [\n          '{ key: \"value\" }',\n          \"{ 'key': 'value' }\",\n          '{ \"key\": value }',\n          \"1234\",\n          '\"nope\"',\n        ],\n      });\n    });\n\n    it(\"should validate multibyte strings\", () => {\n      test({\n        validator: \"isMultibyte\",\n        valid: [\n          \"ひらがな・カタカナ、.漢字\",\n          \"あいうえお foobar\",\n          \"test@example.com\",\n          \"1234abcDExyz\",\n          \"カタカナ\",\n          \"中文\",\n        ],\n        invalid: [\"abc\", \"abc123\", '<>@\" *.'],\n      });\n    });\n\n    it(\"should validate ascii strings\", () => {\n      test({\n        validator: \"isAscii\",\n        valid: [\"foobar\", \"0987654321\", \"[email protected]\", \"1234abcDEF\"],\n        invalid: [\"foobar\", \"xyz098\", \"123456\", \"カタカナ\"],\n      });\n    });\n\n    it(\"should validate full-width strings\", () => {\n      test({\n        validator: \"isFullWidth\",\n        valid: [\n          \"ひらがな・カタカナ、.漢字\",\n          \"3ー0 a@com\",\n          \"Fカタカナ゙ᆲ\",\n          \"Good=Parts\",\n        ],\n        invalid: [\"abc\", \"abc123\", '!\"#$%&()<>/+=-_? ~^|.,@`{}[]'],\n      });\n    });\n\n    it(\"should validate half-width strings\", () => {\n      test({\n        validator: \"isHalfWidth\",\n        valid: [\n          '!\"#$%&()<>/+=-_? ~^|.,@`{}[]',\n          \"l-btn_02--active\",\n          \"abc123い\",\n          \"カタカナ゙ᆲ←\",\n        ],\n        invalid: [\"あいうえお\", \"0011\"],\n      });\n    });\n\n    it(\"should validate variable-width strings\", () => {\n      test({\n        validator: \"isVariableWidth\",\n        valid: [\n          \"ひらがなカタカナ漢字ABCDE\",\n          \"3ー0123\",\n          \"Fカタカナ゙ᆲ\",\n          \"Good=Parts\",\n        ],\n        invalid: [\n          \"abc\",\n          \"abc123\",\n          '!\"#$%&()<>/+=-_? ~^|.,@`{}[]',\n          \"ひらがな・カタカナ、.漢字\",\n          \"123456\",\n          \"カタカナ゙ᆲ\",\n        ],\n      });\n    });\n\n    it(\"should validate surrogate pair strings\", () => {\n      test({\n        validator: \"isSurrogatePair\",\n        valid: [\"𠮷野𠮷\", \"𩸽\", \"ABC千𥧄1-2-3\"],\n        invalid: [\"吉野竈\", \"鮪\", \"ABC1-2-3\"],\n      });\n    });\n\n    it(\"should validate Semantic Versioning Specification (SemVer) strings\", () => {\n      test({\n        validator: \"isSemVer\",\n        valid: [\n          \"0.0.4\",\n          \"1.2.3\",\n          \"10.20.30\",\n          \"1.1.2-prerelease+meta\",\n          \"1.1.2+meta\",\n          \"1.1.2+meta-valid\",\n          \"1.0.0-alpha\",\n          \"1.0.0-beta\",\n          \"1.0.0-alpha.beta\",\n          \"1.0.0-alpha.beta.1\",\n          \"1.0.0-alpha.1\",\n          \"1.0.0-alpha0.valid\",\n          \"1.0.0-alpha.0valid\",\n          \"1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay\",\n          \"1.0.0-rc.1+build.1\",\n          \"2.0.0-rc.1+build.123\",\n          \"1.2.3-beta\",\n          \"10.2.3-DEV-SNAPSHOT\",\n          \"1.2.3-SNAPSHOT-123\",\n          \"1.0.0\",\n          \"2.0.0\",\n          \"1.1.7\",\n          \"2.0.0+build.1848\",\n          \"2.0.1-alpha.1227\",\n          \"1.0.0-alpha+beta\",\n          \"1.2.3----RC-SNAPSHOT.12.9.1--.12+788\",\n          \"1.2.3----R-S.12.9.1--.12+meta\",\n          \"1.2.3----RC-SNAPSHOT.12.9.1--.12\",\n          \"1.0.0+0.build.1-rc.10000aaa-kk-0.1\",\n          \"99999999999999999999999.999999999999999999.99999999999999999\",\n          \"1.0.0-0A.is.legal\",\n        ],\n        invalid: [\n          \"-invalid+invalid\",\n          \"-invalid.01\",\n          \"alpha\",\n          \"alpha.beta\",\n          \"alpha.beta.1\",\n          \"alpha.1\",\n          \"alpha+beta\",\n          \"alpha_beta\",\n          \"alpha.\",\n          \"alpha..\",\n          \"beta\",\n          \"1.0.0-alpha_beta\",\n          \"-alpha.\",\n          \"1.0.0-alpha..\",\n          \"1.0.0-alpha..1\",\n          \"1.0.0-alpha...1\",\n          \"1.0.0-alpha....1\",\n          \"1.0.0-alpha.....1\",\n          \"1.0.0-alpha......1\",\n          \"1.0.0-alpha.......1\",\n          \"01.1.1\",\n          \"1.01.1\",\n          \"1.1.01\",\n          \"1.2\",\n          \"1.2.3.DEV\",\n          \"1.2-SNAPSHOT\",\n          \"1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788\",\n          \"1.2-RC-SNAPSHOT\",\n          \"-1.0.3-gamma+b7718\",\n          \"+justmeta\",\n          \"9.8.7+meta+meta\",\n          \"9.8.7-whatever+meta+meta\",\n          \"99999999999999999999999.999999999999999999.99999999999999999-\",\n          \"---RC-SNAPSHOT.12.09.1--------------------------------..12\",\n        ],\n      });\n    });\n\n    it(\"should validate base32 strings\", () => {\n      test({\n        validator: \"isBase32\",\n        valid: [\n          \"ZG======\",\n          \"JBSQ====\",\n          \"JBSWY===\",\n          \"JBSWY3A=\",\n          \"JBSWY3DP\",\n          \"JBSWY3DPEA======\",\n          \"K5SWYY3PNVSSA5DPEBXG6ZA=\",\n          \"K5SWYY3PNVSSA5DPEBXG6===\",\n        ],\n        invalid: [\n          \"12345\",\n          \"\",\n          \"JBSWY3DPtesting123\",\n          \"ZG=====\",\n          \"Z======\",\n          \"Zm=8JBSWY3DP\",\n          \"=m9vYg==\",\n          \"Zm9vYm/y====\",\n        ],\n      });\n    });\n\n    it(\"should validate base32 strings with crockford alternative\", () => {\n      test({\n        validator: \"isBase32\",\n        args: [{ crockford: true }],\n        valid: [\"91JPRV3F41BPYWKCCGGG\", \"60\", \"64\", \"B5QQA833C5Q20S3F41MQ8\"],\n        invalid: [\n          \"91JPRV3F41BUPYWKCCGGG\",\n          \"B5QQA833C5Q20S3F41MQ8L\",\n          \"60I\",\n          \"B5QQA833OULIC5Q20S3F41MQ8\",\n        ],\n      });\n    });\n\n    it(\"should validate base58 strings\", () => {\n      test({\n        validator: \"isBase58\",\n        valid: [\n          \"BukQL\",\n          \"3KMUV89zab\",\n          \"91GHkLMNtyo98\",\n          \"YyjKm3H\",\n          \"Mkhss145TRFg\",\n          \"7678765677\",\n          \"abcodpq\",\n          \"AAVHJKLPY\",\n        ],\n        invalid: [\n          \"0OPLJH\",\n          \"IMKLP23\",\n          \"KLMOmk986\",\n          \"LL1l1985hG\",\n          \"*MP9K\",\n          \"Zm=8JBSWY3DP\",\n          \")()(=9292929MKL\",\n        ],\n      });\n    });\n\n    it(\"should validate hex-encoded MongoDB ObjectId\", () => {\n      test({\n        validator: \"isMongoId\",\n        valid: [\"507f1f77bcf86cd799439011\"],\n        invalid: [\n          \"507f1f77bcf86cd7994390\",\n          \"507f1f77bcf86cd79943901z\",\n          \"\",\n          \"507f1f77bcf86cd799439011 \",\n        ],\n      });\n    });\n\n    it(\"should validate mobile phone number\", () => {\n      let fixtures = [\n        {\n          locale: \"am-AM\",\n          valid: [\n            \"+37433123456\",\n            \"+37441123456\",\n            \"+37443123456\",\n            \"+37444123456\",\n            \"+37455123456\",\n            \"+37477123456\",\n            \"+37488123456\",\n            \"+37491123456\",\n            \"+37493123456\",\n            \"+37494123456\",\n            \"+37495123456\",\n            \"+37496123456\",\n            \"+37498123456\",\n            \"+37499123456\",\n            \"055123456\",\n            \"37455123456\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+37403498855\",\n            \"+37416498123\",\n            \"05614988556\",\n            \"\",\n            \"37456789000\",\n            \"37486789000\",\n            \"+37431312345\",\n            \"+37430312345\",\n            \"+37460123456\",\n            \"+37410324123\",\n            \"+37422298765\",\n            \"+37431276521\",\n            \"022698763\",\n            \"+37492123456\",\n          ],\n        },\n        {\n          locale: \"ar-AE\",\n          valid: [\n            \"+971502674453\",\n            \"+971521247658\",\n            \"+971541255684\",\n            \"+971555454458\",\n            \"+971561498855\",\n            \"+971585215778\",\n            \"971585215778\",\n            \"0585215778\",\n            \"585215778\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+971511498855\",\n            \"+9715614988556\",\n            \"+9745614988556\",\n            \"\",\n            \"+9639626626262\",\n            \"+963332210972\",\n            \"0114152198\",\n            \"962796477263\",\n          ],\n        },\n        {\n          locale: \"ar-BH\",\n          valid: [\n            \"+97335078110\",\n            \"+97339534385\",\n            \"+97366331055\",\n            \"+97333146000\",\n            \"97335078110\",\n            \"35078110\",\n            \"66331055\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+973350781101\",\n            \"+97379534385\",\n            \"+973035078110\",\n            \"\",\n            \"+9639626626262\",\n            \"+963332210972\",\n            \"0114152198\",\n            \"962796477263\",\n            \"035078110\",\n            \"16331055\",\n            \"hello\",\n            \"+9733507811a\",\n          ],\n        },\n        {\n          locale: \"ar-EG\",\n          valid: [\n            \"+201004513789\",\n            \"+201111453489\",\n            \"+201221204610\",\n            \"+201144621154\",\n            \"+201200124304\",\n            \"+201011201564\",\n            \"+201124679001\",\n            \"+201064790156\",\n            \"+201274652177\",\n            \"+201280134679\",\n            \"+201090124576\",\n            \"+201583728900\",\n            \"201599495596\",\n            \"201090124576\",\n            \"01090124576\",\n            \"01538920744\",\n            \"1593075993\",\n            \"1090124576\",\n          ],\n          invalid: [\n            \"+221004513789\",\n            \"+201404513789\",\n            \"12345\",\n            \"\",\n            \"+9639626626262\",\n            \"+963332210972\",\n            \"0114152198\",\n            \"962796477263\",\n          ],\n        },\n        {\n          locale: \"ar-JO\",\n          valid: [\n            \"0796477263\",\n            \"0777866254\",\n            \"0786725261\",\n            \"+962796477263\",\n            \"+962777866254\",\n            \"+962786725261\",\n            \"962796477263\",\n            \"962777866254\",\n            \"962786725261\",\n          ],\n          invalid: [\n            \"00962786725261\",\n            \"00962796477263\",\n            \"12345\",\n            \"\",\n            \"+9639626626262\",\n            \"+963332210972\",\n            \"0114152198\",\n          ],\n        },\n        {\n          locale: \"ar-KW\",\n          valid: [\n            \"96550000000\",\n            \"96560000000\",\n            \"96590000000\",\n            \"96541000000\",\n            \"+96550000000\",\n            \"+96550000220\",\n            \"+96551111220\",\n            \"+96541000000\",\n          ],\n          invalid: [\n            \"+96570000220\",\n            \"00962786725261\",\n            \"00962796477263\",\n            \"12345\",\n            \"\",\n            \"+9639626626262\",\n            \"+963332210972\",\n            \"0114152198\",\n            \"+96540000000\",\n          ],\n        },\n        {\n          locale: \"ar-LB\",\n          valid: [\n            \"+96171234568\",\n            \"+9613123456\",\n            \"3456123\",\n            \"3123456\",\n            \"81978468\",\n            \"77675798\",\n          ],\n          invalid: [\n            \"+961712345688888\",\n            \"00912220000\",\n            \"7767579888\",\n            \"+0921110000\",\n            \"+3123456888\",\n            \"021222200000\",\n            \"213333444444\",\n            \"\",\n            \"+212234\",\n            \"+21\",\n            \"02122333\",\n          ],\n        },\n        {\n          locale: \"ar-LY\",\n          valid: [\n            \"912220000\",\n            \"0923330000\",\n            \"218945550000\",\n            \"+218958880000\",\n            \"212220000\",\n            \"0212220000\",\n            \"+218212220000\",\n          ],\n          invalid: [\n            \"9122220000\",\n            \"00912220000\",\n            \"09211110000\",\n            \"+0921110000\",\n            \"+2180921110000\",\n            \"021222200000\",\n            \"213333444444\",\n            \"\",\n            \"+212234\",\n            \"+21\",\n            \"02122333\",\n          ],\n        },\n        {\n          locale: \"ar-MA\",\n          valid: [\n            \"0522714782\",\n            \"0690851123\",\n            \"0708186135\",\n            \"+212522714782\",\n            \"+212690851123\",\n            \"+212708186135\",\n            \"00212522714782\",\n            \"00212690851123\",\n            \"00212708186135\",\n          ],\n          invalid: [\n            \"522714782\",\n            \"690851123\",\n            \"708186135\",\n            \"212522714782\",\n            \"212690851123\",\n            \"212708186135\",\n            \"0212522714782\",\n            \"0212690851123\",\n            \"0212708186135\",\n            \"\",\n            \"12345\",\n            \"0922714782\",\n            \"+212190851123\",\n            \"00212408186135\",\n          ],\n        },\n        {\n          locale: \"dz-BT\",\n          valid: [\n            \"+97517374354\",\n            \"+97517454971\",\n            \"77324646\",\n            \"016329712\",\n            \"97517265559\",\n          ],\n          invalid: [\"\", \"9898347255\", \"+96326626262\", \"963372\", \"0114152198\"],\n        },\n        {\n          locale: \"ar-OM\",\n          valid: [\n            \"+96891212121\",\n            \"+96871212121\",\n            \"0096899999999\",\n            \"93112211\",\n            \"99099009\",\n          ],\n          invalid: [\n            \"+96890212121\",\n            \"0096890999999\",\n            \"0090999999\",\n            \"+9689021212\",\n            \"\",\n            \"+212234\",\n            \"+21\",\n            \"02122333\",\n          ],\n        },\n        {\n          locale: \"ar-PS\",\n          valid: [\"+970563459876\", \"970592334218\", \"0566372345\", \"0598273583\"],\n          invalid: [\n            \"+9759029487\",\n            \"97059123456789\",\n            \"598372348\",\n            \"97058aaaafjd\",\n            \"\",\n            \"05609123484\",\n            \"+97059\",\n            \"+970\",\n            \"97056\",\n          ],\n        },\n        {\n          locale: \"ar-SY\",\n          valid: [\n            \"0944549710\",\n            \"+963944549710\",\n            \"956654379\",\n            \"0944549710\",\n            \"0962655597\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"+9639626626262\",\n            \"+963332210972\",\n            \"0114152198\",\n          ],\n        },\n        {\n          locale: \"ar-SA\",\n          valid: [\n            \"0556578654\",\n            \"+966556578654\",\n            \"966556578654\",\n            \"596578654\",\n            \"572655597\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"+9665626626262\",\n            \"+96633221097\",\n            \"0114152198\",\n          ],\n        },\n        {\n          locale: \"ar-SD\",\n          valid: [\"0128652312\", \"+249919425113\", \"249123212345\", \"0993212345\"],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"+249972662622\",\n            \"+24946266262\",\n            \"+24933221097\",\n            \"0614152198\",\n            \"096554\",\n          ],\n        },\n        {\n          locale: \"ar-TN\",\n          valid: [\"23456789\", \"+21623456789\", \"21623456789\"],\n          invalid: [\n            \"12345\",\n            \"75200123\",\n            \"+216512345678\",\n            \"13520459\",\n            \"85479520\",\n          ],\n        },\n        {\n          locale: \"bg-BG\",\n          valid: [\"+359897123456\", \"+359898888888\", \"0897123123\"],\n          invalid: [\n            \"\",\n            \"0898123\",\n            \"+359212555666\",\n            \"18001234567\",\n            \"12125559999\",\n          ],\n        },\n        {\n          locale: \"bn-BD\",\n          valid: [\n            \"+8801794626846\",\n            \"01399098893\",\n            \"8801671163269\",\n            \"01717112029\",\n            \"8801898765432\",\n            \"+8801312345678\",\n            \"01494676946\",\n          ],\n          invalid: [\n            \"\",\n            \"0174626346\",\n            \"017943563469\",\n            \"18001234567\",\n            \"0131234567\",\n          ],\n        },\n        {\n          locale: \"bs-BA\",\n          valid: [\n            \"060123456\",\n            \"061123456\",\n            \"062123456\",\n            \"063123456\",\n            \"0641234567\",\n            \"065123456\",\n            \"066123456\",\n            \"+38760123456\",\n            \"+38761123456\",\n            \"+38762123456\",\n            \"+38763123456\",\n            \"+387641234567\",\n            \"+38765123456\",\n            \"+38766123456\",\n            \"0038760123456\",\n            \"0038761123456\",\n            \"0038762123456\",\n            \"0038763123456\",\n            \"00387641234567\",\n            \"0038765123456\",\n            \"0038766123456\",\n          ],\n          invalid: [\n            \"0601234567\",\n            \"0611234567\",\n            \"06212345\",\n            \"06312345\",\n            \"064123456\",\n            \"0651234567\",\n            \"06612345\",\n            \"+3866123456\",\n            \"+3856123456\",\n            \"00038760123456\",\n            \"038761123456\",\n          ],\n        },\n        {\n          locale: \"cs-CZ\",\n          valid: [\n            \"+420 123 456 789\",\n            \"+420 123456789\",\n            \"+420123456789\",\n            \"123 456 789\",\n            \"123456789\",\n          ],\n          invalid: [\n            \"\",\n            \"+42012345678\",\n            \"+421 123 456 789\",\n            \"+420 023456789\",\n            \"+4201234567892\",\n          ],\n        },\n        {\n          locale: \"sk-SK\",\n          valid: [\n            \"+421 123 456 789\",\n            \"+421 123456789\",\n            \"+421123456789\",\n            \"123 456 789\",\n            \"123456789\",\n          ],\n          invalid: [\n            \"\",\n            \"+42112345678\",\n            \"+422 123 456 789\",\n            \"+421 023456789\",\n            \"+4211234567892\",\n          ],\n        },\n        {\n          locale: \"de-DE\",\n          valid: [\n            \"+4915123456789\",\n            \"015123456789\",\n            \"015123456789\",\n            \"015623456789\",\n            \"015623456789\",\n            \"01601234567\",\n            \"016012345678\",\n            \"01621234567\",\n            \"01631234567\",\n            \"01701234567\",\n            \"017612345678\",\n          ],\n          invalid: [\n            \"+4930405044550\",\n            \"34412345678\",\n            \"14412345678\",\n            \"16212345678\",\n            \"1761234567\",\n            \"16412345678\",\n            \"17012345678\",\n            \"+4912345678910\",\n            \"+49015123456789\",\n            \"015345678910\",\n            \"015412345678\",\n          ],\n        },\n        {\n          locale: \"de-AT\",\n          valid: [\n            \"+436761234567\",\n            \"06761234567\",\n            \"00436123456789\",\n            \"+436123456789\",\n            \"01999\",\n            \"+4372876\",\n            \"06434908989562345\",\n          ],\n          invalid: [\"167612345678\", \"1234\", \"064349089895623459\"],\n        },\n        {\n          locale: \"hu-HU\",\n          valid: [\"06301234567\", \"+36201234567\", \"06701234567\"],\n          invalid: [\"1234\", \"06211234567\", \"+3620123456\"],\n        },\n        {\n          locale: \"mz-MZ\",\n          valid: [\n            \"+258849229754\",\n            \"258849229754\",\n            \"849229754\",\n            \"829229754\",\n            \"839229754\",\n            \"869229754\",\n            \"859229754\",\n            \"869229754\",\n            \"879229754\",\n            \"+258829229754\",\n            \"+258839229754\",\n            \"+258869229754\",\n            \"+258859229754\",\n            \"+258869229754\",\n            \"+258879229754\",\n            \"258829229754\",\n            \"258839229754\",\n            \"258869229754\",\n            \"258859229754\",\n            \"258869229754\",\n            \"258879229754\",\n          ],\n          invalid: [\n            \"+248849229754\",\n            \"158849229754\",\n            \"249229754\",\n            \"819229754\",\n            \"899229754\",\n            \"889229754\",\n            \"89229754\",\n            \"8619229754\",\n            \"87922975411\",\n            \"257829229754\",\n            \"+255839229754\",\n            \"+2258869229754\",\n            \"+1258859229754\",\n            \"+2588692297541\",\n            \"+2588792519754\",\n            \"25882922975411\",\n          ],\n        },\n        {\n          locale: \"pt-BR\",\n          valid: [\n            \"+55 12 996551215\",\n            \"+55 15 97661234\",\n            \"+55 (12) 996551215\",\n            \"+55 (15) 97661234\",\n            \"55 (17) 96332-2155\",\n            \"55 (17) 6332-2155\",\n            \"55 15 976612345\",\n            \"55 15 75661234\",\n            \"+5512984567890\",\n            \"+551283456789\",\n            \"5512984567890\",\n            \"551283456789\",\n            \"015994569878\",\n            \"01593456987\",\n            \"022995678947\",\n            \"02299567894\",\n            \"(22)99567894\",\n            \"(22)9956-7894\",\n            \"(22) 99567894\",\n            \"(22) 9956-7894\",\n            \"(22)999567894\",\n            \"(22)99956-7894\",\n            \"(22) 999567894\",\n            \"(22) 99956-7894\",\n            \"(11) 94123-4567\",\n            \"(11) 91431-4567\",\n            \"+55 (11) 91431-4567\",\n            \"+55 11 91431-4567\",\n            \"+551191431-4567\",\n            \"5511914314567\",\n            \"5511912345678\",\n          ],\n          invalid: [\n            \"0819876543\",\n            \"+55 15 7566123\",\n            \"+017 123456789\",\n            \"5501599623874\",\n            \"+55012962308\",\n            \"+55 015 1234-3214\",\n            \"+55 11 90431-4567\",\n            \"+55 (11) 90431-4567\",\n            \"+551190431-4567\",\n            \"5511904314567\",\n            \"5511902345678\",\n            \"(11) 90431-4567\",\n          ],\n        },\n        {\n          locale: \"zh-CN\",\n          valid: [\n            \"13523333233\",\n            \"13838389438\",\n            \"14899230918\",\n            \"14999230918\",\n            \"15323456787\",\n            \"15052052020\",\n            \"16237108167\",\n            \"008616238234822\",\n            \"+8616238234822\",\n            \"16565600001\",\n            \"17269427292\",\n            \"17469427292\",\n            \"18199617480\",\n            \"19151751717\",\n            \"19651751717\",\n            \"+8613238234822\",\n            \"+8613487234567\",\n            \"+8617823492338\",\n            \"+8617823492338\",\n            \"+8616637108167\",\n            \"+8616637108167\",\n            \"+8616712341234\",\n            \"+8619912341234\",\n            \"+8619812341234\",\n            \"+8619712341234\",\n            \"+8619612341234\",\n            \"+8619512341234\",\n            \"+8619312341234\",\n            \"+8619212341234\",\n            \"+8619112341234\",\n            \"+8617269427292\",\n            \"008618812341234\",\n            \"008618812341234\",\n            \"008617269427292\",\n            // Reserve number segments in the future.\n            \"92138389438\",\n            \"+8692138389438\",\n            \"008692138389438\",\n            \"98199649964\",\n            \"+8698099649964\",\n            \"008698099649964\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"12038389438\",\n            \"12838389438\",\n            \"013838389438\",\n            \"+86-13838389438\",\n            \"+08613811211114\",\n            \"+008613811211114\",\n            \"08613811211114\",\n            \"0086-13811211114\",\n            \"0086-138-1121-1114\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"010-38238383\",\n          ],\n        },\n        {\n          locale: \"zh-TW\",\n          valid: [\n            \"0987123456\",\n            \"+886987123456\",\n            \"886987123456\",\n            \"+886-987123456\",\n            \"886-987123456\",\n          ],\n          invalid: [\"12345\", \"\", \"Vml2YW11cyBmZXJtZtesting123\", \"0-987123456\"],\n        },\n        {\n          locale: \"en-LS\",\n          valid: [\n            \"+26622123456\",\n            \"+26628123456\",\n            \"+26657123456\",\n            \"+26658123456\",\n            \"+26659123456\",\n            \"+26627123456\",\n            \"+26652123456\",\n          ],\n          invalid: [\n            \"+26612345678\",\n            \"\",\n            \"2664512-21\",\n            \"+2662212345678\",\n            \"someString\",\n          ],\n        },\n        {\n          locale: \"en-BM\",\n          valid: [\"+14417974653\", \"14413986653\", \"4415370973\", \"+14415005489\"],\n          invalid: [\n            \"85763287\",\n            \"+14412020436\",\n            \"+14412236546\",\n            \"+14418245567\",\n            \"+14416546789\",\n            \"44087635627\",\n            \"+4418970973\",\n            \"\",\n            \"+1441897465\",\n            \"+1441897465 additional invalid string part\",\n          ],\n        },\n        {\n          locale: \"en-BS\",\n          valid: [\n            \"+12421231234\",\n            \"2421231234\",\n            \"+1-2421231234\",\n            \"+1-242-123-1234\",\n            \"(242)-123-1234\",\n            \"+1 (242)-123-1234\",\n            \"242 123-1234\",\n            \"(242) 123 1234\",\n          ],\n          invalid: [\n            \"85763287\",\n            \"+1 242 12 12 12 12\",\n            \"+1424123123\",\n            \"+14418245567\",\n            \"+14416546789\",\n            \"not a number\",\n            \"\",\n          ],\n        },\n        {\n          locale: \"en-ZA\",\n          valid: [\"0821231234\", \"+27821231234\", \"27821231234\"],\n          invalid: [\n            \"082123\",\n            \"08212312345\",\n            \"21821231234\",\n            \"+21821231234\",\n            \"+0821231234\",\n          ],\n        },\n        {\n          locale: \"en-AU\",\n          valid: [\"61404111222\", \"+61411222333\", \"0417123456\"],\n          invalid: [\n            \"082123\",\n            \"08212312345\",\n            \"21821231234\",\n            \"+21821231234\",\n            \"+0821231234\",\n            \"04123456789\",\n          ],\n        },\n        {\n          locale: \"es-BO\",\n          valid: [\n            \"+59175553635\",\n            \"+59162223685\",\n            \"+59179783890\",\n            \"+59160081890\",\n            \"79783890\",\n            \"60081890\",\n          ],\n          invalid: [\n            \"082123\",\n            \"08212312345\",\n            \"21821231234\",\n            \"+21821231234\",\n            \"+59199783890\",\n          ],\n        },\n        {\n          locale: \"en-GG\",\n          valid: [\n            \"+441481123456\",\n            \"+441481789123\",\n            \"441481123456\",\n            \"441481789123\",\n          ],\n          invalid: [\"999\", \"+441481123456789\", \"+447123456789\"],\n        },\n        {\n          locale: \"en-GH\",\n          valid: [\n            \"0202345671\",\n            \"0502345671\",\n            \"0242345671\",\n            \"0542345671\",\n            \"0532345671\",\n            \"0272345671\",\n            \"0572345671\",\n            \"0262345671\",\n            \"0562345671\",\n            \"0232345671\",\n            \"0282345671\",\n            \"+233202345671\",\n            \"+233502345671\",\n            \"+233242345671\",\n            \"+233542345671\",\n            \"+233532345671\",\n            \"+233272345671\",\n            \"+233572345671\",\n            \"+233262345671\",\n            \"+233562345671\",\n            \"+233232345671\",\n            \"+233282345671\",\n            \"+233592349493\",\n            \"0550298219\",\n          ],\n          invalid: [\"082123\", \"232345671\", \"0292345671\", \"+233292345671\"],\n        },\n        {\n          locale: \"en-GY\",\n          valid: [\"+5926121234\", \"06121234\", \"06726381\", \"+5926726381\"],\n          invalid: [\n            \"5926121234\",\n            \"6121234\",\n            \"+592 6121234\",\n            \"05926121234\",\n            \"+592-6121234\",\n          ],\n        },\n        {\n          locale: \"en-HK\",\n          valid: [\n            \"91234567\",\n            \"9123-4567\",\n            \"61234567\",\n            \"51234567\",\n            \"+85291234567\",\n            \"+852-91234567\",\n            \"+852-9123-4567\",\n            \"+852 9123 4567\",\n            \"9123 4567\",\n            \"852-91234567\",\n          ],\n          invalid: [\"999\", \"+852-912345678\", \"123456789\", \"+852-1234-56789\"],\n        },\n        {\n          locale: \"en-MO\",\n          valid: [\n            \"61234567\",\n            \"+85361234567\",\n            \"+853-61234567\",\n            \"+853-6123-4567\",\n            \"+853 6123 4567\",\n            \"6123 4567\",\n            \"853-61234567\",\n          ],\n          invalid: [\n            \"999\",\n            \"12345678\",\n            \"612345678\",\n            \"+853-12345678\",\n            \"+853-22345678\",\n            \"+853-82345678\",\n            \"+853-612345678\",\n            \"+853-1234-5678\",\n            \"+853 1234 5678\",\n            \"+853-6123-45678\",\n          ],\n        },\n        {\n          locale: \"en-IE\",\n          valid: [\n            \"+353871234567\",\n            \"353831234567\",\n            \"353851234567\",\n            \"353861234567\",\n            \"353871234567\",\n            \"353881234567\",\n            \"353891234567\",\n            \"0871234567\",\n            \"0851234567\",\n          ],\n          invalid: [\n            \"999\",\n            \"+353341234567\",\n            \"+33589484858\",\n            \"353841234567\",\n            \"353811234567\",\n          ],\n        },\n        {\n          locale: \"en-JM\",\n          valid: [\"+8761021234\", \"8761211234\", \"8763511274\", \"+8764511274\"],\n          invalid: [\n            \"999\",\n            \"+876102123422\",\n            \"+8861021234\",\n            \"8761021212213\",\n            \"876102123\",\n          ],\n        },\n        {\n          locale: \"en-KE\",\n          valid: [\n            \"+254728590432\",\n            \"+254733875610\",\n            \"254728590234\",\n            \"0733346543\",\n            \"0700459022\",\n            \"0110934567\",\n            \"+254110456794\",\n            \"254198452389\",\n          ],\n          invalid: [\"999\", \"+25489032\", \"123456789\", \"+254800723845\"],\n        },\n        {\n          locale: \"fr-CF\",\n          valid: [\n            \"+23670850000\",\n            \"+23675038756\",\n            \"+23677859002\",\n            \"+23672854202\",\n            \"+23621854052\",\n            \"+23622854072\",\n            \"72234650\",\n            \"70045902\",\n            \"77934567\",\n            \"21456794\",\n            \"22452389\",\n          ],\n          invalid: [\n            \"+23689032\",\n            \"123456789\",\n            \"+236723845987\",\n            \"022452389\",\n            \"+236772345678\",\n            \"+236700456794\",\n          ],\n        },\n        {\n          locale: \"en-KI\",\n          valid: [\"+68673140000\", \"68673059999\", \"+68663000000\", \"68663019999\"],\n          invalid: [\n            \"+68653000000\",\n            \"68664019999\",\n            \"+68619019999\",\n            \"686123456789\",\n            \"+686733445\",\n          ],\n        },\n        {\n          locale: \"en-MT\",\n          valid: [\"+35699000000\", \"+35679000000\", \"99000000\"],\n          invalid: [\"356\", \"+35699000\", \"+35610000000\"],\n        },\n        {\n          locale: \"en-PH\",\n          valid: [\n            \"+639275149120\",\n            \"+639275142327\",\n            \"+639003002023\",\n            \"09275149116\",\n            \"09194877624\",\n          ],\n          invalid: [\n            \"12112-13-345\",\n            \"12345678901\",\n            \"sx23YW11cyBmZxxXJt123123\",\n            \"010-38238383\",\n            \"966684123123-2590\",\n          ],\n        },\n        {\n          locale: \"en-UG\",\n          valid: [\n            \"+256728590432\",\n            \"+256733875610\",\n            \"256728590234\",\n            \"0773346543\",\n            \"0700459022\",\n          ],\n          invalid: [\n            \"999\",\n            \"+254728590432\",\n            \"+25489032\",\n            \"123456789\",\n            \"+254800723845\",\n          ],\n        },\n        {\n          locale: \"en-RW\",\n          valid: [\n            \"+250728590432\",\n            \"+250733875610\",\n            \"250738590234\",\n            \"0753346543\",\n            \"0780459022\",\n          ],\n          invalid: [\n            \"999\",\n            \"+254728590432\",\n            \"+25089032\",\n            \"123456789\",\n            \"+250800723845\",\n          ],\n        },\n        {\n          locale: \"en-TZ\",\n          valid: [\n            \"+255728590432\",\n            \"+255733875610\",\n            \"255628590234\",\n            \"0673346543\",\n            \"0600459022\",\n          ],\n          invalid: [\n            \"999\",\n            \"+254728590432\",\n            \"+25589032\",\n            \"123456789\",\n            \"+255800723845\",\n          ],\n        },\n        {\n          locale: \"en-MW\",\n          valid: [\n            \"+265994563785\",\n            \"+265111785436\",\n            \"+265318596857\",\n            \"0320008744\",\n            \"01256258\",\n            \"0882541896\",\n            \"+265984563214\",\n          ],\n          invalid: [\n            \"58563\",\n            \"+2658256258\",\n            \"0896328741\",\n            \"0708574896\",\n            \"+26570857489635\",\n          ],\n        },\n        {\n          locale: \"es-PE\",\n          valid: [\n            \"+51912232764\",\n            \"+51923464567\",\n            \"+51968267382\",\n            \"+51908792973\",\n            \"974980472\",\n            \"908792973\",\n            \"+51974980472\",\n          ],\n          invalid: [\n            \"999\",\n            \"+51812232764\",\n            \"+5181223276499\",\n            \"+25589032\",\n            \"123456789\",\n          ],\n        },\n        {\n          locale: \"fr-FR\",\n          valid: [\n            \"0612457898\",\n            \"+33612457898\",\n            \"33612457898\",\n            \"0712457898\",\n            \"+33712457898\",\n            \"33712457898\",\n          ],\n          invalid: [\n            \"061245789\",\n            \"06124578980\",\n            \"0112457898\",\n            \"0212457898\",\n            \"0312457898\",\n            \"0412457898\",\n            \"0512457898\",\n            \"0812457898\",\n            \"0912457898\",\n            \"+34612457898\",\n            \"+336124578980\",\n            \"+3361245789\",\n          ],\n        },\n        {\n          locale: \"fr-BF\",\n          valid: [\n            \"+22661245789\",\n            \"+22665903092\",\n            \"+22672457898\",\n            \"+22673572346\",\n            \"061245789\",\n            \"071245783\",\n          ],\n          invalid: [\n            \"0612457892\",\n            \"06124578980\",\n            \"0112457898\",\n            \"0212457898\",\n            \"0312457898\",\n            \"0412457898\",\n            \"0512457898\",\n            \"0812457898\",\n            \"0912457898\",\n            \"+22762457898\",\n            \"+226724578980\",\n            \"+22634523\",\n          ],\n        },\n        {\n          locale: \"fr-BJ\",\n          valid: [\n            \"+22920215789\",\n            \"+22920293092\",\n            \"+22921307898\",\n            \"+22921736346\",\n            \"+22922416346\",\n            \"+22923836346\",\n          ],\n          invalid: [\n            \"0612457892\",\n            \"01122921737346\",\n            \"+22762457898\",\n            \"+226724578980\",\n            \"+22634523\",\n          ],\n        },\n        {\n          locale: \"fr-CA\",\n          valid: [\"19876543210\", \"8005552222\", \"+15673628910\"],\n          invalid: [\n            \"564785\",\n            \"0123456789\",\n            \"1437439210\",\n            \"+10345672645\",\n            \"11435213543\",\n          ],\n        },\n        {\n          locale: \"fr-CD\",\n          valid: [\n            \"+243818590432\",\n            \"+243893875610\",\n            \"243978590234\",\n            \"0813346543\",\n            \"0820459022\",\n            \"+243902590221\",\n          ],\n          invalid: [\n            \"243\",\n            \"+254818590432\",\n            \"+24389032\",\n            \"123456789\",\n            \"+243700723845\",\n          ],\n        },\n        {\n          locale: \"fr-GF\",\n          valid: [\n            \"0612457898\",\n            \"+594612457898\",\n            \"594612457898\",\n            \"0712457898\",\n            \"+594712457898\",\n            \"594712457898\",\n          ],\n          invalid: [\n            \"061245789\",\n            \"06124578980\",\n            \"0112457898\",\n            \"0212457898\",\n            \"0312457898\",\n            \"0412457898\",\n            \"0512457898\",\n            \"0812457898\",\n            \"0912457898\",\n            \"+54612457898\",\n            \"+5946124578980\",\n            \"+59461245789\",\n          ],\n        },\n        {\n          locale: \"fr-GP\",\n          valid: [\n            \"0612457898\",\n            \"+590612457898\",\n            \"590612457898\",\n            \"0712457898\",\n            \"+590712457898\",\n            \"590712457898\",\n          ],\n          invalid: [\n            \"061245789\",\n            \"06124578980\",\n            \"0112457898\",\n            \"0212457898\",\n            \"0312457898\",\n            \"0412457898\",\n            \"0512457898\",\n            \"0812457898\",\n            \"0912457898\",\n            \"+594612457898\",\n            \"+5906124578980\",\n            \"+59061245789\",\n          ],\n        },\n        {\n          locale: \"fr-MQ\",\n          valid: [\n            \"0612457898\",\n            \"+596612457898\",\n            \"596612457898\",\n            \"0712457898\",\n            \"+596712457898\",\n            \"596712457898\",\n          ],\n          invalid: [\n            \"061245789\",\n            \"06124578980\",\n            \"0112457898\",\n            \"0212457898\",\n            \"0312457898\",\n            \"0412457898\",\n            \"0512457898\",\n            \"0812457898\",\n            \"0912457898\",\n            \"+594612457898\",\n            \"+5966124578980\",\n            \"+59661245789\",\n          ],\n        },\n        {\n          locale: \"fr-RE\",\n          valid: [\n            \"0612457898\",\n            \"+262612457898\",\n            \"262612457898\",\n            \"0712457898\",\n            \"+262712457898\",\n            \"262712457898\",\n          ],\n          invalid: [\n            \"061245789\",\n            \"06124578980\",\n            \"0112457898\",\n            \"0212457898\",\n            \"0312457898\",\n            \"0412457898\",\n            \"0512457898\",\n            \"0812457898\",\n            \"0912457898\",\n            \"+264612457898\",\n            \"+2626124578980\",\n            \"+26261245789\",\n          ],\n        },\n        {\n          locale: \"fr-PF\",\n          valid: [\n            \"87123456\",\n            \"88123456\",\n            \"89123456\",\n            \"+68987123456\",\n            \"+68988123456\",\n            \"+68989123456\",\n            \"68987123456\",\n            \"68988123456\",\n            \"68989123456\",\n          ],\n          invalid: [\n            \"7123456\",\n            \"86123456\",\n            \"87 12 34 56\",\n            \"definitely not a number\",\n            \"01+68988123456\",\n            \"6898912345\",\n          ],\n        },\n        {\n          locale: \"fr-WF\",\n          valid: [\n            \"+681408500\",\n            \"+681499387\",\n            \"+681728590\",\n            \"+681808542\",\n            \"+681828540\",\n            \"+681832014\",\n            \"408500\",\n            \"499387\",\n            \"728590\",\n            \"808542\",\n            \"828540\",\n            \"832014\",\n          ],\n          invalid: [\n            \"+68189032\",\n            \"123456789\",\n            \"+681723845987\",\n            \"022452389\",\n            \"+681772345678\",\n            \"+681700456794\",\n          ],\n        },\n        {\n          locale: \"ka-GE\",\n          valid: [\n            \"+995500011111\",\n            \"+995515352134\",\n            \"+995798526662\",\n            \"798526662\",\n            \"500011119\",\n            \"798526662\",\n            \"+995799766525\",\n          ],\n          invalid: [\n            \"+99550001111\",\n            \"+9957997665250\",\n            \"+9959997665251\",\n            \"+995780011111\",\n            \"20000000000\",\n            \"68129485729\",\n            \"6589394827\",\n            \"298RI89572\",\n          ],\n        },\n        {\n          locale: \"el-GR\",\n          valid: [\n            \"+306944848966\",\n            \"306944848966\",\n            \"06904567890\",\n            \"6944848966\",\n            \"6904567890\",\n            \"6914567890\",\n            \"6934567890\",\n            \"6944567890\",\n            \"6954567890\",\n            \"6974567890\",\n            \"6984567890\",\n            \"6994567890\",\n            \"6854567890\",\n            \"6864567890\",\n            \"6874567890\",\n            \"6884567890\",\n            \"6894567890\",\n          ],\n          invalid: [\n            \"2102323234\",\n            \"+302646041461\",\n            \"120000000\",\n            \"20000000000\",\n            \"68129485729\",\n            \"6589394827\",\n            \"298RI89572\",\n            \"6924567890\",\n            \"6964567890\",\n            \"6844567890\",\n            \"690456789\",\n            \"00690456789\",\n            \"not a number\",\n          ],\n        },\n        {\n          locale: \"el-CY\",\n          valid: [\n            \"96546247\",\n            \"96978927\",\n            \"+35799837145\",\n            \"+35799646792\",\n            \"96056927\",\n            \"99629593\",\n            \"99849980\",\n            \"3599701619\",\n            \"+3599148725\",\n            \"96537247\",\n            \"3596676533\",\n            \"+35795123455\",\n            \"+35797012204\",\n            \"35799123456\",\n            \"+35794123456\",\n            \"+35796123456\",\n          ],\n          invalid: [\n            \"\",\n            \"somechars\",\n            \"9697892\",\n            \"998499803\",\n            \"33799837145\",\n            \"+3799646792\",\n            \"93056927\",\n          ],\n        },\n        {\n          locale: \"en-GB\",\n          valid: [\"447789345856\", \"+447861235675\", \"07888814488\"],\n          invalid: [\n            \"67699567\",\n            \"0773894868\",\n            \"077389f8688\",\n            \"+07888814488\",\n            \"0152456999\",\n            \"442073456754\",\n            \"+443003434751\",\n            \"05073456754\",\n            \"08001123123\",\n            \"07043425232\",\n            \"01273884231\",\n            \"03332654034\",\n          ],\n        },\n        {\n          locale: \"en-SG\",\n          valid: [\n            \"32891278\",\n            \"87654321\",\n            \"98765432\",\n            \"+6587654321\",\n            \"+6598765432\",\n            \"+6565241234\",\n          ],\n          invalid: [\n            \"332891231\",\n            \"987654321\",\n            \"876543219\",\n            \"8765432\",\n            \"9876543\",\n            \"12345678\",\n            \"+98765432\",\n            \"+9876543212\",\n            \"+15673628910\",\n            \"19876543210\",\n            \"8005552222\",\n          ],\n        },\n        {\n          locale: \"en-US\",\n          valid: [\n            \"19876543210\",\n            \"8005552222\",\n            \"+15673628910\",\n            \"+1(567)3628910\",\n            \"+1(567)362-8910\",\n            \"+1(567) 362-8910\",\n            \"1(567)362-8910\",\n            \"1(567)362 8910\",\n            \"223-456-7890\",\n          ],\n          invalid: [\n            \"564785\",\n            \"0123456789\",\n            \"1437439210\",\n            \"+10345672645\",\n            \"11435213543\",\n            \"1(067)362-8910\",\n            \"1(167)362-8910\",\n            \"+2(267)362-8910\",\n            \"+3365520145\",\n          ],\n        },\n        {\n          locale: \"en-CA\",\n          valid: [\"19876543210\", \"8005552222\", \"+15673628910\"],\n          invalid: [\n            \"564785\",\n            \"0123456789\",\n            \"1437439210\",\n            \"+10345672645\",\n            \"11435213543\",\n          ],\n        },\n        {\n          locale: \"en-ZM\",\n          valid: [\n            \"0956684590\",\n            \"0966684590\",\n            \"0976684590\",\n            \"+260956684590\",\n            \"+260966684590\",\n            \"+260976684590\",\n            \"260976684590\",\n            \"+260779493521\",\n            \"+260760010936\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"010-38238383\",\n            \"966684590\",\n            \"760010936\",\n          ],\n        },\n        {\n          locale: [\"en-ZW\"],\n          valid: [\n            \"+263561890123\",\n            \"+263715558041\",\n            \"+263775551112\",\n            \"+263775551695\",\n            \"+263715556633\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+2631234567890\",\n            \"+2641234567\",\n            \"+263981234\",\n            \"4736338855\",\n            \"66338855\",\n          ],\n        },\n        {\n          locale: [\"en-NA\"],\n          valid: [\n            \"+26466189012\",\n            \"+26461555804\",\n            \"+26461434221\",\n            \"+26487555169\",\n            \"+26481555663\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+2641234567890\",\n            \"+2641234567\",\n            \"+2648143422\",\n            \"+264981234\",\n            \"4736338855\",\n            \"66338855\",\n          ],\n        },\n        {\n          locale: \"ru-RU\",\n          valid: [\"+79676338855\", \"79676338855\", \"89676338855\", \"9676338855\"],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"010-38238383\",\n            \"+9676338855\",\n            \"19676338855\",\n            \"6676338855\",\n            \"+99676338855\",\n          ],\n        },\n        {\n          locale: \"si-LK\",\n          valid: [\n            \"+94766661206\",\n            \"94713114340\",\n            \"0786642116\",\n            \"078 7642116\",\n            \"078-7642116\",\n            \"0749994567\",\n          ],\n          invalid: [\n            \"9912349956789\",\n            \"12345\",\n            \"1678123456\",\n            \"0731234567\",\n            \"0797878674\",\n          ],\n        },\n        {\n          locale: \"sr-RS\",\n          valid: [\n            \"0640133338\",\n            \"063333133\",\n            \"0668888878\",\n            \"+381645678912\",\n            \"+381611314000\",\n            \"0655885010\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"010-38238383\",\n            \"+9676338855\",\n            \"19676338855\",\n            \"6676338855\",\n            \"+99676338855\",\n          ],\n        },\n        {\n          locale: \"en-NZ\",\n          valid: [\"+6427987035\", \"642240512347\", \"0293981646\", \"029968425\"],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+642956696123566\",\n            \"+02119620856\",\n            \"+9676338855\",\n            \"19676338855\",\n            \"6676338855\",\n            \"+99676338855\",\n          ],\n        },\n        {\n          locale: \"en-MU\",\n          valid: [\"+23012341234\", \"12341234\", \"012341234\"],\n          invalid: [\n            \"41234\",\n            \"\",\n            \"+230\",\n            \"+2301\",\n            \"+23012\",\n            \"+230123\",\n            \"+2301234\",\n            \"+23012341\",\n            \"+230123412\",\n            \"+2301234123\",\n            \"+230123412341\",\n            \"+2301234123412\",\n            \"+23012341234123\",\n          ],\n        },\n        {\n          locale: [\"nb-NO\", \"nn-NO\"], // for multiple locales\n          valid: [\n            \"+4796338855\",\n            \"+4746338855\",\n            \"4796338855\",\n            \"4746338855\",\n            \"46338855\",\n            \"96338855\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+4676338855\",\n            \"19676338855\",\n            \"+4726338855\",\n            \"4736338855\",\n            \"66338855\",\n          ],\n        },\n        {\n          locale: [\"ne-NP\"],\n          valid: [\n            \"+9779817385479\",\n            \"+9779717385478\",\n            \"+9779862002615\",\n            \"+9779853660020\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+97796123456789\",\n            \"+9771234567\",\n            \"+977981234\",\n            \"4736338855\",\n            \"66338855\",\n          ],\n        },\n        {\n          locale: \"vi-VN\",\n          valid: [\n            \"0336012403\",\n            \"+84586012403\",\n            \"84981577798\",\n            \"0708001240\",\n            \"84813601243\",\n            \"0523803765\",\n            \"0863803732\",\n            \"0883805866\",\n            \"0892405867\",\n            \"+84888696413\",\n            \"0878123456\",\n            \"84781234567\",\n            \"0553803765\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"010-38238383\",\n            \"260976684590\",\n            \"01678912345\",\n            \"+841698765432\",\n            \"841626543219\",\n            \"0533803765\",\n            \"08712345678\",\n            \"+0321234567\",\n          ],\n        },\n        {\n          locale: \"es-AR\",\n          valid: [\n            \"5491143214321\",\n            \"+5491143214321\",\n            \"+5492414321432\",\n            \"5498418432143\",\n          ],\n          invalid: [\n            \"1143214321\",\n            \"91143214321\",\n            \"+91143214321\",\n            \"549841004321432\",\n            \"549 11 43214321\",\n            \"549111543214321\",\n            \"5714003425432\",\n            \"549114a214321\",\n            \"54 9 11 4321-4321\",\n          ],\n        },\n        {\n          locale: \"es-CO\",\n          valid: [\n            \"+573003321235\",\n            \"573003321235\",\n            \"3003321235\",\n            \"3213321235\",\n            \"3103321235\",\n            \"3243321235\",\n            \"573011140876\",\n          ],\n          invalid: [\n            \"1234\",\n            \"+57443875615\",\n            \"57309875615\",\n            \"57109834567\",\n            \"5792434567\",\n            \"5702345689\",\n            \"5714003425432\",\n            \"5703013347567\",\n            \"069834567\",\n            \"969834567\",\n            \"579871235\",\n            \"574321235\",\n            \"5784321235\",\n            \"5784321235\",\n            \"9821235\",\n            \"0698345\",\n            \"3321235\",\n          ],\n        },\n        {\n          locale: \"es-CL\",\n          valid: [\"+56733875615\", \"56928590234\", \"0928590294\", \"0208590294\"],\n          invalid: [\n            \"1234\",\n            \"+5633875615\",\n            \"563875615\",\n            \"56109834567\",\n            \"56069834567\",\n          ],\n        },\n        {\n          locale: \"es-EC\",\n          valid: [\n            \"+593987654321\",\n            \"593987654321\",\n            \"0987654321\",\n            \"027332615\",\n            \"+59323456789\",\n          ],\n          invalid: [\n            \"03321321\",\n            \"+593387561\",\n            \"59312345677\",\n            \"02344635\",\n            \"593123456789\",\n            \"081234567\",\n            \"+593912345678\",\n            \"+593902345678\",\n            \"+593287654321\",\n            \"593287654321\",\n          ],\n        },\n        {\n          locale: \"es-CR\",\n          valid: [\n            \"+50688888888\",\n            \"+50665408090\",\n            \"+50640895069\",\n            \"25789563\",\n            \"85789563\",\n          ],\n          invalid: [\n            \"+5081\",\n            \"+5067777777\",\n            \"+50188888888\",\n            \"+50e987643254\",\n            \"+506e4t4\",\n            \"-50688888888\",\n            \"50688888888\",\n            \"12345678\",\n            \"98765432\",\n            \"01234567\",\n          ],\n        },\n        {\n          locale: \"es-CU\",\n          valid: [\"+5351234567\", \"005353216547\", \"51234567\", \"53214567\"],\n          invalid: [\n            \"1234\",\n            \"+5341234567\",\n            \"0041234567\",\n            \"41234567\",\n            \"11234567\",\n            \"21234567\",\n            \"31234567\",\n            \"60303456\",\n            \"71234567\",\n            \"81234567\",\n            \"91234567\",\n            \"+5343216547\",\n            \"+5332165498\",\n            \"+53121234567\",\n            \"\",\n            \"abc\",\n            \"+535123457\",\n            \"56043029304\",\n          ],\n        },\n        {\n          locale: \"es-DO\",\n          valid: [\n            \"+18096622563\",\n            \"+18295614488\",\n            \"+18495259567\",\n            \"8492283478\",\n            \"8092324576\",\n            \"8292387713\",\n          ],\n          invalid: [\n            \"+18091\",\n            \"+1849777777\",\n            \"-18296643245\",\n            \"+18086643245\",\n            \"+18396643245\",\n            \"8196643245\",\n            \"+38492283478\",\n            \"6492283478\",\n            \"8192283478\",\n          ],\n        },\n        {\n          locale: \"es-HN\",\n          valid: [\n            \"+50495551876\",\n            \"+50488908787\",\n            \"+50493456789\",\n            \"+50489234567\",\n            \"+50488987896\",\n            \"+50497567389\",\n            \"+50427367389\",\n            \"+50422357389\",\n            \"+50431257389\",\n            \"+50430157389\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+34683456543\",\n            \"65478932\",\n            \"+50298787654\",\n            \"+504989874\",\n          ],\n        },\n        {\n          locale: \"es-ES\",\n          valid: [\n            \"+34654789321\",\n            \"654789321\",\n            \"+34714789321\",\n            \"714789321\",\n            \"+34744789321\",\n            \"744789321\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+3465478932\",\n            \"65478932\",\n            \"+346547893210\",\n            \"6547893210\",\n            \"+3470478932\",\n            \"7047893210\",\n            \"+34854789321\",\n            \"7547893219\",\n          ],\n        },\n        {\n          locale: \"es-MX\",\n          valid: [\n            \"+52019654789321\",\n            \"+52199654789321\",\n            \"+5201965478932\",\n            \"+5219654789321\",\n            \"52019654789321\",\n            \"52199654789321\",\n            \"5201965478932\",\n            \"5219654789321\",\n            \"87654789321\",\n            \"8654789321\",\n            \"0187654789321\",\n            \"18654789321\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+3465478932\",\n            \"65478932\",\n            \"+346547893210\",\n            \"+34704789321\",\n            \"704789321\",\n            \"+34754789321\",\n          ],\n        },\n        {\n          locale: \"es-NI\",\n          valid: [\n            \"+5051234567\",\n            \"+50512345678\",\n            \"5051234567\",\n            \"50512345678\",\n            \"+50555555555\",\n          ],\n          invalid: [\n            \"1234\",\n            \"\",\n            \"1234567\",\n            \"12345678\",\n            \"+12345678\",\n            \"+505123456789\",\n            \"+50612345678\",\n            \"+50712345678\",\n            \"-50512345678\",\n          ],\n        },\n        {\n          locale: \"es-PA\",\n          valid: [\"+5076784565\", \"+5074321557\", \"5073331112\", \"+50723431212\"],\n          invalid: [\n            \"+50755555\",\n            \"+207123456\",\n            \"2001236542\",\n            \"+507987643254\",\n            \"+507jjjghtf\",\n          ],\n        },\n        {\n          locale: \"es-PY\",\n          valid: [\n            \"+595991372649\",\n            \"+595992847352\",\n            \"+595993847593\",\n            \"+595994857473\",\n            \"+595995348532\",\n            \"+595996435231\",\n            \"+595981847362\",\n            \"+595982435452\",\n            \"+595983948502\",\n            \"+595984342351\",\n            \"+595985403481\",\n            \"+595986384012\",\n            \"+595971435231\",\n            \"+595972103924\",\n            \"+595973438542\",\n            \"+595974425864\",\n            \"+595975425843\",\n            \"+595976342546\",\n            \"+595961435234\",\n            \"+595963425043\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"65478932\",\n            \"+59599384712\",\n            \"+5959938471234\",\n            \"+595547893218\",\n            \"+591993546843\",\n          ],\n        },\n        {\n          locale: \"es-SV\",\n          valid: [\n            \"62136634\",\n            \"50361366631\",\n            \"+50361366634\",\n            \"+50361367217\",\n            \"+50361367460\",\n            \"+50371367632\",\n            \"+50371367767\",\n            \"+50371368314\",\n          ],\n          invalid: [\n            \"+5032136663\",\n            \"21346663\",\n            \"+50321366663\",\n            \"12345\",\n            \"El salvador\",\n            \"this should fail\",\n            \"+5032222\",\n            \"+503 1111 1111\",\n            \"00 +503 1234 5678\",\n          ],\n        },\n        {\n          locale: \"es-UY\",\n          valid: [\"+59899123456\", \"099123456\", \"+59894654321\", \"091111111\"],\n          invalid: [\n            \"54321\",\n            \"montevideo\",\n            \"\",\n            \"+598099123456\",\n            \"090883338\",\n            \"099 999 999\",\n          ],\n        },\n        {\n          locale: \"es-VE\",\n          valid: [\"+582125457765\", \"+582125458053\", \"+584125458053\"],\n          invalid: [\"+585129934395\", \"+58212993439\", \"\"],\n        },\n        {\n          locale: \"et-EE\",\n          valid: [\n            \"+372 512 34 567\",\n            \"372 512 34 567\",\n            \"+37251234567\",\n            \"51234567\",\n            \"81234567\",\n            \"+372842345678\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"NotANumber\",\n            \"+333 51234567\",\n            \"61234567\",\n            \"+51234567\",\n            \"+372 539 57 4\",\n            \"+372 900 1234\",\n            \"12345678\",\n          ],\n        },\n        {\n          locale: \"pl-PL\",\n          valid: [\n            \"+48512689767\",\n            \"+48 56 376 87 47\",\n            \"56 566 78 46\",\n            \"657562855\",\n            \"+48657562855\",\n            \"+48 887472765\",\n            \"+48 56 6572724\",\n            \"+48 67 621 5461\",\n            \"48 67 621 5461\",\n            \"+48 45 621 5461\",\n          ],\n          invalid: [\n            \"+48  67 621 5461\",\n            \"+55657562855\",\n            \"3454535\",\n            \"teststring\",\n            \"\",\n            \"1800-88-8687\",\n            \"+6019-5830837\",\n            \"357562855\",\n            \"+48 44 621 5461\",\n          ],\n        },\n        {\n          locale: \"fa-IR\",\n          valid: [\n            \"+989123456789\",\n            \"989223456789\",\n            \"09323456789\",\n            \"09021456789\",\n            \"+98-990-345-6789\",\n            \"+98 938 345 6789\",\n            \"0938 345 6789\",\n          ],\n          invalid: [\n            \"\",\n            \"+989623456789\",\n            \"+981123456789\",\n            \"01234567890\",\n            \"09423456789\",\n            \"09823456789\",\n            \"9123456789\",\n            \"091234567890\",\n            \"0912345678\",\n            \"+98 912 3456 6789\",\n            \"0912 345 678\",\n          ],\n        },\n        {\n          locale: \"fi-FI\",\n          valid: [\n            \"+358505557171\",\n            \"0455571\",\n            \"0505557171\",\n            \"358505557171\",\n            \"04412345\",\n            \"0457 123 45 67\",\n            \"+358457 123 45 67\",\n            \"+358 50 555 7171\",\n            \"0501234\",\n            \"+358501234\",\n            \"050 1234\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"045557\",\n            \"045555717112312332423423421\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"010-38238383\",\n            \"+3-585-0555-7171\",\n            \"+9676338855\",\n            \"19676338855\",\n            \"6676338855\",\n            \"+99676338855\",\n            \"044123\",\n            \"019123456789012345678901\",\n          ],\n        },\n        {\n          locale: \"fj-FJ\",\n          valid: [\n            \"+6799898679\",\n            \"6793788679\",\n            \"+679 989 8679\",\n            \"679 989 8679\",\n            \"679 3456799\",\n            \"679908 8909\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"04555792\",\n            \"902w99900030900000000099\",\n            \"8uiuiuhhyy&GUU88d\",\n            \"010-38238383\",\n            \"19676338855\",\n            \"679 9 89 8679\",\n            \"6793 45679\",\n          ],\n        },\n        {\n          locale: \"ms-MY\",\n          valid: [\n            \"+60128228789\",\n            \"+60195830837\",\n            \"+6019-5830837\",\n            \"+6019-5830837\",\n            \"+6010-4357675\",\n            \"+60172012370\",\n            \"0128737867\",\n            \"0172012370\",\n            \"01468987837\",\n            \"01112347345\",\n            \"016-2838768\",\n            \"016 2838768\",\n          ],\n          invalid: [\n            \"12345\",\n            \"601238788657\",\n            \"088387675\",\n            \"16-2838768\",\n            \"032551433\",\n            \"6088-387888\",\n            \"088-261987\",\n            \"1800-88-8687\",\n            \"088-320000\",\n            \"+01112353576\",\n            \"+0111419752\",\n          ],\n        },\n        {\n          locale: \"fr-CM\",\n          valid: [\n            \"+237677936141\",\n            \"237623456789\",\n            \"+237698124842\",\n            \"237693029202\",\n          ],\n          invalid: [\n            \"NotANumber\",\n            \"+(703)-572-2920\",\n            \"+237 623 45 67 890\",\n            \"+2379981247429\",\n          ],\n        },\n        {\n          locale: \"ko-KR\",\n          valid: [\n            \"+82-010-1234-5678\",\n            \"+82-10-1234-5678\",\n            \"82-010-1234-5678\",\n            \"82-10-1234-5678\",\n            \"+82 10 1234 5678\",\n            \"010-123-5678\",\n            \"10-1234-5678\",\n            \"+82 10 1234 5678\",\n            \"011 1234 5678\",\n            \"+820112345678\",\n            \"01012345678\",\n            \"+82 016 1234 5678\",\n            \"82 19 1234 5678\",\n            \"+82 010 12345678\",\n          ],\n          invalid: [\n            \"abcdefghi\",\n            \"+82 10 1234 567\",\n            \"+82 10o 1234 1234\",\n            \"+82 101 1234 5678\",\n            \"+82 10 12 5678\",\n            \"+011 7766 1234\",\n            \"011_7766_1234\",\n            \"+820 11 7766 1234\",\n          ],\n        },\n        {\n          locale: \"ky-KG\",\n          valid: [\n            \"+996553033300\",\n            \"+996 222 123456\",\n            \"+996 500 987654\",\n            \"+996 555 111222\",\n            \"+996 700 333444\",\n            \"+996 770 555666\",\n            \"+996 880 777888\",\n            \"+996 990 999000\",\n            \"+996 995 555666\",\n            \"+996 996 555666\",\n            \"+996 997 555666\",\n            \"+996 998 555666\",\n          ],\n          invalid: [\n            \"+996 201 123456\",\n            \"+996 312 123456\",\n            \"+996 3960 12345\",\n            \"+996 3961 12345\",\n            \"+996 3962 12345\",\n            \"+996 3963 12345\",\n            \"+996 3964 12345\",\n            \"+996 3965 12345\",\n            \"+996 3966 12345\",\n            \"+996 3967 12345\",\n            \"+996 3968 12345\",\n            \"+996 511 123456\",\n            \"+996 522 123456\",\n            \"+996 561 123456\",\n            \"+996 571 123456\",\n            \"+996 624 123456\",\n            \"+996 623 123456\",\n            \"+996 622 123456\",\n            \"+996 609 123456\",\n            \"+996 100 12345\",\n            \"+996 100 1234567\",\n            \"996 100 123456\",\n            \"0 100 123456\",\n            \"0 100 123abc\",\n          ],\n        },\n        {\n          locale: \"ja-JP\",\n          valid: [\n            \"09012345678\",\n            \"08012345678\",\n            \"07012345678\",\n            \"06012345678\",\n            \"090 1234 5678\",\n            \"+8190-1234-5678\",\n            \"+81 (0)90-1234-5678\",\n            \"+819012345678\",\n            \"+81-(0)90-1234-5678\",\n            \"+81 90 1234 5678\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"045555717112312332423423421\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+3-585-0555-7171\",\n            \"0 1234 5689\",\n            \"16 1234 5689\",\n            \"03_1234_5689\",\n            \"0312345678\",\n            \"0721234567\",\n            \"06 1234 5678\",\n            \"072 123 4567\",\n            \"0729 12 3456\",\n            \"07296 1 2345\",\n            \"072961 2345\",\n            \"03-1234-5678\",\n            \"+81312345678\",\n            \"+816-1234-5678\",\n            \"+81 090 1234 5678\",\n            \"+8109012345678\",\n            \"+81-090-1234-5678\",\n            \"90 1234 5678\",\n          ],\n        },\n        {\n          locale: \"ir-IR\",\n          valid: [\n            \"09023818688\",\n            \"09123809999\",\n            \"+989023818688\",\n            \"+989103923523\",\n          ],\n          invalid: [\n            \"19023818688\",\n            \"323254\",\n            \"+903232323257\",\n            \"++3567868\",\n            \"0902381888832\",\n          ],\n        },\n        {\n          locale: \"it-IT\",\n          valid: [\n            \"370 3175423\",\n            \"333202925\",\n            \"+39 310 7688449\",\n            \"+39 3339847632\",\n          ],\n          invalid: [\"011 7387545\", \"12345\", \"+45 345 6782395\"],\n        },\n        {\n          locale: \"fr-BE\",\n          valid: [\n            \"0470123456\",\n            \"+32470123456\",\n            \"32470123456\",\n            \"0421234567\",\n            \"+32421234567\",\n            \"32421234567\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+3212345\",\n            \"3212345\",\n            \"04701234567\",\n            \"+3204701234567\",\n            \"3204701234567\",\n            \"0212345678\",\n            \"+320212345678\",\n            \"320212345678\",\n            \"021234567\",\n            \"+3221234567\",\n            \"3221234567\",\n          ],\n        },\n        {\n          locale: \"nl-BE\",\n          valid: [\n            \"0470123456\",\n            \"+32470123456\",\n            \"32470123456\",\n            \"0421234567\",\n            \"+32421234567\",\n            \"32421234567\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+3212345\",\n            \"3212345\",\n            \"04701234567\",\n            \"+3204701234567\",\n            \"3204701234567\",\n            \"0212345678\",\n            \"+320212345678\",\n            \"320212345678\",\n            \"021234567\",\n            \"+3221234567\",\n            \"3221234567\",\n          ],\n        },\n        {\n          locale: \"nl-NL\",\n          valid: [\n            \"0670123456\",\n            \"0612345678\",\n            \"31612345678\",\n            \"31670123456\",\n            \"+31612345678\",\n            \"+31670123456\",\n            \"+31(0)612345678\",\n            \"0031612345678\",\n            \"0031(0)612345678\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+3112345\",\n            \"3112345\",\n            \"06701234567\",\n            \"012345678\",\n            \"+3104701234567\",\n            \"3104701234567\",\n            \"0212345678\",\n            \"021234567\",\n            \"+3121234567\",\n            \"3121234567\",\n            \"+310212345678\",\n            \"310212345678\",\n          ],\n        },\n        {\n          locale: \"nl-AW\",\n          valid: [\n            \"2975612345\",\n            \"2976412345\",\n            \"+2975612345\",\n            \"+2975912345\",\n            \"+2976412345\",\n            \"+2977312345\",\n            \"+2977412345\",\n            \"+2979912345\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+2972345\",\n            \"2972345\",\n            \"06701234567\",\n            \"012345678\",\n            \"+2974701234567\",\n            \"2974701234567\",\n            \"0297345678\",\n            \"029734567\",\n            \"+2971234567\",\n            \"2971234567\",\n            \"+297212345678\",\n            \"297212345678\",\n            \"number\",\n          ],\n        },\n        {\n          locale: \"ro-MD\",\n          valid: [\n            \"+37360375781\",\n            \"+37361945673\",\n            \"+37362387563\",\n            \"+37368447788\",\n            \"+37369000101\",\n            \"+37367568910\",\n            \"+37376758294\",\n            \"+37378457892\",\n            \"+37379067436\",\n            \"37362387563\",\n            \"37368447788\",\n            \"37369000101\",\n            \"37367568910\",\n          ],\n          invalid: [\n            \"\",\n            \"+37363373381\",\n            \"+37364310581\",\n            \"+37365578199\",\n            \"+37371088636\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"123456\",\n            \"740123456\",\n            \"+40640123456\",\n            \"+40210123456\",\n          ],\n        },\n        {\n          locale: \"ro-RO\",\n          valid: [\n            \"+40740123456\",\n            \"+40 740123456\",\n            \"+40740 123 456\",\n            \"+40740.123.456\",\n            \"+40740-123-456\",\n            \"40740123456\",\n            \"40 740123456\",\n            \"40740 123 456\",\n            \"40740.123.456\",\n            \"40740-123-456\",\n            \"0740123456\",\n            \"0740/123456\",\n            \"0740 123 456\",\n            \"0740.123.456\",\n            \"0740-123-456\",\n          ],\n          invalid: [\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"123456\",\n            \"740123456\",\n            \"+40640123456\",\n            \"+40210123456\",\n            \"+0765351689\",\n            \"+0711419752\",\n          ],\n        },\n        {\n          locale: \"id-ID\",\n          valid: [\n            \"0811 778 998\",\n            \"0811 7785 9983\",\n            \"0812 7784 9984\",\n            \"0813 7782 9982\",\n            \"0821 1234 1234\",\n            \"0822 1234 1234\",\n            \"0823 1234 1234\",\n            \"0852 1234 6764\",\n            \"0853 1234 6764\",\n            \"0851 1234 6764\",\n            \"0814 7782 9982\",\n            \"0815 7782 9982\",\n            \"0816 7782 9982\",\n            \"0855 7782 9982\",\n            \"0856 7782 9982\",\n            \"0857 7782 9982\",\n            \"0858 7782 9982\",\n            \"0817 7785 9983\",\n            \"0818 7784 9984\",\n            \"0819 7782 9982\",\n            \"0859 1234 1234\",\n            \"0877 1234 1234\",\n            \"0878 1234 1234\",\n            \"0895 7785 9983\",\n            \"0896 7784 9984\",\n            \"0897 7782 9982\",\n            \"0898 1234 1234\",\n            \"0899 1234 1234\",\n            \"0881 7785 9983\",\n            \"0882 7784 9984\",\n            \"0883 7782 9982\",\n            \"0884 1234 1234\",\n            \"0886 1234 1234\",\n            \"0887 1234 1234\",\n            \"0888 7785 9983\",\n            \"0889 7784 9984\",\n            \"0828 7784 9984\",\n            \"0838 7784 9984\",\n            \"0831 7784 9984\",\n            \"0832 7784 9984\",\n            \"0833 7784 9984\",\n            \"089931236181900\",\n            \"62811 778 998\",\n            \"62811778998\",\n            \"628993123618190\",\n            \"62898 740123456\",\n            \"62899 7401 2346\",\n            \"+62811 778 998\",\n            \"+62811778998\",\n            \"+62812 9650 3508\",\n            \"08197231819\",\n            \"085361008008\",\n            \"+62811787391\",\n          ],\n          invalid: [\n            \"0899312361819001\",\n            \"0217123456\",\n            \"622178878890\",\n            \"6221 740123456\",\n            \"0341 8123456\",\n            \"0778 89800910\",\n            \"0741 123456\",\n            \"+6221740123456\",\n            \"+65740 123 456\",\n            \"\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"123456\",\n            \"740123456\",\n            \"+65640123456\",\n            \"+64210123456\",\n          ],\n        },\n        {\n          locale: \"lt-LT\",\n          valid: [\"+37051234567\", \"851234567\"],\n          invalid: [\n            \"+65740 123 456\",\n            \"\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"123456\",\n            \"740123456\",\n            \"+65640123456\",\n            \"+64210123456\",\n          ],\n        },\n        {\n          locale: \"uk-UA\",\n          valid: [\n            \"+380501234567\",\n            \"+380631234567\",\n            \"+380661234567\",\n            \"+380671234567\",\n            \"+380681234567\",\n            \"+380731234567\",\n            \"+380751234567\",\n            \"+380771234567\",\n            \"+380911234567\",\n            \"+380921234567\",\n            \"+380931234567\",\n            \"+380941234567\",\n            \"+380951234567\",\n            \"+380961234567\",\n            \"+380971234567\",\n            \"+380981234567\",\n            \"+380991234567\",\n            \"380501234567\",\n            \"380631234567\",\n            \"380661234567\",\n            \"380671234567\",\n            \"380681234567\",\n            \"380731234567\",\n            \"380751234567\",\n            \"380771234567\",\n            \"380911234567\",\n            \"380921234567\",\n            \"380931234567\",\n            \"380941234567\",\n            \"380951234567\",\n            \"380961234567\",\n            \"380971234567\",\n            \"380981234567\",\n            \"380991234567\",\n            \"0501234567\",\n            \"0631234567\",\n            \"0661234567\",\n            \"0671234567\",\n            \"0681234567\",\n            \"0731234567\",\n            \"0751234567\",\n            \"0771234567\",\n            \"0911234567\",\n            \"0921234567\",\n            \"0931234567\",\n            \"0941234567\",\n            \"0951234567\",\n            \"0961234567\",\n            \"0971234567\",\n            \"0981234567\",\n            \"0991234567\",\n          ],\n          invalid: [\n            \"+30982345679\",\n            \"+380321234567\",\n            \"+380441234567\",\n            \"982345679\",\n            \"80982345679\",\n            \"+380 98 234 5679\",\n            \"+380-98-234-5679\",\n            \"+380 (98) 234-56-79\",\n            \"\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"123456\",\n            \"740123456\",\n          ],\n        },\n        {\n          locale: \"uz-UZ\",\n          valid: [\n            \"+998664835244\",\n            \"998664835244\",\n            \"664835244\",\n            \"+998957124555\",\n            \"998957124555\",\n            \"957124555\",\n          ],\n          invalid: [\n            \"+998644835244\",\n            \"998644835244\",\n            \"644835244\",\n            \"+99664835244\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"123456789\",\n            \"870123456\",\n            \"\",\n            \"+998\",\n            \"998\",\n          ],\n        },\n        {\n          locale: \"da-DK\",\n          valid: [\n            \"12345678\",\n            \"12 34 56 78\",\n            \"45 12345678\",\n            \"4512345678\",\n            \"45 12 34 56 78\",\n            \"+45 12 34 56 78\",\n          ],\n          invalid: [\n            \"\",\n            \"+45010203\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"123456\",\n            \"12 34 56\",\n            \"123 123 12\",\n          ],\n        },\n        {\n          locale: \"sv-SE\",\n          valid: [\n            \"+46701234567\",\n            \"46701234567\",\n            \"0721234567\",\n            \"073-1234567\",\n            \"0761-234567\",\n            \"079-123 45 67\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+4670123456\",\n            \"+46301234567\",\n            \"+0731234567\",\n            \"0731234 56\",\n            \"+7312345678\",\n            \"\",\n          ],\n        },\n        {\n          locale: \"fo-FO\",\n          valid: [\n            \"123456\",\n            \"12 34 56\",\n            \"298 123456\",\n            \"298123456\",\n            \"298 12 34 56\",\n            \"+298 12 34 56\",\n          ],\n          invalid: [\n            \"\",\n            \"+4501020304\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"12345678\",\n            \"12 34 56 78\",\n          ],\n        },\n        {\n          locale: \"kl-GL\",\n          valid: [\n            \"123456\",\n            \"12 34 56\",\n            \"299 123456\",\n            \"299123456\",\n            \"299 12 34 56\",\n            \"+299 12 34 56\",\n          ],\n          invalid: [\n            \"\",\n            \"+4501020304\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"12345678\",\n            \"12 34 56 78\",\n          ],\n        },\n        {\n          locale: \"kk-KZ\",\n          valid: [\"+77254716212\", \"77254716212\", \"87254716212\", \"7254716212\"],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"010-38238383\",\n            \"+9676338855\",\n            \"19676338855\",\n            \"6676338855\",\n            \"+99676338855\",\n          ],\n        },\n        {\n          locale: \"be-BY\",\n          valid: [\n            \"+375241234567\",\n            \"+375251234567\",\n            \"+375291234567\",\n            \"+375331234567\",\n            \"+375441234567\",\n            \"375331234567\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"010-38238383\",\n            \"+9676338855\",\n            \"19676338855\",\n            \"6676338855\",\n            \"+99676338855\",\n          ],\n        },\n        {\n          locale: \"th-TH\",\n          valid: [\"0912345678\", \"+66912345678\", \"66912345678\"],\n          invalid: [\"99123456789\", \"12345\", \"67812345623\", \"081234567891\"],\n        },\n        {\n          locale: \"tk-TM\",\n          valid: [\n            \"+99312495154\",\n            \"99312130136\",\n            \"+99312918407\",\n            \"99312183399\",\n            \"812391717\",\n          ],\n          invalid: [\"12345\", \"+99412495154\", \"99412495154\", \"998900066506\"],\n        },\n        {\n          locale: \"en-SL\",\n          valid: [\"+23274560591\", \"23274560591\", \"074560591\"],\n          invalid: [\n            \"0745605912\",\n            \"12345\",\n            \"232745605917\",\n            \"0797878674\",\n            \"23274560591 \",\n          ],\n        },\n        {\n          locale: \"en-BW\",\n          valid: [\n            \"+26772868545\",\n            \"+26776368790\",\n            \"+26774560512\",\n            \"26774560591\",\n            \"26778560512\",\n            \"74560512\",\n            \"76710284\",\n          ],\n          invalid: [\n            \"0799375902\",\n            \"12345\",\n            \"+2670745605448\",\n            \"2670745605482\",\n            \"+26779685451\",\n            \"+26770685451\",\n            \"267074560\",\n            \"2670ab5608\",\n            \"+267074560\",\n            \"70560512\",\n            \"79710284\",\n          ],\n        },\n        {\n          locale: \"az-AZ\",\n          valid: [\n            \"+994707007070\",\n            \"0707007070\",\n            \"+994502111111\",\n            \"0505436743\",\n            \"0554328772\",\n            \"0104328772\",\n            \"0993301022\",\n            \"+994776007139\",\n            \"+994106007139\",\n          ],\n          invalid: [\n            \"wrong-number\",\n            \"\",\n            \"994707007070\",\n            \"++9945005050\",\n            \"556007070\",\n            \"1234566\",\n            \"+994778008080a\",\n          ],\n        },\n        {\n          locale: \"de-LU\",\n          valid: [\"601123456\", \"+352601123456\"],\n          invalid: [\n            \"NaN\",\n            \"791234\",\n            \"+352791234\",\n            \"26791234\",\n            \"+35226791234\",\n            \"+112039812\",\n            \"+352703123456\",\n            \"1234\",\n          ],\n        },\n        {\n          locale: \"it-SM\",\n          valid: [\n            \"612345\",\n            \"05496123456\",\n            \"+37861234567\",\n            \"+390549612345678\",\n            \"+37805496123456789\",\n          ],\n          invalid: [\n            \"61234567890\",\n            \"6123\",\n            \"1234567\",\n            \"+49123456\",\n            \"NotANumber\",\n          ],\n        },\n        {\n          locale: \"so-SO\",\n          valid: [\n            \"+252601234567\",\n            \"+252650101010\",\n            \"+252794567120\",\n            \"252650647388\",\n            \"252751234567\",\n            \"0601234567\",\n            \"0609876543\",\n          ],\n          invalid: [\n            \"\",\n            \"not a number\",\n            \"+2526012345678\",\n            \"25260123456\",\n            \"+252705555555\",\n            \"+0601234567\",\n            \"06945454545\",\n          ],\n        },\n        {\n          locale: \"sq-AL\",\n          valid: [\n            \"0621234567\",\n            \"0661234567\",\n            \"0671234567\",\n            \"0681234567\",\n            \"0691234567\",\n            \"+355621234567\",\n            \"+355651234567\",\n            \"+355661234567\",\n            \"+355671234567\",\n            \"+355681234567\",\n            \"+355691234567\",\n          ],\n          invalid: [\n            \"67123456\",\n            \"06712345\",\n            \"067123456\",\n            \"06712345678\",\n            \"0571234567\",\n            \"+3556712345\",\n            \"+35565123456\",\n            \"+35157123456\",\n            \"NotANumber\",\n          ],\n        },\n        {\n          locale: \"ca-AD\",\n          valid: [\"+376312345\", \"312345\"],\n          invalid: [\"31234\", \"31234567\", \"512345\", \"NotANumber\"],\n        },\n        {\n          locale: \"pt-AO\",\n          valid: [\"+244911123432\", \"911123432\", \"244911123432\"],\n          invalid: [\n            \"+2449111234321\",\n            \"+244811123432\",\n            \"31234\",\n            \"31234567\",\n            \"512345\",\n            \"NotANumber\",\n          ],\n        },\n        {\n          locale: \"lv-LV\",\n          valid: [\"+37121234567\", \"37121234567\"],\n          invalid: [\n            \"+37201234567\",\n            \"+3754321\",\n            \"3712123456\",\n            \"+371212345678\",\n            \"NotANumber\",\n          ],\n        },\n        {\n          locale: \"mg-MG\",\n          valid: [\n            \"+261204269174\",\n            \"261204269174\",\n            \"0204269174\",\n            \"0209269174\",\n            \"0374269174\",\n            \"4269174\",\n          ],\n          invalid: [\n            \"0261204269174\",\n            \"+261 20 4 269174\",\n            \"+261 20 4269174\",\n            \"020 4269174\",\n            \"204269174\",\n            \"0404269174\",\n            \"NotANumber\",\n          ],\n        },\n        {\n          locale: \"mn-MN\",\n          valid: [\n            \"+97699112222\",\n            \"97696112222\",\n            \"97695112222\",\n            \"01197691112222\",\n            \"0097688112222\",\n            \"+97677112222\",\n            \"+97694112222\",\n            \"+97681112222\",\n          ],\n          invalid: [\n            \"+97888112222\",\n            \"+97977112222\",\n            \"+97094112222\",\n            \"+97281112222\",\n            \"02297681112222\",\n          ],\n        },\n        {\n          locale: \"my-MM\",\n          valid: [\n            \"+959750202595\",\n            \"09750202595\",\n            \"9750202595\",\n            \"+959260000966\",\n            \"09256000323\",\n            \"09276000323\",\n            \"09426000323\",\n            \"09456000323\",\n            \"09761234567\",\n            \"09791234567\",\n            \"09961234567\",\n            \"09771234567\",\n            \"09660000234\",\n          ],\n          invalid: [\n            \"59750202595\",\n            \"+9597502025\",\n            \"08943234524\",\n            \"09950000966\",\n            \"959240000966\",\n            \"09246000323\",\n            \"09466000323\",\n            \"09951234567\",\n            \"09801234567\",\n            \"09650000234\",\n          ],\n        },\n        {\n          locale: \"en-PG\",\n          valid: [\n            \"+67570123456\",\n            \"67570123456\",\n            \"+67571123456\",\n            \"+67572123456\",\n            \"+67573123456\",\n            \"+67574123456\",\n            \"+67575123456\",\n            \"+67576123456\",\n            \"+67577123456\",\n            \"+67578123456\",\n            \"+67579123456\",\n            \"+67581123456\",\n            \"+67588123456\",\n          ],\n          invalid: [\n            \"\",\n            \"not a number\",\n            \"12345\",\n            \"+675123456789\",\n            \"+67580123456\",\n            \"+67569123456\",\n            \"+67582123456\",\n            \"+6757012345\",\n          ],\n        },\n        {\n          locale: \"en-AG\",\n          valid: [\n            \"12687151234\",\n            \"+12687151234\",\n            \"+12684641234\",\n            \"12684641234\",\n            \"+12687211234\",\n            \"+12687302468\",\n            \"+12687642456\",\n            \"+12687763333\",\n          ],\n          invalid: [\n            \"2687151234\",\n            \"+12687773333\",\n            \"+126846412333\",\n            \"+12684641\",\n            \"+12687123456\",\n            \"+12687633456\",\n          ],\n        },\n        {\n          locale: \"en-AI\",\n          valid: [\n            \"+12642351234\",\n            \"12642351234\",\n            \"+12644612222\",\n            \"+12645366326\",\n            \"+12645376326\",\n            \"+12647246326\",\n            \"+12647726326\",\n          ],\n          invalid: [\n            \"\",\n            \"not a number\",\n            \"+22642351234\",\n            \"+12902351234\",\n            \"+12642331234\",\n            \"+1264235\",\n            \"22642353456\",\n            \"+12352643456\",\n          ],\n        },\n        {\n          locale: \"en-KN\",\n          valid: [\n            \"+18694699040\",\n            \"18694699040\",\n            \"+18697652917\",\n            \"18697652917\",\n            \"18694658472\",\n            \"+18696622969\",\n            \"+18694882224\",\n          ],\n          invalid: [\n            \"\",\n            \"+18694238545\",\n            \"+1 8694882224\",\n            \"8694658472\",\n            \"+186946990\",\n            \"+1869469904\",\n            \"1869469904\",\n          ],\n        },\n        {\n          locale: \"en-PK\",\n          valid: [\n            \"+923412877421\",\n            \"+923001234567\",\n            \"00923001234567\",\n            \"923001234567\",\n            \"03001234567\",\n          ],\n          invalid: [\n            \"+3001234567\",\n            \"+933001234567\",\n            \"+924001234567\",\n            \"+92300123456720\",\n            \"030012345672\",\n            \"30012345673\",\n            \"0030012345673\",\n            \"3001234567\",\n          ],\n        },\n        {\n          locale: [\"tg-TJ\"],\n          valid: [\n            \"+992553388551\",\n            \"+992553322551\",\n            \"992553388551\",\n            \"992553322551\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+995563388559\",\n            \"+9955633559\",\n            \"19676338855\",\n            \"+992263388505\",\n            \"9923633885\",\n            \"99255363885\",\n            \"66338855\",\n          ],\n        },\n        {\n          locale: \"dv-MV\",\n          valid: [\n            \"+9609112345\",\n            \"+9609958973\",\n            \"+9607258963\",\n            \"+9607958463\",\n            \"9609112345\",\n            \"9609958973\",\n            \"9607212963\",\n            \"9607986963\",\n            \"9112345\",\n            \"9958973\",\n            \"7258963\",\n            \"7958963\",\n          ],\n          invalid: [\n            \"+96059234567\",\n            \"+96045789\",\n            \"7812463784\",\n            \"NotANumber\",\n            \"+9607112345\",\n            \"+9609012345\",\n            \"+609012345\",\n            \"+96071123456\",\n            \"3412345\",\n            \"9603412345\",\n          ],\n        },\n        {\n          locale: \"ar-YE\",\n          valid: [\"737198225\", \"733111355\", \"+967700990270\"],\n          invalid: [\n            \"+5032136663\",\n            \"21346663\",\n            \"+50321366663\",\n            \"12345\",\n            \"Yemen\",\n            \"this should fail\",\n            \"+5032222\",\n            \"+503 1111 1111\",\n            \"00 +503 1234 5678\",\n          ],\n        },\n        {\n          locale: \"ar-EH\",\n          valid: [\n            \"+212-5288-12312\",\n            \"+212-5288 12312\",\n            \"+212 5288 12312\",\n            \"212528912312\",\n            \"+212528912312\",\n            \"+212528812312\",\n          ],\n          invalid: [\n            \"212528812312123\",\n            \"+212-5290-12312\",\n            \"++212528812312\",\n            \"12345\",\n            \"Wester Sahara\",\n            \"this should fail\",\n            \"212  5288---12312\",\n            \"+503 1111 1111\",\n            \"00 +503 1234 5678\",\n          ],\n        },\n        {\n          locale: \"fa-AF\",\n          valid: [\"0511231231\", \"+93511231231\", \"+93281234567\"],\n          invalid: [\n            \"212528812312123\",\n            \"+212-5290-12312\",\n            \"++212528812312\",\n            \"12345\",\n            \"Afghanistan\",\n            \"this should fail\",\n            \"212  5288---12312\",\n            \"+503 1111 1111\",\n            \"00 +503 1234 5678\",\n          ],\n        },\n        {\n          locale: \"en-SS\",\n          valid: [\n            \"+211928530422\",\n            \"+211913384561\",\n            \"+211972879174\",\n            \"+211952379334\",\n            \"0923346543\",\n            \"0950459022\",\n            \"0970934567\",\n            \"211979841238\",\n            \"211929843238\",\n            \"211959840238\",\n          ],\n          invalid: [\n            \"911\",\n            \"+211999\",\n            \"123456789909\",\n            \"South Sudan\",\n            \"21195 840 238\",\n            \"+211981234567\",\n            \"+211931234567\",\n            \"+211901234567\",\n            \"+211991234567\",\n          ],\n        },\n        {\n          locale: \"es-GT\",\n          valid: [\n            \"+50221234567\",\n            \"+50277654321\",\n            \"50226753421\",\n            \"50272332468\",\n            \"50278984455\",\n            \"+50273472492\",\n            \"71234567\",\n            \"21132398\",\n          ],\n          invalid: [\n            \"44\",\n            \"+5022712345678\",\n            \"1234567899\",\n            \"502712345678\",\n            \"This should fail\",\n            \"5021931234567\",\n            \"+50281234567\",\n          ],\n        },\n        {\n          locale: \"mk-MK\",\n          valid: [\n            \"+38923234567\",\n            \"38931234567\",\n            \"022123456\",\n            \"22234567\",\n            \"71234567\",\n            \"31234567\",\n            \"+38923091500\",\n            \"80091234\",\n            \"81123456\",\n            \"54123456\",\n          ],\n          invalid: [\n            \"38912345678\",\n            \"+389123456789\",\n            \"21234567\",\n            \"123456789\",\n            \"+3891234567\",\n            \"700012345\",\n            \"510123456\",\n            \"This should fail\",\n            \"+389123456\",\n            \"389123456\",\n            \"80912345\",\n          ],\n        },\n      ];\n\n      let allValid = [];\n\n      fixtures.forEach((fixture) => {\n        // to be used later on for validating 'any' locale\n        if (fixture.valid) allValid = allValid.concat(fixture.valid);\n\n        if (Array.isArray(fixture.locale)) {\n          test({\n            validator: \"isMobilePhone\",\n            valid: fixture.valid,\n            invalid: fixture.invalid,\n            args: [fixture.locale],\n          });\n        } else {\n          test({\n            validator: \"isMobilePhone\",\n            valid: fixture.valid,\n            invalid: fixture.invalid,\n            args: [fixture.locale],\n          });\n        }\n      });\n\n      test({\n        validator: \"isMobilePhone\",\n        valid: allValid.slice(0, 20),\n        invalid: [\n          \"\",\n          \"asdf\",\n          \"1\",\n          \"ASDFGJKLmZXJtZtesting123\",\n          \"Vml2YW11cyBmZXJtZtesting123\",\n        ],\n        args: [\"any\"],\n      });\n\n      // strict mode\n      test({\n        validator: \"isMobilePhone\",\n        valid: [\"+254728530234\", \"+299 12 34 56\", \"+94766660206\"],\n        invalid: [\n          \"254728530234\",\n          \"0728530234\",\n          \"+728530234\",\n          \"766667206\",\n          \"0766670206\",\n        ],\n        args: [\"any\", { strictMode: true }],\n      });\n\n      // falsey locale defaults to 'any'\n      test({\n        validator: \"isMobilePhone\",\n        valid: allValid.slice(0, 20),\n        invalid: [\n          \"\",\n          \"asdf\",\n          \"1\",\n          \"ASDFGJKLmZXJtZtesting123\",\n          \"Vml2YW11cyBmZXJtZtesting123\",\n        ],\n        args: [],\n      });\n    });\n\n    // de-CH, fr-CH, it-CH\n    test({\n      validator: \"isMobilePhone\",\n      valid: [\n        \"+41751112233\",\n        \"+41761112233\",\n        \"+41771112233\",\n        \"+41781112233\",\n        \"+41791112233\",\n        \"+411122112211\",\n      ],\n      invalid: [\"+41041112233\"],\n      args: [],\n    });\n\n    it(\"should error on invalid locale\", () => {\n      test({\n        validator: \"isMobilePhone\",\n        args: [{ locale: [\"is-NOT\"] }],\n        error: [\"+123456789\", \"012345\"],\n      });\n    });\n\n    it(\"should validate currency\", () => {\n      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)\n      test({\n        validator: \"isCurrency\",\n        valid: [\n          \"-$10,123.45\",\n          \"$10,123.45\",\n          \"$10123.45\",\n          \"10,123.45\",\n          \"10123.45\",\n          \"10,123\",\n          \"1,123,456\",\n          \"1123456\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"$0.10\",\n          \"-$0.01\",\n          \"-$.99\",\n          \"$100,234,567.89\",\n          \"$10,123\",\n          \"10,123\",\n          \"-10123\",\n        ],\n        invalid: [\n          \"1.234\",\n          \"$1.1\",\n          \"$ 32.50\",\n          \"500$\",\n          \".0001\",\n          \"$.001\",\n          \"$0.001\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"123,4\",\n          \",123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"- $\",\n        ],\n      });\n\n      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            allow_decimal: false,\n          },\n        ],\n        valid: [\n          \"-$10,123\",\n          \"$10,123\",\n          \"$10123\",\n          \"10,123\",\n          \"10123\",\n          \"10,123\",\n          \"1,123,456\",\n          \"1123456\",\n          \"1\",\n          \"0\",\n          \"$0\",\n          \"-$0\",\n          \"$100,234,567\",\n          \"$10,123\",\n          \"10,123\",\n          \"-10123\",\n        ],\n        invalid: [\n          \"-$10,123.45\",\n          \"$10,123.45\",\n          \"$10123.45\",\n          \"10,123.45\",\n          \"10123.45\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"$0.10\",\n          \"-$0.01\",\n          \"-$.99\",\n          \"$100,234,567.89\",\n          \"1.234\",\n          \"$1.1\",\n          \"$ 32.50\",\n          \".0001\",\n          \"$.001\",\n          \"$0.001\",\n          \"12,34.56\",\n          \"123,4\",\n          \",123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"- $\",\n        ],\n      });\n\n      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            require_decimal: true,\n          },\n        ],\n        valid: [\n          \"-$10,123.45\",\n          \"$10,123.45\",\n          \"$10123.45\",\n          \"10,123.45\",\n          \"10123.45\",\n          \"10,123.00\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"$0.10\",\n          \"-$0.01\",\n          \"-$.99\",\n          \"$100,234,567.89\",\n        ],\n        invalid: [\n          \"$10,123\",\n          \"10,123\",\n          \"-10123\",\n          \"1,123,456\",\n          \"1123456\",\n          \"1.234\",\n          \"$1.1\",\n          \"$ 32.50\",\n          \"500$\",\n          \".0001\",\n          \"$.001\",\n          \"$0.001\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"123,4\",\n          \",123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"- $\",\n        ],\n      });\n\n      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            digits_after_decimal: [1, 3],\n          },\n        ],\n        valid: [\n          \"-$10,123.4\",\n          \"$10,123.454\",\n          \"$10123.452\",\n          \"10,123.453\",\n          \"10123.450\",\n          \"10,123\",\n          \"1,123,456\",\n          \"1123456\",\n          \"1.3\",\n          \".030\",\n          \"0.100\",\n          \"$0.1\",\n          \"-$0.0\",\n          \"-$.9\",\n          \"$100,234,567.893\",\n          \"$10,123\",\n          \"10,123.123\",\n          \"-10123.1\",\n        ],\n        invalid: [\n          \"1.23\",\n          \"$1.13322\",\n          \"$ 32.50\",\n          \"500$\",\n          \".0001\",\n          \"$.01\",\n          \"$0.01\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"123,4\",\n          \",123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"- $\",\n        ],\n      });\n\n      // -$##,###.## with $ required (en-US, en-CA, en-AU, en-NZ, en-HK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            require_symbol: true,\n          },\n        ],\n        valid: [\n          \"-$10,123.45\",\n          \"$10,123.45\",\n          \"$10123.45\",\n          \"$10,123.45\",\n          \"$10,123\",\n          \"$1,123,456\",\n          \"$1123456\",\n          \"$1.39\",\n          \"$.03\",\n          \"$0.10\",\n          \"$0.10\",\n          \"-$0.01\",\n          \"-$.99\",\n          \"$100,234,567.89\",\n          \"$10,123\",\n          \"-$10123\",\n        ],\n        invalid: [\n          \"1.234\",\n          \"$1.234\",\n          \"1.1\",\n          \"$1.1\",\n          \"$ 32.50\",\n          \" 32.50\",\n          \"500\",\n          \"10,123,456\",\n          \".0001\",\n          \"$.001\",\n          \"$0.001\",\n          \"1,234.56\",\n          \"123456,123,123456\",\n          \"$123456,123,123456\",\n          \"123.4\",\n          \"$123.4\",\n          \",123\",\n          \"$,123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \"$.\",\n          \",\",\n          \"$,\",\n          \"00\",\n          \"$00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"$ \",\n          \"- $\",\n        ],\n      });\n\n      // ¥-##,###.## (zh-CN)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"¥\",\n            negative_sign_before_digits: true,\n          },\n        ],\n        valid: [\n          \"123,456.78\",\n          \"-123,456.78\",\n          \"¥6,954,231\",\n          \"¥-6,954,231\",\n          \"¥10.03\",\n          \"¥-10.03\",\n          \"10.03\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"¥-10567.01\",\n          \"¥0.01\",\n          \"¥1,234,567.89\",\n          \"¥10,123\",\n          \"¥-10,123\",\n          \"¥-10,123.45\",\n          \"10,123\",\n          \"10123\",\n          \"¥-100\",\n        ],\n        invalid: [\n          \"1.234\",\n          \"¥1.1\",\n          \"5,00\",\n          \".0001\",\n          \"¥.001\",\n          \"¥0.001\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"123 456\",\n          \",123\",\n          \"¥-,123\",\n          \"\",\n          \" \",\n          \"¥\",\n          \"¥-\",\n          \"¥-,.\",\n          \"-\",\n          \"- ¥\",\n          \"-¥\",\n        ],\n      });\n\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            negative_sign_after_digits: true,\n          },\n        ],\n        valid: [\n          \"$10,123.45-\",\n          \"$10,123.45\",\n          \"$10123.45\",\n          \"10,123.45\",\n          \"10123.45\",\n          \"10,123\",\n          \"1,123,456\",\n          \"1123456\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"$0.10\",\n          \"$0.01-\",\n          \"$.99-\",\n          \"$100,234,567.89\",\n          \"$10,123\",\n          \"10,123\",\n          \"10123-\",\n        ],\n        invalid: [\n          \"-123\",\n          \"1.234\",\n          \"$1.1\",\n          \"$ 32.50\",\n          \"500$\",\n          \".0001\",\n          \"$.001\",\n          \"$0.001\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"123,4\",\n          \",123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"- $\",\n        ],\n      });\n\n      // ¥##,###.## with no negatives (zh-CN)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"¥\",\n            allow_negatives: false,\n          },\n        ],\n        valid: [\n          \"123,456.78\",\n          \"¥6,954,231\",\n          \"¥10.03\",\n          \"10.03\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"¥0.01\",\n          \"¥1,234,567.89\",\n          \"¥10,123\",\n          \"10,123\",\n          \"10123\",\n          \"¥100\",\n        ],\n        invalid: [\n          \"1.234\",\n          \"-123,456.78\",\n          \"¥-6,954,231\",\n          \"¥-10.03\",\n          \"¥-10567.01\",\n          \"¥1.1\",\n          \"¥-10,123\",\n          \"¥-10,123.45\",\n          \"5,00\",\n          \"¥-100\",\n          \".0001\",\n          \"¥.001\",\n          \"¥-.001\",\n          \"¥0.001\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"123 456\",\n          \",123\",\n          \"¥-,123\",\n          \"\",\n          \" \",\n          \"¥\",\n          \"¥-\",\n          \"¥-,.\",\n          \"-\",\n          \"- ¥\",\n          \"-¥\",\n        ],\n      });\n\n      // R ## ###,## and R-10 123,25 (el-ZA)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"R\",\n            negative_sign_before_digits: true,\n            thousands_separator: \" \",\n            decimal_separator: \",\",\n            allow_negative_sign_placeholder: true,\n          },\n        ],\n        valid: [\n          \"123 456,78\",\n          \"-10 123\",\n          \"R-10 123\",\n          \"R 6 954 231\",\n          \"R10,03\",\n          \"10,03\",\n          \"1,39\",\n          \",03\",\n          \"0,10\",\n          \"R10567,01\",\n          \"R0,01\",\n          \"R1 234 567,89\",\n          \"R10 123\",\n          \"R 10 123\",\n          \"R 10123\",\n          \"R-10123\",\n          \"10 123\",\n          \"10123\",\n        ],\n        invalid: [\n          \"1,234\",\n          \"R -10123\",\n          \"R- 10123\",\n          \"R,1\",\n          \",0001\",\n          \"R,001\",\n          \"R0,001\",\n          \"12 34,56\",\n          \"123456 123 123456\",\n          \" 123\",\n          \"- 123\",\n          \"123 \",\n          \"\",\n          \" \",\n          \"R\",\n          \"R- .1\",\n          \"R-\",\n          \"-\",\n          \"-R 10123\",\n          \"R00\",\n          \"R -\",\n          \"-R\",\n        ],\n      });\n\n      // -€ ##.###,## (it-IT)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"€\",\n            thousands_separator: \".\",\n            decimal_separator: \",\",\n            allow_space_after_symbol: true,\n          },\n        ],\n        valid: [\n          \"123.456,78\",\n          \"-123.456,78\",\n          \"€6.954.231\",\n          \"-€6.954.231\",\n          \"€ 896.954.231\",\n          \"-€ 896.954.231\",\n          \"16.954.231\",\n          \"-16.954.231\",\n          \"€10,03\",\n          \"-€10,03\",\n          \"10,03\",\n          \"-10,03\",\n          \"-1,39\",\n          \",03\",\n          \"0,10\",\n          \"-€10567,01\",\n          \"-€ 10567,01\",\n          \"€ 0,01\",\n          \"€1.234.567,89\",\n          \"€10.123\",\n          \"10.123\",\n          \"-€10.123\",\n          \"€ 10.123\",\n          \"€10.123\",\n          \"€ 10123\",\n          \"10.123\",\n          \"-10123\",\n        ],\n        invalid: [\n          \"1,234\",\n          \"€ 1,1\",\n          \"50#,50\",\n          \"123,@€ \",\n          \"€€500\",\n          \",0001\",\n          \"€ ,001\",\n          \"€0,001\",\n          \"12.34,56\",\n          \"123456.123.123456\",\n          \"€123€\",\n          \"\",\n          \" \",\n          \"€\",\n          \" €\",\n          \"€ \",\n          \"€€\",\n          \" 123\",\n          \"- 123\",\n          \".123\",\n          \"-€.123\",\n          \"123 \",\n          \"€-\",\n          \"- €\",\n          \"€ - \",\n          \"-\",\n          \"- \",\n          \"-€\",\n        ],\n      });\n\n      // -##.###,## € (el-GR)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"€\",\n            thousands_separator: \".\",\n            symbol_after_digits: true,\n            decimal_separator: \",\",\n            allow_space_after_digits: true,\n          },\n        ],\n        valid: [\n          \"123.456,78\",\n          \"-123.456,78\",\n          \"6.954.231 €\",\n          \"-6.954.231 €\",\n          \"896.954.231\",\n          \"-896.954.231\",\n          \"16.954.231\",\n          \"-16.954.231\",\n          \"10,03€\",\n          \"-10,03€\",\n          \"10,03\",\n          \"-10,03\",\n          \"1,39\",\n          \",03\",\n          \"-,03\",\n          \"-,03 €\",\n          \"-,03€\",\n          \"0,10\",\n          \"10567,01€\",\n          \"0,01 €\",\n          \"1.234.567,89€\",\n          \"10.123€\",\n          \"10.123\",\n          \"10.123€\",\n          \"10.123 €\",\n          \"10123 €\",\n          \"10.123\",\n          \"10123\",\n        ],\n        invalid: [\n          \"1,234\",\n          \"1,1 €\",\n          \",0001\",\n          \",001 €\",\n          \"0,001€\",\n          \"12.34,56\",\n          \"123456.123.123456\",\n          \"€123€\",\n          \"\",\n          \" \",\n          \"€\",\n          \" €\",\n          \"€ \",\n          \" 123\",\n          \"- 123\",\n          \".123\",\n          \"-.123€\",\n          \"-.123 €\",\n          \"123 \",\n          \"-€\",\n          \"- €\",\n          \"-\",\n          \"- \",\n        ],\n      });\n\n      // kr. -##.###,## (da-DK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"kr.\",\n            negative_sign_before_digits: true,\n            thousands_separator: \".\",\n            decimal_separator: \",\",\n            allow_space_after_symbol: true,\n          },\n        ],\n        valid: [\n          \"123.456,78\",\n          \"-10.123\",\n          \"kr. -10.123\",\n          \"kr.-10.123\",\n          \"kr. 6.954.231\",\n          \"kr.10,03\",\n          \"kr. -10,03\",\n          \"10,03\",\n          \"1,39\",\n          \",03\",\n          \"0,10\",\n          \"kr. 10567,01\",\n          \"kr. 0,01\",\n          \"kr. 1.234.567,89\",\n          \"kr. -1.234.567,89\",\n          \"10.123\",\n          \"kr. 10.123\",\n          \"kr.10.123\",\n          \"10123\",\n          \"10.123\",\n          \"kr.-10123\",\n        ],\n        invalid: [\n          \"1,234\",\n          \"kr.  -10123\",\n          \"kr.,1\",\n          \",0001\",\n          \"kr. ,001\",\n          \"kr.0,001\",\n          \"12.34,56\",\n          \"123456.123.123456\",\n          \".123\",\n          \"kr.-.123\",\n          \"kr. -.123\",\n          \"- 123\",\n          \"123 \",\n          \"\",\n          \" \",\n          \"kr.\",\n          \" kr.\",\n          \"kr. \",\n          \"kr.-\",\n          \"kr. -\",\n          \"kr. - \",\n          \" - \",\n          \"-\",\n          \"- kr.\",\n          \"-kr.\",\n        ],\n      });\n\n      // kr. ##.###,## with no negatives (da-DK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"kr.\",\n            allow_negatives: false,\n            negative_sign_before_digits: true,\n            thousands_separator: \".\",\n            decimal_separator: \",\",\n            allow_space_after_symbol: true,\n          },\n        ],\n        valid: [\n          \"123.456,78\",\n          \"10.123\",\n          \"kr. 10.123\",\n          \"kr.10.123\",\n          \"kr. 6.954.231\",\n          \"kr.10,03\",\n          \"kr. 10,03\",\n          \"10,03\",\n          \"1,39\",\n          \",03\",\n          \"0,10\",\n          \"kr. 10567,01\",\n          \"kr. 0,01\",\n          \"kr. 1.234.567,89\",\n          \"kr.1.234.567,89\",\n          \"10.123\",\n          \"kr. 10.123\",\n          \"kr.10.123\",\n          \"10123\",\n          \"10.123\",\n          \"kr.10123\",\n        ],\n        invalid: [\n          \"1,234\",\n          \"-10.123\",\n          \"kr. -10.123\",\n          \"kr. -1.234.567,89\",\n          \"kr.-10123\",\n          \"kr.  -10123\",\n          \"kr.-10.123\",\n          \"kr. -10,03\",\n          \"kr.,1\",\n          \",0001\",\n          \"kr. ,001\",\n          \"kr.0,001\",\n          \"12.34,56\",\n          \"123456.123.123456\",\n          \".123\",\n          \"kr.-.123\",\n          \"kr. -.123\",\n          \"- 123\",\n          \"123 \",\n          \"\",\n          \" \",\n          \"kr.\",\n          \" kr.\",\n          \"kr. \",\n          \"kr.-\",\n          \"kr. -\",\n          \"kr. - \",\n          \" - \",\n          \"-\",\n          \"- kr.\",\n          \"-kr.\",\n        ],\n      });\n\n      // ($##,###.##) (en-US, en-HK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            parens_for_negatives: true,\n          },\n        ],\n        valid: [\n          \"1,234\",\n          \"(1,234)\",\n          \"($6,954,231)\",\n          \"$10.03\",\n          \"(10.03)\",\n          \"($10.03)\",\n          \"1.39\",\n          \".03\",\n          \"(.03)\",\n          \"($.03)\",\n          \"0.10\",\n          \"$10567.01\",\n          \"($0.01)\",\n          \"$1,234,567.89\",\n          \"$10,123\",\n          \"(10,123)\",\n          \"10123\",\n        ],\n        invalid: [\n          \"1.234\",\n          \"($1.1)\",\n          \"-$1.10\",\n          \"$ 32.50\",\n          \"500$\",\n          \".0001\",\n          \"$.001\",\n          \"($0.001)\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"( 123)\",\n          \",123\",\n          \"$-,123\",\n          \"\",\n          \" \",\n          \"  \",\n          \"   \",\n          \"$\",\n          \"$ \",\n          \" $\",\n          \" 123\",\n          \"(123) \",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$ - \",\n          \"$- \",\n          \" - \",\n          \"-\",\n          \"- $\",\n          \"-$\",\n          \"()\",\n          \"( )\",\n          \"(  -)\",\n          \"(  - )\",\n          \"(  -  )\",\n          \"(-)\",\n          \"(-$)\",\n        ],\n      });\n      // $##,###.## with no negatives (en-US, en-CA, en-AU, en-HK)\n      test({\n        validator: \"isCurrency\",\n        args: [{ allow_negatives: false }],\n        valid: [\n          \"$10,123.45\",\n          \"$10123.45\",\n          \"10,123.45\",\n          \"10123.45\",\n          \"10,123\",\n          \"1,123,456\",\n          \"1123456\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"$0.10\",\n          \"$100,234,567.89\",\n          \"$10,123\",\n          \"10,123\",\n        ],\n        invalid: [\n          \"1.234\",\n          \"-1.234\",\n          \"-10123\",\n          \"-$0.01\",\n          \"-$.99\",\n          \"$1.1\",\n          \"-$1.1\",\n          \"$ 32.50\",\n          \"500$\",\n          \".0001\",\n          \"$.001\",\n          \"$0.001\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"-123456,123,123456\",\n          \"123,4\",\n          \",123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"- $\",\n          \"-$10,123.45\",\n        ],\n      });\n\n      //  R$ ##,###.## (pt_BR)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"R$\",\n            require_symbol: true,\n            allow_space_after_symbol: true,\n            symbol_after_digits: false,\n            thousands_separator: \".\",\n            decimal_separator: \",\",\n          },\n        ],\n        valid: [\"R$ 1.400,00\", \"R$ 400,00\"],\n        invalid: [\"$ 1.400,00\", \"$R 1.400,00\"],\n      });\n    });\n\n    it(\"should validate Ethereum addresses\", () => {\n      test({\n        validator: \"isEthereumAddress\",\n        valid: [\n          \"0x0000000000000000000000000000000000000001\",\n          \"0x683E07492fBDfDA84457C16546ac3f433BFaa128\",\n          \"0x88dA6B6a8D3590e88E0FcadD5CEC56A7C9478319\",\n          \"0x8a718a84ee7B1621E63E680371e0C03C417cCaF6\",\n          \"0xFCb5AFB808b5679b4911230Aa41FfCD0cd335b42\",\n        ],\n        invalid: [\n          \"0xGHIJK05pwm37asdf5555QWERZCXV2345AoEuIdHt\",\n          \"0xFCb5AFB808b5679b4911230Aa41FfCD0cd335b422222\",\n          \"0xFCb5AFB808b5679b4911230Aa41FfCD0cd33\",\n          \"0b0110100001100101011011000110110001101111\",\n          \"683E07492fBDfDA84457C16546ac3f433BFaa128\",\n          \"1C6o5CDkLxjsVpnLSuqRs1UBFozXLEwYvU\",\n        ],\n      });\n    });\n\n    it(\"should validate Bitcoin addresses\", () => {\n      test({\n        validator: \"isBtcAddress\",\n        valid: [\n          \"1MUz4VMYui5qY1mxUiG8BQ1Luv6tqkvaiL\",\n          \"mucFNhKMYoBQYUAEsrFVscQ1YaFQPekBpg\",\n          \"3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy\",\n          \"2NFUBBRcTJbYc1D4HSCbJhKZp6YCV4PQFpQ\",\n          \"bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq\",\n          \"14qViLJfdGaP4EeHnDyJbEGQysnCpwk3gd\",\n          \"35bSzXvRKLpHsHMrzb82f617cV4Srnt7hS\",\n          \"17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhemt\",\n          \"bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4\",\n          \"tb1qxhkl607frtvjsy9nlyeg03lf6fsq947pl2pe82\",\n          \"bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297\",\n          \"tb1pzpelffrdh9ptpaqnurwx30dlewqv57rcxfeetp86hsssk30p4cws38tr9y\",\n        ],\n        invalid: [\n          \"3J98t1WpEZ73CNmQviecrnyiWrnqh0WNL0\",\n          \"3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLo\",\n          \"3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLI\",\n          \"3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLl\",\n          \"4J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy\",\n          \"0x56F0B8A998425c53c75C4A303D4eF987533c5597\",\n          \"pp8skudq3x5hzw8ew7vzsw8tn4k8wxsqsv0lt0mf3g\",\n          \"17VZNX1SN5NlKa8UQFxwQbFeFc3iqRYhem\",\n          \"BC1QW508D6QEJXTDG4Y5R3ZARVAYR0C5XW7KV8F3T4\",\n          \"bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3291\",\n          \"bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329b\",\n          \"bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329i\",\n          \"bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329o\",\n          \"BC1P5D7RJQ7G6RDK2YHZKS9SMLAQTEDR4DEKQ08GE8ZTWAC72SFR9RUSXG3297\",\n          \"TB1PZPELFFRDH9PTPAQNURWX30DLEWQV57RCXFEETP86HSSSK30P4CWS38TR9Y\",\n        ],\n      });\n    });\n\n    it(\"should validate booleans\", () => {\n      test({\n        validator: \"isBoolean\",\n        valid: [\"true\", \"false\", \"0\", \"1\"],\n        invalid: [\"1.0\", \"0.0\", \"true \", \"False\", \"True\", \"yes\"],\n      });\n    });\n\n    it(\"should validate booleans with option loose set to true\", () => {\n      test({\n        validator: \"isBoolean\",\n        args: [{ loose: true }],\n        valid: [\n          \"true\",\n          \"True\",\n          \"TRUE\",\n          \"false\",\n          \"False\",\n          \"FALSE\",\n          \"0\",\n          \"1\",\n          \"yes\",\n          \"Yes\",\n          \"YES\",\n          \"no\",\n          \"No\",\n          \"NO\",\n        ],\n        invalid: [\"1.0\", \"0.0\", \"true \", \" false\"],\n      });\n    });\n\n    it(\"should validate ISO 639-1 language codes\", () => {\n      test({\n        validator: \"isISO6391\",\n        valid: [\"ay\", \"az\", \"ba\", \"be\", \"bg\"],\n        invalid: [\"aj\", \"al\", \"pe\", \"pf\", \"abc\", \"123\", \"\"],\n      });\n    });\n\n    const validISO8601 = [\n      \"2009-12T12:34\",\n      \"2009\",\n      \"2009-05-19\",\n      \"2009-05-19\",\n      \"20090519\",\n      \"2009123\",\n      \"2009-05\",\n      \"2009-123\",\n      \"2009-222\",\n      \"2009-001\",\n      \"2009-W01-1\",\n      \"2009-W51-1\",\n      \"2009-W511\",\n      \"2009-W33\",\n      \"2009W511\",\n      \"2009-05-19\",\n      \"2009-05-19 00:00\",\n      \"2009-05-19 14\",\n      \"2009-05-19 14:31\",\n      \"2009-05-19 14:39:22\",\n      \"2009-05-19T14:39Z\",\n      \"2009-W21-2\",\n      \"2009-W21-2T01:22\",\n      \"2009-139\",\n      \"2009-05-19 14:39:22-06:00\",\n      \"2009-05-19 14:39:22+0600\",\n      \"2009-05-19 14:39:22-01\",\n      \"20090621T0545Z\",\n      \"2007-04-06T00:00\",\n      \"2007-04-05T24:00\",\n      \"2010-02-18T16:23:48.5\",\n      \"2010-02-18T16:23:48,444\",\n      \"2010-02-18T16:23:48,3-06:00\",\n      \"2010-02-18T16:23.4\",\n      \"2010-02-18T16:23,25\",\n      \"2010-02-18T16:23.33+0600\",\n      \"2010-02-18T16.23334444\",\n      \"2010-02-18T16,2283\",\n      \"2009-05-19 143922.500\",\n      \"2009-05-19 1439,55\",\n      \"2009-10-10\",\n      \"2020-366\",\n      \"2000-366\",\n    ];\n\n    const invalidISO8601 = [\n      \"200905\",\n      \"2009367\",\n      \"2009-\",\n      \"2007-04-05T24:50\",\n      \"2009-000\",\n      \"2009-M511\",\n      \"2009M511\",\n      \"2009-05-19T14a39r\",\n      \"2009-05-19T14:3924\",\n      \"2009-0519\",\n      \"2009-05-1914:39\",\n      \"2009-05-19 14:\",\n      \"2009-05-19r14:39\",\n      \"2009-05-19 14a39a22\",\n      \"200912-01\",\n      \"2009-05-19 14:39:22+06a00\",\n      \"2009-05-19 146922.500\",\n      \"2010-02-18T16.5:23.35:48\",\n      \"2010-02-18T16:23.35:48\",\n      \"2010-02-18T16:23.35:48.45\",\n      \"2009-05-19 14.5.44\",\n      \"2010-02-18T16:23.33.600\",\n      \"2010-02-18T16,25:23:48,444\",\n      \"2010-13-1\",\n      \"nonsense2021-01-01T00:00:00Z\",\n      \"2021-01-01T00:00:00Znonsense\",\n    ];\n\n    it(\"should validate ISO 8601 dates\", () => {\n      // from http://www.pelagodesign.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/\n      test({\n        validator: \"isISO8601\",\n        valid: validISO8601,\n        invalid: invalidISO8601,\n      });\n    });\n\n    it(\"should validate ISO 8601 dates, with strict = true (regression)\", () => {\n      test({\n        validator: \"isISO8601\",\n        args: [{ strict: true }],\n        valid: validISO8601,\n        invalid: invalidISO8601,\n      });\n    });\n\n    it(\"should validate ISO 8601 dates, with strict = true\", () => {\n      test({\n        validator: \"isISO8601\",\n        args: [{ strict: true }],\n        valid: [\"2000-02-29\", \"2009-123\", \"2009-222\", \"2020-366\", \"2400-366\"],\n        invalid: [\"2010-02-30\", \"2009-02-29\", \"2009-366\", \"2019-02-31\"],\n      });\n    });\n\n    it(\"should validate ISO 8601 dates, with strictSeparator = true\", () => {\n      test({\n        validator: \"isISO8601\",\n        args: [{ strictSeparator: true }],\n        valid: [\n          \"2009-12T12:34\",\n          \"2009\",\n          \"2009-05-19\",\n          \"2009-05-19\",\n          \"20090519\",\n          \"2009123\",\n          \"2009-05\",\n          \"2009-123\",\n          \"2009-222\",\n          \"2009-001\",\n          \"2009-W01-1\",\n          \"2009-W51-1\",\n          \"2009-W511\",\n          \"2009-W33\",\n          \"2009W511\",\n          \"2009-05-19\",\n          \"2009-05-19T14:39Z\",\n          \"2009-W21-2\",\n          \"2009-W21-2T01:22\",\n          \"2009-139\",\n          \"20090621T0545Z\",\n          \"2007-04-06T00:00\",\n          \"2007-04-05T24:00\",\n          \"2010-02-18T16:23:48.5\",\n          \"2010-02-18T16:23:48,444\",\n          \"2010-02-18T16:23:48,3-06:00\",\n          \"2010-02-18T16:23.4\",\n          \"2010-02-18T16:23,25\",\n          \"2010-02-18T16:23.33+0600\",\n          \"2010-02-18T16.23334444\",\n          \"2010-02-18T16,2283\",\n          \"2009-10-10\",\n          \"2020-366\",\n          \"2000-366\",\n        ],\n        invalid: [\n          \"200905\",\n          \"2009367\",\n          \"2009-\",\n          \"2007-04-05T24:50\",\n          \"2009-000\",\n          \"2009-M511\",\n          \"2009M511\",\n          \"2009-05-19T14a39r\",\n          \"2009-05-19T14:3924\",\n          \"2009-0519\",\n          \"2009-05-1914:39\",\n          \"2009-05-19 14:\",\n          \"2009-05-19r14:39\",\n          \"2009-05-19 14a39a22\",\n          \"200912-01\",\n          \"2009-05-19 14:39:22+06a00\",\n          \"2009-05-19 146922.500\",\n          \"2010-02-18T16.5:23.35:48\",\n          \"2010-02-18T16:23.35:48\",\n          \"2010-02-18T16:23.35:48.45\",\n          \"2009-05-19 14.5.44\",\n          \"2010-02-18T16:23.33.600\",\n          \"2010-02-18T16,25:23:48,444\",\n          \"2010-13-1\",\n          \"2009-05-19 00:00\",\n          // Previously valid cases\n          \"2009-05-19 14\",\n          \"2009-05-19 14:31\",\n          \"2009-05-19 14:39:22\",\n          \"2009-05-19 14:39:22-06:00\",\n          \"2009-05-19 14:39:22+0600\",\n          \"2009-05-19 14:39:22-01\",\n        ],\n      });\n    });\n\n    it(\"should validate ISO 8601 dates, with strict = true and strictSeparator = true (regression)\", () => {\n      test({\n        validator: \"isISO8601\",\n        args: [{ strict: true, strictSeparator: true }],\n        valid: [\"2000-02-29\", \"2009-123\", \"2009-222\", \"2020-366\", \"2400-366\"],\n        invalid: [\n          \"2010-02-30\",\n          \"2009-02-29\",\n          \"2009-366\",\n          \"2019-02-31\",\n          \"2009-05-19 14\",\n          \"2009-05-19 14:31\",\n          \"2009-05-19 14:39:22\",\n          \"2009-05-19 14:39:22-06:00\",\n          \"2009-05-19 14:39:22+0600\",\n          \"2009-05-19 14:39:22-01\",\n        ],\n      });\n    });\n\n    it(\"should validate ISO 15924 script codes\", () => {\n      test({\n        validator: \"isISO15924\",\n        valid: [\"Adlm\", \"Bass\", \"Copt\", \"Dsrt\", \"Egyd\", \"Latn\", \"Zzzz\"],\n        invalid: [\"\", \"arab\", \"zzzz\", \"Qaby\", \"Lati\"],\n      });\n    });\n\n    it(\"should validate RFC 3339 dates\", () => {\n      test({\n        validator: \"isRFC3339\",\n        valid: [\n          \"2009-05-19 14:39:22-06:00\",\n          \"2009-05-19 14:39:22+06:00\",\n          \"2009-05-19 14:39:22Z\",\n          \"2009-05-19T14:39:22-06:00\",\n          \"2009-05-19T14:39:22Z\",\n          \"2010-02-18T16:23:48.3-06:00\",\n          \"2010-02-18t16:23:33+06:00\",\n          \"2010-02-18t16:23:33+06:00\",\n          \"2010-02-18t16:12:23.23334444z\",\n          \"2010-02-18T16:23:55.2283Z\",\n          \"2009-05-19 14:39:22.500Z\",\n          \"2009-05-19 14:39:55Z\",\n          \"2009-05-31 14:39:55Z\",\n          \"2009-05-31 14:53:60Z\",\n          \"2010-02-18t00:23:23.33+06:00\",\n          \"2010-02-18t00:23:32.33+00:00\",\n          \"2010-02-18t00:23:32.33+23:00\",\n        ],\n        invalid: [\n          \"2010-02-18t00:23:32.33+24:00\",\n          \"2009-05-31 14:60:55Z\",\n          \"2010-02-18t24:23.33+0600\",\n          \"2009-05-00 1439,55Z\",\n          \"2009-13-19 14:39:22-06:00\",\n          \"2009-05-00 14:39:22+0600\",\n          \"2009-00-1 14:39:22Z\",\n          \"2009-05-19T14:39:22\",\n          \"nonsense2021-01-01T00:00:00Z\",\n          \"2021-01-01T00:00:00Znonsense\",\n        ],\n      });\n    });\n\n    it(\"should validate ISO 3166-1 alpha 2 country codes\", () => {\n      // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n      test({\n        validator: \"isISO31661Alpha2\",\n        valid: [\n          \"FR\",\n          \"fR\",\n          \"GB\",\n          \"PT\",\n          \"CM\",\n          \"JP\",\n          \"PM\",\n          \"ZW\",\n          \"MM\",\n          \"cc\",\n          \"GG\",\n        ],\n        invalid: [\"\", \"FRA\", \"AA\", \"PI\", \"RP\", \"WV\", \"WL\", \"UK\", \"ZZ\"],\n      });\n    });\n\n    it(\"should validate ISO 3166-1 alpha 3 country codes\", () => {\n      // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3\n      test({\n        validator: \"isISO31661Alpha3\",\n        valid: [\"ABW\", \"HND\", \"KHM\", \"RWA\"],\n        invalid: [\"\", \"FR\", \"fR\", \"GB\", \"PT\", \"CM\", \"JP\", \"PM\", \"ZW\"],\n      });\n    });\n\n    it(\"should validate ISO 3166-1 numeric country codes\", () => {\n      // from https://en.wikipedia.org/wiki/ISO_3166-1_numeric\n      test({\n        validator: \"isISO31661Numeric\",\n        valid: [\n          \"076\",\n          \"208\",\n          \"276\",\n          \"348\",\n          \"380\",\n          \"410\",\n          \"440\",\n          \"528\",\n          \"554\",\n          \"826\",\n        ],\n        invalid: [\n          \"\",\n          \"NL\",\n          \"NLD\",\n          \"002\",\n          \"197\",\n          \"249\",\n          \"569\",\n          \"810\",\n          \"900\",\n          \"999\",\n        ],\n      });\n    });\n\n    it(\"should validate ISO 4217 corrency codes\", () => {\n      // from https://en.wikipedia.org/wiki/ISO_4217\n      test({\n        validator: \"isISO4217\",\n        valid: [\n          \"AED\",\n          \"aed\",\n          \"AUD\",\n          \"CUP\",\n          \"EUR\",\n          \"GBP\",\n          \"LYD\",\n          \"MYR\",\n          \"SGD\",\n          \"SLE\",\n          \"USD\",\n          \"VED\",\n          \"SLE\",\n        ],\n        invalid: [\n          \"\",\n          \"$\",\n          \"US\",\n          \"us\",\n          \"AAA\",\n          \"aaa\",\n          \"RWA\",\n          \"EURO\",\n          \"euro\",\n          \"HRK\",\n          \"CUC\",\n        ],\n      });\n    });\n\n    it(\"should validate whitelisted characters\", () => {\n      test({\n        validator: \"isWhitelisted\",\n        args: [\"abcdefghijklmnopqrstuvwxyz-\"],\n        valid: [\"foo\", \"foobar\", \"baz-foo\"],\n        invalid: [\"foo bar\", \"fo.bar\", \"türkçe\"],\n      });\n    });\n\n    it(\"should error on non-string input\", () => {\n      test({\n        validator: \"isEmpty\",\n        error: [undefined, null, [], NaN],\n      });\n    });\n\n    it(\"should validate dataURI\", () => {\n      /* eslint-disable max-len */\n      test({\n        validator: \"isDataURI\",\n        valid: [\n          \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC\",\n          \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC\",\n          \"data:application/media_control+xml;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC\",\n          \"   data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC   \",\n          \"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%3E%3Crect%20fill%3D%22%2300B1FF%22%20width%3D%22100%22%20height%3D%22100%22%2F%3E%3C%2Fsvg%3E\",\n          \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIj48cmVjdCBmaWxsPSIjMDBCMUZGIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPjwvc3ZnPg==\",\n          \" data:,Hello%2C%20World!\",\n          \" data:,Hello World!\",\n          \" data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D\",\n          \" data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E\",\n          \"data:,A%20brief%20note\",\n          \"data:text/html;charset=US-ASCII,%3Ch1%3EHello!%3C%2Fh1%3E\",\n          \"data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,dGVzdC5kb2N4\",\n        ],\n        invalid: [\n          \"dataxbase64\",\n          \"data:HelloWorld\",\n          \"data:,A%20brief%20invalid%20[note\",\n          \"file:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D\",\n          \"data:text/html;charset=,%3Ch1%3EHello!%3C%2Fh1%3E\",\n          \"data:text/html;charset,%3Ch1%3EHello!%3C%2Fh1%3E\",\n          \"data:base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC\",\n          \"\",\n          \"http://wikipedia.org\",\n          \"base64\",\n          \"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC\",\n        ],\n      });\n      /* eslint-enable max-len */\n    });\n\n    it(\"should validate magnetURI\", () => {\n      /* eslint-disable max-len */\n      test({\n        validator: \"isMagnetURI\",\n        valid: [\n          \"magnet:?xt.1=urn:sha1:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456&xt.2=urn:sha1:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456\",\n          \"magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=helloword2000&tr=udp://helloworld:1337/announce\",\n          \"magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=foo\",\n          \"magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=&tr=&nonexisting=hello world\",\n          \"magnet:?xt=urn:md5:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456\",\n          \"magnet:?xt=urn:tree:tiger:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456\",\n          \"magnet:?xt=urn:ed2k:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magnet:?tr=udp://helloworld:1337/announce&xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magnet:?xt=urn:btmh:1220caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e\",\n        ],\n        invalid: [\n          \":?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magneta:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magnet:?xt=uarn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magnet:?xt=urn:btihz\",\n          \"magnet::?xt=urn:btih:UHWY2892JNEJ2GTEYOMDNU67E8ICGICYE92JDUGH\",\n          \"magnet:?xt:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n          \"magnet:?xt:urn:nonexisting:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magnet:?xt.2=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magnet:?xt=urn:ed2k:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890123456789ABCD\",\n          \"magnet:?xt=urn:btmh:1120caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e\",\n          \"magnet:?ttxt=urn:btmh:1220caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e\",\n        ],\n      });\n      /* eslint-enable max-len */\n    });\n\n    it(\"should validate LatLong\", () => {\n      test({\n        validator: \"isLatLong\",\n        valid: [\n          \"(-17.738223, 85.605469)\",\n          \"(-12.3456789, +12.3456789)\",\n          \"(-60.978437, -0.175781)\",\n          \"(77.719772, -37.529297)\",\n          \"(7.264394, 165.058594)\",\n          \"0.955766, -19.863281\",\n          \"(31.269161,164.355469)\",\n          \"+12.3456789, -12.3456789\",\n          \"-15.379543, -137.285156\",\n          \"(11.770570, -162.949219)\",\n          \"-55.034319, 113.027344\",\n          \"58.025555, 36.738281\",\n          \"55.720923,-28.652344\",\n          \"-90.00000,-180.00000\",\n          \"(-71, -146)\",\n          \"(-71.616864, -146.616864)\",\n          \"-0.55, +0.22\",\n          \"90, 180\",\n          \"+90, -180\",\n          \"-90,+180\",\n          \"90,180\",\n          \"0, 0\",\n        ],\n        invalid: [\n          \"(020.000000, 010.000000000)\",\n          \"89.9999999989, 360.0000000\",\n          \"90.1000000, 180.000000\",\n          \"+90.000000, -180.00001\",\n          \"090.0000, 0180.0000\",\n          \"126, -158\",\n          \"(-126.400010, -158.400010)\",\n          \"-95, -96\",\n          \"-95.738043, -96.738043\",\n          \"137, -148\",\n          \"(-137.5942, -148.5942)\",\n          \"(-120, -203)\",\n          \"(-119, -196)\",\n          \"+119.821728, -196.821728\",\n          \"(-110, -223)\",\n          \"-110.369532, 223.369532\",\n          \"(-120.969949, +203.969949)\",\n          \"-116, -126\",\n          \"-116.894222, -126.894222\",\n          \"-112, -160\",\n          \"-112.96381, -160.96381\",\n          \"-90., -180.\",\n          \"+90.1, -180.1\",\n          \"(-17.738223, 85.605469\",\n          \"0.955766, -19.863281)\",\n          \"+,-\",\n          \"(,)\",\n          \",\",\n          \" \",\n        ],\n      });\n\n      test({\n        validator: \"isLatLong\",\n        args: [\n          {\n            checkDMS: true,\n          },\n        ],\n        valid: [\n          \"40° 26′ 46″ N, 79° 58′ 56″ W\",\n          \"40° 26′ 46″ S, 79° 58′ 56″ E\",\n          \"90° 0′ 0″ S, 180° 0′ 0″ E\",\n          \"40° 26′ 45.9996″ N, 79° 58′ 55.2″ E\",\n          \"40° 26′ 46″ n, 79° 58′ 56″ w\",\n          \"40°26′46″s, 79°58′56″e\",\n          \"11° 0′ 0.005″ S, 180° 0′ 0″ E\",\n          \"40°26′45.9996″N, 79°58′55.2″E\",\n        ],\n        invalid: [\n          \"100° 26′ 46″ N, 79° 70′ 56″ W\",\n          \"40° 89′ 46″ S, 79° 58′ 100″ E\",\n          \"40° 26.445′ 45″ N, 79° 58′ 55.2″ E\",\n          \"40° 46″ N, 79° 58′ 56″ W\",\n        ],\n      });\n    });\n\n    it(\"should validate postal code\", () => {\n      const fixtures = [\n        {\n          locale: \"AU\",\n          valid: [\"4000\", \"2620\", \"3000\", \"2017\", \"0800\"],\n        },\n        {\n          locale: \"BD\",\n          valid: [\n            \"1000\",\n            \"1200\",\n            \"1300\",\n            \"1400\",\n            \"1500\",\n            \"2000\",\n            \"3000\",\n            \"4000\",\n            \"5000\",\n            \"6000\",\n            \"7000\",\n            \"8000\",\n            \"9000\",\n            \"9400\",\n            \"9499\",\n          ],\n          invalid: [\n            \"0999\",\n            \"9500\",\n            \"10000\",\n            \"12345\",\n            \"123\",\n            \"123456\",\n            \"abcd\",\n            \"123a\",\n            \"a123\",\n            \"12 34\",\n            \"12-34\",\n          ],\n        },\n        {\n          locale: \"BY\",\n          valid: [\"225320\", \"211120\", \"247710\", \"231960\"],\n          invalid: [\"test 225320\", \"211120 test\", \"317543\", \"267946\"],\n        },\n        {\n          locale: \"CA\",\n          valid: [\n            \"L4T 0A5\",\n            \"G1A-0A2\",\n            \"A1A 1A1\",\n            \"X0A-0H0\",\n            \"V5K 0A1\",\n            \"A1C 3S4\",\n            \"A1C3S4\",\n            \"a1c 3s4\",\n            \"V9A 7N2\",\n            \"B3K 5X5\",\n            \"K8N 5W6\",\n            \"K1A 0B1\",\n            \"B1Z 0B9\",\n          ],\n          invalid: [\n            \"        \",\n            \"invalid value\",\n            \"a1a1a\",\n            \"A1A  1A1\",\n            \"K1A 0D1\",\n            \"W1A 0B1\",\n            \"Z1A 0B1\",\n          ],\n        },\n        {\n          locale: \"CO\",\n          valid: [\"050034\", \"110221\", \"441029\", \"910001\"],\n          invalid: [\"11001\", \"000000\", \"109999\", \"329999\"],\n        },\n        {\n          locale: \"ES\",\n          valid: [\"01001\", \"52999\", \"27880\"],\n          invalid: [\"123\", \"1234\", \"53000\", \"052999\", \"0123\", \"abcde\"],\n        },\n        {\n          locale: \"JP\",\n          valid: [\"135-0000\", \"874-8577\", \"669-1161\", \"470-0156\", \"672-8031\"],\n        },\n        {\n          locale: \"GR\",\n          valid: [\"022 93\", \"29934\", \"90293\", \"299 42\", \"94944\"],\n        },\n        {\n          locale: \"GB\",\n          valid: [\n            \"TW8 9GS\",\n            \"BS98 1TL\",\n            \"DE99 3GG\",\n            \"DE55 4SW\",\n            \"DH98 1BT\",\n            \"DH99 1NS\",\n            \"GIR0aa\",\n            \"SA99\",\n            \"W1N 4DJ\",\n            \"AA9A 9AA\",\n            \"AA99 9AA\",\n            \"BS98 1TL\",\n            \"DE993GG\",\n          ],\n        },\n        {\n          locale: \"FR\",\n          valid: [\"75008\", \"44522\", \"38499\", \"39940\", \"01000\"],\n          invalid: [\"44 522\", \"38 499\", \"96000\", \"98025\"],\n        },\n        {\n          locale: \"ID\",\n          valid: [\"10210\", \"40181\", \"55161\", \"60233\"],\n        },\n        {\n          locale: \"IE\",\n          valid: [\"A65 TF12\", \"A6W U9U9\"],\n          invalid: [\n            \"123\",\n            \"75690HG\",\n            \"AW5  TF12\",\n            \"AW5 TF12\",\n            \"756  90HG\",\n            \"A65T F12\",\n            \"O62 O1O2\",\n          ],\n        },\n        {\n          locale: \"IN\",\n          valid: [\"364240\", \"360005\"],\n          invalid: [\n            \"123\",\n            \"012345\",\n            \"011111\",\n            \"101123\",\n            \"291123\",\n            \"351123\",\n            \"541123\",\n            \"551123\",\n            \"651123\",\n            \"661123\",\n            \"861123\",\n            \"871123\",\n            \"881123\",\n            \"891123\",\n          ],\n        },\n        {\n          locale: \"IL\",\n          valid: [\n            \"10200\",\n            \"10292\",\n            \"10300\",\n            \"10329\",\n            \"3885500\",\n            \"4290500\",\n            \"4286000\",\n            \"7080000\",\n          ],\n          invalid: [\n            \"123\",\n            \"012345\",\n            \"011111\",\n            \"101123\",\n            \"291123\",\n            \"351123\",\n            \"541123\",\n            \"551123\",\n            \"651123\",\n            \"661123\",\n            \"861123\",\n            \"871123\",\n            \"881123\",\n            \"891123\",\n          ],\n        },\n        {\n          locale: \"BG\",\n          valid: [\"1000\"],\n        },\n        {\n          locale: \"IR\",\n          valid: [\"4351666456\", \"5614736867\"],\n          invalid: [\n            \"43516 6456\",\n            \"123443516 6456\",\n            \"891123\",\n            \"test 4351666456\",\n            \"4351666456 test\",\n            \"test 4351666456 test\",\n          ],\n        },\n        {\n          locale: \"CZ\",\n          valid: [\"20134\", \"392 90\", \"39919\", \"938 29\", \"39949\"],\n        },\n        {\n          locale: \"NL\",\n          valid: [\"1012 SZ\", \"3432FE\", \"1118 BH\", \"3950IO\", \"3997 GH\"],\n          invalid: [\"1234\", \"0603 JV\", \"5194SA\", \"9164 SD\", \"1841SS\"],\n        },\n        {\n          locale: \"NP\",\n          valid: [\"10811\", \"32600\", \"56806\", \"977\"],\n          invalid: [\"11977\", \"asds\", \"13 32\", \"-977\", \"97765\"],\n        },\n        {\n          locale: \"PL\",\n          valid: [\n            \"47-260\",\n            \"12-930\",\n            \"78-399\",\n            \"39-490\",\n            \"38-483\",\n            \"05-800\",\n            \"54-060\",\n          ],\n        },\n        {\n          locale: \"TW\",\n          valid: [\"360\", \"90312\", \"399\", \"935\", \"38842\", \"546023\"],\n        },\n        {\n          locale: \"LI\",\n          valid: [\"9485\", \"9497\", \"9491\", \"9489\", \"9496\"],\n        },\n        {\n          locale: \"PT\",\n          valid: [\"4829-489\", \"0294-348\", \"8156-392\"],\n        },\n        {\n          locale: \"SE\",\n          valid: [\"12994\", \"284 39\", \"39556\", \"489 39\", \"499 49\"],\n        },\n        {\n          locale: \"AD\",\n          valid: [\n            \"AD100\",\n            \"AD200\",\n            \"AD300\",\n            \"AD400\",\n            \"AD500\",\n            \"AD600\",\n            \"AD700\",\n          ],\n        },\n        {\n          locale: \"UA\",\n          valid: [\"65000\", \"65080\", \"01000\", \"51901\", \"51909\", \"49125\"],\n        },\n        {\n          locale: \"BR\",\n          valid: [\n            \"39100-000\",\n            \"22040-020\",\n            \"39400-152\",\n            \"39100000\",\n            \"22040020\",\n            \"39400152\",\n          ],\n          invalid: [\n            \"79800A12\",\n            \"13165-00\",\n            \"38175-abc\",\n            \"81470-2763\",\n            \"78908\",\n            \"13010|111\",\n          ],\n        },\n        {\n          locale: \"NZ\",\n          valid: [\"7843\", \"3581\", \"0449\", \"0984\", \"4144\"],\n        },\n        {\n          locale: \"PK\",\n          valid: [\"25000\", \"44000\", \"54810\", \"74200\"],\n          invalid: [\"5400\", \"540000\", \"NY540\", \"540CA\", \"540-0\"],\n        },\n        {\n          locale: \"MG\",\n          valid: [\"101\", \"303\", \"407\", \"512\"],\n        },\n        {\n          locale: \"MT\",\n          valid: [\"VLT2345\", \"VLT 2345\", \"ATD1234\", \"MSK8723\"],\n        },\n        {\n          locale: \"MY\",\n          valid: [\"56000\", \"12000\", \"79502\"],\n        },\n        {\n          locale: \"PR\",\n          valid: [\"00979\", \"00631\", \"00786\", \"00987\"],\n        },\n        {\n          locale: \"AZ\",\n          valid: [\"AZ0100\", \"AZ0121\", \"AZ3500\"],\n          invalid: [\"\", \" AZ0100\", \"AZ100\", \"AZ34340\", \"EN2020\", \"AY3030\"],\n        },\n        {\n          locale: \"DO\",\n          valid: [\"12345\"],\n          invalid: [\"A1234\", \"123\", \"123456\"],\n        },\n        {\n          locale: \"HT\",\n          valid: [\"HT1234\"],\n          invalid: [\"HT123\", \"HT12345\", \"AA1234\"],\n        },\n        {\n          locale: \"TH\",\n          valid: [\"10250\", \"72170\", \"12140\"],\n          invalid: [\"T1025\", \"T72170\", \"12140TH\"],\n        },\n        {\n          locale: \"SG\",\n          valid: [\"308215\", \"546080\"],\n        },\n        {\n          locale: \"CN\",\n          valid: [\"150237\", \"100000\"],\n          invalid: [\"141234\", \"386789\", \"ab1234\"],\n        },\n        {\n          locale: \"KR\",\n          valid: [\"17008\", \"339012\"],\n          invalid: [\"1412347\", \"ab1234\"],\n        },\n        {\n          locale: \"LK\",\n          valid: [\"11500\", \"22200\", \"10370\", \"43000\"],\n          invalid: [\"1234\", \"789389\", \"982\"],\n        },\n        {\n          locale: \"BA\",\n          valid: [\"76300\", \"71000\", \"75412\", \"76100\", \"88202\", \"88313\"],\n          invalid: [\"1234\", \"789389\", \"98212\", \"11000\"],\n        },\n      ];\n\n      let allValid = [];\n\n      // Test fixtures\n      fixtures.forEach((fixture) => {\n        if (fixture.valid) allValid = allValid.concat(fixture.valid);\n        test({\n          validator: \"isPostalCode\",\n          valid: fixture.valid,\n          invalid: fixture.invalid,\n          args: [fixture.locale],\n        });\n      });\n\n      // Test generics\n      test({\n        validator: \"isPostalCode\",\n        valid: [\n          ...allValid,\n          \"1234\",\n          \"6900\",\n          \"1292\",\n          \"9400\",\n          \"27616\",\n          \"90210\",\n          \"10001\",\n          \"21201\",\n          \"33142\",\n          \"060623\",\n          \"123456\",\n          \"293940\",\n          \"002920\",\n        ],\n        invalid: [\n          \"asdf\",\n          \"1\",\n          \"ASDFGJKLmZXJtZtesting123\",\n          \"Vml2YW11cyBmZXJtZtesting123\",\n          \"48380480343\",\n          \"29923-329393-2324\",\n          \"4294924224\",\n          \"13\",\n        ],\n        args: [\"any\"],\n      });\n    });\n\n    it(\"should error on invalid locale\", () => {\n      test({\n        validator: \"isPostalCode\",\n        args: [\"is-NOT\"],\n        error: [\"293940\", \"1234\"],\n      });\n    });\n\n    it(\"should validate MIME types\", () => {\n      test({\n        validator: \"isMimeType\",\n        valid: [\n          \"application/json\",\n          \"application/xhtml+xml\",\n          \"audio/mp4\",\n          \"image/bmp\",\n          \"font/woff2\",\n          \"message/http\",\n          \"model/vnd.gtw\",\n          \"application/media_control+xml\",\n          \"multipart/form-data\",\n          \"multipart/form-data; boundary=something\",\n          \"multipart/form-data; charset=utf-8; boundary=something\",\n          \"multipart/form-data; boundary=something; charset=utf-8\",\n          'multipart/form-data; boundary=something; charset=\"utf-8\"',\n          'multipart/form-data; boundary=\"something\"; charset=utf-8',\n          'multipart/form-data; boundary=\"something\"; charset=\"utf-8\"',\n          \"text/css\",\n          \"text/plain; charset=utf8\",\n          'Text/HTML;Charset=\"utf-8\"',\n          \"text/html;charset=UTF-8\",\n          \"Text/html;charset=UTF-8\",\n          \"text/html; charset=us-ascii\",\n          \"text/html; charset=us-ascii (Plain text)\",\n          'text/html; charset=\"us-ascii\"',\n          \"video/mp4\",\n        ],\n        invalid: [\n          \"\",\n          \" \",\n          \"/\",\n          \"f/b\",\n          \"application\",\n          \"application\\\\json\",\n          \"application/json/text\",\n          \"application/json; charset=utf-8\",\n          \"audio/mp4; charset=utf-8\",\n          \"image/bmp; charset=utf-8\",\n          \"font/woff2; charset=utf-8\",\n          \"message/http; charset=utf-8\",\n          \"model/vnd.gtw; charset=utf-8\",\n          \"video/mp4; charset=utf-8\",\n        ],\n      });\n    });\n\n    it(\"should validate ISO6346 shipping containerID\", () => {\n      test({\n        validator: \"isISO6346\",\n        valid: [\n          \"HLXU2008419\",\n          \"TGHU7599330\",\n          \"ECMU4657496\",\n          \"MEDU6246078\",\n          \"YMLU2809976\",\n          \"MRKU0046221\",\n          \"EMCU3811879\",\n          \"OOLU8643084\",\n          \"HJCU1922713\",\n          \"QJRZ123456\",\n        ],\n        invalid: [\n          \"OOLU1922713\",\n          \"HJCU1922413\",\n          \"FCUI985619\",\n          \"ECMJ4657496\",\n          \"TBJA7176445\",\n          \"AFFU5962593\",\n        ],\n      });\n    });\n    it(\"should validate ISO6346 shipping containerID\", () => {\n      test({\n        validator: \"isFreightContainerID\",\n        valid: [\n          \"HLXU2008419\",\n          \"TGHU7599330\",\n          \"ECMU4657496\",\n          \"MEDU6246078\",\n          \"YMLU2809976\",\n          \"MRKU0046221\",\n          \"EMCU3811879\",\n          \"OOLU8643084\",\n          \"HJCU1922713\",\n          \"QJRZ123456\",\n        ],\n        invalid: [\n          \"OOLU1922713\",\n          \"HJCU1922413\",\n          \"FCUI985619\",\n          \"ECMJ4657496\",\n          \"TBJA7176445\",\n          \"AFFU5962593\",\n        ],\n      });\n    });\n\n    it(\"should validate ISO6346 shipping container IDs with checksum digit 10 represented as 0\", () => {\n      test({\n        validator: \"isISO6346\",\n        valid: [\n          \"APZU3789870\",\n          \"TEMU1002030\",\n          \"DFSU1704420\",\n          \"CMAU2221480\",\n          \"SEGU5060260\",\n          \"FCIU8939320\",\n          \"TRHU3495670\",\n          \"MEDU3871410\",\n          \"CMAU2184010\",\n          \"TCLU2265970\",\n        ],\n        invalid: [\n          \"APZU3789871\", // Incorrect check digit\n          \"TEMU1002031\",\n          \"DFSU1704421\",\n          \"CMAU2221481\",\n          \"SEGU5060261\",\n        ],\n      });\n    });\n    it(\"should validate ISO6346 shipping container IDs with checksum digit 10 represented as 0\", () => {\n      test({\n        validator: \"isFreightContainerID\",\n        valid: [\n          \"APZU3789870\",\n          \"TEMU1002030\",\n          \"DFSU1704420\",\n          \"CMAU2221480\",\n          \"SEGU5060260\",\n          \"FCIU8939320\",\n          \"TRHU3495670\",\n          \"MEDU3871410\",\n          \"CMAU2184010\",\n          \"TCLU2265970\",\n        ],\n        invalid: [\n          \"APZU3789871\", // Incorrect check digit\n          \"TEMU1002031\",\n          \"DFSU1704421\",\n          \"CMAU2221481\",\n          \"SEGU5060261\",\n        ],\n      });\n    });\n\n    // EU-UK valid numbers sourced from https://ec.europa.eu/taxation_customs/tin/specs/FS-TIN%20Algorithms-Public.docx or constructed by @tplessas.\n    it(\"should validate taxID\", () => {\n      test({\n        validator: \"isTaxID\",\n        args: [\"bg-BG\"],\n        valid: [\n          \"7501010010\",\n          \"0101010012\",\n          \"0111010010\",\n          \"7521010014\",\n          \"7541010019\",\n        ],\n        invalid: [\n          \"750101001\",\n          \"75010100101\",\n          \"75-01010/01 0\",\n          \"7521320010\",\n          \"7501010019\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"cs-CZ\"],\n        valid: [\n          \"530121999\",\n          \"530121/999\",\n          \"530121/9990\",\n          \"5301219990\",\n          \"1602295134\",\n          \"5451219994\",\n          \"0424175466\",\n          \"0532175468\",\n          \"7159079940\",\n        ],\n        invalid: [\n          \"53-0121 999\",\n          \"530121000\",\n          \"960121999\",\n          \"0124175466\",\n          \"0472301754\",\n          \"1975116400\",\n          \"7159079945\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"de-AT\"],\n        valid: [\"931736581\", \"93-173/6581\", \"93--173/6581\"],\n        invalid: [\"999999999\", \"93 173 6581\", \"93-173/65811\", \"93-173/658\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"de-DE\"],\n        valid: [\n          \"26954371827\",\n          \"86095742719\",\n          \"65929970489\",\n          \"79608434120\",\n          \"659/299/7048/9\",\n        ],\n        invalid: [\n          \"26954371828\",\n          \"86095752719\",\n          \"8609575271\",\n          \"860957527190\",\n          \"65299970489\",\n          \"65999970489\",\n          \"6592997048-9\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"dk-DK\"],\n        valid: [\n          \"010111-1113\",\n          \"0101110117\",\n          \"2110084008\",\n          \"2110489008\",\n          \"2110595002\",\n          \"2110197007\",\n          \"0101110117\",\n          \"0101110230\",\n        ],\n        invalid: [\n          \"010111/1113\",\n          \"010111111\",\n          \"01011111133\",\n          \"2110485008\",\n          \"2902034000\",\n          \"0101110630\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"el-CY\"],\n        valid: [\"00123123T\", \"99652156X\"],\n        invalid: [\n          \"99652156A\",\n          \"00124123T\",\n          \"00123123\",\n          \"001123123T\",\n          \"00 12-3123/T\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"el-GR\"],\n        valid: [\"758426713\", \"032792320\", \"054100004\"],\n        invalid: [\n          \"054100005\",\n          \"05410000\",\n          \"0541000055\",\n          \"05 4100005\",\n          \"05-410/0005\",\n          \"658426713\",\n          \"558426713\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"en-CA\"],\n        valid: [\n          \"000000000\",\n          \"521719666\",\n          \"469317481\",\n          \"120217450\",\n          \"480534858\",\n          \"325268597\",\n          \"336475660\",\n          \"744797853\",\n          \"130692544\",\n          \"046454286\",\n        ],\n        invalid: [\n          \"        \",\n          \"any value\",\n          \"012345678\",\n          \"111111111\",\n          \"999999999\",\n          \"657449110\",\n          \"74 47 978 53\",\n          \"744 797 853\",\n          \"744-797-853\",\n          \"981062432\",\n          \"267500713\",\n          \"2675o0713\",\n          \"70597312\",\n          \"7058973122\",\n          \"069437151\",\n          \"046454281\",\n          \"146452286\",\n          \"30x92544\",\n          \"30692544\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"en-GB\"],\n        valid: [\"1234567890\", \"AA123456A\", \"AA123456 \"],\n        invalid: [\n          \"GB123456A\",\n          \"123456789\",\n          \"12345678901\",\n          \"NK123456A\",\n          \"TN123456A\",\n          \"ZZ123456A\",\n          \"GB123456Z\",\n          \"DM123456A\",\n          \"AO123456A\",\n          \"GB-123456A\",\n          \"GB 123456 A\",\n          \"GB123456  \",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"en-IE\"],\n        valid: [\"1234567T\", \"1234567TW\", \"1234577W\", \"1234577WW\", \"1234577IA\"],\n        invalid: [\"1234567\", \"1234577WWW\", \"1234577A\", \"1234577JA\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"en-US\"],\n        valid: [\n          \"01-1234567\",\n          \"01 1234567\",\n          \"011234567\",\n          \"10-1234567\",\n          \"02-1234567\",\n          \"67-1234567\",\n          \"15-1234567\",\n          \"31-1234567\",\n          \"99-1234567\",\n        ],\n        invalid: [\n          \"0-11234567\",\n          \"01#1234567\",\n          \"01  1234567\",\n          \"01 1234 567\",\n          \"07-1234567\",\n          \"28-1234567\",\n          \"96-1234567\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"es-AR\"],\n        valid: [\n          \"20271633638\",\n          \"23274986069\",\n          \"27333234519\",\n          \"30678561165\",\n          \"33693450239\",\n          \"30534868460\",\n          \"23111111129\",\n          \"34557619099\",\n        ],\n        invalid: [\n          \"20-27163363-8\",\n          \"20.27163363.8\",\n          \"33693450231\",\n          \"69345023\",\n          \"693450233123123\",\n          \"3369ew50231\",\n          \"34557619095\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"es-ES\"],\n        valid: [\n          \"00054237A\",\n          \"54237A\",\n          \"X1234567L\",\n          \"Z1234567R\",\n          \"M2812345C\",\n          \"Y2812345B\",\n        ],\n        invalid: [\"M2812345CR\", \"A2812345C\", \"0/005 423-7A\", \"00054237U\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"et-EE\"],\n        valid: [\"10001010080\", \"46304280206\", \"37102250382\", \"32708101201\"],\n        invalid: [\n          \"46304280205\",\n          \"61002293333\",\n          \"4-6304 28/0206\",\n          \"4630428020\",\n          \"463042802066\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"fi-FI\"],\n        valid: [\"131052-308T\", \"131002+308W\", \"131019A3089\"],\n        invalid: [\n          \"131052308T\",\n          \"131052-308TT\",\n          \"131052S308T\",\n          \"13 1052-308/T\",\n          \"290219A1111\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"fr-BE\"],\n        valid: [\"00012511119\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"fr-FR\"],\n        valid: [\"30 23 217 600 053\", \"3023217600053\"],\n        invalid: [\n          \"30 2 3 217 600 053\",\n          \"3 023217-600/053\",\n          \"3023217600052\",\n          \"3023217500053\",\n          \"30232176000534\",\n          \"302321760005\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"nl-BE\"],\n        valid: [\"00012511148\", \"00/0125-11148\", \"00000011115\"],\n        invalid: [\n          \"00 01 2511148\",\n          \"01022911148\",\n          \"00013211148\",\n          \"0001251114\",\n          \"000125111480\",\n          \"00012511149\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"fr-LU\"],\n        valid: [\"1893120105732\"],\n        invalid: [\n          \"189312010573\",\n          \"18931201057322\",\n          \"1893 12-01057/32\",\n          \"1893120105742\",\n          \"1893120105733\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"lb-LU\"],\n        invalid: [\"2016023005732\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"hr-HR\"],\n        valid: [\"94577403194\"],\n        invalid: [\n          \"94 57-7403/194\",\n          \"9457740319\",\n          \"945774031945\",\n          \"94577403197\",\n          \"94587403194\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"hu-HU\"],\n        valid: [\"8071592153\"],\n        invalid: [\n          \"80 71-592/153\",\n          \"80715921534\",\n          \"807159215\",\n          \"8071592152\",\n          \"8071582153\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"lt-LT\"],\n        valid: [\"33309240064\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"it-IT\"],\n        valid: [\"DMLPRY77D15H501F\", \"AXXFAXTTD41H501D\"],\n        invalid: [\n          \"DML PRY/77D15H501-F\",\n          \"DMLPRY77D15H501\",\n          \"DMLPRY77D15H501FF\",\n          \"AAPPRY77D15H501F\",\n          \"DMLAXA77D15H501F\",\n          \"AXXFAX90A01Z001F\",\n          \"DMLPRY77B29H501F\",\n          \"AXXFAX3TD41H501E\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"lv-LV\"],\n        valid: [\"01011012344\", \"32579461005\", \"01019902341\", \"325794-61005\"],\n        invalid: [\"010110123444\", \"0101101234\", \"01001612345\", \"290217-22343\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"mt-MT\"],\n        valid: [\"1234567A\", \"882345608\", \"34581M\", \"199Z\"],\n        invalid: [\n          \"812345608\",\n          \"88234560\",\n          \"8823456088\",\n          \"11234567A\",\n          \"12/34-567 A\",\n          \"88 23-456/08\",\n          \"1234560A\",\n          \"0000000M\",\n          \"3200100G\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"nl-NL\"],\n        valid: [\"174559434\"],\n        invalid: [\"17455943\", \"1745594344\", \"17 455-94/34\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"pl-PL\"],\n        valid: [\n          \"2234567895\",\n          \"02070803628\",\n          \"02870803622\",\n          \"02670803626\",\n          \"01510813623\",\n        ],\n        invalid: [\n          \"020708036285\",\n          \"223456789\",\n          \"22 345-678/95\",\n          \"02 070-8036/28\",\n          \"2234567855\",\n          \"02223013623\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"pt-BR\"],\n        valid: [\n          \"35161990910\",\n          \"74407265027\",\n          \"05423994000172\",\n          \"11867044000130\",\n        ],\n        invalid: [\n          \"ABCDEFGH\",\n          \"170.691.440-72\",\n          \"11494282142\",\n          \"74405265037\",\n          \"11111111111\",\n          \"48469799384\",\n          \"94.592.973/0001-82\",\n          \"28592361000192\",\n          \"11111111111111\",\n          \"111111111111112\",\n          \"61938188550993\",\n          \"82168365502729\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"pt-PT\"],\n        valid: [\"299999998\", \"299992020\"],\n        invalid: [\"2999999988\", \"29999999\", \"29 999-999/8\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"ro-RO\"],\n        valid: [\n          \"8001011234563\",\n          \"9000123456789\",\n          \"1001011234560\",\n          \"3001011234564\",\n          \"5001011234568\",\n        ],\n        invalid: [\n          \"5001011234569\",\n          \"500 1011-234/568\",\n          \"500101123456\",\n          \"50010112345688\",\n          \"5001011504568\",\n          \"8000230234563\",\n          \"6000230234563\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"sk-SK\"],\n        valid: [\n          \"530121999\",\n          \"536221/999\",\n          \"031121999\",\n          \"520229999\",\n          \"1234567890\",\n        ],\n        invalid: [\n          \"53012199999\",\n          \"990101999\",\n          \"530121000\",\n          \"53012199\",\n          \"53-0121 999\",\n          \"535229999\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"sl-SI\"],\n        valid: [\"15012557\", \"15012590\"],\n        invalid: [\"150125577\", \"1501255\", \"15 01-255/7\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"sv-SE\"],\n        valid: [\n          \"640823-3234\",\n          \"640883-3231\",\n          \"6408833231\",\n          \"19640823-3233\",\n          \"196408233233\",\n          \"19640883-3230\",\n          \"200228+5266\",\n          \"20180101-5581\",\n        ],\n        invalid: [\n          \"640823+3234\",\n          \"160230-3231\",\n          \"160260-3231\",\n          \"160260-323\",\n          \"160260323\",\n          \"640823+323\",\n          \"640823323\",\n          \"640823+32344\",\n          \"64082332344\",\n          \"19640823-32333\",\n          \"1964082332333\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"uk-UA\"],\n        valid: [\"3006321856\", \"3003102490\", \"2164212906\"],\n        invalid: [\"2565975632\", \"256597563287\", \"КС00123456\", \"2896235845\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        valid: [\"01-1234567\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"is-NOT\"],\n        error: [\n          \"01-1234567\",\n          \"01 1234567\",\n          \"011234567\",\n          \"0-11234567\",\n          \"01#1234567\",\n          \"01  1234567\",\n          \"01 1234 567\",\n          \"07-1234567\",\n          \"28-1234567\",\n          \"96-1234567\",\n        ],\n      });\n    });\n\n    it(\"should validate slug\", () => {\n      test({\n        validator: \"isSlug\",\n        valid: [\n          \"foo\",\n          \"foo-bar\",\n          \"foo_bar\",\n          \"foo-bar-foo\",\n          \"foo-bar_foo\",\n          \"foo-bar_foo*75-b4r-**_foo\",\n          \"foo-bar_foo*75-b4r-**_foo-&&\",\n        ],\n        invalid: [\n          \"not-----------slug\",\n          \"@#_$@\",\n          \"-not-slug\",\n          \"not-slug-\",\n          \"_not-slug\",\n          \"not-slug_\",\n          \"not slug\",\n        ],\n      });\n    });\n\n    it(\"should validate strong passwords\", () => {\n      test({\n        validator: \"isStrongPassword\",\n        args: [\n          {\n            minLength: 8,\n            minLowercase: 1,\n            minUppercase: 1,\n            minNumbers: 1,\n            minSymbols: 1,\n          },\n        ],\n        valid: [\n          '%2%k{7BsL\"M%Kd6e',\n          \"EXAMPLE of very long_password123!\",\n          \"mxH_+2vs&54_+H3P\",\n          \"+&DxJ=X7-4L8jRCD\",\n          \"etV*p%Nr6w&H%FeF\",\n          \"£3.ndSau_7\",\n          \"VaLIDWith\\\\Symb0l\",\n        ],\n        invalid: [\n          \"\",\n          \"password\",\n          \"hunter2\",\n          \"hello world\",\n          \"passw0rd\",\n          \"password!\",\n          \"PASSWORD!\",\n        ],\n      });\n    });\n\n    it(\"should validate date\", () => {\n      test({\n        validator: \"isDate\",\n        valid: [\n          new Date(),\n          new Date(2014, 2, 15),\n          new Date(\"2014-03-15\"),\n          \"2020/02/29\",\n          \"2020-02-19\",\n        ],\n        invalid: [\n          \"\",\n          \"15072002\",\n          null,\n          undefined,\n          { year: 2002, month: 7, day: 15 },\n          42,\n          {\n            toString() {\n              return \"[object Date]\";\n            },\n          }, // faking\n          \"2020-02-30\", // invalid date\n          \"2019-02-29\", // non-leap year\n          \"2020-04-31\", // invalid date\n          \"2020/03-15\", // mixed delimiter\n          \"-2020-04-19\",\n          \"-2023/05/24\",\n          \"abc-2023/05/24\",\n          \"2024\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01-\",\n          \"2024-05-01-abc\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [\"DD/MM/YYYY\"], // old format for backward compatibility\n        valid: [\"15-07-2002\", \"15/07/2002\"],\n        invalid: [\n          \"15/7/2002\",\n          \"15-7-2002\",\n          \"15/7/02\",\n          \"15-7-02\",\n          \"15-07/2002\",\n          \"2024\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01-\",\n          \"2024-05-01-abc\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n          \"15/\",\n          \"15/07\",\n          \"15/07/\",\n          \"15/07/2024/\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ format: \"DD/MM/YYYY\" }],\n        valid: [\"15-07-2002\", \"15/07/2002\"],\n        invalid: [\n          \"15/7/2002\",\n          \"15-7-2002\",\n          \"15/7/02\",\n          \"15-7-02\",\n          \"15-07/2002\",\n          \"2024\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01-\",\n          \"2024-05-01-abc\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n          \"15/\",\n          \"15/07\",\n          \"15/07/\",\n          \"15/07/2024/\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ format: \"DD/MM/YY\" }],\n        valid: [\"15-07-02\", \"15/07/02\"],\n        invalid: [\n          \"15/7/2002\",\n          \"15-7-2002\",\n          \"15/07-02\",\n          \"30/04/--\",\n          \"2024\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01-\",\n          \"2024-05-01-abc\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n          \"15/\",\n          \"15/07\",\n          \"15/07/\",\n          \"15/07/2024/\",\n          \"15/07/24/\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ format: \"D/M/YY\" }],\n        valid: [\"5-7-02\", \"5/7/02\"],\n        invalid: [\n          \"5/07/02\",\n          \"15/7/02\",\n          \"15-7-02\",\n          \"5/7-02\",\n          \"3/4/aa\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n          \"15/\",\n          \"15/07\",\n          \"15/07/\",\n          \"15/07/2024/\",\n          \"15/07/24/\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ format: \"DD/MM/YYYY\", strictMode: true }],\n        valid: [\"15/07/2002\"],\n        invalid: [\n          \"15-07-2002\",\n          \"15/7/2002\",\n          \"15-7-2002\",\n          \"15/7/02\",\n          \"15-7-02\",\n          \"15-07/2002\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n          \"15/\",\n          \"15/07\",\n          \"15/07/\",\n          \"15/07/2024/\",\n          \"15/07/24/\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ strictMode: true }],\n        valid: [\"2020/01/15\", \"2014/02/15\", \"2014/03/15\", \"2020/02/29\"],\n        invalid: [\n          \"2014-02-15\",\n          \"2020-02-29\",\n          \"15-07/2002\",\n          new Date(),\n          new Date(2014, 2, 15),\n          new Date(\"2014-03-15\"),\n          \"-2020-04-19\",\n          \"-2023/05/24\",\n          \"abc-2023/05/24\",\n          \"2024\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01-\",\n          \"2024-05-01-abc\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ delimiters: [\"/\", \" \"] }],\n        valid: [\n          new Date(),\n          new Date(2014, 2, 15),\n          new Date(\"2014-03-15\"),\n          \"2020/02/29\",\n          \"2020 02 29\",\n        ],\n        invalid: [\n          \"2020-02-29\",\n          \"\",\n          \"15072002\",\n          null,\n          undefined,\n          { year: 2002, month: 7, day: 15 },\n          42,\n          {\n            toString() {\n              return \"[object Date]\";\n            },\n          },\n          \"2020/02/30\",\n          \"2019/02/29\",\n          \"2020/04/31\",\n          \"2020/03-15\",\n          \"-2020-04-19\",\n          \"-2023/05/24\",\n          \"abc-2023/05/24\",\n          \"2024\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01-\",\n          \"2024-05-01-abc\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n          \"2024 05 01 abc\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ format: \"MM.DD.YYYY\", delimiters: [\".\"], strictMode: true }],\n        valid: [\"01.15.2020\", \"02.15.2014\", \"03.15.2014\", \"02.29.2020\"],\n        invalid: [\n          \"2014-02-15\",\n          \"2020-02-29\",\n          \"15-07/2002\",\n          new Date(),\n          new Date(2014, 2, 15),\n          new Date(\"2014-03-15\"),\n          \"29.02.2020\",\n          \"02.29.2020.20\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01\",\n          \"-2020-04-19\",\n          \"-2023/05/24\",\n          \"abc-2023/05/24\",\n          \"04.05.2024.\",\n          \"04.05.2024.abc\",\n          \"abc.04.05.2024\",\n        ],\n      });\n    });\n    it(\"should validate time\", () => {\n      test({\n        validator: \"isTime\",\n        valid: [\"00:00\", \"23:59\", \"9:00\"],\n        invalid: [\n          \"\",\n          null,\n          undefined,\n          0,\n          \"07:00 PM\",\n          \"23\",\n          \"00:60\",\n          \"00:\",\n          \"01:0 \",\n          \"001:01\",\n        ],\n      });\n      test({\n        validator: \"isTime\",\n        args: [{ hourFormat: \"hour24\", mode: \"withSeconds\" }],\n        valid: [\"23:59:59\", \"00:00:00\", \"9:50:01\"],\n        invalid: [\n          \"\",\n          null,\n          undefined,\n          23,\n          \"01:00:01 PM\",\n          \"13:00:\",\n          \"00\",\n          \"26\",\n          \"00;01\",\n          \"0 :09\",\n          \"59:59:59\",\n          \"24:00:00\",\n          \"00:59:60\",\n          \"99:99:99\",\n          \"009:50:01\",\n        ],\n      });\n      test({\n        validator: \"isTime\",\n        args: [{ hourFormat: \"hour24\", mode: \"withOptionalSeconds\" }],\n        valid: [\"23:59:59\", \"00:00:00\", \"9:50:01\", \"00:00\", \"23:59\", \"9:00\"],\n        invalid: [\n          \"\",\n          null,\n          undefined,\n          23,\n          \"01:00:01 PM\",\n          \"13:00:\",\n          \"00\",\n          \"26\",\n          \"00;01\",\n          \"0 :09\",\n          \"59:59:59\",\n          \"24:00:00\",\n          \"00:59:60\",\n          \"99:99:99\",\n          \"009:50:01\",\n        ],\n      });\n      test({\n        validator: \"isTime\",\n        args: [{ hourFormat: \"hour12\" }],\n        valid: [\"12:59 PM\", \"12:59 AM\", \"01:00 PM\", \"01:00 AM\", \"7:00 AM\"],\n        invalid: [\n          \"\",\n          null,\n          undefined,\n          0,\n          \"12:59 MM\",\n          \"12:59 MA\",\n          \"12:59 PA\",\n          \"12:59 A M\",\n          \"13:00 PM\",\n          \"23\",\n          \"00:60\",\n          \"00:\",\n          \"9:00\",\n          \"01:0 \",\n          \"001:01\",\n          \"12:59:00 PM\",\n          \"12:59:00 A M\",\n          \"12:59:00 \",\n        ],\n      });\n      test({\n        validator: \"isTime\",\n        args: [{ hourFormat: \"hour12\", mode: \"withSeconds\" }],\n        valid: [\"12:59:59 PM\", \"2:34:45 AM\", \"7:00:00 AM\"],\n        invalid: [\n          \"\",\n          null,\n          undefined,\n          23,\n          \"01:00: 1 PM\",\n          \"13:00:\",\n          \"13:00:00 PM\",\n          \"00\",\n          \"26\",\n          \"00;01\",\n          \"0 :09\",\n          \"59:59:59\",\n          \"24:00:00\",\n          \"00:59:60\",\n          \"99:99:99\",\n          \"9:50:01\",\n          \"009:50:01\",\n        ],\n      });\n      test({\n        validator: \"isTime\",\n        args: [{ hourFormat: \"hour12\", mode: \"withOptionalSeconds\" }],\n        valid: [\n          \"12:59:59 PM\",\n          \"2:34:45 AM\",\n          \"7:00:00 AM\",\n          \"12:59 PM\",\n          \"12:59 AM\",\n          \"01:00 PM\",\n          \"01:00 AM\",\n          \"7:00 AM\",\n        ],\n        invalid: [\n          \"\",\n          null,\n          undefined,\n          23,\n          \"01:00: 1 PM\",\n          \"13:00:\",\n          \"00\",\n          \"26\",\n          \"00;01\",\n          \"0 :09\",\n          \"59:59:59\",\n          \"24:00:00\",\n          \"00:59:60\",\n          \"99:99:99\",\n          \"9:50:01\",\n          \"009:50:01\",\n        ],\n      });\n    });\n    it(\"should be valid license plate\", () => {\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"es-AR\"],\n        valid: [\"AB 123 CD\", \"AB123CD\", \"ABC 123\", \"ABC123\"],\n        invalid: [\n          \"\",\n          \"notalicenseplate\",\n          \"AB-123-CD\",\n          \"ABC-123\",\n          \"AABC 123\",\n          \"AB CDE FG\",\n          \"ABC DEF\",\n          \"12 ABC 34\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"pt-PT\"],\n        valid: [\n          \"AA-12-34\",\n          \"12-AA-34\",\n          \"12-34-AA\",\n          \"AA-12-AA\",\n          \"AA·12·34\",\n          \"12·AB·34\",\n          \"12·34·AB\",\n          \"AB·34·AB\",\n          \"AA 12 34\",\n          \"12 AA 34\",\n          \"12 34 AA\",\n          \"AB 12 CD\",\n          \"AA1234\",\n          \"12AA34\",\n          \"1234AA\",\n          \"AB12CD\",\n        ],\n        invalid: [\n          \"\",\n          \"notalicenseplate\",\n          \"AA-AA-00\",\n          \"00-AA-AA\",\n          \"AA-AA-AA\",\n          \"00-00-00\",\n          \"AA·AA·00\",\n          \"00·AA·AA\",\n          \"AA·AA·AA\",\n          \"00·00·00\",\n          \"AA AA 00\",\n          \"00 AA AA\",\n          \"AA AA AA\",\n          \"00 00 00\",\n          \"A1-B2-C3\",\n          \"1A-2B-3C\",\n          \"ABC-1-EF\",\n          \"AB-C1D-EF\",\n          \"AB-C1-DEF\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"de-LI\"],\n        valid: [\"FL 1\", \"FL 99999\", \"FL 1337\"],\n        invalid: [\"\", \"FL 999999\", \"AB 12345\", \"FL -1\"],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"de-DE\"],\n        valid: [\n          \"M A 1\",\n          \"M A 12\",\n          \"M A 123\",\n          \"M A 1234\",\n          \"M AB 1\",\n          \"M AB 12\",\n          \"M AB 123\",\n          \"M AB 1234\",\n          \"FS A 1\",\n          \"FS A 12\",\n          \"FS A 123\",\n          \"FS A 1234\",\n          \"FS AB 1\",\n          \"FS AB 12\",\n          \"FS AB 123\",\n          \"FS AB 1234\",\n          \"FSAB1234\",\n          \"FS-AB-1234\",\n          \"FS AB 1234 H\",\n          \"FS AB 1234 E\",\n          \"FSAB1234E\",\n          \"FS-AB-1234-E\",\n          \"FS AB-1234-E\",\n          \"FSAB1234 E\",\n          \"FS AB1234E\",\n          \"LRO AB 123\",\n          \"LRO-AB-123-E\",\n          \"LRO-AB-123E\",\n          \"LRO-AB-123 E\",\n          \"LRO-AB-123-H\",\n          \"LRO-AB-123H\",\n          \"LRO-AB-123 H\",\n        ],\n        invalid: [\n          \"YY AB 123\",\n          \"PAF AB 1234\",\n          \"M ABC 123\",\n          \"M AB 12345\",\n          \"FS AB 1234 A\",\n          \"LRO-AB-1234\",\n          \"HRO ABC 123\",\n          \"HRO ABC 1234\",\n          \"LDK-AB-1234-E\",\n          \"ÖHR FA 123D\",\n          \"MZG-AB-123X\",\n          \"OBG-ABD-123\",\n          \"PAF-AB2-123\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"fi-FI\"],\n        valid: [\n          \"ABC-123\",\n          \"ABC 123\",\n          \"ABC123\",\n          \"A100\",\n          \"A 100\",\n          \"A-100\",\n          \"C10001\",\n          \"C 10001\",\n          \"C-10001\",\n          \"123-ABC\",\n          \"123 ABC\",\n          \"123ABC\",\n          \"123-A\",\n          \"123 A\",\n          \"123A\",\n          \"199AA\",\n          \"199 AA\",\n          \"199-AA\",\n        ],\n        invalid: [\n          \" \",\n          \"A-1\",\n          \"A1A-100\",\n          \"1-A-2\",\n          \"C1234567\",\n          \"A B C 1 2 3\",\n          \"abc-123\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"sq-AL\"],\n        valid: [\"AA 000 AA\", \"ZZ 999 ZZ\"],\n        invalid: [\"\", \"AA 0 A\", \"AAA 00 AAA\"],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"cs-CZ\"],\n        valid: [\n          \"ALA4011\",\n          \"4A23000\",\n          \"DICTAT0R\",\n          \"VETERAN\",\n          \"AZKVIZ8\",\n          \"2A45876\",\n          \"DIC-TAT0R\",\n        ],\n        invalid: [\n          \"\",\n          \"invalidlicenseplate\",\n          \"LN5758898\",\n          \"X-|$|-X\",\n          \"AE0F-OP4\",\n          \"GO0MER\",\n          \"2AAAAAAAA\",\n          \"FS AB 1234 E\",\n          \"GB999 9999 00\",\n        ],\n      });\n\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"pt-BR\"],\n        valid: [\n          \"ABC1234\",\n          \"ABC 1234\",\n          \"ABC-1234\",\n          \"ABC1D23\",\n          \"ABC1K23\",\n          \"ABC1Z23\",\n          \"ABC 1D23\",\n          \"ABC-1D23\",\n        ],\n        invalid: [\"\", \"AA 0 A\", \"AAA 00 AAA\", \"ABCD123\", \"AB12345\", \"AB123DC\"],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"hu-HU\"],\n        valid: [\n          \"AAB-001\",\n          \"AVC-987\",\n          \"KOC-124\",\n          \"JCM-871\",\n          \"AWQ-777\",\n          \"BPO-001\",\n          \"BPI-002\",\n          \"UCO-342\",\n          \"UDO-385\",\n          \"XAO-987\",\n          \"AAI-789\",\n          \"ABI-789\",\n          \"ACI-789\",\n          \"AAO-789\",\n          \"ABO-789\",\n          \"ACO-789\",\n          \"YAA-123\",\n          \"XAA-123\",\n          \"WAA-258\",\n          \"XZZ-784\",\n          \"M123456\",\n          \"CK 12-34\",\n          \"DT 12-34\",\n          \"CD 12-34\",\n          \"HC 12-34\",\n          \"HB 12-34\",\n          \"HK 12-34\",\n          \"MA 12-34\",\n          \"OT 12-34\",\n          \"RR 17-87\",\n          \"CD 124-348\",\n          \"C-C 2021\",\n          \"C-X 2458\",\n          \"X-A 7842\",\n          \"E-72345\",\n          \"Z-07458\",\n          \"S ACF 83\",\n          \"SP 04-68\",\n        ],\n        invalid: [\n          \"AAA-547\",\n          \"aab-001\",\n          \"AAB 001\",\n          \"AB34\",\n          \"789-LKJ\",\n          \"BBO-987\",\n          \"BBI-987\",\n          \"BWQ-777\",\n          \"BQW-987\",\n          \"BAI-789\",\n          \"BBI-789\",\n          \"BCI-789\",\n          \"BAO-789\",\n          \"BBO-789\",\n          \"BCO-789\",\n          \"ADI-789\",\n          \"ADO-789\",\n          \"KOC-1234\",\n          \"M1234567\",\n          \"W-12345\",\n          \"S BCF 83\",\n          \"X-D 1234\",\n          \"C-D 1234\",\n          \"HU 12-34\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"any\"],\n        valid: [\"FL 1\", \"FS AB 123\"],\n        invalid: [\"\", \"FL 999999\", \"FS AB 1234 A\"],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"asdfasdf\"],\n        error: [\"FL 1\", \"FS AB 123\", \"FL 999999\", \"FS AB 1234 A\"],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"sv-SE\"],\n        valid: [\n          \"ABC 123\",\n          \"ABC 12A\",\n          \"ABC123\",\n          \"ABC12A\",\n          \"A WORD\",\n          \"WORD\",\n          \"ÅSNA\",\n          \"EN VARG\",\n          \"CERISE\",\n          \"AA\",\n          \"ABCDEFG\",\n          \"ÅÄÖ\",\n          \"ÅÄÖ ÅÄÖ\",\n        ],\n        invalid: [\n          \"\",\n          \"    \",\n          \"IQV 123\",\n          \"IQV123\",\n          \"ABI 12Q\",\n          \"ÅÄÖ 123\",\n          \"ÅÄÖ 12A\",\n          \"AB1 A23\",\n          \"AB1 12A\",\n          \"lower\",\n          \"abc 123\",\n          \"abc 12A\",\n          \"abc 12a\",\n          \"AbC 12a\",\n          \"WORDLONGERTHANSEVENCHARACTERS\",\n          \"A\",\n          \"ABC-123\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"en-IN\"],\n        valid: [\n          \"MH 04 AD 0001\",\n          \"HR26DQ0001\",\n          \"WB-04-ZU-2001\",\n          \"KL 18 X 5800\",\n          \"DL 4 CAF 4856\",\n          \"KA-41CE-5289\",\n          \"GJ 04-AD 5822\",\n        ],\n        invalid: [\n          \"mh04ad0045\",\n          \"invalidlicenseplate\",\n          \"4578\",\n          \"\",\n          \"GJ054GH4785\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"en-SG\"],\n        valid: [\"SGX 1234 A\", \"SGX-1234-A\", \"SGB1234Z\"],\n        invalid: [\"sg1234a\", \"invalidlicenseplate\", \"4578\", \"\", \"GJ054GH4785\"],\n      });\n    });\n    it(\"should validate VAT numbers\", () => {\n      test({\n        validator: \"isVAT\",\n        args: [\"AT\"],\n        valid: [\"ATU12345678\", \"U12345678\"],\n        invalid: [\"AT 12345678\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"BE\"],\n        valid: [\"BE1234567890\", \"1234567890\"],\n        invalid: [\"BE 1234567890\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"BG\"],\n        valid: [\"BG1234567890\", \"1234567890\", \"BG123456789\", \"123456789\"],\n        invalid: [\"BG 1234567890\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"HR\"],\n        valid: [\"HR12345678901\", \"12345678901\"],\n        invalid: [\"HR 12345678901\", \"1234567890\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CY\"],\n        valid: [\"CY123456789\", \"123456789\"],\n        invalid: [\"CY 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CZ\"],\n        valid: [\n          \"CZ1234567890\",\n          \"CZ123456789\",\n          \"CZ12345678\",\n          \"1234567890\",\n          \"123456789\",\n          \"12345678\",\n        ],\n        invalid: [\"CZ 123456789\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"DK\"],\n        valid: [\"DK12345678\", \"12345678\"],\n        invalid: [\"DK 12345678\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"EE\"],\n        valid: [\"EE123456789\", \"123456789\"],\n        invalid: [\"EE 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"FI\"],\n        valid: [\"FI12345678\", \"12345678\"],\n        invalid: [\"FI 12345678\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"FR\"],\n        valid: [\"FRAA123456789\", \"AA123456789\"],\n        invalid: [\"FR AA123456789\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"DE\"],\n        valid: [\"DE123456789\", \"123456789\"],\n        invalid: [\"DE 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"EL\"],\n        valid: [\"EL123456789\", \"123456789\"],\n        invalid: [\"EL 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"HU\"],\n        valid: [\"HU12345678\", \"12345678\"],\n        invalid: [\"HU 12345678\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"IE\"],\n        valid: [\"IE1234567AW\", \"1234567AW\"],\n        invalid: [\"IE 1234567\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"IT\"],\n        valid: [\"IT12345678910\", \"12345678910\"],\n        invalid: [\n          \"IT12345678 910\",\n          \"IT 123456789101\",\n          \"IT123456789101\",\n          \"GB12345678910\",\n          \"IT123456789\",\n        ],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"LV\"],\n        valid: [\"LV12345678901\", \"12345678901\"],\n        invalid: [\"LV 12345678901\", \"1234567890\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"LT\"],\n        valid: [\n          \"LT123456789012\",\n          \"123456789012\",\n          \"LT12345678901\",\n          \"12345678901\",\n          \"LT1234567890\",\n          \"1234567890\",\n          \"LT123456789\",\n          \"123456789\",\n        ],\n        invalid: [\"LT 123456789012\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"LU\"],\n        valid: [\"LU12345678\", \"12345678\"],\n        invalid: [\"LU 12345678\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"MT\"],\n        valid: [\"MT12345678\", \"12345678\"],\n        invalid: [\"MT 12345678\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"NL\"],\n        valid: [\"NL123456789B10\", \"123456789B10\"],\n        invalid: [\n          \"NL12345678 910\",\n          \"NL 123456789101\",\n          \"NL123456789B1\",\n          \"GB12345678910\",\n          \"NL123456789\",\n        ],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"PL\"],\n        valid: [\n          \"PL1234567890\",\n          \"1234567890\",\n          \"PL123-456-78-90\",\n          \"123-456-78-90\",\n          \"PL123-45-67-890\",\n          \"123-45-67-890\",\n        ],\n        invalid: [\"PL 1234567890\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"PT\"],\n        valid: [\"PT123456789\", \"123456789\"],\n        invalid: [\"PT 123456789\", \"000000001\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"RO\"],\n        valid: [\"RO1234567890\", \"1234567890\", \"RO12\", \"12\"],\n        invalid: [\"RO 12\", \"1\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"SK\"],\n        valid: [\"SK1234567890\", \"1234567890\"],\n        invalid: [\"SK 1234567890\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"SI\"],\n        valid: [\"SI12345678\", \"12345678\"],\n        invalid: [\"SI 12345678\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"ES\"],\n        valid: [\"ESA1234567A\", \"A1234567A\"],\n        invalid: [\"ES 1234567A\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"SE\"],\n        valid: [\"SE123456789012\", \"123456789012\"],\n        invalid: [\"SE 123456789012\", \"12345678901\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"AL\"],\n        valid: [\"AL123456789A\", \"123456789A\"],\n        invalid: [\"AL 123456789A\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"MK\"],\n        valid: [\"MK1234567890123\", \"1234567890123\"],\n        invalid: [\"MK 1234567890123\", \"123456789012\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"AU\"],\n        valid: [\n          \"AU53004085616\",\n          \"53004085616\",\n          \"AU65613309809\",\n          \"65613309809\",\n          \"AU34118972998\",\n          \"34118972998\",\n        ],\n        invalid: [\n          \"AU65613309808\",\n          \"65613309808\",\n          \"AU55613309809\",\n          \"55613309809\",\n          \"AU65613319809\",\n          \"65613319809\",\n          \"AU34117972998\",\n          \"34117972998\",\n          \"AU12345678901\",\n          \"12345678901\",\n          \"AU 12345678901\",\n          \"1234567890\",\n        ],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"BY\"],\n        valid: [\"УНП 123456789\", \"123456789\"],\n        invalid: [\"BY 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CA\"],\n        valid: [\"CA123456789\", \"123456789\"],\n        invalid: [\"CA 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"IS\"],\n        valid: [\"IS123456\", \"12345\"],\n        invalid: [\"IS 12345\", \"1234\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"IN\"],\n        valid: [\"IN123456789012345\", \"123456789012345\"],\n        invalid: [\"IN 123456789012345\", \"12345678901234\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"ID\"],\n        valid: [\n          \"ID123456789012345\",\n          \"123456789012345\",\n          \"ID12.345.678.9-012.345\",\n          \"12.345.678.9-012.345\",\n        ],\n        invalid: [\"ID 123456789012345\", \"12345678901234\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"IL\"],\n        valid: [\"IL123456789\", \"123456789\"],\n        invalid: [\"IL 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"KZ\"],\n        valid: [\"KZ123456789012\", \"123456789012\"],\n        invalid: [\"KZ 123456789012\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"NZ\"],\n        valid: [\"NZ123456789\", \"123456789\"],\n        invalid: [\"NZ 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"NG\"],\n        valid: [\n          \"NG123456789012\",\n          \"123456789012\",\n          \"NG12345678-9012\",\n          \"12345678-9012\",\n        ],\n        invalid: [\"NG 123456789012\", \"12345678901\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"NO\"],\n        valid: [\"NO123456789MVA\", \"123456789MVA\"],\n        invalid: [\"NO 123456789MVA\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"PH\"],\n        valid: [\n          \"PH123456789012\",\n          \"123456789012\",\n          \"PH123 456 789 012\",\n          \"123 456 789 012\",\n        ],\n        invalid: [\"PH 123456789012\", \"12345678901\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"RU\"],\n        valid: [\"RU1234567890\", \"1234567890\", \"RU123456789012\", \"123456789012\"],\n        invalid: [\"RU 123456789012\", \"12345678901\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"SM\"],\n        valid: [\"SM12345\", \"12345\"],\n        invalid: [\"SM 12345\", \"1234\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"SA\"],\n        valid: [\"SA123456789012345\", \"123456789012345\"],\n        invalid: [\"SA 123456789012345\", \"12345678901234\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"RS\"],\n        valid: [\"RS123456789\", \"123456789\"],\n        invalid: [\"RS 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CH\"],\n        valid: [\n          // strictly valid\n          \"CHE-116.281.710 MWST\",\n          \"CHE-116.281.710 IVA\",\n          \"CHE-116.281.710 TVA\",\n          // loosely valid presentation variants\n          \"CHE 116 281 710 IVA\", // all separators are spaces\n          \"CHE-191.398.369MWST\", // no space before suffix\n          \"CHE-116281710 MWST\", // no number separators\n          \"CHE-116281710MWST\", // no number separators and no space before suffix\n          \"CHE105854263MWST\", // no separators\n          \"CHE-116.285.524\", // no suffix (vat abbreviation)\n          \"CHE116281710\", // no suffix and separators\n          \"116.281.710 TVA\", // no prefix (CHE, ISO-3166-1 Alpha-3)\n          \"116281710MWST\", // no prefix and separators\n          \"100.218.485\", // no prefix and suffix\n          \"123456788\", // no prefix, separators and suffix\n        ],\n        invalid: [\n          \"CH-116.281.710 MWST\", // invalid prefix (should be CHE)\n          \"CHE-116.281 MWST\", // invalid number of digits (should be 9)\n          \"CHE-123.456.789 MWST\", // invalid last digit (should match the calculated check-number 8)\n          \"CHE-123.356.780 MWST\", // invalid check-number (there are no swiss UIDs with the calculated check number 10)\n          \"CH-116.281.710 VAT\", // invalid suffix (should be MWST, IVA or TVA)\n          \"CHE-116/281/710 IVA\", // invalid number separators (should be all dots or all spaces)\n        ],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"TR\"],\n        valid: [\"TR1234567890\", \"1234567890\"],\n        invalid: [\"TR 1234567890\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"UA\"],\n        valid: [\"UA123456789012\", \"123456789012\"],\n        invalid: [\"UA 123456789012\", \"12345678901\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"GB\"],\n        valid: [\n          \"GB999 9999 00\",\n          \"GB999 9999 96\",\n          \"GB999999999 999\",\n          \"GBGD000\",\n          \"GBGD499\",\n          \"GBHA500\",\n          \"GBHA999\",\n        ],\n        invalid: [\n          \"GB999999900\",\n          \"GB999999996\",\n          \"GB999 9999 97\",\n          \"GB999999999999\",\n          \"GB999999999 9999\",\n          \"GB9999999999 999\",\n          \"GBGD 000\",\n          \"GBGD 499\",\n          \"GBHA 500\",\n          \"GBHA 999\",\n          \"GBGD500\",\n          \"GBGD999\",\n          \"GBHA000\",\n          \"GBHA499\",\n        ],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"UZ\"],\n        valid: [\"UZ123456789\", \"123456789\"],\n        invalid: [\"UZ 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"AR\"],\n        valid: [\"AR12345678901\", \"12345678901\"],\n        invalid: [\"AR 12345678901\", \"1234567890\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"BO\"],\n        valid: [\"BO1234567\", \"1234567\"],\n        invalid: [\"BO 1234567\", \"123456\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"BR\"],\n        valid: [\n          \"BR12.345.678/9012-34\",\n          \"12.345.678/9012-34\",\n          \"BR123.456.789-01\",\n          \"123.456.789-01\",\n        ],\n        invalid: [\"BR 12.345.678/9012-34\", \"12345678901234\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CL\"],\n        valid: [\"CL12345678-9\", \"12345678-9\"],\n        invalid: [\"CL 12345678-9\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CO\"],\n        valid: [\"CO1234567890\", \"1234567890\"],\n        invalid: [\"CO 1234567890\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CR\"],\n        valid: [\"CR123456789012\", \"123456789012\", \"CR123456789\", \"123456789\"],\n        invalid: [\"CR 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"EC\"],\n        valid: [\"EC1234567890123\", \"1234567890123\"],\n        invalid: [\"EC 1234567890123\", \"123456789012\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"SV\"],\n        valid: [\"SV1234-567890-123-1\", \"1234-567890-123-1\"],\n        invalid: [\"SV 1234-567890-123-1\", \"1234567890123\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"GT\"],\n        valid: [\"GT1234567-8\", \"1234567-8\"],\n        invalid: [\"GT 1234567-8\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"HN\"],\n        valid: [\"HN\"],\n        invalid: [\"HN \"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"MX\"],\n        valid: [\n          \"MXABCD123456EFG\",\n          \"ABCD123456EFG\",\n          \"MXABC123456DEF\",\n          \"ABC123456DEF\",\n        ],\n        invalid: [\"MX ABC123456EFG\", \"123456\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"NI\"],\n        valid: [\"NI123-456789-0123A\", \"123-456789-0123A\"],\n        invalid: [\"NI 123-456789-0123A\", \"1234567890123\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"PA\"],\n        valid: [\"PA\"],\n        invalid: [\"PA \"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"PY\"],\n        valid: [\"PY12345678-9\", \"12345678-9\", \"PY123456-7\", \"123456-7\"],\n        invalid: [\"PY 123456-7\", \"123456\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"PE\"],\n        valid: [\"PE12345678901\", \"12345678901\"],\n        invalid: [\"PE 12345678901\", \"1234567890\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"DO\"],\n        valid: [\n          \"DO12345678901\",\n          \"12345678901\",\n          \"DO123-4567890-1\",\n          \"123-4567890-1\",\n          \"DO123456789\",\n          \"123456789\",\n          \"DO1-23-45678-9\",\n          \"1-23-45678-9\",\n        ],\n        invalid: [\"DO 12345678901\", \"1234567890\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"UY\"],\n        valid: [\"UY123456789012\", \"123456789012\"],\n        invalid: [\"UY 123456789012\", \"12345678901\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"VE\"],\n        valid: [\n          \"VEJ-123456789\",\n          \"J-123456789\",\n          \"VEJ-12345678-9\",\n          \"J-12345678-9\",\n        ],\n        invalid: [\"VE J-123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"invalidCountryCode\"],\n        error: [\"GB999 9999 00\"],\n      });\n    });\n    it(\"should validate mailto URI\", () => {\n      test({\n        validator: \"isMailtoURI\",\n        valid: [\n          \"mailto:?subject=something&[email protected]\",\n          \"mailto:?subject=something&[email protected],[email protected],\",\n          \"mailto:?subject=something&[email protected]\",\n          \"mailto:?subject=something&[email protected],[email protected]\",\n          \"mailto:[email protected],[email protected]\",\n          \"mailto:[email protected],[email protected]\",\n          \"mailto:[email protected]\",\n          \"mailto:[email protected]\",\n          \"mailto:?subject=something&body=something else\",\n          \"mailto:?subject=something&body=something else&[email protected],[email protected]\",\n          \"mailto:?subject=something&body=something else&[email protected],[email protected]\",\n          \"mailto:?subject=something&body=something else&[email protected]&[email protected],[email protected]\",\n          \"mailto:[email protected]\",\n          \"mailto:[email protected]?\",\n          \"mailto:[email protected]?subject=something\",\n          \"mailto:[email protected]?subject=something&[email protected]\",\n          \"mailto:[email protected]?subject=something&[email protected],[email protected],\",\n          \"mailto:[email protected]?subject=something&[email protected]\",\n          \"mailto:[email protected]?subject=something&[email protected],[email protected]\",\n          \"mailto:[email protected][email protected],[email protected]\",\n          \"mailto:[email protected][email protected],[email protected]\",\n          \"mailto:[email protected][email protected]\",\n          \"mailto:[email protected][email protected]&\",\n          \"mailto:[email protected]?subject=something&body=something else\",\n          \"mailto:[email protected]?subject=something&body=something else&[email protected],[email protected]\",\n          \"mailto:[email protected]?subject=something&body=something else&[email protected],[email protected]\",\n          \"mailto:[email protected]?subject=something&body=something else&[email protected]&[email protected],[email protected]\",\n          \"mailto:\",\n        ],\n        invalid: [\n          \"\",\n          \"something\",\n          \"[email protected]\",\n          \"mailto:?subject=okay&subject=444\",\n          \"mailto:?subject=something&wrong=888\",\n          \"mailto:somename@gmail.com\",\n          \"mailto:[email protected]?cc=somename@gmail.com\",\n          \"mailto:[email protected]?bcc=somename@gmail.com\",\n          \"mailto:[email protected]?bcc=somename@gmail.com&bcc\",\n          \"mailto:[email protected]?subject=anything&body=nothing&cc=&bcc=&key=\",\n          \"mailto:[email protected]?cc=somename\",\n          \"mailto:somename\",\n          \"mailto:[email protected]?subject=something&body=something else&[email protected]&[email protected],[email protected]&\",\n          \"mailto:?subject=something&body=something else&[email protected]&[email protected],[email protected]&\",\n        ],\n      });\n    });\n  });\n\n  describe(\"isAfter\", () => {\n    it(\"should validate dates against a start date\", () => {\n      test({\n        validator: \"isAfter\",\n        args: [{ comparisonDate: \"2011-08-03\" }],\n        valid: [\"2011-08-04\", new Date(2011, 8, 10).toString()],\n        invalid: [\"2010-07-02\", \"2011-08-03\", new Date(0).toString(), \"foo\"],\n      });\n\n      test({\n        validator: \"isAfter\",\n        valid: [\"2100-08-04\", new Date(Date.now() + 86400000).toString()],\n        invalid: [\"2010-07-02\", new Date(0).toString()],\n      });\n\n      test({\n        validator: \"isAfter\",\n        args: [{ comparisonDate: \"2011-08-03\" }],\n        valid: [\"2015-09-17\"],\n        invalid: [\"invalid date\"],\n      });\n\n      test({\n        validator: \"isAfter\",\n        args: [{ comparisonDate: \"invalid date\" }],\n        invalid: [\"invalid date\", \"2015-09-17\"],\n      });\n      test({\n        validator: \"isAfter\",\n        args: [], // will fall back to the current date\n        valid: [\"2100-08-04\", new Date(Date.now() + 86400000).toString()],\n      });\n      test({\n        validator: \"isAfter\",\n        args: [undefined], // will fall back to the current date\n        valid: [\"2100-08-04\", new Date(Date.now() + 86400000).toString()],\n      });\n      test({\n        validator: \"isAfter\",\n        args: [{ comparisonDate: undefined }], // will fall back to the current date\n        valid: [\"2100-08-04\", new Date(Date.now() + 86400000).toString()],\n      });\n    });\n\n    describe(\"(legacy syntax)\", () => {\n      it(\"should validate dates against a start date\", () => {\n        test({\n          validator: \"isAfter\",\n          args: [\"2011-08-03\"],\n          valid: [\"2011-08-04\", new Date(2011, 8, 10).toString()],\n          invalid: [\"2010-07-02\", \"2011-08-03\", new Date(0).toString(), \"foo\"],\n        });\n\n        test({\n          validator: \"isAfter\",\n          valid: [\"2100-08-04\", new Date(Date.now() + 86400000).toString()],\n          invalid: [\"2010-07-02\", new Date(0).toString()],\n        });\n\n        test({\n          validator: \"isAfter\",\n          args: [\"2011-08-03\"],\n          valid: [\"2015-09-17\"],\n          invalid: [\"invalid date\"],\n        });\n\n        test({\n          validator: \"isAfter\",\n          args: [\"invalid date\"],\n          invalid: [\"invalid date\", \"2015-09-17\"],\n        });\n      });\n    });\n  });\n\n  describe(\"isBase64\", () => {\n    it(\"should validate base64 strings with default options\", () => {\n      test({\n        validator: \"isBase64\",\n        valid: [\n          \"\",\n          \"Zg==\",\n          \"Zm8=\",\n          \"Zm9v\",\n          \"Zm9vYg==\",\n          \"Zm9vYmE=\",\n          \"Zm9vYmFy\",\n          \"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4=\",\n          \"Vml2YW11cyBmZXJtZW50dW0gc2VtcGVyIHBvcnRhLg==\",\n          \"U3VzcGVuZGlzc2UgbGVjdHVzIGxlbw==\",\n          \"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuMPNS1Ufof9EW/M98FNw\" +\n            \"UAKrwflsqVxaxQjBQnHQmiI7Vac40t8x7pIb8gLGV6wL7sBTJiPovJ0V7y7oc0Ye\" +\n            \"rhKh0Rm4skP2z/jHwwZICgGzBvA0rH8xlhUiTvcwDCJ0kc+fh35hNt8srZQM4619\" +\n            \"FTgB66Xmp4EtVyhpQV+t02g6NzK72oZI0vnAvqhpkxLeLiMCyrI416wHm5Tkukhx\" +\n            \"QmcL2a6hNOyu0ixX/x2kSFXApEnVrJ+/IxGyfyw8kf4N2IZpW5nEP847lpfj0SZZ\" +\n            \"Fwrd1mnfnDbYohX2zRptLy2ZUn06Qo9pkG5ntvFEPo9bfZeULtjYzIl6K8gJ2uGZ\" +\n            \"HQIDAQAB\",\n        ],\n        invalid: [\n          \"12345\",\n          \"Vml2YW11cyBmZXJtZtesting123\",\n          \"Zg=\",\n          \"Z===\",\n          \"Zm=8\",\n          \"=m9vYg==\",\n          \"Zm9vYmFy====\",\n        ],\n      });\n\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: true }],\n        valid: [\n          \"\",\n          \"bGFkaWVzIGFuZCBnZW50bGVtZW4sIHdlIGFyZSBmbG9hdGluZyBpbiBzcGFjZQ\",\n          \"1234\",\n          \"bXVtLW5ldmVyLXByb3Vk\",\n          \"PDw_Pz8-Pg\",\n          \"VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw\",\n        ],\n        invalid: [\n          \" AA\",\n          \"\\tAA\",\n          \"\\rAA\",\n          \"\\nAA\",\n          \"This+isa/bad+base64Url==\",\n          \"0K3RgtC+INC30LDQutC+0LTQuNGA0L7QstCw0L3QvdCw0Y8g0YHRgtGA0L7QutCw\",\n        ],\n        error: [null, undefined, {}, [], 42],\n      });\n\n      // for (let i = 0, str = '', encoded; i < 1000; i++) {\n      //   str += String.fromCharCode(Math.random() * 26 | 97); // eslint-disable-line no-bitwise\n      //   encoded = Buffer.from(str).toString('base64');\n      //   if (!validatorjs.isBase64(encoded)) {\n      //     let msg = format('validator.isBase64() failed with \"%s\"', encoded);\n      //     throw new Error(msg);\n      //   }\n      // }\n    });\n\n    it(\"should validate standard Base64 with padding\", () => {\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: false, padding: true }],\n        valid: [\n          \"\",\n          \"TWFu\",\n          \"TWE=\",\n          \"TQ==\",\n          \"SGVsbG8=\",\n          \"U29mdHdhcmU=\",\n          \"YW55IGNhcm5hbCBwbGVhc3VyZS4=\",\n        ],\n        invalid: [\n          \"TWF\",\n          \"TWE===\",\n          \"SGVsbG8@\",\n          \"SGVsbG8===\",\n          \"SGVsb G8=\",\n          \"====\",\n        ],\n      });\n    });\n\n    it(\"should validate standard Base64 without padding\", () => {\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: false, padding: false }],\n        valid: [\n          \"\",\n          \"TWFu\",\n          \"TWE\",\n          \"TQ\",\n          \"SGVsbG8\",\n          \"U29mdHdhcmU\",\n          \"YW55IGNhcm5hbCBwbGVhc3VyZS4\",\n        ],\n        invalid: [\n          \"TWE=\",\n          \"TQ===\",\n          \"SGVsbG8@\",\n          \"SGVsbG8===\",\n          \"SGVsb G8\",\n          \"====\",\n        ],\n      });\n    });\n\n    it(\"should validate Base64url with padding\", () => {\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: true, padding: true }],\n        valid: [\n          \"\",\n          \"SGVsbG8=\",\n          \"U29mdHdhcmU=\",\n          \"YW55IGNhcm5hbCBwbGVhc3VyZS4=\",\n          \"SGVsbG8-\",\n          \"SGVsbG8_\",\n        ],\n        invalid: [\"SGVsbG8===\", \"SGVsbG8@\", \"SGVsb G8=\", \"====\"],\n      });\n    });\n\n    it(\"should validate Base64url without padding\", () => {\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: true, padding: false }],\n        valid: [\n          \"\",\n          \"SGVsbG8\",\n          \"U29mdHdhcmU\",\n          \"YW55IGNhcm5hbCBwbGVhc3VyZS4\",\n          \"SGVsbG8-\",\n          \"SGVsbG8_\",\n        ],\n        invalid: [\"SGVsbG8=\", \"SGVsbG8===\", \"SGVsbG8@\", \"SGVsb G8\", \"====\"],\n      });\n    });\n\n    it(\"should handle mixed cases correctly\", () => {\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: false, padding: true }],\n        valid: [\"\", \"TWFu\", \"TWE=\", \"TQ==\"],\n        invalid: [\"TWE\", \"TQ=\", \"TQ===\"],\n      });\n\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: true, padding: false }],\n        valid: [\"\", \"SGVsbG8\", \"SGVsbG8-\", \"SGVsbG8_\"],\n        invalid: [\"SGVsbG8=\", \"SGVsbG8@\", \"SGVsb G8\"],\n      });\n    });\n  });\n\n  describe(\"isBefore\", () => {\n    describe(\"should validate dates a given end date\", () => {\n      describe(\"new syntax\", () => {\n        test({\n          validator: \"isBefore\",\n          args: [{ comparisonDate: \"08/04/2011\" }],\n          valid: [\"2010-07-02\", \"2010-08-04\", new Date(0).toString()],\n          invalid: [\"08/04/2011\", new Date(2011, 9, 10).toString()],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [{ comparisonDate: new Date(2011, 7, 4).toString() }],\n          valid: [\"2010-07-02\", \"2010-08-04\", new Date(0).toString()],\n          invalid: [\"08/04/2011\", new Date(2011, 9, 10).toString()],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [{ comparisonDate: \"2011-08-03\" }],\n          valid: [\"1999-12-31\"],\n          invalid: [\"invalid date\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [{ comparisonDate: \"invalid date\" }],\n          invalid: [\"invalid date\", \"1999-12-31\"],\n        });\n      });\n\n      describe(\"legacy syntax\", () => {\n        test({\n          validator: \"isBefore\",\n          args: [\"08/04/2011\"],\n          valid: [\"2010-07-02\", \"2010-08-04\", new Date(0).toString()],\n          invalid: [\"08/04/2011\", new Date(2011, 9, 10).toString()],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [new Date(2011, 7, 4).toString()],\n          valid: [\"2010-07-02\", \"2010-08-04\", new Date(0).toString()],\n          invalid: [\"08/04/2011\", new Date(2011, 9, 10).toString()],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [\"2011-08-03\"],\n          valid: [\"1999-12-31\"],\n          invalid: [\"invalid date\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [\"invalid date\"],\n          invalid: [\"invalid date\", \"1999-12-31\"],\n        });\n      });\n    });\n\n    describe(\"should validate dates a default end date\", () => {\n      describe(\"new syntax\", () => {\n        test({\n          validator: \"isBefore\",\n          valid: [\n            \"2000-08-04\",\n            new Date(0).toString(),\n            new Date(Date.now() - 86400000).toString(),\n          ],\n          invalid: [\"2100-07-02\", new Date(2217, 10, 10).toString()],\n        });\n        test({\n          validator: \"isBefore\",\n          args: undefined, // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [], // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [undefined], // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [{ comparisonDate: undefined }], // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n      });\n\n      describe(\"legacy syntax\", () => {\n        test({\n          validator: \"isBefore\",\n          valid: [\n            \"2000-08-04\",\n            new Date(0).toString(),\n            new Date(Date.now() - 86400000).toString(),\n          ],\n          invalid: [\"2100-07-02\", new Date(2217, 10, 10).toString()],\n        });\n        test({\n          validator: \"isBefore\",\n          args: undefined, // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [], // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [undefined], // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n      });\n    });\n  });\n\n  describe(\"isFQDN\", () => {\n    it(\"should validate domain names.\", () => {\n      test({\n        validator: \"isFQDN\",\n        args: [],\n        valid: [\"google.com\"],\n        invalid: [\"google.l33t\"],\n      });\n      test({\n        validator: \"isFQDN\",\n        args: [{ allow_numeric_tld: true }],\n        valid: [\"google.com\", \"google.l33t\"],\n        invalid: [],\n      });\n    });\n  });\n\n  describe(\"isIP\", () => {\n    it(\"should validate IP addresses\", () => {\n      test({\n        validator: \"isIP\",\n        valid: [\n          \"127.0.0.1\",\n          \"0.0.0.0\",\n          \"255.255.255.255\",\n          \"1.2.3.4\",\n          \"::1\",\n          \"2001:db8:0000:1:1:1:1:1\",\n          \"2001:db8:3:4::192.0.2.33\",\n          \"2001:41d0:2:a141::1\",\n          \"::ffff:127.0.0.1\",\n          \"::0000\",\n          \"0000::\",\n          \"1::\",\n          \"1111:1:1:1:1:1:1:1\",\n          \"fe80::a6db:30ff:fe98:e946\",\n          \"::\",\n          \"::8\",\n          \"::ffff:127.0.0.1\",\n          \"::ffff:255.255.255.255\",\n          \"::ffff:0:255.255.255.255\",\n          \"::2:3:4:5:6:7:8\",\n          \"::255.255.255.255\",\n          \"0:0:0:0:0:ffff:127.0.0.1\",\n          \"1:2:3:4:5:6:7::\",\n          \"1:2:3:4:5:6::8\",\n          \"1::7:8\",\n          \"1:2:3:4:5::7:8\",\n          \"1:2:3:4:5::8\",\n          \"1::6:7:8\",\n          \"1:2:3:4::6:7:8\",\n          \"1:2:3:4::8\",\n          \"1::5:6:7:8\",\n          \"1:2:3::5:6:7:8\",\n          \"1:2:3::8\",\n          \"1::4:5:6:7:8\",\n          \"1:2::4:5:6:7:8\",\n          \"1:2::8\",\n          \"1::3:4:5:6:7:8\",\n          \"1::8\",\n          \"fe80::7:8%eth0\",\n          \"fe80::7:8%1\",\n          \"64:ff9b::192.0.2.33\",\n          \"0:0:0:0:0:0:10.0.0.1\",\n        ],\n        invalid: [\n          \"abc\",\n          \"256.0.0.0\",\n          \"0.0.0.256\",\n          \"26.0.0.256\",\n          \"0200.200.200.200\",\n          \"200.0200.200.200\",\n          \"200.200.0200.200\",\n          \"200.200.200.0200\",\n          \"::banana\",\n          \"banana::\",\n          \"::1banana\",\n          \"::1::\",\n          \"1:\",\n          \":1\",\n          \":1:1:1::2\",\n          \"1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1\",\n          \"::11111\",\n          \"11111:1:1:1:1:1:1:1\",\n          \"2001:db8:0000:1:1:1:1::1\",\n          \"0:0:0:0:0:0:ffff:127.0.0.1\",\n          \"0:0:0:0:ffff:127.0.0.1\",\n          \"BC:e4d5:c:e7b9::%40i0nccymtl9cwfKo.5vaeXLSGRMe:EDh2qs5wkhnPws5xQKqafjfAMm6wGFCJ.bVFsZfb\",\n          \"1dC:0DF8:62D:3AC::%KTatXocjaFVioS0RTNQl4mA.V151o0RSy.JIu-D-D8.d3171ZWsSJ7PK4YjkJCRN0F\",\n        ],\n      });\n\n      test({\n        validator: \"isIP\",\n        args: [{ version: \"invalid version\" }],\n        valid: [],\n        invalid: [\"127.0.0.1\", \"0.0.0.0\", \"255.255.255.255\", \"1.2.3.4\"],\n      });\n\n      test({\n        validator: \"isIP\",\n        args: [{ version: null }],\n        valid: [\"127.0.0.1\", \"0.0.0.0\", \"255.255.255.255\", \"1.2.3.4\"],\n      });\n\n      test({\n        validator: \"isIP\",\n        args: [{ version: undefined }],\n        valid: [\"127.0.0.1\", \"0.0.0.0\", \"255.255.255.255\", \"1.2.3.4\"],\n      });\n\n      test({\n        validator: \"isIP\",\n        args: [{ version: 4 }],\n        valid: [\n          \"127.0.0.1\",\n          \"0.0.0.0\",\n          \"255.255.255.255\",\n          \"1.2.3.4\",\n          \"255.0.0.1\",\n          \"0.0.1.1\",\n        ],\n        invalid: [\n          \"::1\",\n          \"2001:db8:0000:1:1:1:1:1\",\n          \"::ffff:127.0.0.1\",\n          \"137.132.10.01\",\n          \"0.256.0.256\",\n          \"255.256.255.256\",\n        ],\n      });\n\n      test({\n        validator: \"isIP\",\n        args: [{ version: 6 }],\n        valid: [\n          \"::1\",\n          \"2001:db8:0000:1:1:1:1:1\",\n          \"::ffff:127.0.0.1\",\n          \"fe80::1234%1\",\n          \"ff08::9abc%10\",\n          \"ff08::9abc%interface10\",\n          \"ff02::5678%pvc1.3\",\n        ],\n        invalid: [\n          \"127.0.0.1\",\n          \"0.0.0.0\",\n          \"255.255.255.255\",\n          \"1.2.3.4\",\n          \"::ffff:287.0.0.1\",\n          \"%\",\n          \"fe80::1234%\",\n          \"fe80::1234%1%3%4\",\n          \"fe80%fe80%\",\n        ],\n      });\n\n      test({\n        validator: \"isIP\",\n        args: [{ version: 10 }],\n        valid: [],\n        invalid: [\n          \"127.0.0.1\",\n          \"0.0.0.0\",\n          \"255.255.255.255\",\n          \"1.2.3.4\",\n          \"::1\",\n          \"2001:db8:0000:1:1:1:1:1\",\n        ],\n      });\n    });\n\n    describe(\"legacy syntax\", () => {\n      it(\"should validate IP addresses\", () => {\n        test({\n          validator: \"isIP\",\n          valid: [\n            \"127.0.0.1\",\n            \"0.0.0.0\",\n            \"255.255.255.255\",\n            \"1.2.3.4\",\n            \"::1\",\n            \"2001:db8:0000:1:1:1:1:1\",\n            \"2001:db8:3:4::192.0.2.33\",\n            \"2001:41d0:2:a141::1\",\n            \"::ffff:127.0.0.1\",\n            \"::0000\",\n            \"0000::\",\n            \"1::\",\n            \"1111:1:1:1:1:1:1:1\",\n            \"fe80::a6db:30ff:fe98:e946\",\n            \"::\",\n            \"::8\",\n            \"::ffff:127.0.0.1\",\n            \"::ffff:255.255.255.255\",\n            \"::ffff:0:255.255.255.255\",\n            \"::2:3:4:5:6:7:8\",\n            \"::255.255.255.255\",\n            \"0:0:0:0:0:ffff:127.0.0.1\",\n            \"1:2:3:4:5:6:7::\",\n            \"1:2:3:4:5:6::8\",\n            \"1::7:8\",\n            \"1:2:3:4:5::7:8\",\n            \"1:2:3:4:5::8\",\n            \"1::6:7:8\",\n            \"1:2:3:4::6:7:8\",\n            \"1:2:3:4::8\",\n            \"1::5:6:7:8\",\n            \"1:2:3::5:6:7:8\",\n            \"1:2:3::8\",\n            \"1::4:5:6:7:8\",\n            \"1:2::4:5:6:7:8\",\n            \"1:2::8\",\n            \"1::3:4:5:6:7:8\",\n            \"1::8\",\n            \"fe80::7:8%eth0\",\n            \"fe80::7:8%1\",\n            \"64:ff9b::192.0.2.33\",\n            \"0:0:0:0:0:0:10.0.0.1\",\n          ],\n          invalid: [\n            \"abc\",\n            \"256.0.0.0\",\n            \"0.0.0.256\",\n            \"26.0.0.256\",\n            \"0200.200.200.200\",\n            \"200.0200.200.200\",\n            \"200.200.0200.200\",\n            \"200.200.200.0200\",\n            \"::banana\",\n            \"banana::\",\n            \"::1banana\",\n            \"::1::\",\n            \"1:\",\n            \":1\",\n            \":1:1:1::2\",\n            \"1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1\",\n            \"::11111\",\n            \"11111:1:1:1:1:1:1:1\",\n            \"2001:db8:0000:1:1:1:1::1\",\n            \"0:0:0:0:0:0:ffff:127.0.0.1\",\n            \"0:0:0:0:ffff:127.0.0.1\",\n          ],\n        });\n        test({\n          validator: \"isIP\",\n          args: [4],\n          valid: [\n            \"127.0.0.1\",\n            \"0.0.0.0\",\n            \"255.255.255.255\",\n            \"1.2.3.4\",\n            \"255.0.0.1\",\n            \"0.0.1.1\",\n          ],\n          invalid: [\n            \"::1\",\n            \"2001:db8:0000:1:1:1:1:1\",\n            \"::ffff:127.0.0.1\",\n            \"137.132.10.01\",\n            \"0.256.0.256\",\n            \"255.256.255.256\",\n          ],\n        });\n        test({\n          validator: \"isIP\",\n          args: [6],\n          valid: [\n            \"::1\",\n            \"2001:db8:0000:1:1:1:1:1\",\n            \"::ffff:127.0.0.1\",\n            \"fe80::1234%1\",\n            \"ff08::9abc%10\",\n            \"ff08::9abc%interface10\",\n            \"ff02::5678%pvc1.3\",\n          ],\n          invalid: [\n            \"127.0.0.1\",\n            \"0.0.0.0\",\n            \"255.255.255.255\",\n            \"1.2.3.4\",\n            \"::ffff:287.0.0.1\",\n            \"%\",\n            \"fe80::1234%\",\n            \"fe80::1234%1%3%4\",\n            \"fe80%fe80%\",\n          ],\n        });\n        test({\n          validator: \"isIP\",\n          args: [10],\n          valid: [],\n          invalid: [\n            \"127.0.0.1\",\n            \"0.0.0.0\",\n            \"255.255.255.255\",\n            \"1.2.3.4\",\n            \"::1\",\n            \"2001:db8:0000:1:1:1:1:1\",\n          ],\n        });\n      });\n    });\n  });\n  describe(\"isISBN\", () => {\n    it(\"should validate ISBNs\", () => {\n      test({\n        validator: \"isISBN\",\n        args: [{ version: 10 }],\n        valid: [\n          \"3836221195\",\n          \"3-8362-2119-5\",\n          \"3 8362 2119 5\",\n          \"1617290858\",\n          \"1-61729-085-8\",\n          \"1 61729 085-8\",\n          \"0007269706\",\n          \"0-00-726970-6\",\n          \"0 00 726970 6\",\n          \"3423214120\",\n          \"3-423-21412-0\",\n          \"3 423 21412 0\",\n          \"340101319X\",\n          \"3-401-01319-X\",\n          \"3 401 01319 X\",\n        ],\n        invalid: [\n          \"3423214121\",\n          \"3-423-21412-1\",\n          \"3 423 21412 1\",\n          \"978-3836221191\",\n          \"9783836221191\",\n          \"123456789a\",\n          \"foo\",\n          \"\",\n        ],\n      });\n      test({\n        validator: \"isISBN\",\n        args: [{ version: 13 }],\n        valid: [\n          \"9783836221191\",\n          \"978-3-8362-2119-1\",\n          \"978 3 8362 2119 1\",\n          \"9783401013190\",\n          \"978-3401013190\",\n          \"978 3401013190\",\n          \"9784873113685\",\n          \"978-4-87311-368-5\",\n          \"978 4 87311 368 5\",\n        ],\n        invalid: [\n          \"9783836221190\",\n          \"978-3-8362-2119-0\",\n          \"978 3 8362 2119 0\",\n          \"3836221195\",\n          \"3-8362-2119-5\",\n          \"3 8362 2119 5\",\n          \"01234567890ab\",\n          \"foo\",\n          \"\",\n        ],\n      });\n      test({\n        validator: \"isISBN\",\n        valid: [\"340101319X\", \"9784873113685\"],\n        invalid: [\"3423214121\", \"9783836221190\"],\n      });\n      test({\n        validator: \"isISBN\",\n        args: [{ version: \"foo\" }],\n        invalid: [\"340101319X\", \"9784873113685\"],\n      });\n    });\n\n    describe(\"(legacy syntax)\", () => {\n      it(\"should validate ISBNs\", () => {\n        test({\n          validator: \"isISBN\",\n          args: [10],\n          valid: [\n            \"3836221195\",\n            \"3-8362-2119-5\",\n            \"3 8362 2119 5\",\n            \"1617290858\",\n            \"1-61729-085-8\",\n            \"1 61729 085-8\",\n            \"0007269706\",\n            \"0-00-726970-6\",\n            \"0 00 726970 6\",\n            \"3423214120\",\n            \"3-423-21412-0\",\n            \"3 423 21412 0\",\n            \"340101319X\",\n            \"3-401-01319-X\",\n            \"3 401 01319 X\",\n          ],\n          invalid: [\n            \"3423214121\",\n            \"3-423-21412-1\",\n            \"3 423 21412 1\",\n            \"978-3836221191\",\n            \"9783836221191\",\n            \"123456789a\",\n            \"foo\",\n            \"\",\n          ],\n        });\n        test({\n          validator: \"isISBN\",\n          args: [13],\n          valid: [\n            \"9783836221191\",\n            \"978-3-8362-2119-1\",\n            \"978 3 8362 2119 1\",\n            \"9783401013190\",\n            \"978-3401013190\",\n            \"978 3401013190\",\n            \"9784873113685\",\n            \"978-4-87311-368-5\",\n            \"978 4 87311 368 5\",\n          ],\n          invalid: [\n            \"9783836221190\",\n            \"978-3-8362-2119-0\",\n            \"978 3 8362 2119 0\",\n            \"3836221195\",\n            \"3-8362-2119-5\",\n            \"3 8362 2119 5\",\n            \"01234567890ab\",\n            \"foo\",\n            \"\",\n          ],\n        });\n        test({\n          validator: \"isISBN\",\n          valid: [\"340101319X\", \"9784873113685\"],\n          invalid: [\"3423214121\", \"9783836221190\"],\n        });\n        test({\n          validator: \"isISBN\",\n          args: [\"foo\"],\n          invalid: [\"340101319X\", \"9784873113685\"],\n        });\n      });\n    });\n  });\n\n  return assertionCount;\n}\n"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/validatorjs/dist/bundle.es6.min.js b/validatorjs/dist/bundle.es6.min.js
new file mode 100644
index 0000000..98efcc5
--- /dev/null
+++ b/validatorjs/dist/bundle.es6.min.js
@@ -0,0 +1,2 @@
+(()=>{var a={82:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^(0x)[0-9a-f]{40}$/i;a.exports=e.default,a.exports.default=e.default},317:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return(0,t.default)((0,l.default)(a,e),e)};var t=r(i(2483)),l=r(i(2309));function r(a){return a&&a.__esModule?a:{default:a}}a.exports=e.default,a.exports.default=e.default},410:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return(0,l.default)(a),a.replace(new RegExp("[".concat(e,"]+"),"g"),"")};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},561:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){(0,t.default)(a);var i=e?"\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F":"\\x00-\\x1F\\x7F";return(0,l.default)(a,i)};var t=r(i(3399)),l=r(i(410));function r(a){return a&&a.__esModule?a:{default:a}}a.exports=e.default,a.exports.default=e.default},604:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,l.default)(a);var i=r;if(i=e.require_hyphen?i.replace("?",""):i,!(i=e.case_sensitive?new RegExp(i):new RegExp(i,"i")).test(a))return!1;for(var t=a.replace("-","").toUpperCase(),o=0,d=0;d<t.length;d++){var n=t[d];o+=("X"===n?10:+n)*(8-d)}return o%11==0};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r="^\\d{4}-?\\d{3}[\\dX]$";a.exports=e.default,a.exports.default=e.default},629:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){(0,l.default)(a);for(var i=a.length-1;i>=0;i--)if(-1===e.indexOf(a[i]))return!1;return!0};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},676:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){if((0,l.default)(a),e in r)return r[e](a);if("any"===e){for(var i in r)if((0,r[i])(a))return!0;return!1}throw new Error("Invalid locale '".concat(e,"'"))};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r={"cs-CZ":function(a){return/^(([ABCDEFHIJKLMNPRSTUVXYZ]|[0-9])-?){5,8}$/.test(a)},"de-DE":function(a){return/^((A|AA|AB|AC|AE|AH|AK|AM|AN|A\u00d6|AP|AS|AT|AU|AW|AZ|B|BA|BB|BC|BE|BF|BH|BI|BK|BL|BM|BN|BO|B\u00d6|BS|BT|BZ|C|CA|CB|CE|CO|CR|CW|D|DA|DD|DE|DH|DI|DL|DM|DN|DO|DU|DW|DZ|E|EA|EB|ED|EE|EF|EG|EH|EI|EL|EM|EN|ER|ES|EU|EW|F|FB|FD|FF|FG|FI|FL|FN|FO|FR|FS|FT|F\u00dc|FW|FZ|G|GA|GC|GD|GE|GF|GG|GI|GK|GL|GM|GN|G\u00d6|GP|GR|GS|GT|G\u00dc|GV|GW|GZ|H|HA|HB|HC|HD|HE|HF|HG|HH|HI|HK|HL|HM|HN|HO|HP|HR|HS|HU|HV|HX|HY|HZ|IK|IL|IN|IZ|J|JE|JL|K|KA|KB|KC|KE|KF|KG|KH|KI|KK|KL|KM|KN|KO|KR|KS|KT|KU|KW|KY|L|LA|LB|LC|LD|LF|LG|LH|LI|LL|LM|LN|L\u00d6|LP|LR|LU|M|MA|MB|MC|MD|ME|MG|MH|MI|MK|ML|MM|MN|MO|MQ|MR|MS|M\u00dc|MW|MY|MZ|N|NB|ND|NE|NF|NH|NI|NK|NM|N\u00d6|NP|NR|NT|NU|NW|NY|NZ|OA|OB|OC|OD|OE|OF|OG|OH|OK|OL|OP|OS|OZ|P|PA|PB|PE|PF|PI|PL|PM|PN|PR|PS|PW|PZ|R|RA|RC|RD|RE|RG|RH|RI|RL|RM|RN|RO|RP|RS|RT|RU|RV|RW|RZ|S|SB|SC|SE|SG|SI|SK|SL|SM|SN|SO|SP|SR|ST|SU|SW|SY|SZ|TE|TF|TG|TO|TP|TR|TS|TT|T\u00dc|\u00dcB|UE|UH|UL|UM|UN|V|VB|VG|VK|VR|VS|W|WA|WB|WE|WF|WI|WK|WL|WM|WN|WO|WR|WS|WT|W\u00dc|WW|WZ|Z|ZE|ZI|ZP|ZR|ZW|ZZ)[- ]?[A-Z]{1,2}[- ]?\d{1,4}|(ABG|ABI|AIB|AIC|ALF|ALZ|ANA|ANG|ANK|APD|ARN|ART|ASL|ASZ|AUR|AZE|BAD|BAR|BBG|BCH|BED|BER|BGD|BGL|BID|BIN|BIR|BIT|BIW|BKS|BLB|BLK|BNA|BOG|BOH|BOR|BOT|BRA|BRB|BRG|BRK|BRL|BRV|BSB|BSK|BTF|B\u00dcD|BUL|B\u00dcR|B\u00dcS|B\u00dcZ|CAS|CHA|CLP|CLZ|COC|COE|CUX|DAH|DAN|DAU|DBR|DEG|DEL|DGF|DIL|DIN|DIZ|DKB|DLG|DON|DUD|D\u00dcW|EBE|EBN|EBS|ECK|EIC|EIL|EIN|EIS|EMD|EMS|ERB|ERH|ERK|ERZ|ESB|ESW|FDB|FDS|FEU|FFB|FKB|FL\u00d6|FOR|FRG|FRI|FRW|FTL|F\u00dcS|GAN|GAP|GDB|GEL|GEO|GER|GHA|GHC|GLA|GMN|GNT|GOA|GOH|GRA|GRH|GRI|GRM|GRZ|GTH|GUB|GUN|GVM|HAB|HAL|HAM|HAS|HBN|HBS|HCH|HDH|HDL|HEB|HEF|HEI|HER|HET|HGN|HGW|HHM|HIG|HIP|HM\u00dc|HOG|HOH|HOL|HOM|HOR|H\u00d6S|HOT|HRO|HSK|HST|HVL|HWI|IGB|ILL|J\u00dcL|KEH|KEL|KEM|KIB|KLE|KLZ|K\u00d6N|K\u00d6T|K\u00d6Z|KRU|K\u00dcN|KUS|KYF|LAN|LAU|LBS|LBZ|LDK|LDS|LEO|LER|LEV|LIB|LIF|LIP|L\u00d6B|LOS|LRO|LSZ|L\u00dcN|LUP|LWL|MAB|MAI|MAK|MAL|MED|MEG|MEI|MEK|MEL|MER|MET|MGH|MGN|MHL|MIL|MKK|MOD|MOL|MON|MOS|MSE|MSH|MSP|MST|MTK|MTL|M\u00dcB|M\u00dcR|MYK|MZG|NAB|NAI|NAU|NDH|NEA|NEB|NEC|NEN|NES|NEW|NMB|NMS|NOH|NOL|NOM|NOR|NVP|NWM|OAL|OBB|OBG|OCH|OHA|\u00d6HR|OHV|OHZ|OPR|OSL|OVI|OVL|OVP|PAF|PAN|PAR|PCH|PEG|PIR|PL\u00d6|PR\u00dc|QFT|QLB|RDG|REG|REH|REI|RID|RIE|ROD|ROF|ROK|ROL|ROS|ROT|ROW|RSL|R\u00dcD|R\u00dcG|SAB|SAD|SAN|SAW|SBG|SBK|SCZ|SDH|SDL|SDT|SEB|SEE|SEF|SEL|SFB|SFT|SGH|SHA|SHG|SHK|SHL|SIG|SIM|SLE|SLF|SLK|SLN|SLS|SL\u00dc|SLZ|SM\u00dc|SOB|SOG|SOK|S\u00d6M|SON|SPB|SPN|SRB|SRO|STA|STB|STD|STE|STL|SUL|S\u00dcW|SWA|SZB|TBB|TDO|TET|TIR|T\u00d6L|TUT|UEM|UER|UFF|USI|VAI|VEC|VER|VIB|VIE|VIT|VOH|WAF|WAK|WAN|WAR|WAT|WBS|WDA|WEL|WEN|WER|WES|WHV|WIL|WIS|WIT|WIZ|WLG|WMS|WND|WOB|WOH|WOL|WOR|WOS|WRN|WSF|WST|WSW|WTL|WTM|WUG|W\u00dcM|WUN|WUR|WZL|ZEL|ZIG)[- ]?(([A-Z][- ]?\d{1,4})|([A-Z]{2}[- ]?\d{1,3})))[- ]?(E|H)?$/.test(a)},"de-LI":function(a){return/^FL[- ]?\d{1,5}[UZ]?$/.test(a)},"en-IN":function(a){return/^[A-Z]{2}[ -]?[0-9]{1,2}(?:[ -]?[A-Z])(?:[ -]?[A-Z]*)?[ -]?[0-9]{4}$/.test(a)},"en-SG":function(a){return/^[A-Z]{3}[ -]?[\d]{4}[ -]?[A-Z]{1}$/.test(a)},"es-AR":function(a){return/^(([A-Z]{2} ?[0-9]{3} ?[A-Z]{2})|([A-Z]{3} ?[0-9]{3}))$/.test(a)},"fi-FI":function(a){return/^(?=.{4,7})(([A-Z]{1,3}|[0-9]{1,3})[\s-]?([A-Z]{1,3}|[0-9]{1,5}))$/.test(a)},"hu-HU":function(a){return/^((((?!AAA)(([A-NPRSTVZWXY]{1})([A-PR-Z]{1})([A-HJ-NPR-Z]))|(A[ABC]I)|A[ABC]O|A[A-W]Q|BPI|BPO|UCO|UDO|XAO)-(?!000)\d{3})|(M\d{6})|((CK|DT|CD|HC|H[ABEFIKLMNPRSTVX]|MA|OT|R[A-Z]) \d{2}-\d{2})|(CD \d{3}-\d{3})|(C-(C|X) \d{4})|(X-(A|B|C) \d{4})|(([EPVZ]-\d{5}))|(S A[A-Z]{2} \d{2})|(SP \d{2}-\d{2}))$/.test(a)},"pt-BR":function(a){return/^[A-Z]{3}[ -]?[0-9][A-Z][0-9]{2}|[A-Z]{3}[ -]?[0-9]{4}$/.test(a)},"pt-PT":function(a){return/^(([A-Z]{2}[ -\u00b7]?[0-9]{2}[ -\u00b7]?[0-9]{2})|([0-9]{2}[ -\u00b7]?[A-Z]{2}[ -\u00b7]?[0-9]{2})|([0-9]{2}[ -\u00b7]?[0-9]{2}[ -\u00b7]?[A-Z]{2})|([A-Z]{2}[ -\u00b7]?[0-9]{2}[ -\u00b7]?[A-Z]{2}))$/.test(a)},"sq-AL":function(a){return/^[A-Z]{2}[- ]?((\d{3}[- ]?(([A-Z]{2})|T))|(R[- ]?\d{3}))$/.test(a)},"sv-SE":function(a){return/^[A-HJ-PR-UW-Z]{3} ?[\d]{2}[A-HJ-PR-UW-Z1-9]$|(^[A-Z\u00c5\u00c4\u00d6 ]{2,7}$)/.test(a.trim())},"en-PK":function(a){return/(^[A-Z]{2}((\s|-){0,1})[0-9]{3,4}((\s|-)[0-9]{2}){0,1}$)|(^[A-Z]{3}((\s|-){0,1})[0-9]{3,4}((\s|-)[0-9]{2}){0,1}$)|(^[A-Z]{4}((\s|-){0,1})[0-9]{3,4}((\s|-)[0-9]{2}){0,1}$)|(^[A-Z]((\s|-){0,1})[0-9]{4}((\s|-)[0-9]{2}){0,1}$)/.test(a.trim())}};a.exports=e.default,a.exports.default=e.default},700:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return(0,l.default)(a),a===e};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},821:(a,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return null==a},a.exports=e.default,a.exports.default=e.default},855:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return(0,l.default)(a),parseInt(a,e||10)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},995:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){(0,t.default)(a),e=e||{};var i=new RegExp("^(?:[-+])?(?:[0-9]+)?(?:\\".concat(e.locale?r.decimal[e.locale]:".","[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$"));if(""===a||"."===a||","===a||"-"===a||"+"===a)return!1;var o=parseFloat(a.replace(",","."));return i.test(a)&&(!e.hasOwnProperty("min")||(0,l.default)(e.min)||o>=e.min)&&(!e.hasOwnProperty("max")||(0,l.default)(e.max)||o<=e.max)&&(!e.hasOwnProperty("lt")||(0,l.default)(e.lt)||o<e.lt)&&(!e.hasOwnProperty("gt")||(0,l.default)(e.gt)||o>e.gt)},e.locales=void 0;var t=o(i(3399)),l=o(i(821)),r=i(3237);function o(a){return a&&a.__esModule?a:{default:a}}e.locales=Object.keys(r.decimal)},1062:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,t.default)(a);var i=e.provider,r=a.replace(/[- ]+/g,"");if(i&&i.toLowerCase()in o){if(!o[i.toLowerCase()].test(r))return!1}else{if(i&&!(i.toLowerCase()in o))throw new Error("".concat(i," is not a valid credit card provider."));if(!d.some(function(a){return a.test(r)}))return!1}return(0,l.default)(a)};var t=r(i(3399)),l=r(i(3609));function r(a){return a&&a.__esModule?a:{default:a}}var o={amex:/^3[47][0-9]{13}$/,dinersclub:/^3(?:0[0-5]|[68][0-9])[0-9]{11}$/,discover:/^6(?:011|5[0-9][0-9])[0-9]{12,15}$/,jcb:/^(?:2131|1800|35\d{3})\d{11}$/,mastercard:/^5[1-5][0-9]{2}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$/,unionpay:/^(6[27][0-9]{14}|^(81[0-9]{14,17}))$/,visa:/^(?:4[0-9]{12})(?:[0-9]{3,6})?$/},d=function(){var a=[];for(var e in o)o.hasOwnProperty(e)&&a.push(o[e]);return a}();a.exports=e.default,a.exports.default=e.default},1128:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){e=(0,l.default)(e,r);var i=a.split("@"),t=i.pop(),u=[i.join("@"),t];if(u[1]=u[1].toLowerCase(),"gmail.com"===u[1]||"googlemail.com"===u[1]){if(e.gmail_remove_subaddress&&(u[0]=u[0].split("+")[0]),e.gmail_remove_dots&&(u[0]=u[0].replace(/\.+/g,c)),!u[0].length)return!1;(e.all_lowercase||e.gmail_lowercase)&&(u[0]=u[0].toLowerCase()),u[1]=e.gmail_convert_googlemaildotcom?"gmail.com":u[1]}else if(o.indexOf(u[1])>=0){if(e.icloud_remove_subaddress&&(u[0]=u[0].split("+")[0]),!u[0].length)return!1;(e.all_lowercase||e.icloud_lowercase)&&(u[0]=u[0].toLowerCase())}else if(d.indexOf(u[1])>=0){if(e.outlookdotcom_remove_subaddress&&(u[0]=u[0].split("+")[0]),!u[0].length)return!1;(e.all_lowercase||e.outlookdotcom_lowercase)&&(u[0]=u[0].toLowerCase())}else if(n.indexOf(u[1])>=0){if(e.yahoo_remove_subaddress){var f=u[0].split("-");u[0]=f.length>1?f.slice(0,-1).join("-"):f[0]}if(!u[0].length)return!1;(e.all_lowercase||e.yahoo_lowercase)&&(u[0]=u[0].toLowerCase())}else s.indexOf(u[1])>=0?((e.all_lowercase||e.yandex_lowercase)&&(u[0]=u[0].toLowerCase()),u[1]=e.yandex_convert_yandexru?"yandex.ru":u[1]):e.all_lowercase&&(u[0]=u[0].toLowerCase());return u.join("@")};var t,l=(t=i(3610))&&t.__esModule?t:{default:t},r={all_lowercase:!0,gmail_lowercase:!0,gmail_remove_dots:!0,gmail_remove_subaddress:!0,gmail_convert_googlemaildotcom:!0,outlookdotcom_lowercase:!0,outlookdotcom_remove_subaddress:!0,yahoo_lowercase:!0,yahoo_remove_subaddress:!0,yandex_lowercase:!0,yandex_convert_yandexru:!0,icloud_lowercase:!0,icloud_remove_subaddress:!0},o=["icloud.com","me.com"],d=["hotmail.at","hotmail.be","hotmail.ca","hotmail.cl","hotmail.co.il","hotmail.co.nz","hotmail.co.th","hotmail.co.uk","hotmail.com","hotmail.com.ar","hotmail.com.au","hotmail.com.br","hotmail.com.gr","hotmail.com.mx","hotmail.com.pe","hotmail.com.tr","hotmail.com.vn","hotmail.cz","hotmail.de","hotmail.dk","hotmail.es","hotmail.fr","hotmail.hu","hotmail.id","hotmail.ie","hotmail.in","hotmail.it","hotmail.jp","hotmail.kr","hotmail.lv","hotmail.my","hotmail.ph","hotmail.pt","hotmail.sa","hotmail.sg","hotmail.sk","live.be","live.co.uk","live.com","live.com.ar","live.com.mx","live.de","live.es","live.eu","live.fr","live.it","live.nl","msn.com","outlook.at","outlook.be","outlook.cl","outlook.co.il","outlook.co.nz","outlook.co.th","outlook.com","outlook.com.ar","outlook.com.au","outlook.com.br","outlook.com.gr","outlook.com.pe","outlook.com.tr","outlook.com.vn","outlook.cz","outlook.de","outlook.dk","outlook.es","outlook.fr","outlook.hu","outlook.id","outlook.ie","outlook.in","outlook.it","outlook.jp","outlook.kr","outlook.lv","outlook.my","outlook.ph","outlook.pt","outlook.sa","outlook.sg","outlook.sk","passport.com"],n=["rocketmail.com","yahoo.ca","yahoo.co.uk","yahoo.com","yahoo.de","yahoo.fr","yahoo.in","yahoo.it","ymail.com"],s=["yandex.ru","yandex.ua","yandex.kz","yandex.com","yandex.by","ya.ru"];function c(a){return a.length>1?a:""}a.exports=e.default,a.exports.default=e.default},1195:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){var i=("object"===r(e)?e.comparisonDate:e)||Date().toString(),t=(0,l.default)(i),o=(0,l.default)(a);return!!(o&&t&&o>t)};var t,l=(t=i(3752))&&t.__esModule?t:{default:t};function r(a){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},r(a)}a.exports=e.default,a.exports.default=e.default},1252:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,t.default)(a),(0,l.default)(a)&&24===a.length};var t=r(i(3399)),l=r(i(2002));function r(a){return a&&a.__esModule?a:{default:a}}a.exports=e.default,a.exports.default=e.default},1371:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a)?parseFloat(a):NaN};var t,l=(t=i(995))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},1449:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.fullWidth.test(a)&&o.halfWidth.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=i(9666),o=i(9534);a.exports=e.default,a.exports.default=e.default},1572:(a,e)=>{"use strict";function i(a){return"[object RegExp]"===Object.prototype.toString.call(a)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){for(var t=0;t<e.length;t++){var l=e[t];if(a===l||i(l)&&l.test(a))return!0}return!1},a.exports=e.default,a.exports.default=e.default},1578:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),f.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/([01][0-9]|2[0-3])/,o=/[0-5][0-9]/,d=new RegExp("[-+]".concat(r.source,":").concat(o.source)),n=new RegExp("([zZ]|".concat(d.source,")")),s=new RegExp("".concat(r.source,":").concat(o.source,":").concat(/([0-5][0-9]|60)/.source).concat(/(\.[0-9]+)?/.source)),c=new RegExp("".concat(/[0-9]{4}/.source,"-").concat(/(0[1-9]|1[0-2])/.source,"-").concat(/([12]\d|0[1-9]|3[01])/.source)),u=new RegExp("".concat(s.source).concat(n.source)),f=new RegExp("^".concat(c.source,"[ tT]").concat(u.source,"$"));a.exports=e.default,a.exports.default=e.default},1666:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return(0,l.default)(a),e&&e.no_symbols?o.test(a):new RegExp("^[+-]?([0-9]*[".concat((e||{}).locale?r.decimal[e.locale]:".","])?[0-9]+$")).test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=i(3237),o=/^[0-9]+$/;a.exports=e.default,a.exports.default=e.default},1697:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o;return(0,t.default)(a),e.loose?(0,l.default)(n,a.toLowerCase()):(0,l.default)(d,a)};var t=r(i(3399)),l=r(i(8644));function r(a){return a&&a.__esModule?a:{default:a}}var o={loose:!1},d=["true","false","1","0"],n=[].concat(d,["yes","no"]);a.exports=e.default,a.exports.default=e.default},1954:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^[A-Z]{2}[0-9A-Z]{3}\d{2}\d{5}$/;a.exports=e.default,a.exports.default=e.default},1996:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return(0,l.default)(a),a.replace(new RegExp("[^".concat(e,"]+"),"g"),"")};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},2002:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^(0x|0h)?[0-9A-F]+$/i;a.exports=e.default,a.exports.default=e.default},2056:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return(0,t.default)(a),0===((e=(0,l.default)(e,o)).ignore_whitespace?a.trim().length:a.length)};var t=r(i(3399)),l=r(i(3610));function r(a){return a&&a.__esModule?a:{default:a}}var o={ignore_whitespace:!1};a.exports=e.default,a.exports.default=e.default},2309:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){(0,l.default)(a);var i=e?new RegExp("^[".concat(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"]+"),"g"):/^\s+/g;return a.replace(i,"")};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},2337:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){if((0,r.default)(a),0!==a.indexOf("mailto:"))return!1;var i=d(a.replace("mailto:","").split("?"),2),o=i[0],s=i[1],c=void 0===s?"":s;if(!o&&!c)return!0;var u=function(a){var e=new Set(["subject","body","cc","bcc"]),i={cc:"",bcc:""},t=!1,l=a.split("&");if(l.length>4)return!1;var r,o=function(a){var e="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!e){if(Array.isArray(a)||(e=n(a))){e&&(a=e);var i=0,t=function(){};return{s:t,n:function(){return i>=a.length?{done:!0}:{done:!1,value:a[i++]}},e:function(a){throw a},f:t}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,r=!0,o=!1;return{s:function(){e=e.call(a)},n:function(){var a=e.next();return r=a.done,a},e:function(a){o=!0,l=a},f:function(){try{r||null==e.return||e.return()}finally{if(o)throw l}}}}(l);try{for(o.s();!(r=o.n()).done;){var s=d(r.value.split("="),2),c=s[0],u=s[1];if(c&&!e.has(c)){t=!0;break}!u||"cc"!==c&&"bcc"!==c||(i[c]=u),c&&e.delete(c)}}catch(a){o.e(a)}finally{o.f()}return!t&&i}(c);return!!u&&"".concat(o,",").concat(u.cc,",").concat(u.bcc).split(",").every(function(a){return!(a=(0,t.default)(a," "))||(0,l.default)(a,e)})};var t=o(i(317)),l=o(i(9517)),r=o(i(3399));function o(a){return a&&a.__esModule?a:{default:a}}function d(a,e){return function(a){if(Array.isArray(a))return a}(a)||function(a,e){var i=null==a?null:"undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=i){var t,l,r,o,d=[],n=!0,s=!1;try{if(r=(i=i.call(a)).next,0===e){if(Object(i)!==i)return;n=!1}else for(;!(n=(t=r.call(i)).done)&&(d.push(t.value),d.length!==e);n=!0);}catch(a){s=!0,l=a}finally{try{if(!n&&null!=i.return&&(o=i.return(),Object(o)!==o))return}finally{if(s)throw l}}return d}}(a,e)||n(a,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function n(a,e){if(a){if("string"==typeof a)return s(a,e);var i={}.toString.call(a).slice(8,-1);return"Object"===i&&a.constructor&&(i=a.constructor.name),"Map"===i||"Set"===i?Array.from(a):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?s(a,e):void 0}}function s(a,e){(null==e||e>a.length)&&(e=a.length);for(var i=0,t=Array(e);i<e;i++)t[i]=a[i];return t}a.exports=e.default,a.exports.default=e.default},2483:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){if((0,l.default)(a),e){var i=new RegExp("[".concat(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"]+$"),"g");return a.replace(i,"")}for(var t=a.length-1;/\s/.test(a.charAt(t));)t-=1;return a.slice(0,t+1)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},2576:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e,i){return(0,l.default)(a),"[object RegExp]"!==Object.prototype.toString.call(e)&&(e=new RegExp(e,i)),!!a.match(e)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},2645:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){if((0,t.default)(a),e in d)return d[e](a);if("any"===e){for(var i in d)if(d.hasOwnProperty(i)&&(0,d[i])(a))return!0;return!1}throw new Error("Invalid locale '".concat(e,"'"))};var t=o(i(3399)),l=o(i(8644)),r=o(i(6084));function o(a){return a&&a.__esModule?a:{default:a}}var d={PL:function(a){(0,t.default)(a);var e={1:1,2:3,3:7,4:9,5:1,6:3,7:7,8:9,9:1,10:3,11:0};if(null!=a&&11===a.length&&(0,r.default)(a,{allow_leading_zeroes:!0})){var i=a.split("").slice(0,-1).reduce(function(a,i,t){return a+Number(i)*e[t+1]},0)%10,l=Number(a.charAt(a.length-1));if(0===i&&0===l||l===10-i)return!0}return!1},ES:function(a){(0,t.default)(a);var e={X:0,Y:1,Z:2},i=a.trim().toUpperCase();if(!/^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/.test(i))return!1;var l=i.slice(0,-1).replace(/[X,Y,Z]/g,function(a){return e[a]});return i.endsWith(["T","R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E"][l%23])},FI:function(a){return(0,t.default)(a),11===a.length&&(!!a.match(/^\d{6}[\-A\+]\d{3}[0-9ABCDEFHJKLMNPRSTUVWXY]{1}$/)&&"0123456789ABCDEFHJKLMNPRSTUVWXY"[(1e3*parseInt(a.slice(0,6),10)+parseInt(a.slice(7,10),10))%31]===a.slice(10,11))},IN:function(a){var e=[[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,0,6,7,8,9,5],[2,3,4,0,1,7,8,9,5,6],[3,4,0,1,2,8,9,5,6,7],[4,0,1,2,3,9,5,6,7,8],[5,9,8,7,6,0,4,3,2,1],[6,5,9,8,7,1,0,4,3,2],[7,6,5,9,8,2,1,0,4,3],[8,7,6,5,9,3,2,1,0,4],[9,8,7,6,5,4,3,2,1,0]],i=[[0,1,2,3,4,5,6,7,8,9],[1,5,7,6,2,8,3,0,9,4],[5,8,0,3,7,9,6,1,4,2],[8,9,1,6,0,4,3,5,2,7],[9,4,5,3,1,2,6,8,7,0],[4,2,8,6,5,7,3,9,0,1],[2,7,9,3,8,0,6,4,1,5],[7,0,4,6,9,1,3,2,5,8]],t=a.trim();if(!/^[1-9]\d{3}\s?\d{4}\s?\d{4}$/.test(t))return!1;var l=0;return t.replace(/\s/g,"").split("").map(Number).reverse().forEach(function(a,t){l=e[l][i[t%8][a]]}),0===l},IR:function(a){if(!a.match(/^\d{10}$/))return!1;if(a="0000".concat(a).slice(a.length-6),0===parseInt(a.slice(3,9),10))return!1;for(var e=parseInt(a.slice(9,10),10),i=0,t=0;t<9;t++)i+=parseInt(a.slice(t,t+1),10)*(10-t);return(i%=11)<2&&e===i||i>=2&&e===11-i},IT:function(a){return 9===a.length&&"CA00000AA"!==a&&a.search(/C[A-Z]\d{5}[A-Z]{2}/i)>-1},NO:function(a){var e=a.trim();if(isNaN(Number(e)))return!1;if(11!==e.length)return!1;if("00000000000"===e)return!1;var i=e.split("").map(Number),t=(11-(3*i[0]+7*i[1]+6*i[2]+1*i[3]+8*i[4]+9*i[5]+4*i[6]+5*i[7]+2*i[8])%11)%11,l=(11-(5*i[0]+4*i[1]+3*i[2]+2*i[3]+7*i[4]+6*i[5]+5*i[6]+4*i[7]+3*i[8]+2*t)%11)%11;return t===i[9]&&l===i[10]},TH:function(a){if(!a.match(/^[1-8]\d{12}$/))return!1;for(var e=0,i=0;i<12;i++)e+=parseInt(a[i],10)*(13-i);return a[12]===((11-e%11)%10).toString()},LK:function(a){return!(10!==a.length||!/^[1-9]\d{8}[vx]$/i.test(a))||!(12!==a.length||!/^[1-9]\d{11}$/i.test(a))},"he-IL":function(a){var e=a.trim();if(!/^\d{9}$/.test(e))return!1;for(var i,t=e,l=0,r=0;r<t.length;r++)l+=(i=Number(t[r])*(r%2+1))>9?i-9:i;return l%10==0},"ar-LY":function(a){var e=a.trim();return!!/^(1|2)\d{11}$/.test(e)},"ar-TN":function(a){var e=a.trim();return!!/^\d{8}$/.test(e)},"zh-CN":function(a){var e,i=["11","12","13","14","15","21","22","23","31","32","33","34","35","36","37","41","42","43","44","45","46","50","51","52","53","54","61","62","63","64","65","71","81","82","91"],t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"],r=["1","0","X","9","8","7","6","5","4","3","2"],o=function(a){return(0,l.default)(i,a)},d=function(a){var e=parseInt(a.substring(0,4),10),i=parseInt(a.substring(4,6),10),t=parseInt(a.substring(6),10),l=new Date(e,i-1,t);return!(l>new Date)&&l.getFullYear()===e&&l.getMonth()===i-1&&l.getDate()===t};return!!/^\d{15}|(\d{17}(\d|x|X))$/.test(e=a)&&(15===e.length?function(a){var e=/^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(a);if(!e)return!1;var i=a.substring(0,2);if(!(e=o(i)))return!1;var t="19".concat(a.substring(6,12));return!!(e=d(t))}(e):function(a){var e=/^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(a);if(!e)return!1;var i=a.substring(0,2);if(!(e=o(i)))return!1;var l=a.substring(6,14);return!!(e=d(l))&&function(a){return function(a){for(var e=a.substring(0,17),i=0,l=0;l<17;l++)i+=parseInt(e.charAt(l),10)*parseInt(t[l],10);return r[i%11]}(a)===a.charAt(17).toUpperCase()}(a)}(e))},"zh-HK":function(a){var e=/^[0-9]$/;if(a=(a=a.trim()).toUpperCase(),!/^[A-Z]{1,2}[0-9]{6}((\([0-9A]\))|(\[[0-9A]\])|([0-9A]))$/.test(a))return!1;8===(a=a.replace(/\[|\]|\(|\)/g,"")).length&&(a="3".concat(a));for(var i=0,t=0;t<=7;t++)i+=(e.test(a[t])?a[t]:(a[t].charCodeAt(0)-55)%11)*(9-t);return(0==(i%=11)?"0":1===i?"A":String(11-i))===a[a.length-1]},"zh-TW":function(a){var e={A:10,B:11,C:12,D:13,E:14,F:15,G:16,H:17,I:34,J:18,K:19,L:20,M:21,N:22,O:35,P:23,Q:24,R:25,S:26,T:27,U:28,V:29,W:32,X:30,Y:31,Z:33},i=a.trim().toUpperCase();return!!/^[A-Z][0-9]{9}$/.test(i)&&Array.from(i).reduce(function(a,i,t){if(0===t){var l=e[i];return l%10*9+Math.floor(l/10)}return 9===t?(10-a%10-Number(i))%10==0:a+Number(i)*(9-t)},0)},PK:function(a){var e=a.trim();return/^[1-7][0-9]{4}-[0-9]{7}-[1-9]$/.test(e)}};a.exports=e.default,a.exports.default=e.default},2678:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){if((0,l.default)(a),!r.test(a))return!1;for(var e=!0,i=0,t=a.length-2;t>=0;t--)if(a[t]>="A"&&a[t]<="Z")for(var o=a[t].charCodeAt(0)-55,d=0,n=[o%10,Math.trunc(o/10)];d<n.length;d++){var s=n[d];i+=e?s>=5?1+2*(s-5):2*s:s,e=!e}else{var c=a[t].charCodeAt(0)-"0".charCodeAt(0);i+=e?c>=5?1+2*(c-5):2*c:c,e=!e}var u=10*Math.trunc((i+9)/10)-i;return+a[a.length-1]===u};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^[A-Z]{2}[0-9A-Z]{9}[0-9]$/;a.exports=e.default,a.exports.default=e.default},2830:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/[^\x00-\x7F]/;a.exports=e.default,a.exports.default=e.default},3158:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.has(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=new Set(["004","008","010","012","016","020","024","028","031","032","036","040","044","048","050","051","052","056","060","064","068","070","072","074","076","084","086","090","092","096","100","104","108","112","116","120","124","132","136","140","144","148","152","156","158","162","166","170","174","175","178","180","184","188","191","192","196","203","204","208","212","214","218","222","226","231","232","233","234","238","239","242","246","248","250","254","258","260","262","266","268","270","275","276","288","292","296","300","304","308","312","316","320","324","328","332","334","336","340","344","348","352","356","360","364","368","372","376","380","384","388","392","398","400","404","408","410","414","417","418","422","426","428","430","434","438","440","442","446","450","454","458","462","466","470","474","478","480","484","492","496","498","499","500","504","508","512","516","520","524","528","531","533","534","535","540","548","554","558","562","566","570","574","578","580","581","583","584","585","586","591","598","600","604","608","612","616","620","624","626","630","634","638","642","643","646","652","654","659","660","662","663","666","670","674","678","682","686","688","690","694","702","703","704","705","706","710","716","724","728","729","732","740","744","748","752","756","760","762","764","768","772","776","780","784","788","792","795","796","798","800","804","807","818","826","831","832","833","834","840","850","854","858","860","862","876","882","887","894"]);a.exports=e.default,a.exports.default=e.default},3196:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function a(e,i){return(0,l.default)(e),null!=i&&i.eui&&(i.eui=String(i.eui)),null!=i&&i.no_colons||null!=i&&i.no_separators?"48"===i.eui?o.test(e):"64"===i.eui?s.test(e):o.test(e)||s.test(e):"48"===(null==i?void 0:i.eui)?r.test(e)||d.test(e):"64"===(null==i?void 0:i.eui)?n.test(e)||c.test(e):a(e,{eui:"48"})||a(e,{eui:"64"})};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^(?:[0-9a-fA-F]{2}([-:\s]))([0-9a-fA-F]{2}\1){4}([0-9a-fA-F]{2})$/,o=/^([0-9a-fA-F]){12}$/,d=/^([0-9a-fA-F]{4}\.){2}([0-9a-fA-F]{4})$/,n=/^(?:[0-9a-fA-F]{2}([-:\s]))([0-9a-fA-F]{2}\1){6}([0-9a-fA-F]{2})$/,s=/^([0-9a-fA-F]){16}$/,c=/^([0-9a-fA-F]{4}\.){3}([0-9a-fA-F]{4})$/;a.exports=e.default,a.exports.default=e.default},3214:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return(0,l.default)(a),e?"1"===a||/^true$/i.test(a):"0"!==a&&!/^false$/i.test(a)&&""!==a};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},3237:(a,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.farsiLocales=e.englishLocales=e.dotDecimal=e.decimal=e.commaDecimal=e.bengaliLocales=e.arabicLocales=e.alphanumeric=e.alpha=void 0;for(var i,t=e.alpha={"en-US":/^[A-Z]+$/i,"az-AZ":/^[A-VXYZ\u00c7\u018f\u011e\u0130\u0131\u00d6\u015e\u00dc]+$/i,"bg-BG":/^[\u0410-\u042f]+$/i,"cs-CZ":/^[A-Z\u00c1\u010c\u010e\u00c9\u011a\u00cd\u0147\u00d3\u0158\u0160\u0164\u00da\u016e\u00dd\u017d]+$/i,"da-DK":/^[A-Z\u00c6\u00d8\u00c5]+$/i,"de-DE":/^[A-Z\u00c4\u00d6\u00dc\u00df]+$/i,"el-GR":/^[\u0391-\u03ce]+$/i,"es-ES":/^[A-Z\u00c1\u00c9\u00cd\u00d1\u00d3\u00da\u00dc]+$/i,"fa-IR":/^[\u0627\u0628\u067e\u062a\u062b\u062c\u0686\u062d\u062e\u062f\u0630\u0631\u0632\u0698\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0641\u0642\u06a9\u06af\u0644\u0645\u0646\u0648\u0647\u06cc]+$/i,"fi-FI":/^[A-Z\u00c5\u00c4\u00d6]+$/i,"fr-FR":/^[A-Z\u00c0\u00c2\u00c6\u00c7\u00c9\u00c8\u00ca\u00cb\u00cf\u00ce\u00d4\u0152\u00d9\u00db\u00dc\u0178]+$/i,"it-IT":/^[A-Z\u00c0\u00c9\u00c8\u00cc\u00ce\u00d3\u00d2\u00d9]+$/i,"ja-JP":/^[\u3041-\u3093\u30a1-\u30f6\uff66-\uff9f\u4e00-\u9fa0\u30fc\u30fb\u3002\u3001]+$/i,"nb-NO":/^[A-Z\u00c6\u00d8\u00c5]+$/i,"nl-NL":/^[A-Z\u00c1\u00c9\u00cb\u00cf\u00d3\u00d6\u00dc\u00da]+$/i,"nn-NO":/^[A-Z\u00c6\u00d8\u00c5]+$/i,"hu-HU":/^[A-Z\u00c1\u00c9\u00cd\u00d3\u00d6\u0150\u00da\u00dc\u0170]+$/i,"pl-PL":/^[A-Z\u0104\u0106\u0118\u015a\u0141\u0143\u00d3\u017b\u0179]+$/i,"pt-PT":/^[A-Z\u00c3\u00c1\u00c0\u00c2\u00c4\u00c7\u00c9\u00ca\u00cb\u00cd\u00cf\u00d5\u00d3\u00d4\u00d6\u00da\u00dc]+$/i,"ru-RU":/^[\u0410-\u042f\u0401]+$/i,"kk-KZ":/^[\u0410-\u042f\u0401\u04D8\u04B0\u0406\u04A2\u0492\u04AE\u049A\u04E8\u04BA]+$/i,"sl-SI":/^[A-Z\u010c\u0106\u0110\u0160\u017d]+$/i,"sk-SK":/^[A-Z\u00c1\u010c\u010e\u00c9\u00cd\u0147\u00d3\u0160\u0164\u00da\u00dd\u017d\u0139\u0154\u013d\u00c4\u00d4]+$/i,"sr-RS@latin":/^[A-Z\u010c\u0106\u017d\u0160\u0110]+$/i,"sr-RS":/^[\u0410-\u042f\u0402\u0408\u0409\u040a\u040b\u040f]+$/i,"sv-SE":/^[A-Z\u00c5\u00c4\u00d6]+$/i,"th-TH":/^[\u0e01-\u0e50\s]+$/i,"tr-TR":/^[A-Z\u00c7\u011e\u0130\u0131\u00d6\u015e\u00dc]+$/i,"uk-UA":/^[\u0410-\u0429\u042c\u042e\u042f\u0404I\u0407\u0490\u0456]+$/i,"vi-VN":/^[A-Z\u00c0\u00c1\u1ea0\u1ea2\u00c3\u00c2\u1ea6\u1ea4\u1eac\u1ea8\u1eaa\u0102\u1eb0\u1eae\u1eb6\u1eb2\u1eb4\u0110\u00c8\u00c9\u1eb8\u1eba\u1ebc\u00ca\u1ec0\u1ebe\u1ec6\u1ec2\u1ec4\u00cc\u00cd\u1eca\u1ec8\u0128\u00d2\u00d3\u1ecc\u1ece\u00d5\u00d4\u1ed2\u1ed0\u1ed8\u1ed4\u1ed6\u01a0\u1edc\u1eda\u1ee2\u1ede\u1ee0\u00d9\u00da\u1ee4\u1ee6\u0168\u01af\u1eea\u1ee8\u1ef0\u1eec\u1eee\u1ef2\u00dd\u1ef4\u1ef6\u1ef8]+$/i,"ko-KR":/^[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]*$/,"ku-IQ":/^[\u0626\u0627\u0628\u067e\u062a\u062c\u0686\u062d\u062e\u062f\u0631\u0695\u0632\u0698\u0633\u0634\u0639\u063a\u0641\u06a4\u0642\u06a9\u06af\u0644\u06b5\u0645\u0646\u0648\u06c6\u06be\u06d5\u06cc\u06ce\u064a\u0637\u0624\u062b\u0622\u0625\u0623\u0643\u0636\u0635\u0629\u0638\u0630]+$/i,ar:/^[\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u0670]+$/,he:/^[\u05d0-\u05ea]+$/,fa:/^['\u0622\u0627\u0621\u0623\u0624\u0626\u0628\u067e\u062a\u062b\u062c\u0686\u062d\u062e\u062f\u0630\u0631\u0632\u0698\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0641\u0642\u06a9\u06af\u0644\u0645\u0646\u0648\u0647\u0629\u06cc']+$/i,bn:/^['\u0980\u0981\u0982\u0983\u0985\u0986\u0987\u0988\u0989\u098a\u098b\u098c\u098f\u0990\u0993\u0994\u0995\u0996\u0997\u0998\u0999\u099a\u099b\u099c\u099d\u099e\u099f\u09a0\u09a1\u09a2\u09a3\u09a4\u09a5\u09a6\u09a7\u09a8\u09aa\u09ab\u09ac\u09ad\u09ae\u09af\u09b0\u09b2\u09b6\u09b7\u09b8\u09b9\u09bc\u09bd\u09be\u09bf\u09c0\u09c1\u09c2\u09c3\u09c4\u09c7\u09c8\u09cb\u09cc\u09cd\u09ce\u09d7\u09dc\u09dd\u09df\u09e0\u09e1\u09e2\u09e3\u09f0\u09f1\u09f2\u09f3\u09f4\u09f5\u09f6\u09f7\u09f8\u09f9\u09fa\u09fb']+$/,eo:/^[ABC\u0108D-G\u011cH\u0124IJ\u0134K-PRS\u015cTU\u016cVZ]+$/i,"hi-IN":/^[\u0900-\u0961]+[\u0972-\u097F]*$/i,"si-LK":/^[\u0D80-\u0DFF]+$/},l=e.alphanumeric={"en-US":/^[0-9A-Z]+$/i,"az-AZ":/^[0-9A-VXYZ\u00c7\u018f\u011e\u0130\u0131\u00d6\u015e\u00dc]+$/i,"bg-BG":/^[0-9\u0410-\u042f]+$/i,"cs-CZ":/^[0-9A-Z\u00c1\u010c\u010e\u00c9\u011a\u00cd\u0147\u00d3\u0158\u0160\u0164\u00da\u016e\u00dd\u017d]+$/i,"da-DK":/^[0-9A-Z\u00c6\u00d8\u00c5]+$/i,"de-DE":/^[0-9A-Z\u00c4\u00d6\u00dc\u00df]+$/i,"el-GR":/^[0-9\u0391-\u03c9]+$/i,"es-ES":/^[0-9A-Z\u00c1\u00c9\u00cd\u00d1\u00d3\u00da\u00dc]+$/i,"fi-FI":/^[0-9A-Z\u00c5\u00c4\u00d6]+$/i,"fr-FR":/^[0-9A-Z\u00c0\u00c2\u00c6\u00c7\u00c9\u00c8\u00ca\u00cb\u00cf\u00ce\u00d4\u0152\u00d9\u00db\u00dc\u0178]+$/i,"it-IT":/^[0-9A-Z\u00c0\u00c9\u00c8\u00cc\u00ce\u00d3\u00d2\u00d9]+$/i,"ja-JP":/^[0-9\uff10-\uff19\u3041-\u3093\u30a1-\u30f6\uff66-\uff9f\u4e00-\u9fa0\u30fc\u30fb\u3002\u3001]+$/i,"hu-HU":/^[0-9A-Z\u00c1\u00c9\u00cd\u00d3\u00d6\u0150\u00da\u00dc\u0170]+$/i,"nb-NO":/^[0-9A-Z\u00c6\u00d8\u00c5]+$/i,"nl-NL":/^[0-9A-Z\u00c1\u00c9\u00cb\u00cf\u00d3\u00d6\u00dc\u00da]+$/i,"nn-NO":/^[0-9A-Z\u00c6\u00d8\u00c5]+$/i,"pl-PL":/^[0-9A-Z\u0104\u0106\u0118\u015a\u0141\u0143\u00d3\u017b\u0179]+$/i,"pt-PT":/^[0-9A-Z\u00c3\u00c1\u00c0\u00c2\u00c4\u00c7\u00c9\u00ca\u00cb\u00cd\u00cf\u00d5\u00d3\u00d4\u00d6\u00da\u00dc]+$/i,"ru-RU":/^[0-9\u0410-\u042f\u0401]+$/i,"kk-KZ":/^[0-9\u0410-\u042f\u0401\u04D8\u04B0\u0406\u04A2\u0492\u04AE\u049A\u04E8\u04BA]+$/i,"sl-SI":/^[0-9A-Z\u010c\u0106\u0110\u0160\u017d]+$/i,"sk-SK":/^[0-9A-Z\u00c1\u010c\u010e\u00c9\u00cd\u0147\u00d3\u0160\u0164\u00da\u00dd\u017d\u0139\u0154\u013d\u00c4\u00d4]+$/i,"sr-RS@latin":/^[0-9A-Z\u010c\u0106\u017d\u0160\u0110]+$/i,"sr-RS":/^[0-9\u0410-\u042f\u0402\u0408\u0409\u040a\u040b\u040f]+$/i,"sv-SE":/^[0-9A-Z\u00c5\u00c4\u00d6]+$/i,"th-TH":/^[\u0e01-\u0e59\s]+$/i,"tr-TR":/^[0-9A-Z\u00c7\u011e\u0130\u0131\u00d6\u015e\u00dc]+$/i,"uk-UA":/^[0-9\u0410-\u0429\u042c\u042e\u042f\u0404I\u0407\u0490\u0456]+$/i,"ko-KR":/^[0-9\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]*$/,"ku-IQ":/^[\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u06690-9\u0626\u0627\u0628\u067e\u062a\u062c\u0686\u062d\u062e\u062f\u0631\u0695\u0632\u0698\u0633\u0634\u0639\u063a\u0641\u06a4\u0642\u06a9\u06af\u0644\u06b5\u0645\u0646\u0648\u06c6\u06be\u06d5\u06cc\u06ce\u064a\u0637\u0624\u062b\u0622\u0625\u0623\u0643\u0636\u0635\u0629\u0638\u0630]+$/i,"vi-VN":/^[0-9A-Z\u00c0\u00c1\u1ea0\u1ea2\u00c3\u00c2\u1ea6\u1ea4\u1eac\u1ea8\u1eaa\u0102\u1eb0\u1eae\u1eb6\u1eb2\u1eb4\u0110\u00c8\u00c9\u1eb8\u1eba\u1ebc\u00ca\u1ec0\u1ebe\u1ec6\u1ec2\u1ec4\u00cc\u00cd\u1eca\u1ec8\u0128\u00d2\u00d3\u1ecc\u1ece\u00d5\u00d4\u1ed2\u1ed0\u1ed8\u1ed4\u1ed6\u01a0\u1edc\u1eda\u1ee2\u1ede\u1ee0\u00d9\u00da\u1ee4\u1ee6\u0168\u01af\u1eea\u1ee8\u1ef0\u1eec\u1eee\u1ef2\u00dd\u1ef4\u1ef6\u1ef8]+$/i,ar:/^[\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u06690-9\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u0670]+$/,he:/^[0-9\u05d0-\u05ea]+$/,fa:/^['0-9\u0622\u0627\u0621\u0623\u0624\u0626\u0628\u067e\u062a\u062b\u062c\u0686\u062d\u062e\u062f\u0630\u0631\u0632\u0698\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0641\u0642\u06a9\u06af\u0644\u0645\u0646\u0648\u0647\u0629\u06cc\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9\u06f0']+$/i,bn:/^['\u0980\u0981\u0982\u0983\u0985\u0986\u0987\u0988\u0989\u098a\u098b\u098c\u098f\u0990\u0993\u0994\u0995\u0996\u0997\u0998\u0999\u099a\u099b\u099c\u099d\u099e\u099f\u09a0\u09a1\u09a2\u09a3\u09a4\u09a5\u09a6\u09a7\u09a8\u09aa\u09ab\u09ac\u09ad\u09ae\u09af\u09b0\u09b2\u09b6\u09b7\u09b8\u09b9\u09bc\u09bd\u09be\u09bf\u09c0\u09c1\u09c2\u09c3\u09c4\u09c7\u09c8\u09cb\u09cc\u09cd\u09ce\u09d7\u09dc\u09dd\u09df\u09e0\u09e1\u09e2\u09e3\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09f0\u09f1\u09f2\u09f3\u09f4\u09f5\u09f6\u09f7\u09f8\u09f9\u09fa\u09fb']+$/,eo:/^[0-9ABC\u0108D-G\u011cH\u0124IJ\u0134K-PRS\u015cTU\u016cVZ]+$/i,"hi-IN":/^[\u0900-\u0963]+[\u0966-\u097F]*$/i,"si-LK":/^[0-9\u0D80-\u0DFF]+$/},r=e.decimal={"en-US":".",ar:"\u066b"},o=e.englishLocales=["AU","GB","HK","IN","NZ","ZA","ZM"],d=0;d<o.length;d++)t[i="en-".concat(o[d])]=t["en-US"],l[i]=l["en-US"],r[i]=r["en-US"];for(var n,s=e.arabicLocales=["AE","BH","DZ","EG","IQ","JO","KW","LB","LY","MA","QM","QA","SA","SD","SY","TN","YE"],c=0;c<s.length;c++)t[n="ar-".concat(s[c])]=t.ar,l[n]=l.ar,r[n]=r.ar;for(var u,f=e.farsiLocales=["IR","AF"],v=0;v<f.length;v++)l[u="fa-".concat(f[v])]=l.fa,r[u]=r.ar;for(var A,m=e.bengaliLocales=["BD","IN"],b=0;b<m.length;b++)t[A="bn-".concat(m[b])]=t.bn,l[A]=l.bn,r[A]=r["en-US"];for(var g=e.dotDecimal=["ar-EG","ar-LB","ar-LY"],p=e.commaDecimal=["bg-BG","cs-CZ","da-DK","de-DE","el-GR","en-ZM","eo","es-ES","fr-CA","fr-FR","id-ID","it-IT","ku-IQ","hi-IN","hu-HU","nb-NO","nn-NO","nl-NL","pl-PL","pt-PT","ru-RU","kk-KZ","si-LK","sl-SI","sr-RS@latin","sr-RS","sv-SE","tr-TR","uk-UA","vi-VN"],h=0;h<g.length;h++)r[g[h]]=r["en-US"];for(var F=0;F<p.length;F++)r[p[F]]=",";t["fr-CA"]=t["fr-FR"],l["fr-CA"]=l["fr-FR"],t["pt-BR"]=t["pt-PT"],l["pt-BR"]=l["pt-PT"],r["pt-BR"]=r["pt-PT"],t["pl-Pl"]=t["pl-PL"],l["pl-Pl"]=l["pl-PL"],r["pl-Pl"]=r["pl-PL"],t["fa-AF"]=t.fa},3399:(a,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){if(null==a)throw new TypeError("Expected a string but received a ".concat(a));if("String"!==a.constructor.name)throw new TypeError("Expected a string but received a ".concat(a.constructor.name))},a.exports=e.default,a.exports.default=e.default},3405:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ScriptCodes=void 0,e.default=function(a){return(0,l.default)(a),r.has(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=new Set(["Adlm","Afak","Aghb","Ahom","Arab","Aran","Armi","Armn","Avst","Bali","Bamu","Bass","Batk","Beng","Bhks","Blis","Bopo","Brah","Brai","Bugi","Buhd","Cakm","Cans","Cari","Cham","Cher","Chis","Chrs","Cirt","Copt","Cpmn","Cprt","Cyrl","Cyrs","Deva","Diak","Dogr","Dsrt","Dupl","Egyd","Egyh","Egyp","Elba","Elym","Ethi","Gara","Geok","Geor","Glag","Gong","Gonm","Goth","Gran","Grek","Gujr","Gukh","Guru","Hanb","Hang","Hani","Hano","Hans","Hant","Hatr","Hebr","Hira","Hluw","Hmng","Hmnp","Hrkt","Hung","Inds","Ital","Jamo","Java","Jpan","Jurc","Kali","Kana","Kawi","Khar","Khmr","Khoj","Kitl","Kits","Knda","Kore","Kpel","Krai","Kthi","Lana","Laoo","Latf","Latg","Latn","Leke","Lepc","Limb","Lina","Linb","Lisu","Loma","Lyci","Lydi","Mahj","Maka","Mand","Mani","Marc","Maya","Medf","Mend","Merc","Mero","Mlym","Modi","Mong","Moon","Mroo","Mtei","Mult","Mymr","Nagm","Nand","Narb","Nbat","Newa","Nkdb","Nkgb","Nkoo","Nshu","Ogam","Olck","Onao","Orkh","Orya","Osge","Osma","Ougr","Palm","Pauc","Pcun","Pelm","Perm","Phag","Phli","Phlp","Phlv","Phnx","Plrd","Piqd","Prti","Psin","Qaaa","Qaab","Qaac","Qaad","Qaae","Qaaf","Qaag","Qaah","Qaai","Qaaj","Qaak","Qaal","Qaam","Qaan","Qaao","Qaap","Qaaq","Qaar","Qaas","Qaat","Qaau","Qaav","Qaaw","Qaax","Qaay","Qaaz","Qaba","Qabb","Qabc","Qabd","Qabe","Qabf","Qabg","Qabh","Qabi","Qabj","Qabk","Qabl","Qabm","Qabn","Qabo","Qabp","Qabq","Qabr","Qabs","Qabt","Qabu","Qabv","Qabw","Qabx","Ranj","Rjng","Rohg","Roro","Runr","Samr","Sara","Sarb","Saur","Sgnw","Shaw","Shrd","Shui","Sidd","Sidt","Sind","Sinh","Sogd","Sogo","Sora","Soyo","Sund","Sunu","Sylo","Syrc","Syre","Syrj","Syrn","Tagb","Takr","Tale","Talu","Taml","Tang","Tavt","Tayo","Telu","Teng","Tfng","Tglg","Thaa","Thai","Tibt","Tirh","Tnsa","Todr","Tols","Toto","Tutg","Ugar","Vaii","Visp","Vith","Wara","Wcho","Wole","Xpeo","Xsux","Yezi","Yiii","Zanb","Zinh","Zmth","Zsye","Zsym","Zxxx","Zyyy","Zzzz"]);e.ScriptCodes=r},3442:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){(0,l.default)(a);var i=a.replace(/\s/g,"").toUpperCase();return e.toUpperCase()in r&&r[e].test(i)},e.locales=void 0;var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r={AM:/^[A-Z]{2}\d{7}$/,AR:/^[A-Z]{3}\d{6}$/,AT:/^[A-Z]\d{7}$/,AU:/^[A-Z]\d{7}$/,AZ:/^[A-Z]{1}\d{8}$/,BE:/^[A-Z]{2}\d{6}$/,BG:/^\d{9}$/,BR:/^[A-Z]{2}\d{6}$/,BY:/^[A-Z]{2}\d{7}$/,CA:/^[A-Z]{2}\d{6}$|^[A-Z]\d{6}[A-Z]{2}$/,CH:/^[A-Z]\d{7}$/,CN:/^G\d{8}$|^E(?![IO])[A-Z0-9]\d{7}$/,CY:/^[A-Z](\d{6}|\d{8})$/,CZ:/^\d{8}$/,DE:/^[CFGHJKLMNPRTVWXYZ0-9]{9}$/,DK:/^\d{9}$/,DZ:/^\d{9}$/,EE:/^([A-Z]\d{7}|[A-Z]{2}\d{7})$/,ES:/^[A-Z0-9]{2}([A-Z0-9]?)\d{6}$/,FI:/^[A-Z]{2}\d{7}$/,FR:/^\d{2}[A-Z]{2}\d{5}$/,GB:/^\d{9}$/,GR:/^[A-Z]{2}\d{7}$/,HR:/^\d{9}$/,HU:/^[A-Z]{2}(\d{6}|\d{7})$/,IE:/^[A-Z0-9]{2}\d{7}$/,IN:/^[A-Z]{1}-?\d{7}$/,ID:/^[A-C]\d{7}$/,IR:/^[A-Z]\d{8}$/,IS:/^(A)\d{7}$/,IT:/^[A-Z0-9]{2}\d{7}$/,JM:/^[Aa]\d{7}$/,JP:/^[A-Z]{2}\d{7}$/,KR:/^[MS]\d{8}$/,KZ:/^[a-zA-Z]\d{7}$/,LI:/^[a-zA-Z]\d{5}$/,LT:/^[A-Z0-9]{8}$/,LU:/^[A-Z0-9]{8}$/,LV:/^[A-Z0-9]{2}\d{7}$/,LY:/^[A-Z0-9]{8}$/,MT:/^\d{7}$/,MZ:/^([A-Z]{2}\d{7})|(\d{2}[A-Z]{2}\d{5})$/,MY:/^[AHK]\d{8}$/,MX:/^\d{10,11}$/,NL:/^[A-Z]{2}[A-Z0-9]{6}\d$/,NZ:/^([Ll]([Aa]|[Dd]|[Ff]|[Hh])|[Ee]([Aa]|[Pp])|[Nn])\d{6}$/,PH:/^([A-Z](\d{6}|\d{7}[A-Z]))|([A-Z]{2}(\d{6}|\d{7}))$/,PK:/^[A-Z]{2}\d{7}$/,PL:/^[A-Z]{2}\d{7}$/,PT:/^[A-Z]\d{6}$/,RO:/^\d{8,9}$/,RU:/^\d{9}$/,SE:/^\d{8}$/,SL:/^(P)[A-Z]\d{7}$/,SK:/^[0-9A-Z]\d{7}$/,TH:/^[A-Z]{1,2}\d{6,7}$/,TR:/^[A-Z]\d{8}$/,UA:/^[A-Z]{2}\d{6}$/,US:/^\d{9}$|^[A-Z]\d{8}$/,ZA:/^[TAMD]\d{8}$/};e.locales=Object.keys(r)},3459:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/[\uD800-\uDBFF][\uDC00-\uDFFF]/;a.exports=e.default,a.exports.default=e.default},3583:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){(0,l.default)(a);var e=a.split(",");if(e.length<2)return!1;var i=e.shift().trim().split(";"),t=i.shift();if("data:"!==t.slice(0,5))return!1;var n=t.slice(5);if(""!==n&&!r.test(n))return!1;for(var s=0;s<i.length;s++)if((s!==i.length-1||"base64"!==i[s].toLowerCase())&&!o.test(i[s]))return!1;for(var c=0;c<e.length;c++)if(!d.test(e[c]))return!1;return!0};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^[a-z]+\/[a-z0-9\-\+\._]+$/i,o=/^[a-z\-]+=[a-z0-9\-]+$/i,d=/^[a-z0-9!\$&'\(\)\*\+,;=\-\._~:@\/\?%\s]*$/i;a.exports=e.default,a.exports.default=e.default},3609:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){(0,l.default)(a);for(var e,i,t,r=a.replace(/[- ]+/g,""),o=0,d=r.length-1;d>=0;d--)e=r.substring(d,d+1),i=parseInt(e,10),o+=t&&(i*=2)>=10?i%10+1:i,t=!t;return!(o%10!=0||!r)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},3610:(a,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;for(var i in e)void 0===a[i]&&(a[i]=e[i]);return a},a.exports=e.default,a.exports.default=e.default},3641:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,t.default)(a),function(a,e){var i=a.replace(/[\s\-]+/gi,"").toUpperCase(),t=i.slice(0,2).toUpperCase(),r=t in o;if(e.whitelist){if(e.whitelist.filter(function(a){return!(a in o)}).length>0)return!1;if(!(0,l.default)(e.whitelist,t))return!1}return(!e.blacklist||!(0,l.default)(e.blacklist,t))&&(r&&o[t].test(i))}(a,e)&&function(a){var e=a.replace(/[^A-Z0-9]+/gi,"").toUpperCase();return 1===(e.slice(4)+e.slice(0,4)).replace(/[A-Z]/g,function(a){return a.charCodeAt(0)-55}).match(/\d{1,7}/g).reduce(function(a,e){return Number(a+e)%97},"")}(a)},e.locales=void 0;var t=r(i(3399)),l=r(i(8644));function r(a){return a&&a.__esModule?a:{default:a}}var o={AD:/^(AD[0-9]{2})\d{8}[A-Z0-9]{12}$/,AE:/^(AE[0-9]{2})\d{3}\d{16}$/,AL:/^(AL[0-9]{2})\d{8}[A-Z0-9]{16}$/,AT:/^(AT[0-9]{2})\d{16}$/,AZ:/^(AZ[0-9]{2})[A-Z0-9]{4}\d{20}$/,BA:/^(BA[0-9]{2})\d{16}$/,BE:/^(BE[0-9]{2})\d{12}$/,BG:/^(BG[0-9]{2})[A-Z]{4}\d{6}[A-Z0-9]{8}$/,BH:/^(BH[0-9]{2})[A-Z]{4}[A-Z0-9]{14}$/,BR:/^(BR[0-9]{2})\d{23}[A-Z]{1}[A-Z0-9]{1}$/,BY:/^(BY[0-9]{2})[A-Z0-9]{4}\d{20}$/,CH:/^(CH[0-9]{2})\d{5}[A-Z0-9]{12}$/,CR:/^(CR[0-9]{2})\d{18}$/,CY:/^(CY[0-9]{2})\d{8}[A-Z0-9]{16}$/,CZ:/^(CZ[0-9]{2})\d{20}$/,DE:/^(DE[0-9]{2})\d{18}$/,DK:/^(DK[0-9]{2})\d{14}$/,DO:/^(DO[0-9]{2})[A-Z]{4}\d{20}$/,DZ:/^(DZ\d{24})$/,EE:/^(EE[0-9]{2})\d{16}$/,EG:/^(EG[0-9]{2})\d{25}$/,ES:/^(ES[0-9]{2})\d{20}$/,FI:/^(FI[0-9]{2})\d{14}$/,FO:/^(FO[0-9]{2})\d{14}$/,FR:/^(FR[0-9]{2})\d{10}[A-Z0-9]{11}\d{2}$/,GB:/^(GB[0-9]{2})[A-Z]{4}\d{14}$/,GE:/^(GE[0-9]{2})[A-Z0-9]{2}\d{16}$/,GI:/^(GI[0-9]{2})[A-Z]{4}[A-Z0-9]{15}$/,GL:/^(GL[0-9]{2})\d{14}$/,GR:/^(GR[0-9]{2})\d{7}[A-Z0-9]{16}$/,GT:/^(GT[0-9]{2})[A-Z0-9]{4}[A-Z0-9]{20}$/,HR:/^(HR[0-9]{2})\d{17}$/,HU:/^(HU[0-9]{2})\d{24}$/,IE:/^(IE[0-9]{2})[A-Z]{4}\d{14}$/,IL:/^(IL[0-9]{2})\d{19}$/,IQ:/^(IQ[0-9]{2})[A-Z]{4}\d{15}$/,IR:/^(IR[0-9]{2})0\d{2}0\d{18}$/,IS:/^(IS[0-9]{2})\d{22}$/,IT:/^(IT[0-9]{2})[A-Z]{1}\d{10}[A-Z0-9]{12}$/,JO:/^(JO[0-9]{2})[A-Z]{4}\d{22}$/,KW:/^(KW[0-9]{2})[A-Z]{4}[A-Z0-9]{22}$/,KZ:/^(KZ[0-9]{2})\d{3}[A-Z0-9]{13}$/,LB:/^(LB[0-9]{2})\d{4}[A-Z0-9]{20}$/,LC:/^(LC[0-9]{2})[A-Z]{4}[A-Z0-9]{24}$/,LI:/^(LI[0-9]{2})\d{5}[A-Z0-9]{12}$/,LT:/^(LT[0-9]{2})\d{16}$/,LU:/^(LU[0-9]{2})\d{3}[A-Z0-9]{13}$/,LV:/^(LV[0-9]{2})[A-Z]{4}[A-Z0-9]{13}$/,MA:/^(MA[0-9]{26})$/,MC:/^(MC[0-9]{2})\d{10}[A-Z0-9]{11}\d{2}$/,MD:/^(MD[0-9]{2})[A-Z0-9]{20}$/,ME:/^(ME[0-9]{2})\d{18}$/,MK:/^(MK[0-9]{2})\d{3}[A-Z0-9]{10}\d{2}$/,MR:/^(MR[0-9]{2})\d{23}$/,MT:/^(MT[0-9]{2})[A-Z]{4}\d{5}[A-Z0-9]{18}$/,MU:/^(MU[0-9]{2})[A-Z]{4}\d{19}[A-Z]{3}$/,MZ:/^(MZ[0-9]{2})\d{21}$/,NL:/^(NL[0-9]{2})[A-Z]{4}\d{10}$/,NO:/^(NO[0-9]{2})\d{11}$/,PK:/^(PK[0-9]{2})[A-Z0-9]{4}\d{16}$/,PL:/^(PL[0-9]{2})\d{24}$/,PS:/^(PS[0-9]{2})[A-Z]{4}[A-Z0-9]{21}$/,PT:/^(PT[0-9]{2})\d{21}$/,QA:/^(QA[0-9]{2})[A-Z]{4}[A-Z0-9]{21}$/,RO:/^(RO[0-9]{2})[A-Z]{4}[A-Z0-9]{16}$/,RS:/^(RS[0-9]{2})\d{18}$/,SA:/^(SA[0-9]{2})\d{2}[A-Z0-9]{18}$/,SC:/^(SC[0-9]{2})[A-Z]{4}\d{20}[A-Z]{3}$/,SE:/^(SE[0-9]{2})\d{20}$/,SI:/^(SI[0-9]{2})\d{15}$/,SK:/^(SK[0-9]{2})\d{20}$/,SM:/^(SM[0-9]{2})[A-Z]{1}\d{10}[A-Z0-9]{12}$/,SV:/^(SV[0-9]{2})[A-Z0-9]{4}\d{20}$/,TL:/^(TL[0-9]{2})\d{19}$/,TN:/^(TN[0-9]{2})\d{20}$/,TR:/^(TR[0-9]{2})\d{5}[A-Z0-9]{17}$/,UA:/^(UA[0-9]{2})\d{6}[A-Z0-9]{19}$/,VA:/^(VA[0-9]{2})\d{18}$/,VG:/^(VG[0-9]{2})[A-Z]{4}\d{16}$/,XK:/^(XK[0-9]{2})\d{16}$/};e.locales=Object.keys(o)},3735:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return(0,t.default)(a),(0,l.default)(a)%parseInt(e,10)===0};var t=r(i(3399)),l=r(i(1371));function r(a){return a&&a.__esModule?a:{default:a}}a.exports=e.default,a.exports.default=e.default},3752:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),a=Date.parse(a),isNaN(a)?null:new Date(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},3832:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.has(a.toUpperCase())};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=new Set(["AFG","ALA","ALB","DZA","ASM","AND","AGO","AIA","ATA","ATG","ARG","ARM","ABW","AUS","AUT","AZE","BHS","BHR","BGD","BRB","BLR","BEL","BLZ","BEN","BMU","BTN","BOL","BES","BIH","BWA","BVT","BRA","IOT","BRN","BGR","BFA","BDI","KHM","CMR","CAN","CPV","CYM","CAF","TCD","CHL","CHN","CXR","CCK","COL","COM","COG","COD","COK","CRI","CIV","HRV","CUB","CUW","CYP","CZE","DNK","DJI","DMA","DOM","ECU","EGY","SLV","GNQ","ERI","EST","ETH","FLK","FRO","FJI","FIN","FRA","GUF","PYF","ATF","GAB","GMB","GEO","DEU","GHA","GIB","GRC","GRL","GRD","GLP","GUM","GTM","GGY","GIN","GNB","GUY","HTI","HMD","VAT","HND","HKG","HUN","ISL","IND","IDN","IRN","IRQ","IRL","IMN","ISR","ITA","JAM","JPN","JEY","JOR","KAZ","KEN","KIR","PRK","KOR","KWT","KGZ","LAO","LVA","LBN","LSO","LBR","LBY","LIE","LTU","LUX","MAC","MKD","MDG","MWI","MYS","MDV","MLI","MLT","MHL","MTQ","MRT","MUS","MYT","MEX","FSM","MDA","MCO","MNG","MNE","MSR","MAR","MOZ","MMR","NAM","NRU","NPL","NLD","NCL","NZL","NIC","NER","NGA","NIU","NFK","MNP","NOR","OMN","PAK","PLW","PSE","PAN","PNG","PRY","PER","PHL","PCN","POL","PRT","PRI","QAT","REU","ROU","RUS","RWA","BLM","SHN","KNA","LCA","MAF","SPM","VCT","WSM","SMR","STP","SAU","SEN","SRB","SYC","SLE","SGP","SXM","SVK","SVN","SLB","SOM","ZAF","SGS","SSD","ESP","LKA","SDN","SUR","SJM","SWZ","SWE","CHE","SYR","TWN","TJK","TZA","THA","TLS","TGO","TKL","TON","TTO","TUN","TUR","TKM","TCA","TUV","UGA","UKR","ARE","GBR","USA","UMI","URY","UZB","VUT","VEN","VNM","VGB","VIR","WLF","ESH","YEM","ZMB","ZWE"]);a.exports=e.default,a.exports.default=e.default},3906:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a,{allow_leading_zeroes:!1,min:0,max:65535})};var t,l=(t=i(6084))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},3939:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){if((0,l.default)(a),e in s)return s[e].test(a);if("any"===e){for(var i in s)if(s.hasOwnProperty(i)&&s[i].test(a))return!0;return!1}throw new Error("Invalid locale '".concat(e,"'"))},e.locales=void 0;var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^\d{3}$/,o=/^\d{4}$/,d=/^\d{5}$/,n=/^\d{6}$/,s={AD:/^AD\d{3}$/,AT:o,AU:o,AZ:/^AZ\d{4}$/,BA:/^([7-8]\d{4}$)/,BD:/^([1-8][0-9]{3}|9[0-4][0-9]{2})$/,BE:o,BG:o,BR:/^\d{5}-?\d{3}$/,BY:/^2[1-4]\d{4}$/,CA:/^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][\s\-]?\d[ABCEGHJ-NPRSTV-Z]\d$/i,CH:o,CN:/^(0[1-7]|1[012356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[1-5]|8[1345]|9[09])\d{4}$/,CO:/^(05|08|11|13|15|17|18|19|20|23|25|27|41|44|47|50|52|54|63|66|68|70|73|76|81|85|86|88|91|94|95|97|99)(\d{4})$/,CZ:/^\d{3}\s?\d{2}$/,DE:d,DK:o,DO:d,DZ:d,EE:d,ES:/^(5[0-2]{1}|[0-4]{1}\d{1})\d{3}$/,FI:d,FR:/^(?:(?:0[1-9]|[1-8]\d|9[0-5])\d{3}|97[1-46]\d{2})$/,GB:/^(gir\s?0aa|[a-z]{1,2}\d[\da-z]?\s?(\d[a-z]{2})?)$/i,GR:/^\d{3}\s?\d{2}$/,HR:/^([1-5]\d{4}$)/,HT:/^HT\d{4}$/,HU:o,ID:d,IE:/^(?!.*(?:o))[A-Za-z]\d[\dw]\s\w{4}$/i,IL:/^(\d{5}|\d{7})$/,IN:/^((?!10|29|35|54|55|65|66|86|87|88|89)[1-9][0-9]{5})$/,IR:/^(?!(\d)\1{3})[13-9]{4}[1346-9][013-9]{5}$/,IS:r,IT:d,JP:/^\d{3}\-\d{4}$/,KE:d,KR:/^(\d{5}|\d{6})$/,LI:/^(948[5-9]|949[0-7])$/,LT:/^LT\-\d{5}$/,LU:o,LV:/^LV\-\d{4}$/,LK:d,MG:r,MX:d,MT:/^[A-Za-z]{3}\s{0,1}\d{4}$/,MY:d,NL:/^[1-9]\d{3}\s?(?!sa|sd|ss)[a-z]{2}$/i,NO:o,NP:/^(10|21|22|32|33|34|44|45|56|57)\d{3}$|^(977)$/i,NZ:o,PK:d,PL:/^\d{2}\-\d{3}$/,PR:/^00[679]\d{2}([ -]\d{4})?$/,PT:/^\d{4}\-\d{3}?$/,RO:n,RU:n,SA:d,SE:/^[1-9]\d{2}\s?\d{2}$/,SG:n,SI:o,SK:/^\d{3}\s?\d{2}$/,TH:d,TN:o,TW:/^\d{3}(\d{2,3})?$/,UA:d,US:/^\d{5}(-\d{4})?$/,ZA:o,ZM:d};e.locales=Object.keys(s)},3973:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return(0,l.default)(a),new RegExp("^[a-fA-F0-9]{".concat(r[e],"}$")).test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r={md5:32,md4:32,sha1:40,sha256:64,sha384:96,sha512:128,ripemd128:32,ripemd160:40,tiger128:32,tiger160:40,tiger192:48,crc32:8,crc32b:8};a.exports=e.default,a.exports.default=e.default},4294:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^[\x00-\x7F]+$/;a.exports=e.default,a.exports.default=e.default},4325:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){if((0,l.default)(a),!r.test(a))return!1;for(var e=0,i=0;i<a.length;i++)e+=i%3==0?3*a[i]:i%3==1?7*a[i]:1*a[i];return e%10==0};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^(?!(1[3-9])|(20)|(3[3-9])|(4[0-9])|(5[0-9])|(60)|(7[3-9])|(8[1-9])|(9[0-2])|(9[3-9]))[0-9]{9}$/;a.exports=e.default,a.exports.default=e.default},4633:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)||o.test(a)||d.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9\.\-\+_]{1,100}$/i,o=/^text\/[a-zA-Z0-9\.\-\+]{1,100};\s?charset=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?$/i,d=/^multipart\/[a-zA-Z0-9\.\-\+]{1,100}(;\s?(boundary|charset)=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?){0,2}$/i;a.exports=e.default,a.exports.default=e.default},4636:(a,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.default=function(a,e){return-1!==a.indexOf(e)},a.exports=e.default,a.exports.default=e.default},4641:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^#?([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$/i;a.exports=e.default,a.exports.default=e.default},4834:(a,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.iso7064Check=function(a){for(var e=10,i=0;i<a.length-1;i++)e=(parseInt(a[i],10)+e)%10==0?9:(parseInt(a[i],10)+e)%10*2%11;return(e=1===e?0:11-e)===parseInt(a[10],10)},e.luhnCheck=function(a){for(var e=0,i=!1,t=a.length-1;t>=0;t--){if(i){var l=2*parseInt(a[t],10);e+=l>9?l.toString().split("").map(function(a){return parseInt(a,10)}).reduce(function(a,e){return a+e},0):l}else e+=parseInt(a[t],10);i=!i}return e%10==0},e.reverseMultiplyAndSum=function(a,e){for(var i=0,t=0;t<a.length;t++)i+=a[t]*(e-t);return i},e.verhoeffCheck=function(a){for(var e=[[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,0,6,7,8,9,5],[2,3,4,0,1,7,8,9,5,6],[3,4,0,1,2,8,9,5,6,7],[4,0,1,2,3,9,5,6,7,8],[5,9,8,7,6,0,4,3,2,1],[6,5,9,8,7,1,0,4,3,2],[7,6,5,9,8,2,1,0,4,3],[8,7,6,5,9,3,2,1,0,4],[9,8,7,6,5,4,3,2,1,0]],i=[[0,1,2,3,4,5,6,7,8,9],[1,5,7,6,2,8,3,0,9,4],[5,8,0,3,7,9,6,1,4,2],[8,9,1,6,0,4,3,5,2,7],[9,4,5,3,1,2,6,8,7,0],[4,2,8,6,5,7,3,9,0,1],[2,7,9,3,8,0,6,4,1,5],[7,0,4,6,9,1,3,2,5,8]],t=a.split("").reverse().join(""),l=0,r=0;r<t.length;r++)l=e[l][i[r%8][parseInt(t[r],10)]];return 0===l}},5186:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return(0,l.default)(a),null==e&&(e="all"),e in r&&r[e].test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r={1:/^[0-9A-F]{8}-[0-9A-F]{4}-1[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,2:/^[0-9A-F]{8}-[0-9A-F]{4}-2[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,3:/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,4:/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,5:/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,6:/^[0-9A-F]{8}-[0-9A-F]{4}-6[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,7:/^[0-9A-F]{8}-[0-9A-F]{4}-7[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,8:/^[0-9A-F]{8}-[0-9A-F]{4}-8[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,nil:/^00000000-0000-0000-0000-000000000000$/i,max:/^ffffffff-ffff-ffff-ffff-ffffffffffff$/i,loose:/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i,all:/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i};a.exports=e.default,a.exports.default=e.default},5251:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e,i){if((0,l.default)(a),i&&i.strictMode&&!a.startsWith("+"))return!1;if(Array.isArray(e))return e.some(function(e){return!(!r.hasOwnProperty(e)||!r[e].test(a))});if(e in r)return r[e].test(a);if(!e||"any"===e){for(var t in r)if(r.hasOwnProperty(t)&&r[t].test(a))return!0;return!1}throw new Error("Invalid locale '".concat(e,"'"))},e.locales=void 0;var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r={"am-AM":/^(\+?374|0)(33|4[134]|55|77|88|9[13-689])\d{6}$/,"ar-AE":/^((\+?971)|0)?5[024568]\d{7}$/,"ar-BH":/^(\+?973)?(3|6)\d{7}$/,"ar-DZ":/^(\+?213|0)(5|6|7)\d{8}$/,"ar-LB":/^(\+?961)?((3|81)\d{6}|7\d{7})$/,"ar-EG":/^((\+?20)|0)?1[0125]\d{8}$/,"ar-IQ":/^(\+?964|0)?7[0-9]\d{8}$/,"ar-JO":/^(\+?962|0)?7[789]\d{7}$/,"ar-KW":/^(\+?965)([569]\d{7}|41\d{6})$/,"ar-LY":/^((\+?218)|0)?(9[1-6]\d{7}|[1-8]\d{7,9})$/,"ar-MA":/^(?:(?:\+|00)212|0)[5-7]\d{8}$/,"ar-OM":/^((\+|00)968)?([79][1-9])\d{6}$/,"ar-PS":/^(\+?970|0)5[6|9](\d{7})$/,"ar-SA":/^(!?(\+?966)|0)?5\d{8}$/,"ar-SD":/^((\+?249)|0)?(9[012369]|1[012])\d{7}$/,"ar-SY":/^(!?(\+?963)|0)?9\d{8}$/,"ar-TN":/^(\+?216)?[2459]\d{7}$/,"az-AZ":/^(\+994|0)(10|5[015]|7[07]|99)\d{7}$/,"bs-BA":/^((((\+|00)3876)|06))((([0-3]|[5-6])\d{6})|(4\d{7}))$/,"be-BY":/^(\+?375)?(24|25|29|33|44)\d{7}$/,"bg-BG":/^(\+?359|0)?8[789]\d{7}$/,"bn-BD":/^(\+?880|0)1[13456789][0-9]{8}$/,"ca-AD":/^(\+376)?[346]\d{5}$/,"cs-CZ":/^(\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,"da-DK":/^(\+?45)?\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2}$/,"de-DE":/^((\+49|0)1)(5[0-25-9]\d|6([23]|0\d?)|7([0-57-9]|6\d))\d{7,9}$/,"de-AT":/^(\+43|0)\d{1,4}\d{3,12}$/,"de-CH":/^(\+41|0)([1-9])\d{1,9}$/,"de-LU":/^(\+352)?((6\d1)\d{6})$/,"dv-MV":/^(\+?960)?(7[2-9]|9[1-9])\d{5}$/,"el-GR":/^(\+?30|0)?6(8[5-9]|9(?![26])[0-9])\d{7}$/,"el-CY":/^(\+?357?)?(9(9|7|6|5|4)\d{6})$/,"en-AI":/^(\+?1|0)264(?:2(35|92)|4(?:6[1-2]|76|97)|5(?:3[6-9]|8[1-4])|7(?:2(4|9)|72))\d{4}$/,"en-AU":/^(\+?61|0)4\d{8}$/,"en-AG":/^(?:\+1|1)268(?:464|7(?:1[3-9]|[28]\d|3[0246]|64|7[0-689]))\d{4}$/,"en-BM":/^(\+?1)?441(((3|7)\d{6}$)|(5[0-3][0-9]\d{4}$)|(59\d{5}$))/,"en-BS":/^(\+?1[-\s]?|0)?\(?242\)?[-\s]?\d{3}[-\s]?\d{4}$/,"en-GB":/^(\+?44|0)7[1-9]\d{8}$/,"en-GG":/^(\+?44|0)1481\d{6}$/,"en-GH":/^(\+233|0)(20|50|24|54|27|57|26|56|23|53|28|55|59)\d{7}$/,"en-GY":/^(\+592|0)6\d{6}$/,"en-HK":/^(\+?852[-\s]?)?[456789]\d{3}[-\s]?\d{4}$/,"en-MO":/^(\+?853[-\s]?)?[6]\d{3}[-\s]?\d{4}$/,"en-IE":/^(\+?353|0)8[356789]\d{7}$/,"en-IN":/^(\+?91|0)?[6789]\d{9}$/,"en-JM":/^(\+?876)?\d{7}$/,"en-KE":/^(\+?254|0)(7|1)\d{8}$/,"fr-CF":/^(\+?236| ?)(70|75|77|72|21|22)\d{6}$/,"en-SS":/^(\+?211|0)(9[1257])\d{7}$/,"en-KI":/^((\+686|686)?)?( )?((6|7)(2|3|8)[0-9]{6})$/,"en-KN":/^(?:\+1|1)869(?:46\d|48[89]|55[6-8]|66\d|76[02-7])\d{4}$/,"en-LS":/^(\+?266)(22|28|57|58|59|27|52)\d{6}$/,"en-MT":/^(\+?356|0)?(99|79|77|21|27|22|25)[0-9]{6}$/,"en-MU":/^(\+?230|0)?\d{8}$/,"en-MW":/^(\+?265|0)(((77|88|31|99|98|21)\d{7})|(((111)|1)\d{6})|(32000\d{4}))$/,"en-NA":/^(\+?264|0)(6|8)\d{7}$/,"en-NG":/^(\+?234|0)?[789]\d{9}$/,"en-NZ":/^(\+?64|0)[28]\d{7,9}$/,"en-PG":/^(\+?675|0)?(7\d|8[18])\d{6}$/,"en-PK":/^((00|\+)?92|0)3[0-6]\d{8}$/,"en-PH":/^(09|\+639)\d{9}$/,"en-RW":/^(\+?250|0)?[7]\d{8}$/,"en-SG":/^(\+65)?[3689]\d{7}$/,"en-SL":/^(\+?232|0)\d{8}$/,"en-TZ":/^(\+?255|0)?[67]\d{8}$/,"en-UG":/^(\+?256|0)?[7]\d{8}$/,"en-US":/^((\+1|1)?( |-)?)?(\([2-9][0-9]{2}\)|[2-9][0-9]{2})( |-)?([2-9][0-9]{2}( |-)?[0-9]{4})$/,"en-ZA":/^(\+?27|0)\d{9}$/,"en-ZM":/^(\+?26)?0[79][567]\d{7}$/,"en-ZW":/^(\+263)[0-9]{9}$/,"en-BW":/^(\+?267)?(7[1-8]{1})\d{6}$/,"es-AR":/^\+?549(11|[2368]\d)\d{8}$/,"es-BO":/^(\+?591)?(6|7)\d{7}$/,"es-CO":/^(\+?57)?3(0(0|1|2|4|5)|1\d|2[0-4]|5(0|1))\d{7}$/,"es-CL":/^(\+?56|0)[2-9]\d{1}\d{7}$/,"es-CR":/^(\+506)?[2-8]\d{7}$/,"es-CU":/^(\+53|0053)?5\d{7}$/,"es-DO":/^(\+?1)?8[024]9\d{7}$/,"es-HN":/^(\+?504)?[9|8|3|2]\d{7}$/,"es-EC":/^(\+?593|0)([2-7]|9[2-9])\d{7}$/,"es-ES":/^(\+?34)?[6|7]\d{8}$/,"es-GT":/^(\+?502)?[2|6|7]\d{7}$/,"es-PE":/^(\+?51)?9\d{8}$/,"es-MX":/^(\+?52)?(1|01)?\d{10,11}$/,"es-NI":/^(\+?505)\d{7,8}$/,"es-PA":/^(\+?507)\d{7,8}$/,"es-PY":/^(\+?595|0)9[9876]\d{7}$/,"es-SV":/^(\+?503)?[67]\d{7}$/,"es-UY":/^(\+598|0)9[1-9][\d]{6}$/,"es-VE":/^(\+?58)?(2|4)\d{9}$/,"et-EE":/^(\+?372)?\s?(5|8[1-4])\s?([0-9]\s?){6,7}$/,"fa-IR":/^(\+?98[\-\s]?|0)9[0-39]\d[\-\s]?\d{3}[\-\s]?\d{4}$/,"fi-FI":/^(\+?358|0)\s?(4[0-6]|50)\s?(\d\s?){4,8}$/,"fj-FJ":/^(\+?679)?\s?\d{3}\s?\d{4}$/,"fo-FO":/^(\+?298)?\s?\d{2}\s?\d{2}\s?\d{2}$/,"fr-BF":/^(\+226|0)[67]\d{7}$/,"fr-BJ":/^(\+229)\d{8}$/,"fr-CD":/^(\+?243|0)?(8|9)\d{8}$/,"fr-CM":/^(\+?237)6[0-9]{8}$/,"fr-FR":/^(\+?33|0)[67]\d{8}$/,"fr-GF":/^(\+?594|0|00594)[67]\d{8}$/,"fr-GP":/^(\+?590|0|00590)[67]\d{8}$/,"fr-MQ":/^(\+?596|0|00596)[67]\d{8}$/,"fr-PF":/^(\+?689)?8[789]\d{6}$/,"fr-RE":/^(\+?262|0|00262)[67]\d{8}$/,"fr-WF":/^(\+681)?\d{6}$/,"he-IL":/^(\+972|0)([23489]|5[012345689]|77)[1-9]\d{6}$/,"hu-HU":/^(\+?36|06)(20|30|31|50|70)\d{7}$/,"id-ID":/^(\+?62|0)8(1[123456789]|2[1238]|3[1238]|5[12356789]|7[78]|9[56789]|8[123456789])([\s?|\d]{5,11})$/,"ir-IR":/^(\+98|0)?9\d{9}$/,"it-IT":/^(\+?39)?\s?3\d{2} ?\d{6,7}$/,"it-SM":/^((\+378)|(0549)|(\+390549)|(\+3780549))?6\d{5,9}$/,"ja-JP":/^(\+81[ \-]?(\(0\))?|0)[6789]0[ \-]?\d{4}[ \-]?\d{4}$/,"ka-GE":/^(\+?995)?(79\d{7}|5\d{8})$/,"kk-KZ":/^(\+?7|8)?7\d{9}$/,"kl-GL":/^(\+?299)?\s?\d{2}\s?\d{2}\s?\d{2}$/,"ko-KR":/^((\+?82)[ \-]?)?0?1([0|1|6|7|8|9]{1})[ \-]?\d{3,4}[ \-]?\d{4}$/,"ky-KG":/^(\+996\s?)?(22[0-9]|50[0-9]|55[0-9]|70[0-9]|75[0-9]|77[0-9]|880|990|995|996|997|998)\s?\d{3}\s?\d{3}$/,"lt-LT":/^(\+370|8)\d{8}$/,"lv-LV":/^(\+?371)2\d{7}$/,"mg-MG":/^((\+?261|0)(2|3)\d)?\d{7}$/,"mn-MN":/^(\+|00|011)?976(77|81|88|91|94|95|96|99)\d{6}$/,"my-MM":/^(\+?959|09|9)(2[5-7]|3[1-2]|4[0-5]|6[6-9]|7[5-9]|9[6-9])[0-9]{7}$/,"ms-MY":/^(\+?60|0)1(([0145](-|\s)?\d{7,8})|([236-9](-|\s)?\d{7}))$/,"mz-MZ":/^(\+?258)?8[234567]\d{7}$/,"nb-NO":/^(\+?47)?[49]\d{7}$/,"ne-NP":/^(\+?977)?9[78]\d{8}$/,"nl-BE":/^(\+?32|0)4\d{8}$/,"nl-NL":/^(((\+|00)?31\(0\))|((\+|00)?31)|0)6{1}\d{8}$/,"nl-AW":/^(\+)?297(56|59|64|73|74|99)\d{5}$/,"nn-NO":/^(\+?47)?[49]\d{7}$/,"pl-PL":/^(\+?48)? ?([5-8]\d|45) ?\d{3} ?\d{2} ?\d{2}$/,"pt-BR":/^((\+?55\ ?[1-9]{2}\ ?)|(\+?55\ ?\([1-9]{2}\)\ ?)|(0[1-9]{2}\ ?)|(\([1-9]{2}\)\ ?)|([1-9]{2}\ ?))((\d{4}\-?\d{4})|(9[1-9]{1}\d{3}\-?\d{4}))$/,"pt-PT":/^(\+?351)?9[1236]\d{7}$/,"pt-AO":/^(\+?244)?9\d{8}$/,"ro-MD":/^(\+?373|0)((6(0|1|2|6|7|8|9))|(7(6|7|8|9)))\d{6}$/,"ro-RO":/^(\+?40|0)\s?7\d{2}(\/|\s|\.|-)?\d{3}(\s|\.|-)?\d{3}$/,"ru-RU":/^(\+?7|8)?9\d{9}$/,"si-LK":/^(?:0|94|\+94)?(7(0|1|2|4|5|6|7|8)( |-)?)\d{7}$/,"sl-SI":/^(\+386\s?|0)(\d{1}\s?\d{3}\s?\d{2}\s?\d{2}|\d{2}\s?\d{3}\s?\d{3})$/,"sk-SK":/^(\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,"so-SO":/^(\+?252|0)((6[0-9])\d{7}|(7[1-9])\d{7})$/,"sq-AL":/^(\+355|0)6[2-9]\d{7}$/,"sr-RS":/^(\+3816|06)[- \d]{5,9}$/,"sv-SE":/^(\+?46|0)[\s\-]?7[\s\-]?[02369]([\s\-]?\d){7}$/,"tg-TJ":/^(\+?992)?[5][5]\d{7}$/,"th-TH":/^(\+66|66|0)\d{9}$/,"tr-TR":/^(\+?90|0)?5\d{9}$/,"tk-TM":/^(\+993|993|8)\d{8}$/,"uk-UA":/^(\+?38)?0(50|6[36-8]|7[357]|9[1-9])\d{7}$/,"uz-UZ":/^(\+?998)?(6[125-79]|7[1-69]|88|9\d)\d{7}$/,"vi-VN":/^((\+?84)|0)((3([2-9]))|(5([25689]))|(7([0|6-9]))|(8([1-9]))|(9([0-9])))([0-9]{7})$/,"zh-CN":/^((\+|00)86)?(1[3-9]|9[28])\d{9}$/,"zh-TW":/^(\+?886\-?|0)?9\d{8}$/,"dz-BT":/^(\+?975|0)?(17|16|77|02)\d{6}$/,"ar-YE":/^(((\+|00)9677|0?7)[0137]\d{7}|((\+|00)967|0)[1-7]\d{6})$/,"ar-EH":/^(\+?212|0)[\s\-]?(5288|5289)[\s\-]?\d{5}$/,"fa-AF":/^(\+93|0)?(2{1}[0-8]{1}|[3-5]{1}[0-4]{1})(\d{7})$/,"mk-MK":/^(\+?389|0)?((?:2[2-9]\d{6}|(?:3[1-4]|4[2-8])\d{6}|500\d{5}|5[2-9]\d{6}|7[0-9][2-9]\d{5}|8[1-9]\d{6}|800\d{5}|8009\d{4}))$/};r["en-CA"]=r["en-US"],r["fr-CA"]=r["en-CA"],r["fr-BE"]=r["nl-BE"],r["zh-HK"]=r["en-HK"],r["zh-MO"]=r["en-MO"],r["ga-IE"]=r["en-IE"],r["fr-CH"]=r["de-CH"],r["it-CH"]=r["fr-CH"],e.locales=Object.keys(r)},5259:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){(0,l.default)(a);var e=a.slice(4,6).toUpperCase();return!(!r.CountryCodes.has(e)&&"XK"!==e)&&o.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=i(8447),o=/^[A-Za-z]{6}[A-Za-z0-9]{2}([A-Za-z0-9]{3})?$/;a.exports=e.default,a.exports.default=e.default},5366:(a,e,i)=>{"use strict";function t(a){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},t(a)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){if((0,r.default)(a),(0,r.default)(e),e in d)return d[e](a);throw new Error("Invalid country code: '".concat(e,"'"))},e.vatMatchers=void 0;var l,r=(l=i(3399))&&l.__esModule?l:{default:l},o=function(a){if("function"==typeof WeakMap){var e=new WeakMap;new WeakMap}return function(a){if(a&&a.__esModule)return a;var i,l,r={__proto__:null,default:a};if(null===a||"object"!=t(a)&&"function"!=typeof a)return r;if(i=e){if(i.has(a))return i.get(a);i.set(a,r)}for(var o in a)"default"!==o&&{}.hasOwnProperty.call(a,o)&&((l=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(a,o))&&(l.get||l.set)?i(r,o,l):r[o]=a[o]);return r}(a)}(i(4834)),d=e.vatMatchers={AT:function(a){return/^(AT)?U\d{8}$/.test(a)},BE:function(a){return/^(BE)?\d{10}$/.test(a)},BG:function(a){return/^(BG)?\d{9,10}$/.test(a)},HR:function(a){return/^(HR)?\d{11}$/.test(a)},CY:function(a){return/^(CY)?\w{9}$/.test(a)},CZ:function(a){return/^(CZ)?\d{8,10}$/.test(a)},DK:function(a){return/^(DK)?\d{8}$/.test(a)},EE:function(a){return/^(EE)?\d{9}$/.test(a)},FI:function(a){return/^(FI)?\d{8}$/.test(a)},FR:function(a){return/^(FR)?\w{2}\d{9}$/.test(a)},DE:function(a){return/^(DE)?\d{9}$/.test(a)},EL:function(a){return/^(EL)?\d{9}$/.test(a)},HU:function(a){return/^(HU)?\d{8}$/.test(a)},IE:function(a){return/^(IE)?\d{7}\w{1}(W)?$/.test(a)},IT:function(a){return/^(IT)?\d{11}$/.test(a)},LV:function(a){return/^(LV)?\d{11}$/.test(a)},LT:function(a){return/^(LT)?\d{9,12}$/.test(a)},LU:function(a){return/^(LU)?\d{8}$/.test(a)},MT:function(a){return/^(MT)?\d{8}$/.test(a)},NL:function(a){return/^(NL)?\d{9}B\d{2}$/.test(a)},PL:function(a){return/^(PL)?(\d{10}|(\d{3}-\d{3}-\d{2}-\d{2})|(\d{3}-\d{2}-\d{2}-\d{3}))$/.test(a)},PT:function(a){var e=a.match(/^(PT)?(\d{9})$/);if(!e)return!1;var i=e[2],t=11-o.reverseMultiplyAndSum(i.split("").slice(0,8).map(function(a){return parseInt(a,10)}),9)%11;return t>9?0===parseInt(i[8],10):t===parseInt(i[8],10)},RO:function(a){return/^(RO)?\d{2,10}$/.test(a)},SK:function(a){return/^(SK)?\d{10}$/.test(a)},SI:function(a){return/^(SI)?\d{8}$/.test(a)},ES:function(a){return/^(ES)?\w\d{7}[A-Z]$/.test(a)},SE:function(a){return/^(SE)?\d{12}$/.test(a)},AL:function(a){return/^(AL)?\w{9}[A-Z]$/.test(a)},MK:function(a){return/^(MK)?\d{13}$/.test(a)},AU:function(a){if(!a.match(/^(AU)?(\d{11})$/))return!1;var e=[10,1,3,5,7,9,11,13,15,17,19];a=a.replace(/^AU/,"");for(var i=(parseInt(a.slice(0,1),10)-1).toString()+a.slice(1),t=0,l=0;l<11;l++)t+=e[l]*i.charAt(l);return 0!==t&&t%89==0},BY:function(a){return/^(\u0423\u041d\u041f )?\d{9}$/.test(a)},CA:function(a){return/^(CA)?\d{9}$/.test(a)},IS:function(a){return/^(IS)?\d{5,6}$/.test(a)},IN:function(a){return/^(IN)?\d{15}$/.test(a)},ID:function(a){return/^(ID)?(\d{15}|(\d{2}.\d{3}.\d{3}.\d{1}-\d{3}.\d{3}))$/.test(a)},IL:function(a){return/^(IL)?\d{9}$/.test(a)},KZ:function(a){return/^(KZ)?\d{12}$/.test(a)},NZ:function(a){return/^(NZ)?\d{9}$/.test(a)},NG:function(a){return/^(NG)?(\d{12}|(\d{8}-\d{4}))$/.test(a)},NO:function(a){return/^(NO)?\d{9}MVA$/.test(a)},PH:function(a){return/^(PH)?(\d{12}|\d{3} \d{3} \d{3} \d{3})$/.test(a)},RU:function(a){return/^(RU)?(\d{10}|\d{12})$/.test(a)},SM:function(a){return/^(SM)?\d{5}$/.test(a)},SA:function(a){return/^(SA)?\d{15}$/.test(a)},RS:function(a){return/^(RS)?\d{9}$/.test(a)},CH:function(a){var e,i,t;return/^(CHE[- ]?)?(\d{9}|(\d{3}\.\d{3}\.\d{3})|(\d{3} \d{3} \d{3})) ?(TVA|MWST|IVA)?$/.test(a)&&(i=(e=a.match(/\d/g).map(function(a){return+a})).pop(),t=[5,4,3,2,7,6,5,4],i===(11-e.reduce(function(a,e,i){return a+e*t[i]},0)%11)%11)},TR:function(a){return/^(TR)?\d{10}$/.test(a)},UA:function(a){return/^(UA)?\d{12}$/.test(a)},GB:function(a){return/^GB((\d{3} \d{4} ([0-8][0-9]|9[0-6]))|(\d{9} \d{3})|(((GD[0-4])|(HA[5-9]))[0-9]{2}))$/.test(a)},UZ:function(a){return/^(UZ)?\d{9}$/.test(a)},AR:function(a){return/^(AR)?\d{11}$/.test(a)},BO:function(a){return/^(BO)?\d{7}$/.test(a)},BR:function(a){return/^(BR)?((\d{2}.\d{3}.\d{3}\/\d{4}-\d{2})|(\d{3}.\d{3}.\d{3}-\d{2}))$/.test(a)},CL:function(a){return/^(CL)?\d{8}-\d{1}$/.test(a)},CO:function(a){return/^(CO)?\d{10}$/.test(a)},CR:function(a){return/^(CR)?\d{9,12}$/.test(a)},EC:function(a){return/^(EC)?\d{13}$/.test(a)},SV:function(a){return/^(SV)?\d{4}-\d{6}-\d{3}-\d{1}$/.test(a)},GT:function(a){return/^(GT)?\d{7}-\d{1}$/.test(a)},HN:function(a){return/^(HN)?$/.test(a)},MX:function(a){return/^(MX)?\w{3,4}\d{6}\w{3}$/.test(a)},NI:function(a){return/^(NI)?\d{3}-\d{6}-\d{4}\w{1}$/.test(a)},PA:function(a){return/^(PA)?$/.test(a)},PY:function(a){return/^(PY)?\d{6,8}-\d{1}$/.test(a)},PE:function(a){return/^(PE)?\d{11}$/.test(a)},DO:function(a){return/^(DO)?(\d{11}|(\d{3}-\d{7}-\d{1})|[1,4,5]{1}\d{8}|([1,4,5]{1})-\d{2}-\d{5}-\d{1})$/.test(a)},UY:function(a){return/^(UY)?\d{12}$/.test(a)},VE:function(a){return/^(VE)?[J,G,V,E]{1}-(\d{9}|(\d{8}-\d{1}))$/.test(a)}}},5372:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function a(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,l.default)(e);var t=("object"===r(i)?i.version:arguments[1])||"";return t?"4"===t.toString()?n.test(e):"6"===t.toString()&&c.test(e):a(e,{version:4})||a(e,{version:6})};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};function r(a){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},r(a)}var o="(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])",d="(".concat(o,"[.]){3}").concat(o),n=new RegExp("^".concat(d,"$")),s="(?:[0-9a-fA-F]{1,4})",c=new RegExp("^("+"(?:".concat(s,":){7}(?:").concat(s,"|:)|")+"(?:".concat(s,":){6}(?:").concat(d,"|:").concat(s,"|:)|")+"(?:".concat(s,":){5}(?::").concat(d,"|(:").concat(s,"){1,2}|:)|")+"(?:".concat(s,":){4}(?:(:").concat(s,"){0,1}:").concat(d,"|(:").concat(s,"){1,3}|:)|")+"(?:".concat(s,":){3}(?:(:").concat(s,"){0,2}:").concat(d,"|(:").concat(s,"){1,4}|:)|")+"(?:".concat(s,":){2}(?:(:").concat(s,"){0,3}:").concat(d,"|(:").concat(s,"){1,5}|:)|")+"(?:".concat(s,":){1}(?:(:").concat(s,"){0,4}:").concat(d,"|(:").concat(s,"){1,6}|:)|")+"(?::((?::".concat(s,"){0,5}:").concat(d,"|(?::").concat(s,"){1,7}|:))")+")(%[0-9a-zA-Z.]{1,})?$");a.exports=e.default,a.exports.default=e.default},5467:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){(0,l.default)(a);var i=!1,t=!0;if("object"!==r(e)?arguments.length>=2&&(t=arguments[1]):(i=void 0!==e.allowSpaces?e.allowSpaces:i,t=void 0!==e.includePercentValues?e.includePercentValues:t),i){if(!c.test(a))return!1;a=a.replace(/\s/g,"")}return t?o.test(a)||d.test(a)||n.test(a)||s.test(a):o.test(a)||d.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};function r(a){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},r(a)}var o=/^rgb\((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]),){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\)$/,d=/^rgba\((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]),){3}(0?\.\d\d?|1(\.0)?|0(\.0)?)\)$/,n=/^rgb\((([0-9]%|[1-9][0-9]%|100%),){2}([0-9]%|[1-9][0-9]%|100%)\)$/,s=/^rgba\((([0-9]%|[1-9][0-9]%|100%),){3}(0?\.\d\d?|1(\.0)?|0(\.0)?)\)$/,c=/^rgba?/;a.exports=e.default,a.exports.default=e.default},5577:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),a===a.toUpperCase()};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},5730:(a,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){var i=a.join("");return new RegExp(i,e)},a.exports=e.default,a.exports.default=e.default},5748:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)||o.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^(bc1|tb1|bc1p|tb1p)[ac-hj-np-z02-9]{39,58}$/,o=/^(1|2|3|m)[A-HJ-NP-Za-km-z1-9]{25,39}$/;a.exports=e.default,a.exports.default=e.default},5751:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){(0,t.default)(a);try{e=(0,r.default)(e,n);var i=[];e.allow_primitives&&(i=[null,!1,!0]);var o=JSON.parse(a);return(0,l.default)(i,o)||!!o&&"object"===d(o)}catch(a){}return!1};var t=o(i(3399)),l=o(i(8644)),r=o(i(3610));function o(a){return a&&a.__esModule?a:{default:a}}function d(a){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},d(a)}var n={allow_primitives:!1};a.exports=e.default,a.exports.default=e.default},5772:(a,e)=>{"use strict";function i(a){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},i(a)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return"object"===i(a)&&null!==a?a="function"==typeof a.toString?a.toString():"[object Object]":(null==a||isNaN(a)&&!a.length)&&(a=""),String(a)},a.exports=e.default,a.exports.default=e.default},5777:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isFreightContainerID=void 0,e.isISO6346=d;var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^[A-Z]{3}(U[0-9]{7})|([J,Z][0-9]{6,7})$/,o=/^[0-9]$/;function d(a){if((0,l.default)(a),a=a.toUpperCase(),!r.test(a))return!1;if(11===a.length){for(var e=0,i=0;i<a.length-1;i++)if(o.test(a[i]))e+=a[i]*Math.pow(2,i);else{var t=a.charCodeAt(i)-55;e+=(t<11?t:t>=11&&t<=20?12+t%11:t>=21&&t<=30?23+t%21:34+t%31)*Math.pow(2,i)}var d=e%11;return 10===d&&(d=0),Number(a[a.length-1])===d}return!0}e.isFreightContainerID=d},5830:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){if((0,t.default)(a),e=(0,l.default)(e,u),!(0,r.default)(a,","))return!1;var i=a.split(",");return!(i[0].startsWith("(")&&!i[1].endsWith(")")||i[1].endsWith(")")&&!i[0].startsWith("("))&&(e.checkDMS?s.test(i[0])&&c.test(i[1]):d.test(i[0])&&n.test(i[1]))};var t=o(i(3399)),l=o(i(3610)),r=o(i(4636));function o(a){return a&&a.__esModule?a:{default:a}}var d=/^\(?[+-]?(90(\.0+)?|[1-8]?\d(\.\d+)?)$/,n=/^\s?[+-]?(180(\.0+)?|1[0-7]\d(\.\d+)?|\d{1,2}(\.\d+)?)\)?$/,s=/^(([1-8]?\d)\D+([1-5]?\d|60)\D+([1-5]?\d|60)(\.\d+)?|90\D+0\D+0)\D+[NSns]?$/i,c=/^\s*([1-7]?\d{1,2}\D+([1-5]?\d|60)\D+([1-5]?\d|60)(\.\d+)?|180\D+0\D+0)\D+[EWew]?$/i,u={checkDMS:!1};a.exports=e.default,a.exports.default=e.default},5926:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){if((0,l.default)(a),(e=(0,t.default)(e,n)).locale in o.decimal)return!(0,r.default)(s,a.replace(/ /g,""))&&function(a){return new RegExp("^[-+]?([0-9]+)?(\\".concat(o.decimal[a.locale],"[0-9]{").concat(a.decimal_digits,"})").concat(a.force_decimal?"":"?","$"))}(e).test(a);throw new Error("Invalid locale '".concat(e.locale,"'"))};var t=d(i(3610)),l=d(i(3399)),r=d(i(8644)),o=i(3237);function d(a){return a&&a.__esModule?a:{default:a}}var n={force_decimal:!1,decimal_digits:"1,",locale:"en-US"},s=["","-","+"];a.exports=e.default,a.exports.default=e.default},6084:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){(0,t.default)(a);var i=!1===(e=e||{}).allow_leading_zeroes?o:d,r=!e.hasOwnProperty("min")||(0,l.default)(e.min)||a>=e.min,n=!e.hasOwnProperty("max")||(0,l.default)(e.max)||a<=e.max,s=!e.hasOwnProperty("lt")||(0,l.default)(e.lt)||a<e.lt,c=!e.hasOwnProperty("gt")||(0,l.default)(e.gt)||a>e.gt;return i.test(a)&&r&&n&&s&&c};var t=r(i(3399)),l=r(i(821));function r(a){return a&&a.__esModule?a:{default:a}}var o=/^(?:[-+]?(?:0|[1-9][0-9]*))$/,d=/^[-+]?[0-9]+$/;a.exports=e.default,a.exports.default=e.default},6169:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,l.default)(a);var i=e.strictSeparator?o.test(a):r.test(a);return i&&e.strict?d(a):i};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/,o=/^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/,d=function(a){var e=a.match(/^(\d{4})-?(\d{3})([ T]{1}\.*|$)/);if(e){var i=Number(e[1]),t=Number(e[2]);return i%4==0&&i%100!=0||i%400==0?t<=366:t<=365}var l=a.match(/(\d{4})-?(\d{0,2})-?(\d*)/).map(Number),r=l[1],o=l[2],d=l[3],n=o?"0".concat(o).slice(-2):o,s=d?"0".concat(d).slice(-2):d,c=new Date("".concat(r,"-").concat(n||"01","-").concat(s||"01"));return!o||!d||c.getUTCFullYear()===r&&c.getUTCMonth()+1===o&&c.getUTCDate()===d};a.exports=e.default,a.exports.default=e.default},6255:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){var i,t;(0,l.default)(a),"object"===r(e)?(i=e.min||0,t=e.max):(i=arguments[1],t=arguments[2]);var o=encodeURI(a).split(/%..|./).length-1;return o>=i&&(void 0===t||o<=t)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};function r(a){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},r(a)}a.exports=e.default,a.exports.default=e.default},6529:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-US",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,l.default)(a);var t=a,o=i.ignore;if(o)if(o instanceof RegExp)t=t.replace(o,"");else{if("string"!=typeof o)throw new Error("ignore should be instance of a String or RegExp");t=t.replace(new RegExp("[".concat(o.replace(/[-[\]{}()*+?.,\\^$|#\\s]/g,"\\$&"),"]"),"g"),"")}if(e in r.alpha)return r.alpha[e].test(t);throw new Error("Invalid locale '".concat(e,"'"))},e.locales=void 0;var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=i(3237);e.locales=Object.keys(r.alpha)},6617:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),!!r.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^[A-HJ-NP-Za-km-z1-9]*$/;a.exports=e.default,a.exports.default=e.default},6658:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){var i=("object"===r(e)?e.comparisonDate:e)||Date().toString(),t=(0,l.default)(i),o=(0,l.default)(a);return!!(o&&t&&o<t)};var t,l=(t=i(3752))&&t.__esModule?t:{default:t};function r(a){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},r(a)}a.exports=e.default,a.exports.default=e.default},6782:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return(0,l.default)(a),function(a){var e="\\d{".concat(a.digits_after_decimal[0],"}");a.digits_after_decimal.forEach(function(a,i){0!==i&&(e="".concat(e,"|\\d{").concat(a,"}"))});var i="(".concat(a.symbol.replace(/\W/,function(a){return"\\".concat(a)}),")").concat(a.require_symbol?"":"?"),t="-?",l="[1-9]\\d{0,2}(\\".concat(a.thousands_separator,"\\d{3})*"),r="(".concat(["0","[1-9]\\d*",l].join("|"),")?"),o="(\\".concat(a.decimal_separator,"(").concat(e,"))").concat(a.require_decimal?"":"?"),d=r+(a.allow_decimal||a.require_decimal?o:"");return a.allow_negatives&&!a.parens_for_negatives&&(a.negative_sign_after_digits?d+=t:a.negative_sign_before_digits&&(d=t+d)),a.allow_negative_sign_placeholder?d="( (?!\\-))?".concat(d):a.allow_space_after_symbol?d=" ?".concat(d):a.allow_space_after_digits&&(d+="( (?!$))?"),a.symbol_after_digits?d+=i:d=i+d,a.allow_negatives&&(a.parens_for_negatives?d="(\\(".concat(d,"\\)|").concat(d,")"):a.negative_sign_before_digits||a.negative_sign_after_digits||(d=t+d)),new RegExp("^(?!-? )(?=.*\\d)".concat(d,"$"))}(e=(0,t.default)(e,o)).test(a)};var t=r(i(3610)),l=r(i(3399));function r(a){return a&&a.__esModule?a:{default:a}}var o={symbol:"$",require_symbol:!1,allow_space_after_symbol:!1,symbol_after_digits:!1,allow_negatives:!0,parens_for_negatives:!1,negative_sign_before_digits:!1,negative_sign_after_digits:!1,allow_negative_sign_placeholder:!1,thousands_separator:",",decimal_separator:".",allow_decimal:!0,require_decimal:!1,digits_after_decimal:[2],allow_space_after_digits:!1};a.exports=e.default,a.exports.default=e.default},7071:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),u.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r="(([a-zA-Z]{2,3}(-".concat("([A-Za-z]{3}(-[A-Za-z]{3}){0,2})",")?)|([a-zA-Z]{5,8}))"),o="(".concat("(\\d|[A-W]|[Y-Z]|[a-w]|[y-z])","(-[A-Za-z0-9]{2,8})+)"),d="(x(-[A-Za-z0-9]{1,8})+)",n="(".concat("((en-GB-oed)|(i-ami)|(i-bnn)|(i-default)|(i-enochian)|(i-hak)|(i-klingon)|(i-lux)|(i-mingo)|(i-navajo)|(i-pwn)|(i-tao)|(i-tay)|(i-tsu)|(sgn-BE-FR)|(sgn-BE-NL)|(sgn-CH-DE))","|").concat("((art-lojban)|(cel-gaulish)|(no-bok)|(no-nyn)|(zh-guoyu)|(zh-hakka)|(zh-min)|(zh-min-nan)|(zh-xiang))",")"),s="(-|_)",c="".concat(r,"(").concat(s).concat("([A-Za-z]{4})",")?(").concat(s).concat("([A-Za-z]{2}|\\d{3})",")?(").concat(s).concat("([A-Za-z0-9]{5,8}|(\\d[A-Z-a-z0-9]{3}))",")*(").concat(s).concat(o,")*(").concat(s).concat(d,")?"),u=new RegExp("(^".concat(d,"$)|(^").concat(n,"$)|(^").concat(c,"$)"));a.exports=e.default,a.exports.default=e.default},7086:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){(0,l.default)(a);var e=a.replace(/\s+/g," ").replace(/\s?(hsla?\(|\)|,)\s?/gi,"$1");return-1!==e.indexOf(",")?r.test(e):o.test(e)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^hsla?\(((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?))(deg|grad|rad|turn)?(,(\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%){2}(,((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%?))?\)$/i,o=/^hsla?\(((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?))(deg|grad|rad|turn)?(\s(\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%){2}\s?(\/\s((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%?)\s?)?\)$/i;a.exports=e.default,a.exports.default=e.default},7115:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";(0,t.default)(a);var i=a.split("/");if(2!==i.length)return!1;if(!o.test(i[1]))return!1;if(i[1].length>1&&i[1].startsWith("0"))return!1;if(!(0,l.default)(i[0],e))return!1;var r=null;switch(String(e)){case"4":r=d;break;case"6":r=n;break;default:r=(0,l.default)(i[0],"6")?n:d}return i[1]<=r&&i[1]>=0};var t=r(i(3399)),l=r(i(5372));function r(a){return a&&a.__esModule?a:{default:a}}var o=/^\d{1,3}$/,d=32,n=128;a.exports=e.default,a.exports.default=e.default},7179:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;(0,l.default)(a);var i=function(a){var e=function(a){var e={};return Array.from(a).forEach(function(a){e[a]?e[a]+=1:e[a]=1}),e}(a),i={length:a.length,uniqueChars:Object.keys(e).length,uppercaseCount:0,lowercaseCount:0,numberCount:0,symbolCount:0};return Object.keys(e).forEach(function(a){o.test(a)?i.uppercaseCount+=e[a]:d.test(a)?i.lowercaseCount+=e[a]:n.test(a)?i.numberCount+=e[a]:s.test(a)&&(i.symbolCount+=e[a])}),i}(a);return(e=(0,t.default)(e||{},c)).returnScore?function(a,e){var i=0;return i+=a.uniqueChars*e.pointsPerUnique,i+=(a.length-a.uniqueChars)*e.pointsPerRepeat,a.lowercaseCount>0&&(i+=e.pointsForContainingLower),a.uppercaseCount>0&&(i+=e.pointsForContainingUpper),a.numberCount>0&&(i+=e.pointsForContainingNumber),a.symbolCount>0&&(i+=e.pointsForContainingSymbol),i}(i,e):i.length>=e.minLength&&i.lowercaseCount>=e.minLowercase&&i.uppercaseCount>=e.minUppercase&&i.numberCount>=e.minNumbers&&i.symbolCount>=e.minSymbols};var t=r(i(3610)),l=r(i(3399));function r(a){return a&&a.__esModule?a:{default:a}}var o=/^[A-Z]$/,d=/^[a-z]$/,n=/^[0-9]$/,s=/^[-#!$@\u00a3%^&*()_+|~=`{}\[\]:";'<>?,.\/\\ ]$/,c={minLength:8,minLowercase:1,minUppercase:1,minNumbers:1,minSymbols:1,returnScore:!1,pointsPerUnique:1,pointsPerRepeat:.5,pointsForContainingLower:10,pointsForContainingUpper:10,pointsForContainingNumber:10,pointsForContainingSymbol:10};a.exports=e.default,a.exports.default=e.default},7349:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),0===a.indexOf("magnet:?")&&r.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/(?:^magnet:\?|[^?&]&)xt(?:\.1)?=urn:(?:(?:aich|bitprint|btih|ed2k|ed2khash|kzhash|md5|sha1|tree:tiger):[a-z0-9]{32}(?:[a-z0-9]{8})?|btmh:1220[a-z0-9]{64})(?:$|&)/i;a.exports=e.default,a.exports.default=e.default},7612:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),a===a.toLowerCase()};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},7658:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){(0,t.default)(a),(e=(0,l.default)(e,o)).allow_trailing_dot&&"."===a[a.length-1]&&(a=a.substring(0,a.length-1)),!0===e.allow_wildcard&&0===a.indexOf("*.")&&(a=a.substring(2));var i=a.split("."),r=i[i.length-1];if(e.require_tld){if(i.length<2)return!1;if(!e.allow_numeric_tld&&!/^([a-z\u00A1-\u00A8\u00AA-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}|xn[a-z0-9-]{2,})$/i.test(r))return!1;if(/\s/.test(r))return!1}return!(!e.allow_numeric_tld&&/^\d+$/.test(r))&&i.every(function(a){return!(a.length>63&&!e.ignore_max_length||!/^[a-z_\u00a1-\uffff0-9-]+$/i.test(a)||/[\uff01-\uff5e]/.test(a)||/^-|-$/.test(a)||!e.allow_underscores&&/_/.test(a))})};var t=r(i(3399)),l=r(i(3610));function r(a){return a&&a.__esModule?a:{default:a}}var o={require_tld:!0,allow_underscores:!1,allow_trailing_dot:!1,allow_numeric_tld:!1,allow_wildcard:!1,ignore_max_length:!1};a.exports=e.default,a.exports.default=e.default},7673:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return(0,t.default)(a),(e=(0,l.default)(e,n)).crockford?d.test(a):!(a.length%8!=0||!o.test(a))};var t=r(i(3399)),l=r(i(3610));function r(a){return a&&a.__esModule?a:{default:a}}var o=/^[A-Z2-7]+=*$/,d=/^[A-HJKMNP-TV-Z0-9]+$/,n={crockford:!1};a.exports=e.default,a.exports.default=e.default},7677:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),a.replace(/&quot;/g,'"').replace(/&#x27;/g,"'").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&#x2F;/g,"/").replace(/&#x5C;/g,"\\").replace(/&#96;/g,"`").replace(/&amp;/g,"&")};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},7717:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){(0,l.default)(a);var e,i,t=Number(a.slice(-1));return d.test(a)&&t===((i=10-(e=a).slice(0,-1).split("").map(function(a,i){return Number(a)*function(a,e){return a===r||a===o?e%2==0?3:1:e%2==0?1:3}(e.length,i)}).reduce(function(a,e){return a+e},0)%10)<10?i:0)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=8,o=14,d=/^(\d{8}|\d{13}|\d{14})$/;a.exports=e.default,a.exports.default=e.default},7741:(a,e,i)=>{"use strict";function t(a){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},t(a)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-US";(0,l.default)(a);var i=a.slice(0);if(e in f)return e in m&&(i=i.replace(m[e],"")),!!f[e].test(i)&&(!(e in v)||v[e](i));throw new Error("Invalid locale '".concat(e,"'"))};var l=d(i(3399)),r=function(a){if("function"==typeof WeakMap){var e=new WeakMap;new WeakMap}return function(a){if(a&&a.__esModule)return a;var i,l,r={__proto__:null,default:a};if(null===a||"object"!=t(a)&&"function"!=typeof a)return r;if(i=e){if(i.has(a))return i.get(a);i.set(a,r)}for(var o in a)"default"!==o&&{}.hasOwnProperty.call(a,o)&&((l=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(a,o))&&(l.get||l.set)?i(r,o,l):r[o]=a[o]);return r}(a)}(i(4834)),o=d(i(9013));function d(a){return a&&a.__esModule?a:{default:a}}function n(a){return function(a){if(Array.isArray(a))return s(a)}(a)||function(a){if("undefined"!=typeof Symbol&&null!=a[Symbol.iterator]||null!=a["@@iterator"])return Array.from(a)}(a)||function(a,e){if(a){if("string"==typeof a)return s(a,e);var i={}.toString.call(a).slice(8,-1);return"Object"===i&&a.constructor&&(i=a.constructor.name),"Map"===i||"Set"===i?Array.from(a):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?s(a,e):void 0}}(a)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(a,e){(null==e||e>a.length)&&(e=a.length);for(var i=0,t=Array(e);i<e;i++)t[i]=a[i];return t}var c={andover:["10","12"],atlanta:["60","67"],austin:["50","53"],brookhaven:["01","02","03","04","05","06","11","13","14","16","21","22","23","25","34","51","52","54","55","56","57","58","59","65"],cincinnati:["30","32","35","36","37","38","61"],fresno:["15","24"],internet:["20","26","27","45","46","47"],kansas:["40","44"],memphis:["94","95"],ogden:["80","90"],philadelphia:["33","39","41","42","43","46","48","62","63","64","66","68","71","72","73","74","75","76","77","81","82","83","84","85","86","87","88","91","92","93","98","99"],sba:["31"]};function u(a){for(var e=!1,i=!1,t=0;t<3;t++)if(!e&&/[AEIOU]/.test(a[t]))e=!0;else if(!i&&e&&"X"===a[t])i=!0;else if(t>0){if(e&&!i&&!/[AEIOU]/.test(a[t]))return!1;if(i&&!/X/.test(a[t]))return!1}return!0}var f={"bg-BG":/^\d{10}$/,"cs-CZ":/^\d{6}\/{0,1}\d{3,4}$/,"de-AT":/^\d{9}$/,"de-DE":/^[1-9]\d{10}$/,"dk-DK":/^\d{6}-{0,1}\d{4}$/,"el-CY":/^[09]\d{7}[A-Z]$/,"el-GR":/^([0-4]|[7-9])\d{8}$/,"en-CA":/^\d{9}$/,"en-GB":/^\d{10}$|^(?!GB|NK|TN|ZZ)(?![DFIQUV])[A-Z](?![DFIQUVO])[A-Z]\d{6}[ABCD ]$/i,"en-IE":/^\d{7}[A-W][A-IW]{0,1}$/i,"en-US":/^\d{2}[- ]{0,1}\d{7}$/,"es-AR":/(20|23|24|27|30|33|34)[0-9]{8}[0-9]/,"es-ES":/^(\d{0,8}|[XYZKLM]\d{7})[A-HJ-NP-TV-Z]$/i,"et-EE":/^[1-6]\d{6}(00[1-9]|0[1-9][0-9]|[1-6][0-9]{2}|70[0-9]|710)\d$/,"fi-FI":/^\d{6}[-+A]\d{3}[0-9A-FHJ-NPR-Y]$/i,"fr-BE":/^\d{11}$/,"fr-FR":/^[0-3]\d{12}$|^[0-3]\d\s\d{2}(\s\d{3}){3}$/,"fr-LU":/^\d{13}$/,"hr-HR":/^\d{11}$/,"hu-HU":/^8\d{9}$/,"it-IT":/^[A-Z]{6}[L-NP-V0-9]{2}[A-EHLMPRST][L-NP-V0-9]{2}[A-ILMZ][L-NP-V0-9]{3}[A-Z]$/i,"lv-LV":/^\d{6}-{0,1}\d{5}$/,"mt-MT":/^\d{3,7}[APMGLHBZ]$|^([1-8])\1\d{7}$/i,"nl-NL":/^\d{9}$/,"pl-PL":/^\d{10,11}$/,"pt-BR":/(?:^\d{11}$)|(?:^\d{14}$)/,"pt-PT":/^\d{9}$/,"ro-RO":/^\d{13}$/,"sk-SK":/^\d{6}\/{0,1}\d{3,4}$/,"sl-SI":/^[1-9]\d{7}$/,"sv-SE":/^(\d{6}[-+]{0,1}\d{4}|(18|19|20)\d{6}[-+]{0,1}\d{4})$/,"uk-UA":/^\d{10}$/};f["lb-LU"]=f["fr-LU"],f["lt-LT"]=f["et-EE"],f["nl-BE"]=f["fr-BE"],f["fr-CA"]=f["en-CA"];var v={"bg-BG":function(a){var e=a.slice(0,2),i=parseInt(a.slice(2,4),10);i>40?(i-=40,e="20".concat(e)):i>20?(i-=20,e="18".concat(e)):e="19".concat(e),i<10&&(i="0".concat(i));var t="".concat(e,"/").concat(i,"/").concat(a.slice(4,6));if(!(0,o.default)(t,"YYYY/MM/DD"))return!1;for(var l=a.split("").map(function(a){return parseInt(a,10)}),r=[2,4,8,5,10,9,7,3,6],d=0,n=0;n<r.length;n++)d+=l[n]*r[n];return(d=d%11==10?0:d%11)===l[9]},"cs-CZ":function(a){a=a.replace(/\W/,"");var e=parseInt(a.slice(0,2),10);if(10===a.length)e=e<54?"20".concat(e):"19".concat(e);else{if("000"===a.slice(6))return!1;if(!(e<54))return!1;e="19".concat(e)}3===e.length&&(e=[e.slice(0,2),"0",e.slice(2)].join(""));var i=parseInt(a.slice(2,4),10);if(i>50&&(i-=50),i>20){if(parseInt(e,10)<2004)return!1;i-=20}i<10&&(i="0".concat(i));var t="".concat(e,"/").concat(i,"/").concat(a.slice(4,6));if(!(0,o.default)(t,"YYYY/MM/DD"))return!1;if(10===a.length&&parseInt(a,10)%11!=0){var l=parseInt(a.slice(0,9),10)%11;if(!(parseInt(e,10)<1986&&10===l))return!1;if(0!==parseInt(a.slice(9),10))return!1}return!0},"de-AT":function(a){return r.luhnCheck(a)},"de-DE":function(a){for(var e=a.split("").map(function(a){return parseInt(a,10)}),i=[],t=0;t<e.length-1;t++){i.push("");for(var l=0;l<e.length-1;l++)e[t]===e[l]&&(i[t]+=l)}if(2!==(i=i.filter(function(a){return a.length>1})).length&&3!==i.length)return!1;if(3===i[0].length){for(var o=i[0].split("").map(function(a){return parseInt(a,10)}),d=0,n=0;n<o.length-1;n++)o[n]+1===o[n+1]&&(d+=1);if(2===d)return!1}return r.iso7064Check(a)},"dk-DK":function(a){a=a.replace(/\W/,"");var e=parseInt(a.slice(4,6),10);switch(a.slice(6,7)){case"0":case"1":case"2":case"3":e="19".concat(e);break;case"4":case"9":e=e<37?"20".concat(e):"19".concat(e);break;default:if(e<37)e="20".concat(e);else{if(!(e>58))return!1;e="18".concat(e)}}3===e.length&&(e=[e.slice(0,2),"0",e.slice(2)].join(""));var i="".concat(e,"/").concat(a.slice(2,4),"/").concat(a.slice(0,2));if(!(0,o.default)(i,"YYYY/MM/DD"))return!1;for(var t=a.split("").map(function(a){return parseInt(a,10)}),l=0,r=4,d=0;d<9;d++)l+=t[d]*r,1==(r-=1)&&(r=7);return 1!=(l%=11)&&(0===l?0===t[9]:t[9]===11-l)},"el-CY":function(a){for(var e=a.slice(0,8).split("").map(function(a){return parseInt(a,10)}),i=0,t=1;t<e.length;t+=2)i+=e[t];for(var l=0;l<e.length;l+=2)e[l]<2?i+=1-e[l]:(i+=2*(e[l]-2)+5,e[l]>4&&(i+=2));return String.fromCharCode(i%26+65)===a.charAt(8)},"el-GR":function(a){for(var e=a.split("").map(function(a){return parseInt(a,10)}),i=0,t=0;t<8;t++)i+=e[t]*Math.pow(2,8-t);return i%11%10===e[8]},"en-CA":function(a){var e=a.split(""),i=e.filter(function(a,e){return e%2}).map(function(a){return 2*Number(a)}).join("").split("");return e.filter(function(a,e){return!(e%2)}).concat(i).map(function(a){return Number(a)}).reduce(function(a,e){return a+e})%10==0},"en-IE":function(a){var e=r.reverseMultiplyAndSum(a.split("").slice(0,7).map(function(a){return parseInt(a,10)}),8);return 9===a.length&&"W"!==a[8]&&(e+=9*(a[8].charCodeAt(0)-64)),0==(e%=23)?"W"===a[7].toUpperCase():a[7].toUpperCase()===String.fromCharCode(64+e)},"en-US":function(a){return-1!==function(){var a=[];for(var e in c)c.hasOwnProperty(e)&&a.push.apply(a,n(c[e]));return a}().indexOf(a.slice(0,2))},"es-AR":function(a){for(var e=0,i=a.split(""),t=parseInt(i.pop(),10),l=0;l<i.length;l++)e+=i[9-l]*(2+l%6);var r=11-e%11;return 11===r?r=0:10===r&&(r=9),t===r},"es-ES":function(a){var e=a.toUpperCase().split("");if(isNaN(parseInt(e[0],10))&&e.length>1){var i=0;switch(e[0]){case"Y":i=1;break;case"Z":i=2}e.splice(0,1,i)}else for(;e.length<9;)e.unshift(0);e=e.join("");var t=parseInt(e.slice(0,8),10)%23;return e[8]===["T","R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E"][t]},"et-EE":function(a){var e=a.slice(1,3);switch(a.slice(0,1)){case"1":case"2":e="18".concat(e);break;case"3":case"4":e="19".concat(e);break;default:e="20".concat(e)}var i="".concat(e,"/").concat(a.slice(3,5),"/").concat(a.slice(5,7));if(!(0,o.default)(i,"YYYY/MM/DD"))return!1;for(var t=a.split("").map(function(a){return parseInt(a,10)}),l=0,r=1,d=0;d<10;d++)l+=t[d]*r,10===(r+=1)&&(r=1);if(l%11==10){l=0,r=3;for(var n=0;n<10;n++)l+=t[n]*r,10===(r+=1)&&(r=1);if(l%11==10)return 0===t[10]}return l%11===t[10]},"fi-FI":function(a){var e=a.slice(4,6);switch(a.slice(6,7)){case"+":e="18".concat(e);break;case"-":e="19".concat(e);break;default:e="20".concat(e)}var i="".concat(e,"/").concat(a.slice(2,4),"/").concat(a.slice(0,2));if(!(0,o.default)(i,"YYYY/MM/DD"))return!1;var t=parseInt(a.slice(0,6)+a.slice(7,10),10)%31;return t<10?t===parseInt(a.slice(10),10):["A","B","C","D","E","F","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y"][t-=10]===a.slice(10)},"fr-BE":function(a){if("00"!==a.slice(2,4)||"00"!==a.slice(4,6)){var e="".concat(a.slice(0,2),"/").concat(a.slice(2,4),"/").concat(a.slice(4,6));if(!(0,o.default)(e,"YY/MM/DD"))return!1}var i=97-parseInt(a.slice(0,9),10)%97,t=parseInt(a.slice(9,11),10);return i===t||(i=97-parseInt("2".concat(a.slice(0,9)),10)%97)===t},"fr-FR":function(a){return a=a.replace(/\s/g,""),parseInt(a.slice(0,10),10)%511===parseInt(a.slice(10,13),10)},"fr-LU":function(a){var e="".concat(a.slice(0,4),"/").concat(a.slice(4,6),"/").concat(a.slice(6,8));return!!(0,o.default)(e,"YYYY/MM/DD")&&!!r.luhnCheck(a.slice(0,12))&&r.verhoeffCheck("".concat(a.slice(0,11)).concat(a[12]))},"hr-HR":function(a){return r.iso7064Check(a)},"hu-HU":function(a){for(var e=a.split("").map(function(a){return parseInt(a,10)}),i=8,t=1;t<9;t++)i+=e[t]*(t+1);return i%11===e[9]},"it-IT":function(a){var e=a.toUpperCase().split("");if(!u(e.slice(0,3)))return!1;if(!u(e.slice(3,6)))return!1;for(var i={L:"0",M:"1",N:"2",P:"3",Q:"4",R:"5",S:"6",T:"7",U:"8",V:"9"},t=0,l=[6,7,9,10,12,13,14];t<l.length;t++){var r=l[t];e[r]in i&&e.splice(r,1,i[e[r]])}var d={A:"01",B:"02",C:"03",D:"04",E:"05",H:"06",L:"07",M:"08",P:"09",R:"10",S:"11",T:"12"}[e[8]],n=parseInt(e[9]+e[10],10);n>40&&(n-=40),n<10&&(n="0".concat(n));var s="".concat(e[6]).concat(e[7],"/").concat(d,"/").concat(n);if(!(0,o.default)(s,"YY/MM/DD"))return!1;for(var c=0,f=1;f<e.length-1;f+=2){var v=parseInt(e[f],10);isNaN(v)&&(v=e[f].charCodeAt(0)-65),c+=v}for(var A={A:1,B:0,C:5,D:7,E:9,F:13,G:15,H:17,I:19,J:21,K:2,L:4,M:18,N:20,O:11,P:3,Q:6,R:8,S:12,T:14,U:16,V:10,W:22,X:25,Y:24,Z:23,0:1,1:0},m=0;m<e.length-1;m+=2){var b=0;if(e[m]in A)b=A[e[m]];else{var g=parseInt(e[m],10);b=2*g+1,g>4&&(b+=2)}c+=b}return String.fromCharCode(65+c%26)===e[15]},"lv-LV":function(a){var e=(a=a.replace(/\W/,"")).slice(0,2);if("32"!==e){if("00"!==a.slice(2,4)){var i=a.slice(4,6);switch(a[6]){case"0":i="18".concat(i);break;case"1":i="19".concat(i);break;default:i="20".concat(i)}var t="".concat(i,"/").concat(a.slice(2,4),"/").concat(e);if(!(0,o.default)(t,"YYYY/MM/DD"))return!1}for(var l=1101,r=[1,6,3,7,9,10,5,8,4,2],d=0;d<a.length-1;d++)l-=parseInt(a[d],10)*r[d];return parseInt(a[10],10)===l%11}return!0},"mt-MT":function(a){if(9!==a.length){for(var e=a.toUpperCase().split("");e.length<8;)e.unshift(0);switch(a[7]){case"A":case"P":if(0===parseInt(e[6],10))return!1;break;default:var i=parseInt(e.join("").slice(0,5),10);if(i>32e3)return!1;if(i===parseInt(e.join("").slice(5,7),10))return!1}}return!0},"nl-NL":function(a){return r.reverseMultiplyAndSum(a.split("").slice(0,8).map(function(a){return parseInt(a,10)}),9)%11===parseInt(a[8],10)},"pl-PL":function(a){if(10===a.length){for(var e=[6,5,7,2,3,4,5,6,7],i=0,t=0;t<e.length;t++)i+=parseInt(a[t],10)*e[t];return 10!=(i%=11)&&i===parseInt(a[9],10)}var l=a.slice(0,2),r=parseInt(a.slice(2,4),10);r>80?(l="18".concat(l),r-=80):r>60?(l="22".concat(l),r-=60):r>40?(l="21".concat(l),r-=40):r>20?(l="20".concat(l),r-=20):l="19".concat(l),r<10&&(r="0".concat(r));var d="".concat(l,"/").concat(r,"/").concat(a.slice(4,6));if(!(0,o.default)(d,"YYYY/MM/DD"))return!1;for(var n=0,s=1,c=0;c<a.length-1;c++)n+=parseInt(a[c],10)*s%10,(s+=2)>10?s=1:5===s&&(s+=2);return(n=10-n%10)===parseInt(a[10],10)},"pt-BR":function(a){if(11===a.length){var e,i;if(e=0,"11111111111"===a||"22222222222"===a||"33333333333"===a||"44444444444"===a||"55555555555"===a||"66666666666"===a||"77777777777"===a||"88888888888"===a||"99999999999"===a||"00000000000"===a)return!1;for(var t=1;t<=9;t++)e+=parseInt(a.substring(t-1,t),10)*(11-t);if(10==(i=10*e%11)&&(i=0),i!==parseInt(a.substring(9,10),10))return!1;e=0;for(var l=1;l<=10;l++)e+=parseInt(a.substring(l-1,l),10)*(12-l);return 10==(i=10*e%11)&&(i=0),i===parseInt(a.substring(10,11),10)}if("00000000000000"===a||"11111111111111"===a||"22222222222222"===a||"33333333333333"===a||"44444444444444"===a||"55555555555555"===a||"66666666666666"===a||"77777777777777"===a||"88888888888888"===a||"99999999999999"===a)return!1;for(var r=a.length-2,o=a.substring(0,r),d=a.substring(r),n=0,s=r-7,c=r;c>=1;c--)n+=o.charAt(r-c)*s,(s-=1)<2&&(s=9);var u=n%11<2?0:11-n%11;if(u!==parseInt(d.charAt(0),10))return!1;r+=1,o=a.substring(0,r),n=0,s=r-7;for(var f=r;f>=1;f--)n+=o.charAt(r-f)*s,(s-=1)<2&&(s=9);return(u=n%11<2?0:11-n%11)===parseInt(d.charAt(1),10)},"pt-PT":function(a){var e=11-r.reverseMultiplyAndSum(a.split("").slice(0,8).map(function(a){return parseInt(a,10)}),9)%11;return e>9?0===parseInt(a[8],10):e===parseInt(a[8],10)},"ro-RO":function(a){if("9000"!==a.slice(0,4)){var e=a.slice(1,3);switch(a[0]){case"1":case"2":e="19".concat(e);break;case"3":case"4":e="18".concat(e);break;case"5":case"6":e="20".concat(e)}var i="".concat(e,"/").concat(a.slice(3,5),"/").concat(a.slice(5,7));if(8===i.length){if(!(0,o.default)(i,"YY/MM/DD"))return!1}else if(!(0,o.default)(i,"YYYY/MM/DD"))return!1;for(var t=a.split("").map(function(a){return parseInt(a,10)}),l=[2,7,9,1,4,6,3,5,8,2,7,9],r=0,d=0;d<l.length;d++)r+=t[d]*l[d];return r%11==10?1===t[12]:t[12]===r%11}return!0},"sk-SK":function(a){if(9===a.length){if("000"===(a=a.replace(/\W/,"")).slice(6))return!1;var e=parseInt(a.slice(0,2),10);if(e>53)return!1;e=e<10?"190".concat(e):"19".concat(e);var i=parseInt(a.slice(2,4),10);i>50&&(i-=50),i<10&&(i="0".concat(i));var t="".concat(e,"/").concat(i,"/").concat(a.slice(4,6));if(!(0,o.default)(t,"YYYY/MM/DD"))return!1}return!0},"sl-SI":function(a){var e=11-r.reverseMultiplyAndSum(a.split("").slice(0,7).map(function(a){return parseInt(a,10)}),8)%11;return 10===e?0===parseInt(a[7],10):e===parseInt(a[7],10)},"sv-SE":function(a){var e=a.slice(0);a.length>11&&(e=e.slice(2));var i="",t=e.slice(2,4),l=parseInt(e.slice(4,6),10);if(a.length>11)i=a.slice(0,4);else if(i=a.slice(0,2),11===a.length&&l<60){var d=(new Date).getFullYear().toString(),n=parseInt(d.slice(0,2),10);if(d=parseInt(d,10),"-"===a[6])i=parseInt("".concat(n).concat(i),10)>d?"".concat(n-1).concat(i):"".concat(n).concat(i);else if(i="".concat(n-1).concat(i),d-parseInt(i,10)<100)return!1}l>60&&(l-=60),l<10&&(l="0".concat(l));var s="".concat(i,"/").concat(t,"/").concat(l);if(8===s.length){if(!(0,o.default)(s,"YY/MM/DD"))return!1}else if(!(0,o.default)(s,"YYYY/MM/DD"))return!1;return r.luhnCheck(a.replace(/\W/,""))},"uk-UA":function(a){for(var e=a.split("").map(function(a){return parseInt(a,10)}),i=[-1,5,7,9,4,6,10,5,7],t=0,l=0;l<i.length;l++)t+=e[l]*i[l];return t%11==10?0===e[9]:e[9]===t%11}};v["lb-LU"]=v["fr-LU"],v["lt-LT"]=v["et-EE"],v["nl-BE"]=v["fr-BE"],v["fr-CA"]=v["en-CA"];var A=/[-\\\/!@#$%\^&\*\(\)\+\=\[\]]+/g,m={"de-AT":A,"de-DE":/[\/\\]/g,"fr-BE":A};m["nl-BE"]=m["fr-BE"],a.exports=e.default,a.exports.default=e.default},7761:(a,e,i)=>{"use strict";function t(a){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},t(a)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var l=qa(i(3752)),r=qa(i(1371)),o=qa(i(855)),d=qa(i(3214)),n=qa(i(700)),s=qa(i(9220)),c=qa(i(2576)),u=qa(i(9517)),f=qa(i(7844)),v=qa(i(3196)),A=qa(i(5372)),m=qa(i(7115)),b=qa(i(7658)),g=qa(i(9013)),p=qa(i(8796)),h=qa(i(1697)),F=qa(i(7071)),B=qa(i(4325)),C=Qa(i(6529)),S=Qa(i(8986)),E=qa(i(1666)),M=Qa(i(3442)),D=qa(i(3906)),$=qa(i(7612)),_=qa(i(5577)),I=qa(i(8461)),y=qa(i(4294)),T=qa(i(9666)),Z=qa(i(9534)),R=qa(i(1449)),L=qa(i(2830)),N=qa(i(9841)),x=qa(i(3459)),P=qa(i(6084)),G=Qa(i(995)),O=qa(i(5926)),w=qa(i(2002)),U=qa(i(9546)),H=qa(i(3735)),k=qa(i(4641)),V=qa(i(5467)),K=qa(i(7086)),W=qa(i(1954)),Y=Qa(i(3641)),j=qa(i(5259)),X=qa(i(9745)),J=qa(i(3973)),z=qa(i(9172)),Q=qa(i(5751)),q=qa(i(2056)),aa=qa(i(9285)),ea=qa(i(6255)),ia=qa(i(9877)),ta=qa(i(5186)),la=qa(i(1252)),ra=qa(i(1195)),oa=qa(i(6658)),da=qa(i(9266)),na=qa(i(3609)),sa=qa(i(1062)),ca=qa(i(2645)),ua=qa(i(7717)),fa=qa(i(2678)),va=qa(i(9717)),Aa=qa(i(604)),ma=qa(i(7741)),ba=Qa(i(5251)),ga=qa(i(82)),pa=qa(i(6782)),ha=qa(i(5748)),Fa=i(5777),Ba=qa(i(8033)),Ca=qa(i(6169)),Sa=qa(i(1578)),Ea=qa(i(3405)),Ma=qa(i(8447)),Da=qa(i(3832)),$a=qa(i(3158)),_a=qa(i(8342)),Ia=qa(i(7673)),ya=qa(i(6617)),Ta=qa(i(8274)),Za=qa(i(3583)),Ra=qa(i(7349)),La=qa(i(2337)),Na=qa(i(4633)),xa=qa(i(5830)),Pa=Qa(i(3939)),Ga=qa(i(2309)),Oa=qa(i(2483)),wa=qa(i(317)),Ua=qa(i(9790)),Ha=qa(i(7677)),ka=qa(i(561)),Va=qa(i(1996)),Ka=qa(i(410)),Wa=qa(i(629)),Ya=qa(i(1128)),ja=qa(i(9234)),Xa=qa(i(676)),Ja=qa(i(7179)),za=qa(i(5366));function Qa(a,e){if("function"==typeof WeakMap)var i=new WeakMap,l=new WeakMap;return(Qa=function(a,e){if(!e&&a&&a.__esModule)return a;var r,o,d={__proto__:null,default:a};if(null===a||"object"!=t(a)&&"function"!=typeof a)return d;if(r=e?l:i){if(r.has(a))return r.get(a);r.set(a,d)}for(var n in a)"default"!==n&&{}.hasOwnProperty.call(a,n)&&((o=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(a,n))&&(o.get||o.set)?r(d,n,o):d[n]=a[n]);return d})(a,e)}function qa(a){return a&&a.__esModule?a:{default:a}}var ae={version:"13.15.15",toDate:l.default,toFloat:r.default,toInt:o.default,toBoolean:d.default,equals:n.default,contains:s.default,matches:c.default,isEmail:u.default,isURL:f.default,isMACAddress:v.default,isIP:A.default,isIPRange:m.default,isFQDN:b.default,isBoolean:h.default,isIBAN:Y.default,isBIC:j.default,isAbaRouting:B.default,isAlpha:C.default,isAlphaLocales:C.locales,isAlphanumeric:S.default,isAlphanumericLocales:S.locales,isNumeric:E.default,isPassportNumber:M.default,passportNumberLocales:M.locales,isPort:D.default,isLowercase:$.default,isUppercase:_.default,isAscii:y.default,isFullWidth:T.default,isHalfWidth:Z.default,isVariableWidth:R.default,isMultibyte:L.default,isSemVer:N.default,isSurrogatePair:x.default,isInt:P.default,isIMEI:I.default,isFloat:G.default,isFloatLocales:G.locales,isDecimal:O.default,isHexadecimal:w.default,isOctal:U.default,isDivisibleBy:H.default,isHexColor:k.default,isRgbColor:V.default,isHSL:K.default,isISRC:W.default,isMD5:X.default,isHash:J.default,isJWT:z.default,isJSON:Q.default,isEmpty:q.default,isLength:aa.default,isLocale:F.default,isByteLength:ea.default,isULID:ia.default,isUUID:ta.default,isMongoId:la.default,isAfter:ra.default,isBefore:oa.default,isIn:da.default,isLuhnNumber:na.default,isCreditCard:sa.default,isIdentityCard:ca.default,isEAN:ua.default,isISIN:fa.default,isISBN:va.default,isISSN:Aa.default,isMobilePhone:ba.default,isMobilePhoneLocales:ba.locales,isPostalCode:Pa.default,isPostalCodeLocales:Pa.locales,isEthereumAddress:ga.default,isCurrency:pa.default,isBtcAddress:ha.default,isISO6346:Fa.isISO6346,isFreightContainerID:Fa.isFreightContainerID,isISO6391:Ba.default,isISO8601:Ca.default,isISO15924:Ea.default,isRFC3339:Sa.default,isISO31661Alpha2:Ma.default,isISO31661Alpha3:Da.default,isISO31661Numeric:$a.default,isISO4217:_a.default,isBase32:Ia.default,isBase58:ya.default,isBase64:Ta.default,isDataURI:Za.default,isMagnetURI:Ra.default,isMailtoURI:La.default,isMimeType:Na.default,isLatLong:xa.default,ltrim:Ga.default,rtrim:Oa.default,trim:wa.default,escape:Ua.default,unescape:Ha.default,stripLow:ka.default,whitelist:Va.default,blacklist:Ka.default,isWhitelisted:Wa.default,normalizeEmail:Ya.default,toString,isSlug:ja.default,isStrongPassword:Ja.default,isTaxID:ma.default,isDate:g.default,isTime:p.default,isLicensePlate:Xa.default,isVAT:za.default,ibanLocales:Y.locales};e.default=ae,a.exports=e.default,a.exports.default=e.default},7844:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){if((0,t.default)(a),!a||/[\s<>]/.test(a))return!1;if(0===a.indexOf("mailto:"))return!1;if((e=(0,n.default)(e,u)).validate_length&&a.length>e.max_allowed_length)return!1;if(!e.allow_fragments&&(0,r.default)(a,"#"))return!1;if(!e.allow_query_components&&((0,r.default)(a,"?")||(0,r.default)(a,"&")))return!1;var i,s,v,A,m,b,g,p,h;if(g=a.split("#"),a=g.shift(),g=a.split("?"),a=g.shift(),(g=a.split("://")).length>1){if(i=g.shift().toLowerCase(),e.require_valid_protocol&&-1===e.protocols.indexOf(i))return!1}else{if(e.require_protocol)return!1;if("//"===a.slice(0,2)){if(!e.allow_protocol_relative_urls)return!1;g[0]=a.slice(2)}}if(""===(a=g.join("://")))return!1;if(g=a.split("/"),""===(a=g.shift())&&!e.require_host)return!0;if((g=a.split("@")).length>1){if(e.disallow_auth)return!1;if(""===g[0])return!1;if((s=g.shift()).indexOf(":")>=0&&s.split(":").length>2)return!1;var F=function(a){if(Array.isArray(a))return a}(h=s.split(":"))||function(a){var e=null==a?null:"undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=e){var i,t,l,r,o=[],d=!0,n=!1;try{for(l=(e=e.call(a)).next,!2;!(d=(i=l.call(e)).done)&&(o.push(i.value),2!==o.length);d=!0);}catch(a){n=!0,t=a}finally{try{if(!d&&null!=e.return&&(r=e.return(),Object(r)!==r))return}finally{if(n)throw t}}return o}}(h)||function(a){if(a){if("string"==typeof a)return c(a,2);var e={}.toString.call(a).slice(8,-1);return"Object"===e&&a.constructor&&(e=a.constructor.name),"Map"===e||"Set"===e?Array.from(a):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?c(a,2):void 0}}(h)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),B=F[0],C=F[1];if(""===B&&""===C)return!1}b=null,p=null;var S=(A=g.join("@")).match(f);if(S?(v="",p=S[1],b=S[2]||null):(v=(g=A.split(":")).shift(),g.length&&(b=g.join(":"))),null!==b&&b.length>0){if(m=parseInt(b,10),!/^[0-9]+$/.test(b)||m<=0||m>65535)return!1}else if(e.require_port)return!1;return e.host_whitelist?(0,l.default)(v,e.host_whitelist):""===v&&!e.require_host||!!((0,d.default)(v)||(0,o.default)(v,e)||p&&(0,d.default)(p,6))&&(v=v||p,!e.host_blacklist||!(0,l.default)(v,e.host_blacklist))};var t=s(i(3399)),l=s(i(1572)),r=s(i(4636)),o=s(i(7658)),d=s(i(5372)),n=s(i(3610));function s(a){return a&&a.__esModule?a:{default:a}}function c(a,e){(null==e||e>a.length)&&(e=a.length);for(var i=0,t=Array(e);i<e;i++)t[i]=a[i];return t}var u={protocols:["http","https","ftp"],require_tld:!0,require_protocol:!1,require_host:!0,require_port:!1,require_valid_protocol:!0,allow_underscores:!1,allow_trailing_dot:!1,allow_protocol_relative_urls:!1,allow_fragments:!0,allow_query_components:!0,validate_length:!0,max_allowed_length:2084},f=/^\[([^\]]+)\](?::([0-9]+))?$/;a.exports=e.default,a.exports.default=e.default},8033:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.has(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=new Set(["aa","ab","ae","af","ak","am","an","ar","as","av","ay","az","az","ba","be","bg","bh","bi","bm","bn","bo","br","bs","ca","ce","ch","co","cr","cs","cu","cv","cy","da","de","dv","dz","ee","el","en","eo","es","et","eu","fa","ff","fi","fj","fo","fr","fy","ga","gd","gl","gn","gu","gv","ha","he","hi","ho","hr","ht","hu","hy","hz","ia","id","ie","ig","ii","ik","io","is","it","iu","ja","jv","ka","kg","ki","kj","kk","kl","km","kn","ko","kr","ks","ku","kv","kw","ky","la","lb","lg","li","ln","lo","lt","lu","lv","mg","mh","mi","mk","ml","mn","mr","ms","mt","my","na","nb","nd","ne","ng","nl","nn","no","nr","nv","ny","oc","oj","om","or","os","pa","pi","pl","ps","pt","qu","rm","rn","ro","ru","rw","sa","sc","sd","se","sg","si","sk","sl","sm","sn","so","sq","sr","ss","st","su","sv","sw","ta","te","tg","th","ti","tk","tl","tn","to","tr","ts","tt","tw","ty","ug","uk","ur","uz","ve","vi","vo","wa","wo","xh","yi","yo","za","zh","zu"]);a.exports=e.default,a.exports.default=e.default},8274:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){var i,r;return(0,t.default)(a),e=(0,l.default)(e,{urlSafe:!1,padding:!(null!==(i=e)&&void 0!==i&&i.urlSafe)}),""===a||(r=e.urlSafe?e.padding?n:s:e.padding?o:d,(!e.padding||a.length%4==0)&&r.test(a))};var t=r(i(3399)),l=r(i(3610));function r(a){return a&&a.__esModule?a:{default:a}}var o=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/,d=/^[A-Za-z0-9+/]+$/,n=/^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2}==|[A-Za-z0-9_-]{3}=|[A-Za-z0-9_-]{4})$/,s=/^[A-Za-z0-9_-]+$/;a.exports=e.default,a.exports.default=e.default},8342:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CurrencyCodes=void 0,e.default=function(a){return(0,l.default)(a),r.has(a.toUpperCase())};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=new Set(["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SLL","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VES","VND","VUV","WST","XAF","XAG","XAU","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMW","ZWL"]);e.CurrencyCodes=r},8447:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CountryCodes=void 0,e.default=function(a){return(0,l.default)(a),r.has(a.toUpperCase())};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=new Set(["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"]);e.CountryCodes=r},8461:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){(0,l.default)(a);var i=r;if((e=e||{}).allow_hyphens&&(i=o),!i.test(a))return!1;a=a.replace(/-/g,"");for(var t=0,d=2,n=0;n<14;n++){var s=a.substring(14-n-1,14-n),c=parseInt(s,10)*d;t+=c>=10?c%10+1:c,1===d?d+=1:d-=1}return(10-t%10)%10===parseInt(a.substring(14,15),10)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^[0-9]{15}$/,o=/^\d{2}-\d{6}-\d{6}-\d{1}$/;a.exports=e.default,a.exports.default=e.default},8644:(a,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.default=function(a,e){return a.some(function(a){return e===a})},a.exports=e.default,a.exports.default=e.default},8796:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){return e=(0,l.default)(e,r),"string"==typeof a&&o[e.hourFormat][e.mode].test(a)};var t,l=(t=i(3610))&&t.__esModule?t:{default:t},r={hourFormat:"hour24",mode:"default"},o={hour24:{default:/^([01]?[0-9]|2[0-3]):([0-5][0-9])$/,withSeconds:/^([01]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/,withOptionalSeconds:/^([01]?[0-9]|2[0-3]):([0-5][0-9])(?::([0-5][0-9]))?$/},hour12:{default:/^(0?[1-9]|1[0-2]):([0-5][0-9]) (A|P)M$/,withSeconds:/^(0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) (A|P)M$/,withOptionalSeconds:/^(0?[1-9]|1[0-2]):([0-5][0-9])(?::([0-5][0-9]))? (A|P)M$/}};a.exports=e.default,a.exports.default=e.default},8986:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-US",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,l.default)(a);var t=a,o=i.ignore;if(o)if(o instanceof RegExp)t=t.replace(o,"");else{if("string"!=typeof o)throw new Error("ignore should be instance of a String or RegExp");t=t.replace(new RegExp("[".concat(o.replace(/[-[\]{}()*+?.,\\^$|#\\s]/g,"\\$&"),"]"),"g"),"")}if(e in r.alphanumeric)return r.alphanumeric[e].test(t);throw new Error("Invalid locale '".concat(e,"'"))},e.locales=void 0;var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=i(3237);e.locales=Object.keys(r.alphanumeric)},9013:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){if(e="string"==typeof e?(0,l.default)({format:e},n):(0,l.default)(e,n),"string"==typeof a&&(h=e.format,/(^(y{4}|y{2})[.\/-](m{1,2})[.\/-](d{1,2})$)|(^(m{1,2})[.\/-](d{1,2})[.\/-]((y{4}|y{2})$))|(^(d{1,2})[.\/-](m{1,2})[.\/-]((y{4}|y{2})$))/gi.test(h))){if(e.strictMode&&a.length!==e.format.length)return!1;var i,t=e.delimiters.find(function(a){return-1!==e.format.indexOf(a)}),d=e.strictMode?t:e.delimiters.find(function(e){return-1!==a.indexOf(e)}),s=function(a,e){for(var i=[],t=Math.max(a.length,e.length),l=0;l<t;l++)i.push([a[l],e[l]]);return i}(a.split(d),e.format.toLowerCase().split(t)),c={},u=function(a){var e="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!e){if(Array.isArray(a)||(e=o(a))){e&&(a=e);var i=0,t=function(){};return{s:t,n:function(){return i>=a.length?{done:!0}:{done:!1,value:a[i++]}},e:function(a){throw a},f:t}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,r=!0,d=!1;return{s:function(){e=e.call(a)},n:function(){var a=e.next();return r=a.done,a},e:function(a){d=!0,l=a},f:function(){try{r||null==e.return||e.return()}finally{if(d)throw l}}}}(s);try{for(u.s();!(i=u.n()).done;){var f=r(i.value,2),v=f[0],A=f[1];if(!v||!A||v.length!==A.length)return!1;c[A.charAt(0)]=v}}catch(a){u.e(a)}finally{u.f()}var m=c.y;if(m.startsWith("-"))return!1;if(2===c.y.length){var b=parseInt(c.y,10);if(isNaN(b))return!1;m=b<(new Date).getFullYear()%100?"20".concat(c.y):"19".concat(c.y)}var g=c.m;1===c.m.length&&(g="0".concat(c.m));var p=c.d;return 1===c.d.length&&(p="0".concat(c.d)),new Date("".concat(m,"-").concat(g,"-").concat(p,"T00:00:00.000Z")).getUTCDate()===+c.d}var h;return!e.strictMode&&("[object Date]"===Object.prototype.toString.call(a)&&isFinite(a))};var t,l=(t=i(3610))&&t.__esModule?t:{default:t};function r(a,e){return function(a){if(Array.isArray(a))return a}(a)||function(a,e){var i=null==a?null:"undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=i){var t,l,r,o,d=[],n=!0,s=!1;try{if(r=(i=i.call(a)).next,0===e){if(Object(i)!==i)return;n=!1}else for(;!(n=(t=r.call(i)).done)&&(d.push(t.value),d.length!==e);n=!0);}catch(a){s=!0,l=a}finally{try{if(!n&&null!=i.return&&(o=i.return(),Object(o)!==o))return}finally{if(s)throw l}}return d}}(a,e)||o(a,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(a,e){if(a){if("string"==typeof a)return d(a,e);var i={}.toString.call(a).slice(8,-1);return"Object"===i&&a.constructor&&(i=a.constructor.name),"Map"===i||"Set"===i?Array.from(a):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?d(a,e):void 0}}function d(a,e){(null==e||e>a.length)&&(e=a.length);for(var i=0,t=Array(e);i<e;i++)t[i]=a[i];return t}var n={format:"YYYY/MM/DD",delimiters:["/","-"],strictMode:!1};a.exports=e.default,a.exports.default=e.default},9172:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){(0,t.default)(a);var e=a.split(".");return 3===e.length&&e.reduce(function(a,e){return a&&(0,l.default)(e,{urlSafe:!0})},!0)};var t=r(i(3399)),l=r(i(8274));function r(a){return a&&a.__esModule?a:{default:a}}a.exports=e.default,a.exports.default=e.default},9220:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e,i){return(0,t.default)(a),(i=(0,r.default)(i,d)).ignoreCase?a.toLowerCase().split((0,l.default)(e).toLowerCase()).length>i.minOccurrences:a.split((0,l.default)(e)).length>i.minOccurrences};var t=o(i(3399)),l=o(i(5772)),r=o(i(3610));function o(a){return a&&a.__esModule?a:{default:a}}var d={ignoreCase:!1,minOccurrences:1};a.exports=e.default,a.exports.default=e.default},9234:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^[^\s-_](?!.*?[-_]{2,})[a-z0-9-\\][^\s]*[^-_\s]$/;a.exports=e.default,a.exports.default=e.default},9266:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){var i;if((0,t.default)(a),"[object Array]"===Object.prototype.toString.call(e)){var r=[];for(i in e)({}).hasOwnProperty.call(e,i)&&(r[i]=(0,l.default)(e[i]));return r.indexOf(a)>=0}return"object"===o(e)?e.hasOwnProperty(a):!(!e||"function"!=typeof e.indexOf)&&e.indexOf(a)>=0};var t=r(i(3399)),l=r(i(5772));function r(a){return a&&a.__esModule?a:{default:a}}function o(a){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},o(a)}a.exports=e.default,a.exports.default=e.default},9285:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){var i,t;(0,l.default)(a),"object"===r(e)?(i=e.min||0,t=e.max):(i=arguments[1]||0,t=arguments[2]);var o=a.match(/(\uFE0F|\uFE0E)/g)||[],d=a.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g)||[],n=a.length-o.length-d.length,s=n>=i&&(void 0===t||n<=t);return s&&Array.isArray(null==e?void 0:e.discreteLengths)?e.discreteLengths.some(function(a){return a===n}):s};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};function r(a){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},r(a)}a.exports=e.default,a.exports.default=e.default},9517:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a,e){if((0,t.default)(a),(e=(0,n.default)(e,c)).require_display_name||e.allow_display_name){var i=a.match(u);if(i){var s=i[1];if(a=a.replace(s,"").replace(/(^<|>$)/g,""),s.endsWith(" ")&&(s=s.slice(0,-1)),!function(a){var e=a.replace(/^"(.+)"$/,"$1");if(!e.trim())return!1;if(/[\.";<>]/.test(e)){if(e===a)return!1;if(e.split('"').length!==e.split('\\"').length)return!1}return!0}(s))return!1}else if(e.require_display_name)return!1}if(!e.ignore_max_length&&a.length>g)return!1;var p=a.split("@"),h=p.pop(),F=h.toLowerCase();if(e.host_blacklist.length>0&&(0,l.default)(F,e.host_blacklist))return!1;if(e.host_whitelist.length>0&&!(0,l.default)(F,e.host_whitelist))return!1;var B=p.join("@");if(e.domain_specific_validation&&("gmail.com"===F||"googlemail.com"===F)){var C=(B=B.toLowerCase()).split("+")[0];if(!(0,r.default)(C.replace(/\./g,""),{min:6,max:30}))return!1;for(var S=C.split("."),E=0;E<S.length;E++)if(!v.test(S[E]))return!1}if(!(!1!==e.ignore_max_length||(0,r.default)(B,{max:64})&&(0,r.default)(h,{max:254})))return!1;if(!(0,o.default)(h,{require_tld:e.require_tld,ignore_max_length:e.ignore_max_length,allow_underscores:e.allow_underscores})){if(!e.allow_ip_domain)return!1;if(!(0,d.default)(h)){if(!h.startsWith("[")||!h.endsWith("]"))return!1;var M=h.slice(1,-1);if(0===M.length||!(0,d.default)(M))return!1}}if(e.blacklisted_chars&&-1!==B.search(new RegExp("[".concat(e.blacklisted_chars,"]+"),"g")))return!1;if('"'===B[0]&&'"'===B[B.length-1])return B=B.slice(1,B.length-1),e.allow_utf8_local_part?b.test(B):A.test(B);for(var D=e.allow_utf8_local_part?m:f,$=B.split("."),_=0;_<$.length;_++)if(!D.test($[_]))return!1;return!0};var t=s(i(3399)),l=s(i(1572)),r=s(i(6255)),o=s(i(7658)),d=s(i(5372)),n=s(i(3610));function s(a){return a&&a.__esModule?a:{default:a}}var c={allow_display_name:!1,allow_underscores:!1,require_display_name:!1,allow_utf8_local_part:!0,require_tld:!0,blacklisted_chars:"",ignore_max_length:!1,host_blacklist:[],host_whitelist:[]},u=/^([^\x00-\x1F\x7F-\x9F\cX]+)</i,f=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i,v=/^[a-z\d]+$/,A=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i,m=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A1-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i,b=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i,g=254;a.exports=e.default,a.exports.default=e.default},9534:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)},e.halfWidth=void 0;var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=e.halfWidth=/[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/},9546:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^(0o)?[0-7]+$/i;a.exports=e.default,a.exports.default=e.default},9666:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)},e.fullWidth=void 0;var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=e.fullWidth=/[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/},9717:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function a(e,i){(0,l.default)(e);var t=String((null==i?void 0:i.version)||i);if(!(null!=i&&i.version||i))return a(e,{version:10})||a(e,{version:13});var n=e.replace(/[\s-]+/g,""),s=0;if("10"===t){if(!r.test(n))return!1;for(var c=0;c<t-1;c++)s+=(c+1)*n.charAt(c);if("X"===n.charAt(9)?s+=100:s+=10*n.charAt(9),s%11==0)return!0}else if("13"===t){if(!o.test(n))return!1;for(var u=0;u<12;u++)s+=d[u%2]*n.charAt(u);if(n.charAt(12)-(10-s%10)%10==0)return!0}return!1};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^(?:[0-9]{9}X|[0-9]{10})$/,o=/^(?:[0-9]{13})$/,d=[1,3];a.exports=e.default,a.exports.default=e.default},9745:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),r.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t},r=/^[a-f0-9]{32}$/;a.exports=e.default,a.exports.default=e.default},9790:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),a.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\//g,"&#x2F;").replace(/\\/g,"&#x5C;").replace(/`/g,"&#96;")};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default},9841:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,t.default)(a),r.test(a)};var t=l(i(3399));function l(a){return a&&a.__esModule?a:{default:a}}var r=(0,l(i(5730)).default)(["^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)","(?:-((?:0|[1-9]\\d*|\\d*[a-z-][0-9a-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-z-][0-9a-z-]*))*))","?(?:\\+([0-9a-z-]+(?:\\.[0-9a-z-]+)*))?$"],"i");a.exports=e.default,a.exports.default=e.default},9877:(a,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(a){return(0,l.default)(a),/^[0-7][0-9A-HJKMNP-TV-Z]{25}$/i.test(a)};var t,l=(t=i(3399))&&t.__esModule?t:{default:t};a.exports=e.default,a.exports.default=e.default}},e={};function i(t){var l=e[t];if(void 0!==l)return l.exports;var r=e[t]={exports:{}};return a[t](r,r.exports,i),r.exports}i.d=(a,e)=>{for(var t in e)i.o(e,t)&&!i.o(a,t)&&Object.defineProperty(a,t,{enumerable:!0,get:e[t]})},i.o=(a,e)=>Object.prototype.hasOwnProperty.call(a,e),i.r=a=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})};var t={};(()=>{"use strict";i.r(t),i.d(t,{runTest:()=>n});var a=i(7761);let e=0;function l(a,...i){if(e++,!a)throw new Error(`Assertion failure: ${i}`)}function r(a,e){e()}function o(a,e){e()}function d({validator:e,args:i=[],valid:t,invalid:r}){const o=a[e];t?.forEach(a=>{l(o(a,...i),a,...i)}),r?.forEach(a=>{l(!o(a,...i),a,...i)})}function n(){return e=0,r(0,()=>{o(0,()=>{d({validator:"isEmail",valid:["[email protected]","[email protected]","[email protected]","[email protected]","hans.m\[email protected]","hans@m\u7aefller.com","test|123@m\u7aefller.com","[email protected]","[email protected]",'"foobar"@example.com','"  foo  m\u7aefller "@example.com','"foo\\@bar"@example.com',`${"a".repeat(64)}@${"a".repeat(63)}.com`,`${"a".repeat(64)}@${"a".repeat(63)}.com`,`${"a".repeat(31)}@gmail.com`,"[email protected]","[email protected]","[email protected]"],invalid:["invalidemail@","invalid.com","@invalid.com","[email protected].","foo@_bar.com","somename@\uff47\uff4d\uff41\uff49\uff4c.com","[email protected].","[email protected]","\uff47\uff4d\uff41\uff49\uff4c\uff47\uff4d\uff41\uff49\uff4c\uff47\uff4d\uff41\uff49\uff4c\uff47\uff4d\uff41\uff49\uff4c\uff47\uff4d\uff41\uff49\[email protected]",`${"a".repeat(64)}@${"a".repeat(251)}.com`,`${"a".repeat(65)}@${"a".repeat(250)}.com`,`${"a".repeat(64)}@${"a".repeat(64)}.com`,`${"a".repeat(64)}@${"a".repeat(63)}.${"a".repeat(63)}.${"a".repeat(63)}.${"a".repeat(58)}.com`,"[email protected]\u2006m","[email protected]\u2002m","[email protected]\u2004m","[email protected]\u2005m","[email protected]\u2006m","[email protected]\u2007m","[email protected]\u2008m","[email protected]\u2009m","[email protected]\u200am","[email protected]\u202fm","[email protected]\u205fm","[email protected]\u3000m","[email protected]\u3000m","[email protected]","test123+invalid! [email protected]","[email protected]","[email protected]","[email protected]",'wrong()[]",:;<>@@gmail.com','"wrong()[]",:;<>@@gmail.com',"[email protected]\ufffd","[email protected]\u00a9","nbsp\[email protected]","nbsp_test@te\u00a0st.com","[email protected]\u00a0m",'"[email protected]','"foo"[email protected]','foo"bar"@gmail.com']})}),o(0,()=>{d({validator:"isEmail",args:[{domain_specific_validation:!0}],valid:["[email protected]","[email protected]","[email protected]",`${"a".repeat(30)}@gmail.com`],invalid:[`${"a".repeat(31)}@gmail.com`,"[email protected]","[email protected]","[email protected]"]})}),o(0,()=>{d({validator:"isEmail",args:[{allow_underscores:!0}],valid:["foobar@my_sarisari_store.typepad.com"],invalid:[]})}),o(0,()=>{d({validator:"isEmail",args:[{allow_utf8_local_part:!1}],valid:["[email protected]","[email protected]","[email protected]","[email protected]","hans@m\u7aefller.com","test|123@m\u7aefller.com","[email protected]","[email protected]",'"foobar"@example.com','"foo\\@bar"@example.com','"  foo  bar  "@example.com'],invalid:["invalidemail@","invalid.com","@invalid.com","[email protected].","[email protected].","somename@\uff47\uff4d\uff41\uff49\uff4c.com","hans.m\[email protected]","[email protected]","t\[email protected]","nbsp\[email protected]"]})}),o(0,()=>{d({validator:"isEmail",args:[{allow_display_name:!0}],valid:["[email protected]","[email protected]","[email protected]","[email protected]","hans.m\[email protected]","hans@m\u7aefller.com","test|123@m\u7aefller.com","[email protected]","[email protected]","Some Name <[email protected]>","Some Name <[email protected]>","Some Name <[email protected]>","Some Name <[email protected]>","Some Name <hans.m\[email protected]>","Some Name <hans@m\u7aefller.com>","Some Name <test|123@m\u7aefller.com>","Some Name <[email protected]>","'Foo Bar, Esq'<[email protected]>","Some Name <[email protected]>","Some Middle Name <[email protected]>","Name <[email protected]>","Name<[email protected]>","Some Name <[email protected]>","Name\ud83c\udf53With\ud83c\udf51Emoji\ud83d\udeb4\u200d\u2640\ufe0f\ud83c\udfc6<[email protected]>","\ud83c\udf47\ud83c\udf57\ud83c\udf51<[email protected]>",'"<displayNameInBrackets>"<[email protected]>','"\\"quotes\\""<[email protected]>','"name;"<[email protected]>','"name;" <[email protected]>'],invalid:["invalidemail@","invalid.com","@invalid.com","[email protected].","[email protected].","Some Name <invalidemail@>","Some Name <invalid.com>","Some Name <@invalid.com>","Some Name <[email protected].>","Some Name <[email protected].>","Some Name [email protected].>","Some Name <[email protected].","Some Name < [email protected] >","Name [email protected]","Some Name <[email protected]>","Some Name<emoji_in_address\ud83c\[email protected]>","invisibleCharacter<[email protected]>","<displayNameInBrackets><[email protected]>",'\\"quotes\\"<[email protected]>','""quotes""<[email protected]>',"name;<[email protected]>","    <[email protected]>",'"    "<[email protected]>']})}),o(0,()=>{d({validator:"isEmail",args:[{require_display_name:!0}],valid:["Some Name <[email protected]>","Some Name <[email protected]>","Some Name <[email protected]>","Some Name <[email protected]>","Some Name <hans.m\[email protected]>","Some Name <hans@m\u7aefller.com>","Some Name <test|123@m\u7aefller.com>","Some Name <[email protected]>","Some Name <[email protected]>","Some Middle Name <[email protected]>","Name <[email protected]>","Name<[email protected]>"],invalid:["[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","hans.m\[email protected]","hans@m\u7aefller.com","test|123@m\u7aefller.com","[email protected]","invalidemail@","invalid.com","@invalid.com","[email protected].","[email protected].","Some Name <invalidemail@>","Some Name <invalid.com>","Some Name <@invalid.com>","Some Name <[email protected].>","Some Name <[email protected].>","Some Name [email protected].>","Some Name <[email protected].","Some Name < [email protected] >","Name [email protected]"]})}),o(0,()=>{d({validator:"isEmail",args:[{allow_ip_domain:!0}],valid:["email@[123.123.123.123]","[email protected]"],invalid:["[email protected]","[email protected]","email@[266.266.266.266]"]})}),o(0,()=>{d({validator:"isEmail",args:[{blacklisted_chars:'abc"'}],valid:["[email protected]"],invalid:["[email protected]",'"foobr"@example.com','" foo m\u7aefller "@example.com','"foo@br"@example.com']})}),o(0,()=>{d({validator:"isEmail",args:[{ignore_max_length:!1}],valid:[],invalid:["Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@example.com"]}),d({validator:"isEmail",args:[{ignore_max_length:!0}],valid:["Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@example.com"],invalid:[]}),d({validator:"isEmail",args:[{ignore_max_length:!0}],valid:["Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX.com"],invalid:[]})}),o(0,()=>{d({validator:"isEmail",args:[{host_blacklist:["gmail.com","foo.bar.com"]}],valid:["[email protected]"],invalid:["[email protected]","[email protected]"]})}),o(0,()=>{d({validator:"isEmail",args:[{host_blacklist:["bar.com","foo.com",/\.foo\.com$/]}],valid:["[email protected]","[email protected]","[email protected]"],invalid:["[email protected]","[email protected]","[email protected]"]})}),o(0,()=>{d({validator:"isEmail",args:[{host_whitelist:["gmail.com","foo.bar.com"]}],valid:["[email protected]","[email protected]"],invalid:["[email protected]","[email protected]","[email protected]"]})}),o(0,()=>{d({validator:"isEmail",args:[{host_whitelist:["bar.com","foo.com",/\.foo\.com$/]}],valid:["[email protected]","[email protected]","[email protected]"],invalid:["[email protected]","[email protected]","[email protected]"]})}),o(0,()=>{d({validator:"isURL",valid:["foobar.com","www.foobar.com","foobar.com/","valid.au","http://www.foobar.com/","HTTP://WWW.FOOBAR.COM/","https://www.foobar.com/","HTTPS://WWW.FOOBAR.COM/","http://www.foobar.com:23/","http://www.foobar.com:65535/","http://www.foobar.com:5/","https://www.foobar.com/","ftp://www.foobar.com/","http://www.foobar.com/~foobar","http://user:[email protected]/","http://user:@www.foobar.com/","http://:[email protected]/","http://[email protected]","http://127.0.0.1/","http://10.0.0.0/","http://189.123.14.13/","http://duckduckgo.com/?q=%2F","http://foobar.com/t$-_.+!*'(),","http://foobar.com/?foo=bar#baz=qux","http://foobar.com?foo=bar","http://foobar.com#baz=qux","http://www.xn--froschgrn-x9a.net/","http://xn--froschgrn-x9a.com/","http://foo--bar.com","http://h\u00f8yfjellet.no","http://xn--j1aac5a4g.xn--j1amh","http://xn------eddceddeftq7bvv7c4ke4c.xn--p1ai","http://\u043a\u0443\u043b\u0456\u043a.\u0443\u043a\u0440","test.com?ref=http://test2.com","http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html","http://[1080:0:0:0:8:800:200C:417A]/index.html","http://[3ffe:2a00:100:7031::1]","http://[1080::8:800:200C:417A]/foo","http://[::192.9.5.5]/ipng","http://[::FFFF:129.144.52.38]:80/index.html","http://[2010:836B:4179::836B:4179]","http://example.com/example.json#/foo/bar","http://1337.com"],invalid:["http://localhost:3000/","//foobar.com","xyz://foobar.com","invalid/","invalid.x","invalid.",".com","http://com/","http://300.0.0.1/","mailto:[email protected]","rtmp://foobar.com","http://www.xn--.com/","http://xn--.com/","http://www.foobar.com:0/","http://www.foobar.com:70000/","http://www.foobar.com:99999/","http://www.-foobar.com/","http://www.foobar-.com/","http://foobar/# lol","http://foobar/? lol","http://foobar/ lol/","http://lol @foobar.com/","http://lol:lol @foobar.com/","http://lol:lol:[email protected]/","http://lol: @foobar.com/","http://www.foo_bar.com/","http://www.foobar.com/\t","http://@foobar.com","http://:@foobar.com","http://\[email protected]/","",`http://foobar.com/${new Array(2083).join("f")}`,"http://*.foo.com","*.foo.com","!.foo.com","http://example.com.","http://localhost:61500this is an invalid url!!!!","////foobar.com","http:////foobar.com","https://example.com/foo/<script>alert('XSS')<\/script>/"]})}),o(0,()=>{d({validator:"isURL",args:[{protocols:["rtmp"]}],valid:["rtmp://foobar.com"],invalid:["http://foobar.com"]})}),o(0,()=>{d({validator:"isURL",args:[{protocols:["file"],require_host:!1,require_tld:!1}],valid:["file://localhost/foo.txt","file:///foo.txt","file:///"],invalid:["http://foobar.com","file://"]})}),o(0,()=>{d({validator:"isURL",args:[{protocols:["postgres"],require_host:!1}],valid:["postgres://user:pw@/test"],invalid:["http://foobar.com","postgres://"]})}),o(0,()=>{d({validator:"isURL",args:[{require_valid_protocol:!1}],valid:["rtmp://foobar.com","http://foobar.com","test://foobar.com"],invalid:["mailto:[email protected]"]})}),o(0,()=>{d({validator:"isURL",args:[{allow_underscores:!0}],valid:["http://foo_bar.com","http://pr.example_com.294.example.com/","http://foo__bar.com","http://_.example.com"],invalid:[]})}),o(0,()=>{d({validator:"isURL",args:[{require_tld:!1}],valid:["http://foobar.com/","http://foobar/","http://localhost/","foobar/","foobar"],invalid:[]})}),o(0,()=>{d({validator:"isURL",args:[{allow_trailing_dot:!0,require_tld:!1}],valid:["http://example.com.","foobar."]})}),o(0,()=>{d({validator:"isURL",valid:["http://example.com:","ftp://example.com:"],invalid:["https://example.com:abc"]})}),o(0,()=>{d({validator:"isURL",args:[{protocols:["sftp"]}],valid:["sftp://user:[email protected]:/incoming/things.csv"]})}),o(0,()=>{d({validator:"isURL",args:[{allow_protocol_relative_urls:!0}],valid:["//foobar.com","http://foobar.com","foobar.com"],invalid:["://foobar.com","/foobar.com","////foobar.com","http:////foobar.com"]})}),o(0,()=>{d({validator:"isURL",args:[{allow_fragments:!1}],valid:["http://foobar.com","foobar.com"],invalid:["http://foobar.com#part","foobar.com#part"]})}),o(0,()=>{d({validator:"isURL",args:[{allow_query_components:!1}],valid:["http://foobar.com","foobar.com"],invalid:["http://foobar.com?foo=bar","http://foobar.com?foo=bar&bar=foo","foobar.com?foo=bar","foobar.com?foo=bar&bar=foo"]})}),o(0,()=>{d({validator:"isURL",args:[{allow_protocol_relative_urls:!0,require_protocol:!0}],valid:["http://foobar.com"],invalid:["//foobar.com","://foobar.com","/foobar.com","foobar.com"]})}),o(0,()=>{d({validator:"isURL",args:[{require_protocol:!0}],valid:["http://foobar.com/"],invalid:["http://localhost/","foobar.com","foobar"]})}),o(0,()=>{d({validator:"isURL",args:[{host_whitelist:["foo.com","bar.com"]}],valid:["http://bar.com/","http://foo.com/"],invalid:["http://foobar.com","http://foo.bar.com/","http://qux.com"]})}),o(0,()=>{d({validator:"isURL",args:[{host_whitelist:["bar.com","foo.com",/\.foo\.com$/]}],valid:["http://bar.com/","http://foo.com/","http://images.foo.com/","http://cdn.foo.com/","http://a.b.c.foo.com/"],invalid:["http://foobar.com","http://foo.bar.com/","http://qux.com"]})}),o(0,()=>{d({validator:"isURL",args:[{host_blacklist:["foo.com","bar.com"]}],valid:["http://foobar.com","http://foo.bar.com/","http://qux.com"],invalid:["http://bar.com/","http://foo.com/"]})}),o(0,()=>{d({validator:"isURL",args:[{host_blacklist:["bar.com","foo.com",/\.foo\.com$/]}],valid:["http://foobar.com","http://foo.bar.com/","http://qux.com"],invalid:["http://bar.com/","http://foo.com/","http://images.foo.com/","http://cdn.foo.com/","http://a.b.c.foo.com/"]})}),o(0,()=>{d({validator:"isURL",args:[{disallow_auth:!0}],valid:["doe.com"],invalid:["[email protected]","john:[email protected]"]})}),o(0,()=>{d({validator:"isURL",args:[{disallow_auth:!1}],valid:["[email protected]","user:@example.com","user:[email protected]"],invalid:["user:user:[email protected]","@example.com",":@example.com",":example.com"]})}),o(0,()=>{d({validator:"isURL",args:[{validate_length:!1}],valid:["http://foobar.com/f",`http://foobar.com/${new Array(2083).join("f")}`],invalid:[]})}),o(0,()=>{d({validator:"isURL",args:[{max_allowed_length:20}],valid:["http://foobar.com/12","http://foobar.com/"],invalid:["http://foobar.com/123","http://foobar.com/1234567890"]})}),o(0,()=>{d({validator:"isURL",args:[{require_port:!0}],valid:["http://user:[email protected]:1","http://user:@www.foobar.com:65535","http://127.0.0.1:23","http://10.0.0.0:256","http://189.123.14.13:256","http://duckduckgo.com:65535?q=%2F"],invalid:["http://user:[email protected]/","http://user:@www.foobar.com/","http://127.0.0.1/","http://10.0.0.0/","http://189.123.14.13/","http://duckduckgo.com/?q=%2F"]})}),o(0,()=>{d({validator:"isMACAddress",valid:["ab:ab:ab:ab:ab:ab","FF:FF:FF:FF:FF:FF","01:02:03:04:05:ab","01:AB:03:04:05:06","A9 C5 D4 9F EB D3","01 02 03 04 05 ab","01-02-03-04-05-ab","0102.0304.05ab","ab:ab:ab:ab:ab:ab:ab:ab","FF:FF:FF:FF:FF:FF:FF:FF","01:02:03:04:05:06:07:ab","01:AB:03:04:05:06:07:08","A9 C5 D4 9F EB D3 B6 65","01 02 03 04 05 06 07 ab","01-02-03-04-05-06-07-ab","0102.0304.0506.07ab"],invalid:["abc","01:02:03:04:05","01:02:03:04:05:z0","01:02:03:04::ab","1:2:3:4:5:6","AB:CD:EF:GH:01:02","A9C5 D4 9F EB D3","01-02 03:04 05 ab","0102.03:04.05ab","900f/dffs/sdea","01:02:03:04:05:06:07","01:02:03:04:05:06:07:z0","01:02:03:04:05:06::ab","1:2:3:4:5:6:7:8","AB:CD:EF:GH:01:02:03:04","A9C5 D4 9F EB D3 B6 65","01-02 03:04 05 06 07 ab","0102.03:04.0506.07ab","900f/dffs/sdea/54gh"]}),d({validator:"isMACAddress",args:[{eui:"48"}],valid:["ab:ab:ab:ab:ab:ab","FF:FF:FF:FF:FF:FF","01:02:03:04:05:ab","01:AB:03:04:05:06","A9 C5 D4 9F EB D3","01 02 03 04 05 ab","01-02-03-04-05-ab","0102.0304.05ab"],invalid:["ab:ab:ab:ab:ab:ab:ab:ab","FF:FF:FF:FF:FF:FF:FF:FF","01:02:03:04:05:06:07:ab","01:AB:03:04:05:06:07:08","A9 C5 D4 9F EB D3 B6 65","01 02 03 04 05 06 07 ab","01-02-03-04-05-06-07-ab","0102.0304.0506.07ab"]}),d({validator:"isMACAddress",args:[{eui:"64"}],valid:["ab:ab:ab:ab:ab:ab:ab:ab","FF:FF:FF:FF:FF:FF:FF:FF","01:02:03:04:05:06:07:ab","01:AB:03:04:05:06:07:08","A9 C5 D4 9F EB D3 B6 65","01 02 03 04 05 06 07 ab","01-02-03-04-05-06-07-ab","0102.0304.0506.07ab"],invalid:["ab:ab:ab:ab:ab:ab","FF:FF:FF:FF:FF:FF","01:02:03:04:05:ab","01:AB:03:04:05:06","A9 C5 D4 9F EB D3","01 02 03 04 05 ab","01-02-03-04-05-ab","0102.0304.05ab"]})}),o(0,()=>{d({validator:"isMACAddress",args:[{no_separators:!0}],valid:["abababababab","FFFFFFFFFFFF","0102030405ab","01AB03040506","abababababababab","FFFFFFFFFFFFFFFF","01020304050607ab","01AB030405060708"],invalid:["abc","01:02:03:04:05","01:02:03:04::ab","1:2:3:4:5:6","AB:CD:EF:GH:01:02","ab:ab:ab:ab:ab:ab","FF:FF:FF:FF:FF:FF","01:02:03:04:05:ab","01:AB:03:04:05:06","0102030405","01020304ab","123456","ABCDEFGH0102","01:02:03:04:05:06:07","01:02:03:04:05:06::ab","1:2:3:4:5:6:7:8","AB:CD:EF:GH:01:02:03:04","ab:ab:ab:ab:ab:ab:ab:ab","FF:FF:FF:FF:FF:FF:FF:FF","01:02:03:04:05:06:07:ab","01:AB:03:04:05:06:07:08","01020304050607","010203040506ab","12345678","ABCDEFGH01020304"]}),d({validator:"isMACAddress",args:[{no_separators:!0,eui:"48"}],valid:["abababababab","FFFFFFFFFFFF","0102030405ab","01AB03040506"],invalid:["abababababababab","FFFFFFFFFFFFFFFF","01020304050607ab","01AB030405060708"]}),d({validator:"isMACAddress",args:[{no_separators:!0,eui:"64"}],valid:["abababababababab","FFFFFFFFFFFFFFFF","01020304050607ab","01AB030405060708"],invalid:["abababababab","FFFFFFFFFFFF","0102030405ab","01AB03040506"]})}),o(0,()=>{d({validator:"isIPRange",valid:["127.0.0.1/24","0.0.0.0/0","255.255.255.0/32","::/0","::/128","2001::/128","2001:800::/128","::ffff:127.0.0.1/128"],invalid:["abc","127.200.230.1/35","127.200.230.1/-1","1.1.1.1/011","1.1.1/24.1","1.1.1.1/01","1.1.1.1/1.1","1.1.1.1/1.","1.1.1.1/1/1","1.1.1.1","::1","::1/164","2001::/240","2001::/-1","2001::/001","2001::/24.1","2001:db8:0000:1:1:1:1:1","::ffff:127.0.0.1"]}),d({validator:"isIPRange",args:[4],valid:["127.0.0.1/1","0.0.0.0/1","255.255.255.255/1","1.2.3.4/1","255.0.0.1/1","0.0.1.1/1"],invalid:["abc","::1","2001:db8:0000:1:1:1:1:1","::ffff:127.0.0.1","137.132.10.01","0.256.0.256","255.256.255.256"]}),d({validator:"isIPRange",args:[6],valid:["::1/1","2001:db8:0000:1:1:1:1:1/1","::ffff:127.0.0.1/1"],invalid:["abc","127.0.0.1","0.0.0.0","255.255.255.255","1.2.3.4","::ffff:287.0.0.1","::ffff:287.0.0.1/254","%","fe80::1234%","fe80::1234%1%3%4","fe80%fe80%"]}),d({validator:"isIPRange",args:[10],valid:[],invalid:["abc","127.0.0.1/1","0.0.0.0/1","255.255.255.255/1","1.2.3.4/1","::1/1","2001:db8:0000:1:1:1:1:1/1"]})}),o(0,()=>{d({validator:"isFQDN",valid:["domain.com","dom.plato","a.domain.co","foo--bar.com","xn--froschgrn-x9a.com","rebecca.blackfriday","1337.com"],invalid:["abc","256.0.0.0","_.com","*.some.com","s!ome.com","domain.com/","/more.com","domain.com\ufffd","domain.co\u00a0m","domain.co\u1680m","domain.co\u2006m","domain.co\u2028m","domain.co\u2029m","domain.co\u202fm","domain.co\u205fm","domain.co\u3000m","domain.com\udc00","domain.co\uefffm","domain.co\ufddam","domain.co\ufff4m","domain.com\u00a9","example.0","192.168.0.9999","192.168.0"]})}),o(0,()=>{d({validator:"isFQDN",args:[{allow_trailing_dot:!0}],valid:["example.com."]})}),o(0,()=>{d({validator:"isFQDN",args:[{require_tld:!1}],invalid:["example.0","192.168.0","192.168.0.9999"]})}),o(0,()=>{d({validator:"isFQDN",args:[{allow_numeric_tld:!0,require_tld:!1}],valid:["example.0","192.168.0","192.168.0.9999"]})}),o(0,()=>{d({validator:"isFQDN",args:[{allow_wildcard:!0}],valid:["*.example.com","*.shop.example.com"]})}),o(0,()=>{d({validator:"isFQDN",args:[{allow_trailing_dot:!0,allow_underscores:!0,allow_numeric_tld:!0}],valid:["abc.efg.g1h.","as1s.sad3s.ssa2d."]})}),o(0,()=>{d({validator:"isAlpha",valid:["abc","ABC","FoObar"],invalid:["abc1","  foo  ","","\u00c4BC","F\u00dc\u00fcbar","J\u00f6n","Hei\u00df"]})}),o(0,()=>{d({validator:"isAlpha",args:["en-US",{ignore:"- /"}],valid:["en-US","this is a valid alpha string","us/usa"],invalid:["1. this is not a valid alpha string","this$is also not a valid.alpha string","this is also not a valid alpha string."]}),d({validator:"isAlpha",args:["en-US",{ignore:/[\s/-]/g}],valid:["en-US","this is a valid alpha string"],invalid:["1. this is not a valid alpha string","this$is also not a valid.alpha string","this is also not a valid alpha string."]}),d({validator:"isAlpha",args:["en-US",{ignore:1234}],error:["alpha"]})}),o(0,()=>{d({validator:"isAlpha",args:["az-AZ"],valid:["Az\u0259rbaycan","Bak\u0131","\u00fc\u00f6\u011f\u0131\u0259\u00e7\u015f","sizAz\u0259rbaycanla\u015fd\u0131r\u0131lm\u0131\u015flardans\u0131n\u0131zm\u0131","dahaBirD\u00fczg\u00fcnString","abc\u00e7de\u0259fg\u011fhx\u0131ijkqlmno\u00f6prs\u015ftu\u00fcvyz"],invalid:["r\u0259q\u0259m1","  foo  ","","ab(cd)","simvol@","w\u0259kil"]})}),o(0,()=>{d({validator:"isAlpha",args:["bg-BG"],valid:["\u0430\u0431\u0432","\u0410\u0411\u0412","\u0436\u0430\u0431\u0430","\u044f\u0413\u043e\u0414\u0430"],invalid:["abc1","  foo  ","","\u0401\u0427\u041f\u0421","_\u0430\u0437_\u043e\u0431\u0438\u0447\u0430\u043c_\u043e\u0431\u0443\u0432\u043a\u0438_","\u0435\u0445\u043e!"]})}),o(0,()=>{d({validator:"isAlpha",args:["bn-BD"],valid:["\u0985\u09df\u09be\u0993\u09b0","\u09ab\u0997\u09ab\u09a6\u09cd\u09b0\u09a4","\u09ab\u09a6\u09cd\u09ae\u09cd\u09af\u09a4\u09ad","\u09ac\u09c7\u09b0\u09c7\u0993\u09ad\u099a\u09a8\u09ad\u09a8","\u0986\u09ae\u09be\u09b0\u09ac\u09be\u09b8\u0997\u09be"],invalid:["\u09a6\u09be\u09b8\u09e8\u09e9\u09ea","  \u09a6\u09cd\u0997\u09ab\u09b9\u09cd\u09a8\u09ad  ","","(\u0997\u09ab\u09a6)"]})}),o(0,()=>{d({validator:"isAlpha",args:["cs-CZ"],valid:["\u017elu\u0165ou\u010dk\u00fd","K\u016e\u0147","P\u011bl","\u010e\u00e1belsk\u00e9","\u00f3dy"],invalid:["\u00e1bc1","  f\u016fj  ",""]})}),o(0,()=>{d({validator:"isAlpha",args:["sk-SK"],valid:["m\u00f4j","\u013e\u00fab\u00edm","m\u00e4k\u010de\u0148","st\u0139p","v\u0155ba","\u0148orimberk","\u0165ava","\u017ean\u00e9ta","\u010e\u00e1belsk\u00e9","\u00f3dy"],invalid:["1moj","\u4f60\u597d\u4e16\u754c","  \u041f\u0440\u0438\u0432\u0435\u0442 \u043c\u0438\u0440  ","\u0645\u0631\u062d\u0628\u0627 \u0627\u0644\u0639\u0627 "]})}),o(0,()=>{d({validator:"isAlpha",args:["da-DK"],valid:["a\u00f8\u00e5","\u00c6re","\u00d8re","\u00c5re"],invalid:["\u00e4bc123","\u00c4BC11",""]})}),o(0,()=>{d({validator:"isAlpha",args:["nl-NL"],valid:["K\u00e1n","\u00e9\u00e9n","v\u00f3\u00f3r","n\u00fa","h\u00e9\u00e9l"],invalid:["\u00e4ca ","abc\u00df","\u00d8re"]})}),o(0,()=>{d({validator:"isAlpha",args:["de-DE"],valid:["\u00e4bc","\u00c4BC","F\u00f6\u00d6b\u00e4r","Hei\u00df"],invalid:["\u00e4bc1","  f\u00f6\u00f6  ",""]})}),o(0,()=>{d({validator:"isAlpha",args:["hu-HU"],valid:["\u00e1rv\u00edzt\u0171r\u0151t\u00fck\u00f6rf\u00far\u00f3g\u00e9p","\u00c1RV\u00cdZT\u0170R\u0150T\u00dcK\u00d6RF\u00daR\u00d3G\u00c9P"],invalid:["\u00e4bc1","  f\u00e4\u00f6  ","Hei\u00df",""]})}),o(0,()=>{d({validator:"isAlpha",args:["pt-PT"],valid:["pal\u00edndromo","\u00f3rg\u00e3o","qw\u00e9rty\u00fa\u00e3o","\u00e0\u00e4\u00e3c\u00eb\u00fc\u00ef\u00c4\u00cf\u00dc"],invalid:["12abc","Hei\u00df","\u00d8re","\u00e6\u00f8\u00e5",""]})}),o(0,()=>{d({validator:"isAlpha",args:["it-IT"],valid:["\u00e0\u00e9\u00e8\u00ec\u00ee\u00f3\u00f2\u00f9","correnti","DEFINIZIONE","compilazione","metr\u00f3","p\u00e8sca","P\u00c9SCA","gen\u00ee"],invalid:["\u00e4bc123","\u00c4BC11","\u00e6\u00f8\u00e5",""]})}),o(0,()=>{d({validator:"isAlpha",args:["ja-JP"],valid:["\u3042\u3044\u3046\u3048\u304a","\u304c\u304e\u3050\u3052\u3054","\u3041\u3043\u3045\u3047\u3049","\u30a2\u30a4\u30a6\u30a8\u30aa","\u30a1\u30a3\u30a5\u30a7","\uff71\uff72\uff73\uff74\uff75","\u543e\u8f29\u306f\u732b\u3067\u3042\u308b","\u81e5\u85aa\u5617\u80c6","\u65b0\u4e16\u7d00\u30a8\u30f4\u30a1\u30f3\u30b2\u30ea\u30aa\u30f3","\u5929\u56fd\u3068\u5730\u7344","\u4e03\u4eba\u306e\u4f8d","\u30b7\u30f3\u30fb\u30a6\u30eb\u30c8\u30e9\u30de\u30f3"],invalid:["\u3042\u3044\u3046123","abc\u3042\u3044\u3046","\uff11\uff19\uff18\uff14"]})}),o(0,()=>{d({validator:"isAlpha",args:["kk-KZ"],valid:["\u0421\u04d9\u043b\u0435\u043c","\u049b\u0430\u043d\u0430\u0493\u0430\u0442\u0442\u0430\u043d\u0434\u044b\u0440\u044b\u043b\u043c\u0430\u0493\u0430\u043d\u0434\u044b\u049b\u0442\u0430\u0440\u044b\u04a3\u044b\u0437\u0434\u0430\u043d","\u041a\u0435\u0448\u0456\u0440\u0456\u04a3\u0456\u0437","\u04e8\u043a\u0456\u043d\u0456\u0448\u043a\u0435","\u049a\u0430\u0439\u0442\u0430\u043b\u0430\u04a3\u044b\u0437\u0448\u044b","\u0430\u0493\u044b\u043b\u0448\u044b\u043d\u0448\u0430","\u0442\u04af\u0441\u0456\u043d\u0431\u0435\u0434\u0456\u043c"],invalid:["\u041a\u0435\u0448\u0456\u0440\u0456\u04a3\u0456\u04371","  \u041a\u0435\u0442 \u0431\u0430\u0440  ","\u0645\u0631\u062d\u0628\u0627 \u0627\u0644\u0639\u0627"]})}),o(0,()=>{d({validator:"isAlpha",args:["vi-VN"],valid:["thi\u1ebfn","nghi\u00eang","xin","ch\u00e0o","th\u1ebf","gi\u1edbi"],invalid:["th\u1ea7y3","Ba g\u00e0",""]})}),o(0,()=>{d({validator:"isAlpha",args:["ar"],valid:["\u0623\u0628\u062a","\u0627\u064e\u0628\u0650\u062a\u064e\u062b\u0651\u062c\u064b"],invalid:["\u0661\u0662\u0663\u0623\u0628\u062a","\u0661\u0662\u0663","abc1","  foo  ","","\u00c4BC","F\u00dc\u00fcbar","J\u00f6n","Hei\u00df"]})}),o(0,()=>{d({validator:"isAlpha",args:["fa-IR"],valid:["\u067e\u062f\u0631","\u0645\u0627\u062f\u0631","\u0628\u0631\u0627\u062f\u0631","\u062e\u0648\u0627\u0647\u0631"],invalid:["\u0641\u0627\u0631\u0633\u06cc\u06f1\u06f2\u06f3","\u06f1\u06f6\u06f4","abc1","  foo  ","","\u00c4BC","F\u00dc\u00fcbar","J\u00f6n","Hei\u00df"]})}),o(0,()=>{d({validator:"isAlpha",args:["fi-FI"],valid:["\u00e4iti","\u00d6ljy","\u00c5ke","test\u00d6"],invalid:["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ","\u00e4\u00f6\u00e5123",""]})}),o(0,()=>{d({validator:"isAlpha",args:["ku-IQ"],valid:["\u0626\u0624\u06a4\u06af\u06ce","\u06a9\u0648\u0631\u062f\u0633\u062a\u0627\u0646"],invalid:["\u0626\u0624\u06a4\u06af\u06ce\u0661\u0662\u0663","\u0661\u0662\u0663","abc1","  foo  ","","\u00c4BC","F\u00dc\u00fcbar","J\u00f6n","Hei\u00df"]})}),o(0,()=>{d({validator:"isAlpha",args:["nb-NO"],valid:["a\u00f8\u00e5","\u00c6re","\u00d8re","\u00c5re"],invalid:["\u00e4bc123","\u00c4BC11",""]})}),o(0,()=>{d({validator:"isAlpha",args:["pl-PL"],valid:["kresk\u0105","zamkni\u0119te","zwyk\u0142e","kropk\u0105","przyj\u0119\u0142y","\u015bwi\u0119ty","Pozw\u00f3l"],invalid:["12\u0159i\u010f ","bl\u00e9!!","f\u00f6\u00f6!2!"]})}),o(0,()=>{d({validator:"isAlpha",args:["sr-RS"],valid:["\u0428\u045b\u0436\u0402\u0459\u0415","\u0427\u041f\u0421\u0422\u040b\u040f"],invalid:["\u0159i\u010f ","bl\u00e933!!","f\u00f6\u00f6!!"]})}),o(0,()=>{d({validator:"isAlpha",args:["sr-RS@latin"],valid:["\u0160Aab\u010d\u0161\u0111\u0107\u017e","\u0160ATRO\u0106\u010d\u0111\u0161"],invalid:["12\u0159i\u010f ","bl\u00e9!!","f\u00f6\u00f6!2!"]})}),o(0,()=>{d({validator:"isAlpha",args:["es-ES"],valid:["\u00e1bc\u00f3","\u00c1BC\u00d3","dorm\u00eds","volv\u00e9s","espa\u00f1ol"],invalid:["\u00e4ca ","abc\u00df","f\u00f6\u00f6!!"]})}),o(0,()=>{d({validator:"isAlpha",args:["sv-SE"],valid:["religi\u00f6s","stj\u00e4la","v\u00e4stg\u00f6te","\u00c5re"],invalid:["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ","religi\u00f6s23",""]})}),o(0,()=>{d({validator:"isAlpha",args:["ar-SY"],valid:["\u0623\u0628\u062a","\u0627\u064e\u0628\u0650\u062a\u064e\u062b\u0651\u062c\u064b"],invalid:["\u0661\u0662\u0663\u0623\u0628\u062a","\u0661\u0662\u0663","abc1","  foo  ","","\u00c4BC","F\u00dc\u00fcbar","J\u00f6n","Hei\u00df"]})}),o(0,()=>{d({validator:"isAlpha",args:["tr-TR"],valid:["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ"],invalid:["0A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ1","  A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ  ","abc1","  foo  ","","\u00c4BC","Hei\u00df"]})}),o(0,()=>{d({validator:"isAlpha",args:["uk-UA"],valid:["\u0410\u0411\u0412\u0413\u0490\u0414\u0415\u0404\u0416\u0417\u0418I\u0407\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0428\u0429\u042c\u042e\u042f"],invalid:["0A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ1","  A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ  ","abc1","  foo  ","","\u00c4BC","Hei\u00df","\u042b\u044b\u042a\u044a\u042d\u044d"]})}),o(0,()=>{d({validator:"isAlpha",args:["el-GR"],valid:["\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9","\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9","\u03ac\u03ad\u03ae\u03af\u03b0\u03ca\u03cb\u03cc\u03cd\u03ce","\u0386\u0388\u0389\u038a\u03aa\u03ab\u038e\u038f"],invalid:["0A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ1","  A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ  ","\u00c4BC","Hei\u00df","\u042b\u044b\u042a\u044a\u042d\u044d","120","j\u03b1ck\u03b3"]})}),o(0,()=>{d({validator:"isAlpha",args:["he"],valid:["\u05d1\u05d3\u05d9\u05e7\u05d4","\u05e9\u05dc\u05d5\u05dd"],invalid:["\u05d1\u05d3\u05d9\u05e7\u05d4123","  foo  ","abc1",""]})}),o(0,()=>{d({validator:"isAlpha",args:["hi-IN"],valid:["\u0905\u0924\u0905\u092a\u0928\u093e\u0905\u092a\u0928\u0940\u0905\u092a\u0928\u0947\u0905\u092d\u0940\u0905\u0902\u0926\u0930\u0906\u0926\u093f\u0906\u092a\u0907\u0924\u094d\u092f\u093e\u0926\u093f\u0907\u0928\u0907\u0928\u0915\u093e\u0907\u0928\u094d\u0939\u0940\u0902\u0907\u0928\u094d\u0939\u0947\u0902\u0907\u0928\u094d\u0939\u094b\u0902\u0907\u0938\u0907\u0938\u0915\u093e\u0907\u0938\u0915\u0940\u0907\u0938\u0915\u0947\u0907\u0938\u092e\u0947\u0902\u0907\u0938\u0940\u0907\u0938\u0947\u0909\u0928\u0909\u0928\u0915\u093e\u0909\u0928\u0915\u0940\u0909\u0928\u0915\u0947\u0909\u0928\u0915\u094b\u0909\u0928\u094d\u0939\u0940\u0902\u0909\u0928\u094d\u0939\u0947\u0902\u0909\u0928\u094d\u0939\u094b\u0902\u0909\u0938\u0909\u0938\u0915\u0947\u0909\u0938\u0940\u0909\u0938\u0947\u090f\u0915\u090f\u0935\u0902\u090f\u0938\u0910\u0938\u0947\u0914\u0930\u0915\u0908\u0915\u0930\u0915\u0930\u0924\u093e\u0915\u0930\u0924\u0947\u0915\u0930\u0928\u093e\u0915\u0930\u0928\u0947\u0915\u0930\u0947\u0902\u0915\u0939\u0924\u0947\u0915\u0939\u093e\u0915\u093e\u0915\u093e\u095e\u0940\u0915\u093f\u0915\u093f\u0924\u0928\u093e\u0915\u093f\u0928\u094d\u0939\u0947\u0902\u0915\u093f\u0928\u094d\u0939\u094b\u0902\u0915\u093f\u092f\u093e\u0915\u093f\u0930\u0915\u093f\u0938\u0915\u093f\u0938\u0940\u0915\u093f\u0938\u0947\u0915\u0940\u0915\u0941\u091b\u0915\u0941\u0932\u0915\u0947\u0915\u094b\u0915\u094b\u0908\u0915\u094c\u0928\u0915\u094c\u0928\u0938\u093e\u0917\u092f\u093e\u0918\u0930\u091c\u092c\u091c\u0939\u093e\u0901\u091c\u093e\u091c\u093f\u0924\u0928\u093e\u091c\u093f\u0928\u091c\u093f\u0928\u094d\u0939\u0947\u0902\u091c\u093f\u0928\u094d\u0939\u094b\u0902\u091c\u093f\u0938\u091c\u093f\u0938\u0947\u091c\u0940\u0927\u0930\u091c\u0948\u0938\u093e\u091c\u0948\u0938\u0947\u091c\u094b\u0924\u0915\u0924\u092c\u0924\u0930\u0939\u0924\u093f\u0928\u0924\u093f\u0928\u094d\u0939\u0947\u0902\u0924\u093f\u0928\u094d\u0939\u094b\u0902\u0924\u093f\u0938\u0924\u093f\u0938\u0947\u0924\u094b\u0925\u093e\u0925\u0940\u0925\u0947\u0926\u092c\u093e\u0930\u093e\u0926\u093f\u092f\u093e\u0926\u0941\u0938\u0930\u093e\u0926\u0942\u0938\u0930\u0947\u0926\u094b\u0926\u094d\u0935\u093e\u0930\u093e\u0928\u0928\u0915\u0947\u0928\u0939\u0940\u0902\u0928\u093e\u0928\u093f\u0939\u093e\u092f\u0924\u0928\u0940\u091a\u0947\u0928\u0947\u092a\u0930\u092a\u0939\u0932\u0947\u092a\u0942\u0930\u093e\u092a\u0947\u092b\u093f\u0930\u092c\u0928\u0940\u092c\u0939\u0940\u092c\u0939\u0941\u0924\u092c\u093e\u0926\u092c\u093e\u0932\u093e\u092c\u093f\u0932\u0915\u0941\u0932\u092d\u0940\u092d\u0940\u0924\u0930\u092e\u0917\u0930\u092e\u093e\u0928\u094b\u092e\u0947\u092e\u0947\u0902\u092f\u0926\u093f\u092f\u0939\u092f\u0939\u093e\u0901\u092f\u0939\u0940\u092f\u093e\u092f\u093f\u0939\u092f\u0947\u0930\u0916\u0947\u0902\u0930\u0939\u093e\u0930\u0939\u0947\u0931\u094d\u0935\u093e\u0938\u093e\u0932\u093f\u090f\u0932\u093f\u092f\u0947\u0932\u0947\u0915\u093f\u0928\u0935\u0935\u095a\u0948\u0930\u0939\u0935\u0930\u094d\u0917\u0935\u0939\u0935\u0939\u093e\u0901\u0935\u0939\u0940\u0902\u0935\u093e\u0932\u0947\u0935\u0941\u0939\u0935\u0947\u0935\u094b\u0938\u0915\u0924\u093e\u0938\u0915\u0924\u0947\u0938\u092c\u0938\u0947\u0938\u092d\u0940\u0938\u093e\u0925\u0938\u093e\u092c\u0941\u0924\u0938\u093e\u092d\u0938\u093e\u0930\u093e\u0938\u0947\u0938\u094b\u0938\u0902\u0917\u0939\u0940\u0939\u0941\u0906\u0939\u0941\u0908\u0939\u0941\u090f\u0939\u0948\u0939\u0948\u0902\u0939\u094b\u0939\u094b\u0924\u093e\u0939\u094b\u0924\u0940\u0939\u094b\u0924\u0947\u0939\u094b\u0928\u093e\u0939\u094b\u0928\u0947","\u0907\u0928\u094d\u0939\u0947\u0902"],invalid:["\u0905\u0924\u0966\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f","\u0905\u0924 12"," \u0905\u0924 ","abc1","abc",""]})}),o(0,()=>{d({validator:"isAlpha",args:["fa-IR"],valid:["\u062a\u0633\u062a","\u0639\u0632\u06cc\u0632\u0645","\u062d"],invalid:["\u062a\u0633\u062a 1","  \u0639\u0632\u06cc\u0632\u0645  ",""]})}),o(0,()=>{d({validator:"isAlpha",args:["th-TH"],valid:["\u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35","\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a \u0e40\u0e17\u0e2a\u0e40\u0e04\u0e2a"],invalid:["\u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35Hi","123 \u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a","\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a-\u0e51\u0e52\u0e53"]})}),o(0,()=>{d({validator:"isAlpha",args:["ko-KR"],valid:["\u3131","\u3151","\u3131\u3134\u3137\u314f\u3155","\uc138\uc885\ub300\uc655","\ub098\ub78f\ub9d0\uc2f8\ubbf8\ub4d5\uadc1\uc5d0\ub2ec\uc544\ubb38\uc790\uc640\ub85c\uc11c\ub974\uc0ac\ub9db\ub514\uc544\ub2c8\ud560\uc384"],invalid:["abc","123","\ud765\uc120\ub300\uc6d0\uad70 \ubb38\ud638\uac1c\ubc29","1592\ub144\uc784\uc9c4\uc65c\ub780","\ub300\ud55c\ubbfc\uad6d!"]})}),o(0,()=>{d({validator:"isAlpha",args:["si-LK"],valid:["\u0da0\u0dad\u0dd4\u0dbb","\u0d9a\u0da0\u0da7\u0daf\u0db6","\u0d8e\u0d8f\u0daf\u0dcf\u0ddb\u0db4\u0dc3\u0dd4\u0d9c\u0ddc"],invalid:["\u0b86\u0b90\u0905\u0924\u0d9a","\u0d9a\u0da0\u0da7 12"," \u0d8e ","abc1","abc",""]})}),o(0,()=>{d({validator:"isAlpha",args:["eo"],valid:["saluton","e\u0125o\u015dan\u011do\u0109iu\u0135a\u016dde","E\u0124O\u015cAN\u011cO\u0108IU\u0134A\u016cDE","Esperanto","La\u016dLudovikoZamenhofBongustasFre\u015da\u0108e\u0125aMan\u011da\u0135oKunSpicoj"],invalid:["qwxyz","1887","qwxyz 1887"]})}),o(0,()=>{d({validator:"isAlpha",args:["is-NOT"],error:["abc","ABC"]})}),o(0,()=>{d({validator:"isAlphanumeric",valid:["abc123","ABC11"],invalid:["abc ","foo!!","\u00c4BC","F\u00dc\u00fcbar","J\u00f6n"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["en-US",{ignore:"@_- "}],valid:["Hello@123","this is a valid alphaNumeric string","En-US @ alpha_numeric"],invalid:["In*Valid","hello$123","{invalid}"]}),d({validator:"isAlphanumeric",args:["en-US",{ignore:/[\s/-]/g}],valid:["en-US","this is a valid alphaNumeric string"],invalid:["INVALID$ AlphaNum Str","hello@123","abc*123"]}),d({validator:"isAlphanumeric",args:["en-US",{ignore:1234}],error:["alpha"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["en-GB"],valid:["abc123","ABC11"],invalid:["abc ","foo!!","\u00c4BC","F\u00dc\u00fcbar","J\u00f6n"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["az-AZ"],valid:["Az\u0259rbaycan","Bak\u0131","abc1","abc\u00e72","3k\u0259r\u02594k\u0259r\u0259"],invalid:["  foo1  ","","ab(cd)","simvol@","w\u0259kil"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["bg-BG"],valid:["\u0430\u0431\u04321","4\u0410\u04115\u04126","\u0436\u0430\u0431\u0430","\u044f\u0413\u043e\u0414\u04302","\u0439\u042e\u044f","123"],invalid:[" ","789  ","hello000"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["bn-BD"],valid:["\u09a6\u09cd\u0997\u099c\u09cd\u099e\u09b9\u09cd\u09b0\u09a4\u09cd\u09af\u09e7\u09e8\u09e9","\u09a6\u09cd\u0997\u0997\u09ab\u09ee\u09ef\u09e6","\u099a\u09ac\u09e9\u09ec\u09eb\u09ad\u09ac\u099a","\u09e7\u09e8\u09e9\u09ea","\u09e9\u09ea\u09e8\u09e9\u09ea\u09a6\u09ab\u099c\u09cd\u099e\u09a6\u09ab"],invalid:[" ","\u09e7\u09e8\u09e9  ","hel\u09e9\u09e80"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["cs-CZ"],valid:["\u0159i\u0165123","K\u016e\u014711"],invalid:["\u0159i\u010f ","bl\u00e9!!"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["sk-SK"],valid:["1m\u00f4j","2\u013e\u00fab\u00edm","3m\u00e4k\u010de\u0148","4st\u0139p","5v\u0155ba","6\u0148orimberk","7\u0165ava","8\u017ean\u00e9ta","9\u010e\u00e1belsk\u00e9","10\u00f3dy"],invalid:["1moj!","\u4f60\u597d\u4e16\u754c","  \u041f\u0440\u0438\u0432\u0435\u0442 \u043c\u0438\u0440  "]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["da-DK"],valid:["\u00c6\u00d8\u00c5123","\u00c6re321","321\u00d8re","123\u00c5re"],invalid:["\u00e4bc123","\u00c4BC11",""]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["nl-NL"],valid:["K\u00e1n123","\u00e9\u00e9n354","v4\u00f3\u00f3r","n\u00fa234","h\u00e954\u00e9l"],invalid:["1\u00e4ca ","ab3c\u00df","\u00d8re"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["fi-FI"],valid:["\u00e4iti124","\u00d6LJY1234","123\u00c5ke","451\u00e5\u00e523"],invalid:["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ","foo!!",""]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["de-DE"],valid:["\u00e4bc123","\u00c4BC11"],invalid:["\u00e4ca ","f\u00f6\u00f6!!"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["hu-HU"],valid:["0\u00e1rv\u00edzt\u0171r\u0151t\u00fck\u00f6rf\u00far\u00f3g\u00e9p123","0\u00c1RV\u00cdZT\u0170R\u0150T\u00dcK\u00d6RF\u00daR\u00d3G\u00c9P123"],invalid:["1id\u0151\u00far!","\u00e4bc1","  f\u00e4\u00f6  ","Hei\u00df!",""]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["pt-PT"],valid:["pal\u00edndromo","2\u00f3rg\u00e3o","qw\u00e9rty\u00fa\u00e3o9","\u00e0\u00e4\u00e3c\u00eb4\u00fc\u00ef\u00c4\u00cf\u00dc"],invalid:["!abc","Hei\u00df","\u00d8re","\u00e6\u00f8\u00e5",""]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["it-IT"],valid:["123\u00e0\u00e9\u00e8\u00ec\u00ee\u00f3\u00f2\u00f9","123correnti","DEFINIZIONE321","compil123azione","met23r\u00f3","p\u00e8s56ca","P\u00c9S45CA","gen45\u00ee"],invalid:["\u00e4bc123","\u00c4BC11","\u00e6\u00f8\u00e5",""]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["es-ES"],valid:["\u00e1bc\u00f3123","\u00c1BC\u00d311"],invalid:["\u00e4ca ","abc\u00df","f\u00f6\u00f6!!"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["vi-VN"],valid:["Th\u1ea7y3","3G\u00e0"],invalid:["toang!","C\u1eadu V\u00e0ng"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["ar"],valid:["\u0623\u0628\u062a123","\u0623\u0628\u062a\u064e\u064f\u0650\u0661\u0662\u0663"],invalid:["\u00e4ca ","abc\u00df","f\u00f6\u00f6!!"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["hi-IN"],valid:["\u0905\u0924\u0905\u092a\u0928\u093e\u0905\u092a\u0928\u0940\u0905\u092a\u0928\u0947\u0905\u092d\u0940\u0905\u0902\u0926\u0930\u0906\u0926\u093f\u0906\u092a\u0907\u0924\u094d\u092f\u093e\u0926\u093f\u0907\u0928\u0907\u0928\u0915\u093e\u0907\u0928\u094d\u0939\u0940\u0902\u0907\u0928\u094d\u0939\u0947\u0902\u0907\u0928\u094d\u0939\u094b\u0902\u0907\u0938\u0907\u0938\u0915\u093e\u0907\u0938\u0915\u0940\u0907\u0938\u0915\u0947\u0907\u0938\u092e\u0947\u0902\u0907\u0938\u0940\u0907\u0938\u0947\u0909\u0928\u0909\u0928\u0915\u093e\u0909\u0928\u0915\u0940\u0909\u0928\u0915\u0947\u0909\u0928\u0915\u094b\u0909\u0928\u094d\u0939\u0940\u0902\u0909\u0928\u094d\u0939\u0947\u0902\u0909\u0928\u094d\u0939\u094b\u0902\u0909\u0938\u0909\u0938\u0915\u0947\u0909\u0938\u0940\u0909\u0938\u0947\u090f\u0915\u090f\u0935\u0902\u090f\u0938\u0910\u0938\u0947\u0914\u0930\u0915\u0908\u0915\u0930\u0915\u0930\u0924\u093e\u0915\u0930\u0924\u0947\u0915\u0930\u0928\u093e\u0915\u0930\u0928\u0947\u0915\u0930\u0947\u0902\u0915\u0939\u0924\u0947\u0915\u0939\u093e\u0915\u093e\u0915\u093e\u095e\u0940\u0915\u093f\u0915\u093f\u0924\u0928\u093e\u0915\u093f\u0928\u094d\u0939\u0947\u0902\u0915\u093f\u0928\u094d\u0939\u094b\u0902\u0915\u093f\u092f\u093e\u0915\u093f\u0930\u0915\u093f\u0938\u0915\u093f\u0938\u0940\u0915\u093f\u0938\u0947\u0915\u0940\u0915\u0941\u091b\u0915\u0941\u0932\u0915\u0947\u0915\u094b\u0915\u094b\u0908\u0915\u094c\u0928\u0915\u094c\u0928\u0938\u093e\u0917\u092f\u093e\u0918\u0930\u091c\u092c\u091c\u0939\u093e\u0901\u091c\u093e\u091c\u093f\u0924\u0928\u093e\u091c\u093f\u0928\u091c\u093f\u0928\u094d\u0939\u0947\u0902\u091c\u093f\u0928\u094d\u0939\u094b\u0902\u091c\u093f\u0938\u091c\u093f\u0938\u0947\u091c\u0940\u0927\u0930\u091c\u0948\u0938\u093e\u091c\u0948\u0938\u0947\u091c\u094b\u0924\u0915\u0924\u092c\u0924\u0930\u0939\u0924\u093f\u0928\u0924\u093f\u0928\u094d\u0939\u0947\u0902\u0924\u093f\u0928\u094d\u0939\u094b\u0902\u0924\u093f\u0938\u0924\u093f\u0938\u0947\u0924\u094b\u0925\u093e\u0925\u0940\u0925\u0947\u0926\u092c\u093e\u0930\u093e\u0926\u093f\u092f\u093e\u0926\u0941\u0938\u0930\u093e\u0926\u0942\u0938\u0930\u0947\u0926\u094b\u0926\u094d\u0935\u093e\u0930\u093e\u0928\u0928\u0915\u0947\u0928\u0939\u0940\u0902\u0928\u093e\u0928\u093f\u0939\u093e\u092f\u0924\u0928\u0940\u091a\u0947\u0928\u0947\u092a\u0930\u092a\u0939\u0932\u0947\u092a\u0942\u0930\u093e\u092a\u0947\u092b\u093f\u0930\u092c\u0928\u0940\u092c\u0939\u0940\u092c\u0939\u0941\u0924\u092c\u093e\u0926\u092c\u093e\u0932\u093e\u092c\u093f\u0932\u0915\u0941\u0932\u092d\u0940\u092d\u0940\u0924\u0930\u092e\u0917\u0930\u092e\u093e\u0928\u094b\u092e\u0947\u092e\u0947\u0902\u092f\u0926\u093f\u092f\u0939\u092f\u0939\u093e\u0901\u092f\u0939\u0940\u092f\u093e\u092f\u093f\u0939\u092f\u0947\u0930\u0916\u0947\u0902\u0930\u0939\u093e\u0930\u0939\u0947\u0931\u094d\u0935\u093e\u0938\u093e\u0932\u093f\u090f\u0932\u093f\u092f\u0947\u0932\u0947\u0915\u093f\u0928\u0935\u0935\u095a\u0948\u0930\u0939\u0935\u0930\u094d\u0917\u0935\u0939\u0935\u0939\u093e\u0901\u0935\u0939\u0940\u0902\u0935\u093e\u0932\u0947\u0935\u0941\u0939\u0935\u0947\u0935\u094b\u0938\u0915\u0924\u093e\u0938\u0915\u0924\u0947\u0938\u092c\u0938\u0947\u0938\u092d\u0940\u0938\u093e\u0925\u0938\u093e\u092c\u0941\u0924\u0938\u093e\u092d\u0938\u093e\u0930\u093e\u0938\u0947\u0938\u094b\u0938\u0902\u0917\u0939\u0940\u0939\u0941\u0906\u0939\u0941\u0908\u0939\u0941\u090f\u0939\u0948\u0939\u0948\u0902\u0939\u094b\u0939\u094b\u0924\u093e\u0939\u094b\u0924\u0940\u0939\u094b\u0924\u0947\u0939\u094b\u0928\u093e\u0939\u094b\u0928\u0947\u0966\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f","\u0907\u0928\u094d\u0939\u0947\u0902\u096a\u096b\u096c\u096d\u096e\u096f"],invalid:["\u0905\u0924 \u0966\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f"," \u0969\u096a\u096b\u096c\u096d\u096e\u096f","12 "," \u0905\u0924 ","abc1","abc",""]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["fa-IR"],valid:["\u067e\u0627\u0631\u0633\u06cc\u06f1\u06f2\u06f3","\u06f1\u06f4\u06f5\u06f6","\u0645\u0698\u06af\u0627\u06469"],invalid:["\u00e4ca ","abc\u00df\u0629","f\u00f6\u00f6!!","\u0664\u0665\u0666"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["ja-JP"],valid:["\u3042\u3044\u3046\u3048\u304a123","123\u304c\u304e\u3050\u3052\u3054","\u3041\u3043\u3045\u3047\u3049","\u30a2\u30a4\u30a6\u30a8\u30aa","\u30a1\u30a3\u30a5\u30a7","\uff71\uff72\uff73\uff74\uff75","\uff12\uff10\u4e16\u7d00\u5c11\u5e74","\u83ef\u6c0f\uff14\uff15\uff11\u5ea6"],invalid:[" \u3042\u3044\u3046123 ","abc\u3042\u3044\u3046","\u751f\u304d\u308d!!"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["kk-KZ"],valid:["\u0421\u04d9\u043b\u0435\u043c777","123\u0411\u04d9\u0441\u0435","\u0441\u043e\u043b\u0430\u0439","\u0416\u0438\u0435\u043d\u0441\u0443","90\u0442\u043e\u049b\u0441\u0430\u043d","\u0436\u0430\u043b\u0493\u044b\u0437","570\u0431\u0435\u0440\u0434\u0456\u043c"],invalid:[" \u043a\u0435\u0448\u0456\u0440\u0456\u04a3\u0456\u0437 ","abc\u0430\u0493\u044b\u043b\u0448\u044b\u043d\u0448\u0430","\u043c\u04af\u043c\u043a\u0456\u043d!!"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["ku-IQ"],valid:["\u0626\u0624\u06a4\u06af\u06ce\u0661\u0662\u0663"],invalid:["\u00e4ca ","abc\u00df","f\u00f6\u00f6!!"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["ar-SY"],valid:["\u0623\u0628\u062a123","\u0623\u0628\u062a\u064e\u064f\u0650\u0661\u0662\u0663"],invalid:["abc ","foo!!","\u00c4BC","F\u00dc\u00fcbar","J\u00f6n"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["nb-NO"],valid:["\u00c6\u00d8\u00c5123","\u00c6re321","321\u00d8re","123\u00c5re"],invalid:["\u00e4bc123","\u00c4BC11",""]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["pl-PL"],valid:["kre123sk\u0105","zam21kni\u0119te","zw23yk\u0142e","123","prz23yj\u0119\u0142y","\u015bwi23\u0119ty","Poz1322w\u00f3l"],invalid:["12\u0159i\u010f ","bl\u00e9!!","f\u00f6\u00f6!2!"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["sr-RS"],valid:["\u0428\u045b\u0436\u0402\u0459\u0415123","\u0427\u041f\u0421\u0422132\u040b\u040f"],invalid:["\u0159i\u010f ","bl\u00e9!!","f\u00f6\u00f6!!"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["sr-RS@latin"],valid:["\u0160Aab\u010d\u0161\u0111\u0107\u017e123","\u0160ATRO11\u0106\u010d\u0111\u0161"],invalid:["\u0159i\u010f ","bl\u00e9!!","f\u00f6\u00f6!!"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["sv-SE"],valid:["religi\u00f6s13","st23j\u00e4la","v\u00e4stg\u00f6te123","123\u00c5re"],invalid:["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ","foo!!",""]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["tr-TR"],valid:["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ123"],invalid:["A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ ","foo!!","\u00c4BC"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["uk-UA"],valid:["\u0410\u0411\u0412\u0413\u0490\u0414\u0415\u0404\u0416\u0417\u0418I\u0407\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0428\u0429\u042c\u042e\u042f123"],invalid:["\u00e9eoc ","foo!!","\u00c4BC","\u042b\u044b\u042a\u044a\u042d\u044d"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["el-GR"],valid:["\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9","\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9","20\u03b8","1234568960"],invalid:["0A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ1","  A\u0130\u0131\u00d6\u00f6\u00c7\u00e7\u015e\u015f\u011e\u011f\u00dc\u00fcZ  ","\u00c4BC","Hei\u00df","\u042b\u044b\u042a\u044a\u042d\u044d","j\u03b1ck\u03b3"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["he"],valid:["\u05d0\u05d1\u05d2123","\u05e9\u05dc\u05d5\u05dd11"],invalid:["\u05d0\u05d1\u05d2 ","\u05dc\u05d0!!","abc","  foo  "]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["th-TH"],valid:["\u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35 \u0e51\u0e52\u0e53","\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a\u0e17\u0e31\u0e49\u0e07 \u0e52 \u0e04\u0e19"],invalid:["1.\u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35","\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a\u0e17\u0e31\u0e49\u0e07 2 \u0e04\u0e19"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["ko-KR"],valid:["2002","\ud6c8\ubbfc\uc815\uc74c","1446\ub144\ud6c8\ubbfc\uc815\uc74c\ubc18\ud3ec"],invalid:["2022!","2019 \ucf54\ub85c\ub098\uc2dc\uc791","1.\ub85c\ub818\uc785\uc228"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["si-LK"],valid:["\u0da0\u0dad\u0dd4\u0dbb","\u0d9a\u0da0\u0da712","\u0d8e\u0d8f\u0daf\u0dcf\u0ddb\u0db4\u0dc3\u0dd4\u0d9c\u0ddc2","1234"],invalid:["\u0b86\u0b90\u0905\u0924\u0d9a","\u0d9a\u0da0\u0da7 12"," \u0d8e ","a1234","abc",""]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["eo"],valid:["saluton","e\u0125o\u015dan\u011do\u0109iu\u0135a\u016dde0123456789","E\u0124O\u015cAN\u011cO\u0108IU\u0134A\u016cDE0123456789","Esperanto1887","La\u016dLudovikoZamenhofBongustasFre\u015da\u0108e\u0125aMan\u011da\u0135oKunSpicoj"],invalid:["qwxyz","qwxyz 1887"]})}),o(0,()=>{d({validator:"isAlphanumeric",args:["is-NOT"],error:["1234568960","abc123"]})}),o(0,()=>{d({validator:"isNumeric",valid:["123","00123","-00123","0","-0","+123","123.123","+000000"],invalid:[" ","","."]})}),o(0,()=>{d({validator:"isNumeric",args:[{no_symbols:!0}],valid:["123","00123","0"],invalid:["-0","+000000","","+123","123.123","-00123"," ","."]})}),o(0,()=>{d({validator:"isNumeric",args:[{locale:"fr-FR"}],valid:["123","00123","-00123","0","-0","+123","123,123","+000000"],invalid:[" ","",","]})}),o(0,()=>{d({validator:"isNumeric",args:[{locale:"fr-CA"}],valid:["123","00123","-00123","0","-0","+123","123,123","+000000"],invalid:[" ","","."]})}),o(0,()=>{d({validator:"isPort",valid:["0","22","80","443","3000","8080","65535"],invalid:["","-1","65536","0080"]})}),o(0,()=>{d({validator:"isPassportNumber",args:["AM"],valid:["AF0549358"],invalid:["A1054935"]}),d({validator:"isPassportNumber",args:["ID"],valid:["C1253473","B5948378","A4859472"],invalid:["D39481728","A-3847362","324132132"]}),d({validator:"isPassportNumber",args:["AR"],valid:["AAC811035"],invalid:["A11811035"]}),d({validator:"isPassportNumber",args:["AT"],valid:["P 1630837","P 4366918"],invalid:["0 1630837"]}),d({validator:"isPassportNumber",args:["AU"],valid:["N0995852","L4819236"],invalid:["1A012345"]}),d({validator:"isPassportNumber",args:["AZ"],valid:["A16175905","A16175958"],invalid:["AZ1234584"]}),d({validator:"isPassportNumber",args:["BE"],valid:["EM000000","LA080402"],invalid:["00123456"]}),d({validator:"isPassportNumber",args:["BG"],valid:["346395366","039903356"],invalid:["ABC123456"]}),d({validator:"isPassportNumber",args:["BR"],valid:["FZ973689","GH231233"],invalid:["ABX29332"]}),d({validator:"isPassportNumber",args:["BY"],valid:["MP3899901"],invalid:["345333454","FG53334542"]}),d({validator:"isPassportNumber",args:["CA"],valid:["GA302922","ZE000509","A123456AB","Z556378HG"],invalid:["AB0123456","AZ556378H","556378HCX","556378432","5563784","#B12345FD","A43F12354"]}),d({validator:"isPassportNumber",args:["CH"],valid:["S1100409","S5200073","X4028791"],invalid:["AB123456"]}),d({validator:"isPassportNumber",args:["CN"],valid:["G25352389","E00160027","EA1234567"],invalid:["K0123456","E-1234567","G.1234567","GA1234567","EI1234567","GO1234567"]}),d({validator:"isPassportNumber",args:["CY"],valid:["K00000413"],invalid:["K10100"]}),d({validator:"isPassportNumber",args:["CZ"],valid:["99003853","42747260"],invalid:["012345678","AB123456"]}),d({validator:"isPassportNumber",args:["DE"],valid:["C01X00T47","C26VMVVC3"],invalid:["AS0123456","A012345678"]}),d({validator:"isPassportNumber",args:["DK"],valid:["900010172"],invalid:["01234567","K01234567"]}),d({validator:"isPassportNumber",args:["DZ"],valid:["855609385","154472412","197025599"],invalid:["AS0123456","A012345678","0123456789","12345678","98KK54321"]}),d({validator:"isPassportNumber",args:["EE"],valid:["K4218285","K3295867","KB0167630","VD0023777"],invalid:["K01234567","KB00112233"]}),d({validator:"isPassportNumber",args:["ES"],valid:["AF238143","ZAB000254"],invalid:["AF01234567"]}),d({validator:"isPassportNumber",args:["FI"],valid:["XP8271602","XD8500003"],invalid:["A01234567","ABC012345"]}),d({validator:"isPassportNumber",args:["FR"],valid:["10CV28144","60RF19342","05RP34083"],invalid:["012345678","AB0123456","01C234567"]}),d({validator:"isPassportNumber",args:["GB"],valid:["925076473","107182890","104121156"],invalid:["A012345678","K000000000","0123456789"]}),d({validator:"isPassportNumber",args:["GR"],valid:["AE0000005","AK0219304"],invalid:["A01234567","012345678"]}),d({validator:"isPassportNumber",args:["HR"],valid:["007007007","138463188"],invalid:["A01234567","00112233"]}),d({validator:"isPassportNumber",args:["HU"],valid:["ZA084505","BA0006902"],invalid:["A01234567","012345678"]}),d({validator:"isPassportNumber",args:["IE"],valid:["D23145890","X65097105","XN0019390"],invalid:["XND012345","0123456789"]}),d({validator:"isPassportNumber",args:["IN"],valid:["A-1234567","A1234567","X0019390"],invalid:["AB-1234567","0123456789"]}),d({validator:"isPassportNumber",args:["IR"],valid:["J97634522","A01234567","Z11977831"],invalid:["A0123456","A0123456Z","012345678"]}),d({validator:"isPassportNumber",args:["IS"],valid:["A2040611","A1197783"],invalid:["K0000000","01234567"]}),d({validator:"isPassportNumber",args:["IT"],valid:["YA8335453","KK0000000"],invalid:["01234567","KAK001122"]}),d({validator:"isPassportNumber",args:["JM"],valid:["A0123456"],invalid:["s0123456","a01234567"]}),d({validator:"isPassportNumber",args:["JP"],valid:["NH1106002","TE3180251","XS1234567"],invalid:["X12345678","012345678"]}),d({validator:"isPassportNumber",args:["KR"],valid:["M35772699","M70689098"],invalid:["X12345678","012345678"]}),d({validator:"isPassportNumber",args:["KZ"],valid:["A0123456","b0123456"],invalid:["01234567","bb0123456"]}),d({validator:"isPassportNumber",args:["LI"],valid:["a01234","f01234"],invalid:["012345"]}),d({validator:"isPassportNumber",args:["LT"],valid:["20200997","LB311756"],invalid:["LB01234567"]}),d({validator:"isPassportNumber",args:["LU"],valid:["JCU9J4T2","JC4E7L2H"],invalid:["JCU9J4T","JC4E7L2H0"]}),d({validator:"isPassportNumber",args:["LV"],valid:["LV9000339","LV4017173"],invalid:["LV01234567","4017173LV"]}),d({validator:"isPassportNumber",args:["LY"],valid:["P79JF34X","RJ45H4V2"],invalid:["P79JF34","RJ45H4V2C","RJ4-H4V2"]}),d({validator:"isPassportNumber",args:["MT"],valid:["1026564"],invalid:["01234567","MT01234"]}),d({validator:"isPassportNumber",args:["MZ"],valid:["AB0808212","08AB12123"],invalid:["1AB011241","1AB01121","ABAB01121"]}),d({validator:"isPassportNumber",args:["MY"],valid:["A00000000","H12345678","K43143233"],invalid:["A1234567","C01234567"]}),d({validator:"isPassportNumber",args:["MX"],valid:["43986369222","01234567890"],invalid:["ABC34567890","34567890"]}),d({validator:"isPassportNumber",args:["NL"],valid:["XTR110131","XR1001R58"],invalid:["XTR11013R","XR1001R58A"]}),d({validator:"isPassportNumber",args:["PK"],valid:["QZ1791293","XR1001458"],invalid:["XTR11013R","XR1001R58A"]}),d({validator:"isPassportNumber",args:["PH"],valid:["X123456","XY123456","XY1234567","X1234567Y"],invalid:["XY12345","X12345Z","XY12345Z"]}),d({validator:"isPassportNumber",args:["NZ"],valid:["Lf012345","La012345","Ld012345","Lh012345","ea012345","ep012345","n012345"],invalid:["Lp012345","nd012345","ed012345","eh012345","ef012345"]}),d({validator:"isPassportNumber",args:["PL"],valid:["ZS 0000177","AN 3000011"],invalid:["A1 0000177","012345678"]}),d({validator:"isPassportNumber",args:["PT"],valid:["I700044","K453286"],invalid:["0700044","K4532861"]}),d({validator:"isPassportNumber",args:["RO"],valid:["05485968","040005646"],invalid:["R05485968","0511060461"]}),d({validator:"isPassportNumber",args:["RU"],valid:["2 32 636829","012 345321","439863692"],invalid:["A 2R YU46J0","01A 3D5321","SF233D53T","12345678","1234567890"]}),d({validator:"isPassportNumber",args:["SE"],valid:["59000001","56702928"],invalid:["SE012345","012345678"]}),d({validator:"isPassportNumber",args:["SL"],valid:["PB0036440","PB1390281"],invalid:["SL0123456","P01234567"]}),d({validator:"isPassportNumber",args:["SK"],valid:["P0000000"],invalid:["SK012345","012345678"]}),d({validator:"isPassportNumber",args:["TH"],valid:["A123456","B1234567","CD123456","EF1234567"],invalid:["123456","1234567","010485371AA"]}),d({validator:"isPassportNumber",args:["TR"],valid:["U 06764100","U 01048537"],invalid:["06764100U","010485371"]}),d({validator:"isPassportNumber",args:["UA"],valid:["EH345655","EK000001","AP841503"],invalid:["01234567","012345EH","A012345P"]}),d({validator:"isPassportNumber",args:["US"],valid:["790369937","340007237","A90583942","E00007734"],invalid:["US0123456","0123456US","7903699371","90583942","E000077341"]}),d({validator:"isPassportNumber",args:["ZA"],valid:["T12345678","A12345678","M12345678","D12345678"],invalid:["123456789","Z12345678"]})}),o(0,()=>{d({validator:"isDecimal",valid:["123","00123","-00123","0","-0","+123","0.01",".1","1.0","-.25","-0","0.0000000000001"],invalid:["0,01",",1","1,0","-,25","0,0000000000001","0\u066b01","\u066b1","1\u066b0","-\u066b25","0\u066b0000000000001","...."," ","","-","+",".","0.1a","a","\n"]}),d({validator:"isDecimal",args:[{locale:"en-AU"}],valid:["123","00123","-00123","0","-0","+123","0.01",".1","1.0","-.25","-0","0.0000000000001"],invalid:["0,01",",1","1,0","-,25","0,0000000000001","0\u066b01","\u066b1","1\u066b0","-\u066b25","0\u066b0000000000001","...."," ","","-","+",".","0.1a","a","\n"]}),d({validator:"isDecimal",args:[{locale:["bg-BG"]}],valid:["123","00123","-00123","0","-0","+123","0,01",",1","1,0","-,25","-0","0,0000000000001"],invalid:["0.0000000000001","0.01",".1","1.0","-.25","0\u066b01","\u066b1","1\u066b0","-\u066b25","0\u066b0000000000001","...."," ","","-","+",".","0.1a","a","\n"]}),d({validator:"isDecimal",args:[{locale:["cs-CZ"]}],valid:["123","00123","-00123","0","-0","+123","0,01",",1","1,0","-,25","-0","0,0000000000001"],invalid:["0.0000000000001","0.01",".1","1.0","-.25","0\u066b01","\u066b1","1\u066b0","-\u066b25","0\u066b0000000000001","...."," ","","-","+",".","0.1a","a","\n"]}),d({validator:"isDecimal",args:[{locale:["ar-JO"]}],valid:["123","00123","-00123","0","-0","+123","0\u066b01","\u066b1","1\u066b0","-\u066b25","-0","0\u066b0000000000001"],invalid:["0,0000000000001","0,01",",1","1,0","-,25","0.0000000000001","0.01",".1","1.0","-.25","...."," ","","-","+",".","0.1a","a","\n"]}),d({validator:"isDecimal",args:[{locale:["ar-EG"]}],valid:["0.01"],invalid:["0,01"]}),d({validator:"isDecimal",args:[{locale:["en-ZM"]}],valid:["0,01"],invalid:["0.01"]}),d({validator:"isDecimal",args:[{force_decimal:!0}],valid:["0.01",".1","1.0","-.25","0.0000000000001"],invalid:["-0","123","00123","-00123","0","-0","+123","0,0000000000001","0,01",",1","1,0","-,25","...."," ","","-","+",".","0.1a","a","\n"]}),d({validator:"isDecimal",args:[{decimal_digits:"2,3"}],valid:["123","00123","-00123","0","-0","+123","0.01","1.043",".15","-.255","-0"],invalid:["0.0000000000001","0.0",".1","1.0","-.2564","0.0","\u066b1","1\u066b0","-\u066b25","0\u066b0000000000001","...."," ","","-","+",".","0.1a","a","\n"]})}),o(0,()=>{d({validator:"isDecimal",args:[{locale:["is-NOT"]}],error:["123","0.01","0,01"]})}),o(0,()=>{d({validator:"isLowercase",valid:["abc","abc123","this is lowercase.","tr\u7aeas \u7aefber"],invalid:["fooBar","123A"]})}),o(0,()=>{d({validator:"isIMEI",valid:["352099001761481","868932036356090","490154203237518","546918475942169","998227667144730","532729766805999"],invalid:["490154203237517","3568680000414120","3520990017614823"]})}),o(0,()=>{d({validator:"isIMEI",args:[{allow_hyphens:!0}],valid:["35-209900-176148-1","86-893203-635609-0","49-015420-323751-8","54-691847-594216-9","99-822766-714473-0","53-272976-680599-9"],invalid:["49-015420-323751-7","35-686800-0041412-0","35-209900-1761482-3"]})}),o(0,()=>{d({validator:"isUppercase",valid:["ABC","ABC123","ALL CAPS IS FUN.","   ."],invalid:["fooBar","123abc"]})}),o(0,()=>{d({validator:"isInt",valid:["13","123","0","123","-0","+1","01","-01","000"],invalid:["100e10","123.123","   ",""]}),d({validator:"isInt",args:[{allow_leading_zeroes:!1}],valid:["13","123","0","123","-0","+1"],invalid:["01","-01","000","100e10","123.123","   ",""]}),d({validator:"isInt",args:[{allow_leading_zeroes:!0}],valid:["13","123","0","123","-0","+1","01","-01","000","-000","+000"],invalid:["100e10","123.123","   ",""]}),d({validator:"isInt",args:[{min:10}],valid:["15","80","99"],invalid:["9","6","3.2","a"]}),d({validator:"isInt",args:[{min:10,max:15}],valid:["15","11","13"],invalid:["9","2","17","3.2","33","a"]}),d({validator:"isInt",args:[{gt:10,lt:15}],valid:["14","11","13"],invalid:["10","15","17","3.2","33","a"]}),d({validator:"isInt",args:[{min:void 0,max:void 0}],valid:["143","15","767777575"],invalid:["10.4","bar","10a","c44"]}),d({validator:"isInt",args:[{gt:void 0,lt:void 0}],valid:["289373466","55","989"],invalid:["10.4","baz","66a","c21"]}),d({validator:"isInt",args:[{gt:null,max:null}],valid:["1","886","84512345"],invalid:["10.4","h","1.2","+"]}),d({validator:"isInt",args:[{lt:null,min:null}],valid:["289373466","55","989"],invalid:[",","+11212+","fail","111987234i"]})}),o(0,()=>{d({validator:"isFloat",valid:["123","123.","123.123","-123.123","-0.123","+0.123","0.123",".0","-.123","+.123","01.123","-0.22250738585072011e-307"],invalid:["+","-","  ","",".",",","foo","20.foo","2020-01-06T14:31:00.135Z"]}),d({validator:"isFloat",args:[{locale:"en-AU"}],valid:["123","123.","123.123","-123.123","-0.123","+0.123","0.123",".0","-.123","+.123","01.123","-0.22250738585072011e-307"],invalid:["123\u066b123","123,123","  ","",".","foo"]}),d({validator:"isFloat",args:[{locale:"de-DE"}],valid:["123","123,","123,123","-123,123","-0,123","+0,123","0,123",",0","-,123","+,123","01,123","-0,22250738585072011e-307"],invalid:["123.123","123\u066b123","  ","",".","foo"]}),d({validator:"isFloat",args:[{locale:"ar-JO"}],valid:["123","123\u066b","123\u066b123","-123\u066b123","-0\u066b123","+0\u066b123","0\u066b123","\u066b0","-\u066b123","+\u066b123","01\u066b123","-0\u066b22250738585072011e-307"],invalid:["123,123","123.123","  ","",".","foo"]}),d({validator:"isFloat",args:[{min:3.7}],valid:["3.888","3.92","4.5","50","3.7","3.71"],invalid:["3.6","3.69","3","1.5","a"]}),d({validator:"isFloat",args:[{min:.1,max:1}],valid:["0.1","1.0","0.15","0.33","0.57","0.7"],invalid:["0","0.0","a","1.3","0.05","5"]}),d({validator:"isFloat",args:[{gt:-5.5,lt:10}],valid:["9.9","1.0","0","-1","7","-5.4"],invalid:["10","-5.5","a","-20.3","20e3","10.00001"]}),d({validator:"isFloat",args:[{min:-5.5,max:10,gt:-5.5,lt:10}],valid:["9.99999","-5.499999"],invalid:["10","-5.5"]}),d({validator:"isFloat",args:[{locale:"de-DE",min:3.1}],valid:["123","123,","123,123","3,1","3,100001"],invalid:["3,09","-,123","+,123","01,123","-0,22250738585072011e-307","-123,123","-0,123","+0,123","0,123",",0","123.123","123\u066b123","  ","",".","foo"]}),d({validator:"isFloat",args:[{min:void 0,max:void 0}],valid:["123","123.","123.123","-767.767","+111.111"],invalid:["ab565","-,123","+,123","7866.t","123,123","123,"]}),d({validator:"isFloat",args:[{gt:void 0,lt:void 0}],valid:["14.34343","11.1","456"],invalid:["ab565","-,123","+,123","7866.t"]}),d({validator:"isFloat",args:[{locale:"ar",gt:null,max:null}],valid:["13324\u066b","12321","444\u066b83874"],invalid:["55.55.55","1;23","+-123","1111111l1","3.3"]}),d({validator:"isFloat",args:[{locale:"ru-RU",lt:null,min:null}],valid:["11231554,34343","11,1","456",",311"],invalid:["ab565","-.123","+.123","7866.t","22.3"]})}),o(0,()=>{d({validator:"isHexadecimal",valid:["deadBEEF","ff0044","0xff0044","0XfF0044","0x0123456789abcDEF","0X0123456789abcDEF","0hfedCBA9876543210","0HfedCBA9876543210","0123456789abcDEF"],invalid:["abcdefg","","..","0xa2h","0xa20x","0x0123456789abcDEFq","0hfedCBA9876543210q","01234q56789abcDEF"]})}),o(0,()=>{d({validator:"isOctal",valid:["076543210","0o01234567"],invalid:["abcdefg","012345678","012345670c","00c12345670c","",".."]})}),o(0,()=>{d({validator:"isHexColor",valid:["#ff0000ff","#ff0034","#CCCCCC","0f38","fff","#f00"],invalid:["#ff","fff0a","#ff12FG"]})}),o(0,()=>{d({validator:"isHSL",valid:["hsl(360,0000000000100%,000000100%)","hsl(000010, 00000000001%, 00000040%)","HSL(00000,0000000000100%,000000100%)","hsL(0, 0%, 0%)","hSl(  360  , 100%  , 100%   )","Hsl(  00150  , 000099%  , 01%   )","hsl(01080, 03%, 4%)","hsl(-540, 03%, 4%)","hsla(+540, 03%, 4%)","hsla(+540, 03%, 4%, 500)","hsl(+540deg, 03%, 4%, 500)","hsl(+540gRaD, 03%, 4%, 500)","hsl(+540.01e-98rad, 03%, 4%, 500)","hsl(-540.5turn, 03%, 4%, 500)","hsl(+540, 03%, 4%, 500e-01)","hsl(+540, 03%, 4%, 500e+80)","hsl(4.71239rad, 60%, 70%)","hsl(270deg, 60%, 70%)","hsl(200, +.1%, 62%, 1)","hsl(270 60% 70%)","hsl(200, +.1e-9%, 62e10%, 1)","hsl(.75turn, 60%, 70%)","hsl(200grad +.1% 62% / 1)","hsl(270, 60%, 50%, .15)","hsl(270, 60%, 50%, 15%)","hsl(270 60% 50% / .15)","hsl(270 60% 50% / 15%)"],invalid:["hsl (360,0000000000100%,000000100%)","hsl(0260, 100 %, 100%)","hsl(0160, 100%, 100%, 100 %)","hsl(-0160, 100%, 100a)","hsl(-0160, 100%, 100)","hsl(-0160 100%, 100%, )","hsl(270 deg, 60%, 70%)","hsl( deg, 60%, 70%)","hsl(, 60%, 70%)","hsl(3000deg, 70%)"]})}),o(0,()=>{d({validator:"isRgbColor",valid:["rgb(0,0,0)","rgb(255,255,255)","rgba(0,0,0,0)","rgba(255,255,255,1)","rgba(255,255,255,.1)","rgba(255,255,255,0.1)","rgba(255,255,255,.12)","rgb(5%,5%,5%)","rgba(5%,5%,5%,.3)","rgba(5%,5%,5%,.32)"],invalid:["rgb(0,0,0,)","rgb(0,0,)","rgb(0,0,256)","rgb()","rgba(0,0,0)","rgba(255,255,255,2)","rgba(255,255,255,.123)","rgba(255,255,256,0.1)","rgb(4,4,5%)","rgba(5%,5%,5%)","rgba(3,3,3%,.3)","rgba(5%,5%,5%,.321)","rgb(101%,101%,101%)","rgba(3%,3%,101%,0.3)","rgb(101%,101%,101%) additional invalid string part","rgba(3%,3%,101%,0.3) additional invalid string part","r         g    b(   0,         251,       222     )","r         g    ba(   0,         251,       222     )","rg ba(0, 251, 22, 0.5)","rgb( 255,255 ,255)","rgba(255, 255, 255, 0.5)","rgba(255, 255, 255, 0.5)","rgb(5%, 5%, 5%)"]}),d({validator:"isRgbColor",args:[{}],valid:["rgb(0,0,0)","rgb(255,255,255)","rgba(0,0,0,0)","rgba(255,255,255,1)","rgba(255,255,255,.1)","rgba(255,255,255,.12)","rgba(255,255,255,0.1)","rgb(5%,5%,5%)","rgba(5%,5%,5%,.3)"],invalid:["rgb(0,0,0,)","rgb(0,0,)","rgb(0,0,256)","rgb()","rgba(0,0,0)","rgba(255,255,255,2)","rgba(255,255,256,0.1)","rgb(4,4,5%)","rgba(5%,5%,5%)","rgba(3,3,3%,.3)","rgb(101%,101%,101%)","rgba(3%,3%,101%,0.3)","r         g    b(   0,         251,       222     )","r         g    ba(   0,         251,       222     )","rg ba(0, 251, 22, 0.5)","rgb( 255,255 ,255)","rgba(255, 255, 255, 0.5)","rgba(255, 255, 255, 0.5)","rgb(5%, 5%, 5%)"]}),d({validator:"isRgbColor",args:[!1],valid:["rgb(5,5,5)","rgba(5,5,5,.3)"],invalid:["rgb(4,4,5%)","rgba(5%,5%,5%)","r         g    b(   0,         251,       222     )","r         g    ba(   0,         251,       222     )"]}),d({validator:"isRgbColor",args:[{includePercentValues:!1}],valid:["rgb(5,5,5)","rgba(5,5,5,.3)"],invalid:["rgb(4,4,5%)","rgba(5%,5%,5%)","r         g    b(   0,         251,       222     )","rgba(255, 255, 255 ,0.2)","r         g    ba(   0,         251,       222     )"]}),d({validator:"isRgbColor",args:[!0],valid:["rgb(5,5,5)","rgba(5,5,5,.3)","rgb(0,0,0)","rgb(255,255,255)","rgba(0,0,0,0)","rgba(255,255,255,1)","rgba(255,255,255,.1)","rgba(255,255,255,.12)","rgba(255,255,255,0.1)","rgb(5%,5%,5%)","rgba(5%,5%,5%,.3)","rgb(5%,5%,5%)","rgba(255,255,255,0.5)"],invalid:["rgba(255, 255, 255, 0.5)","rgb(5%, 5%, 5%)","rgb(4,4,5%)","rgba(5%,5%,5%)","r         g    b(   0,         251,       222     )","r         g    ba(   0,         251,       222     )","rgb(0,0,0,)","rgb(0,0,)","rgb(0,0,256)","rgb()","rgba(0,0,0)","rgba(255,255,255,2)","rgba(255,255,256,0.1)","rgb(4,4,5%)","rgba(5%,5%,5%)","rgba(3,3,3%,.3)","rgb(101%,101%,101%)","rgba(3%,3%,101%,0.3)"]}),d({validator:"isRgbColor",args:[{includePercentValues:!1,allowSpaces:!0}],valid:["rgb(5,5,5)","rgba(5,5,5,.3)","rgba(255,255,255,0.2)","rgba(255, 255, 255 ,0.2)"],invalid:["rgb(4,4,5%)","rgba(5%,5%,5%)","rgba(5% ,5%, 5%)","r         g    b(   0,         251,       222     )","r         g    ba(   0,         251,       222     )","rgb(0,0,)","rgb()","rgb(4,4,5%)","rgb(5%,5%,5%)","rgba(3,3,3%,.3)","rgb(101%, 101%, 101%)","rgba(3%,3%,101%,0.3)"]}),d({validator:"isRgbColor",args:[{includePercentValues:!0,allowSpaces:!0}],valid:["rgb(  5, 5, 5)","rgba(5, 5, 5, .3)","rgb(0, 0, 0)","rgb(255, 255, 255)","rgba(0, 0, 0, 0)","rgba(255, 255, 255, 1)","rgba(255, 255, 255, .1)","rgba(255, 255, 255, 0.1)","rgb(5% ,5% ,5%)","rgba(5%,5%,5%, .3)"],invalid:["r         g    b(   0,         251,       222     )","rgb(4,4,5%)","rgb(101%,101%,101%)"]}),d({validator:"isRgbColor",args:[{includePercentValues:!0,allowSpaces:!1}],valid:["rgb(5,5,5)","rgba(5,5,5,.3)","rgb(0,0,0)","rgb(255,255,255)","rgba(0,0,0,0)","rgba(255,255,255,1)","rgba(255,255,255,.1)","rgba(255,255,255,.12)","rgba(255,255,255,0.1)","rgb(5%,5%,5%)","rgba(5%,5%,5%,.3)"],invalid:["rgb( 255,255 ,255)","rgba(255, 255, 255, 0.5)","rgb(5%, 5%, 5%)","rgba(255, 255, 255, 0.5)","rgb(4,4,5%)","rgba(5%,5%,5%)","r         g    b(   0,         251,       222     )","r         g    ba(   0,         251,       222     )","rgb(0,0,0,)","rgb(0,0,)","rgb(0,0,256)","rgb()","rgba(0,0,0)","rgba(255,255,255,2)","rgba(255,255,256,0.1)","rgb(4,4,5%)","rgba(5%,5%,5%)","rgba(3,3,3%,.3)","rgb(101%,101%,101%)","rgba(3%,3%,101%,0.3)"]})}),o(0,()=>{d({validator:"isISRC",valid:["USAT29900609","GBAYE6800011","USRC15705223","USCA29500702"],invalid:["USAT2990060","SRC15705223","US-CA29500702","USARC15705223"]})}),o(0,()=>{d({validator:"isMD5",valid:["d94f3f016ae679c3008de268209132f2","751adbc511ccbe8edf23d486fa4581cd","88dae00e614d8f24cfd5a8b3f8002e93","0bf1c35032a71a14c2f719e5a14c1e96"],invalid:["KYT0bf1c35032a71a14c2f719e5a14c1","q94375dj93458w34","39485729348","%&FHKJFvk"]})}),o(0,()=>{["md5","md4","ripemd128","tiger128"].forEach(a=>{d({validator:"isHash",args:[a],valid:["d94f3f016ae679c3008de268209132f2","751adbc511ccbe8edf23d486fa4581cd","88dae00e614d8f24cfd5a8b3f8002e93","0bf1c35032a71a14c2f719e5a14c1e96","d94f3F016Ae679C3008de268209132F2","88DAE00e614d8f24cfd5a8b3f8002E93"],invalid:["q94375dj93458w34","39485729348","%&FHKJFvk","KYT0bf1c35032a71a14c2f719e5a1"]})}),["crc32","crc32b"].forEach(a=>{d({validator:"isHash",args:[a],valid:["d94f3f01","751adbc5","88dae00e","0bf1c350","88DAE00e","751aDBc5"],invalid:["KYT0bf1c35032a71a14c2f719e5a14c1","q94375dj93458w34","q943","39485729348","%&FHKJFvk"]})}),["sha1","tiger160","ripemd160"].forEach(a=>{d({validator:"isHash",args:[a],valid:["3ca25ae354e192b26879f651a51d92aa8a34d8d3","aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d","beb8c3f30da46be179b8df5f5ecb5e4b10508230","efd5d3b190e893ed317f38da2420d63b7ae0d5ed","AAF4c61ddCC5e8a2dabede0f3b482cd9AEA9434D","3ca25AE354e192b26879f651A51d92aa8a34d8D3"],invalid:["KYT0bf1c35032a71a14c2f719e5a14c1","KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk","q94375dj93458w34","39485729348","%&FHKJFvk"]})}),d({validator:"isHash",args:["sha256"],valid:["2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824","1d996e033d612d9af2b44b70061ee0e868bfd14c2dd90b129e1edeb7953e7985","80f70bfeaed5886e33536bcfa8c05c60afef5a0e48f699a7912d5e399cdcc441","579282cfb65ca1f109b78536effaf621b853c9f7079664a3fbe2b519f435898c","2CF24dba5FB0a30e26E83b2AC5b9E29E1b161e5C1fa7425E73043362938b9824","80F70bFEAed5886e33536bcfa8c05c60aFEF5a0e48f699a7912d5e399cdCC441"],invalid:["KYT0bf1c35032a71a14c2f719e5a14c1","KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk","q94375dj93458w34","39485729348","%&FHKJFvk"]}),d({validator:"isHash",args:["sha384"],valid:["3fed1f814d28dc5d63e313f8a601ecc4836d1662a19365cbdcf6870f6b56388850b58043f7ebf2418abb8f39c3a42e31","b330f4e575db6e73500bd3b805db1a84b5a034e5d21f0041d91eec85af1dfcb13e40bb1c4d36a72487e048ac6af74b58","bf547c3fc5841a377eb1519c2890344dbab15c40ae4150b4b34443d2212e5b04aa9d58865bf03d8ae27840fef430b891","fc09a3d11368386530f985dacddd026ae1e44e0e297c805c3429d50744e6237eb4417c20ffca8807b071823af13a3f65","3fed1f814d28dc5d63e313f8A601ecc4836d1662a19365CBDCf6870f6b56388850b58043f7ebf2418abb8f39c3a42e31","b330f4E575db6e73500bd3b805db1a84b5a034e5d21f0041d91EEC85af1dfcb13e40bb1c4d36a72487e048ac6af74b58"],invalid:["KYT0bf1c35032a71a14c2f719e5a14c1","KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk","q94375dj93458w34","39485729348","%&FHKJFvk"]}),d({validator:"isHash",args:["sha512"],valid:["9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043","83c586381bf5ba94c8d9ba8b6b92beb0997d76c257708742a6c26d1b7cbb9269af92d527419d5b8475f2bb6686d2f92a6649b7f174c1d8306eb335e585ab5049","45bc5fa8cb45ee408c04b6269e9f1e1c17090c5ce26ffeeda2af097735b29953ce547e40ff3ad0d120e5361cc5f9cee35ea91ecd4077f3f589b4d439168f91b9","432ac3d29e4f18c7f604f7c3c96369a6c5c61fc09bf77880548239baffd61636d42ed374f41c261e424d20d98e320e812a6d52865be059745fdb2cb20acff0ab","9B71D224bd62f3785D96d46ad3ea3d73319bFBC2890CAAdae2dff72519673CA72323C3d99ba5c11d7c7ACC6e14b8c5DA0c4663475c2E5c3adef46f73bcDEC043","432AC3d29E4f18c7F604f7c3c96369A6C5c61fC09Bf77880548239baffd61636d42ed374f41c261e424d20d98e320e812a6d52865be059745fdb2cb20acff0ab"],invalid:["KYT0bf1c35032a71a14c2f719e5a14c1","KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk","q94375dj93458w34","39485729348","%&FHKJFvk"]}),d({validator:"isHash",args:["tiger192"],valid:["6281a1f098c5e7290927ed09150d43ff3990a0fe1a48267c","56268f7bc269cf1bc83d3ce42e07a85632394737918f4760","46fc0125a148788a3ac1d649566fc04eb84a746f1a6e4fa7","7731ea1621ae99ea3197b94583d034fdbaa4dce31a67404a","6281A1f098c5e7290927ed09150d43ff3990a0fe1a48267C","46FC0125a148788a3AC1d649566fc04eb84A746f1a6E4fa7"],invalid:["KYT0bf1c35032a71a14c2f719e5a14c1","KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk","q94375dj93458w34","39485729348","%&FHKJFvk"]})}),o(0,()=>{d({validator:"isJWT",valid:["eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb3JlbSI6Imlwc3VtIn0.ymiJSsMJXR6tMSr8G9usjQ15_8hKPDv_CArLhxw28MI","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2xvciI6InNpdCIsImFtZXQiOlsibG9yZW0iLCJpcHN1bSJdfQ.rRpe04zbWbbJjwM43VnHzAboDzszJtGrNsUxaqQ-GQ8","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqb2huIjp7ImFnZSI6MjUsImhlaWdodCI6MTg1fSwiamFrZSI6eyJhZ2UiOjMwLCJoZWlnaHQiOjI3MH19.YRLPARDmhGMC3BBk_OhtwwK21PIkVCqQe8ncIRPKo-E"],invalid:["eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI6MTUxNjIzOTAyMn0","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI6MTYxNjY1Mzg3Mn0.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tIiwiaWF0IjoxNjE2NjUzODcyLCJleHAiOjE2MTY2NTM4ODJ9.a1jLRQkO5TV5y5ERcaPAiM9Xm2gBdRjKrrCpHkGr_8M","$Zs.ewu.su84","ks64$S/9.dy$\u00a7kz.3sd73b"],error:[[],{},null,void 0]})}),o(0,()=>{d({validator:"isEmpty",valid:[""],invalid:[" ","foo","3"]}),d({validator:"isEmpty",args:[{ignore_whitespace:!1}],valid:[""],invalid:[" ","foo","3"]}),d({validator:"isEmpty",args:[{ignore_whitespace:!0}],valid:[""," "],invalid:["foo","3"]})}),o(0,()=>{d({validator:"equals",args:["abc"],valid:["abc"],invalid:["Abc","123"]})}),o(0,()=>{d({validator:"contains",args:["foo"],valid:["foo","foobar","bazfoo"],invalid:["bar","fobar"]}),d({validator:"contains",args:["foo",{ignoreCase:!0}],valid:["Foo","FOObar","BAZfoo"],invalid:["bar","fobar","baxoof"]}),d({validator:"contains",args:["foo",{minOccurrences:2}],valid:["foofoofoo","12foo124foo","fofooofoooofoooo","foo1foo"],invalid:["foo","foobar","Fooofoo","foofo"]})}),o(0,()=>{d({validator:"matches",args:[/abc/],valid:["abc","abcdef","123abc"],invalid:["acb","Abc"]}),d({validator:"matches",args:["abc"],valid:["abc","abcdef","123abc"],invalid:["acb","Abc"]}),d({validator:"matches",args:["abc","i"],valid:["abc","abcdef","123abc","AbC"],invalid:["acb"]})}),o(0,()=>{d({validator:"isLength",args:[2],valid:["abc","de","abcd"],invalid:["","a"]}),d({validator:"isLength",args:[2,3],valid:["abc","de"],invalid:["","a","abcd"]}),d({validator:"isLength",args:[2,3],valid:["\u5e72\ud867\ude3d","\ud842\udfb7\u91ce\u5bb6"],invalid:["","\ud840\udc0b","\u5343\u7ac8\u901a\u308a"]}),d({validator:"isLength",args:[0,0],valid:[""],invalid:["a","ab"]})}),o(0,()=>{d({validator:"isLocale",valid:["uz_Latn_UZ","en","gsw","en-US","es_ES","es-419","sw_KE","am_ET","zh-CHS","ca_ES_VALENCIA","en_US_POSIX","hak-CN","zh-Hant","zh-Hans","sr-Cyrl","sr-Latn","zh-cmn-Hans-CN","cmn-Hans-CN","zh-yue-HK","yue-HK","zh-Hans-CN","sr-Latn-RS","sl-rozaj","sl-rozaj-biske","sl-nedis","de-CH-1901","sl-IT-nedis","hy-Latn-IT-arevela","i-enochian","en-scotland-fonipa","sl-IT-rozaj-biske-1994","de-CH-x-phonebk","az-Arab-x-AZE-derbend","x-whatever","qaa-Qaaa-QM-x-southern","de-Qaaa","sr-Latn-QM","sr-Qaaa-RS","en-US-u-islamcal","zh-CN-a-myext-x-private","en-a-myext-b-another"],invalid:["lo_POP","12","12_DD","de-419-DE","a-DE"]})}),o(0,()=>{d({validator:"isByteLength",args:[2],valid:["abc","de","abcd","\uff47\uff4d\uff41\uff49\uff4c"],invalid:["","a"]}),d({validator:"isByteLength",args:[2,3],valid:["abc","de","\uff47"],invalid:["","a","abcd","\uff47\uff4d"]}),d({validator:"isByteLength",args:[0,0],valid:[""],invalid:["\uff47","a"]})}),o(0,()=>{d({validator:"isLength",args:[{min:2}],valid:["abc","de","abcd"],invalid:["","a"]}),d({validator:"isLength",args:[{min:2,max:3}],valid:["abc","de"],invalid:["","a","abcd"]}),d({validator:"isLength",args:[{min:2,max:3}],valid:["\u5e72\ud867\ude3d","\ud842\udfb7\u91ce\u5bb6"],invalid:["","\ud840\udc0b","\u5343\u7ac8\u901a\u308a"]}),d({validator:"isLength",args:[{max:3}],valid:["abc","de","a",""],invalid:["abcd"]}),d({validator:"isLength",args:[{max:6,discreteLengths:5}],valid:["abcd","vfd","ff","","k"],invalid:["abcdefgh","hfjdksks"]}),d({validator:"isLength",args:[{min:2,max:6,discreteLengths:5}],valid:["bsa","vfvd","ff"],invalid:[""," ","hfskdunvc"]}),d({validator:"isLength",args:[{min:1,discreteLengths:2}],valid:[" ","hello","bsa"],invalid:[""]}),d({validator:"isLength",args:[{max:0}],valid:[""],invalid:["a","ab"]}),d({validator:"isLength",args:[{min:5,max:10,discreteLengths:[2,6,8,9]}],valid:["helloguy","shopping","validator","length"],invalid:["abcde","abcdefg"]}),d({validator:"isLength",args:[{discreteLengths:"9"}],valid:["a","abcd","abcdefghijkl"],invalid:[]}),d({validator:"isLength",valid:["a","","asds"]}),d({validator:"isLength",args:[{max:8}],valid:["\ud83d\udc69\ud83e\uddb0\ud83d\udc69\ud83d\udc69\ud83d\udc66\ud83d\udc66\ud83c\udff3\ufe0f\ud83c\udf08","\u23e9\ufe0e\u23e9\ufe0e\u23ea\ufe0e\u23ea\ufe0e\u23ed\ufe0e\u23ed\ufe0e\u23ee\ufe0e\u23ee\ufe0e"]})}),o(0,()=>{d({validator:"isByteLength",args:[{min:2}],valid:["abc","de","abcd","\uff47\uff4d\uff41\uff49\uff4c"],invalid:["","a"]}),d({validator:"isByteLength",args:[{min:2,max:3}],valid:["abc","de","\uff47"],invalid:["","a","abcd","\uff47\uff4d"]}),d({validator:"isByteLength",args:[{max:3}],valid:["abc","de","\uff47","a",""],invalid:["abcd","\uff47\uff4d"]}),d({validator:"isByteLength",args:[{max:0}],valid:[""],invalid:["\uff47","a"]})}),o(0,()=>{d({validator:"isULID",valid:["01HBGW8CWQ5Q6DTT7XP89VV4KT","01HBGW8CWR8MZQMBG6FA2QHMDD","01HBGW8CWS3MEEK12Y9G7SVW4V","01hbgw8cws1tq2njavy9amb0wx","01HBGW8cwS43H4jkQ0A4ZRJ7QV"],invalid:["","01HBGW-CWS3MEEK1#Y9G7SVW4V","91HBGW8CWS3MEEK12Y9G7SVW4V","81HBGW8CWS3MEEK12Y9G7SVW4V","934859","01HBGW8CWS3MEEK12Y9G7SVW4VXXX","01UBGW8IWS3MOEK12Y9G7SVW4V","01HBGW8CuS43H4JKQ0A4ZRJ7QV"]})}),o(0,()=>{d({validator:"isUUID",valid:["9deb20fe-a6e0-355c-81ea-288b009e4f6d","A987FBC9-4BED-4078-8F07-9141BA07C9F3","A987FBC9-4BED-5078-AF07-9141BA07C9F3","A987FBC9-4BED-6078-AF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C","A987FBC9-4BED-8078-AF07-9141BA07C9F3"],invalid:["","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx","A987FBC94BED3078CF079141BA07C9F3","934859","987FBC9-4BED-3078-CF07A-9141BA07C9F3","AAAAAAAA-1111-1111-AAAG-111111111111"]}),d({validator:"isUUID",args:[void 0],valid:["9deb20fe-a6e0-355c-81ea-288b009e4f6d","A117FBC9-4BED-5078-AF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C"],invalid:["","A117FBC9-4BED-3078-CF07-9141BA07C9F3","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC94BED3078CF079141BA07C9F3","A11AAAAA-1111-1111-AAAG-111111111111"]}),d({validator:"isUUID",args:[null],valid:["A127FBC9-4BED-3078-AF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C"],invalid:["","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","A127FBC9-4BED-3078-CF07-9141BA07C9F3","A127FBC9-4BED-3078-CF07-9141BA07C9F3xxx","912859","A12AAAAA-1111-1111-AAAG-111111111111"]}),d({validator:"isUUID",args:[1],valid:["E034B584-7D89-11E9-9669-1AECF481A97B"],invalid:["xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","AAAAAAAA-1111-2222-AAAG","AAAAAAAA-1111-2222-AAAG-111111111111","A987FBC9-4BED-4078-8F07-9141BA07C9F3","A987FBC9-4BED-5078-AF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C"]}),d({validator:"isUUID",args:[2],valid:["A987FBC9-4BED-2078-AF07-9141BA07C9F3"],invalid:["","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","11111","AAAAAAAA-1111-1111-AAAG-111111111111","A987FBC9-4BED-2078-CF07-9141BA07C9F3","A987FBC9-4BED-4078-8F07-9141BA07C9F3","A987FBC9-4BED-5078-AF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C"]}),d({validator:"isUUID",args:[3],valid:["9deb20fe-a6e0-355c-81ea-288b009e4f6d"],invalid:["","A987FBC9-4BED-3078-CF07-9141BA07C9F3","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","934859","AAAAAAAA-1111-1111-AAAG-111111111111","A987FBC9-4BED-4078-8F07-9141BA07C9F3","A987FBC9-4BED-5078-AF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C"]}),d({validator:"isUUID",args:[4],valid:["713ae7e3-cb32-45f9-adcb-7c4fa86b90c1","625e63f3-58f5-40b7-83a1-a72ad31acffb","57b73598-8764-4ad0-a76a-679bb6640eb1","9c858901-8a57-4791-81fe-4c455b099bc9"],invalid:["","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","934859","AAAAAAAA-1111-1111-AAAG-111111111111","A987FBC9-4BED-5078-AF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C"]}),d({validator:"isUUID",args:[5],valid:["987FBC97-4BED-5078-AF07-9141BA07C9F3","987FBC97-4BED-5078-BF07-9141BA07C9F3","987FBC97-4BED-5078-8F07-9141BA07C9F3","987FBC97-4BED-5078-9F07-9141BA07C9F3"],invalid:["","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","934859","AAAAAAAA-1111-1111-AAAG-111111111111","9c858901-8a57-4791-81fe-4c455b099bc9","A987FBC9-4BED-3078-CF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C"]}),d({validator:"isUUID",args:[6],valid:["1ef29908-cde1-69d0-be16-bfc8518a95f0"],invalid:["987FBC97-4BED-1078-AF07-9141BA07C9F3","987FBC97-4BED-2078-AF07-9141BA07C9F3","987FBC97-4BED-3078-AF07-9141BA07C9F3","987FBC97-4BED-4078-AF07-9141BA07C9F3","987FBC97-4BED-5078-AF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C","987FBC97-4BED-8078-AF07-9141BA07C9F3"]}),d({validator:"isUUID",args:[7],valid:["018C544A-D384-7000-BB74-3B1738ABE43C"],invalid:["","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","934859","AAAAAAAA-1111-1111-AAAG-111111111111","A987FBC9-4BED-5078-AF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-6078-AF07-9141BA07C9F3","A987FBC9-4BED-8078-AF07-9141BA07C9F3","713ae7e3-cb32-45f9-adcb-7c4fa86b90c1","625e63f3-58f5-40b7-83a1-a72ad31acffb","57b73598-8764-4ad0-a76a-679bb6640eb1","9c858901-8a57-4791-81fe-4c455b099bc9"]}),d({validator:"isUUID",args:[8],valid:["018C544A-D384-8000-BB74-3B1738ABE43C"],invalid:["","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","934859","AAAAAAAA-1111-1111-AAAG-111111111111","A987FBC9-4BED-5078-AF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-6078-AF07-9141BA07C9F3","A987FBC9-4BED-7078-AF07-9141BA07C9F3","713ae7e3-cb32-45f9-adcb-7c4fa86b90c1","625e63f3-58f5-40b7-83a1-a72ad31acffb","57b73598-8764-4ad0-a76a-679bb6640eb1","9c858901-8a57-4791-81fe-4c455b099bc9"]}),d({validator:"isUUID",args:["nil"],valid:["00000000-0000-0000-0000-000000000000"],invalid:["","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx","A987FBC94BED3078CF079141BA07C9F3","934859","987FBC9-4BED-3078-CF07A-9141BA07C9F3","AAAAAAAA-1111-1111-AAAG-111111111111","9deb20fe-a6e0-355c-81ea-288b009e4f6d","A987FBC9-4BED-4078-8F07-9141BA07C9F3","A987FBC9-4BED-5078-AF07-9141BA07C9F3","A987FBC9-4BED-6078-AF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C","A987FBC9-4BED-8078-AF07-9141BA07C9F3","ffffffff-ffff-ffff-ffff-ffffffffffff","FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF"]}),d({validator:"isUUID",args:["max"],valid:["ffffffff-ffff-ffff-ffff-ffffffffffff","FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF"],invalid:["","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx","A987FBC94BED3078CF079141BA07C9F3","934859","987FBC9-4BED-3078-CF07A-9141BA07C9F3","AAAAAAAA-1111-1111-AAAG-111111111111","9deb20fe-a6e0-355c-81ea-288b009e4f6d","A987FBC9-4BED-4078-8F07-9141BA07C9F3","A987FBC9-4BED-5078-AF07-9141BA07C9F3","A987FBC9-4BED-6078-AF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C","A987FBC9-4BED-8078-AF07-9141BA07C9F3","00000000-0000-0000-0000-000000000000"]}),d({validator:"isUUID",args:["loose"],valid:["9deb20fe-a6e0-355c-81ea-288b009e4f6d","A987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-4078-8F07-9141BA07C9F3","A987FBC9-4BED-5078-AF07-9141BA07C9F3","A987FBC9-4BED-6078-AF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C","A987FBC9-4BED-8078-AF07-9141BA07C9F3","aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa","AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA","eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee","EEEEEEEE-EEEE-EEEE-EEEE-EEEEEEEEEEEE","99999999-9999-9999-9999-999999999999"],invalid:["","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx","A987FBC94BED3078CF079141BA07C9F3","987FBC9-4BED-3078-CF07A-9141BA07C9F3","934859","AAAAAAAA-1111-1111-AAAG-111111111111"]}),d({validator:"isUUID",args:["all"],valid:["9deb20fe-a6e0-355c-81ea-288b009e4f6d","A987FBC9-4BED-4078-8F07-9141BA07C9F3","A987FBC9-4BED-5078-AF07-9141BA07C9F3","A987FBC9-4BED-6078-AF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C","A987FBC9-4BED-8078-AF07-9141BA07C9F3","00000000-0000-0000-0000-000000000000","ffffffff-ffff-ffff-ffff-ffffffffffff","FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF"],invalid:["","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx","A987FBC94BED3078CF079141BA07C9F3","934859","987FBC9-4BED-3078-CF07A-9141BA07C9F3","AAAAAAAA-1111-1111-AAAG-111111111111"]}),d({validator:"isUUID",args:["invalid"],valid:[],invalid:["","xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3","A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx","A987FBC94BED3078CF079141BA07C9F3","934859","987FBC9-4BED-3078-CF07A-9141BA07C9F3","AAAAAAAA-1111-1111-AAAG-111111111111","9deb20fe-a6e0-355c-81ea-288b009e4f6d","A987FBC9-4BED-4078-8F07-9141BA07C9F3","A987FBC9-4BED-5078-AF07-9141BA07C9F3","A987FBC9-4BED-6078-AF07-9141BA07C9F3","018C544A-D384-7000-BB74-3B1738ABE43C","A987FBC9-4BED-8078-AF07-9141BA07C9F3","00000000-0000-0000-0000-000000000000","ffffffff-ffff-ffff-ffff-ffffffffffff","FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF"]})}),o(0,()=>{d({validator:"isIn",args:["foobar"],valid:["foo","bar","foobar",""],invalid:["foobarbaz","barfoo"]}),d({validator:"isIn",args:[["foo","bar"]],valid:["foo","bar"],invalid:["foobar","barfoo",""]}),d({validator:"isIn",args:[["1","2","3"]],valid:["1","2","3"],invalid:["4",""]}),d({validator:"isIn",args:[["1","2","3",{foo:"bar"},()=>5,{toString:"test"}]],valid:["1","2","3",""],invalid:["4"]}),d({validator:"isIn",invalid:["foo",""]})}),o(0,()=>{d({validator:"isIn",args:[{foo:1,bar:2,foobar:3}],valid:["foo","bar","foobar"],invalid:["foobarbaz","barfoo",""]}),d({validator:"isIn",args:[{1:3,2:0,3:1}],valid:["1","2","3"],invalid:["4",""]})}),o(0,()=>{d({validator:"isAbaRouting",valid:["322070381","011103093","263170175","124303065"],invalid:["426317017","789456124","603558459","qwerty","12430306","382070381"]})}),o(0,()=>{d({validator:"isIBAN",valid:["SC52BAHL01031234567890123456USD","LC14BOSL123456789012345678901234","MT31MALT01100000000000000000123","SV43ACAT00000000000000123123","EG800002000156789012345180002","BE71 0961 2345 6769","FR76 3000 6000 0112 3456 7890 189","DE91 1000 0000 0123 4567 89","GR96 0810 0010 0000 0123 4567 890","RO09 BCYP 0000 0012 3456 7890","SA44 2000 0001 2345 6789 1234","ES79 2100 0813 6101 2345 6789","CH56 0483 5012 3456 7800 9","GB98 MIDL 0700 9312 3456 78","IL170108000000012612345","IT60X0542811101000000123456","JO71CBJO0000000000001234567890","TR320010009999901234567890","BR1500000000000010932840814P2","LB92000700000000123123456123","IR200170000000339545727003","MZ97123412341234123412341","MA64011519000001205000534921","VG96VPVG0000012345678901","DZ580002100001113000000570","IE29AIBK93115212345678","PS92PALS000000000400123456702","PS92PALS00000000040012345670O"],invalid:["XX22YYY1234567890123","FR14 2004 1010 0505 0001 3","FR7630006000011234567890189@","FR7630006000011234567890189\ud83d\ude05","FR763000600001123456!!\ud83e\udd287890189@","VG46H07Y0223060094359858","IE95TE8270900834048660","PS072435171802145240705922007"]}),d({validator:"isIBAN",args:[{whitelist:["DK","GB"]}],valid:["DK5000400440116243","GB29NWBK60161331926819"],invalid:["BE71 0961 2345 6769","FR76 3000 6000 0112 3456 7890 189","DE91 1000 0000 0123 4567 89","GR96 0810 0010 0000 0123 4567 890","RO09 BCYP 0000 0012 3456 7890","SA44 2000 0001 2345 6789 1234","ES79 2100 0813 6101 2345 6789","XX22YYY1234567890123","FR14 2004 1010 0505 0001 3","FR7630006000011234567890189@","FR7630006000011234567890189\ud83d\ude05","FR763000600001123456!!\ud83e\udd287890189@"]}),d({validator:"isIBAN",args:[{whitelist:["XX","AA"]}],invalid:["DK5000400440116243","GB29NWBK60161331926819","BE71 0961 2345 6769","FR76 3000 6000 0112 3456 7890 189","DE91 1000 0000 0123 4567 89","GR96 0810 0010 0000 0123 4567 890","RO09 BCYP 0000 0012 3456 7890","SA44 2000 0001 2345 6789 1234","ES79 2100 0813 6101 2345 6789","XX22YYY1234567890123","FR14 2004 1010 0505 0001 3","FR7630006000011234567890189@","FR7630006000011234567890189\ud83d\ude05","FR763000600001123456!!\ud83e\udd287890189@"]}),d({validator:"isIBAN",args:[{blacklist:["IT"]}],valid:["SC52BAHL01031234567890123456USD","LC14BOSL123456789012345678901234","MT31MALT01100000000000000000123","SV43ACAT00000000000000123123","EG800002000156789012345180002","BE71 0961 2345 6769","FR76 3000 6000 0112 3456 7890 189","DE91 1000 0000 0123 4567 89","GR96 0810 0010 0000 0123 4567 890","RO09 BCYP 0000 0012 3456 7890","SA44 2000 0001 2345 6789 1234","ES79 2100 0813 6101 2345 6789","CH56 0483 5012 3456 7800 9","GB98 MIDL 0700 9312 3456 78","IL170108000000012612345","JO71CBJO0000000000001234567890","TR320010009999901234567890","BR1500000000000010932840814P2","LB92000700000000123123456123","IR200170000000339545727003","MZ97123412341234123412341"],invalid:["XX22YYY1234567890123","FR14 2004 1010 0505 0001 3","FR7630006000011234567890189@","FR7630006000011234567890189\ud83d\ude05","FR763000600001123456!!\ud83e\udd287890189@","IT60X0542811101000000123456"]})}),o(0,()=>{d({validator:"isBIC",valid:["SBICKEN1345","SBICKEN1","SBICKENY","SBICKEN1YYP","SBICXKN1YYP"],invalid:["SBIC23NXXX","S23CKENXXXX","SBICKENXX","SBICKENXX9","SBICKEN13458","SBICKEN","SBICXK"]})}),o(0,()=>{d({validator:"isDivisibleBy",args:[2],valid:["2","4","100","1000"],invalid:["1","2.5","101","foo","","2020-01-06T14:31:00.135Z"]})}),o(0,()=>{d({validator:"isLuhnNumber",valid:["0","5421","01234567897","0123456789012345678906","0123456789012345678901234567891","123456789012345678906","375556917985515","36050234196908","4716461583322103","4716-2210-5188-5662","4929 7226 5379 7141"],invalid:["","1","5422","foo","prefix6234917882863855","623491788middle2863855","6234917882863855suffix"]})}),o(0,()=>{d({validator:"isCreditCard",valid:["375556917985515","36050234196908","4716461583322103","4716-2210-5188-5662","4929 7226 5379 7141","5398228707871527","6283875070985593","6263892624162870","6234917882863855","6234698580215388","6226050967750613","6246281879460688","2222155765072228","2225855203075256","2720428011723762","2718760626256570","6765780016990268","4716989580001715211","8171999927660000","8171999900000000021"],invalid:["foo","foo","5398228707871528","2718760626256571","2721465526338453","2220175103860763","375556917985515999999993","899999996234917882863855","prefix6234917882863855","623491788middle2863855","6234917882863855suffix","4716989580001715213"]})}),o(0,()=>{d({validator:"isCreditCard",args:[{provider:"Plorf"}],error:["foo","375556917985515","4716-2210-5188-5662","375556917985515999999993","6234917882863855suffix"]})}),o(0,()=>{d({validator:"isCreditCard",args:[{provider:"AmEx"}],valid:["375556917985515"],invalid:["foo","2222155765072228","2225855203075256","2720428011723762","2718760626256570","36050234196908","375556917985515999999993","4716461583322103","4716-2210-5188-5662","4716989580001715211","4929 7226 5379 7141","5398228707871527","6234917882863855suffix","6283875070985593","6263892624162870","6234917882863855","6234698580215388","6226050967750613","6246281879460688","6283875070985593","6765780016990268","8171999927660000","8171999900000000021"]})}),o(0,()=>{d({validator:"isCreditCard",args:[{provider:"DinersClub"}],valid:["36050234196908"],invalid:["foo","2222155765072228","2225855203075256","2720428011723762","2718760626256570","375556917985515","375556917985515999999993","4716461583322103","4716-2210-5188-5662","4716989580001715211","4929 7226 5379 7141","5398228707871527","6234917882863855suffix","6283875070985593","6263892624162870","6234917882863855","6234698580215388","6226050967750613","6246281879460688","6283875070985593","6765780016990268","8171999927660000","8171999900000000021"]})}),o(0,()=>{d({validator:"isCreditCard",args:[{provider:"Discover"}],valid:["6011111111111117","6011000990139424"],invalid:["foo","2222155765072228","2225855203075256","2720428011723762","2718760626256570","36050234196908","375556917985515","375556917985515999999993","4716461583322103","4716-2210-5188-5662","4716989580001715211","4929 7226 5379 7141","5398228707871527","6234917882863855suffix","6283875070985593","6263892624162870","6234917882863855","6234698580215388","6226050967750613","6246281879460688","6283875070985593","6765780016990268","8171999927660000","8171999900000000021"]})}),o(0,()=>{d({validator:"isCreditCard",args:[{provider:"JCB"}],valid:["3530111333300000","3566002020360505"],invalid:["foo","2222155765072228","2225855203075256","2720428011723762","2718760626256570","36050234196908","375556917985515","375556917985515999999993","4716461583322103","4716-2210-5188-5662","4716989580001715211","4929 7226 5379 7141","5398228707871527","6234917882863855suffix","6283875070985593","6263892624162870","6234917882863855","6234698580215388","6226050967750613","6246281879460688","6283875070985593","6765780016990268","8171999927660000","8171999900000000021"]})}),o(0,()=>{d({validator:"isCreditCard",args:[{provider:"Mastercard"}],valid:["2222155765072228","2225855203075256","2718760626256570","2720428011723762","5398228707871527"],invalid:["foo","36050234196908","375556917985515","375556917985515999999993","4716461583322103","4716-2210-5188-5662","4716989580001715211","4929 7226 5379 7141","6234917882863855suffix","6283875070985593","6263892624162870","6234917882863855","6234698580215388","6226050967750613","6246281879460688","6283875070985593","6765780016990268","8171999927660000","8171999900000000021"]})}),o(0,()=>{d({validator:"isCreditCard",args:[{provider:"UnionPay"}],valid:["6226050967750613","6234917882863855","6234698580215388","6246281879460688","6263892624162870","6283875070985593","6765780016990268","8171999927660000","8171999900000000021"],invalid:["foo","2222155765072228","2225855203075256","2720428011723762","2718760626256570","36050234196908","375556917985515","375556917985515999999993","4716461583322103","4716-2210-5188-5662","4716989580001715211","4929 7226 5379 7141","5398228707871527","6234917882863855suffix"]})}),o(0,()=>{d({validator:"isCreditCard",args:[{provider:"Visa"}],valid:["4716-2210-5188-5662","4716461583322103","4716989580001715211","4929 7226 5379 7141"],invalid:["foo","2222155765072228","2225855203075256","2720428011723762","2718760626256570","36050234196908","375556917985515","375556917985515999999993","5398228707871527","6234917882863855suffix","6283875070985593","6263892624162870","6234917882863855","6234698580215388","6226050967750613","6246281879460688","6283875070985593","6765780016990268","8171999927660000","8171999900000000021"]})}),o(0,()=>{let a=[];[{locale:"PK",valid:["45504-4185771-3","39915-6182971-9","21143-6182971-2","34543-2323471-1","72345-2345678-7","63456-8765432-8","55672-1234567-5","21234-9876543-6"],invalid:["08000-1234567-5","74321-87654321-1","51234-98765-2","00000-0000000-0","88888-88888888-0","99999-9999999-9","11111"]},{locale:"zh-HK",valid:["OV290326[A]","Q803337[0]","Z0977986","W520128(7)","A494866[4]","A494866(4)","Z867821A","ag293013(9)","k348609(5)"],invalid:["A1234567890","98765432","O962472(9)","M4578601","X731324[8]","C503134(5)","RH265886(3)"]},{locale:"LK",valid:["722222222v","722222222V","993151225x","993151225X","188888388x","935632124V","199931512253","200023125632"],invalid:["023125648V","023345621v","021354211X","055321231x","02135465462","199931512253X"]},{locale:"PL",valid:["99012229019","09210215408","20313034701","86051575214","77334586883","54007481320","06566860643","77552478861"],invalid:["aa","5","195",""," ","12345678901","99212229019","09210215402","20313534701","86241579214"]},{locale:"ES",valid:["99999999R","12345678Z","01234567L","01234567l","X1234567l","x1234567l","X1234567L","Y1234567X","Z1234567R"],invalid:["123456789","12345678A","12345 678Z","12345678-Z","1234*6789","1234*678Z","12345678!","1234567L","A1234567L","X1234567A","Y1234567B","Z1234567C"]},{locale:"FI",valid:["131052-308T","131052A308T","131052+308T","131052-313Y"],invalid:["131052308T","131052-308T ","131052-308A"]},{locale:"IN",valid:["298448863364","2984 4886 3364"],invalid:["99999999R","12345678Z","01234567L","01234567l","X1234567l","x1234567l","X1234567L"]},{locale:"IR",valid:["0499370899","0790419904","0084575948","0963695398","0684159414","0067749828","0650451252","1583250689","4032152314","0076229645","4271467685","0200203241"],invalid:["1260293040","0000000001","1999999999","9999999991","AAAAAAAAAA","0684159415"]},{locale:"IT",valid:["CR43675TM","CA79382RA"],invalid:["CA00000AA","CB2342TG","CS123456A","C1236EC"]},{locale:"NO",valid:["09053426694","26028338723","08031470790","12051539514","02077448074","14035638319","13031379673","29126214926"],invalid:["09053426699","00000000000","26028338724","92031470790"]},{locale:"TH",valid:["1101230000001","1101230000060"],invalid:["abc","1101230","11012300000011","aaaaaaaaaaaaa","110123abcd001","1101230000007","0101123450000","0101123450004","9101123450008"]},{locale:"he-IL",valid:["219472156","219486610","219488962","219566726","219640216","219645041","334795465","335211686","335240479","335472171","336999842","337090443"],invalid:["123456789","12345678A","12345 678Z","12345678-Z","1234*6789","1234*678Z","12345678!","1234567L","A1234567L","X1234567A","Y1234567B","Z1234567C","219772156","219487710","334705465","336000842"]},{locale:"ar-LY",valid:["119803455876","120024679875","219624876201","220103480657"],invalid:["987654320123","123-456-7890","012345678912","1234567890","AFJBHUYTREWR","C4V6B1X0M5T6","9876543210123"]},{locale:"ar-TN",valid:["09958092","09151092","65126506","79378815","58994407","73089789","73260311"],invalid:["123456789546","123456789","023456789","12345678A","12345","1234578A","123 578A","12345 678Z","12345678-Z","1234*6789","1234*678Z","GE9800as98","X231071922","1234*678Z","12345678!"]},{locale:"zh-CN",valid:["235407195106112745","210203197503102721","520323197806058856","110101491001001"],invalid:["160323197806058856","010203197503102721","520323297806058856","520323197802318856","235407195106112742","010101491001001","110101491041001","160101491001001","110101940231001","xx1234567","135407195106112742","123456789546","123456789","023456789","12345678A","12345","1234578A","123 578A","12345 678Z","12345678-Z","1234*6789","1234*678Z","GE9800as98","X231071922","1234*678Z","12345678!","235407207006112742"]},{locale:"zh-TW",valid:["B176944193","K101189797","F112866121","A219758834","A244144802","A146047171","Q170219004","Z277018381","X231071923"],invalid:["123456789","A185034995","X431071923","GE9800as98","X231071922","1234*678Z","12345678!","1234567L","A1234567L","X1234567A","Y1234567B","Z1234567C","219772156","219487710","334705465","336000842"]}].forEach(e=>{e.valid&&(a=a.concat(e.valid)),d({validator:"isIdentityCard",valid:e.valid,invalid:e.invalid,args:[e.locale]})}),d({validator:"isIdentityCard",valid:[...a],invalid:["foo"],args:["any"]})}),o(0,()=>{d({validator:"isIdentityCard",args:["is-NOT"],error:["99999999R","12345678Z"]})}),o(0,()=>{d({validator:"isISIN",valid:["AU0000XVGZA3","DE000BAY0017","BE0003796134","SG1G55870362","GB0001411924","DE000WCH8881","PLLWBGD00016","US0378331005"],invalid:["DE000BAY0018","PLLWBGD00019","foo","5398228707871528"]})}),o(0,()=>{d({validator:"isEAN",valid:["9421023610112","1234567890128","4012345678901","9771234567003","9783161484100","73513537","00012345600012","10012345678902","20012345678909"],invalid:["5901234123451","079777681629","0705632085948"]})}),o(0,()=>{d({validator:"isISSN",valid:["0378-5955","0000-0000","2434-561X","2434-561x","01896016","20905076"],invalid:["0378-5954","0000-0001","0378-123","037-1234","0","2434-561c","1684-5370","19960791",""]}),d({validator:"isISSN",args:[{case_sensitive:!0}],valid:["2434-561X","2434561X","0378-5955","03785955"],invalid:["2434-561x","2434561x"]}),d({validator:"isISSN",args:[{require_hyphen:!0}],valid:["2434-561X","2434-561x","0378-5955"],invalid:["2434561X","2434561x","03785955"]}),d({validator:"isISSN",args:[{case_sensitive:!0,require_hyphen:!0}],valid:["2434-561X","0378-5955"],invalid:["2434-561x","2434561X","2434561x","03785955"]})}),o(0,()=>{d({validator:"isJSON",valid:['{ "key": "value" }',"{}"],invalid:['{ key: "value" }',"{ 'key': 'value' }","null","1234",'"nope"']})}),o(0,()=>{d({validator:"isJSON",args:[{allow_primitives:!0}],valid:['{ "key": "value" }',"{}","null","false","true"],invalid:['{ key: "value" }',"{ 'key': 'value' }",'{ "key": value }',"1234",'"nope"']})}),o(0,()=>{d({validator:"isMultibyte",valid:["\u3072\u3089\u304c\u306a\u30fb\u30ab\u30bf\u30ab\u30ca\u3001\uff0e\u6f22\u5b57","\u3042\u3044\u3046\u3048\u304a foobar","test\uff20example.com","1234abcDE\uff58\uff59\uff5a","\uff76\uff80\uff76\uff85","\u4e2d\u6587"],invalid:["abc","abc123",'<>@" *.']})}),o(0,()=>{d({validator:"isAscii",valid:["foobar","0987654321","[email protected]","1234abcDEF"],invalid:["\uff46\uff4f\uff4fbar","\uff58\uff59\uff5a\uff10\uff19\uff18","\uff11\uff12\uff13456","\uff76\uff80\uff76\uff85"]})}),o(0,()=>{d({validator:"isFullWidth",valid:["\u3072\u3089\u304c\u306a\u30fb\u30ab\u30bf\u30ab\u30ca\u3001\uff0e\u6f22\u5b57","\uff13\u30fc\uff10\u3000\uff41\uff20\uff43\uff4f\uff4d","\uff26\uff76\uff80\uff76\uff85\uff9e\uffac","Good\uff1dParts"],invalid:["abc","abc123",'!"#$%&()<>/+=-_? ~^|.,@`{}[]']})}),o(0,()=>{d({validator:"isHalfWidth",valid:['!"#$%&()<>/+=-_? ~^|.,@`{}[]',"l-btn_02--active","abc123\u3044","\uff76\uff80\uff76\uff85\uff9e\uffac\uffe9"],invalid:["\u3042\u3044\u3046\u3048\u304a","\uff10\uff10\uff11\uff11"]})}),o(0,()=>{d({validator:"isVariableWidth",valid:["\u3072\u3089\u304c\u306a\u30ab\u30bf\u30ab\u30ca\u6f22\u5b57ABCDE","\uff13\u30fc\uff10123","\uff26\uff76\uff80\uff76\uff85\uff9e\uffac","Good\uff1dParts"],invalid:["abc","abc123",'!"#$%&()<>/+=-_? ~^|.,@`{}[]',"\u3072\u3089\u304c\u306a\u30fb\u30ab\u30bf\u30ab\u30ca\u3001\uff0e\u6f22\u5b57","\uff11\uff12\uff13\uff14\uff15\uff16","\uff76\uff80\uff76\uff85\uff9e\uffac"]})}),o(0,()=>{d({validator:"isSurrogatePair",valid:["\ud842\udfb7\u91ce\ud842\udfb7","\ud867\ude3d","ABC\u5343\ud856\uddc41-2-3"],invalid:["\u5409\u91ce\u7ac8","\u9baa","ABC1-2-3"]})}),o(0,()=>{d({validator:"isSemVer",valid:["0.0.4","1.2.3","10.20.30","1.1.2-prerelease+meta","1.1.2+meta","1.1.2+meta-valid","1.0.0-alpha","1.0.0-beta","1.0.0-alpha.beta","1.0.0-alpha.beta.1","1.0.0-alpha.1","1.0.0-alpha0.valid","1.0.0-alpha.0valid","1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay","1.0.0-rc.1+build.1","2.0.0-rc.1+build.123","1.2.3-beta","10.2.3-DEV-SNAPSHOT","1.2.3-SNAPSHOT-123","1.0.0","2.0.0","1.1.7","2.0.0+build.1848","2.0.1-alpha.1227","1.0.0-alpha+beta","1.2.3----RC-SNAPSHOT.12.9.1--.12+788","1.2.3----R-S.12.9.1--.12+meta","1.2.3----RC-SNAPSHOT.12.9.1--.12","1.0.0+0.build.1-rc.10000aaa-kk-0.1","99999999999999999999999.999999999999999999.99999999999999999","1.0.0-0A.is.legal"],invalid:["-invalid+invalid","-invalid.01","alpha","alpha.beta","alpha.beta.1","alpha.1","alpha+beta","alpha_beta","alpha.","alpha..","beta","1.0.0-alpha_beta","-alpha.","1.0.0-alpha..","1.0.0-alpha..1","1.0.0-alpha...1","1.0.0-alpha....1","1.0.0-alpha.....1","1.0.0-alpha......1","1.0.0-alpha.......1","01.1.1","1.01.1","1.1.01","1.2","1.2.3.DEV","1.2-SNAPSHOT","1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788","1.2-RC-SNAPSHOT","-1.0.3-gamma+b7718","+justmeta","9.8.7+meta+meta","9.8.7-whatever+meta+meta","99999999999999999999999.999999999999999999.99999999999999999-","---RC-SNAPSHOT.12.09.1--------------------------------..12"]})}),o(0,()=>{d({validator:"isBase32",valid:["ZG======","JBSQ====","JBSWY===","JBSWY3A=","JBSWY3DP","JBSWY3DPEA======","K5SWYY3PNVSSA5DPEBXG6ZA=","K5SWYY3PNVSSA5DPEBXG6==="],invalid:["12345","","JBSWY3DPtesting123","ZG=====","Z======","Zm=8JBSWY3DP","=m9vYg==","Zm9vYm/y===="]})}),o(0,()=>{d({validator:"isBase32",args:[{crockford:!0}],valid:["91JPRV3F41BPYWKCCGGG","60","64","B5QQA833C5Q20S3F41MQ8"],invalid:["91JPRV3F41BUPYWKCCGGG","B5QQA833C5Q20S3F41MQ8L","60I","B5QQA833OULIC5Q20S3F41MQ8"]})}),o(0,()=>{d({validator:"isBase58",valid:["BukQL","3KMUV89zab","91GHkLMNtyo98","YyjKm3H","Mkhss145TRFg","7678765677","abcodpq","AAVHJKLPY"],invalid:["0OPLJH","IMKLP23","KLMOmk986","LL1l1985hG","*MP9K","Zm=8JBSWY3DP",")()(=9292929MKL"]})}),o(0,()=>{d({validator:"isMongoId",valid:["507f1f77bcf86cd799439011"],invalid:["507f1f77bcf86cd7994390","507f1f77bcf86cd79943901z","","507f1f77bcf86cd799439011 "]})}),o(0,()=>{let a=[];[{locale:"am-AM",valid:["+37433123456","+37441123456","+37443123456","+37444123456","+37455123456","+37477123456","+37488123456","+37491123456","+37493123456","+37494123456","+37495123456","+37496123456","+37498123456","+37499123456","055123456","37455123456"],invalid:["12345","+37403498855","+37416498123","05614988556","","37456789000","37486789000","+37431312345","+37430312345","+37460123456","+37410324123","+37422298765","+37431276521","022698763","+37492123456"]},{locale:"ar-AE",valid:["+971502674453","+971521247658","+971541255684","+971555454458","+971561498855","+971585215778","971585215778","0585215778","585215778"],invalid:["12345","+971511498855","+9715614988556","+9745614988556","","+9639626626262","+963332210972","0114152198","962796477263"]},{locale:"ar-BH",valid:["+97335078110","+97339534385","+97366331055","+97333146000","97335078110","35078110","66331055"],invalid:["12345","+973350781101","+97379534385","+973035078110","","+9639626626262","+963332210972","0114152198","962796477263","035078110","16331055","hello","+9733507811a"]},{locale:"ar-EG",valid:["+201004513789","+201111453489","+201221204610","+201144621154","+201200124304","+201011201564","+201124679001","+201064790156","+201274652177","+201280134679","+201090124576","+201583728900","201599495596","201090124576","01090124576","01538920744","1593075993","1090124576"],invalid:["+221004513789","+201404513789","12345","","+9639626626262","+963332210972","0114152198","962796477263"]},{locale:"ar-JO",valid:["0796477263","0777866254","0786725261","+962796477263","+962777866254","+962786725261","962796477263","962777866254","962786725261"],invalid:["00962786725261","00962796477263","12345","","+9639626626262","+963332210972","0114152198"]},{locale:"ar-KW",valid:["96550000000","96560000000","96590000000","96541000000","+96550000000","+96550000220","+96551111220","+96541000000"],invalid:["+96570000220","00962786725261","00962796477263","12345","","+9639626626262","+963332210972","0114152198","+96540000000"]},{locale:"ar-LB",valid:["+96171234568","+9613123456","3456123","3123456","81978468","77675798"],invalid:["+961712345688888","00912220000","7767579888","+0921110000","+3123456888","021222200000","213333444444","","+212234","+21","02122333"]},{locale:"ar-LY",valid:["912220000","0923330000","218945550000","+218958880000","212220000","0212220000","+218212220000"],invalid:["9122220000","00912220000","09211110000","+0921110000","+2180921110000","021222200000","213333444444","","+212234","+21","02122333"]},{locale:"ar-MA",valid:["0522714782","0690851123","0708186135","+212522714782","+212690851123","+212708186135","00212522714782","00212690851123","00212708186135"],invalid:["522714782","690851123","708186135","212522714782","212690851123","212708186135","0212522714782","0212690851123","0212708186135","","12345","0922714782","+212190851123","00212408186135"]},{locale:"dz-BT",valid:["+97517374354","+97517454971","77324646","016329712","97517265559"],invalid:["","9898347255","+96326626262","963372","0114152198"]},{locale:"ar-OM",valid:["+96891212121","+96871212121","0096899999999","93112211","99099009"],invalid:["+96890212121","0096890999999","0090999999","+9689021212","","+212234","+21","02122333"]},{locale:"ar-PS",valid:["+970563459876","970592334218","0566372345","0598273583"],invalid:["+9759029487","97059123456789","598372348","97058aaaafjd","","05609123484","+97059","+970","97056"]},{locale:"ar-SY",valid:["0944549710","+963944549710","956654379","0944549710","0962655597"],invalid:["12345","","+9639626626262","+963332210972","0114152198"]},{locale:"ar-SA",valid:["0556578654","+966556578654","966556578654","596578654","572655597"],invalid:["12345","","+9665626626262","+96633221097","0114152198"]},{locale:"ar-SD",valid:["0128652312","+249919425113","249123212345","0993212345"],invalid:["12345","","+249972662622","+24946266262","+24933221097","0614152198","096554"]},{locale:"ar-TN",valid:["23456789","+21623456789","21623456789"],invalid:["12345","75200123","+216512345678","13520459","85479520"]},{locale:"bg-BG",valid:["+359897123456","+359898888888","0897123123"],invalid:["","0898123","+359212555666","18001234567","12125559999"]},{locale:"bn-BD",valid:["+8801794626846","01399098893","8801671163269","01717112029","8801898765432","+8801312345678","01494676946"],invalid:["","0174626346","017943563469","18001234567","0131234567"]},{locale:"bs-BA",valid:["060123456","061123456","062123456","063123456","0641234567","065123456","066123456","+38760123456","+38761123456","+38762123456","+38763123456","+387641234567","+38765123456","+38766123456","0038760123456","0038761123456","0038762123456","0038763123456","00387641234567","0038765123456","0038766123456"],invalid:["0601234567","0611234567","06212345","06312345","064123456","0651234567","06612345","+3866123456","+3856123456","00038760123456","038761123456"]},{locale:"cs-CZ",valid:["+420 123 456 789","+420 123456789","+420123456789","123 456 789","123456789"],invalid:["","+42012345678","+421 123 456 789","+420 023456789","+4201234567892"]},{locale:"sk-SK",valid:["+421 123 456 789","+421 123456789","+421123456789","123 456 789","123456789"],invalid:["","+42112345678","+422 123 456 789","+421 023456789","+4211234567892"]},{locale:"de-DE",valid:["+4915123456789","015123456789","015123456789","015623456789","015623456789","01601234567","016012345678","01621234567","01631234567","01701234567","017612345678"],invalid:["+4930405044550","34412345678","14412345678","16212345678","1761234567","16412345678","17012345678","+4912345678910","+49015123456789","015345678910","015412345678"]},{locale:"de-AT",valid:["+436761234567","06761234567","00436123456789","+436123456789","01999","+4372876","06434908989562345"],invalid:["167612345678","1234","064349089895623459"]},{locale:"hu-HU",valid:["06301234567","+36201234567","06701234567"],invalid:["1234","06211234567","+3620123456"]},{locale:"mz-MZ",valid:["+258849229754","258849229754","849229754","829229754","839229754","869229754","859229754","869229754","879229754","+258829229754","+258839229754","+258869229754","+258859229754","+258869229754","+258879229754","258829229754","258839229754","258869229754","258859229754","258869229754","258879229754"],invalid:["+248849229754","158849229754","249229754","819229754","899229754","889229754","89229754","8619229754","87922975411","257829229754","+255839229754","+2258869229754","+1258859229754","+2588692297541","+2588792519754","25882922975411"]},{locale:"pt-BR",valid:["+55 12 996551215","+55 15 97661234","+55 (12) 996551215","+55 (15) 97661234","55 (17) 96332-2155","55 (17) 6332-2155","55 15 976612345","55 15 75661234","+5512984567890","+551283456789","5512984567890","551283456789","015994569878","01593456987","022995678947","02299567894","(22)99567894","(22)9956-7894","(22) 99567894","(22) 9956-7894","(22)999567894","(22)99956-7894","(22) 999567894","(22) 99956-7894","(11) 94123-4567","(11) 91431-4567","+55 (11) 91431-4567","+55 11 91431-4567","+551191431-4567","5511914314567","5511912345678"],invalid:["0819876543","+55 15 7566123","+017 123456789","5501599623874","+55012962308","+55 015 1234-3214","+55 11 90431-4567","+55 (11) 90431-4567","+551190431-4567","5511904314567","5511902345678","(11) 90431-4567"]},{locale:"zh-CN",valid:["13523333233","13838389438","14899230918","14999230918","15323456787","15052052020","16237108167","008616238234822","+8616238234822","16565600001","17269427292","17469427292","18199617480","19151751717","19651751717","+8613238234822","+8613487234567","+8617823492338","+8617823492338","+8616637108167","+8616637108167","+8616712341234","+8619912341234","+8619812341234","+8619712341234","+8619612341234","+8619512341234","+8619312341234","+8619212341234","+8619112341234","+8617269427292","008618812341234","008618812341234","008617269427292","92138389438","+8692138389438","008692138389438","98199649964","+8698099649964","008698099649964"],invalid:["12345","","12038389438","12838389438","013838389438","+86-13838389438","+08613811211114","+008613811211114","08613811211114","0086-13811211114","0086-138-1121-1114","Vml2YW11cyBmZXJtZtesting123","010-38238383"]},{locale:"zh-TW",valid:["0987123456","+886987123456","886987123456","+886-987123456","886-987123456"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","0-987123456"]},{locale:"en-LS",valid:["+26622123456","+26628123456","+26657123456","+26658123456","+26659123456","+26627123456","+26652123456"],invalid:["+26612345678","","2664512-21","+2662212345678","someString"]},{locale:"en-BM",valid:["+14417974653","14413986653","4415370973","+14415005489"],invalid:["85763287","+14412020436","+14412236546","+14418245567","+14416546789","44087635627","+4418970973","","+1441897465","+1441897465 additional invalid string part"]},{locale:"en-BS",valid:["+12421231234","2421231234","+1-2421231234","+1-242-123-1234","(242)-123-1234","+1 (242)-123-1234","242 123-1234","(242) 123 1234"],invalid:["85763287","+1 242 12 12 12 12","+1424123123","+14418245567","+14416546789","not a number",""]},{locale:"en-ZA",valid:["0821231234","+27821231234","27821231234"],invalid:["082123","08212312345","21821231234","+21821231234","+0821231234"]},{locale:"en-AU",valid:["61404111222","+61411222333","0417123456"],invalid:["082123","08212312345","21821231234","+21821231234","+0821231234","04123456789"]},{locale:"es-BO",valid:["+59175553635","+59162223685","+59179783890","+59160081890","79783890","60081890"],invalid:["082123","08212312345","21821231234","+21821231234","+59199783890"]},{locale:"en-GG",valid:["+441481123456","+441481789123","441481123456","441481789123"],invalid:["999","+441481123456789","+447123456789"]},{locale:"en-GH",valid:["0202345671","0502345671","0242345671","0542345671","0532345671","0272345671","0572345671","0262345671","0562345671","0232345671","0282345671","+233202345671","+233502345671","+233242345671","+233542345671","+233532345671","+233272345671","+233572345671","+233262345671","+233562345671","+233232345671","+233282345671","+233592349493","0550298219"],invalid:["082123","232345671","0292345671","+233292345671"]},{locale:"en-GY",valid:["+5926121234","06121234","06726381","+5926726381"],invalid:["5926121234","6121234","+592 6121234","05926121234","+592-6121234"]},{locale:"en-HK",valid:["91234567","9123-4567","61234567","51234567","+85291234567","+852-91234567","+852-9123-4567","+852 9123 4567","9123 4567","852-91234567"],invalid:["999","+852-912345678","123456789","+852-1234-56789"]},{locale:"en-MO",valid:["61234567","+85361234567","+853-61234567","+853-6123-4567","+853 6123 4567","6123 4567","853-61234567"],invalid:["999","12345678","612345678","+853-12345678","+853-22345678","+853-82345678","+853-612345678","+853-1234-5678","+853 1234 5678","+853-6123-45678"]},{locale:"en-IE",valid:["+353871234567","353831234567","353851234567","353861234567","353871234567","353881234567","353891234567","0871234567","0851234567"],invalid:["999","+353341234567","+33589484858","353841234567","353811234567"]},{locale:"en-JM",valid:["+8761021234","8761211234","8763511274","+8764511274"],invalid:["999","+876102123422","+8861021234","8761021212213","876102123"]},{locale:"en-KE",valid:["+254728590432","+254733875610","254728590234","0733346543","0700459022","0110934567","+254110456794","254198452389"],invalid:["999","+25489032","123456789","+254800723845"]},{locale:"fr-CF",valid:["+23670850000","+23675038756","+23677859002","+23672854202","+23621854052","+23622854072","72234650","70045902","77934567","21456794","22452389"],invalid:["+23689032","123456789","+236723845987","022452389","+236772345678","+236700456794"]},{locale:"en-KI",valid:["+68673140000","68673059999","+68663000000","68663019999"],invalid:["+68653000000","68664019999","+68619019999","686123456789","+686733445"]},{locale:"en-MT",valid:["+35699000000","+35679000000","99000000"],invalid:["356","+35699000","+35610000000"]},{locale:"en-PH",valid:["+639275149120","+639275142327","+639003002023","09275149116","09194877624"],invalid:["12112-13-345","12345678901","sx23YW11cyBmZxxXJt123123","010-38238383","966684123123-2590"]},{locale:"en-UG",valid:["+256728590432","+256733875610","256728590234","0773346543","0700459022"],invalid:["999","+254728590432","+25489032","123456789","+254800723845"]},{locale:"en-RW",valid:["+250728590432","+250733875610","250738590234","0753346543","0780459022"],invalid:["999","+254728590432","+25089032","123456789","+250800723845"]},{locale:"en-TZ",valid:["+255728590432","+255733875610","255628590234","0673346543","0600459022"],invalid:["999","+254728590432","+25589032","123456789","+255800723845"]},{locale:"en-MW",valid:["+265994563785","+265111785436","+265318596857","0320008744","01256258","0882541896","+265984563214"],invalid:["58563","+2658256258","0896328741","0708574896","+26570857489635"]},{locale:"es-PE",valid:["+51912232764","+51923464567","+51968267382","+51908792973","974980472","908792973","+51974980472"],invalid:["999","+51812232764","+5181223276499","+25589032","123456789"]},{locale:"fr-FR",valid:["0612457898","+33612457898","33612457898","0712457898","+33712457898","33712457898"],invalid:["061245789","06124578980","0112457898","0212457898","0312457898","0412457898","0512457898","0812457898","0912457898","+34612457898","+336124578980","+3361245789"]},{locale:"fr-BF",valid:["+22661245789","+22665903092","+22672457898","+22673572346","061245789","071245783"],invalid:["0612457892","06124578980","0112457898","0212457898","0312457898","0412457898","0512457898","0812457898","0912457898","+22762457898","+226724578980","+22634523"]},{locale:"fr-BJ",valid:["+22920215789","+22920293092","+22921307898","+22921736346","+22922416346","+22923836346"],invalid:["0612457892","01122921737346","+22762457898","+226724578980","+22634523"]},{locale:"fr-CA",valid:["19876543210","8005552222","+15673628910"],invalid:["564785","0123456789","1437439210","+10345672645","11435213543"]},{locale:"fr-CD",valid:["+243818590432","+243893875610","243978590234","0813346543","0820459022","+243902590221"],invalid:["243","+254818590432","+24389032","123456789","+243700723845"]},{locale:"fr-GF",valid:["0612457898","+594612457898","594612457898","0712457898","+594712457898","594712457898"],invalid:["061245789","06124578980","0112457898","0212457898","0312457898","0412457898","0512457898","0812457898","0912457898","+54612457898","+5946124578980","+59461245789"]},{locale:"fr-GP",valid:["0612457898","+590612457898","590612457898","0712457898","+590712457898","590712457898"],invalid:["061245789","06124578980","0112457898","0212457898","0312457898","0412457898","0512457898","0812457898","0912457898","+594612457898","+5906124578980","+59061245789"]},{locale:"fr-MQ",valid:["0612457898","+596612457898","596612457898","0712457898","+596712457898","596712457898"],invalid:["061245789","06124578980","0112457898","0212457898","0312457898","0412457898","0512457898","0812457898","0912457898","+594612457898","+5966124578980","+59661245789"]},{locale:"fr-RE",valid:["0612457898","+262612457898","262612457898","0712457898","+262712457898","262712457898"],invalid:["061245789","06124578980","0112457898","0212457898","0312457898","0412457898","0512457898","0812457898","0912457898","+264612457898","+2626124578980","+26261245789"]},{locale:"fr-PF",valid:["87123456","88123456","89123456","+68987123456","+68988123456","+68989123456","68987123456","68988123456","68989123456"],invalid:["7123456","86123456","87 12 34 56","definitely not a number","01+68988123456","6898912345"]},{locale:"fr-WF",valid:["+681408500","+681499387","+681728590","+681808542","+681828540","+681832014","408500","499387","728590","808542","828540","832014"],invalid:["+68189032","123456789","+681723845987","022452389","+681772345678","+681700456794"]},{locale:"ka-GE",valid:["+995500011111","+995515352134","+995798526662","798526662","500011119","798526662","+995799766525"],invalid:["+99550001111","+9957997665250","+9959997665251","+995780011111","20000000000","68129485729","6589394827","298RI89572"]},{locale:"el-GR",valid:["+306944848966","306944848966","06904567890","6944848966","6904567890","6914567890","6934567890","6944567890","6954567890","6974567890","6984567890","6994567890","6854567890","6864567890","6874567890","6884567890","6894567890"],invalid:["2102323234","+302646041461","120000000","20000000000","68129485729","6589394827","298RI89572","6924567890","6964567890","6844567890","690456789","00690456789","not a number"]},{locale:"el-CY",valid:["96546247","96978927","+35799837145","+35799646792","96056927","99629593","99849980","3599701619","+3599148725","96537247","3596676533","+35795123455","+35797012204","35799123456","+35794123456","+35796123456"],invalid:["","somechars","9697892","998499803","33799837145","+3799646792","93056927"]},{locale:"en-GB",valid:["447789345856","+447861235675","07888814488"],invalid:["67699567","0773894868","077389f8688","+07888814488","0152456999","442073456754","+443003434751","05073456754","08001123123","07043425232","01273884231","03332654034"]},{locale:"en-SG",valid:["32891278","87654321","98765432","+6587654321","+6598765432","+6565241234"],invalid:["332891231","987654321","876543219","8765432","9876543","12345678","+98765432","+9876543212","+15673628910","19876543210","8005552222"]},{locale:"en-US",valid:["19876543210","8005552222","+15673628910","+1(567)3628910","+1(567)362-8910","+1(567) 362-8910","1(567)362-8910","1(567)362 8910","223-456-7890"],invalid:["564785","0123456789","1437439210","+10345672645","11435213543","1(067)362-8910","1(167)362-8910","+2(267)362-8910","+3365520145"]},{locale:"en-CA",valid:["19876543210","8005552222","+15673628910"],invalid:["564785","0123456789","1437439210","+10345672645","11435213543"]},{locale:"en-ZM",valid:["0956684590","0966684590","0976684590","+260956684590","+260966684590","+260976684590","260976684590","+260779493521","+260760010936"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","010-38238383","966684590","760010936"]},{locale:["en-ZW"],valid:["+263561890123","+263715558041","+263775551112","+263775551695","+263715556633"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","+2631234567890","+2641234567","+263981234","4736338855","66338855"]},{locale:["en-NA"],valid:["+26466189012","+26461555804","+26461434221","+26487555169","+26481555663"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","+2641234567890","+2641234567","+2648143422","+264981234","4736338855","66338855"]},{locale:"ru-RU",valid:["+79676338855","79676338855","89676338855","9676338855"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","010-38238383","+9676338855","19676338855","6676338855","+99676338855"]},{locale:"si-LK",valid:["+94766661206","94713114340","0786642116","078 7642116","078-7642116","0749994567"],invalid:["9912349956789","12345","1678123456","0731234567","0797878674"]},{locale:"sr-RS",valid:["0640133338","063333133","0668888878","+381645678912","+381611314000","0655885010"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","010-38238383","+9676338855","19676338855","6676338855","+99676338855"]},{locale:"en-NZ",valid:["+6427987035","642240512347","0293981646","029968425"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","+642956696123566","+02119620856","+9676338855","19676338855","6676338855","+99676338855"]},{locale:"en-MU",valid:["+23012341234","12341234","012341234"],invalid:["41234","","+230","+2301","+23012","+230123","+2301234","+23012341","+230123412","+2301234123","+230123412341","+2301234123412","+23012341234123"]},{locale:["nb-NO","nn-NO"],valid:["+4796338855","+4746338855","4796338855","4746338855","46338855","96338855"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","+4676338855","19676338855","+4726338855","4736338855","66338855"]},{locale:["ne-NP"],valid:["+9779817385479","+9779717385478","+9779862002615","+9779853660020"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","+97796123456789","+9771234567","+977981234","4736338855","66338855"]},{locale:"vi-VN",valid:["0336012403","+84586012403","84981577798","0708001240","84813601243","0523803765","0863803732","0883805866","0892405867","+84888696413","0878123456","84781234567","0553803765"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","010-38238383","260976684590","01678912345","+841698765432","841626543219","0533803765","08712345678","+0321234567"]},{locale:"es-AR",valid:["5491143214321","+5491143214321","+5492414321432","5498418432143"],invalid:["1143214321","91143214321","+91143214321","549841004321432","549 11 43214321","549111543214321","5714003425432","549114a214321","54 9 11 4321-4321"]},{locale:"es-CO",valid:["+573003321235","573003321235","3003321235","3213321235","3103321235","3243321235","573011140876"],invalid:["1234","+57443875615","57309875615","57109834567","5792434567","5702345689","5714003425432","5703013347567","069834567","969834567","579871235","574321235","5784321235","5784321235","9821235","0698345","3321235"]},{locale:"es-CL",valid:["+56733875615","56928590234","0928590294","0208590294"],invalid:["1234","+5633875615","563875615","56109834567","56069834567"]},{locale:"es-EC",valid:["+593987654321","593987654321","0987654321","027332615","+59323456789"],invalid:["03321321","+593387561","59312345677","02344635","593123456789","081234567","+593912345678","+593902345678","+593287654321","593287654321"]},{locale:"es-CR",valid:["+50688888888","+50665408090","+50640895069","25789563","85789563"],invalid:["+5081","+5067777777","+50188888888","+50e987643254","+506e4t4","-50688888888","50688888888","12345678","98765432","01234567"]},{locale:"es-CU",valid:["+5351234567","005353216547","51234567","53214567"],invalid:["1234","+5341234567","0041234567","41234567","11234567","21234567","31234567","60303456","71234567","81234567","91234567","+5343216547","+5332165498","+53121234567","","abc","+535123457","56043029304"]},{locale:"es-DO",valid:["+18096622563","+18295614488","+18495259567","8492283478","8092324576","8292387713"],invalid:["+18091","+1849777777","-18296643245","+18086643245","+18396643245","8196643245","+38492283478","6492283478","8192283478"]},{locale:"es-HN",valid:["+50495551876","+50488908787","+50493456789","+50489234567","+50488987896","+50497567389","+50427367389","+50422357389","+50431257389","+50430157389"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","+34683456543","65478932","+50298787654","+504989874"]},{locale:"es-ES",valid:["+34654789321","654789321","+34714789321","714789321","+34744789321","744789321"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","+3465478932","65478932","+346547893210","6547893210","+3470478932","7047893210","+34854789321","7547893219"]},{locale:"es-MX",valid:["+52019654789321","+52199654789321","+5201965478932","+5219654789321","52019654789321","52199654789321","5201965478932","5219654789321","87654789321","8654789321","0187654789321","18654789321"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","+3465478932","65478932","+346547893210","+34704789321","704789321","+34754789321"]},{locale:"es-NI",valid:["+5051234567","+50512345678","5051234567","50512345678","+50555555555"],invalid:["1234","","1234567","12345678","+12345678","+505123456789","+50612345678","+50712345678","-50512345678"]},{locale:"es-PA",valid:["+5076784565","+5074321557","5073331112","+50723431212"],invalid:["+50755555","+207123456","2001236542","+507987643254","+507jjjghtf"]},{locale:"es-PY",valid:["+595991372649","+595992847352","+595993847593","+595994857473","+595995348532","+595996435231","+595981847362","+595982435452","+595983948502","+595984342351","+595985403481","+595986384012","+595971435231","+595972103924","+595973438542","+595974425864","+595975425843","+595976342546","+595961435234","+595963425043"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","65478932","+59599384712","+5959938471234","+595547893218","+591993546843"]},{locale:"es-SV",valid:["62136634","50361366631","+50361366634","+50361367217","+50361367460","+50371367632","+50371367767","+50371368314"],invalid:["+5032136663","21346663","+50321366663","12345","El salvador","this should fail","+5032222","+503 1111 1111","00 +503 1234 5678"]},{locale:"es-UY",valid:["+59899123456","099123456","+59894654321","091111111"],invalid:["54321","montevideo","","+598099123456","090883338","099 999 999"]},{locale:"es-VE",valid:["+582125457765","+582125458053","+584125458053"],invalid:["+585129934395","+58212993439",""]},{locale:"et-EE",valid:["+372 512 34 567","372 512 34 567","+37251234567","51234567","81234567","+372842345678"],invalid:["12345","","NotANumber","+333 51234567","61234567","+51234567","+372 539 57 4","+372 900 1234","12345678"]},{locale:"pl-PL",valid:["+48512689767","+48 56 376 87 47","56 566 78 46","657562855","+48657562855","+48 887472765","+48 56 6572724","+48 67 621 5461","48 67 621 5461","+48 45 621 5461"],invalid:["+48  67 621 5461","+55657562855","3454535","teststring","","1800-88-8687","+6019-5830837","357562855","+48 44 621 5461"]},{locale:"fa-IR",valid:["+989123456789","989223456789","09323456789","09021456789","+98-990-345-6789","+98 938 345 6789","0938 345 6789"],invalid:["","+989623456789","+981123456789","01234567890","09423456789","09823456789","9123456789","091234567890","0912345678","+98 912 3456 6789","0912 345 678"]},{locale:"fi-FI",valid:["+358505557171","0455571","0505557171","358505557171","04412345","0457 123 45 67","+358457 123 45 67","+358 50 555 7171","0501234","+358501234","050 1234"],invalid:["12345","","045557","045555717112312332423423421","Vml2YW11cyBmZXJtZtesting123","010-38238383","+3-585-0555-7171","+9676338855","19676338855","6676338855","+99676338855","044123","019123456789012345678901"]},{locale:"fj-FJ",valid:["+6799898679","6793788679","+679 989 8679","679 989 8679","679 3456799","679908 8909"],invalid:["12345","","04555792","902w99900030900000000099","8uiuiuhhyy&GUU88d","010-38238383","19676338855","679 9 89 8679","6793 45679"]},{locale:"ms-MY",valid:["+60128228789","+60195830837","+6019-5830837","+6019-5830837","+6010-4357675","+60172012370","0128737867","0172012370","01468987837","01112347345","016-2838768","016 2838768"],invalid:["12345","601238788657","088387675","16-2838768","032551433","6088-387888","088-261987","1800-88-8687","088-320000","+01112353576","+0111419752"]},{locale:"fr-CM",valid:["+237677936141","237623456789","+237698124842","237693029202"],invalid:["NotANumber","+(703)-572-2920","+237 623 45 67 890","+2379981247429"]},{locale:"ko-KR",valid:["+82-010-1234-5678","+82-10-1234-5678","82-010-1234-5678","82-10-1234-5678","+82 10 1234 5678","010-123-5678","10-1234-5678","+82 10 1234 5678","011 1234 5678","+820112345678","01012345678","+82 016 1234 5678","82 19 1234 5678","+82 010 12345678"],invalid:["abcdefghi","+82 10 1234 567","+82 10o 1234 1234","+82 101 1234 5678","+82 10 12 5678","+011 7766 1234","011_7766_1234","+820 11 7766 1234"]},{locale:"ky-KG",valid:["+996553033300","+996 222 123456","+996 500 987654","+996 555 111222","+996 700 333444","+996 770 555666","+996 880 777888","+996 990 999000","+996 995 555666","+996 996 555666","+996 997 555666","+996 998 555666"],invalid:["+996 201 123456","+996 312 123456","+996 3960 12345","+996 3961 12345","+996 3962 12345","+996 3963 12345","+996 3964 12345","+996 3965 12345","+996 3966 12345","+996 3967 12345","+996 3968 12345","+996 511 123456","+996 522 123456","+996 561 123456","+996 571 123456","+996 624 123456","+996 623 123456","+996 622 123456","+996 609 123456","+996 100 12345","+996 100 1234567","996 100 123456","0 100 123456","0 100 123abc"]},{locale:"ja-JP",valid:["09012345678","08012345678","07012345678","06012345678","090 1234 5678","+8190-1234-5678","+81 (0)90-1234-5678","+819012345678","+81-(0)90-1234-5678","+81 90 1234 5678"],invalid:["12345","","045555717112312332423423421","Vml2YW11cyBmZXJtZtesting123","+3-585-0555-7171","0 1234 5689","16 1234 5689","03_1234_5689","0312345678","0721234567","06 1234 5678","072 123 4567","0729 12 3456","07296 1 2345","072961 2345","03-1234-5678","+81312345678","+816-1234-5678","+81 090 1234 5678","+8109012345678","+81-090-1234-5678","90 1234 5678"]},{locale:"ir-IR",valid:["09023818688","09123809999","+989023818688","+989103923523"],invalid:["19023818688","323254","+903232323257","++3567868","0902381888832"]},{locale:"it-IT",valid:["370 3175423","333202925","+39 310 7688449","+39 3339847632"],invalid:["011 7387545","12345","+45 345 6782395"]},{locale:"fr-BE",valid:["0470123456","+32470123456","32470123456","0421234567","+32421234567","32421234567"],invalid:["12345","+3212345","3212345","04701234567","+3204701234567","3204701234567","0212345678","+320212345678","320212345678","021234567","+3221234567","3221234567"]},{locale:"nl-BE",valid:["0470123456","+32470123456","32470123456","0421234567","+32421234567","32421234567"],invalid:["12345","+3212345","3212345","04701234567","+3204701234567","3204701234567","0212345678","+320212345678","320212345678","021234567","+3221234567","3221234567"]},{locale:"nl-NL",valid:["0670123456","0612345678","31612345678","31670123456","+31612345678","+31670123456","+31(0)612345678","0031612345678","0031(0)612345678"],invalid:["12345","+3112345","3112345","06701234567","012345678","+3104701234567","3104701234567","0212345678","021234567","+3121234567","3121234567","+310212345678","310212345678"]},{locale:"nl-AW",valid:["2975612345","2976412345","+2975612345","+2975912345","+2976412345","+2977312345","+2977412345","+2979912345"],invalid:["12345","+2972345","2972345","06701234567","012345678","+2974701234567","2974701234567","0297345678","029734567","+2971234567","2971234567","+297212345678","297212345678","number"]},{locale:"ro-MD",valid:["+37360375781","+37361945673","+37362387563","+37368447788","+37369000101","+37367568910","+37376758294","+37378457892","+37379067436","37362387563","37368447788","37369000101","37367568910"],invalid:["","+37363373381","+37364310581","+37365578199","+37371088636","Vml2YW11cyBmZXJtZtesting123","123456","740123456","+40640123456","+40210123456"]},{locale:"ro-RO",valid:["+40740123456","+40 740123456","+40740 123 456","+40740.123.456","+40740-123-456","40740123456","40 740123456","40740 123 456","40740.123.456","40740-123-456","0740123456","0740/123456","0740 123 456","0740.123.456","0740-123-456"],invalid:["","Vml2YW11cyBmZXJtZtesting123","123456","740123456","+40640123456","+40210123456","+0765351689","+0711419752"]},{locale:"id-ID",valid:["0811 778 998","0811 7785 9983","0812 7784 9984","0813 7782 9982","0821 1234 1234","0822 1234 1234","0823 1234 1234","0852 1234 6764","0853 1234 6764","0851 1234 6764","0814 7782 9982","0815 7782 9982","0816 7782 9982","0855 7782 9982","0856 7782 9982","0857 7782 9982","0858 7782 9982","0817 7785 9983","0818 7784 9984","0819 7782 9982","0859 1234 1234","0877 1234 1234","0878 1234 1234","0895 7785 9983","0896 7784 9984","0897 7782 9982","0898 1234 1234","0899 1234 1234","0881 7785 9983","0882 7784 9984","0883 7782 9982","0884 1234 1234","0886 1234 1234","0887 1234 1234","0888 7785 9983","0889 7784 9984","0828 7784 9984","0838 7784 9984","0831 7784 9984","0832 7784 9984","0833 7784 9984","089931236181900","62811 778 998","62811778998","628993123618190","62898 740123456","62899 7401 2346","+62811 778 998","+62811778998","+62812 9650 3508","08197231819","085361008008","+62811787391"],invalid:["0899312361819001","0217123456","622178878890","6221 740123456","0341 8123456","0778 89800910","0741 123456","+6221740123456","+65740 123 456","","ASDFGJKLmZXJtZtesting123","123456","740123456","+65640123456","+64210123456"]},{locale:"lt-LT",valid:["+37051234567","851234567"],invalid:["+65740 123 456","","ASDFGJKLmZXJtZtesting123","123456","740123456","+65640123456","+64210123456"]},{locale:"uk-UA",valid:["+380501234567","+380631234567","+380661234567","+380671234567","+380681234567","+380731234567","+380751234567","+380771234567","+380911234567","+380921234567","+380931234567","+380941234567","+380951234567","+380961234567","+380971234567","+380981234567","+380991234567","380501234567","380631234567","380661234567","380671234567","380681234567","380731234567","380751234567","380771234567","380911234567","380921234567","380931234567","380941234567","380951234567","380961234567","380971234567","380981234567","380991234567","0501234567","0631234567","0661234567","0671234567","0681234567","0731234567","0751234567","0771234567","0911234567","0921234567","0931234567","0941234567","0951234567","0961234567","0971234567","0981234567","0991234567"],invalid:["+30982345679","+380321234567","+380441234567","982345679","80982345679","+380 98 234 5679","+380-98-234-5679","+380 (98) 234-56-79","","ASDFGJKLmZXJtZtesting123","123456","740123456"]},{locale:"uz-UZ",valid:["+998664835244","998664835244","664835244","+998957124555","998957124555","957124555"],invalid:["+998644835244","998644835244","644835244","+99664835244","ASDFGJKLmZXJtZtesting123","123456789","870123456","","+998","998"]},{locale:"da-DK",valid:["12345678","12 34 56 78","45 12345678","4512345678","45 12 34 56 78","+45 12 34 56 78"],invalid:["","+45010203","ASDFGJKLmZXJtZtesting123","123456","12 34 56","123 123 12"]},{locale:"sv-SE",valid:["+46701234567","46701234567","0721234567","073-1234567","0761-234567","079-123 45 67"],invalid:["12345","+4670123456","+46301234567","+0731234567","0731234 56","+7312345678",""]},{locale:"fo-FO",valid:["123456","12 34 56","298 123456","298123456","298 12 34 56","+298 12 34 56"],invalid:["","+4501020304","ASDFGJKLmZXJtZtesting123","12345678","12 34 56 78"]},{locale:"kl-GL",valid:["123456","12 34 56","299 123456","299123456","299 12 34 56","+299 12 34 56"],invalid:["","+4501020304","ASDFGJKLmZXJtZtesting123","12345678","12 34 56 78"]},{locale:"kk-KZ",valid:["+77254716212","77254716212","87254716212","7254716212"],invalid:["12345","","ASDFGJKLmZXJtZtesting123","010-38238383","+9676338855","19676338855","6676338855","+99676338855"]},{locale:"be-BY",valid:["+375241234567","+375251234567","+375291234567","+375331234567","+375441234567","375331234567"],invalid:["12345","","ASDFGJKLmZXJtZtesting123","010-38238383","+9676338855","19676338855","6676338855","+99676338855"]},{locale:"th-TH",valid:["0912345678","+66912345678","66912345678"],invalid:["99123456789","12345","67812345623","081234567891"]},{locale:"tk-TM",valid:["+99312495154","99312130136","+99312918407","99312183399","812391717"],invalid:["12345","+99412495154","99412495154","998900066506"]},{locale:"en-SL",valid:["+23274560591","23274560591","074560591"],invalid:["0745605912","12345","232745605917","0797878674","23274560591 "]},{locale:"en-BW",valid:["+26772868545","+26776368790","+26774560512","26774560591","26778560512","74560512","76710284"],invalid:["0799375902","12345","+2670745605448","2670745605482","+26779685451","+26770685451","267074560","2670ab5608","+267074560","70560512","79710284"]},{locale:"az-AZ",valid:["+994707007070","0707007070","+994502111111","0505436743","0554328772","0104328772","0993301022","+994776007139","+994106007139"],invalid:["wrong-number","","994707007070","++9945005050","556007070","1234566","+994778008080a"]},{locale:"de-LU",valid:["601123456","+352601123456"],invalid:["NaN","791234","+352791234","26791234","+35226791234","+112039812","+352703123456","1234"]},{locale:"it-SM",valid:["612345","05496123456","+37861234567","+390549612345678","+37805496123456789"],invalid:["61234567890","6123","1234567","+49123456","NotANumber"]},{locale:"so-SO",valid:["+252601234567","+252650101010","+252794567120","252650647388","252751234567","0601234567","0609876543"],invalid:["","not a number","+2526012345678","25260123456","+252705555555","+0601234567","06945454545"]},{locale:"sq-AL",valid:["0621234567","0661234567","0671234567","0681234567","0691234567","+355621234567","+355651234567","+355661234567","+355671234567","+355681234567","+355691234567"],invalid:["67123456","06712345","067123456","06712345678","0571234567","+3556712345","+35565123456","+35157123456","NotANumber"]},{locale:"ca-AD",valid:["+376312345","312345"],invalid:["31234","31234567","512345","NotANumber"]},{locale:"pt-AO",valid:["+244911123432","911123432","244911123432"],invalid:["+2449111234321","+244811123432","31234","31234567","512345","NotANumber"]},{locale:"lv-LV",valid:["+37121234567","37121234567"],invalid:["+37201234567","+3754321","3712123456","+371212345678","NotANumber"]},{locale:"mg-MG",valid:["+261204269174","261204269174","0204269174","0209269174","0374269174","4269174"],invalid:["0261204269174","+261 20 4 269174","+261 20 4269174","020 4269174","204269174","0404269174","NotANumber"]},{locale:"mn-MN",valid:["+97699112222","97696112222","97695112222","01197691112222","0097688112222","+97677112222","+97694112222","+97681112222"],invalid:["+97888112222","+97977112222","+97094112222","+97281112222","02297681112222"]},{locale:"my-MM",valid:["+959750202595","09750202595","9750202595","+959260000966","09256000323","09276000323","09426000323","09456000323","09761234567","09791234567","09961234567","09771234567","09660000234"],invalid:["59750202595","+9597502025","08943234524","09950000966","959240000966","09246000323","09466000323","09951234567","09801234567","09650000234"]},{locale:"en-PG",valid:["+67570123456","67570123456","+67571123456","+67572123456","+67573123456","+67574123456","+67575123456","+67576123456","+67577123456","+67578123456","+67579123456","+67581123456","+67588123456"],invalid:["","not a number","12345","+675123456789","+67580123456","+67569123456","+67582123456","+6757012345"]},{locale:"en-AG",valid:["12687151234","+12687151234","+12684641234","12684641234","+12687211234","+12687302468","+12687642456","+12687763333"],invalid:["2687151234","+12687773333","+126846412333","+12684641","+12687123456","+12687633456"]},{locale:"en-AI",valid:["+12642351234","12642351234","+12644612222","+12645366326","+12645376326","+12647246326","+12647726326"],invalid:["","not a number","+22642351234","+12902351234","+12642331234","+1264235","22642353456","+12352643456"]},{locale:"en-KN",valid:["+18694699040","18694699040","+18697652917","18697652917","18694658472","+18696622969","+18694882224"],invalid:["","+18694238545","+1 8694882224","8694658472","+186946990","+1869469904","1869469904"]},{locale:"en-PK",valid:["+923412877421","+923001234567","00923001234567","923001234567","03001234567"],invalid:["+3001234567","+933001234567","+924001234567","+92300123456720","030012345672","30012345673","0030012345673","3001234567"]},{locale:["tg-TJ"],valid:["+992553388551","+992553322551","992553388551","992553322551"],invalid:["12345","","Vml2YW11cyBmZXJtZtesting123","+995563388559","+9955633559","19676338855","+992263388505","9923633885","99255363885","66338855"]},{locale:"dv-MV",valid:["+9609112345","+9609958973","+9607258963","+9607958463","9609112345","9609958973","9607212963","9607986963","9112345","9958973","7258963","7958963"],invalid:["+96059234567","+96045789","7812463784","NotANumber","+9607112345","+9609012345","+609012345","+96071123456","3412345","9603412345"]},{locale:"ar-YE",valid:["737198225","733111355","+967700990270"],invalid:["+5032136663","21346663","+50321366663","12345","Yemen","this should fail","+5032222","+503 1111 1111","00 +503 1234 5678"]},{locale:"ar-EH",valid:["+212-5288-12312","+212-5288 12312","+212 5288 12312","212528912312","+212528912312","+212528812312"],invalid:["212528812312123","+212-5290-12312","++212528812312","12345","Wester Sahara","this should fail","212  5288---12312","+503 1111 1111","00 +503 1234 5678"]},{locale:"fa-AF",valid:["0511231231","+93511231231","+93281234567"],invalid:["212528812312123","+212-5290-12312","++212528812312","12345","Afghanistan","this should fail","212  5288---12312","+503 1111 1111","00 +503 1234 5678"]},{locale:"en-SS",valid:["+211928530422","+211913384561","+211972879174","+211952379334","0923346543","0950459022","0970934567","211979841238","211929843238","211959840238"],invalid:["911","+211999","123456789909","South Sudan","21195 840 238","+211981234567","+211931234567","+211901234567","+211991234567"]},{locale:"es-GT",valid:["+50221234567","+50277654321","50226753421","50272332468","50278984455","+50273472492","71234567","21132398"],invalid:["44","+5022712345678","1234567899","502712345678","This should fail","5021931234567","+50281234567"]},{locale:"mk-MK",valid:["+38923234567","38931234567","022123456","22234567","71234567","31234567","+38923091500","80091234","81123456","54123456"],invalid:["38912345678","+389123456789","21234567","123456789","+3891234567","700012345","510123456","This should fail","+389123456","389123456","80912345"]}].forEach(e=>{e.valid&&(a=a.concat(e.valid)),Array.isArray(e.locale),d({validator:"isMobilePhone",valid:e.valid,invalid:e.invalid,args:[e.locale]})}),d({validator:"isMobilePhone",valid:a.slice(0,20),invalid:["","asdf","1","ASDFGJKLmZXJtZtesting123","Vml2YW11cyBmZXJtZtesting123"],args:["any"]}),d({validator:"isMobilePhone",valid:["+254728530234","+299 12 34 56","+94766660206"],invalid:["254728530234","0728530234","+728530234","766667206","0766670206"],args:["any",{strictMode:!0}]}),d({validator:"isMobilePhone",valid:a.slice(0,20),invalid:["","asdf","1","ASDFGJKLmZXJtZtesting123","Vml2YW11cyBmZXJtZtesting123"],args:[]})}),d({validator:"isMobilePhone",valid:["+41751112233","+41761112233","+41771112233","+41781112233","+41791112233","+411122112211"],invalid:["+41041112233"],args:[]}),o(0,()=>{d({validator:"isMobilePhone",args:[{locale:["is-NOT"]}],error:["+123456789","012345"]})}),o(0,()=>{d({validator:"isCurrency",valid:["-$10,123.45","$10,123.45","$10123.45","10,123.45","10123.45","10,123","1,123,456","1123456","1.39",".03","0.10","$0.10","-$0.01","-$.99","$100,234,567.89","$10,123","10,123","-10123"],invalid:["1.234","$1.1","$ 32.50","500$",".0001","$.001","$0.001","12,34.56","123456,123,123456","123,4",",123","$-,123","$",".",",","00","$-","$-,.","-","-$","","- $"]}),d({validator:"isCurrency",args:[{allow_decimal:!1}],valid:["-$10,123","$10,123","$10123","10,123","10123","10,123","1,123,456","1123456","1","0","$0","-$0","$100,234,567","$10,123","10,123","-10123"],invalid:["-$10,123.45","$10,123.45","$10123.45","10,123.45","10123.45","1.39",".03","0.10","$0.10","-$0.01","-$.99","$100,234,567.89","1.234","$1.1","$ 32.50",".0001","$.001","$0.001","12,34.56","123,4",",123","$-,123","$",".",",","00","$-","$-,.","-","-$","","- $"]}),d({validator:"isCurrency",args:[{require_decimal:!0}],valid:["-$10,123.45","$10,123.45","$10123.45","10,123.45","10123.45","10,123.00","1.39",".03","0.10","$0.10","-$0.01","-$.99","$100,234,567.89"],invalid:["$10,123","10,123","-10123","1,123,456","1123456","1.234","$1.1","$ 32.50","500$",".0001","$.001","$0.001","12,34.56","123456,123,123456","123,4",",123","$-,123","$",".",",","00","$-","$-,.","-","-$","","- $"]}),d({validator:"isCurrency",args:[{digits_after_decimal:[1,3]}],valid:["-$10,123.4","$10,123.454","$10123.452","10,123.453","10123.450","10,123","1,123,456","1123456","1.3",".030","0.100","$0.1","-$0.0","-$.9","$100,234,567.893","$10,123","10,123.123","-10123.1"],invalid:["1.23","$1.13322","$ 32.50","500$",".0001","$.01","$0.01","12,34.56","123456,123,123456","123,4",",123","$-,123","$",".",",","00","$-","$-,.","-","-$","","- $"]}),d({validator:"isCurrency",args:[{require_symbol:!0}],valid:["-$10,123.45","$10,123.45","$10123.45","$10,123.45","$10,123","$1,123,456","$1123456","$1.39","$.03","$0.10","$0.10","-$0.01","-$.99","$100,234,567.89","$10,123","-$10123"],invalid:["1.234","$1.234","1.1","$1.1","$ 32.50"," 32.50","500","10,123,456",".0001","$.001","$0.001","1,234.56","123456,123,123456","$123456,123,123456","123.4","$123.4",",123","$,123","$-,123","$",".","$.",",","$,","00","$00","$-","$-,.","-","-$","","$ ","- $"]}),d({validator:"isCurrency",args:[{symbol:"\u00a5",negative_sign_before_digits:!0}],valid:["123,456.78","-123,456.78","\u00a56,954,231","\u00a5-6,954,231","\u00a510.03","\u00a5-10.03","10.03","1.39",".03","0.10","\u00a5-10567.01","\u00a50.01","\u00a51,234,567.89","\u00a510,123","\u00a5-10,123","\u00a5-10,123.45","10,123","10123","\u00a5-100"],invalid:["1.234","\u00a51.1","5,00",".0001","\u00a5.001","\u00a50.001","12,34.56","123456,123,123456","123 456",",123","\u00a5-,123",""," ","\u00a5","\u00a5-","\u00a5-,.","-","- \u00a5","-\u00a5"]}),d({validator:"isCurrency",args:[{negative_sign_after_digits:!0}],valid:["$10,123.45-","$10,123.45","$10123.45","10,123.45","10123.45","10,123","1,123,456","1123456","1.39",".03","0.10","$0.10","$0.01-","$.99-","$100,234,567.89","$10,123","10,123","10123-"],invalid:["-123","1.234","$1.1","$ 32.50","500$",".0001","$.001","$0.001","12,34.56","123456,123,123456","123,4",",123","$-,123","$",".",",","00","$-","$-,.","-","-$","","- $"]}),d({validator:"isCurrency",args:[{symbol:"\u00a5",allow_negatives:!1}],valid:["123,456.78","\u00a56,954,231","\u00a510.03","10.03","1.39",".03","0.10","\u00a50.01","\u00a51,234,567.89","\u00a510,123","10,123","10123","\u00a5100"],invalid:["1.234","-123,456.78","\u00a5-6,954,231","\u00a5-10.03","\u00a5-10567.01","\u00a51.1","\u00a5-10,123","\u00a5-10,123.45","5,00","\u00a5-100",".0001","\u00a5.001","\u00a5-.001","\u00a50.001","12,34.56","123456,123,123456","123 456",",123","\u00a5-,123",""," ","\u00a5","\u00a5-","\u00a5-,.","-","- \u00a5","-\u00a5"]}),d({validator:"isCurrency",args:[{symbol:"R",negative_sign_before_digits:!0,thousands_separator:" ",decimal_separator:",",allow_negative_sign_placeholder:!0}],valid:["123 456,78","-10 123","R-10 123","R 6 954 231","R10,03","10,03","1,39",",03","0,10","R10567,01","R0,01","R1 234 567,89","R10 123","R 10 123","R 10123","R-10123","10 123","10123"],invalid:["1,234","R -10123","R- 10123","R,1",",0001","R,001","R0,001","12 34,56","123456 123 123456"," 123","- 123","123 ",""," ","R","R- .1","R-","-","-R 10123","R00","R -","-R"]}),d({validator:"isCurrency",args:[{symbol:"\u20ac",thousands_separator:".",decimal_separator:",",allow_space_after_symbol:!0}],valid:["123.456,78","-123.456,78","\u20ac6.954.231","-\u20ac6.954.231","\u20ac 896.954.231","-\u20ac 896.954.231","16.954.231","-16.954.231","\u20ac10,03","-\u20ac10,03","10,03","-10,03","-1,39",",03","0,10","-\u20ac10567,01","-\u20ac 10567,01","\u20ac 0,01","\u20ac1.234.567,89","\u20ac10.123","10.123","-\u20ac10.123","\u20ac 10.123","\u20ac10.123","\u20ac 10123","10.123","-10123"],invalid:["1,234","\u20ac 1,1","50#,50","123,@\u20ac ","\u20ac\u20ac500",",0001","\u20ac ,001","\u20ac0,001","12.34,56","123456.123.123456","\u20ac123\u20ac",""," ","\u20ac"," \u20ac","\u20ac ","\u20ac\u20ac"," 123","- 123",".123","-\u20ac.123","123 ","\u20ac-","- \u20ac","\u20ac - ","-","- ","-\u20ac"]}),d({validator:"isCurrency",args:[{symbol:"\u20ac",thousands_separator:".",symbol_after_digits:!0,decimal_separator:",",allow_space_after_digits:!0}],valid:["123.456,78","-123.456,78","6.954.231 \u20ac","-6.954.231 \u20ac","896.954.231","-896.954.231","16.954.231","-16.954.231","10,03\u20ac","-10,03\u20ac","10,03","-10,03","1,39",",03","-,03","-,03 \u20ac","-,03\u20ac","0,10","10567,01\u20ac","0,01 \u20ac","1.234.567,89\u20ac","10.123\u20ac","10.123","10.123\u20ac","10.123 \u20ac","10123 \u20ac","10.123","10123"],invalid:["1,234","1,1 \u20ac",",0001",",001 \u20ac","0,001\u20ac","12.34,56","123456.123.123456","\u20ac123\u20ac",""," ","\u20ac"," \u20ac","\u20ac "," 123","- 123",".123","-.123\u20ac","-.123 \u20ac","123 ","-\u20ac","- \u20ac","-","- "]}),d({validator:"isCurrency",args:[{symbol:"kr.",negative_sign_before_digits:!0,thousands_separator:".",decimal_separator:",",allow_space_after_symbol:!0}],valid:["123.456,78","-10.123","kr. -10.123","kr.-10.123","kr. 6.954.231","kr.10,03","kr. -10,03","10,03","1,39",",03","0,10","kr. 10567,01","kr. 0,01","kr. 1.234.567,89","kr. -1.234.567,89","10.123","kr. 10.123","kr.10.123","10123","10.123","kr.-10123"],invalid:["1,234","kr.  -10123","kr.,1",",0001","kr. ,001","kr.0,001","12.34,56","123456.123.123456",".123","kr.-.123","kr. -.123","- 123","123 ",""," ","kr."," kr.","kr. ","kr.-","kr. -","kr. - "," - ","-","- kr.","-kr."]}),d({validator:"isCurrency",args:[{symbol:"kr.",allow_negatives:!1,negative_sign_before_digits:!0,thousands_separator:".",decimal_separator:",",allow_space_after_symbol:!0}],valid:["123.456,78","10.123","kr. 10.123","kr.10.123","kr. 6.954.231","kr.10,03","kr. 10,03","10,03","1,39",",03","0,10","kr. 10567,01","kr. 0,01","kr. 1.234.567,89","kr.1.234.567,89","10.123","kr. 10.123","kr.10.123","10123","10.123","kr.10123"],invalid:["1,234","-10.123","kr. -10.123","kr. -1.234.567,89","kr.-10123","kr.  -10123","kr.-10.123","kr. -10,03","kr.,1",",0001","kr. ,001","kr.0,001","12.34,56","123456.123.123456",".123","kr.-.123","kr. -.123","- 123","123 ",""," ","kr."," kr.","kr. ","kr.-","kr. -","kr. - "," - ","-","- kr.","-kr."]}),d({validator:"isCurrency",args:[{parens_for_negatives:!0}],valid:["1,234","(1,234)","($6,954,231)","$10.03","(10.03)","($10.03)","1.39",".03","(.03)","($.03)","0.10","$10567.01","($0.01)","$1,234,567.89","$10,123","(10,123)","10123"],invalid:["1.234","($1.1)","-$1.10","$ 32.50","500$",".0001","$.001","($0.001)","12,34.56","123456,123,123456","( 123)",",123","$-,123",""," ","  ","   ","$","$ "," $"," 123","(123) ",".",",","00","$-","$ - ","$- "," - ","-","- $","-$","()","( )","(  -)","(  - )","(  -  )","(-)","(-$)"]}),d({validator:"isCurrency",args:[{allow_negatives:!1}],valid:["$10,123.45","$10123.45","10,123.45","10123.45","10,123","1,123,456","1123456","1.39",".03","0.10","$0.10","$100,234,567.89","$10,123","10,123"],invalid:["1.234","-1.234","-10123","-$0.01","-$.99","$1.1","-$1.1","$ 32.50","500$",".0001","$.001","$0.001","12,34.56","123456,123,123456","-123456,123,123456","123,4",",123","$-,123","$",".",",","00","$-","$-,.","-","-$","","- $","-$10,123.45"]}),d({validator:"isCurrency",args:[{symbol:"R$",require_symbol:!0,allow_space_after_symbol:!0,symbol_after_digits:!1,thousands_separator:".",decimal_separator:","}],valid:["R$ 1.400,00","R$ 400,00"],invalid:["$ 1.400,00","$R 1.400,00"]})}),o(0,()=>{d({validator:"isEthereumAddress",valid:["0x0000000000000000000000000000000000000001","0x683E07492fBDfDA84457C16546ac3f433BFaa128","0x88dA6B6a8D3590e88E0FcadD5CEC56A7C9478319","0x8a718a84ee7B1621E63E680371e0C03C417cCaF6","0xFCb5AFB808b5679b4911230Aa41FfCD0cd335b42"],invalid:["0xGHIJK05pwm37asdf5555QWERZCXV2345AoEuIdHt","0xFCb5AFB808b5679b4911230Aa41FfCD0cd335b422222","0xFCb5AFB808b5679b4911230Aa41FfCD0cd33","0b0110100001100101011011000110110001101111","683E07492fBDfDA84457C16546ac3f433BFaa128","1C6o5CDkLxjsVpnLSuqRs1UBFozXLEwYvU"]})}),o(0,()=>{d({validator:"isBtcAddress",valid:["1MUz4VMYui5qY1mxUiG8BQ1Luv6tqkvaiL","mucFNhKMYoBQYUAEsrFVscQ1YaFQPekBpg","3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy","2NFUBBRcTJbYc1D4HSCbJhKZp6YCV4PQFpQ","bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq","14qViLJfdGaP4EeHnDyJbEGQysnCpwk3gd","35bSzXvRKLpHsHMrzb82f617cV4Srnt7hS","17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhemt","bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4","tb1qxhkl607frtvjsy9nlyeg03lf6fsq947pl2pe82","bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297","tb1pzpelffrdh9ptpaqnurwx30dlewqv57rcxfeetp86hsssk30p4cws38tr9y"],invalid:["3J98t1WpEZ73CNmQviecrnyiWrnqh0WNL0","3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLo","3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLI","3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLl","4J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy","0x56F0B8A998425c53c75C4A303D4eF987533c5597","pp8skudq3x5hzw8ew7vzsw8tn4k8wxsqsv0lt0mf3g","17VZNX1SN5NlKa8UQFxwQbFeFc3iqRYhem","BC1QW508D6QEJXTDG4Y5R3ZARVAYR0C5XW7KV8F3T4","bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3291","bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329b","bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329i","bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329o","BC1P5D7RJQ7G6RDK2YHZKS9SMLAQTEDR4DEKQ08GE8ZTWAC72SFR9RUSXG3297","TB1PZPELFFRDH9PTPAQNURWX30DLEWQV57RCXFEETP86HSSSK30P4CWS38TR9Y"]})}),o(0,()=>{d({validator:"isBoolean",valid:["true","false","0","1"],invalid:["1.0","0.0","true ","False","True","yes"]})}),o(0,()=>{d({validator:"isBoolean",args:[{loose:!0}],valid:["true","True","TRUE","false","False","FALSE","0","1","yes","Yes","YES","no","No","NO"],invalid:["1.0","0.0","true "," false"]})}),o(0,()=>{d({validator:"isISO6391",valid:["ay","az","ba","be","bg"],invalid:["aj","al","pe","pf","abc","123",""]})});const a=["2009-12T12:34","2009","2009-05-19","2009-05-19","20090519","2009123","2009-05","2009-123","2009-222","2009-001","2009-W01-1","2009-W51-1","2009-W511","2009-W33","2009W511","2009-05-19","2009-05-19 00:00","2009-05-19 14","2009-05-19 14:31","2009-05-19 14:39:22","2009-05-19T14:39Z","2009-W21-2","2009-W21-2T01:22","2009-139","2009-05-19 14:39:22-06:00","2009-05-19 14:39:22+0600","2009-05-19 14:39:22-01","20090621T0545Z","2007-04-06T00:00","2007-04-05T24:00","2010-02-18T16:23:48.5","2010-02-18T16:23:48,444","2010-02-18T16:23:48,3-06:00","2010-02-18T16:23.4","2010-02-18T16:23,25","2010-02-18T16:23.33+0600","2010-02-18T16.23334444","2010-02-18T16,2283","2009-05-19 143922.500","2009-05-19 1439,55","2009-10-10","2020-366","2000-366"],e=["200905","2009367","2009-","2007-04-05T24:50","2009-000","2009-M511","2009M511","2009-05-19T14a39r","2009-05-19T14:3924","2009-0519","2009-05-1914:39","2009-05-19 14:","2009-05-19r14:39","2009-05-19 14a39a22","200912-01","2009-05-19 14:39:22+06a00","2009-05-19 146922.500","2010-02-18T16.5:23.35:48","2010-02-18T16:23.35:48","2010-02-18T16:23.35:48.45","2009-05-19 14.5.44","2010-02-18T16:23.33.600","2010-02-18T16,25:23:48,444","2010-13-1","nonsense2021-01-01T00:00:00Z","2021-01-01T00:00:00Znonsense"];o(0,()=>{d({validator:"isISO8601",valid:a,invalid:e})}),o(0,()=>{d({validator:"isISO8601",args:[{strict:!0}],valid:a,invalid:e})}),o(0,()=>{d({validator:"isISO8601",args:[{strict:!0}],valid:["2000-02-29","2009-123","2009-222","2020-366","2400-366"],invalid:["2010-02-30","2009-02-29","2009-366","2019-02-31"]})}),o(0,()=>{d({validator:"isISO8601",args:[{strictSeparator:!0}],valid:["2009-12T12:34","2009","2009-05-19","2009-05-19","20090519","2009123","2009-05","2009-123","2009-222","2009-001","2009-W01-1","2009-W51-1","2009-W511","2009-W33","2009W511","2009-05-19","2009-05-19T14:39Z","2009-W21-2","2009-W21-2T01:22","2009-139","20090621T0545Z","2007-04-06T00:00","2007-04-05T24:00","2010-02-18T16:23:48.5","2010-02-18T16:23:48,444","2010-02-18T16:23:48,3-06:00","2010-02-18T16:23.4","2010-02-18T16:23,25","2010-02-18T16:23.33+0600","2010-02-18T16.23334444","2010-02-18T16,2283","2009-10-10","2020-366","2000-366"],invalid:["200905","2009367","2009-","2007-04-05T24:50","2009-000","2009-M511","2009M511","2009-05-19T14a39r","2009-05-19T14:3924","2009-0519","2009-05-1914:39","2009-05-19 14:","2009-05-19r14:39","2009-05-19 14a39a22","200912-01","2009-05-19 14:39:22+06a00","2009-05-19 146922.500","2010-02-18T16.5:23.35:48","2010-02-18T16:23.35:48","2010-02-18T16:23.35:48.45","2009-05-19 14.5.44","2010-02-18T16:23.33.600","2010-02-18T16,25:23:48,444","2010-13-1","2009-05-19 00:00","2009-05-19 14","2009-05-19 14:31","2009-05-19 14:39:22","2009-05-19 14:39:22-06:00","2009-05-19 14:39:22+0600","2009-05-19 14:39:22-01"]})}),o(0,()=>{d({validator:"isISO8601",args:[{strict:!0,strictSeparator:!0}],valid:["2000-02-29","2009-123","2009-222","2020-366","2400-366"],invalid:["2010-02-30","2009-02-29","2009-366","2019-02-31","2009-05-19 14","2009-05-19 14:31","2009-05-19 14:39:22","2009-05-19 14:39:22-06:00","2009-05-19 14:39:22+0600","2009-05-19 14:39:22-01"]})}),o(0,()=>{d({validator:"isISO15924",valid:["Adlm","Bass","Copt","Dsrt","Egyd","Latn","Zzzz"],invalid:["","arab","zzzz","Qaby","Lati"]})}),o(0,()=>{d({validator:"isRFC3339",valid:["2009-05-19 14:39:22-06:00","2009-05-19 14:39:22+06:00","2009-05-19 14:39:22Z","2009-05-19T14:39:22-06:00","2009-05-19T14:39:22Z","2010-02-18T16:23:48.3-06:00","2010-02-18t16:23:33+06:00","2010-02-18t16:23:33+06:00","2010-02-18t16:12:23.23334444z","2010-02-18T16:23:55.2283Z","2009-05-19 14:39:22.500Z","2009-05-19 14:39:55Z","2009-05-31 14:39:55Z","2009-05-31 14:53:60Z","2010-02-18t00:23:23.33+06:00","2010-02-18t00:23:32.33+00:00","2010-02-18t00:23:32.33+23:00"],invalid:["2010-02-18t00:23:32.33+24:00","2009-05-31 14:60:55Z","2010-02-18t24:23.33+0600","2009-05-00 1439,55Z","2009-13-19 14:39:22-06:00","2009-05-00 14:39:22+0600","2009-00-1 14:39:22Z","2009-05-19T14:39:22","nonsense2021-01-01T00:00:00Z","2021-01-01T00:00:00Znonsense"]})}),o(0,()=>{d({validator:"isISO31661Alpha2",valid:["FR","fR","GB","PT","CM","JP","PM","ZW","MM","cc","GG"],invalid:["","FRA","AA","PI","RP","WV","WL","UK","ZZ"]})}),o(0,()=>{d({validator:"isISO31661Alpha3",valid:["ABW","HND","KHM","RWA"],invalid:["","FR","fR","GB","PT","CM","JP","PM","ZW"]})}),o(0,()=>{d({validator:"isISO31661Numeric",valid:["076","208","276","348","380","410","440","528","554","826"],invalid:["","NL","NLD","002","197","249","569","810","900","999"]})}),o(0,()=>{d({validator:"isISO4217",valid:["AED","aed","AUD","CUP","EUR","GBP","LYD","MYR","SGD","SLE","USD","VED","SLE"],invalid:["","$","US","us","AAA","aaa","RWA","EURO","euro","HRK","CUC"]})}),o(0,()=>{d({validator:"isWhitelisted",args:["abcdefghijklmnopqrstuvwxyz-"],valid:["foo","foobar","baz-foo"],invalid:["foo bar","fo.bar","t\u00fcrk\u00e7e"]})}),o(0,()=>{d({validator:"isEmpty",error:[void 0,null,[],NaN]})}),o(0,()=>{d({validator:"isDataURI",valid:["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC","data:application/media_control+xml;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC","   data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC   ","data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%3E%3Crect%20fill%3D%22%2300B1FF%22%20width%3D%22100%22%20height%3D%22100%22%2F%3E%3C%2Fsvg%3E","data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIj48cmVjdCBmaWxsPSIjMDBCMUZGIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPjwvc3ZnPg=="," data:,Hello%2C%20World!"," data:,Hello World!"," data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D"," data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E","data:,A%20brief%20note","data:text/html;charset=US-ASCII,%3Ch1%3EHello!%3C%2Fh1%3E","data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,dGVzdC5kb2N4"],invalid:["dataxbase64","data:HelloWorld","data:,A%20brief%20invalid%20[note","file:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D","data:text/html;charset=,%3Ch1%3EHello!%3C%2Fh1%3E","data:text/html;charset,%3Ch1%3EHello!%3C%2Fh1%3E","data:base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC","","http://wikipedia.org","base64","iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC"]})}),o(0,()=>{d({validator:"isMagnetURI",valid:["magnet:?xt.1=urn:sha1:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456&xt.2=urn:sha1:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456","magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=helloword2000&tr=udp://helloworld:1337/announce","magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=foo","magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=&tr=&nonexisting=hello world","magnet:?xt=urn:md5:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456","magnet:?xt=urn:tree:tiger:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456","magnet:?xt=urn:ed2k:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234","magnet:?tr=udp://helloworld:1337/announce&xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234","magnet:?xt=urn:btmh:1220caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e"],invalid:[":?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234","xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234","magneta:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234","magnet:?xt=uarn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234","magnet:?xt=urn:btihz","magnet::?xt=urn:btih:UHWY2892JNEJ2GTEYOMDNU67E8ICGICYE92JDUGH","magnet:?xt:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ","magnet:?xt:urn:nonexisting:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234","magnet:?xt.2=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234","magnet:?xt=urn:ed2k:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890123456789ABCD","magnet:?xt=urn:btmh:1120caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e","magnet:?ttxt=urn:btmh:1220caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e"]})}),o(0,()=>{d({validator:"isLatLong",valid:["(-17.738223, 85.605469)","(-12.3456789, +12.3456789)","(-60.978437, -0.175781)","(77.719772, -37.529297)","(7.264394, 165.058594)","0.955766, -19.863281","(31.269161,164.355469)","+12.3456789, -12.3456789","-15.379543, -137.285156","(11.770570, -162.949219)","-55.034319, 113.027344","58.025555, 36.738281","55.720923,-28.652344","-90.00000,-180.00000","(-71, -146)","(-71.616864, -146.616864)","-0.55, +0.22","90, 180","+90, -180","-90,+180","90,180","0, 0"],invalid:["(020.000000, 010.000000000)","89.9999999989, 360.0000000","90.1000000, 180.000000","+90.000000, -180.00001","090.0000, 0180.0000","126, -158","(-126.400010, -158.400010)","-95, -96","-95.738043, -96.738043","137, -148","(-137.5942, -148.5942)","(-120, -203)","(-119, -196)","+119.821728, -196.821728","(-110, -223)","-110.369532, 223.369532","(-120.969949, +203.969949)","-116, -126","-116.894222, -126.894222","-112, -160","-112.96381, -160.96381","-90., -180.","+90.1, -180.1","(-17.738223, 85.605469","0.955766, -19.863281)","+,-","(,)",","," "]}),d({validator:"isLatLong",args:[{checkDMS:!0}],valid:["40\u00b0 26\u2032 46\u2033 N, 79\u00b0 58\u2032 56\u2033 W","40\u00b0 26\u2032 46\u2033 S, 79\u00b0 58\u2032 56\u2033 E","90\u00b0 0\u2032 0\u2033 S, 180\u00b0 0\u2032 0\u2033 E","40\u00b0 26\u2032 45.9996\u2033 N, 79\u00b0 58\u2032 55.2\u2033 E","40\u00b0 26\u2032 46\u2033 n, 79\u00b0 58\u2032 56\u2033 w","40\u00b026\u203246\u2033s, 79\u00b058\u203256\u2033e","11\u00b0 0\u2032 0.005\u2033 S, 180\u00b0 0\u2032 0\u2033 E","40\u00b026\u203245.9996\u2033N, 79\u00b058\u203255.2\u2033E"],invalid:["100\u00b0 26\u2032 46\u2033 N, 79\u00b0 70\u2032 56\u2033 W","40\u00b0 89\u2032 46\u2033 S, 79\u00b0 58\u2032 100\u2033 E","40\u00b0 26.445\u2032 45\u2033 N, 79\u00b0 58\u2032 55.2\u2033 E","40\u00b0 46\u2033 N, 79\u00b0 58\u2032 56\u2033 W"]})}),o(0,()=>{let a=[];[{locale:"AU",valid:["4000","2620","3000","2017","0800"]},{locale:"BD",valid:["1000","1200","1300","1400","1500","2000","3000","4000","5000","6000","7000","8000","9000","9400","9499"],invalid:["0999","9500","10000","12345","123","123456","abcd","123a","a123","12 34","12-34"]},{locale:"BY",valid:["225320","211120","247710","231960"],invalid:["test 225320","211120 test","317543","267946"]},{locale:"CA",valid:["L4T 0A5","G1A-0A2","A1A 1A1","X0A-0H0","V5K 0A1","A1C 3S4","A1C3S4","a1c 3s4","V9A 7N2","B3K 5X5","K8N 5W6","K1A 0B1","B1Z 0B9"],invalid:["        ","invalid value","a1a1a","A1A  1A1","K1A 0D1","W1A 0B1","Z1A 0B1"]},{locale:"CO",valid:["050034","110221","441029","910001"],invalid:["11001","000000","109999","329999"]},{locale:"ES",valid:["01001","52999","27880"],invalid:["123","1234","53000","052999","0123","abcde"]},{locale:"JP",valid:["135-0000","874-8577","669-1161","470-0156","672-8031"]},{locale:"GR",valid:["022 93","29934","90293","299 42","94944"]},{locale:"GB",valid:["TW8 9GS","BS98 1TL","DE99 3GG","DE55 4SW","DH98 1BT","DH99 1NS","GIR0aa","SA99","W1N 4DJ","AA9A 9AA","AA99 9AA","BS98 1TL","DE993GG"]},{locale:"FR",valid:["75008","44522","38499","39940","01000"],invalid:["44 522","38 499","96000","98025"]},{locale:"ID",valid:["10210","40181","55161","60233"]},{locale:"IE",valid:["A65 TF12","A6W U9U9"],invalid:["123","75690HG","AW5  TF12","AW5 TF12","756  90HG","A65T F12","O62 O1O2"]},{locale:"IN",valid:["364240","360005"],invalid:["123","012345","011111","101123","291123","351123","541123","551123","651123","661123","861123","871123","881123","891123"]},{locale:"IL",valid:["10200","10292","10300","10329","3885500","4290500","4286000","7080000"],invalid:["123","012345","011111","101123","291123","351123","541123","551123","651123","661123","861123","871123","881123","891123"]},{locale:"BG",valid:["1000"]},{locale:"IR",valid:["4351666456","5614736867"],invalid:["43516 6456","123443516 6456","891123","test 4351666456","4351666456 test","test 4351666456 test"]},{locale:"CZ",valid:["20134","392 90","39919","938 29","39949"]},{locale:"NL",valid:["1012 SZ","3432FE","1118 BH","3950IO","3997 GH"],invalid:["1234","0603 JV","5194SA","9164 SD","1841SS"]},{locale:"NP",valid:["10811","32600","56806","977"],invalid:["11977","asds","13 32","-977","97765"]},{locale:"PL",valid:["47-260","12-930","78-399","39-490","38-483","05-800","54-060"]},{locale:"TW",valid:["360","90312","399","935","38842","546023"]},{locale:"LI",valid:["9485","9497","9491","9489","9496"]},{locale:"PT",valid:["4829-489","0294-348","8156-392"]},{locale:"SE",valid:["12994","284 39","39556","489 39","499 49"]},{locale:"AD",valid:["AD100","AD200","AD300","AD400","AD500","AD600","AD700"]},{locale:"UA",valid:["65000","65080","01000","51901","51909","49125"]},{locale:"BR",valid:["39100-000","22040-020","39400-152","39100000","22040020","39400152"],invalid:["79800A12","13165-00","38175-abc","81470-2763","78908","13010|111"]},{locale:"NZ",valid:["7843","3581","0449","0984","4144"]},{locale:"PK",valid:["25000","44000","54810","74200"],invalid:["5400","540000","NY540","540CA","540-0"]},{locale:"MG",valid:["101","303","407","512"]},{locale:"MT",valid:["VLT2345","VLT 2345","ATD1234","MSK8723"]},{locale:"MY",valid:["56000","12000","79502"]},{locale:"PR",valid:["00979","00631","00786","00987"]},{locale:"AZ",valid:["AZ0100","AZ0121","AZ3500"],invalid:[""," AZ0100","AZ100","AZ34340","EN2020","AY3030"]},{locale:"DO",valid:["12345"],invalid:["A1234","123","123456"]},{locale:"HT",valid:["HT1234"],invalid:["HT123","HT12345","AA1234"]},{locale:"TH",valid:["10250","72170","12140"],invalid:["T1025","T72170","12140TH"]},{locale:"SG",valid:["308215","546080"]},{locale:"CN",valid:["150237","100000"],invalid:["141234","386789","ab1234"]},{locale:"KR",valid:["17008","339012"],invalid:["1412347","ab1234"]},{locale:"LK",valid:["11500","22200","10370","43000"],invalid:["1234","789389","982"]},{locale:"BA",valid:["76300","71000","75412","76100","88202","88313"],invalid:["1234","789389","98212","11000"]}].forEach(e=>{e.valid&&(a=a.concat(e.valid)),d({validator:"isPostalCode",valid:e.valid,invalid:e.invalid,args:[e.locale]})}),d({validator:"isPostalCode",valid:[...a,"1234","6900","1292","9400","27616","90210","10001","21201","33142","060623","123456","293940","002920"],invalid:["asdf","1","ASDFGJKLmZXJtZtesting123","Vml2YW11cyBmZXJtZtesting123","48380480343","29923-329393-2324","4294924224","13"],args:["any"]})}),o(0,()=>{d({validator:"isPostalCode",args:["is-NOT"],error:["293940","1234"]})}),o(0,()=>{d({validator:"isMimeType",valid:["application/json","application/xhtml+xml","audio/mp4","image/bmp","font/woff2","message/http","model/vnd.gtw","application/media_control+xml","multipart/form-data","multipart/form-data; boundary=something","multipart/form-data; charset=utf-8; boundary=something","multipart/form-data; boundary=something; charset=utf-8",'multipart/form-data; boundary=something; charset="utf-8"','multipart/form-data; boundary="something"; charset=utf-8','multipart/form-data; boundary="something"; charset="utf-8"',"text/css","text/plain; charset=utf8",'Text/HTML;Charset="utf-8"',"text/html;charset=UTF-8","Text/html;charset=UTF-8","text/html; charset=us-ascii","text/html; charset=us-ascii (Plain text)",'text/html; charset="us-ascii"',"video/mp4"],invalid:[""," ","/","f/b","application","application\\json","application/json/text","application/json; charset=utf-8","audio/mp4; charset=utf-8","image/bmp; charset=utf-8","font/woff2; charset=utf-8","message/http; charset=utf-8","model/vnd.gtw; charset=utf-8","video/mp4; charset=utf-8"]})}),o(0,()=>{d({validator:"isISO6346",valid:["HLXU2008419","TGHU7599330","ECMU4657496","MEDU6246078","YMLU2809976","MRKU0046221","EMCU3811879","OOLU8643084","HJCU1922713","QJRZ123456"],invalid:["OOLU1922713","HJCU1922413","FCUI985619","ECMJ4657496","TBJA7176445","AFFU5962593"]})}),o(0,()=>{d({validator:"isFreightContainerID",valid:["HLXU2008419","TGHU7599330","ECMU4657496","MEDU6246078","YMLU2809976","MRKU0046221","EMCU3811879","OOLU8643084","HJCU1922713","QJRZ123456"],invalid:["OOLU1922713","HJCU1922413","FCUI985619","ECMJ4657496","TBJA7176445","AFFU5962593"]})}),o(0,()=>{d({validator:"isISO6346",valid:["APZU3789870","TEMU1002030","DFSU1704420","CMAU2221480","SEGU5060260","FCIU8939320","TRHU3495670","MEDU3871410","CMAU2184010","TCLU2265970"],invalid:["APZU3789871","TEMU1002031","DFSU1704421","CMAU2221481","SEGU5060261"]})}),o(0,()=>{d({validator:"isFreightContainerID",valid:["APZU3789870","TEMU1002030","DFSU1704420","CMAU2221480","SEGU5060260","FCIU8939320","TRHU3495670","MEDU3871410","CMAU2184010","TCLU2265970"],invalid:["APZU3789871","TEMU1002031","DFSU1704421","CMAU2221481","SEGU5060261"]})}),o(0,()=>{d({validator:"isTaxID",args:["bg-BG"],valid:["7501010010","0101010012","0111010010","7521010014","7541010019"],invalid:["750101001","75010100101","75-01010/01 0","7521320010","7501010019"]}),d({validator:"isTaxID",args:["cs-CZ"],valid:["530121999","530121/999","530121/9990","5301219990","1602295134","5451219994","0424175466","0532175468","7159079940"],invalid:["53-0121 999","530121000","960121999","0124175466","0472301754","1975116400","7159079945"]}),d({validator:"isTaxID",args:["de-AT"],valid:["931736581","93-173/6581","93--173/6581"],invalid:["999999999","93 173 6581","93-173/65811","93-173/658"]}),d({validator:"isTaxID",args:["de-DE"],valid:["26954371827","86095742719","65929970489","79608434120","659/299/7048/9"],invalid:["26954371828","86095752719","8609575271","860957527190","65299970489","65999970489","6592997048-9"]}),d({validator:"isTaxID",args:["dk-DK"],valid:["010111-1113","0101110117","2110084008","2110489008","2110595002","2110197007","0101110117","0101110230"],invalid:["010111/1113","010111111","01011111133","2110485008","2902034000","0101110630"]}),d({validator:"isTaxID",args:["el-CY"],valid:["00123123T","99652156X"],invalid:["99652156A","00124123T","00123123","001123123T","00 12-3123/T"]}),d({validator:"isTaxID",args:["el-GR"],valid:["758426713","032792320","054100004"],invalid:["054100005","05410000","0541000055","05 4100005","05-410/0005","658426713","558426713"]}),d({validator:"isTaxID",args:["en-CA"],valid:["000000000","521719666","469317481","120217450","480534858","325268597","336475660","744797853","130692544","046454286"],invalid:["        ","any value","012345678","111111111","999999999","657449110","74 47 978 53","744 797 853","744-797-853","981062432","267500713","2675o0713","70597312","7058973122","069437151","046454281","146452286","30x92544","30692544"]}),d({validator:"isTaxID",args:["en-GB"],valid:["1234567890","AA123456A","AA123456 "],invalid:["GB123456A","123456789","12345678901","NK123456A","TN123456A","ZZ123456A","GB123456Z","DM123456A","AO123456A","GB-123456A","GB 123456 A","GB123456  "]}),d({validator:"isTaxID",args:["en-IE"],valid:["1234567T","1234567TW","1234577W","1234577WW","1234577IA"],invalid:["1234567","1234577WWW","1234577A","1234577JA"]}),d({validator:"isTaxID",args:["en-US"],valid:["01-1234567","01 1234567","011234567","10-1234567","02-1234567","67-1234567","15-1234567","31-1234567","99-1234567"],invalid:["0-11234567","01#1234567","01  1234567","01 1234 567","07-1234567","28-1234567","96-1234567"]}),d({validator:"isTaxID",args:["es-AR"],valid:["20271633638","23274986069","27333234519","30678561165","33693450239","30534868460","23111111129","34557619099"],invalid:["20-27163363-8","20.27163363.8","33693450231","69345023","693450233123123","3369ew50231","34557619095"]}),d({validator:"isTaxID",args:["es-ES"],valid:["00054237A","54237A","X1234567L","Z1234567R","M2812345C","Y2812345B"],invalid:["M2812345CR","A2812345C","0/005 423-7A","00054237U"]}),d({validator:"isTaxID",args:["et-EE"],valid:["10001010080","46304280206","37102250382","32708101201"],invalid:["46304280205","61002293333","4-6304 28/0206","4630428020","463042802066"]}),d({validator:"isTaxID",args:["fi-FI"],valid:["131052-308T","131002+308W","131019A3089"],invalid:["131052308T","131052-308TT","131052S308T","13 1052-308/T","290219A1111"]}),d({validator:"isTaxID",args:["fr-BE"],valid:["00012511119"]}),d({validator:"isTaxID",args:["fr-FR"],valid:["30 23 217 600 053","3023217600053"],invalid:["30 2 3 217 600 053","3 023217-600/053","3023217600052","3023217500053","30232176000534","302321760005"]}),d({validator:"isTaxID",args:["nl-BE"],valid:["00012511148","00/0125-11148","00000011115"],invalid:["00 01 2511148","01022911148","00013211148","0001251114","000125111480","00012511149"]}),d({validator:"isTaxID",args:["fr-LU"],valid:["1893120105732"],invalid:["189312010573","18931201057322","1893 12-01057/32","1893120105742","1893120105733"]}),d({validator:"isTaxID",args:["lb-LU"],invalid:["2016023005732"]}),d({validator:"isTaxID",args:["hr-HR"],valid:["94577403194"],invalid:["94 57-7403/194","9457740319","945774031945","94577403197","94587403194"]}),d({validator:"isTaxID",args:["hu-HU"],valid:["8071592153"],invalid:["80 71-592/153","80715921534","807159215","8071592152","8071582153"]}),d({validator:"isTaxID",args:["lt-LT"],valid:["33309240064"]}),d({validator:"isTaxID",args:["it-IT"],valid:["DMLPRY77D15H501F","AXXFAXTTD41H501D"],invalid:["DML PRY/77D15H501-F","DMLPRY77D15H501","DMLPRY77D15H501FF","AAPPRY77D15H501F","DMLAXA77D15H501F","AXXFAX90A01Z001F","DMLPRY77B29H501F","AXXFAX3TD41H501E"]}),d({validator:"isTaxID",args:["lv-LV"],valid:["01011012344","32579461005","01019902341","325794-61005"],invalid:["010110123444","0101101234","01001612345","290217-22343"]}),d({validator:"isTaxID",args:["mt-MT"],valid:["1234567A","882345608","34581M","199Z"],invalid:["812345608","88234560","8823456088","11234567A","12/34-567 A","88 23-456/08","1234560A","0000000M","3200100G"]}),d({validator:"isTaxID",args:["nl-NL"],valid:["174559434"],invalid:["17455943","1745594344","17 455-94/34"]}),d({validator:"isTaxID",args:["pl-PL"],valid:["2234567895","02070803628","02870803622","02670803626","01510813623"],invalid:["020708036285","223456789","22 345-678/95","02 070-8036/28","2234567855","02223013623"]}),d({validator:"isTaxID",args:["pt-BR"],valid:["35161990910","74407265027","05423994000172","11867044000130"],invalid:["ABCDEFGH","170.691.440-72","11494282142","74405265037","11111111111","48469799384","94.592.973/0001-82","28592361000192","11111111111111","111111111111112","61938188550993","82168365502729"]}),d({validator:"isTaxID",args:["pt-PT"],valid:["299999998","299992020"],invalid:["2999999988","29999999","29 999-999/8"]}),d({validator:"isTaxID",args:["ro-RO"],valid:["8001011234563","9000123456789","1001011234560","3001011234564","5001011234568"],invalid:["5001011234569","500 1011-234/568","500101123456","50010112345688","5001011504568","8000230234563","6000230234563"]}),d({validator:"isTaxID",args:["sk-SK"],valid:["530121999","536221/999","031121999","520229999","1234567890"],invalid:["53012199999","990101999","530121000","53012199","53-0121 999","535229999"]}),d({validator:"isTaxID",args:["sl-SI"],valid:["15012557","15012590"],invalid:["150125577","1501255","15 01-255/7"]}),d({validator:"isTaxID",args:["sv-SE"],valid:["640823-3234","640883-3231","6408833231","19640823-3233","196408233233","19640883-3230","200228+5266","20180101-5581"],invalid:["640823+3234","160230-3231","160260-3231","160260-323","160260323","640823+323","640823323","640823+32344","64082332344","19640823-32333","1964082332333"]}),d({validator:"isTaxID",args:["uk-UA"],valid:["3006321856","3003102490","2164212906"],invalid:["2565975632","256597563287","\u041a\u042100123456","2896235845"]}),d({validator:"isTaxID",valid:["01-1234567"]}),d({validator:"isTaxID",args:["is-NOT"],error:["01-1234567","01 1234567","011234567","0-11234567","01#1234567","01  1234567","01 1234 567","07-1234567","28-1234567","96-1234567"]})}),o(0,()=>{d({validator:"isSlug",valid:["foo","foo-bar","foo_bar","foo-bar-foo","foo-bar_foo","foo-bar_foo*75-b4r-**_foo","foo-bar_foo*75-b4r-**_foo-&&"],invalid:["not-----------slug","@#_$@","-not-slug","not-slug-","_not-slug","not-slug_","not slug"]})}),o(0,()=>{d({validator:"isStrongPassword",args:[{minLength:8,minLowercase:1,minUppercase:1,minNumbers:1,minSymbols:1}],valid:['%2%k{7BsL"M%Kd6e',"EXAMPLE of very long_password123!","mxH_+2vs&54_+H3P","+&DxJ=X7-4L8jRCD","etV*p%Nr6w&H%FeF","\u00a33.ndSau_7","VaLIDWith\\Symb0l"],invalid:["","password","hunter2","hello world","passw0rd","password!","PASSWORD!"]})}),o(0,()=>{d({validator:"isDate",valid:[new Date,new Date(2014,2,15),new Date("2014-03-15"),"2020/02/29","2020-02-19"],invalid:["","15072002",null,void 0,{year:2002,month:7,day:15},42,{toString:()=>"[object Date]"},"2020-02-30","2019-02-29","2020-04-31","2020/03-15","-2020-04-19","-2023/05/24","abc-2023/05/24","2024","2024-","2024-05","2024-05-","2024-05-01-","2024-05-01-abc","2024/","2024/05","2024/05/","2024/05/01/","2024/05/01/abc"]}),d({validator:"isDate",args:["DD/MM/YYYY"],valid:["15-07-2002","15/07/2002"],invalid:["15/7/2002","15-7-2002","15/7/02","15-7-02","15-07/2002","2024","2024-","2024-05","2024-05-","2024-05-01-","2024-05-01-abc","2024/","2024/05","2024/05/","2024/05/01/","2024/05/01/abc","15/","15/07","15/07/","15/07/2024/"]}),d({validator:"isDate",args:[{format:"DD/MM/YYYY"}],valid:["15-07-2002","15/07/2002"],invalid:["15/7/2002","15-7-2002","15/7/02","15-7-02","15-07/2002","2024","2024-","2024-05","2024-05-","2024-05-01-","2024-05-01-abc","2024/","2024/05","2024/05/","2024/05/01/","2024/05/01/abc","15/","15/07","15/07/","15/07/2024/"]}),d({validator:"isDate",args:[{format:"DD/MM/YY"}],valid:["15-07-02","15/07/02"],invalid:["15/7/2002","15-7-2002","15/07-02","30/04/--","2024","2024-","2024-05","2024-05-","2024-05-01-","2024-05-01-abc","2024/","2024/05","2024/05/","2024/05/01/","2024/05/01/abc","15/","15/07","15/07/","15/07/2024/","15/07/24/"]}),d({validator:"isDate",args:[{format:"D/M/YY"}],valid:["5-7-02","5/7/02"],invalid:["5/07/02","15/7/02","15-7-02","5/7-02","3/4/aa","2024/","2024/05","2024/05/","2024/05/01/","2024/05/01/abc","15/","15/07","15/07/","15/07/2024/","15/07/24/"]}),d({validator:"isDate",args:[{format:"DD/MM/YYYY",strictMode:!0}],valid:["15/07/2002"],invalid:["15-07-2002","15/7/2002","15-7-2002","15/7/02","15-7-02","15-07/2002","2024/","2024/05","2024/05/","2024/05/01/","2024/05/01/abc","15/","15/07","15/07/","15/07/2024/","15/07/24/"]}),d({validator:"isDate",args:[{strictMode:!0}],valid:["2020/01/15","2014/02/15","2014/03/15","2020/02/29"],invalid:["2014-02-15","2020-02-29","15-07/2002",new Date,new Date(2014,2,15),new Date("2014-03-15"),"-2020-04-19","-2023/05/24","abc-2023/05/24","2024","2024-","2024-05","2024-05-","2024-05-01-","2024-05-01-abc","2024/","2024/05","2024/05/","2024/05/01/","2024/05/01/abc"]}),d({validator:"isDate",args:[{delimiters:["/"," "]}],valid:[new Date,new Date(2014,2,15),new Date("2014-03-15"),"2020/02/29","2020 02 29"],invalid:["2020-02-29","","15072002",null,void 0,{year:2002,month:7,day:15},42,{toString:()=>"[object Date]"},"2020/02/30","2019/02/29","2020/04/31","2020/03-15","-2020-04-19","-2023/05/24","abc-2023/05/24","2024","2024-","2024-05","2024-05-","2024-05-01-","2024-05-01-abc","2024/","2024/05","2024/05/","2024/05/01/","2024/05/01/abc","2024 05 01 abc"]}),d({validator:"isDate",args:[{format:"MM.DD.YYYY",delimiters:["."],strictMode:!0}],valid:["01.15.2020","02.15.2014","03.15.2014","02.29.2020"],invalid:["2014-02-15","2020-02-29","15-07/2002",new Date,new Date(2014,2,15),new Date("2014-03-15"),"29.02.2020","02.29.2020.20","2024-","2024-05","2024-05-","2024-05-01","-2020-04-19","-2023/05/24","abc-2023/05/24","04.05.2024.","04.05.2024.abc","abc.04.05.2024"]})}),o(0,()=>{d({validator:"isTime",valid:["00:00","23:59","9:00"],invalid:["",null,void 0,0,"07:00 PM","23","00:60","00:","01:0 ","001:01"]}),d({validator:"isTime",args:[{hourFormat:"hour24",mode:"withSeconds"}],valid:["23:59:59","00:00:00","9:50:01"],invalid:["",null,void 0,23,"01:00:01 PM","13:00:","00","26","00;01","0 :09","59:59:59","24:00:00","00:59:60","99:99:99","009:50:01"]}),d({validator:"isTime",args:[{hourFormat:"hour24",mode:"withOptionalSeconds"}],valid:["23:59:59","00:00:00","9:50:01","00:00","23:59","9:00"],invalid:["",null,void 0,23,"01:00:01 PM","13:00:","00","26","00;01","0 :09","59:59:59","24:00:00","00:59:60","99:99:99","009:50:01"]}),d({validator:"isTime",args:[{hourFormat:"hour12"}],valid:["12:59 PM","12:59 AM","01:00 PM","01:00 AM","7:00 AM"],invalid:["",null,void 0,0,"12:59 MM","12:59 MA","12:59 PA","12:59 A M","13:00 PM","23","00:60","00:","9:00","01:0 ","001:01","12:59:00 PM","12:59:00 A M","12:59:00 "]}),d({validator:"isTime",args:[{hourFormat:"hour12",mode:"withSeconds"}],valid:["12:59:59 PM","2:34:45 AM","7:00:00 AM"],invalid:["",null,void 0,23,"01:00: 1 PM","13:00:","13:00:00 PM","00","26","00;01","0 :09","59:59:59","24:00:00","00:59:60","99:99:99","9:50:01","009:50:01"]}),d({validator:"isTime",args:[{hourFormat:"hour12",mode:"withOptionalSeconds"}],valid:["12:59:59 PM","2:34:45 AM","7:00:00 AM","12:59 PM","12:59 AM","01:00 PM","01:00 AM","7:00 AM"],invalid:["",null,void 0,23,"01:00: 1 PM","13:00:","00","26","00;01","0 :09","59:59:59","24:00:00","00:59:60","99:99:99","9:50:01","009:50:01"]})}),o(0,()=>{d({validator:"isLicensePlate",args:["es-AR"],valid:["AB 123 CD","AB123CD","ABC 123","ABC123"],invalid:["","notalicenseplate","AB-123-CD","ABC-123","AABC 123","AB CDE FG","ABC DEF","12 ABC 34"]}),d({validator:"isLicensePlate",args:["pt-PT"],valid:["AA-12-34","12-AA-34","12-34-AA","AA-12-AA","AA\u00b712\u00b734","12\u00b7AB\u00b734","12\u00b734\u00b7AB","AB\u00b734\u00b7AB","AA 12 34","12 AA 34","12 34 AA","AB 12 CD","AA1234","12AA34","1234AA","AB12CD"],invalid:["","notalicenseplate","AA-AA-00","00-AA-AA","AA-AA-AA","00-00-00","AA\u00b7AA\u00b700","00\u00b7AA\u00b7AA","AA\u00b7AA\u00b7AA","00\u00b700\u00b700","AA AA 00","00 AA AA","AA AA AA","00 00 00","A1-B2-C3","1A-2B-3C","ABC-1-EF","AB-C1D-EF","AB-C1-DEF"]}),d({validator:"isLicensePlate",args:["de-LI"],valid:["FL 1","FL 99999","FL 1337"],invalid:["","FL 999999","AB 12345","FL -1"]}),d({validator:"isLicensePlate",args:["de-DE"],valid:["M A 1","M A 12","M A 123","M A 1234","M AB 1","M AB 12","M AB 123","M AB 1234","FS A 1","FS A 12","FS A 123","FS A 1234","FS AB 1","FS AB 12","FS AB 123","FS AB 1234","FSAB1234","FS-AB-1234","FS AB 1234 H","FS AB 1234 E","FSAB1234E","FS-AB-1234-E","FS AB-1234-E","FSAB1234 E","FS AB1234E","LRO AB 123","LRO-AB-123-E","LRO-AB-123E","LRO-AB-123 E","LRO-AB-123-H","LRO-AB-123H","LRO-AB-123 H"],invalid:["YY AB 123","PAF AB 1234","M ABC 123","M AB 12345","FS AB 1234 A","LRO-AB-1234","HRO ABC 123","HRO ABC 1234","LDK-AB-1234-E","\u00d6HR FA 123D","MZG-AB-123X","OBG-ABD-123","PAF-AB2-123"]}),d({validator:"isLicensePlate",args:["fi-FI"],valid:["ABC-123","ABC 123","ABC123","A100","A 100","A-100","C10001","C 10001","C-10001","123-ABC","123 ABC","123ABC","123-A","123 A","123A","199AA","199 AA","199-AA"],invalid:[" ","A-1","A1A-100","1-A-2","C1234567","A B C 1 2 3","abc-123"]}),d({validator:"isLicensePlate",args:["sq-AL"],valid:["AA 000 AA","ZZ 999 ZZ"],invalid:["","AA 0 A","AAA 00 AAA"]}),d({validator:"isLicensePlate",args:["cs-CZ"],valid:["ALA4011","4A23000","DICTAT0R","VETERAN","AZKVIZ8","2A45876","DIC-TAT0R"],invalid:["","invalidlicenseplate","LN5758898","X-|$|-X","AE0F-OP4","GO0MER","2AAAAAAAA","FS AB 1234 E","GB999 9999 00"]}),d({validator:"isLicensePlate",args:["pt-BR"],valid:["ABC1234","ABC 1234","ABC-1234","ABC1D23","ABC1K23","ABC1Z23","ABC 1D23","ABC-1D23"],invalid:["","AA 0 A","AAA 00 AAA","ABCD123","AB12345","AB123DC"]}),d({validator:"isLicensePlate",args:["hu-HU"],valid:["AAB-001","AVC-987","KOC-124","JCM-871","AWQ-777","BPO-001","BPI-002","UCO-342","UDO-385","XAO-987","AAI-789","ABI-789","ACI-789","AAO-789","ABO-789","ACO-789","YAA-123","XAA-123","WAA-258","XZZ-784","M123456","CK 12-34","DT 12-34","CD 12-34","HC 12-34","HB 12-34","HK 12-34","MA 12-34","OT 12-34","RR 17-87","CD 124-348","C-C 2021","C-X 2458","X-A 7842","E-72345","Z-07458","S ACF 83","SP 04-68"],invalid:["AAA-547","aab-001","AAB 001","AB34","789-LKJ","BBO-987","BBI-987","BWQ-777","BQW-987","BAI-789","BBI-789","BCI-789","BAO-789","BBO-789","BCO-789","ADI-789","ADO-789","KOC-1234","M1234567","W-12345","S BCF 83","X-D 1234","C-D 1234","HU 12-34"]}),d({validator:"isLicensePlate",args:["any"],valid:["FL 1","FS AB 123"],invalid:["","FL 999999","FS AB 1234 A"]}),d({validator:"isLicensePlate",args:["asdfasdf"],error:["FL 1","FS AB 123","FL 999999","FS AB 1234 A"]}),d({validator:"isLicensePlate",args:["sv-SE"],valid:["ABC 123","ABC 12A","ABC123","ABC12A","A WORD","WORD","\u00c5SNA","EN VARG","CERISE","AA","ABCDEFG","\u00c5\u00c4\u00d6","\u00c5\u00c4\u00d6 \u00c5\u00c4\u00d6"],invalid:["","    ","IQV 123","IQV123","ABI 12Q","\u00c5\u00c4\u00d6 123","\u00c5\u00c4\u00d6 12A","AB1 A23","AB1 12A","lower","abc 123","abc 12A","abc 12a","AbC 12a","WORDLONGERTHANSEVENCHARACTERS","A","ABC-123"]}),d({validator:"isLicensePlate",args:["en-IN"],valid:["MH 04 AD 0001","HR26DQ0001","WB-04-ZU-2001","KL 18 X 5800","DL 4 CAF 4856","KA-41CE-5289","GJ 04-AD 5822"],invalid:["mh04ad0045","invalidlicenseplate","4578","","GJ054GH4785"]}),d({validator:"isLicensePlate",args:["en-SG"],valid:["SGX 1234 A","SGX-1234-A","SGB1234Z"],invalid:["sg1234a","invalidlicenseplate","4578","","GJ054GH4785"]})}),o(0,()=>{d({validator:"isVAT",args:["AT"],valid:["ATU12345678","U12345678"],invalid:["AT 12345678","12345678"]}),d({validator:"isVAT",args:["BE"],valid:["BE1234567890","1234567890"],invalid:["BE 1234567890","123456789"]}),d({validator:"isVAT",args:["BG"],valid:["BG1234567890","1234567890","BG123456789","123456789"],invalid:["BG 1234567890","12345678"]}),d({validator:"isVAT",args:["HR"],valid:["HR12345678901","12345678901"],invalid:["HR 12345678901","1234567890"]}),d({validator:"isVAT",args:["CY"],valid:["CY123456789","123456789"],invalid:["CY 123456789","12345678"]}),d({validator:"isVAT",args:["CZ"],valid:["CZ1234567890","CZ123456789","CZ12345678","1234567890","123456789","12345678"],invalid:["CZ 123456789","1234567"]}),d({validator:"isVAT",args:["DK"],valid:["DK12345678","12345678"],invalid:["DK 12345678","1234567"]}),d({validator:"isVAT",args:["EE"],valid:["EE123456789","123456789"],invalid:["EE 123456789","12345678"]}),d({validator:"isVAT",args:["FI"],valid:["FI12345678","12345678"],invalid:["FI 12345678","1234567"]}),d({validator:"isVAT",args:["FR"],valid:["FRAA123456789","AA123456789"],invalid:["FR AA123456789","123456789"]}),d({validator:"isVAT",args:["DE"],valid:["DE123456789","123456789"],invalid:["DE 123456789","12345678"]}),d({validator:"isVAT",args:["EL"],valid:["EL123456789","123456789"],invalid:["EL 123456789","12345678"]}),d({validator:"isVAT",args:["HU"],valid:["HU12345678","12345678"],invalid:["HU 12345678","1234567"]}),d({validator:"isVAT",args:["IE"],valid:["IE1234567AW","1234567AW"],invalid:["IE 1234567","1234567"]}),d({validator:"isVAT",args:["IT"],valid:["IT12345678910","12345678910"],invalid:["IT12345678 910","IT 123456789101","IT123456789101","GB12345678910","IT123456789"]}),d({validator:"isVAT",args:["LV"],valid:["LV12345678901","12345678901"],invalid:["LV 12345678901","1234567890"]}),d({validator:"isVAT",args:["LT"],valid:["LT123456789012","123456789012","LT12345678901","12345678901","LT1234567890","1234567890","LT123456789","123456789"],invalid:["LT 123456789012","12345678"]}),d({validator:"isVAT",args:["LU"],valid:["LU12345678","12345678"],invalid:["LU 12345678","1234567"]}),d({validator:"isVAT",args:["MT"],valid:["MT12345678","12345678"],invalid:["MT 12345678","1234567"]}),d({validator:"isVAT",args:["NL"],valid:["NL123456789B10","123456789B10"],invalid:["NL12345678 910","NL 123456789101","NL123456789B1","GB12345678910","NL123456789"]}),d({validator:"isVAT",args:["PL"],valid:["PL1234567890","1234567890","PL123-456-78-90","123-456-78-90","PL123-45-67-890","123-45-67-890"],invalid:["PL 1234567890","123456789"]}),d({validator:"isVAT",args:["PT"],valid:["PT123456789","123456789"],invalid:["PT 123456789","000000001"]}),d({validator:"isVAT",args:["RO"],valid:["RO1234567890","1234567890","RO12","12"],invalid:["RO 12","1"]}),d({validator:"isVAT",args:["SK"],valid:["SK1234567890","1234567890"],invalid:["SK 1234567890","123456789"]}),d({validator:"isVAT",args:["SI"],valid:["SI12345678","12345678"],invalid:["SI 12345678","1234567"]}),d({validator:"isVAT",args:["ES"],valid:["ESA1234567A","A1234567A"],invalid:["ES 1234567A","123456789"]}),d({validator:"isVAT",args:["SE"],valid:["SE123456789012","123456789012"],invalid:["SE 123456789012","12345678901"]}),d({validator:"isVAT",args:["AL"],valid:["AL123456789A","123456789A"],invalid:["AL 123456789A","123456789"]}),d({validator:"isVAT",args:["MK"],valid:["MK1234567890123","1234567890123"],invalid:["MK 1234567890123","123456789012"]}),d({validator:"isVAT",args:["AU"],valid:["AU53004085616","53004085616","AU65613309809","65613309809","AU34118972998","34118972998"],invalid:["AU65613309808","65613309808","AU55613309809","55613309809","AU65613319809","65613319809","AU34117972998","34117972998","AU12345678901","12345678901","AU 12345678901","1234567890"]}),d({validator:"isVAT",args:["BY"],valid:["\u0423\u041d\u041f 123456789","123456789"],invalid:["BY 123456789","12345678"]}),d({validator:"isVAT",args:["CA"],valid:["CA123456789","123456789"],invalid:["CA 123456789","12345678"]}),d({validator:"isVAT",args:["IS"],valid:["IS123456","12345"],invalid:["IS 12345","1234"]}),d({validator:"isVAT",args:["IN"],valid:["IN123456789012345","123456789012345"],invalid:["IN 123456789012345","12345678901234"]}),d({validator:"isVAT",args:["ID"],valid:["ID123456789012345","123456789012345","ID12.345.678.9-012.345","12.345.678.9-012.345"],invalid:["ID 123456789012345","12345678901234"]}),d({validator:"isVAT",args:["IL"],valid:["IL123456789","123456789"],invalid:["IL 123456789","12345678"]}),d({validator:"isVAT",args:["KZ"],valid:["KZ123456789012","123456789012"],invalid:["KZ 123456789012","12345678"]}),d({validator:"isVAT",args:["NZ"],valid:["NZ123456789","123456789"],invalid:["NZ 123456789","12345678"]}),d({validator:"isVAT",args:["NG"],valid:["NG123456789012","123456789012","NG12345678-9012","12345678-9012"],invalid:["NG 123456789012","12345678901"]}),d({validator:"isVAT",args:["NO"],valid:["NO123456789MVA","123456789MVA"],invalid:["NO 123456789MVA","123456789"]}),d({validator:"isVAT",args:["PH"],valid:["PH123456789012","123456789012","PH123 456 789 012","123 456 789 012"],invalid:["PH 123456789012","12345678901"]}),d({validator:"isVAT",args:["RU"],valid:["RU1234567890","1234567890","RU123456789012","123456789012"],invalid:["RU 123456789012","12345678901"]}),d({validator:"isVAT",args:["SM"],valid:["SM12345","12345"],invalid:["SM 12345","1234"]}),d({validator:"isVAT",args:["SA"],valid:["SA123456789012345","123456789012345"],invalid:["SA 123456789012345","12345678901234"]}),d({validator:"isVAT",args:["RS"],valid:["RS123456789","123456789"],invalid:["RS 123456789","12345678"]}),d({validator:"isVAT",args:["CH"],valid:["CHE-116.281.710 MWST","CHE-116.281.710 IVA","CHE-116.281.710 TVA","CHE 116 281 710 IVA","CHE-191.398.369MWST","CHE-116281710 MWST","CHE-116281710MWST","CHE105854263MWST","CHE-116.285.524","CHE116281710","116.281.710 TVA","116281710MWST","100.218.485","123456788"],invalid:["CH-116.281.710 MWST","CHE-116.281 MWST","CHE-123.456.789 MWST","CHE-123.356.780 MWST","CH-116.281.710 VAT","CHE-116/281/710 IVA"]}),d({validator:"isVAT",args:["TR"],valid:["TR1234567890","1234567890"],invalid:["TR 1234567890","123456789"]}),d({validator:"isVAT",args:["UA"],valid:["UA123456789012","123456789012"],invalid:["UA 123456789012","12345678901"]}),d({validator:"isVAT",args:["GB"],valid:["GB999 9999 00","GB999 9999 96","GB999999999 999","GBGD000","GBGD499","GBHA500","GBHA999"],invalid:["GB999999900","GB999999996","GB999 9999 97","GB999999999999","GB999999999 9999","GB9999999999 999","GBGD 000","GBGD 499","GBHA 500","GBHA 999","GBGD500","GBGD999","GBHA000","GBHA499"]}),d({validator:"isVAT",args:["UZ"],valid:["UZ123456789","123456789"],invalid:["UZ 123456789","12345678"]}),d({validator:"isVAT",args:["AR"],valid:["AR12345678901","12345678901"],invalid:["AR 12345678901","1234567890"]}),d({validator:"isVAT",args:["BO"],valid:["BO1234567","1234567"],invalid:["BO 1234567","123456"]}),d({validator:"isVAT",args:["BR"],valid:["BR12.345.678/9012-34","12.345.678/9012-34","BR123.456.789-01","123.456.789-01"],invalid:["BR 12.345.678/9012-34","12345678901234"]}),d({validator:"isVAT",args:["CL"],valid:["CL12345678-9","12345678-9"],invalid:["CL 12345678-9","12345678"]}),d({validator:"isVAT",args:["CO"],valid:["CO1234567890","1234567890"],invalid:["CO 1234567890","123456789"]}),d({validator:"isVAT",args:["CR"],valid:["CR123456789012","123456789012","CR123456789","123456789"],invalid:["CR 123456789","12345678"]}),d({validator:"isVAT",args:["EC"],valid:["EC1234567890123","1234567890123"],invalid:["EC 1234567890123","123456789012"]}),d({validator:"isVAT",args:["SV"],valid:["SV1234-567890-123-1","1234-567890-123-1"],invalid:["SV 1234-567890-123-1","1234567890123"]}),d({validator:"isVAT",args:["GT"],valid:["GT1234567-8","1234567-8"],invalid:["GT 1234567-8","1234567"]}),d({validator:"isVAT",args:["HN"],valid:["HN"],invalid:["HN "]}),d({validator:"isVAT",args:["MX"],valid:["MXABCD123456EFG","ABCD123456EFG","MXABC123456DEF","ABC123456DEF"],invalid:["MX ABC123456EFG","123456"]}),d({validator:"isVAT",args:["NI"],valid:["NI123-456789-0123A","123-456789-0123A"],invalid:["NI 123-456789-0123A","1234567890123"]}),d({validator:"isVAT",args:["PA"],valid:["PA"],invalid:["PA "]}),d({validator:"isVAT",args:["PY"],valid:["PY12345678-9","12345678-9","PY123456-7","123456-7"],invalid:["PY 123456-7","123456"]}),d({validator:"isVAT",args:["PE"],valid:["PE12345678901","12345678901"],invalid:["PE 12345678901","1234567890"]}),d({validator:"isVAT",args:["DO"],valid:["DO12345678901","12345678901","DO123-4567890-1","123-4567890-1","DO123456789","123456789","DO1-23-45678-9","1-23-45678-9"],invalid:["DO 12345678901","1234567890"]}),d({validator:"isVAT",args:["UY"],valid:["UY123456789012","123456789012"],invalid:["UY 123456789012","12345678901"]}),d({validator:"isVAT",args:["VE"],valid:["VEJ-123456789","J-123456789","VEJ-12345678-9","J-12345678-9"],invalid:["VE J-123456789","12345678"]}),d({validator:"isVAT",args:["invalidCountryCode"],error:["GB999 9999 00"]})}),o(0,()=>{d({validator:"isMailtoURI",valid:["mailto:?subject=something&[email protected]","mailto:?subject=something&[email protected],[email protected],","mailto:?subject=something&[email protected]","mailto:?subject=something&[email protected],[email protected]","mailto:[email protected],[email protected]","mailto:[email protected],[email protected]","mailto:[email protected]","mailto:[email protected]","mailto:?subject=something&body=something else","mailto:?subject=something&body=something else&[email protected],[email protected]","mailto:?subject=something&body=something else&[email protected],[email protected]","mailto:?subject=something&body=something else&[email protected]&[email protected],[email protected]","mailto:[email protected]","mailto:[email protected]?","mailto:[email protected]?subject=something","mailto:[email protected]?subject=something&[email protected]","mailto:[email protected]?subject=something&[email protected],[email protected],","mailto:[email protected]?subject=something&[email protected]","mailto:[email protected]?subject=something&[email protected],[email protected]","mailto:[email protected][email protected],[email protected]","mailto:[email protected][email protected],[email protected]","mailto:[email protected][email protected]","mailto:[email protected][email protected]&","mailto:[email protected]?subject=something&body=something else","mailto:[email protected]?subject=something&body=something else&[email protected],[email protected]","mailto:[email protected]?subject=something&body=something else&[email protected],[email protected]","mailto:[email protected]?subject=something&body=something else&[email protected]&[email protected],[email protected]","mailto:"],invalid:["","something","[email protected]","mailto:?subject=okay&subject=444","mailto:?subject=something&wrong=888","mailto:somename@\uff47\uff4d\uff41\uff49\uff4c.com","mailto:[email protected]?cc=somename@\uff47\uff4d\uff41\uff49\uff4c.com","mailto:[email protected]?bcc=somename@\uff47\uff4d\uff41\uff49\uff4c.com","mailto:[email protected]?bcc=somename@\uff47\uff4d\uff41\uff49\uff4c.com&bcc","mailto:[email protected]?subject=anything&body=nothing&cc=&bcc=&key=","mailto:[email protected]?cc=somename","mailto:somename","mailto:[email protected]?subject=something&body=something else&[email protected]&[email protected],[email protected]&","mailto:?subject=something&body=something else&[email protected]&[email protected],[email protected]&"]})})}),r(0,()=>{o(0,()=>{d({validator:"isAfter",args:[{comparisonDate:"2011-08-03"}],valid:["2011-08-04",new Date(2011,8,10).toString()],invalid:["2010-07-02","2011-08-03",new Date(0).toString(),"foo"]}),d({validator:"isAfter",valid:["2100-08-04",new Date(Date.now()+864e5).toString()],invalid:["2010-07-02",new Date(0).toString()]}),d({validator:"isAfter",args:[{comparisonDate:"2011-08-03"}],valid:["2015-09-17"],invalid:["invalid date"]}),d({validator:"isAfter",args:[{comparisonDate:"invalid date"}],invalid:["invalid date","2015-09-17"]}),d({validator:"isAfter",args:[],valid:["2100-08-04",new Date(Date.now()+864e5).toString()]}),d({validator:"isAfter",args:[void 0],valid:["2100-08-04",new Date(Date.now()+864e5).toString()]}),d({validator:"isAfter",args:[{comparisonDate:void 0}],valid:["2100-08-04",new Date(Date.now()+864e5).toString()]})}),r(0,()=>{o(0,()=>{d({validator:"isAfter",args:["2011-08-03"],valid:["2011-08-04",new Date(2011,8,10).toString()],invalid:["2010-07-02","2011-08-03",new Date(0).toString(),"foo"]}),d({validator:"isAfter",valid:["2100-08-04",new Date(Date.now()+864e5).toString()],invalid:["2010-07-02",new Date(0).toString()]}),d({validator:"isAfter",args:["2011-08-03"],valid:["2015-09-17"],invalid:["invalid date"]}),d({validator:"isAfter",args:["invalid date"],invalid:["invalid date","2015-09-17"]})})})}),r(0,()=>{o(0,()=>{d({validator:"isBase64",valid:["","Zg==","Zm8=","Zm9v","Zm9vYg==","Zm9vYmE=","Zm9vYmFy","TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4=","Vml2YW11cyBmZXJtZW50dW0gc2VtcGVyIHBvcnRhLg==","U3VzcGVuZGlzc2UgbGVjdHVzIGxlbw==","MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuMPNS1Ufof9EW/M98FNwUAKrwflsqVxaxQjBQnHQmiI7Vac40t8x7pIb8gLGV6wL7sBTJiPovJ0V7y7oc0YerhKh0Rm4skP2z/jHwwZICgGzBvA0rH8xlhUiTvcwDCJ0kc+fh35hNt8srZQM4619FTgB66Xmp4EtVyhpQV+t02g6NzK72oZI0vnAvqhpkxLeLiMCyrI416wHm5TkukhxQmcL2a6hNOyu0ixX/x2kSFXApEnVrJ+/IxGyfyw8kf4N2IZpW5nEP847lpfj0SZZFwrd1mnfnDbYohX2zRptLy2ZUn06Qo9pkG5ntvFEPo9bfZeULtjYzIl6K8gJ2uGZHQIDAQAB"],invalid:["12345","Vml2YW11cyBmZXJtZtesting123","Zg=","Z===","Zm=8","=m9vYg==","Zm9vYmFy===="]}),d({validator:"isBase64",args:[{urlSafe:!0}],valid:["","bGFkaWVzIGFuZCBnZW50bGVtZW4sIHdlIGFyZSBmbG9hdGluZyBpbiBzcGFjZQ","1234","bXVtLW5ldmVyLXByb3Vk","PDw_Pz8-Pg","VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw"],invalid:[" AA","\tAA","\rAA","\nAA","This+isa/bad+base64Url==","0K3RgtC+INC30LDQutC+0LTQuNGA0L7QstCw0L3QvdCw0Y8g0YHRgtGA0L7QutCw"],error:[null,void 0,{},[],42]})}),o(0,()=>{d({validator:"isBase64",args:[{urlSafe:!1,padding:!0}],valid:["","TWFu","TWE=","TQ==","SGVsbG8=","U29mdHdhcmU=","YW55IGNhcm5hbCBwbGVhc3VyZS4="],invalid:["TWF","TWE===","SGVsbG8@","SGVsbG8===","SGVsb G8=","===="]})}),o(0,()=>{d({validator:"isBase64",args:[{urlSafe:!1,padding:!1}],valid:["","TWFu","TWE","TQ","SGVsbG8","U29mdHdhcmU","YW55IGNhcm5hbCBwbGVhc3VyZS4"],invalid:["TWE=","TQ===","SGVsbG8@","SGVsbG8===","SGVsb G8","===="]})}),o(0,()=>{d({validator:"isBase64",args:[{urlSafe:!0,padding:!0}],valid:["","SGVsbG8=","U29mdHdhcmU=","YW55IGNhcm5hbCBwbGVhc3VyZS4=","SGVsbG8-","SGVsbG8_"],invalid:["SGVsbG8===","SGVsbG8@","SGVsb G8=","===="]})}),o(0,()=>{d({validator:"isBase64",args:[{urlSafe:!0,padding:!1}],valid:["","SGVsbG8","U29mdHdhcmU","YW55IGNhcm5hbCBwbGVhc3VyZS4","SGVsbG8-","SGVsbG8_"],invalid:["SGVsbG8=","SGVsbG8===","SGVsbG8@","SGVsb G8","===="]})}),o(0,()=>{d({validator:"isBase64",args:[{urlSafe:!1,padding:!0}],valid:["","TWFu","TWE=","TQ=="],invalid:["TWE","TQ=","TQ==="]}),d({validator:"isBase64",args:[{urlSafe:!0,padding:!1}],valid:["","SGVsbG8","SGVsbG8-","SGVsbG8_"],invalid:["SGVsbG8=","SGVsbG8@","SGVsb G8"]})})}),r(0,()=>{r(0,()=>{r(0,()=>{d({validator:"isBefore",args:[{comparisonDate:"08/04/2011"}],valid:["2010-07-02","2010-08-04",new Date(0).toString()],invalid:["08/04/2011",new Date(2011,9,10).toString()]}),d({validator:"isBefore",args:[{comparisonDate:new Date(2011,7,4).toString()}],valid:["2010-07-02","2010-08-04",new Date(0).toString()],invalid:["08/04/2011",new Date(2011,9,10).toString()]}),d({validator:"isBefore",args:[{comparisonDate:"2011-08-03"}],valid:["1999-12-31"],invalid:["invalid date"]}),d({validator:"isBefore",args:[{comparisonDate:"invalid date"}],invalid:["invalid date","1999-12-31"]})}),r(0,()=>{d({validator:"isBefore",args:["08/04/2011"],valid:["2010-07-02","2010-08-04",new Date(0).toString()],invalid:["08/04/2011",new Date(2011,9,10).toString()]}),d({validator:"isBefore",args:[new Date(2011,7,4).toString()],valid:["2010-07-02","2010-08-04",new Date(0).toString()],invalid:["08/04/2011",new Date(2011,9,10).toString()]}),d({validator:"isBefore",args:["2011-08-03"],valid:["1999-12-31"],invalid:["invalid date"]}),d({validator:"isBefore",args:["invalid date"],invalid:["invalid date","1999-12-31"]})})}),r(0,()=>{r(0,()=>{d({validator:"isBefore",valid:["2000-08-04",new Date(0).toString(),new Date(Date.now()-864e5).toString()],invalid:["2100-07-02",new Date(2217,10,10).toString()]}),d({validator:"isBefore",args:void 0,valid:["1999-06-07"]}),d({validator:"isBefore",args:[],valid:["1999-06-07"]}),d({validator:"isBefore",args:[void 0],valid:["1999-06-07"]}),d({validator:"isBefore",args:[{comparisonDate:void 0}],valid:["1999-06-07"]})}),r(0,()=>{d({validator:"isBefore",valid:["2000-08-04",new Date(0).toString(),new Date(Date.now()-864e5).toString()],invalid:["2100-07-02",new Date(2217,10,10).toString()]}),d({validator:"isBefore",args:void 0,valid:["1999-06-07"]}),d({validator:"isBefore",args:[],valid:["1999-06-07"]}),d({validator:"isBefore",args:[void 0],valid:["1999-06-07"]})})})}),r(0,()=>{o(0,()=>{d({validator:"isFQDN",args:[],valid:["google.com"],invalid:["google.l33t"]}),d({validator:"isFQDN",args:[{allow_numeric_tld:!0}],valid:["google.com","google.l33t"],invalid:[]})})}),r(0,()=>{o(0,()=>{d({validator:"isIP",valid:["127.0.0.1","0.0.0.0","255.255.255.255","1.2.3.4","::1","2001:db8:0000:1:1:1:1:1","2001:db8:3:4::192.0.2.33","2001:41d0:2:a141::1","::ffff:127.0.0.1","::0000","0000::","1::","1111:1:1:1:1:1:1:1","fe80::a6db:30ff:fe98:e946","::","::8","::ffff:127.0.0.1","::ffff:255.255.255.255","::ffff:0:255.255.255.255","::2:3:4:5:6:7:8","::255.255.255.255","0:0:0:0:0:ffff:127.0.0.1","1:2:3:4:5:6:7::","1:2:3:4:5:6::8","1::7:8","1:2:3:4:5::7:8","1:2:3:4:5::8","1::6:7:8","1:2:3:4::6:7:8","1:2:3:4::8","1::5:6:7:8","1:2:3::5:6:7:8","1:2:3::8","1::4:5:6:7:8","1:2::4:5:6:7:8","1:2::8","1::3:4:5:6:7:8","1::8","fe80::7:8%eth0","fe80::7:8%1","64:ff9b::192.0.2.33","0:0:0:0:0:0:10.0.0.1"],invalid:["abc","256.0.0.0","0.0.0.256","26.0.0.256","0200.200.200.200","200.0200.200.200","200.200.0200.200","200.200.200.0200","::banana","banana::","::1banana","::1::","1:",":1",":1:1:1::2","1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1","::11111","11111:1:1:1:1:1:1:1","2001:db8:0000:1:1:1:1::1","0:0:0:0:0:0:ffff:127.0.0.1","0:0:0:0:ffff:127.0.0.1","BC:e4d5:c:e7b9::%40i0nccymtl9cwfKo.5vaeXLSGRMe:EDh2qs5wkhnPws5xQKqafjfAMm6wGFCJ.bVFsZfb","1dC:0DF8:62D:3AC::%KTatXocjaFVioS0RTNQl4mA.V151o0RSy.JIu-D-D8.d3171ZWsSJ7PK4YjkJCRN0F"]}),d({validator:"isIP",args:[{version:"invalid version"}],valid:[],invalid:["127.0.0.1","0.0.0.0","255.255.255.255","1.2.3.4"]}),d({validator:"isIP",args:[{version:null}],valid:["127.0.0.1","0.0.0.0","255.255.255.255","1.2.3.4"]}),d({validator:"isIP",args:[{version:void 0}],valid:["127.0.0.1","0.0.0.0","255.255.255.255","1.2.3.4"]}),d({validator:"isIP",args:[{version:4}],valid:["127.0.0.1","0.0.0.0","255.255.255.255","1.2.3.4","255.0.0.1","0.0.1.1"],invalid:["::1","2001:db8:0000:1:1:1:1:1","::ffff:127.0.0.1","137.132.10.01","0.256.0.256","255.256.255.256"]}),d({validator:"isIP",args:[{version:6}],valid:["::1","2001:db8:0000:1:1:1:1:1","::ffff:127.0.0.1","fe80::1234%1","ff08::9abc%10","ff08::9abc%interface10","ff02::5678%pvc1.3"],invalid:["127.0.0.1","0.0.0.0","255.255.255.255","1.2.3.4","::ffff:287.0.0.1","%","fe80::1234%","fe80::1234%1%3%4","fe80%fe80%"]}),d({validator:"isIP",args:[{version:10}],valid:[],invalid:["127.0.0.1","0.0.0.0","255.255.255.255","1.2.3.4","::1","2001:db8:0000:1:1:1:1:1"]})}),r(0,()=>{o(0,()=>{d({validator:"isIP",valid:["127.0.0.1","0.0.0.0","255.255.255.255","1.2.3.4","::1","2001:db8:0000:1:1:1:1:1","2001:db8:3:4::192.0.2.33","2001:41d0:2:a141::1","::ffff:127.0.0.1","::0000","0000::","1::","1111:1:1:1:1:1:1:1","fe80::a6db:30ff:fe98:e946","::","::8","::ffff:127.0.0.1","::ffff:255.255.255.255","::ffff:0:255.255.255.255","::2:3:4:5:6:7:8","::255.255.255.255","0:0:0:0:0:ffff:127.0.0.1","1:2:3:4:5:6:7::","1:2:3:4:5:6::8","1::7:8","1:2:3:4:5::7:8","1:2:3:4:5::8","1::6:7:8","1:2:3:4::6:7:8","1:2:3:4::8","1::5:6:7:8","1:2:3::5:6:7:8","1:2:3::8","1::4:5:6:7:8","1:2::4:5:6:7:8","1:2::8","1::3:4:5:6:7:8","1::8","fe80::7:8%eth0","fe80::7:8%1","64:ff9b::192.0.2.33","0:0:0:0:0:0:10.0.0.1"],invalid:["abc","256.0.0.0","0.0.0.256","26.0.0.256","0200.200.200.200","200.0200.200.200","200.200.0200.200","200.200.200.0200","::banana","banana::","::1banana","::1::","1:",":1",":1:1:1::2","1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1","::11111","11111:1:1:1:1:1:1:1","2001:db8:0000:1:1:1:1::1","0:0:0:0:0:0:ffff:127.0.0.1","0:0:0:0:ffff:127.0.0.1"]}),d({validator:"isIP",args:[4],valid:["127.0.0.1","0.0.0.0","255.255.255.255","1.2.3.4","255.0.0.1","0.0.1.1"],invalid:["::1","2001:db8:0000:1:1:1:1:1","::ffff:127.0.0.1","137.132.10.01","0.256.0.256","255.256.255.256"]}),d({validator:"isIP",args:[6],valid:["::1","2001:db8:0000:1:1:1:1:1","::ffff:127.0.0.1","fe80::1234%1","ff08::9abc%10","ff08::9abc%interface10","ff02::5678%pvc1.3"],invalid:["127.0.0.1","0.0.0.0","255.255.255.255","1.2.3.4","::ffff:287.0.0.1","%","fe80::1234%","fe80::1234%1%3%4","fe80%fe80%"]}),d({validator:"isIP",args:[10],valid:[],invalid:["127.0.0.1","0.0.0.0","255.255.255.255","1.2.3.4","::1","2001:db8:0000:1:1:1:1:1"]})})})}),r(0,()=>{o(0,()=>{d({validator:"isISBN",args:[{version:10}],valid:["3836221195","3-8362-2119-5","3 8362 2119 5","1617290858","1-61729-085-8","1 61729 085-8","0007269706","0-00-726970-6","0 00 726970 6","3423214120","3-423-21412-0","3 423 21412 0","340101319X","3-401-01319-X","3 401 01319 X"],invalid:["3423214121","3-423-21412-1","3 423 21412 1","978-3836221191","9783836221191","123456789a","foo",""]}),d({validator:"isISBN",args:[{version:13}],valid:["9783836221191","978-3-8362-2119-1","978 3 8362 2119 1","9783401013190","978-3401013190","978 3401013190","9784873113685","978-4-87311-368-5","978 4 87311 368 5"],invalid:["9783836221190","978-3-8362-2119-0","978 3 8362 2119 0","3836221195","3-8362-2119-5","3 8362 2119 5","01234567890ab","foo",""]}),d({validator:"isISBN",valid:["340101319X","9784873113685"],invalid:["3423214121","9783836221190"]}),d({validator:"isISBN",args:[{version:"foo"}],invalid:["340101319X","9784873113685"]})}),r(0,()=>{o(0,()=>{d({validator:"isISBN",args:[10],valid:["3836221195","3-8362-2119-5","3 8362 2119 5","1617290858","1-61729-085-8","1 61729 085-8","0007269706","0-00-726970-6","0 00 726970 6","3423214120","3-423-21412-0","3 423 21412 0","340101319X","3-401-01319-X","3 401 01319 X"],invalid:["3423214121","3-423-21412-1","3 423 21412 1","978-3836221191","9783836221191","123456789a","foo",""]}),d({validator:"isISBN",args:[13],valid:["9783836221191","978-3-8362-2119-1","978 3 8362 2119 1","9783401013190","978-3401013190","978 3401013190","9784873113685","978-4-87311-368-5","978 4 87311 368 5"],invalid:["9783836221190","978-3-8362-2119-0","978 3 8362 2119 0","3836221195","3-8362-2119-5","3 8362 2119 5","01234567890ab","foo",""]}),d({validator:"isISBN",valid:["340101319X","9784873113685"],invalid:["3423214121","9783836221190"]}),d({validator:"isISBN",args:["foo"],invalid:["340101319X","9784873113685"]})})})}),e}})(),ValidatorJSBenchmark=t})();
+//# sourceMappingURL=bundle.es6.min.js.map
\ No newline at end of file
diff --git a/validatorjs/dist/bundle.es6.min.js.LICENSE.txt b/validatorjs/dist/bundle.es6.min.js.LICENSE.txt
new file mode 100644
index 0000000..df537c5
--- /dev/null
+++ b/validatorjs/dist/bundle.es6.min.js.LICENSE.txt
@@ -0,0 +1,8 @@
+/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <https://feross.org>
+ * @license  MIT
+ */
+
+/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
diff --git a/validatorjs/dist/bundle.es6.min.js.map b/validatorjs/dist/bundle.es6.min.js.map
new file mode 100644
index 0000000..99d1e36
--- /dev/null
+++ b/validatorjs/dist/bundle.es6.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"bundle.es6.min.js","mappings":"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ACA,mBACA,iBAEFJ,QAAS,CACP,gBACA,cACA,eACA,eACA,eACA,qBACA,iBACA,SACA,sCACA,GAAG,IAAII,OAAO,OAAO,IAAIA,OAAO,WAChC,GAAG,IAAIA,OAAO,OAAO,IAAIA,OAAO,WAChC,GAAG,IAAIA,OAAO,OAAO,IAAIA,OAAO,UAChC,GAAG,IAAIA,OAAO,OAAO,IAAIA,OAAO,OAAO,IAAIA,OAAO,OAAO,IAAIA,OAC3D,OACG,IAAIA,OAAO,UAChB,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,sBACA,sBACA,sBACA,sBACA,kCACA,yCACA,sCACA,2BACA,2BACA,6BACA,8BACA,uBACA,uBACA,qBACA,sBACA,sBACA,oBACA,qBACA,0BAKNN,EAAG,EAAmE,KACpEpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,CAAEhC,4BAA4B,IACrCoC,MAAO,CACL,mBACA,oBACA,yBACA,GAAG,IAAIK,OAAO,iBAEhBJ,QAAS,CACP,GAAG,IAAII,OAAO,gBACd,iBACA,mBACA,yBAKNN,EAAG,EAAkE,KACnEpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,CAAE9Y,mBAAmB,IAC5BkZ,MAAO,CAAC,wCACRC,QAAS,OAIbF,EAAG,EAAyE,KAC1EpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,CAAEzB,uBAAuB,IAChC6B,MAAO,CACL,cACA,SACA,iBACA,kBACA,kBACA,sBACA,wBACA,kDACA,uBACA,0BACA,8BAEFC,QAAS,CACP,gBACA,cACA,eACA,eACA,iBACA,qBACA,uBACA,SACA,mBACA,0BAKNF,EAAG,EAAsD,KACvDpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,CAAExC,oBAAoB,IAC7B4C,MAAO,CACL,cACA,SACA,iBACA,kBACA,uBACA,kBACA,sBACA,wBACA,kDACA,0BACA,qBACA,6BACA,8BACA,mCACA,8BACA,kCACA,oCACA,8BACA,8DACA,qEACA,yDACA,wDACA,4BACA,+CACA,mCACA,0CACA,+BACA,wBA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pDpjC,EAAK,CACH8B,UAAW,QACXmhC,KAAM,CAAC,CAAE5H,iBAAiB,IAC1BgI,MAAO,CACL,sBACA,qBAAqB,IAAIv5B,MAAM,MAAMpF,KAAK,QAE5C4+B,QAAS,OAIbF,EAAG,EAAyD,KAC1DpjC,EAAK,CACH8B,UAAW,QACXmhC,KAAM,CAAC,CAAE3H,mBAAoB,KAC7B+H,MAAO,CACL,uBACA,sBAEFC,QAAS,CACP,wBACA,oCAKNF,EAAG,EAA0C,KAC3CpjC,EAAK,CACH8B,UAAW,QACXmhC,KAAM,CAAC,CAAExG,cAAc,IACvB4G,MAAO,CACL,oCACA,oCACA,sBACA,sBACA,2BACA,qCAEFC,QAAS,CACP,mCACA,+BACA,oBACA,mBACA,wBACA,oCAKNF,EAAG,EAAiC,KAClCpjC,EAAK,CACH8B,UAAW,eACXuhC,MAAO,CACL,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,iBACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,uBAEFC,QAAS,CACP,MACA,iBACA,oBACA,kBACA,cACA,oBACA,mBACA,oBACA,kBACA,iBACA,uBACA,0BACA,wBACA,kBACA,0BACA,yBACA,0BACA,uBACA,yBAGJtjC,EAAK,CACH8B,UAAW,eACXmhC,KAAM,CACJ,CACE3wB,IAAK,OAGT+wB,MAAO,CACL,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,kBAEFC,QAAS,CACP,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,yBAGJtjC,EAAK,CACH8B,UAAW,eACXmhC,KAAM,CACJ,CACE3wB,IAAK,OAGT+wB,MAAO,CACL,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,uBAEFC,QAAS,CACP,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,sBAKNF,EAAG,EAAmD,KACpDpjC,EAAK,CACH8B,UAAW,eACXmhC,KAAM,CACJ,CACEzwB,eAAe,IAGnB6wB,MAAO,CACL,eACA,eACA,eACA,eACA,mBACA,mBACA,mBACA,oBAEFC,QAAS,CACP,MACA,iBACA,kBACA,cACA,oBACA,oBACA,oBACA,oBACA,oBACA,aACA,aACA,SACA,eACA,uBACA,wBACA,kBACA,0BACA,0BACA,0BACA,0BACA,0BACA,iBACA,iBACA,WACA,sBAGJtjC,EAAK,CACH8B,UAAW,eACXmhC,KAAM,CACJ,CACEzwB,eAAe,EACfF,IAAK,OAGT+wB,MAAO,CAAC,eAAgB,eAAgB,eAAgB,gBACxDC,QAAS,CACP,mBACA,mBACA,mBACA,sBAGJtjC,EAAK,CACH8B,UAAW,eACXmhC,KAAM,CACJ,CACEzwB,eAAe,EACfF,IAAK,OAGT+wB,MAAO,CACL,mBACA,mBACA,mBACA,oBAEFC,QAAS,CACP,eACA,eACA,eACA,oBAKNF,EAAG,EAA6B,KAC9BpjC,EAAK,CACH8B,UAAW,YACXuhC,MAAO,CACL,eACA,YACA,mBACA,OACA,SACA,aACA,iBACA,wBAEFC,QAAS,CACP,MACA,mBACA,mBACA,cACA,aACA,aACA,cACA,aACA,cACA,UACA,MACA,UACA,aACA,YACA,aACA,cACA,0BACA,sBAGJtjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,GACPI,MAAO,CACL,cACA,YACA,oBACA,YACA,cACA,aAEFC,QAAS,CACP,MACA,MACA,0BACA,mBACA,gBACA,cACA,qBAGJtjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,GACPI,MAAO,CAAC,QAAS,4BAA6B,sBAC9CC,QAAS,CACP,MACA,YACA,UACA,kBACA,UACA,mBACA,uBACA,IACA,cACA,mBACA,gBAGJtjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,IACPI,MAAO,GACPC,QAAS,CACP,MACA,cACA,YACA,oBACA,YACA,QACA,iCAKNF,EAAG,EAAwB,KACzBpjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CACL,aACA,YACA,cACA,eACA,wBACA,sBACA,YAEFC,QAAS,CACP,MACA,YACA,QACA,aACA,YACA,cACA,YACA,cACA,cACA,cACA,cACA,mBACA,mBACA,cACA,cACA,cACA,mBACA,cACA,cACA,cACA,cACA,YACA,iBACA,iBAINF,EAAG,EAAiD,KAClDpjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAErZ,oBAAoB,IAC7ByZ,MAAO,CAAC,oBAGZD,EAAG,EAA+C,KAChDpjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAElZ,aAAa,IACtBuZ,QAAS,CAAC,YAAa,YAAa,sBAGxCF,EAAG,EAAmE,KACpEpjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAEjZ,mBAAmB,EAAMD,aAAa,IAC/CsZ,MAAO,CAAC,YAAa,YAAa,sBAGtCD,EAAG,EAA6C,KAC9CpjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAEpZ,gBAAgB,IACzBwZ,MAAO,CAAC,gBAAiB,0BAG7BD,EAAG,EAA0G,KAC3GpjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CACJ,CACErZ,oBAAoB,EACpBO,mBAAmB,EACnBH,mBAAmB,IAGvBqZ,MAAO,CAAC,eAAgB,yBAI5BD,EAAG,EAAiC,KAClCpjC,EAAK,CACH8B,UAAW,UACXuhC,MAAO,CAAC,MAAO,MAAO,UACtBC,QAAS,CAAC,OAAQ,UAAW,GAAI,MAAO,SAAU,MAAO,YAI7DF,EAAG,EAAwD,KACzDpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,QAAS,CAAE3d,OAAQ,QAC1B+d,MAAO,CAAC,QAAS,+BAAgC,UACjDC,QAAS,CACP,sCACA,wCACA,4CAIJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,QAAS,CAAE3d,OAAQ,YAC1B+d,MAAO,CAAC,QAAS,gCACjBC,QAAS,CACP,sCACA,wCACA,4CAIJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,QAAS,CAAE3d,OAAQ,OAC1Bqe,MAAO,CAAC,aAIZP,EAAG,EAA6C,KAC9CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,aACA,OACA,UACA,wCACA,sBACA,oCAEFC,QAAS,CAAC,SAAU,UAAW,GAAI,SAAU,UAAW,aAI5DF,EAAG,EAA2C,KAC5CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,MAAO,MAAO,OAAQ,SAC9BC,QAAS,CAAC,OAAQ,UAAW,GAAI,OAAQ,qBAAsB,YAInEF,EAAG,EAAyC,KAC1CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,QAAS,UAAW,WAAY,aAAc,aACtDC,QAAS,CAAC,SAAU,eAAgB,GAAI,aAI5CF,EAAG,EAAuC,KACxCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,YAAa,MAAO,MAAO,WAAY,OAC/CC,QAAS,CAAC,OAAQ,UAAW,QAIjCF,EAAG,EAAwC,KACzCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,MACA,QACA,SACA,OACA,OACA,YACA,OACA,SACA,WACA,OAEFC,QAAS,CAAC,OAAQ,OAAQ,iBAAkB,mBAIhDF,EAAG,EAAwC,KACzCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,MAAO,MAAO,MAAO,OAC7BC,QAAS,CAAC,SAAU,QAAS,QAIjCF,EAAG,EAAuC,KACxCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,MAAO,MAAO,OAAQ,KAAM,QACpCC,QAAS,CAAC,OAAQ,OAAQ,WAI9BF,EAAG,EAAwC,KACzCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,MAAO,MAAO,SAAU,QAChCC,QAAS,CAAC,OAAQ,UAAW,QAIjCF,EAAG,EAA2C,KAC5CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,wBAAyB,yBACjCC,QAAS,CAAC,OAAQ,UAAW,OAAQ,QAIzCF,EAAG,EAA4C,KAC7CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,aAAc,QAAS,YAAa,cAC5CC,QAAS,CAAC,QAAS,OAAQ,MAAO,MAAO,QAI7CF,EAAG,EAAyC,KAC1CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,WACA,WACA,cACA,eACA,QACA,QACA,QACA,QAEFC,QAAS,CAAC,SAAU,QAAS,MAAO,QAIxCF,EAAG,EAA0C,KAC3CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,QACA,QACA,QACA,QACA,OACA,QACA,UACA,OACA,cACA,QACA,OACA,aAEFC,QAAS,CAAC,SAAU,SAAU,YAIlCF,EAAG,EAAwC,KACzCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,QACA,oCACA,YACA,WACA,eACA,YACA,cAEFC,QAAS,CAAC,aAAc,cAAe,kBAI3CF,EAAG,EAA4C,KAC7CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,QAAS,UAAW,MAAO,OAAQ,MAAO,QAClDC,QAAS,CAAC,QAAS,QAAS,QAIhCF,EAAG,EAAwC,KACzCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,MAAO,cACfC,QAAS,CACP,SACA,MACA,OACA,UACA,GACA,MACA,SACA,MACA,YAKNF,EAAG,EAAuC,KACxCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,MAAO,OAAQ,QAAS,SAChCC,QAAS,CACP,WACA,MACA,OACA,UACA,GACA,MACA,SACA,MACA,YAKNF,EAAG,EAAyC,KAC1CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,OAAQ,OAAQ,MAAO,SAC/BC,QAAS,CAAC,iBAAkB,SAAU,QAI1CF,EAAG,EAAyC,KAC1CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,QAAS,YACjBC,QAAS,CACP,WACA,MACA,OACA,UACA,GACA,MACA,SACA,MACA,YAKNF,EAAG,EAA2C,KAC5CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,MAAO,MAAO,MAAO,OAC7BC,QAAS,CAAC,SAAU,QAAS,QAIjCF,EAAG,EAAwC,KACzCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,SACA,YACA,SACA,SACA,WACA,SACA,UAEFC,QAAS,CAAC,SAAU,QAAS,cAIjCF,EAAG,EAAkD,KACnDpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,SAAU,UAClBC,QAAS,CAAC,OAAQ,UAAW,aAIjCF,EAAG,EAA+C,KAChDpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,eACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,SAAU,QAAS,cAIjCF,EAAG,EAAyC,KAC1CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,OAAQ,OAAQ,SAAU,SAAU,WAC5CC,QAAS,CAAC,OAAQ,OAAQ,aAI9BF,EAAG,EAAyC,KAC1CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,WAAY,SAAU,WAAY,OAC1CC,QAAS,CAAC,iBAAkB,aAAc,QAI9CF,EAAG,EAAwD,KACzDpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,MAAO,cACfC,QAAS,CACP,SACA,MACA,OACA,UACA,GACA,MACA,SACA,MACA,YAKNF,EAAG,EAAyC,KAC1CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,kBACRC,QAAS,CACP,mBACA,qBACA,OACA,UACA,GACA,MACA,YAKNF,EAAG,EAA4C,KAC7CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,oCACRC,QAAS,CACP,mBACA,qBACA,OACA,UACA,GACA,MACA,OACA,cAKNF,EAAG,EAAuC,KACxCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,4BACA,2BACA,aACA,YAEFC,QAAS,CACP,mBACA,qBACA,MACA,OACA,SACA,MACA,aAKNF,EAAG,EAAwC,KACzCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,QAAS,QACjBC,QAAS,CAAC,WAAY,UAAW,OAAQ,QAI7CF,EAAG,EAAuC,KACxCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,qlBACA,UAEFC,QAAS,CAAC,cAAe,QAAS,OAAQ,OAAQ,MAAO,QAI7DF,EAAG,EAAyC,KAC1CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,MAAO,QAAS,KACxBC,QAAS,CAAC,QAAS,YAAa,QAIpCF,EAAG,EAAsC,KACvCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,SAAU,uBAClBC,QAAS,CAAC,WAAY,mBAAoB,wBAI9CF,EAAG,EAAuC,KACxCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,IACA,IACA,QACA,OACA,2BAEFC,QAAS,CACP,MACA,MACA,aACA,YACA,aAKNF,EAAG,EAAyC,KAC1CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,OAAQ,QAAS,cACzBC,QAAS,CAAC,QAAS,SAAU,MAAO,OAAQ,MAAO,QAIvDF,EAAG,EAA2C,KAC5CpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,MACPI,MAAO,CACL,UACA,mBACA,mBACA,YACA,yDAEFC,QAAS,CAAC,QAAS,OAAQ,kBAI/BF,EAAG,EAAkC,KACnCpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,UACPU,MAAO,CAAC,MAAO,WAInBP,EAAG,EAAwC,KACzCpjC,EAAK,CACH8B,UAAW,iBACXuhC,MAAO,CAAC,SAAU,SAClBC,QAAS,CAAC,OAAQ,QAAS,MAAO,SAAU,WAIhDF,EAAG,EAA+D,KAChEpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,QAAS,CAAE3d,OAAQ,SAC1B+d,MAAO,CACL,YACA,sCACA,yBAEFC,QAAS,CAAC,WAAY,YAAa,eAGrCtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,QAAS,CAAE3d,OAAQ,YAC1B+d,MAAO,CAAC,QAAS,uCACjBC,QAAS,CAAC,wBAAyB,YAAa,aAGlDtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,QAAS,CAAE3d,OAAQ,OAC1Bqe,MAAO,CAAC,aAIZP,EAAG,EAA2C,KAC5CpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,SAAU,SAClBC,QAAS,CAAC,OAAQ,QAAS,MAAO,SAAU,WAIhDF,EAAG,EAAoD,KACrDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,aAAc,OAAQ,OAAQ,QAAS,cAC/CC,QAAS,CAAC,WAAY,GAAI,SAAU,UAAW,aAInDF,EAAG,EAAkD,KACnDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,OAAQ,SAAU,OAAQ,SAAU,MAAO,OACnDC,QAAS,CAAC,IAAK,QAAS,gBAI5BF,EAAG,EAAgD,KACjDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,kBACA,WACA,WACA,OACA,gBAEFC,QAAS,CAAC,IAAK,QAAS,cAI5BF,EAAG,EAA8C,KAC/CpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,SAAU,SAClBC,QAAS,CAAC,OAAQ,aAItBF,EAAG,EAA+C,KAChDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,OACA,SACA,UACA,QACA,QACA,aACA,QACA,UACA,YACA,SAEFC,QAAS,CAAC,QAAS,OAAQ,sBAI/BF,EAAG,EAA+C,KAChDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,SAAU,SAAU,SAAU,UACtCC,QAAS,CAAC,SAAU,QAAS,QAIjCF,EAAG,EAA8C,KAC/CpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,SAAU,SAAU,QAAS,QAAS,UAC9CC,QAAS,CAAC,QAAS,QAAS,WAIhCF,EAAG,EAAgD,KACjDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,UAAW,WAAY,SAAU,WACzCC,QAAS,CAAC,iBAAkB,QAAS,QAIzCF,EAAG,EAA+C,KAChDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,SAAU,SAClBC,QAAS,CAAC,OAAQ,aAItBF,EAAG,EAAkD,KACnDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,4BAA6B,6BACrCC,QAAS,CAAC,UAAW,OAAQ,UAAW,QAAS,QAIrDF,EAAG,EAAmD,KACpDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,aAAc,SAAU,aAAc,eAC9CC,QAAS,CAAC,OAAQ,OAAQ,MAAO,MAAO,QAI5CF,EAAG,EAAgD,KACjDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,cACA,cACA,iBACA,kBACA,UACA,UACA,UACA,UAEFC,QAAS,CAAC,SAAU,QAAS,MAAO,QAIxCF,EAAG,EAAgD,KACjDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,UAAW,UACnBC,QAAS,CAAC,OAAQ,OAAQ,aAI9BF,EAAG,EAAmD,KACpDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,QAAS,OACjBC,QAAS,CAAC,SAAU,gBAIxBF,EAAG,EAA+C,KAChDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,SAAU,aAClBC,QAAS,CAAC,OAAQ,OAAQ,aAI9BF,EAAG,EAA8C,KAC/CpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,8lBACA,gBAEFC,QAAS,CAAC,eAAgB,WAAY,MAAO,OAAQ,OAAQ,MAAO,QAIxEF,EAAG,EAA8C,KAC/CpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,WAAY,OAAQ,UAC5BC,QAAS,CAAC,OAAQ,QAAS,QAAS,WAIxCF,EAAG,EAAiD,KAClDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,WACA,WACA,QACA,QACA,OACA,QACA,SACA,UAEFC,QAAS,CAAC,WAAY,SAAU,aAIpCF,EAAG,EAA+C,KAChDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,WACA,UACA,QACA,SACA,WACA,SACA,aAEFC,QAAS,CAAC,cAAe,eAAgB,gBAI7CF,EAAG,EAAgD,KACjDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,YACRC,QAAS,CAAC,OAAQ,OAAQ,aAI9BF,EAAG,EAA0C,KAC3CpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,SAAU,aAClBC,QAAS,CAAC,OAAQ,QAAS,MAAO,SAAU,WAIhDF,EAAG,EAAkD,KACnDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,SAAU,SAAU,SAAU,UACtCC,QAAS,CAAC,SAAU,QAAS,QAIjCF,EAAG,EAA+C,KAChDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,YACA,cACA,WACA,MACA,aACA,WACA,cAEFC,QAAS,CAAC,SAAU,QAAS,cAIjCF,EAAG,EAAyD,KAC1DpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,OAAQ,QAAS,aAI/BF,EAAG,EAAsD,KACvDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,eACPI,MAAO,CAAC,eAAgB,eACxBC,QAAS,CAAC,OAAQ,QAAS,aAI/BF,EAAG,EAAgD,KACjDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,aAAc,WAAY,cAAe,UACjDC,QAAS,CAAC,iBAAkB,QAAS,QAIzCF,EAAG,EAAgD,KACjDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,qBACRC,QAAS,CAAC,kBAAmB,QAAS,WAI1CF,EAAG,EAAmD,KACpDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,uCACRC,QAAS,CAAC,QAAS,QAAS,MAAO,cAIvCF,EAAG,EAA8C,KAC/CpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,4BACA,2BACA,MACA,cAEFC,QAAS,CACP,mBACA,qBACA,MACA,OACA,SACA,aAKNF,EAAG,EAA+C,KAChDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,SAAU,UAClBC,QAAS,CAAC,OAAQ,OAAQ,MAAO,eAIrCF,EAAG,EAA6C,KAC9CpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,aAAc,yBACtBC,QAAS,CAAC,WAAY,6BAI1BF,EAAG,EAA8C,KAC/CpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,OAAQ,OAAQ,eACxBC,QAAS,CAAC,QAAS,aAAc,cAIrCF,EAAG,EAAgD,KACjDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,OAAQ,QAAS,cAAe,QACxCC,QAAS,CAAC,QAAS,SAAU,MAAO,QAAS,MAAO,QAIxDF,EAAG,EAAkD,KACnDpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,MACPI,MAAO,CACL,UACA,6BACA,6BACA,gBACA,yDAEFC,QAAS,CAAC,QAAS,kBAIvBF,EAAG,EAAkC,KACnCpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,UACPU,MAAO,CAAC,aAAc,cAI1BP,EAAG,EAAmC,KACpCpjC,EAAK,CACH8B,UAAW,YACXuhC,MAAO,CACL,MACA,QACA,SACA,IACA,KACA,OACA,UACA,WAEFC,QAAS,CAAC,IAAK,GAAI,SAIvBF,EAAG,EAAmD,KACpDpjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CACJ,CACEh7B,YAAY,IAGhBo7B,MAAO,CAAC,MAAO,QAAS,KACxBC,QAAS,CAAC,KAAM,UAAW,GAAI,OAAQ,UAAW,SAAU,IAAK,SAIrEF,EAAG,EAA+C,KAChDpjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CACJ,CACEthC,OAAQ,UAGZ0hC,MAAO,CACL,MACA,QACA,SACA,IACA,KACA,OACA,UACA,WAEFC,QAAS,CAAC,IAAK,GAAI,SAIvBF,EAAG,EAA+C,KAChDpjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CACJ,CACEthC,OAAQ,UAGZ0hC,MAAO,CACL,MACA,QACA,SACA,IACA,KACA,OACA,UACA,WAEFC,QAAS,CAAC,IAAK,GAAI,SAIvBF,EAAG,EAAyB,KAC1BpjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CAAC,IAAK,KAAM,KAAM,MAAO,OAAQ,OAAQ,SAChDC,QAAS,CAAC,GAAI,KAAM,QAAS,YAIjCF,EAAG,EAAmC,KACpCpjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,aACRC,QAAS,CAAC,cAGZtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,WAAY,YAChCC,QAAS,CAAC,YAAa,YAAa,eAGtCtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,aACRC,QAAS,CAAC,eAGZtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,eAGZtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,YACpBC,QAAS,CAAC,cAGZtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,eAGZtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,YACpBC,QAAS,CAAC,cAGZtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,eAGZtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,YACpBC,QAAS,CAAC,cAGZtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,aACRC,QAAS,CAAC,YAAa,gBAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,WAAY,YAAa,aAC7CC,QAAS,CACP,YACA,YACA,YACA,YACA,UACA,YACA,eAIJtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,WAAY,YAChCC,QAAS,CAAC,cAGZtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,YAAa,aAClCC,QAAS,CACP,WACA,YACA,YACA,YACA,YACA,eAIJtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,aACRC,QAAS,CAAC,YAGZtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,YACpBC,QAAS,CAAC,YAAa,cAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,YAAa,gBAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,aACRC,QAAS,CAAC,WAAY,eAGxBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,YAAa,aAClCC,QAAS,CACP,YACA,aACA,aACA,WACA,eAIJtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,WAAY,YAAa,aAC7CC,QAAS,CAAC,YAAa,gBAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,aACpBC,QAAS,CAAC,gBAGZtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,YAAa,eAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,YAAa,aAClCC,QAAS,CAAC,YAAa,YAAa,eAGtCtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,YAAa,aAClCC,QAAS,CAAC,aAAc,aAAc,gBAGxCtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,YAAa,eAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,YAAa,cAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,aACpBC,QAAS,CAAC,YAAa,eAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,YAAa,aAClCC,QAAS,CAAC,YAAa,gBAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,WAAY,YACjCC,QAAS,CAAC,aAAc,gBAG1BtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,YAAa,aAClCC,QAAS,CAAC,WAAY,YAAa,eAGrCtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,YACpBC,QAAS,CAAC,WAAY,cAGxBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,WAAY,eAGxBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YACRC,QAAS,CAAC,WAAY,eAGxBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,YAAa,aAClCC,QAAS,CAAC,YAAa,eAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,YAAa,eAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,YACpBC,QAAS,CAAC,WAAY,eAGxBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,SAAU,UAClBC,QAAS,CAAC,YAGZtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,YACpBC,QAAS,CAAC,gBAGZtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,YACpBC,QAAS,CAAC,UAAW,eAGvBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,aAAc,eAE1BtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,YACpBC,QAAS,CAAC,UAAW,YAAa,cAGpCtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WACRC,QAAS,CAAC,WAAY,aAExBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,YAAa,WAAY,eAErCtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,YAAa,aAClCC,QAAS,CAAC,WAAY,eAGxBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,cAAe,eACvBC,QAAS,CAAC,cAAe,cAG3BtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,YAAa,gBAEzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,YAAa,gBAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,UAAW,WAAY,YAAa,aAC5CC,QAAS,CAAC,UAAW,UAAW,cAGlCtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CACL,WACA,WACA,WACA,WACA,WACA,WACA,WAEFC,QAAS,CAAC,WAAY,WAAY,WAAY,WAAY,cAG5DtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,aAAc,cACtBC,QAAS,CAAC,aAAc,eAG1BtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,UAAW,WACnBC,QAAS,CAAC,UAAW,cAGvBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,aACpBC,QAAS,CAAC,YAAa,gBAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,cAAe,aAAc,aACrCC,QAAS,CACP,cACA,aACA,YACA,WACA,gBAIJtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,YACpBC,QAAS,CAAC,WAAY,eAGxBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,YAAa,eAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YACRC,QAAS,CAAC,WAAY,eAGxBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,UAAW,WAAY,WAAY,aAC3CC,QAAS,CAAC,SAAU,UAAW,iBAGjCtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,aAAc,cACtBC,QAAS,CAAC,YAAa,eAGzBtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,WAAY,WAAY,YAChCC,QAAS,CAAC,WAAY,WAAY,cAGpCtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,YAAa,YAAa,aAC/CC,QAAS,CACP,YACA,YACA,aACA,WACA,gBAIJtjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CAAC,MACPI,MAAO,CAAC,YAAa,YAAa,YAAa,aAC/CC,QAAS,CAAC,YAAa,iBAI3BF,EAAG,EAAmC,KACpCpjC,EAAK,CACH8B,UAAW,YACXuhC,MAAO,CACL,MACA,QACA,SACA,IACA,KACA,OACA,OACA,KACA,MACA,OACA,KACA,mBAEFC,QAAS,CACP,OACA,KACA,MACA,OACA,kBACA,OACA,KACA,MACA,OACA,kBACA,OACA,IACA,GACA,IACA,IACA,IACA,OACA,IACA,QAIJtjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,CAAEthC,OAAQ,UACjB0hC,MAAO,CACL,MACA,QACA,SACA,IACA,KACA,OACA,OACA,KACA,MACA,OACA,KACA,mBAEFC,QAAS,CACP,OACA,KACA,MACA,OACA,kBACA,OACA,KACA,MACA,OACA,kBACA,OACA,IACA,GACA,IACA,IACA,IACA,OACA,IACA,QAIJtjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,CAAEthC,OAAQ,CAAC,WAClB0hC,MAAO,CACL,MACA,QACA,SACA,IACA,KACA,OACA,OACA,KACA,MACA,OACA,KACA,mBAEFC,QAAS,CACP,kBACA,OACA,KACA,MACA,OACA,OACA,KACA,MACA,OACA,kBACA,OACA,IACA,GACA,IACA,IACA,IACA,OACA,IACA,QAIJtjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,CAAEthC,OAAQ,CAAC,WAClB0hC,MAAO,CACL,MACA,QACA,SACA,IACA,KACA,OACA,OACA,KACA,MACA,OACA,KACA,mBAEFC,QAAS,CACP,kBACA,OACA,KACA,MACA,OACA,OACA,KACA,MACA,OACA,kBACA,OACA,IACA,GACA,IACA,IACA,IACA,OACA,IACA,QAIJtjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,CAAEthC,OAAQ,CAAC,WAClB0hC,MAAO,CACL,MACA,QACA,SACA,IACA,KACA,OACA,OACA,KACA,MACA,OACA,KACA,mBAEFC,QAAS,CACP,kBACA,OACA,KACA,MACA,OACA,kBACA,OACA,KACA,MACA,OACA,OACA,IACA,GACA,IACA,IACA,IACA,OACA,IACA,QAIJtjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,CAAEthC,OAAQ,CAAC,WAClB0hC,MAAO,CAAC,QACRC,QAAS,CAAC,UAGZtjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,CAAEthC,OAAQ,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,MAAO,CAAC,YAAa,UAAW,UAAW,OAAQ,MAAO,QAC1DC,QAAS,CAAC,MAAO,QAAS,eAI9BF,EAAG,EAAqC,KACtCpjC,EAAK,CACH8B,UAAW,QACXuhC,MAAO,CACL,qCACA,uCACA,uCACA,iBACA,gCACA,oCACA,sBACA,qBACA,sBACA,2BACA,6BACA,8BACA,oCACA,gCACA,8BACA,8BACA,4BACA,wBACA,yBACA,mBACA,+BACA,yBAEA,4BACA,0BACA,0BACA,yBACA,0BAEFC,QAAS,CACP,sCACA,yBACA,+BACA,yBACA,wBACA,0BACA,yBACA,sBACA,kBACA,yBAKNF,EAAG,EAAqC,KACtCpjC,EAAK,CACH8B,UAAW,aACXuhC,MAAO,CACL,aACA,mBACA,gBACA,sBACA,uBACA,wBACA,wBACA,gBACA,oBACA,sBAEFC,QAAS,CACP,cACA,YACA,eACA,QACA,cACA,sBACA,yBACA,wBACA,cACA,iBACA,kBACA,sBACA,sBACA,uBACA,qDACA,sDACA,sDACA,uDACA,yBACA,qBACA,2BACA,2BACA,qBAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CAAC,CAAC,GACRI,MAAO,CACL,aACA,mBACA,gBACA,sBACA,uBACA,wBACA,wBACA,gBACA,qBAEFC,QAAS,CACP,cACA,YACA,eACA,QACA,cACA,sBACA,wBACA,cACA,iBACA,kBACA,sBACA,uBACA,sDACA,uDACA,yBACA,qBACA,2BACA,2BACA,qBAIJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,EAAC,GACPI,MAAO,CAAC,aAAc,kBACtBC,QAAS,CACP,cACA,iBACA,sDACA,0DAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CAAC,CAAErhB,sBAAsB,IAC/ByhB,MAAO,CAAC,aAAc,kBACtBC,QAAS,CACP,cACA,iBACA,sDACA,2BACA,0DAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,EAAC,GACPI,MAAO,CACL,aACA,iBACA,aACA,mBACA,gBACA,sBACA,uBACA,wBACA,wBACA,gBACA,oBACA,gBACA,yBAEFC,QAAS,CACP,2BACA,kBACA,cACA,iBACA,sDACA,uDACA,cACA,YACA,eACA,QACA,cACA,sBACA,wBACA,cACA,iBACA,kBACA,sBACA,0BAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CAAC,CAAErhB,sBAAsB,EAAOD,aAAa,IACnD0hB,MAAO,CACL,aACA,iBACA,wBACA,4BAEFC,QAAS,CACP,cACA,iBACA,mBACA,sDACA,uDACA,YACA,QACA,cACA,gBACA,kBACA,wBACA,0BAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CAAC,CAAErhB,sBAAsB,EAAMD,aAAa,IAClD0hB,MAAO,CACL,iBACA,oBACA,eACA,qBACA,mBACA,yBACA,0BACA,2BACA,kBACA,sBAEFC,QAAS,CACP,sDACA,cACA,yBAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CAAC,CAAErhB,sBAAsB,EAAMD,aAAa,IAClD0hB,MAAO,CACL,aACA,iBACA,aACA,mBACA,gBACA,sBACA,uBACA,wBACA,wBACA,gBACA,qBAEFC,QAAS,CACP,qBACA,2BACA,kBACA,2BACA,cACA,iBACA,sDACA,uDACA,cACA,YACA,eACA,QACA,cACA,sBACA,wBACA,cACA,iBACA,kBACA,sBACA,4BAKNF,EAAG,EAAqC,KACtCpjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CAAC,eAAgB,eAAgB,eAAgB,gBACxDC,QAAS,CACP,cACA,cACA,gBACA,qBAKNF,EAAG,EAA+B,KAChCpjC,EAAK,CACH8B,UAAW,QACXuhC,MAAO,CACL,mCACA,mCACA,mCACA,oCAEFC,QAAS,CACP,mCACA,mBACA,cACA,iBAKNF,EAAG,EAAgC,KACjC,CAAC,MAAO,MAAO,YAAa,YAAY51B,QAASqP,IAC/C7c,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAACpmB,GACPwmB,MAAO,CACL,mCACA,mCACA,mCACA,mCACA,mCACA,oCAEFC,QAAS,CACP,mBACA,cACA,YACA,qCAKN,CAAC,QAAS,UAAU91B,QAASqP,IAC3B7c,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAACpmB,GACPwmB,MAAO,CACL,WACA,WACA,WACA,WACA,WACA,YAEFC,QAAS,CACP,mCACA,mBACA,OACA,cACA,iBAKN,CAAC,OAAQ,WAAY,aAAa91B,QAASqP,IACzC7c,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAACpmB,GACPwmB,MAAO,CACL,2CACA,2CACA,2CACA,2CACA,2CACA,4CAEFC,QAAS,CACP,mCACA,gDACA,mBACA,cACA,iBAKNtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,UACPI,MAAO,CACL,mEACA,mEACA,mEACA,mEACA,mEACA,oEAEFC,QAAS,CACP,mCACA,gDACA,mBACA,cACA,eAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,UACPI,MAAO,CACL,mGACA,mGACA,mGACA,mGACA,mGACA,oGAEFC,QAAS,CACP,mCACA,gDACA,mBACA,cACA,eAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,UACPI,MAAO,CACL,mIACA,mIACA,mIACA,mIACA,mIACA,oIAEFC,QAAS,CACP,mCACA,gDACA,mBACA,cACA,eAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,YACPI,MAAO,CACL,mDACA,mDACA,mDACA,mDACA,mDACA,oDAEFC,QAAS,CACP,mCACA,gDACA,mBACA,cACA,iBAINF,EAAG,EAA8B,KAC/BpjC,EAAK,CACH8B,UAAW,QACXuhC,MAAO,CACL,wIACA,2GACA,0IACA,yKAEFC,QAAS,CACP,uCACA,2GACA,4OACA,eACA,0BAEFK,MAAO,CAAC,GAAI,CAAC,EAAG,UAAM3iC,OAI1BoiC,EAAG,EAAgC,KACjCpjC,EAAK,CACH8B,UAAW,UACXuhC,MAAO,CAAC,IACRC,QAAS,CAAC,IAAK,MAAO,OAExBtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,CAAEt6B,mBAAmB,IAC5B06B,MAAO,CAAC,IACRC,QAAS,CAAC,IAAK,MAAO,OAExBtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,CAAEt6B,mB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,IACRC,QAAS,CAAC,IAAK,SAInBF,EAAG,EAAyB,KAC1BpjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CACL,6BACA,6BACA,6BACA,6BACA,8BAEFC,QAAS,CACP,GACA,6BACA,6BACA,6BACA,SACA,gCACA,6BACA,kCAKNF,EAAG,EAAyB,KAC1BpjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CACL,uCACA,uCACA,uCACA,uCACA,uCACA,wCAEFC,QAAS,CACP,GACA,0CACA,uCACA,0CACA,mCACA,SACA,uCACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,MAACjiC,GACPqiC,MAAO,CACL,uCACA,uCACA,wCAEFC,QAAS,CACP,GACA,uCACA,0CACA,mCACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,MACPI,MAAO,CACL,uCACA,wCAEFC,QAAS,CACP,GACA,0CACA,uCACA,0CACA,SACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,GACPI,MAAO,CAAC,wCACRC,QAAS,CACP,0CACA,0BACA,uCACA,uCACA,uCACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,GACPI,MAAO,CAAC,wCACRC,QAAS,CACP,GACA,0CACA,QACA,uCACA,uCACA,uCACA,uCACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,GACPI,MAAO,CAAC,wCACRC,QAAS,CACP,GACA,uCACA,0CACA,SACA,uCACA,uCACA,uCACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,GACPI,MAAO,CACL,uCACA,uCACA,uCACA,wCAEFC,QAAS,CACP,GACA,0CACA,SACA,uCACA,uCACA,uCACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,GACPI,MAAO,CACL,uCACA,uCACA,uCACA,wCAEFC,QAAS,CACP,GACA,0CACA,SACA,uCACA,uCACA,uCACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,GACPI,MAAO,CAAC,wCACRC,QAAS,CACP,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,GACPI,MAAO,CAAC,wCACRC,QAAS,CACP,GACA,0CACA,SACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,GACPI,MAAO,CAAC,wCACRC,QAAS,CACP,GACA,0CACA,SACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,OACPI,MAAO,CAAC,wCACRC,QAAS,CACP,GACA,0CACA,uCACA,0CACA,mCACA,SACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,OACPI,MAAO,CACL,uCACA,wCAEFC,QAAS,CACP,GACA,0CACA,uCACA,0CACA,mCACA,SACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,wCAEFC,QAAS,CACP,GACA,0CACA,0CACA,mCACA,uCACA,SACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,OACPI,MAAO,CACL,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,wCAEFC,QAAS,CACP,GACA,0CACA,uCACA,0CACA,mCACA,SACA,uCACA,0CAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,WACPI,MAAO,GACPC,QAAS,CACP,GACA,0CACA,uCACA,0CACA,mCACA,SACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,4CAKNF,EAAG,EAA+D,KAChEpjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,UACPI,MAAO,CAAC,MAAO,MAAO,SAAU,IAChCC,QAAS,CAAC,YAAa,YAEzBtjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,CAAC,MAAO,QACfI,MAAO,CAAC,MAAO,OACfC,QAAS,CAAC,SAAU,SAAU,MAEhCtjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,CAAC,IAAK,IAAK,MAClBI,MAAO,CAAC,IAAK,IAAK,KAClBC,QAAS,CAAC,IAAK,MAEjBtjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,CAAC,IAAK,IAAK,IAAK,CAAEW,IAAK,OAAS,IAAM,EAAG,CAAEx9B,SAAU,UAC5Di9B,MAAO,CAAC,IAAK,IAAK,IAAK,IACvBC,QAAS,CAAC,OAEZtjC,EAAK,CAAE8B,UAAW,OAAQwhC,QAAS,CAAC,MAAO,QAG7CF,EAAG,EAAsD,KACvDpjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,CAAEW,IAAK,EAAGC,IAAK,EAAGC,OAAQ,IACjCT,MAAO,CAAC,MAAO,MAAO,UACtBC,QAAS,CAAC,YAAa,SAAU,MAEnCtjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,IACxBI,MAAO,CAAC,IAAK,IAAK,KAClBC,QAAS,CAAC,IAAK,QAInBF,EAAG,EAAsC,KACvCpjC,EAAK,CACH8B,UAAW,eACXuhC,MAAO,CAAC,YAAa,YAAa,YAAa,aAC/CC,QAAS,CACP,YACA,YACA,YACA,SACA,WACA,iBAKNF,EAAG,EAAwB,KACzBpjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CACL,kCACA,mCACA,kCACA,+BACA,gCACA,sBACA,oCACA,8BACA,oCACA,gCACA,gCACA,gCACA,6BACA,8BACA,0BACA,8BACA,iCACA,6BACA,gCACA,+BACA,6BACA,4BACA,+BACA,2BACA,6BACA,yBACA,gCACA,iCAEFC,QAAS,CACP,uBACA,6BACA,+BACA,gCACA,mCACA,2BACA,yBACA,mCAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAEnqB,UAAW,CAAC,KAAM,QAC3BuqB,MAAO,CAAC,qBAAsB,0BAC9BC,QAAS,CACP,sBACA,oCACA,8BACA,oCACA,gCACA,gCACA,gCACA,uBACA,6BACA,+BACA,gCACA,sCAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAEnqB,UAAW,CAAC,KAAM,QAC3BwqB,QAAS,CACP,qBACA,yBACA,sBACA,oCACA,8BACA,oCACA,gCACA,gCACA,gCACA,uBACA,6BACA,+BACA,gCACA,sCAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAEjqB,UAAW,CAAC,QACrBqqB,MAAO,CACL,kCACA,mCACA,kCACA,+BACA,gCACA,sBACA,oCACA,8BACA,oCACA,gCACA,gCACA,gCACA,6BACA,8BACA,0BACA,iCACA,6BACA,gCACA,+BACA,6BACA,6BAEFC,QAAS,CACP,uBACA,6BACA,+BACA,gCACA,mCACA,mCAKNF,EAAG,EAA6B,KAC9BpjC,EAAK,CACH8B,UAAW,QACXuhC,MAAO,CACL,cACA,WACA,WACA,cACA,eAEFC,QAAS,CACP,aACA,cACA,YACA,aACA,eACA,UACA,cAKNF,EAAG,EAAkE,KACnEpjC,EAAK,CACH8B,UAAW,gBACXmhC,KAAM,CAAC,GACPI,MAAO,CAAC,IAAK,IAAK,MAAO,QACzBC,QAAS,CAAC,IAAK,MAAO,MAAO,MAAO,GAAI,gCAI5CF,EAAG,EAAgC,KACjCpjC,EAAK,CACH8B,UAAW,eACXuhC,MAAO,CACL,IACA,OACA,cACA,yBACA,kCACA,wBACA,kBACA,iBACA,mBACA,sBACA,uBAEFC,QAAS,CACP,GACA,IACA,OACA,MACA,yBACA,yBACA,8BAKNF,EAAG,EAAgC,KACjCpjC,EAAK,CACH8B,UAAW,eACXuhC,MAAO,CACL,kBACA,iBACA,mBACA,sBACA,sBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,sBACA,mBACA,uBAEFC,QAAS,CACP,MACA,MACA,mBACA,mBACA,mBACA,mBACA,2BACA,2BACA,yBACA,yBACA,yBACA,2BAKNF,EAAG,EAA0D,KAC3DpjC,EAAK,CACH8B,UAAW,eACXmhC,KAAM,CAAC,CAAEhgC,SAAU,UACnB0gC,MAAO,CACL,MAEA,kBACA,sBACA,2BACA,8BAKNP,EAAG,EAA8C,KAC/CpjC,EAAK,CACH8B,UAAW,eACXmhC,KAAM,CAAC,CAAEhgC,SAAU,SACnBogC,MAAO,CAAC,mBACRC,QAAS,CACP,MACA,mBACA,mBACA,mBACA,mBACA,iBACA,2BACA,mBACA,sBACA,sBACA,sBACA,mBACA,yBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,2BAKNF,EAAG,EAAqD,KACtDpjC,EAAK,CACH8B,UAAW,eACXmhC,KAAM,CAAC,CAAEhgC,SAAU,eACnBogC,MAAO,CAAC,kBACRC,QAAS,CACP,MACA,mBACA,mBACA,mBACA,mBACA,kBACA,2BACA,mBACA,sBACA,sBACA,sBACA,mBACA,yBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,2BAKNF,EAAG,EAAkD,KACnDpjC,EAAK,CACH8B,UAAW,eACXmhC,KAAM,CAAC,CAAEhgC,SAAU,aACnBogC,MAAO,CAAC,mBAAoB,oBAC5BC,QAAS,CACP,MACA,mBACA,mBACA,mBACA,mBACA,iBACA,kBACA,2BACA,mBACA,sBACA,sBACA,sBACA,mBACA,yBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,2BAKNF,EAAG,EAA6C,KAC9CpjC,EAAK,CACH8B,UAAW,eACXmhC,KAAM,CAAC,CAAEhgC,SAAU,QACnBogC,MAAO,CAAC,mBAAoB,oBAC5BC,QAAS,CACP,MACA,mBACA,mBACA,mBACA,mBACA,iBACA,kBACA,2BACA,mBACA,sBACA,sBACA,sBACA,mBACA,yBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,2BAKNF,EAAG,EAAoD,KACrDpjC,EAAK,CACH8B,UAAW,eACXmhC,KAAM,CAAC,CAAEhgC,SAAU,eACnBogC,MAAO,CACL,mBACA,mBACA,mBACA,mBACA,oBAEFC,QAAS,CACP,MACA,iBACA,kBACA,2BACA,mBACA,sBACA,sBACA,sBACA,yBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,2BAKNF,EAAG,EAAmD,KACpDpjC,EAAK,CACH8B,UAAW,eACXmhC,KAAM,CAAC,CAAEhgC,SAAU,aACnBogC,MAAO,CACL,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,uBAEFC,QAAS,CACP,MACA,mBACA,mBACA,mBACA,mBACA,iBACA,kBACA,2BACA,mBACA,sBACA,sBACA,sBACA,mBACA,8BAKNF,EAAG,EAA8C,KAC/CpjC,EAAK,CACH8B,UAAW,eACXmhC,KAAM,CAAC,CAAEhgC,SAAU,SACnBogC,MAAO,CACL,sBACA,mBACA,sBACA,uBAEFC,QAAS,CACP,MACA,mBACA,mBACA,mBACA,mBACA,iBACA,kBACA,2BACA,mBACA,yBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,2BAKNF,EAAG,EAAkC,KAqWnC,IAAIW,EAAW,GApWE,CACf,CACEpiC,OAAQ,KACR0hC,MAAO,CACL,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBAEFC,QAAS,CACP,kBACA,mBACA,gBACA,kBACA,mBACA,kBACA,UAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,cACA,aACA,WACA,aACA,aACA,aACA,WACA,cACA,cAEFC,QAAS,CACP,cACA,WACA,aACA,WACA,aACA,aACA,gBAGJ,CACE3hC,OAAQ,KACR0hC,MAAO,CACL,aACA,aACA,aACA,aACA,aACA,aACA,eACA,gBAEFC,QAAS,CACP,aACA,aACA,aACA,aACA,cACA,kBAGJ,CACE3hC,OAAQ,KACR0hC,MAAO,CACL,cACA,cACA,cACA,cACA,cACA,cACA,cACA,eAEFC,QAAS,CACP,KACA,IACA,MACA,GACA,IACA,cACA,cACA,cACA,cACA,gBAGJ,CACE3hC,OAAQ,KACR0hC,MAAO,CACL,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,aAEFC,QAAS,CACP,YACA,YACA,aACA,aACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,cAGJ,CACE3hC,OAAQ,KACR0hC,MAAO,CACL,cACA,cACA,cACA,eAEFC,QAAS,CAAC,aAAc,eAAgB,gBAE1C,CACE3hC,OAAQ,KACR0hC,MAAO,CAAC,eAAgB,kBACxBC,QAAS,CACP,YACA,YACA,YACA,YACA,YACA,YACA,cAGJ,CACE3hC,OAAQ,KACR0hC,MAAO,CACL,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAEFC,QAAS,CACP,aACA,aACA,aACA,aACA,aACA,eAGJ,CACE3hC,OAAQ,KACR0hC,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,YAAa,WAAY,YAAa,YAElD,CACE3hC,OAAQ,KACR0hC,MAAO,CACL,cACA,cACA,cACA,cACA,cACA,cACA,cACA,eAEFC,QAAS,CAAC,cAAe,cAAe,cAAe,gBAEzD,CACE3hC,OAAQ,KACR0hC,MAAO,CAAC,gBAAiB,iBACzBC,QAAS,CACP,MACA,UACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,kBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,aAEFC,QAAS,CACP,YACA,YACA,aACA,aACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,cAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,gBAEFC,QAAS,CACP,eACA,eACA,eACA,aACA,eACA,eACA,kBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,WACA,WACA,WACA,WACA,WACA,WACA,YAEFC,QAAS,CACP,eACA,YACA,YACA,YACA,QACA,WACA,WACA,aACA,aACA,YACA,YACA,aACA,aACA,YACA,cAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,qBACA,qBACA,qBACA,mBAEFC,QAAS,CACP,qBACA,qBACA,qBACA,qBACA,qBACA,kBACA,kBACA,kBACA,kBACA,YACA,qBACA,eACA,YACA,YACA,YACA,QACA,WACA,WACA,aACA,aACA,YACA,YACA,aACA,aACA,YACA,YACA,uBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAEFC,QAAS,CACP,YACA,aACA,aACA,aACA,aACA,YACA,YACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,eAQG91B,QAASw2B,IACZA,EAAQX,QAAOU,EAAWA,EAASrjC,OAAOsjC,EAAQX,QACtDrjC,EAAK,CACH8B,UAAW,iBACXuhC,MAAOW,EAAQX,MACfC,QAASU,EAAQV,QACjBL,KAAM,CAACe,EAAQriC,YAKnB3B,EAAK,CACH8B,UAAW,iBACXuhC,MAAO,IAAIU,GACXT,QAAS,CAAC,OACVL,KAAM,CAAC,WAIXG,EAAG,EAAkC,KACnCpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,UACPU,MAAO,CAAC,YAAa,iBAIzBP,EAAG,EAAyB,KAC1BpjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CACL,eACA,eACA,eACA,eACA,eACA,eACA,eACA,gBAEFC,QAAS,CAAC,eAAgB,eAAgB,MAAO,wBAIrDF,EAAG,EAAwB,KACzBpjC,EAAK,CACH8B,UAAW,QACXuhC,MAAO,CACL,gBACA,gBACA,gBACA,gBACA,gBACA,WACA,iBACA,iBACA,kBAEFC,QAAS,CAAC,gBAAiB,eAAgB,qBAI/CF,EAAG,EAAyB,KAC1BpjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CACL,YACA,YACA,YACA,YACA,WACA,YAEFC,QAAS,CACP,YACA,YACA,WACA,WACA,IACA,YACA,YACA,WACA,MAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAE7hC,gBAAgB,IACzBiiC,MAAO,CAAC,YAAa,WAAY,YAAa,YAC9CC,QAAS,CAAC,YAAa,cAEzBtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAE9hC,gBAAgB,IACzBkiC,MAAO,CAAC,YAAa,YAAa,aAClCC,QAAS,CAAC,WAAY,WAAY,cAEpCtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAE7hC,gBAAgB,EAAMD,gBAAgB,IAC/CkiC,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,YAAa,WAAY,WAAY,gBAInDF,EAAG,EAAwB,KACzBpjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CAAC,qBAAsB,MAC9BC,QAAS,CACP,mBACA,qBACA,OACA,OACA,cAKNF,EAAG,EAAwC,KACzCpjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAEzgB,kBAAkB,IAC3B6gB,MAAO,CAAC,qBAAsB,KAAM,OAAQ,QAAS,QACrDC,QAAS,CACP,mBACA,qBACA,mBACA,OACA,cAKNF,EAAG,EAAqC,KACtCpjC,EAAK,CACH8B,UAAW,cACXuhC,MAAO,CACL,gBACA,eACA,mBACA,eACA,OACA,MAEFC,QAAS,CAAC,MAAO,SAAU,eAI/BF,EAAG,EAAiC,KAClCpjC,EAAK,CACH8B,UAAW,UACXuhC,MAAO,CAAC,SAAU,aAAc,mBAAoB,cACpDC,QAAS,CAAC,SAAU,SAAU,SAAU,YAI5CF,EAAG,EAAsC,KACvCpjC,EAAK,CACH8B,UAAW,cACXuhC,MAAO,CACL,gBACA,YACA,UACA,cAEFC,QAAS,CAAC,MAAO,SAAU,oCAI/BF,EAAG,EAAsC,KACvCpjC,EAAK,CACH8B,UAAW,cACXuhC,MAAO,CACL,+BACA,mBACA,UACA,WAEFC,QAAS,CAAC,QAAS,YAIvBF,EAAG,EAA0C,KAC3CpjC,EAAK,CACH8B,UAAW,kBACXuhC,MAAO,CACL,kBACA,SACA,UACA,cAEFC,QAAS,CACP,MACA,SACA,+BACA,gBACA,SACA,cAKNF,EAAG,EAA0C,KAC3CpjC,EAAK,CACH8B,UAAW,kBACXuhC,MAAO,CAAC,QAAS,KAAM,eACvBC,QAAS,CAAC,MAAO,IAAK,gBAI1BF,EAAG,EAAsE,KACvEpjC,EAAK,CACH8B,UAAW,WACXuhC,MAAO,CACL,QACA,QACA,WACA,wBACA,aACA,mBACA,cACA,aACA,mBACA,qBACA,gBACA,qBACA,qBACA,yDACA,qBACA,uBACA,aACA,sBACA,qBACA,QACA,QACA,QACA,mBACA,mBACA,mBACA,uCACA,gCACA,mCACA,qCACA,+DACA,qBAEFC,QAAS,CACP,mBACA,cACA,QACA,aACA,eACA,UACA,aACA,aACA,SACA,UACA,OACA,mBACA,UACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,SACA,SACA,SACA,MACA,YACA,eACA,8CACA,kBACA,qBACA,YACA,kBACA,2BACA,gEACA,kEAKNF,EAAG,EAAkC,KACnCpjC,EAAK,CACH8B,UAAW,WACXuhC,MAAO,CACL,WACA,WACA,WACA,WACA,WACA,mBACA,2BACA,4BAEFC,QAAS,CACP,QACA,GACA,qBACA,UACA,UACA,eACA,WACA,oBAKNF,EAAG,EAA6D,KAC9DpjC,EAAK,CACH8B,UAAW,WACXmhC,KAAM,CAAC,CAAE5Y,WAAW,IACpBgZ,MAAO,CAAC,uBAAwB,KAAM,KAAM,yBAC5CC,QAAS,CACP,wBACA,yBACA,MACA,iCAKNF,EAAG,EAAkC,KACnCpjC,EAAK,CACH8B,UAAW,WACXuhC,MAAO,CACL,QACA,aACA,gBACA,UACA,eACA,aACA,UACA,aAEFC,QAAS,CACP,SACA,UACA,YACA,aACA,QACA,eACA,uBAKNF,EAAG,EAAgD,KACjDpjC,EAAK,CACH8B,UAAW,YACXuhC,MAAO,CAAC,4BACRC,QAAS,CACP,yBACA,2BACA,GACA,iCAKNF,EAAG,EAAuC,KACxC,IAkwGIW,EAAW,GAlwGA,CACb,CACEpiC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,YACA,eAEFC,QAAS,CACP,QACA,eACA,eACA,cACA,GACA,cACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,YACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,eACA,aACA,aAEFC,QAAS,CACP,QACA,gBACA,iBACA,iBACA,GACA,iBACA,gBACA,aACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,eACA,cACA,WACA,YAEFC,QAAS,CACP,QACA,gBACA,eACA,gBACA,GACA,iBACA,gBACA,aACA,eACA,YACA,WACA,QACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,eACA,eACA,cACA,cACA,aACA,cAEFC,QAAS,CACP,gBACA,gBACA,QACA,GACA,iBACA,gBACA,aACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,aACA,aACA,gBACA,gBACA,gBACA,eACA,eACA,gBAEFC,QAAS,CACP,iBACA,iBACA,QACA,GACA,iBACA,gBACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,cACA,cACA,cACA,cACA,eACA,eACA,eACA,gBAEFC,QAAS,CACP,eACA,iBACA,iBACA,QACA,GACA,iBACA,gBACA,aACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,cACA,UACA,UACA,WACA,YAEFC,QAAS,CACP,mBACA,cACA,aACA,cACA,cACA,eACA,eACA,GACA,UACA,MACA,aAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,YACA,aACA,eACA,gBACA,YACA,aACA,iBAEFC,QAAS,CACP,aACA,cACA,cACA,cACA,iBACA,eACA,eACA,GACA,UACA,MACA,aAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,aACA,aACA,gBACA,gBACA,gBACA,iBACA,iBACA,kBAEFC,QAAS,CACP,YACA,YACA,YACA,eACA,eACA,eACA,gBACA,gBACA,gBACA,GACA,QACA,aACA,gBACA,mBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,WACA,YACA,eAEFC,QAAS,CAAC,GAAI,aAAc,eAAgB,SAAU,eAExD,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,gBACA,WACA,YAEFC,QAAS,CACP,eACA,gBACA,aACA,cACA,GACA,UACA,MACA,aAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,gBAAiB,eAAgB,aAAc,cACvDC,QAAS,CACP,cACA,iBACA,YACA,eACA,GACA,cACA,SACA,OACA,UAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,gBACA,YACA,aACA,cAEFC,QAAS,CACP,QACA,GACA,iBACA,gBACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,gBACA,eACA,YACA,aAEFC,QAAS,CACP,QACA,GACA,iBACA,eACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,aAAc,gBAAiB,eAAgB,cACvDC,QAAS,CACP,QACA,GACA,gBACA,eACA,eACA,aACA,WAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,WAAY,eAAgB,eACpCC,QAAS,CACP,QACA,WACA,gBACA,WACA,aAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,gBAAiB,gBAAiB,cAC1CC,QAAS,CACP,GACA,UACA,gBACA,cACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,iBACA,cACA,gBACA,cACA,gBACA,iBACA,eAEFC,QAAS,CACP,GACA,aACA,eACA,cACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,YACA,YACA,YACA,YACA,aACA,YACA,YACA,eACA,eACA,eACA,eACA,gBACA,eACA,eACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,iBAEFC,QAAS,CACP,aACA,aACA,WACA,WACA,YACA,aACA,WACA,cACA,cACA,iBACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,mBACA,iBACA,gBACA,cACA,aAEFC,QAAS,CACP,GACA,eACA,mBACA,iBACA,mBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,mBACA,iBACA,gBACA,cACA,aAEFC,QAAS,CACP,GACA,eACA,mBACA,iBACA,mBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,iBACA,eACA,eACA,eACA,eACA,cACA,eACA,cACA,cACA,cACA,gBAEFC,QAAS,CACP,iBACA,cACA,cACA,cACA,aACA,cACA,cACA,iBACA,kBACA,eACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,cACA,iBACA,gBACA,QACA,WACA,qBAEFC,QAAS,CAAC,eAAgB,OAAQ,uBAEpC,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,cAAe,eAAgB,eACvCC,QAAS,CAAC,OAAQ,cAAe,gBAEnC,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,eACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,eACA,eACA,eACA,eACA,eACA,gBAEFC,QAAS,CACP,gBACA,eACA,YACA,YACA,YACA,YACA,WACA,aACA,cACA,eACA,gBACA,iBACA,iBACA,iBACA,iBACA,mBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,mBACA,kBACA,qBACA,oBACA,qBACA,oBACA,kBACA,iBACA,iBACA,gBACA,gBACA,eACA,eACA,cACA,eACA,cACA,eACA,gBACA,gBACA,iBACA,gBACA,iBACA,iBACA,kBACA,kBACA,kBACA,sBACA,oBACA,kBACA,gBACA,iBAEFC,QAAS,CACP,aACA,iBACA,iBACA,gBACA,eACA,oBACA,oBACA,sBACA,kBACA,gBACA,gBACA,oBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,cACA,cACA,cACA,cACA,cACA,cACA,cACA,kBACA,iBACA,cACA,cACA,cACA,cACA,cACA,cACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,kBACA,kBACA,kBAEA,cACA,iBACA,kBACA,cACA,iBACA,mBAEFC,QAAS,CACP,QACA,GACA,cACA,cACA,eACA,kBACA,kBACA,mBACA,iBACA,mBACA,qBACA,8BACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,gBACA,eACA,iBACA,iBAEFC,QAAS,CAAC,QAAS,GAAI,8BAA+B,gBAExD,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,eACA,eACA,eACA,gBAEFC,QAAS,CACP,eACA,GACA,aACA,iBACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,eAAgB,cAAe,aAAc,gBACrDC,QAAS,CACP,WACA,eACA,eACA,eACA,eACA,cACA,cACA,GACA,cACA,+CAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,aACA,gBACA,kBACA,iBACA,oBACA,eACA,kBAEFC,QAAS,CACP,WACA,qBACA,cACA,eACA,eACA,eACA,KAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,aAAc,eAAgB,eACtCC,QAAS,CACP,SACA,cACA,cACA,eACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,cAAe,eAAgB,cACvCC,QAAS,CACP,SACA,cACA,cACA,eACA,cACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,eACA,WACA,YAEFC,QAAS,CACP,SACA,cACA,cACA,eACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,eACA,gBAEFC,QAAS,CAAC,MAAO,mBAAoB,kBAEvC,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,cAEFC,QAAS,CAAC,SAAU,YAAa,aAAc,kBAEjD,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,cAAe,WAAY,WAAY,eAC/CC,QAAS,CACP,aACA,UACA,eACA,cACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,WACA,YACA,WACA,WACA,eACA,gBACA,iBACA,iBACA,YACA,gBAEFC,QAAS,CAAC,MAAO,iBAAkB,YAAa,oBAElD,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,WACA,eACA,gBACA,iBACA,iBACA,YACA,gBAEFC,QAAS,CACP,MACA,WACA,YACA,gBACA,gBACA,gBACA,iBACA,iBACA,iBACA,oBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,eACA,eACA,eACA,eACA,eACA,eACA,aACA,cAEFC,QAAS,CACP,MACA,gBACA,eACA,eACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,cAAe,aAAc,aAAc,eACnDC,QAAS,CACP,MACA,gBACA,cACA,gBACA,cAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,eACA,aACA,aACA,aACA,gBACA,gBAEFC,QAAS,CAAC,MAAO,YAAa,YAAa,kBAE7C,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,eACA,eACA,eACA,WACA,WACA,WACA,WACA,YAEFC,QAAS,CACP,YACA,YACA,gBACA,YACA,gBACA,kBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,eAAgB,cAAe,eAAgB,eACvDC,QAAS,CACP,eACA,cACA,eACA,eACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,eAAgB,eAAgB,YACxCC,QAAS,CAAC,MAAO,YAAa,iBAEhC,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,gBACA,cACA,eAEFC,QAAS,CACP,eACA,cACA,2BACA,eACA,sBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,eACA,aACA,cAEFC,QAAS,CACP,MACA,gBACA,YACA,YACA,kBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,eACA,aACA,cAEFC,QAAS,CACP,MACA,gBACA,YACA,YACA,kBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,eACA,aACA,cAEFC,QAAS,CACP,MACA,gBACA,YACA,YACA,kBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,gBACA,aACA,WACA,aACA,iBAEFC,QAAS,CACP,QACA,cACA,aACA,aACA,oBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,eACA,YACA,YACA,gBAEFC,QAAS,CACP,MACA,eACA,iBACA,YACA,cAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,eACA,cACA,aACA,eACA,eAEFC,QAAS,CACP,YACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,eACA,gBACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,eACA,YACA,aAEFC,QAAS,CACP,aACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,eACA,gBACA,cAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,eACA,eACA,gBAEFC,QAAS,CACP,aACA,iBACA,eACA,gBACA,cAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,cAAe,aAAc,gBACrCC,QAAS,CACP,SACA,aACA,aACA,eACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,eACA,aACA,aACA,iBAEFC,QAAS,CACP,MACA,gBACA,YACA,YACA,kBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,gBACA,eACA,aACA,gBACA,gBAEFC,QAAS,CACP,YACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,eACA,iBACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,gBACA,eACA,aACA,gBACA,gBAEFC,QAAS,CACP,YACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,gBACA,iBACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,gBACA,eACA,aACA,gBACA,gBAEFC,QAAS,CACP,YACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,gBACA,iBACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,gBACA,eACA,aACA,gBACA,gBAEFC,QAAS,CACP,YACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,gBACA,iBACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,WACA,WACA,WACA,eACA,eACA,eACA,cACA,cACA,eAEFC,QAAS,CACP,UACA,WACA,cACA,0BACA,iBACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,aACA,aACA,aACA,aACA,aACA,SACA,SACA,SACA,SACA,SACA,UAEFC,QAAS,CACP,YACA,YACA,gBACA,YACA,gBACA,kBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,gBACA,YACA,YACA,YACA,iBAEFC,QAAS,CACP,eACA,iBACA,iBACA,gBACA,cACA,cACA,aACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,eACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAEFC,QAAS,CACP,aACA,gBACA,YACA,cACA,cACA,aACA,aACA,aACA,aACA,aACA,YACA,cACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,WACA,WACA,eACA,eACA,WACA,WACA,WACA,aACA,cACA,WACA,aACA,eACA,eACA,cACA,eACA,gBAEFC,QAAS,CACP,GACA,YACA,UACA,YACA,cACA,cACA,aAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,eAAgB,gBAAiB,eACzCC,QAAS,CACP,WACA,aACA,cACA,eACA,aACA,eACA,gBACA,cACA,cACA,cACA,cACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,WACA,WACA,WACA,cACA,cACA,eAEFC,QAAS,CACP,YACA,YACA,YACA,UACA,UACA,WACA,YACA,cACA,eACA,cACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,cACA,aACA,eACA,iBACA,kBACA,mBACA,iBACA,iBACA,gBAEFC,QAAS,CACP,SACA,aACA,aACA,eACA,cACA,iBACA,iBACA,kBACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,cAAe,aAAc,gBACrCC,QAAS,CACP,SACA,aACA,aACA,eACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,aACA,aACA,gBACA,gBACA,gBACA,eACA,gBACA,iBAEFC,QAAS,CACP,QACA,GACA,8BACA,eACA,YACA,cAGJ,CACE3hC,OAAQ,CAAC,SACT0hC,MAAO,CACL,gBACA,gBACA,gBACA,gBACA,iBAEFC,QAAS,CACP,QACA,GACA,8BACA,iBACA,cACA,aACA,aACA,aAGJ,CACE3hC,OAAQ,CAAC,SACT0hC,MAAO,CACL,eACA,eACA,eACA,eACA,gBAEFC,QAAS,CACP,QACA,GACA,8BACA,iBACA,cACA,cACA,aACA,aACA,aAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,eAAgB,cAAe,cAAe,cACtDC,QAAS,CACP,QACA,GACA,8BACA,eACA,cACA,cACA,aACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,cACA,aACA,cACA,cACA,cAEFC,QAAS,CACP,gBACA,QACA,aACA,aACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,YACA,aACA,gBACA,gBACA,cAEFC,QAAS,CACP,QACA,GACA,8BACA,eACA,cACA,cACA,aACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,cAAe,eAAgB,aAAc,aACrDC,QAAS,CACP,QACA,GACA,8BACA,mBACA,eACA,cACA,cACA,aACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,eAAgB,WAAY,aACpCC,QAAS,CACP,QACA,GACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,gBACA,iBACA,oBAGJ,CACE3hC,OAAQ,CAAC,QAAS,SAClB0hC,MAAO,CACL,cACA,cACA,aACA,aACA,WACA,YAEFC,QAAS,CACP,QACA,GACA,8BACA,cACA,cACA,cACA,aACA,aAGJ,CACE3hC,OAAQ,CAAC,SACT0hC,MAAO,CACL,iBACA,iBACA,iBACA,kBAEFC,QAAS,CACP,QACA,GACA,8BACA,kBACA,cACA,aACA,aACA,aAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,eACA,cACA,aACA,cACA,aACA,aACA,aACA,aACA,eACA,aACA,cACA,cAEFC,QAAS,CACP,QACA,GACA,8BACA,eACA,eACA,cACA,gBACA,eACA,aACA,cACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,iBACA,iBACA,iBAEFC,QAAS,CACP,aACA,cACA,eACA,kBACA,kBACA,kBACA,gBACA,gBACA,sBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,eACA,aACA,aACA,aACA,aACA,gBAEFC,QAAS,CACP,OACA,eACA,cACA,cACA,aACA,aACA,gBACA,gBACA,YACA,YACA,YACA,YACA,aACA,aACA,UACA,UACA,YAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,eAAgB,cAAe,aAAc,cACrDC,QAAS,CACP,OACA,cACA,YACA,cACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,eACA,aACA,YACA,gBAEFC,QAAS,CACP,WACA,aACA,cACA,WACA,eACA,YACA,gBACA,gBACA,gBACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,WACA,YAEFC,QAAS,CACP,QACA,cACA,eACA,gBACA,WACA,eACA,cACA,WACA,WACA,aAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,cAAe,eAAgB,WAAY,YACnDC,QAAS,CACP,OACA,cACA,aACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,cACA,cACA,eACA,GACA,MACA,aACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,aACA,aACA,cAEFC,QAAS,CACP,SACA,cACA,eACA,eACA,eACA,aACA,eACA,aACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,gBAEFC,QAAS,CACP,QACA,GACA,8BACA,eACA,WACA,eACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,YACA,eACA,YACA,eACA,aAEFC,QAAS,CACP,QACA,GACA,8BACA,cACA,WACA,gBACA,aACA,cACA,aACA,eACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,gBACA,gBACA,cACA,aACA,gBACA,eAEFC,QAAS,CACP,QACA,GACA,8BACA,cACA,WACA,gBACA,eACA,YACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,cACA,eACA,aACA,cACA,gBAEFC,QAAS,CACP,OACA,GACA,UACA,WACA,YACA,gBACA,eACA,eACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,cAAe,cAAe,aAAc,gBACpDC,QAAS,CACP,YACA,aACA,aACA,gBACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBAEFC,QAAS,CACP,QACA,GACA,8BACA,WACA,eACA,iBACA,gBACA,kBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,WACA,cACA,eACA,eACA,eACA,eACA,eACA,gBAEFC,QAAS,CACP,cACA,WACA,eACA,QACA,cACA,mBACA,WACA,iBACA,sBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,eAAgB,YAAa,eAAgB,aACrDC,QAAS,CACP,QACA,aACA,GACA,gBACA,YACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,gBAAiB,gBAAiB,iBAC1CC,QAAS,CAAC,gBAAiB,eAAgB,KAE7C,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,kBACA,iBACA,eACA,WACA,WACA,iBAEFC,QAAS,CACP,QACA,GACA,aACA,gBACA,WACA,YACA,gBACA,gBACA,aAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,mBACA,eACA,YACA,eACA,gBACA,iBACA,kBACA,iBACA,mBAEFC,QAAS,CACP,mBACA,eACA,UACA,aACA,GACA,eACA,gBACA,YACA,oBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,eACA,cACA,cACA,mBACA,mBACA,iBAEFC,QAAS,CACP,GACA,gBACA,gBACA,cACA,cACA,cACA,aACA,eACA,aACA,oBACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,UACA,aACA,eACA,WACA,iBACA,oBACA,mBACA,UACA,aACA,YAEFC,QAAS,CACP,QACA,GACA,SACA,8BACA,8BACA,eACA,mBACA,cACA,cACA,aACA,eACA,SACA,6BAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,cACA,aACA,gBACA,eACA,cACA,eAEFC,QAAS,CACP,QACA,GACA,WACA,2BACA,oBACA,eACA,cACA,gBACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,gBACA,gBACA,gBACA,eACA,aACA,aACA,cACA,cACA,cACA,eAEFC,QAAS,CACP,QACA,eACA,YACA,aACA,YACA,cACA,aACA,eACA,aACA,eACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,eACA,gBACA,gBAEFC,QAAS,CACP,aACA,kBACA,qBACA,mBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,oBACA,mBACA,mBACA,kBACA,mBACA,eACA,eACA,mBACA,gBACA,gBACA,cACA,oBACA,kBACA,oBAEFC,QAAS,CACP,YACA,kBACA,oBACA,oBACA,iBACA,iBACA,gBACA,sBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBAEFC,QAAS,CACP,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,mBACA,iBACA,eACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,cACA,cACA,cACA,cACA,gBACA,kBACA,sBACA,gBACA,sBACA,oBAEFC,QAAS,CACP,QACA,GACA,8BACA,8BACA,mBACA,cACA,eACA,eACA,aACA,aACA,eACA,eACA,eACA,eACA,cACA,eACA,eACA,iBACA,oBACA,iBACA,oBACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,cACA,cACA,gBACA,iBAEFC,QAAS,CACP,cACA,SACA,gBACA,YACA,kBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,cACA,YACA,kBACA,kBAEFC,QAAS,CAAC,cAAe,QAAS,oBAEpC,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,eACA,cACA,aACA,eACA,eAEFC,QAAS,CACP,QACA,WACA,UACA,cACA,iBACA,gBACA,aACA,gBACA,eACA,YACA,cACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,eACA,cACA,aACA,eACA,eAEFC,QAAS,CACP,QACA,WACA,UACA,cACA,iBACA,gBACA,aACA,gBACA,eACA,YACA,cACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,aACA,cACA,cACA,eACA,eACA,kBACA,gBACA,oBAEFC,QAAS,CACP,QACA,WACA,UACA,cACA,YACA,iBACA,gBACA,aACA,YACA,cACA,aACA,gBACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,aACA,cACA,cACA,cACA,cACA,cACA,eAEFC,QAAS,CACP,QACA,WACA,UACA,cACA,YACA,iBACA,gBACA,aACA,YACA,cACA,aACA,gBACA,eACA,WAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,cACA,cACA,cACA,eAEFC,QAAS,CACP,GACA,eACA,eACA,eACA,eACA,8BACA,SACA,YACA,eACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,gBACA,iBACA,iBACA,iBACA,cACA,eACA,gBACA,gBACA,gBACA,aACA,cACA,eACA,eACA,gBAEFC,QAAS,CACP,GACA,8BACA,SACA,YACA,eACA,eACA,cACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,kBACA,gBACA,cACA,kBACA,kBACA,kBACA,iBACA,eACA,mBACA,cACA,eACA,gBAEFC,QAAS,CACP,mBACA,aACA,eACA,iBACA,eACA,gBACA,cACA,iBACA,iBACA,GACA,2BACA,SACA,YACA,eACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,eAAgB,aACxBC,QAAS,CACP,iBACA,GACA,2BACA,SACA,YACA,eACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAEFC,QAAS,CACP,eACA,gBACA,gBACA,YACA,cACA,mBACA,mBACA,sBACA,GACA,2BACA,SACA,cAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,eACA,YACA,gBACA,eACA,aAEFC,QAAS,CACP,gBACA,eACA,YACA,eACA,2BACA,YACA,YACA,GACA,OACA,QAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,WACA,cACA,cACA,aACA,iBACA,mBAEFC,QAAS,CACP,GACA,YACA,2BACA,SACA,WACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,cACA,aACA,cACA,cACA,iBAEFC,QAAS,CACP,QACA,cACA,eACA,cACA,aACA,cACA,KAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,SACA,WACA,aACA,YACA,eACA,iBAEFC,QAAS,CACP,GACA,cACA,2BACA,WACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,SACA,WACA,aACA,YACA,eACA,iBAEFC,QAAS,CACP,GACA,cACA,2BACA,WACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,eAAgB,cAAe,cAAe,cACtDC,QAAS,CACP,QACA,GACA,2BACA,eACA,cACA,cACA,aACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,gBACA,gBACA,gBACA,gBAEFC,QAAS,CACP,QACA,GACA,2BACA,eACA,cACA,cACA,aACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,aAAc,eAAgB,eACtCC,QAAS,CAAC,cAAe,QAAS,cAAe,iBAEnD,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,cACA,eACA,cACA,aAEFC,QAAS,CAAC,QAAS,eAAgB,cAAe,iBAEpD,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,eAAgB,cAAe,aACvCC,QAAS,CACP,aACA,QACA,eACA,aACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,eACA,cACA,cACA,WACA,YAEFC,QAAS,CACP,aACA,QACA,iBACA,gBACA,eACA,eACA,YACA,aACA,aACA,WACA,aAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,aACA,gBACA,aACA,aACA,aACA,aACA,gBACA,iBAEFC,QAAS,CACP,eACA,GACA,eACA,eACA,YACA,UACA,mBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,YAAa,iBACrBC,QAAS,CACP,MACA,SACA,aACA,WACA,eACA,aACA,gBACA,SAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,SACA,cACA,eACA,mBACA,sBAEFC,QAAS,CACP,cACA,OACA,UACA,YACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,gBACA,eACA,eACA,aACA,cAEFC,QAAS,CACP,GACA,eACA,iBACA,cACA,gBACA,cACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,aACA,aACA,aACA,aACA,aACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBAEFC,QAAS,CACP,WACA,WACA,YACA,cACA,aACA,cACA,eACA,eACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,aAAc,UACtBC,QAAS,CAAC,QAAS,WAAY,SAAU,eAE3C,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,gBAAiB,YAAa,gBACtCC,QAAS,CACP,iBACA,gBACA,QACA,WACA,SACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,eAAgB,eACxBC,QAAS,CACP,eACA,WACA,aACA,gBACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,eACA,aACA,aACA,aACA,WAEFC,QAAS,CACP,gBACA,mBACA,kBACA,cACA,YACA,aACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,cACA,cACA,iBACA,gBACA,eACA,eACA,gBAEFC,QAAS,CACP,eACA,eACA,eACA,eACA,mBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,cACA,aACA,gBACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,eAEFC,QAAS,CACP,cACA,cACA,cACA,cACA,eACA,cACA,cACA,cACA,cACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,gBAEFC,QAAS,CACP,GACA,eACA,QACA,gBACA,eACA,eACA,eACA,gBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,cACA,eACA,eACA,cACA,eACA,eACA,eACA,gBAEFC,QAAS,CACP,aACA,eACA,gBACA,YACA,eACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,cACA,eACA,eACA,eACA,eACA,gBAEFC,QAAS,CACP,GACA,eACA,eACA,eACA,eACA,WACA,cACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,cACA,eACA,cACA,cACA,eACA,gBAEFC,QAAS,CACP,GACA,eACA,gBACA,aACA,aACA,cACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,iBACA,eACA,eAEFC,QAAS,CACP,cACA,gBACA,gBACA,kBACA,eACA,cACA,gBACA,eAGJ,CACE3hC,OAAQ,CAAC,SACT0hC,MAAO,CACL,gBACA,gBACA,eACA,gBAEFC,QAAS,CACP,QACA,GACA,8BACA,gBACA,cACA,cACA,gBACA,aACA,cACA,aAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,cACA,cACA,cACA,cACA,aACA,aACA,aACA,aACA,UACA,UACA,UACA,WAEFC,QAAS,CACP,eACA,YACA,aACA,aACA,cACA,cACA,aACA,eACA,UACA,eAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,YAAa,YAAa,iBAClCC,QAAS,CACP,cACA,WACA,eACA,QACA,QACA,mBACA,WACA,iBACA,sBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,kBACA,kBACA,kBACA,eACA,gBACA,iBAEFC,QAAS,CACP,kBACA,kBACA,iBACA,QACA,gBACA,mBACA,oBACA,iBACA,sBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CAAC,aAAc,eAAgB,gBACtCC,QAAS,CACP,kBACA,kBACA,iBACA,QACA,cACA,mBACA,oBACA,iBACA,sBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,gBACA,gBACA,gBACA,gBACA,aACA,aACA,aACA,eACA,eACA,gBAEFC,QAAS,CACP,MACA,UACA,eACA,cACA,gBACA,gBACA,gBACA,gBACA,kBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,eACA,cACA,cACA,cACA,eACA,WACA,YAEFC,QAAS,CACP,KACA,iBACA,aACA,eACA,mBACA,gBACA,iBAGJ,CACE3hC,OAAQ,QACR0hC,MAAO,CACL,eACA,cACA,YACA,WACA,WACA,WACA,eACA,WACA,WACA,YAEFC,QAAS,CACP,cACA,gBACA,WACA,YACA,cACA,YACA,YACA,mBACA,aACA,YACA,cAOG91B,QAASw2B,IAEZA,EAAQX,QAAOU,EAAWA,EAASrjC,OAAOsjC,EAAQX,QAElDv5B,MAAMC,QAAQi6B,EAAQriC,QACxB3B,EAAK,CACH8B,UAAW,gBACXuhC,MAAOW,EAAQX,MACfC,QAASU,EAAQV,QACjBL,KAAM,CAACe,EAAQriC,YAYrB3B,EAAK,CACH8B,UAAW,gBACXuhC,MAAOU,EAASr+B,MAAM,EAAG,IACzB49B,QAAS,CACP,GACA,OACA,IACA,2BACA,+BAEFL,KAAM,CAAC,SAITjjC,EAAK,CACH8B,UAAW,gBACXuhC,MAAO,CAAC,gBAAiB,gBAAiB,gBAC1CC,QAAS,CACP,eACA,aACA,aACA,YACA,cAEFL,KAAM,CAAC,MAAO,CAAE9jB,YAAY,MAI9Bnf,EAAK,CACH8B,UAAW,gBACXuhC,MAAOU,EAASr+B,MAAM,EAAG,IACzB49B,QAAS,CACP,GACA,OACA,IACA,2BACA,+BAEFL,KAAM,OAKVjjC,EAAK,CACH8B,UAAW,gBACXuhC,MAAO,CACL,eACA,eACA,eACA,eACA,eACA,iBAEFC,QAAS,CAAC,gBACVL,KAAM,KAGRG,EAAG,EAAkC,KACnCpjC,EAAK,CACH8B,UAAW,gBACXmhC,KAAM,CAAC,CAAEthC,OAAQ,CAAC,YAClBgiC,MAAO,CAAC,aAAc,cAI1BP,EAAG,EAA4B,KAE7BpjC,EAAK,CACH8B,UAAW,aACXuhC,MAAO,CACL,cACA,aACA,YACA,YACA,WACA,SACA,YACA,UACA,OACA,MACA,OACA,QACA,SACA,QACA,kBACA,UACA,SACA,UAEFC,QAAS,CACP,QACA,OACA,UACA,OACA,QACA,QACA,SACA,WACA,oBACA,QACA,OACA,SACA,IACA,IACA,IACA,KACA,KACA,OACA,IACA,KACA,GACA,SAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACE9c,eAAe,IAGnBkd,MAAO,CACL,WACA,UACA,SACA,SACA,QACA,SACA,YACA,UACA,IACA,IACA,KACA,MACA,eACA,UACA,SACA,UAEFC,QAAS,CACP,cACA,aACA,YACA,YACA,WACA,OACA,MACA,OACA,QACA,SACA,QACA,kBACA,QACA,OACA,UACA,QACA,QACA,SACA,WACA,QACA,OACA,SACA,IACA,IACA,IACA,KACA,KACA,OACA,IACA,KACA,GACA,SAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACE/c,iBAAiB,IAGrBmd,MAAO,CACL,cACA,aACA,YACA,YACA,WACA,YACA,OACA,MACA,OACA,QACA,SACA,QACA,mBAEFC,QAAS,CACP,UACA,SACA,SACA,YACA,UACA,QACA,OACA,UACA,OACA,QACA,QACA,SACA,WACA,oBACA,QACA,OACA,SACA,IACA,IACA,IACA,KACA,KACA,OACA,IACA,KACA,GACA,SAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACEzd,qBAAsB,CAAC,EAAG,KAG9B6d,MAAO,CACL,aACA,cACA,aACA,aACA,YACA,SACA,YACA,UACA,MACA,OACA,QACA,OACA,QACA,OACA,mBACA,UACA,aACA,YAEFC,QAAS,CACP,OACA,WACA,UACA,OACA,QACA,OACA,QACA,WACA,oBACA,QACA,OACA,SACA,IACA,IACA,IACA,KACA,KACA,OACA,IACA,KACA,GACA,SAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACEtd,gBAAgB,IAGpB0d,MAAO,CACL,cACA,aACA,YACA,aACA,UACA,aACA,WACA,QACA,OACA,QACA,QACA,SACA,QACA,kBACA,UACA,WAEFC,QAAS,CACP,QACA,SACA,MACA,OACA,UACA,SACA,MACA,aACA,QACA,QACA,SACA,WACA,oBACA,qBACA,QACA,SACA,OACA,QACA,SACA,IACA,IACA,KACA,IACA,KACA,KACA,MACA,KACA,OACA,IACA,KACA,GACA,KACA,SAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACExd,OAAQ,IACRc,6BAA6B,IAGjC8c,MAAO,CACL,aACA,cACA,aACA,cACA,SACA,UACA,QACA,OACA,MACA,OACA,aACA,QACA,gBACA,UACA,WACA,cACA,SACA,QACA,SAEFC,QAAS,CACP,QACA,OACA,OACA,QACA,QACA,SACA,WACA,oBACA,UACA,OACA,SACA,GACA,IACA,IACA,KACA,OACA,IACA,MACA,QAIJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACE3c,4BAA4B,IAGhC+c,MAAO,CACL,cACA,aACA,YACA,YACA,WACA,SACA,YACA,UACA,OACA,MACA,OACA,QACA,SACA,QACA,kBACA,UACA,SACA,UAEFC,QAAS,CACP,OACA,QACA,OACA,UACA,OACA,QACA,QACA,SACA,WACA,oBACA,QACA,OACA,SACA,IACA,IACA,IACA,KACA,KACA,OACA,IACA,KACA,GACA,SAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACExd,OAAQ,IACRW,iBAAiB,IAGrBid,MAAO,CACL,aACA,aACA,SACA,QACA,OACA,MACA,OACA,QACA,gBACA,UACA,SACA,QACA,QAEFC,QAAS,CACP,QACA,cACA,cACA,UACA,aACA,OACA,WACA,cACA,OACA,QACA,QACA,QACA,SACA,SACA,WACA,oBACA,UACA,OACA,SACA,GACA,IACA,IACA,KACA,OACA,IACA,MACA,QAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACExd,OAAQ,IACRc,6BAA6B,EAC7BT,oBAAqB,IACrBG,kBAAmB,IACnBO,iCAAiC,IAGrC6c,MAAO,CACL,aACA,UACA,WACA,cACA,SACA,QACA,OACA,MACA,OACA,YACA,QACA,gBACA,UACA,WACA,UACA,UACA,SACA,SAEFC,QAAS,CACP,QACA,WACA,WACA,MACA,QACA,QACA,SACA,WACA,oBACA,OACA,QACA,OACA,GACA,IACA,IACA,QACA,KACA,IACA,WACA,MACA,MACA,QAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACExd,OAAQ,IACRK,oBAAqB,IACrBG,kBAAmB,IACnBQ,0BAA0B,IAG9B4c,MAAO,CACL,aACA,cACA,aACA,cACA,gBACA,iBACA,aACA,cACA,SACA,UACA,QACA,SACA,QACA,MACA,OACA,aACA,cACA,SACA,gBACA,UACA,SACA,WACA,WACA,UACA,UACA,SACA,UAEFC,QAAS,CACP,QACA,QACA,SACA,UACA,QACA,QACA,SACA,SACA,WACA,oBACA,QACA,GACA,IACA,IACA,KACA,KACA,KACA,OACA,QACA,OACA,SACA,OACA,KACA,MACA,OACA,IACA,KACA,QAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACExd,OAAQ,IACRK,oBAAqB,IACrBa,qBAAqB,EACrBV,kBAAmB,IACnBS,0BAA0B,IAG9B2c,MAAO,CACL,aACA,cACA,cACA,eACA,cACA,eACA,aACA,cACA,SACA,UACA,QACA,SACA,OACA,MACA,OACA,SACA,QACA,OACA,YACA,SACA,gBACA,UACA,SACA,UACA,WACA,UACA,SACA,SAEFC,QAAS,CACP,QACA,QACA,QACA,SACA,SACA,WACA,oBACA,QACA,GACA,IACA,IACA,KACA,KACA,OACA,QACA,OACA,SACA,UACA,OACA,KACA,MACA,IACA,QAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACExd,OAAQ,MACRc,6BAA6B,EAC7BT,oBAAqB,IACrBG,kBAAmB,IACnBQ,0BAA0B,IAG9B4c,MAAO,CACL,aACA,UACA,cACA,aACA,gBACA,WACA,aACA,QACA,OACA,MACA,OACA,eACA,WACA,mBACA,oBACA,SACA,aACA,YACA,QACA,SACA,aAEFC,QAAS,CACP,QACA,cACA,QACA,QACA,WACA,WACA,WACA,oBACA,OACA,WACA,YACA,QACA,OACA,GACA,IACA,MACA,OACA,OACA,OACA,QACA,SACA,MACA,IACA,QACA,UAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACExd,OAAQ,MACRW,iBAAiB,EACjBG,6BAA6B,EAC7BT,oBAAqB,IACrBG,kBAAmB,IACnBQ,0BAA0B,IAG9B4c,MAAO,CACL,aACA,SACA,aACA,YACA,gBACA,WACA,YACA,QACA,OACA,MACA,OACA,eACA,WACA,mBACA,kBACA,SACA,aACA,YACA,QACA,SACA,YAEFC,QAAS,CACP,QACA,UACA,cACA,oBACA,YACA,cACA,aACA,aACA,QACA,QACA,WACA,WACA,WACA,oBACA,OACA,WACA,YACA,QACA,OACA,GACA,IACA,MACA,OACA,OACA,OACA,QACA,SACA,MACA,IACA,QACA,UAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACE5c,sBAAsB,IAG1Bgd,MAAO,CACL,QACA,UACA,eACA,SACA,UACA,WACA,OACA,MACA,QACA,SACA,OACA,YACA,UACA,gBACA,UACA,WACA,SAEFC,QAAS,CACP,QACA,SACA,SACA,UACA,OACA,QACA,QACA,WACA,WACA,oBACA,SACA,OACA,SACA,GACA,IACA,KACA,MACA,IACA,KACA,KACA,OACA,SACA,IACA,IACA,KACA,KACA,OACA,MACA,MACA,IACA,MACA,KACA,KACA,MACA,QACA,SACA,UACA,MACA,UAIJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CAAC,CAAE7c,iBAAiB,IAC1Bid,MAAO,CACL,aACA,YACA,YACA,WACA,SACA,YACA,UACA,OACA,MACA,OACA,QACA,kBACA,UACA,UAEFC,QAAS,CACP,QACA,SACA,SACA,SACA,QACA,OACA,QACA,UACA,OACA,QACA,QACA,SACA,WACA,oBACA,qBACA,QACA,OACA,SACA,IACA,IACA,IACA,KACA,KACA,OACA,IACA,KACA,GACA,MACA,iBAKJtjC,EAAK,CACH8B,UAAW,aACXmhC,KAAM,CACJ,CACExd,OAAQ,KACRE,gBAAgB,EAChBc,0BAA0B,EAC1BE,qBAAqB,EACrBb,oBAAqB,IACrBG,kBAAmB,MAGvBod,MAAO,CAAC,cAAe,aACvBC,QAAS,CAAC,aAAc,mBAI5BF,EAAG,EAAsC,KACvCpjC,EAAK,CACH8B,UAAW,oBACXuhC,MAAO,CACL,6CACA,6CACA,6CACA,6CACA,8CAEFC,QAAS,CACP,6CACA,iDACA,yCACA,6CACA,2CACA,0CAKNF,EAAG,EAAqC,KACtCpjC,EAAK,CACH8B,UAAW,eACXuhC,MAAO,CACL,qCACA,qCACA,qCACA,sCACA,6CACA,qCACA,qCACA,sCACA,6CACA,6CACA,iEACA,kEAEFC,QAAS,CACP,qCACA,qCACA,qCACA,qCACA,qCACA,6CACA,6CACA,qCACA,6CACA,iEACA,iEACA,iEACA,iEACA,iEACA,sEAKNF,EAAG,EAA4B,KAC7BpjC,EAAK,CACH8B,UAAW,YACXuhC,MAAO,CAAC,OAAQ,QAAS,IAAK,KAC9BC,QAAS,CAAC,MAAO,MAAO,QAAS,QAAS,OAAQ,WAItDF,EAAG,EAA0D,KAC3DpjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,CAAE76B,OAAO,IAChBi7B,MAAO,CACL,OACA,OACA,OACA,QACA,QACA,QACA,IACA,IACA,MACA,MACA,MACA,KACA,KACA,MAEFC,QAAS,CAAC,MAAO,MAAO,QAAS,cAIrCF,EAAG,EAA4C,KAC7CpjC,EAAK,CACH8B,UAAW,YACXuhC,MAAO,CAAC,KAAM,KAAM,KAAM,KAAM,MAChCC,QAAS,CAAC,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO,QAIpD,MAAMW,EAAe,CACnB,gBACA,OACA,aACA,aACA,WACA,UACA,UACA,WACA,WACA,WACA,aACA,aACA,YACA,WACA,WACA,aACA,mBACA,gBACA,mBACA,sBACA,oBACA,aACA,mBACA,WACA,4BACA,2BACA,yBACA,iBACA,mBACA,mBACA,wBACA,0BACA,8BACA,qBACA,sBACA,2BACA,yBACA,qBACA,wBACA,qBACA,aACA,WACA,YAGIC,EAAiB,CACrB,SACA,UACA,QACA,mBACA,WACA,YACA,WACA,oBACA,qBACA,YACA,kBACA,iBACA,mBACA,sBACA,YACA,4BACA,wBACA,2BACA,yBACA,4BACA,qBACA,0BACA,6BACA,YACA,+BACA,gCAGFd,EAAG,EAAkC,KAEnCpjC,EAAK,CACH8B,UAAW,YACXuhC,MAAOY,EACPX,QAASY,MAIbd,EAAG,EAAmE,KACpEpjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,CAAElwB,QAAQ,IACjBswB,MAAOY,EACPX,QAASY,MAIbd,EAAG,EAAsD,KACvDpjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,CAAElwB,QAAQ,IACjBswB,MAAO,CAAC,aAAc,WAAY,WAAY,WAAY,YAC1DC,QAAS,CAAC,aAAc,aAAc,WAAY,kBAItDF,EAAG,EAA+D,KAChEpjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,CAAE7e,iBAAiB,IAC1Bif,MAAO,CACL,gBACA,OACA,aACA,aACA,WACA,UACA,UACA,WACA,WACA,WACA,aACA,aACA,YACA,WACA,WACA,aACA,oBACA,aACA,mBACA,WACA,iBACA,mBACA,mBACA,wBACA,0BACA,8BACA,qBACA,sBACA,2BACA,yBACA,qBACA,aACA,WACA,YAEFC,QAAS,CACP,SACA,UACA,QACA,mBACA,WACA,YACA,WACA,oBACA,qBACA,YACA,kBACA,iBACA,mBACA,sBACA,YACA,4BACA,wBACA,2BACA,yBACA,4BACA,qBACA,0BACA,6BACA,YACA,mBAEA,gBACA,mBACA,sBACA,4BACA,2BACA,8BAKNF,EAAG,EAA8F,KAC/FpjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CAAC,CAAElwB,QAAQ,EAAMqR,iBAAiB,IACxCif,MAAO,CAAC,aAAc,WAAY,WAAY,WAAY,YAC1DC,QAAS,CACP,aACA,aACA,WACA,aACA,gBACA,mBACA,sBACA,4BACA,2BACA,8BAKNF,EAAG,EAA0C,KAC3CpjC,EAAK,CACH8B,UAAW,aACXuhC,MAAO,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,QACxDC,QAAS,CAAC,GAAI,OAAQ,OAAQ,OAAQ,YAI1CF,EAAG,EAAkC,KACnCpjC,EAAK,CACH8B,UAAW,YACXuhC,MAAO,CACL,4BACA,4BACA,uBACA,4BACA,uBACA,8BACA,4BACA,4BACA,gCACA,4BACA,2BACA,uBACA,uBACA,uBACA,+BACA,+BACA,gCAEFC,QAAS,CACP,+BACA,uBACA,2BACA,sBACA,4BACA,2BACA,sBACA,sBACA,+BACA,oCAKNF,EAAG,EAAoD,KAErDpjC,EAAK,CACH8B,UAAW,mBACXuhC,MAAO,CACL,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEFC,QAAS,CAAC,GAAI,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,UAI7DF,EAAG,EAAoD,KAErDpjC,EAAK,CACH8B,UAAW,mBACXuhC,MAAO,CAAC,MAAO,MAAO,MAAO,OAC7BC,QAAS,CAAC,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,UAI5DF,EAAG,EAAoD,KAErDpjC,EAAK,CACH8B,UAAW,oBACXuhC,MAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEFC,QAAS,CACP,GACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WAKNF,EAAG,EAA2C,KAE5CpjC,EAAK,CACH8B,UAAW,YACXuhC,MAAO,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEFC,QAAS,CACP,GACA,IACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,MACA,WAKNF,EAAG,EAA0C,KAC3CpjC,EAAK,CACH8B,UAAW,gBACXmhC,KAAM,CAAC,+BACPI,MAAO,CAAC,MAAO,SAAU,WACzBC,QAAS,CAAC,UAAW,SAAU,cAInCF,EAAG,EAAoC,KACrCpjC,EAAK,CACH8B,UAAW,UACX6hC,MAAO,MAAC3iC,EAAW,KAAM,GAAI8F,SAIjCs8B,EAAG,EAA2B,KAE5BpjC,EAAK,CACH8B,UAAW,YACXuhC,MAAO,CACL,iMACA,6MACA,iOACA,mNACA,sOACA,6LACA,2BACA,sBACA,mDACA,uDACA,yBACA,4DACA,oGAEFC,QAAS,CACP,cACA,kBACA,oCACA,kDACA,oDACA,mDACA,uLACA,GACA,uBACA,SACA,gLAMNF,EAAG,EAA6B,KAE9BpjC,EAAK,CACH8B,UAAW,cACXuhC,MAAO,CACL,wGACA,kHACA,sEACA,+FACA,sDACA,6DACA,+DACA,iGACA,4FAEFC,QAAS,CACP,yDACA,uDACA,gEACA,gEACA,uBACA,gEACA,6CACA,sEACA,iEACA,kFACA,2FACA,kGAMNF,EAAG,EAA2B,KAC5BpjC,EAAK,CACH8B,UAAW,YACXuhC,MAAO,CACL,0BACA,6BACA,0BACA,0BACA,yBACA,uBACA,yBACA,2BACA,0BACA,2BACA,yBACA,uBACA,uBACA,uBACA,cACA,4BACA,eACA,UACA,YACA,WACA,SACA,QAEFC,QAAS,CACP,8BACA,6BACA,yBACA,yBACA,sBACA,YACA,6BACA,WACA,yBACA,YACA,yBACA,eACA,eACA,2BACA,eACA,0BACA,6BACA,aACA,2BACA,aACA,yBACA,cACA,gBACA,yBACA,wBACA,MACA,MACA,IACA,OAIJtjC,EAAK,CACH8B,UAAW,YACXmhC,KAAM,CACJ,CACE7f,UAAU,IAGdigB,MAAO,CACL,+BACA,+BACA,4BACA,sCACA,+BACA,yBACA,gCACA,iCAEFC,QAAS,CACP,gCACA,gCACA,qCACA,gCAKNF,EAAG,EAA+B,KAsVhC,IAAIW,EAAW,GArVE,CACf,CACEpiC,OAAQ,KACR0hC,MAAO,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,SAE1C,CACE1hC,OAAQ,KACR0hC,MAAO,CACL,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QAEFC,QAAS,CACP,OACA,OACA,QACA,QACA,MACA,SACA,OACA,OACA,OACA,QACA,UAGJ,CACE3hC,OAAQ,KACR0hC,MAAO,CAAC,SAAU,SAAU,SAAU,UACtCC,QAAS,CAAC,cAAe,cAAe,SAAU,WAEpD,CACE3hC,OAAQ,KACR0hC,MA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ACH8B,UAAW,YACXuhC,MAAO,CACL,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cAEFC,QAAS,CACP,cACA,cACA,aACA,cACA,cACA,mBAINF,EAAG,EAAgD,KACjDpjC,EAAK,CACH8B,UAAW,uBACXuhC,MAAO,CACL,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cAEFC,QAAS,CACP,cACA,cACA,aACA,cACA,cACA,mBAKNF,EAAG,EAA0F,KAC3FpjC,EAAK,CACH8B,UAAW,YACXuhC,MAAO,CACL,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,eAEFC,QAAS,CACP,cACA,cACA,cACA,cACA,mBAINF,EAAG,EAA0F,KAC3FpjC,EAAK,CACH8B,UAAW,uBACXuhC,MAAO,CACL,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,eAEFC,QAAS,CACP,cACA,cACA,cACA,cACA,mBAMNF,EAAG,EAAyB,KAC1BpjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,aACA,aACA,aACA,aACA,cAEFC,QAAS,CACP,YACA,cACA,gBACA,aACA,gBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,YACA,aACA,cACA,aACA,aACA,aACA,aACA,aACA,cAEFC,QAAS,CACP,cACA,YACA,YACA,aACA,aACA,aACA,gBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,YAAa,cAAe,gBACpCC,QAAS,CAAC,YAAa,cAAe,eAAgB,gBAExDtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,cACA,cACA,cACA,cACA,kBAEFC,QAAS,CACP,cACA,cACA,aACA,eACA,cACA,cACA,kBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,cACA,aACA,aACA,aACA,aACA,aACA,aACA,cAEFC,QAAS,CACP,cACA,YACA,cACA,aACA,aACA,gBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CACP,YACA,YACA,WACA,aACA,kBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,YAAa,YAAa,aAClCC,QAAS,CACP,YACA,WACA,aACA,aACA,cACA,YACA,eAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,aAEFC,QAAS,CACP,WACA,YACA,YACA,YACA,YACA,YACA,eACA,cACA,cACA,YACA,YACA,YACA,WACA,aACA,YACA,YACA,YACA,WACA,cAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,aAAc,YAAa,aACnCC,QAAS,CACP,YACA,YACA,cACA,YACA,YACA,YACA,YACA,YACA,YACA,aACA,cACA,gBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,WAAY,YAAa,WAAY,YAAa,aAC1DC,QAAS,CAAC,UAAW,aAAc,WAAY,eAEjDtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,aACA,aACA,YACA,aACA,aACA,aACA,aACA,aACA,cAEFC,QAAS,CACP,aACA,aACA,cACA,cACA,aACA,aACA,gBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,cACA,cACA,cACA,cACA,cACA,cACA,cACA,eAEFC,QAAS,CACP,gBACA,gBACA,cACA,WACA,kBACA,cACA,iBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,YACA,SACA,YACA,YACA,YACA,aAEFC,QAAS,CAAC,aAAc,YAAa,eAAgB,eAEvDtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,cAAe,cAAe,cAAe,eACrDC,QAAS,CACP,cACA,cACA,iBACA,aACA,kBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,cAAe,cAAe,eACtCC,QAAS,CACP,aACA,eACA,cACA,gBACA,iBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,iBAEVrjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,oBAAqB,iBAC7BC,QAAS,CACP,qBACA,mBACA,gBACA,gBACA,iBACA,kBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,cAAe,gBAAiB,eACxCC,QAAS,CACP,gBACA,cACA,cACA,aACA,eACA,iBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,iBACRC,QAAS,CACP,eACA,iBACA,mBACA,gBACA,mBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPK,QAAS,CAAC,mBAEZtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,eACRC,QAAS,CACP,iBACA,aACA,eACA,cACA,iBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,cACRC,QAAS,CACP,gBACA,cACA,YACA,aACA,gBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,iBAEVrjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,mBAAoB,oBAC5BC,QAAS,CACP,sBACA,kBACA,oBACA,mBACA,mBACA,mBACA,mBACA,sBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,cAAe,cAAe,cAAe,gBACrDC,QAAS,CAAC,eAAgB,aAAc,cAAe,kBAEzDtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,WAAY,YAAa,SAAU,QAC3CC,QAAS,CACP,YACA,WACA,aACA,YACA,cACA,eACA,WACA,WACA,cAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,aACRC,QAAS,CAAC,WAAY,aAAc,kBAEtCtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,aACA,cACA,cACA,cACA,eAEFC,QAAS,CACP,eACA,YACA,gBACA,iBACA,aACA,iBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,cACA,cACA,iBACA,kBAEFC,QAAS,CACP,WACA,iBACA,cACA,cACA,cACA,cACA,qBACA,iBACA,iBACA,kBACA,iBACA,oBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,aAAc,WAAY,kBAEtCtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,gBACA,gBACA,gBACA,gBACA,iBAEFC,QAAS,CACP,gBACA,mBACA,eACA,iBACA,gBACA,gBACA,mBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,YACA,aACA,YACA,YACA,cAEFC,QAAS,CACP,cACA,YACA,YACA,WACA,cACA,eAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,WAAY,YACpBC,QAAS,CAAC,YAAa,UAAW,iBAEpCtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,cACA,cACA,aACA,gBACA,eACA,gBACA,cACA,iBAEFC,QAAS,CACP,cACA,cACA,cACA,aACA,YACA,aACA,YACA,eACA,cACA,iBACA,mBAGJtjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,aAAc,aAAc,cACpCC,QAAS,CAAC,aAAc,eAAgB,aAAc,gBAExDtjC,EAAK,CACH8B,UAAW,UACXuhC,MAAO,CAAC,gBAEVrjC,EAAK,CACH8B,UAAW,UACXmhC,KAAM,CAAC,UACPU,MAAO,CACL,aACA,aACA,YACA,aACA,aACA,cACA,cACA,aACA,aACA,kBAKNP,EAAG,EAAwB,KACzBpjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CACL,MACA,UACA,UACA,cACA,cACA,4BACA,gCAEFC,QAAS,CACP,qBACA,QACA,YACA,YACA,YACA,YACA,gBAKNF,EAAG,EAAoC,KACrCpjC,EAAK,CACH8B,UAAW,mBACXmhC,KAAM,CACJ,CACE5Z,UAAW,EACXC,aAAc,EACdC,aAAc,EACdC,WAAY,EACZC,WAAY,IAGhB4Z,MAAO,CACL,mBACA,oCACA,mBACA,mBACA,mBACA,aACA,qBAEFC,QAAS,CACP,GACA,WACA,UACA,cACA,WACA,YACA,iBAKNF,EAAG,EAAwB,KACzBpjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CACL,IAAIl9B,KACJ,IAAIA,KAAK,KAAM,EAAG,IAClB,IAAIA,KAAK,cACT,aACA,cAEFm9B,QAAS,CACP,GACA,WACA,UACAtiC,EACA,CAAE2jB,KAAM,KAAMC,MAAO,EAAGC,IAAK,IAC7B,GACA,CACEze,SAAQ,IACC,iBAGX,aACA,aACA,aACA,aACA,cACA,cACA,iBACA,OACA,QACA,UACA,WACA,cACA,iBACA,QACA,UACA,WACA,cACA,oBAGJpG,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,cACPI,MAAO,CAAC,aAAc,cACtBC,QAAS,CACP,YACA,YACA,UACA,UACA,aACA,OACA,QACA,UACA,WACA,cACA,iBACA,QACA,UACA,WACA,cACA,iBACA,MACA,QACA,SACA,iBAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAEzE,OAAQ,eACjB6E,MAAO,CAAC,aAAc,cACtBC,QAAS,CACP,YACA,YACA,UACA,UACA,aACA,OACA,QACA,UACA,WACA,cACA,iBACA,QACA,UACA,WACA,cACA,iBACA,MACA,QACA,SACA,iBAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAEzE,OAAQ,aACjB6E,MAAO,CAAC,WAAY,YACpBC,QAAS,CACP,YACA,YACA,WACA,WACA,OACA,QACA,UACA,WACA,cACA,iBACA,QACA,UACA,WACA,cACA,iBACA,MACA,QACA,SACA,cACA,eAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAEzE,OAAQ,WACjB6E,MAAO,CAAC,SAAU,UAClBC,QAAS,CACP,UACA,UACA,UACA,SACA,SACA,QACA,UACA,WACA,cACA,iBACA,MACA,QACA,SACA,cACA,eAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAEzE,OAAQ,aAAcrf,YAAY,IAC3CkkB,MAAO,CAAC,cACRC,QAAS,CACP,aACA,YACA,YACA,UACA,UACA,aACA,QACA,UACA,WACA,cACA,iBACA,MACA,QACA,SACA,cACA,eAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAE9jB,YAAY,IACrBkkB,MAAO,CAAC,aAAc,aAAc,aAAc,cAClDC,QAAS,CACP,aACA,aACA,aACA,IAAIn9B,KACJ,IAAIA,KAAK,KAAM,EAAG,IAClB,IAAIA,KAAK,cACT,cACA,cACA,iBACA,OACA,QACA,UACA,WACA,cACA,iBACA,QACA,UACA,WACA,cACA,oBAGJnG,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAEtE,WAAY,CAAC,IAAK,OAC3B0E,MAAO,CACL,IAAIl9B,KACJ,IAAIA,KAAK,KAAM,EAAG,IAClB,IAAIA,KAAK,cACT,aACA,cAEFm9B,QAAS,CACP,aACA,GACA,WACA,UACAtiC,EACA,CAAE2jB,KAAM,KAAMC,MAAO,EAAGC,IAAK,IAC7B,GACA,CACEze,SAAQ,IACC,iBAGX,aACA,aACA,aACA,aACA,cACA,cACA,iBACA,OACA,QACA,UACA,WACA,cACA,iBACA,QACA,UACA,WACA,cACA,iBACA,oBAGJpG,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAEzE,OAAQ,aAAcG,WAAY,CAAC,KAAMxf,YAAY,IAC9DkkB,MAAO,CAAC,aAAc,aAAc,aAAc,cAClDC,QAAS,CACP,aACA,aACA,aACA,IAAIn9B,KACJ,IAAIA,KAAK,KAAM,EAAG,IAClB,IAAIA,KAAK,cACT,aACA,gBACA,QACA,UACA,WACA,aACA,cACA,cACA,iBACA,cACA,iBACA,sBAINi9B,EAAG,EAAwB,KACzBpjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CAAC,QAAS,QAAS,QAC1BC,QAAS,CACP,GACA,UACAtiC,EACA,EACA,WACA,KACA,QACA,MACA,QACA,YAGJhB,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAE/E,WAAY,SAAUC,KAAM,gBACrCkF,MAAO,CAAC,WAAY,WAAY,WAChCC,QAAS,CACP,GACA,UACAtiC,EACA,GACA,cACA,SACA,KACA,KACA,QACA,QACA,WACA,WACA,WACA,WACA,eAGJhB,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAE/E,WAAY,SAAUC,KAAM,wBACrCkF,MAAO,CAAC,WAAY,WAAY,UAAW,QAAS,QAAS,QAC7DC,QAAS,CACP,GACA,UACAtiC,EACA,GACA,cACA,SACA,KACA,KACA,QACA,QACA,WACA,WACA,WACA,WACA,eAGJhB,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAE/E,WAAY,WACrBmF,MAAO,CAAC,WAAY,WAAY,WAAY,WAAY,WACxDC,QAAS,CACP,GACA,UACAtiC,EACA,EACA,WACA,WACA,WACA,YACA,WACA,KACA,QACA,MACA,OACA,QACA,SACA,cACA,eACA,eAGJhB,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAE/E,WAAY,SAAUC,KAAM,gBACrCkF,MAAO,CAAC,cAAe,aAAc,cACrCC,QAAS,CACP,GACA,UACAtiC,EACA,GACA,cACA,SACA,cACA,KACA,KACA,QACA,QACA,WACA,WACA,WACA,WACA,UACA,eAGJhB,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAE/E,WAAY,SAAUC,KAAM,wBACrCkF,MAAO,CACL,cACA,aACA,aACA,WACA,WACA,WACA,WACA,WAEFC,QAAS,CACP,GACA,UACAtiC,EACA,GACA,cACA,SACA,KACA,KACA,QACA,QACA,WACA,WACA,WACA,WACA,UACA,iBAINoiC,EAAG,EAAiC,KAClCpjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,YAAa,UAAW,UAAW,UAC3CC,QAAS,CACP,GACA,mBACA,YACA,UACA,WACA,YACA,UACA,eAGJtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,SACA,SACA,SACA,UAEFC,QAAS,CACP,GACA,mBACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,eAGJtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,OAAQ,WAAY,WAC5BC,QAAS,CAAC,GAAI,YAAa,WAAY,WAEzCtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,QACA,SACA,UACA,WACA,SACA,UACA,WACA,YACA,SACA,UACA,WACA,YACA,UACA,WACA,YACA,aACA,WACA,aACA,eACA,eACA,YACA,eACA,eACA,aACA,aACA,aACA,eACA,cACA,eACA,eACA,cACA,gBAEFC,QAAS,CACP,YACA,cACA,YACA,aACA,eACA,cACA,cACA,eACA,gBACA,cACA,cACA,cACA,iBAGJtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,UACA,UACA,SACA,OACA,QACA,QACA,SACA,UACA,UACA,UACA,UACA,SACA,QACA,QACA,OACA,QACA,SACA,UAEFC,QAAS,CACP,IACA,MACA,UACA,QACA,WACA,cACA,aAGJtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,YAAa,aACrBC,QAAS,CAAC,GAAI,SAAU,gBAE1BtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,UACA,UACA,WACA,UACA,UACA,UACA,aAEFC,QAAS,CACP,GACA,sBACA,YACA,UACA,WACA,SACA,YACA,eACA,mBAIJtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,UACA,WACA,WACA,UACA,UACA,UACA,WACA,YAEFC,QAAS,CAAC,GAAI,SAAU,aAAc,UAAW,UAAW,aAE9DtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,aACA,WACA,WACA,WACA,UACA,UACA,WACA,YAEFC,QAAS,CACP,UACA,UACA,UACA,OACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,UACA,WACA,WACA,WACA,cAGJtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,OACPI,MAAO,CAAC,OAAQ,aAChBC,QAAS,CAAC,GAAI,YAAa,kBAE7BtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,YACPU,MAAO,CAAC,OAAQ,YAAa,YAAa,kBAE5C3jC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,UACA,UACA,SACA,SACA,SACA,OACA,OACA,UACA,SACA,KACA,UACA,MACA,WAEFC,QAAS,CACP,GACA,OACA,UACA,SACA,UACA,UACA,UACA,UACA,UACA,QACA,UACA,UACA,UACA,UACA,gCACA,IACA,aAGJtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CACL,gBACA,aACA,gBACA,eACA,gBACA,eACA,iBAEFC,QAAS,CACP,aACA,sBACA,OACA,GACA,iBAGJtjC,EAAK,CACH8B,UAAW,iBACXmhC,KAAM,CAAC,SACPI,MAAO,CAAC,aAAc,aAAc,YACpCC,QAAS,CAAC,UAAW,sBAAuB,OAAQ,GAAI,mBAG5DF,EAAG,EAA+B,KAChCpjC,EAAK,CACH8B,UAAW,QACXmhC,KAAM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A,6BACA,yBACA,0FACA,2FAIJtjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,CAAElkB,QAAS,oBAClBskB,MAAO,GACPC,QAAS,CAAC,YAAa,UAAW,kBAAmB,aAGvDtjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,CAAElkB,QAAS,OAClBskB,MAAO,CAAC,YAAa,UAAW,kBAAmB,aAGrDrjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,CAAElkB,aAAS/d,IAClBqiC,MAAO,CAAC,YAAa,UAAW,kBAAmB,aAGrDrjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,CAAElkB,QAAS,IAClBskB,MAAO,CACL,YACA,UACA,kBACA,UACA,YACA,WAEFC,QAAS,CACP,MACA,0BACA,mBACA,gBACA,cACA,qBAIJtjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,CAAElkB,QAAS,IAClBskB,MAAO,CACL,MACA,0BACA,mBACA,eACA,gBACA,yBACA,qBAEFC,QAAS,CACP,YACA,UACA,kBACA,UACA,mBACA,IACA,cACA,mBACA,gBAIJtjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,CAAElkB,QAAS,KAClBskB,MAAO,GACPC,QAAS,CACP,YACA,UACA,kBACA,UACA,MACA,+BAKNJ,EAAS,EAAiB,KACxBE,EAAG,EAAgC,KACjCpjC,EAAK,CACH8B,UAAW,OACXuhC,MAAO,CACL,YACA,UACA,kBACA,UACA,MACA,0BACA,2BACA,sBACA,mBACA,SACA,SACA,MACA,qBACA,4BACA,KACA,MACA,mBACA,yBACA,2BACA,kBACA,oBACA,2BACA,kBACA,iBACA,SACA,iBACA,eACA,WACA,iBACA,aACA,aACA,iBACA,WACA,eACA,iBACA,SACA,iBACA,OACA,iBACA,cACA,sBACA,wBAEFC,QAAS,CACP,MACA,YACA,YACA,aACA,mBACA,mBACA,mBACA,mBACA,WACA,WACA,YACA,QACA,KACA,KACA,YACA,kCACA,UACA,sBACA,2BACA,6BACA,4BAGJtjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,GACPI,MAAO,CACL,YACA,UACA,kBACA,UACA,YACA,WAEFC,QAAS,CACP,MACA,0BACA,mBACA,gBACA,cACA,qBAGJtjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,GACPI,MAAO,CACL,MACA,0BACA,mBACA,eACA,gBACA,yBACA,qBAEFC,QAAS,CACP,YACA,UACA,kBACA,UACA,mBACA,IACA,cACA,mBACA,gBAGJtjC,EAAK,CACH8B,UAAW,OACXmhC,KAAM,CAAC,IACPI,MAAO,GACPC,QAAS,CACP,YACA,UACA,kBACA,UACA,MACA,mCAMVJ,EAAS,EAAU,KACjBE,EAAG,EAAyB,KAC1BpjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAElkB,QAAS,KAClBskB,MAAO,CACL,aACA,gBACA,gBACA,aACA,gBACA,gBACA,aACA,gBACA,gBACA,aACA,gBACA,gBACA,aACA,gBACA,iBAEFC,QAAS,CACP,aACA,gBACA,gBACA,iBACA,gBACA,aACA,MACA,MAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAElkB,QAAS,KAClBskB,MAAO,CACL,gBACA,oBACA,oBACA,gBACA,iBACA,iBACA,gBACA,oBACA,qBAEFC,QAAS,CACP,gBACA,oBACA,oBACA,aACA,gBACA,gBACA,gBACA,MACA,MAGJtjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CAAC,aAAc,iBACtBC,QAAS,CAAC,aAAc,mBAE1BtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,CAAElkB,QAAS,QAClBukB,QAAS,CAAC,aAAc,qBAI5BJ,EAAS,EAAmB,KAC1BE,EAAG,EAAyB,KAC1BpjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,IACPI,MAAO,CACL,aACA,gBACA,gBACA,aACA,gBACA,gBACA,aACA,gBACA,gBACA,aACA,gBACA,gBACA,aACA,gBACA,iBAEFC,QAAS,CACP,aACA,gBACA,gBACA,iBACA,gBACA,aACA,MACA,MAGJtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,IACPI,MAAO,CACL,gBACA,oBACA,oBACA,gBACA,iBACA,iBACA,gBACA,oBACA,qBAEFC,QAAS,CACP,gBACA,oBACA,oBACA,aACA,gBACA,gBACA,gBACA,MACA,MAGJtjC,EAAK,CACH8B,UAAW,SACXuhC,MAAO,CAAC,aAAc,iBACtBC,QAAS,CAAC,aAAc,mBAE1BtjC,EAAK,CACH8B,UAAW,SACXmhC,KAAM,CAAC,OACPK,QAAS,CAAC,aAAc,yBAMzBR,CACT,C","sources":["webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isEthereumAddress.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/trim.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/blacklist.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/stripLow.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISSN.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isWhitelisted.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isLicensePlate.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/equals.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/nullUndefinedCheck.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/toInt.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isFloat.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isCreditCard.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/normalizeEmail.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isAfter.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMongoId.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/toFloat.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isVariableWidth.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/checkHost.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isRFC3339.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isNumeric.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBoolean.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISRC.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/whitelist.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isHexadecimal.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isEmpty.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/ltrim.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMailtoURI.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/rtrim.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/matches.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isIdentityCard.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISIN.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMultibyte.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO31661Numeric.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMACAddress.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/toBoolean.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/alpha.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/assertString.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO15924.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isPassportNumber.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isSurrogatePair.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isDataURI.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isLuhnNumber.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/merge.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isIBAN.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isDivisibleBy.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/toDate.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO31661Alpha3.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isPort.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isPostalCode.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isHash.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isAscii.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isAbaRouting.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMimeType.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/includesString.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isHexColor.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/algorithms.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isUUID.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMobilePhone.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBIC.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isVAT.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isIP.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isRgbColor.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isUppercase.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/multilineRegex.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBtcAddress.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isJSON.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/toString.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO6346.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isLatLong.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isDecimal.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isInt.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO8601.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isByteLength.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isAlpha.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBase58.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBefore.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isCurrency.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isLocale.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isHSL.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isIPRange.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isStrongPassword.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMagnetURI.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isLowercase.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isFQDN.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBase32.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/unescape.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isEAN.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isTaxID.js","webpack://ValidatorJSBenchmark/./node_modules/validator/index.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isURL.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO6391.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isBase64.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO4217.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISO31661Alpha2.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isIMEI.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/util/includesArray.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isTime.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isAlphanumeric.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isDate.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isJWT.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/contains.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isSlug.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isIn.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isLength.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isEmail.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isHalfWidth.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isOctal.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isFullWidth.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isISBN.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isMD5.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/escape.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isSemVer.js","webpack://ValidatorJSBenchmark/./node_modules/validator/lib/isULID.js","webpack://ValidatorJSBenchmark/webpack/bootstrap","webpack://ValidatorJSBenchmark/webpack/runtime/define property getters","webpack://ValidatorJSBenchmark/webpack/runtime/hasOwnProperty shorthand","webpack://ValidatorJSBenchmark/webpack/runtime/make namespace object","webpack://ValidatorJSBenchmark/./src/test.mjs"],"sourcesContent":["\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isEthereumAddress;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar eth = /^(0x)[0-9a-f]{40}$/i;\nfunction isEthereumAddress(str) {\n  (0, _assertString.default)(str);\n  return eth.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = trim;\nvar _rtrim = _interopRequireDefault(require(\"./rtrim\"));\nvar _ltrim = _interopRequireDefault(require(\"./ltrim\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction trim(str, chars) {\n  return (0, _rtrim.default)((0, _ltrim.default)(str, chars), chars);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = blacklist;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction blacklist(str, chars) {\n  (0, _assertString.default)(str);\n  return str.replace(new RegExp(\"[\".concat(chars, \"]+\"), 'g'), '');\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = stripLow;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _blacklist = _interopRequireDefault(require(\"./blacklist\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction stripLow(str, keep_new_lines) {\n  (0, _assertString.default)(str);\n  var chars = keep_new_lines ? '\\\\x00-\\\\x09\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F' : '\\\\x00-\\\\x1F\\\\x7F';\n  return (0, _blacklist.default)(str, chars);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISSN;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar issn = '^\\\\d{4}-?\\\\d{3}[\\\\dX]$';\nfunction isISSN(str) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  (0, _assertString.default)(str);\n  var testIssn = issn;\n  testIssn = options.require_hyphen ? testIssn.replace('?', '') : testIssn;\n  testIssn = options.case_sensitive ? new RegExp(testIssn) : new RegExp(testIssn, 'i');\n  if (!testIssn.test(str)) {\n    return false;\n  }\n  var digits = str.replace('-', '').toUpperCase();\n  var checksum = 0;\n  for (var i = 0; i < digits.length; i++) {\n    var digit = digits[i];\n    checksum += (digit === 'X' ? 10 : +digit) * (8 - i);\n  }\n  return checksum % 11 === 0;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isWhitelisted;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isWhitelisted(str, chars) {\n  (0, _assertString.default)(str);\n  for (var i = str.length - 1; i >= 0; i--) {\n    if (chars.indexOf(str[i]) === -1) {\n      return false;\n    }\n  }\n  return true;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLicensePlate;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar validators = {\n  'cs-CZ': function csCZ(str) {\n    return /^(([ABCDEFHIJKLMNPRSTUVXYZ]|[0-9])-?){5,8}$/.test(str);\n  },\n  'de-DE': function deDE(str) {\n    return /^((A|AA|AB|AC|AE|AH|AK|AM|AN|AÖ|AP|AS|AT|AU|AW|AZ|B|BA|BB|BC|BE|BF|BH|BI|BK|BL|BM|BN|BO|BÖ|BS|BT|BZ|C|CA|CB|CE|CO|CR|CW|D|DA|DD|DE|DH|DI|DL|DM|DN|DO|DU|DW|DZ|E|EA|EB|ED|EE|EF|EG|EH|EI|EL|EM|EN|ER|ES|EU|EW|F|FB|FD|FF|FG|FI|FL|FN|FO|FR|FS|FT|FÜ|FW|FZ|G|GA|GC|GD|GE|GF|GG|GI|GK|GL|GM|GN|GÖ|GP|GR|GS|GT|GÜ|GV|GW|GZ|H|HA|HB|HC|HD|HE|HF|HG|HH|HI|HK|HL|HM|HN|HO|HP|HR|HS|HU|HV|HX|HY|HZ|IK|IL|IN|IZ|J|JE|JL|K|KA|KB|KC|KE|KF|KG|KH|KI|KK|KL|KM|KN|KO|KR|KS|KT|KU|KW|KY|L|LA|LB|LC|LD|LF|LG|LH|LI|LL|LM|LN|LÖ|LP|LR|LU|M|MA|MB|MC|MD|ME|MG|MH|MI|MK|ML|MM|MN|MO|MQ|MR|MS|MÜ|MW|MY|MZ|N|NB|ND|NE|NF|NH|NI|NK|NM|NÖ|NP|NR|NT|NU|NW|NY|NZ|OA|OB|OC|OD|OE|OF|OG|OH|OK|OL|OP|OS|OZ|P|PA|PB|PE|PF|PI|PL|PM|PN|PR|PS|PW|PZ|R|RA|RC|RD|RE|RG|RH|RI|RL|RM|RN|RO|RP|RS|RT|RU|RV|RW|RZ|S|SB|SC|SE|SG|SI|SK|SL|SM|SN|SO|SP|SR|ST|SU|SW|SY|SZ|TE|TF|TG|TO|TP|TR|TS|TT|TÜ|ÜB|UE|UH|UL|UM|UN|V|VB|VG|VK|VR|VS|W|WA|WB|WE|WF|WI|WK|WL|WM|WN|WO|WR|WS|WT|WÜ|WW|WZ|Z|ZE|ZI|ZP|ZR|ZW|ZZ)[- ]?[A-Z]{1,2}[- ]?\\d{1,4}|(ABG|ABI|AIB|AIC|ALF|ALZ|ANA|ANG|ANK|APD|ARN|ART|ASL|ASZ|AUR|AZE|BAD|BAR|BBG|BCH|BED|BER|BGD|BGL|BID|BIN|BIR|BIT|BIW|BKS|BLB|BLK|BNA|BOG|BOH|BOR|BOT|BRA|BRB|BRG|BRK|BRL|BRV|BSB|BSK|BTF|BÜD|BUL|BÜR|BÜS|BÜZ|CAS|CHA|CLP|CLZ|COC|COE|CUX|DAH|DAN|DAU|DBR|DEG|DEL|DGF|DIL|DIN|DIZ|DKB|DLG|DON|DUD|DÜW|EBE|EBN|EBS|ECK|EIC|EIL|EIN|EIS|EMD|EMS|ERB|ERH|ERK|ERZ|ESB|ESW|FDB|FDS|FEU|FFB|FKB|FLÖ|FOR|FRG|FRI|FRW|FTL|FÜS|GAN|GAP|GDB|GEL|GEO|GER|GHA|GHC|GLA|GMN|GNT|GOA|GOH|GRA|GRH|GRI|GRM|GRZ|GTH|GUB|GUN|GVM|HAB|HAL|HAM|HAS|HBN|HBS|HCH|HDH|HDL|HEB|HEF|HEI|HER|HET|HGN|HGW|HHM|HIG|HIP|HMÜ|HOG|HOH|HOL|HOM|HOR|HÖS|HOT|HRO|HSK|HST|HVL|HWI|IGB|ILL|JÜL|KEH|KEL|KEM|KIB|KLE|KLZ|KÖN|KÖT|KÖZ|KRU|KÜN|KUS|KYF|LAN|LAU|LBS|LBZ|LDK|LDS|LEO|LER|LEV|LIB|LIF|LIP|LÖB|LOS|LRO|LSZ|LÜN|LUP|LWL|MAB|MAI|MAK|MAL|MED|MEG|MEI|MEK|MEL|MER|MET|MGH|MGN|MHL|MIL|MKK|MOD|MOL|MON|MOS|MSE|MSH|MSP|MST|MTK|MTL|MÜB|MÜR|MYK|MZG|NAB|NAI|NAU|NDH|NEA|NEB|NEC|NEN|NES|NEW|NMB|NMS|NOH|NOL|NOM|NOR|NVP|NWM|OAL|OBB|OBG|OCH|OHA|ÖHR|OHV|OHZ|OPR|OSL|OVI|OVL|OVP|PAF|PAN|PAR|PCH|PEG|PIR|PLÖ|PRÜ|QFT|QLB|RDG|REG|REH|REI|RID|RIE|ROD|ROF|ROK|ROL|ROS|ROT|ROW|RSL|RÜD|RÜG|SAB|SAD|SAN|SAW|SBG|SBK|SCZ|SDH|SDL|SDT|SEB|SEE|SEF|SEL|SFB|SFT|SGH|SHA|SHG|SHK|SHL|SIG|SIM|SLE|SLF|SLK|SLN|SLS|SLÜ|SLZ|SMÜ|SOB|SOG|SOK|SÖM|SON|SPB|SPN|SRB|SRO|STA|STB|STD|STE|STL|SUL|SÜW|SWA|SZB|TBB|TDO|TET|TIR|TÖL|TUT|UEM|UER|UFF|USI|VAI|VEC|VER|VIB|VIE|VIT|VOH|WAF|WAK|WAN|WAR|WAT|WBS|WDA|WEL|WEN|WER|WES|WHV|WIL|WIS|WIT|WIZ|WLG|WMS|WND|WOB|WOH|WOL|WOR|WOS|WRN|WSF|WST|WSW|WTL|WTM|WUG|WÜM|WUN|WUR|WZL|ZEL|ZIG)[- ]?(([A-Z][- ]?\\d{1,4})|([A-Z]{2}[- ]?\\d{1,3})))[- ]?(E|H)?$/.test(str);\n  },\n  'de-LI': function deLI(str) {\n    return /^FL[- ]?\\d{1,5}[UZ]?$/.test(str);\n  },\n  'en-IN': function enIN(str) {\n    return /^[A-Z]{2}[ -]?[0-9]{1,2}(?:[ -]?[A-Z])(?:[ -]?[A-Z]*)?[ -]?[0-9]{4}$/.test(str);\n  },\n  'en-SG': function enSG(str) {\n    return /^[A-Z]{3}[ -]?[\\d]{4}[ -]?[A-Z]{1}$/.test(str);\n  },\n  'es-AR': function esAR(str) {\n    return /^(([A-Z]{2} ?[0-9]{3} ?[A-Z]{2})|([A-Z]{3} ?[0-9]{3}))$/.test(str);\n  },\n  'fi-FI': function fiFI(str) {\n    return /^(?=.{4,7})(([A-Z]{1,3}|[0-9]{1,3})[\\s-]?([A-Z]{1,3}|[0-9]{1,5}))$/.test(str);\n  },\n  'hu-HU': function huHU(str) {\n    return /^((((?!AAA)(([A-NPRSTVZWXY]{1})([A-PR-Z]{1})([A-HJ-NPR-Z]))|(A[ABC]I)|A[ABC]O|A[A-W]Q|BPI|BPO|UCO|UDO|XAO)-(?!000)\\d{3})|(M\\d{6})|((CK|DT|CD|HC|H[ABEFIKLMNPRSTVX]|MA|OT|R[A-Z]) \\d{2}-\\d{2})|(CD \\d{3}-\\d{3})|(C-(C|X) \\d{4})|(X-(A|B|C) \\d{4})|(([EPVZ]-\\d{5}))|(S A[A-Z]{2} \\d{2})|(SP \\d{2}-\\d{2}))$/.test(str);\n  },\n  'pt-BR': function ptBR(str) {\n    return /^[A-Z]{3}[ -]?[0-9][A-Z][0-9]{2}|[A-Z]{3}[ -]?[0-9]{4}$/.test(str);\n  },\n  'pt-PT': function ptPT(str) {\n    return /^(([A-Z]{2}[ -·]?[0-9]{2}[ -·]?[0-9]{2})|([0-9]{2}[ -·]?[A-Z]{2}[ -·]?[0-9]{2})|([0-9]{2}[ -·]?[0-9]{2}[ -·]?[A-Z]{2})|([A-Z]{2}[ -·]?[0-9]{2}[ -·]?[A-Z]{2}))$/.test(str);\n  },\n  'sq-AL': function sqAL(str) {\n    return /^[A-Z]{2}[- ]?((\\d{3}[- ]?(([A-Z]{2})|T))|(R[- ]?\\d{3}))$/.test(str);\n  },\n  'sv-SE': function svSE(str) {\n    return /^[A-HJ-PR-UW-Z]{3} ?[\\d]{2}[A-HJ-PR-UW-Z1-9]$|(^[A-ZÅÄÖ ]{2,7}$)/.test(str.trim());\n  },\n  'en-PK': function enPK(str) {\n    return /(^[A-Z]{2}((\\s|-){0,1})[0-9]{3,4}((\\s|-)[0-9]{2}){0,1}$)|(^[A-Z]{3}((\\s|-){0,1})[0-9]{3,4}((\\s|-)[0-9]{2}){0,1}$)|(^[A-Z]{4}((\\s|-){0,1})[0-9]{3,4}((\\s|-)[0-9]{2}){0,1}$)|(^[A-Z]((\\s|-){0,1})[0-9]{4}((\\s|-)[0-9]{2}){0,1}$)/.test(str.trim());\n  }\n};\nfunction isLicensePlate(str, locale) {\n  (0, _assertString.default)(str);\n  if (locale in validators) {\n    return validators[locale](str);\n  } else if (locale === 'any') {\n    for (var key in validators) {\n      /* eslint guard-for-in: 0 */\n      var validator = validators[key];\n      if (validator(str)) {\n        return true;\n      }\n    }\n    return false;\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = equals;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction equals(str, comparison) {\n  (0, _assertString.default)(str);\n  return str === comparison;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isNullOrUndefined;\nfunction isNullOrUndefined(value) {\n  return value === null || value === undefined;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toInt;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction toInt(str, radix) {\n  (0, _assertString.default)(str);\n  return parseInt(str, radix || 10);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isFloat;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _nullUndefinedCheck = _interopRequireDefault(require(\"./util/nullUndefinedCheck\"));\nvar _alpha = require(\"./alpha\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isFloat(str, options) {\n  (0, _assertString.default)(str);\n  options = options || {};\n  var float = new RegExp(\"^(?:[-+])?(?:[0-9]+)?(?:\\\\\".concat(options.locale ? _alpha.decimal[options.locale] : '.', \"[0-9]*)?(?:[eE][\\\\+\\\\-]?(?:[0-9]+))?$\"));\n  if (str === '' || str === '.' || str === ',' || str === '-' || str === '+') {\n    return false;\n  }\n  var value = parseFloat(str.replace(',', '.'));\n  return float.test(str) && (!options.hasOwnProperty('min') || (0, _nullUndefinedCheck.default)(options.min) || value >= options.min) && (!options.hasOwnProperty('max') || (0, _nullUndefinedCheck.default)(options.max) || value <= options.max) && (!options.hasOwnProperty('lt') || (0, _nullUndefinedCheck.default)(options.lt) || value < options.lt) && (!options.hasOwnProperty('gt') || (0, _nullUndefinedCheck.default)(options.gt) || value > options.gt);\n}\nvar locales = exports.locales = Object.keys(_alpha.decimal);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isCreditCard;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _isLuhnNumber = _interopRequireDefault(require(\"./isLuhnNumber\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar cards = {\n  amex: /^3[47][0-9]{13}$/,\n  dinersclub: /^3(?:0[0-5]|[68][0-9])[0-9]{11}$/,\n  discover: /^6(?:011|5[0-9][0-9])[0-9]{12,15}$/,\n  jcb: /^(?:2131|1800|35\\d{3})\\d{11}$/,\n  mastercard: /^5[1-5][0-9]{2}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$/,\n  // /^[25][1-7][0-9]{14}$/;\n  unionpay: /^(6[27][0-9]{14}|^(81[0-9]{14,17}))$/,\n  visa: /^(?:4[0-9]{12})(?:[0-9]{3,6})?$/\n};\nvar allCards = function () {\n  var tmpCardsArray = [];\n  for (var cardProvider in cards) {\n    // istanbul ignore else\n    if (cards.hasOwnProperty(cardProvider)) {\n      tmpCardsArray.push(cards[cardProvider]);\n    }\n  }\n  return tmpCardsArray;\n}();\nfunction isCreditCard(card) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  (0, _assertString.default)(card);\n  var provider = options.provider;\n  var sanitized = card.replace(/[- ]+/g, '');\n  if (provider && provider.toLowerCase() in cards) {\n    // specific provider in the list\n    if (!cards[provider.toLowerCase()].test(sanitized)) {\n      return false;\n    }\n  } else if (provider && !(provider.toLowerCase() in cards)) {\n    /* specific provider not in the list */\n    throw new Error(\"\".concat(provider, \" is not a valid credit card provider.\"));\n  } else if (!allCards.some(function (cardProvider) {\n    return cardProvider.test(sanitized);\n  })) {\n    // no specific provider\n    return false;\n  }\n  return (0, _isLuhnNumber.default)(card);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = normalizeEmail;\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar default_normalize_email_options = {\n  // The following options apply to all email addresses\n  // Lowercases the local part of the email address.\n  // Please note this may violate RFC 5321 as per http://stackoverflow.com/a/9808332/192024).\n  // The domain is always lowercased, as per RFC 1035\n  all_lowercase: true,\n  // The following conversions are specific to GMail\n  // Lowercases the local part of the GMail address (known to be case-insensitive)\n  gmail_lowercase: true,\n  // Removes dots from the local part of the email address, as that's ignored by GMail\n  gmail_remove_dots: true,\n  // Removes the subaddress (e.g. \"+foo\") from the email address\n  gmail_remove_subaddress: true,\n  // Conversts the googlemail.com domain to gmail.com\n  gmail_convert_googlemaildotcom: true,\n  // The following conversions are specific to Outlook.com / Windows Live / Hotmail\n  // Lowercases the local part of the Outlook.com address (known to be case-insensitive)\n  outlookdotcom_lowercase: true,\n  // Removes the subaddress (e.g. \"+foo\") from the email address\n  outlookdotcom_remove_subaddress: true,\n  // The following conversions are specific to Yahoo\n  // Lowercases the local part of the Yahoo address (known to be case-insensitive)\n  yahoo_lowercase: true,\n  // Removes the subaddress (e.g. \"-foo\") from the email address\n  yahoo_remove_subaddress: true,\n  // The following conversions are specific to Yandex\n  // Lowercases the local part of the Yandex address (known to be case-insensitive)\n  yandex_lowercase: true,\n  // all yandex domains are equal, this explicitly sets the domain to 'yandex.ru'\n  yandex_convert_yandexru: true,\n  // The following conversions are specific to iCloud\n  // Lowercases the local part of the iCloud address (known to be case-insensitive)\n  icloud_lowercase: true,\n  // Removes the subaddress (e.g. \"+foo\") from the email address\n  icloud_remove_subaddress: true\n};\n\n// List of domains used by iCloud\nvar icloud_domains = ['icloud.com', 'me.com'];\n\n// List of domains used by Outlook.com and its predecessors\n// This list is likely incomplete.\n// Partial reference:\n// https://blogs.office.com/2013/04/17/outlook-com-gets-two-step-verification-sign-in-by-alias-and-new-international-domains/\nvar outlookdotcom_domains = ['hotmail.at', 'hotmail.be', 'hotmail.ca', 'hotmail.cl', 'hotmail.co.il', 'hotmail.co.nz', 'hotmail.co.th', 'hotmail.co.uk', 'hotmail.com', 'hotmail.com.ar', 'hotmail.com.au', 'hotmail.com.br', 'hotmail.com.gr', 'hotmail.com.mx', 'hotmail.com.pe', 'hotmail.com.tr', 'hotmail.com.vn', 'hotmail.cz', 'hotmail.de', 'hotmail.dk', 'hotmail.es', 'hotmail.fr', 'hotmail.hu', 'hotmail.id', 'hotmail.ie', 'hotmail.in', 'hotmail.it', 'hotmail.jp', 'hotmail.kr', 'hotmail.lv', 'hotmail.my', 'hotmail.ph', 'hotmail.pt', 'hotmail.sa', 'hotmail.sg', 'hotmail.sk', 'live.be', 'live.co.uk', 'live.com', 'live.com.ar', 'live.com.mx', 'live.de', 'live.es', 'live.eu', 'live.fr', 'live.it', 'live.nl', 'msn.com', 'outlook.at', 'outlook.be', 'outlook.cl', 'outlook.co.il', 'outlook.co.nz', 'outlook.co.th', 'outlook.com', 'outlook.com.ar', 'outlook.com.au', 'outlook.com.br', 'outlook.com.gr', 'outlook.com.pe', 'outlook.com.tr', 'outlook.com.vn', 'outlook.cz', 'outlook.de', 'outlook.dk', 'outlook.es', 'outlook.fr', 'outlook.hu', 'outlook.id', 'outlook.ie', 'outlook.in', 'outlook.it', 'outlook.jp', 'outlook.kr', 'outlook.lv', 'outlook.my', 'outlook.ph', 'outlook.pt', 'outlook.sa', 'outlook.sg', 'outlook.sk', 'passport.com'];\n\n// List of domains used by Yahoo Mail\n// This list is likely incomplete\nvar yahoo_domains = ['rocketmail.com', 'yahoo.ca', 'yahoo.co.uk', 'yahoo.com', 'yahoo.de', 'yahoo.fr', 'yahoo.in', 'yahoo.it', 'ymail.com'];\n\n// List of domains used by yandex.ru\nvar yandex_domains = ['yandex.ru', 'yandex.ua', 'yandex.kz', 'yandex.com', 'yandex.by', 'ya.ru'];\n\n// replace single dots, but not multiple consecutive dots\nfunction dotsReplacer(match) {\n  if (match.length > 1) {\n    return match;\n  }\n  return '';\n}\nfunction normalizeEmail(email, options) {\n  options = (0, _merge.default)(options, default_normalize_email_options);\n  var raw_parts = email.split('@');\n  var domain = raw_parts.pop();\n  var user = raw_parts.join('@');\n  var parts = [user, domain];\n\n  // The domain is always lowercased, as it's case-insensitive per RFC 1035\n  parts[1] = parts[1].toLowerCase();\n  if (parts[1] === 'gmail.com' || parts[1] === 'googlemail.com') {\n    // Address is GMail\n    if (options.gmail_remove_subaddress) {\n      parts[0] = parts[0].split('+')[0];\n    }\n    if (options.gmail_remove_dots) {\n      // this does not replace consecutive dots like [email protected]\n      parts[0] = parts[0].replace(/\\.+/g, dotsReplacer);\n    }\n    if (!parts[0].length) {\n      return false;\n    }\n    if (options.all_lowercase || options.gmail_lowercase) {\n      parts[0] = parts[0].toLowerCase();\n    }\n    parts[1] = options.gmail_convert_googlemaildotcom ? 'gmail.com' : parts[1];\n  } else if (icloud_domains.indexOf(parts[1]) >= 0) {\n    // Address is iCloud\n    if (options.icloud_remove_subaddress) {\n      parts[0] = parts[0].split('+')[0];\n    }\n    if (!parts[0].length) {\n      return false;\n    }\n    if (options.all_lowercase || options.icloud_lowercase) {\n      parts[0] = parts[0].toLowerCase();\n    }\n  } else if (outlookdotcom_domains.indexOf(parts[1]) >= 0) {\n    // Address is Outlook.com\n    if (options.outlookdotcom_remove_subaddress) {\n      parts[0] = parts[0].split('+')[0];\n    }\n    if (!parts[0].length) {\n      return false;\n    }\n    if (options.all_lowercase || options.outlookdotcom_lowercase) {\n      parts[0] = parts[0].toLowerCase();\n    }\n  } else if (yahoo_domains.indexOf(parts[1]) >= 0) {\n    // Address is Yahoo\n    if (options.yahoo_remove_subaddress) {\n      var components = parts[0].split('-');\n      parts[0] = components.length > 1 ? components.slice(0, -1).join('-') : components[0];\n    }\n    if (!parts[0].length) {\n      return false;\n    }\n    if (options.all_lowercase || options.yahoo_lowercase) {\n      parts[0] = parts[0].toLowerCase();\n    }\n  } else if (yandex_domains.indexOf(parts[1]) >= 0) {\n    if (options.all_lowercase || options.yandex_lowercase) {\n      parts[0] = parts[0].toLowerCase();\n    }\n    parts[1] = options.yandex_convert_yandexru ? 'yandex.ru' : parts[1];\n  } else if (options.all_lowercase) {\n    // Any other address\n    parts[0] = parts[0].toLowerCase();\n  }\n  return parts.join('@');\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isAfter;\nvar _toDate = _interopRequireDefault(require(\"./toDate\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction isAfter(date, options) {\n  // For backwards compatibility:\n  // isAfter(str [, date]), i.e. `options` could be used as argument for the legacy `date`\n  var comparisonDate = (_typeof(options) === 'object' ? options.comparisonDate : options) || Date().toString();\n  var comparison = (0, _toDate.default)(comparisonDate);\n  var original = (0, _toDate.default)(date);\n  return !!(original && comparison && original > comparison);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMongoId;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _isHexadecimal = _interopRequireDefault(require(\"./isHexadecimal\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isMongoId(str) {\n  (0, _assertString.default)(str);\n  return (0, _isHexadecimal.default)(str) && str.length === 24;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toFloat;\nvar _isFloat = _interopRequireDefault(require(\"./isFloat\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction toFloat(str) {\n  if (!(0, _isFloat.default)(str)) return NaN;\n  return parseFloat(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isVariableWidth;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _isFullWidth = require(\"./isFullWidth\");\nvar _isHalfWidth = require(\"./isHalfWidth\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isVariableWidth(str) {\n  (0, _assertString.default)(str);\n  return _isFullWidth.fullWidth.test(str) && _isHalfWidth.halfWidth.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = checkHost;\nfunction isRegExp(obj) {\n  return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nfunction checkHost(host, matches) {\n  for (var i = 0; i < matches.length; i++) {\n    var match = matches[i];\n    if (host === match || isRegExp(match) && match.test(host)) {\n      return true;\n    }\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isRFC3339;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/* Based on https://tools.ietf.org/html/rfc3339#section-5.6 */\n\nvar dateFullYear = /[0-9]{4}/;\nvar dateMonth = /(0[1-9]|1[0-2])/;\nvar dateMDay = /([12]\\d|0[1-9]|3[01])/;\nvar timeHour = /([01][0-9]|2[0-3])/;\nvar timeMinute = /[0-5][0-9]/;\nvar timeSecond = /([0-5][0-9]|60)/;\nvar timeSecFrac = /(\\.[0-9]+)?/;\nvar timeNumOffset = new RegExp(\"[-+]\".concat(timeHour.source, \":\").concat(timeMinute.source));\nvar timeOffset = new RegExp(\"([zZ]|\".concat(timeNumOffset.source, \")\"));\nvar partialTime = new RegExp(\"\".concat(timeHour.source, \":\").concat(timeMinute.source, \":\").concat(timeSecond.source).concat(timeSecFrac.source));\nvar fullDate = new RegExp(\"\".concat(dateFullYear.source, \"-\").concat(dateMonth.source, \"-\").concat(dateMDay.source));\nvar fullTime = new RegExp(\"\".concat(partialTime.source).concat(timeOffset.source));\nvar rfc3339 = new RegExp(\"^\".concat(fullDate.source, \"[ tT]\").concat(fullTime.source, \"$\"));\nfunction isRFC3339(str) {\n  (0, _assertString.default)(str);\n  return rfc3339.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isNumeric;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _alpha = require(\"./alpha\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar numericNoSymbols = /^[0-9]+$/;\nfunction isNumeric(str, options) {\n  (0, _assertString.default)(str);\n  if (options && options.no_symbols) {\n    return numericNoSymbols.test(str);\n  }\n  return new RegExp(\"^[+-]?([0-9]*[\".concat((options || {}).locale ? _alpha.decimal[options.locale] : '.', \"])?[0-9]+$\")).test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBoolean;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _includesArray = _interopRequireDefault(require(\"./util/includesArray\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar defaultOptions = {\n  loose: false\n};\nvar strictBooleans = ['true', 'false', '1', '0'];\nvar looseBooleans = [].concat(strictBooleans, ['yes', 'no']);\nfunction isBoolean(str) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOptions;\n  (0, _assertString.default)(str);\n  if (options.loose) {\n    return (0, _includesArray.default)(looseBooleans, str.toLowerCase());\n  }\n  return (0, _includesArray.default)(strictBooleans, str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISRC;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// see http://isrc.ifpi.org/en/isrc-standard/code-syntax\nvar isrc = /^[A-Z]{2}[0-9A-Z]{3}\\d{2}\\d{5}$/;\nfunction isISRC(str) {\n  (0, _assertString.default)(str);\n  return isrc.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = whitelist;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction whitelist(str, chars) {\n  (0, _assertString.default)(str);\n  return str.replace(new RegExp(\"[^\".concat(chars, \"]+\"), 'g'), '');\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isHexadecimal;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar hexadecimal = /^(0x|0h)?[0-9A-F]+$/i;\nfunction isHexadecimal(str) {\n  (0, _assertString.default)(str);\n  return hexadecimal.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isEmpty;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar default_is_empty_options = {\n  ignore_whitespace: false\n};\nfunction isEmpty(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, default_is_empty_options);\n  return (options.ignore_whitespace ? str.trim().length : str.length) === 0;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = ltrim;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction ltrim(str, chars) {\n  (0, _assertString.default)(str);\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n  var pattern = chars ? new RegExp(\"^[\".concat(chars.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), \"]+\"), 'g') : /^\\s+/g;\n  return str.replace(pattern, '');\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMailtoURI;\nvar _trim = _interopRequireDefault(require(\"./trim\"));\nvar _isEmail = _interopRequireDefault(require(\"./isEmail\"));\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction parseMailtoQueryString(queryString) {\n  var allowedParams = new Set(['subject', 'body', 'cc', 'bcc']),\n    query = {\n      cc: '',\n      bcc: ''\n    };\n  var isParseFailed = false;\n  var queryParams = queryString.split('&');\n  if (queryParams.length > 4) {\n    return false;\n  }\n  var _iterator = _createForOfIteratorHelper(queryParams),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var q = _step.value;\n      var _q$split = q.split('='),\n        _q$split2 = _slicedToArray(_q$split, 2),\n        key = _q$split2[0],\n        value = _q$split2[1];\n\n      // checked for invalid and duplicated query params\n      if (key && !allowedParams.has(key)) {\n        isParseFailed = true;\n        break;\n      }\n      if (value && (key === 'cc' || key === 'bcc')) {\n        query[key] = value;\n      }\n      if (key) {\n        allowedParams.delete(key);\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  return isParseFailed ? false : query;\n}\nfunction isMailtoURI(url, options) {\n  (0, _assertString.default)(url);\n  if (url.indexOf('mailto:') !== 0) {\n    return false;\n  }\n  var _url$replace$split = url.replace('mailto:', '').split('?'),\n    _url$replace$split2 = _slicedToArray(_url$replace$split, 2),\n    to = _url$replace$split2[0],\n    _url$replace$split2$ = _url$replace$split2[1],\n    queryString = _url$replace$split2$ === void 0 ? '' : _url$replace$split2$;\n  if (!to && !queryString) {\n    return true;\n  }\n  var query = parseMailtoQueryString(queryString);\n  if (!query) {\n    return false;\n  }\n  return \"\".concat(to, \",\").concat(query.cc, \",\").concat(query.bcc).split(',').every(function (email) {\n    email = (0, _trim.default)(email, ' ');\n    if (email) {\n      return (0, _isEmail.default)(email, options);\n    }\n    return true;\n  });\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = rtrim;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction rtrim(str, chars) {\n  (0, _assertString.default)(str);\n  if (chars) {\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n    var pattern = new RegExp(\"[\".concat(chars.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), \"]+$\"), 'g');\n    return str.replace(pattern, '');\n  }\n  // Use a faster and more safe than regex trim method https://blog.stevenlevithan.com/archives/faster-trim-javascript\n  var strIndex = str.length - 1;\n  while (/\\s/.test(str.charAt(strIndex))) {\n    strIndex -= 1;\n  }\n  return str.slice(0, strIndex + 1);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = matches;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction matches(str, pattern, modifiers) {\n  (0, _assertString.default)(str);\n  if (Object.prototype.toString.call(pattern) !== '[object RegExp]') {\n    pattern = new RegExp(pattern, modifiers);\n  }\n  return !!str.match(pattern);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isIdentityCard;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _includesArray = _interopRequireDefault(require(\"./util/includesArray\"));\nvar _isInt = _interopRequireDefault(require(\"./isInt\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar validators = {\n  PL: function PL(str) {\n    (0, _assertString.default)(str);\n    var weightOfDigits = {\n      1: 1,\n      2: 3,\n      3: 7,\n      4: 9,\n      5: 1,\n      6: 3,\n      7: 7,\n      8: 9,\n      9: 1,\n      10: 3,\n      11: 0\n    };\n    if (str != null && str.length === 11 && (0, _isInt.default)(str, {\n      allow_leading_zeroes: true\n    })) {\n      var digits = str.split('').slice(0, -1);\n      var sum = digits.reduce(function (acc, digit, index) {\n        return acc + Number(digit) * weightOfDigits[index + 1];\n      }, 0);\n      var modulo = sum % 10;\n      var lastDigit = Number(str.charAt(str.length - 1));\n      if (modulo === 0 && lastDigit === 0 || lastDigit === 10 - modulo) {\n        return true;\n      }\n    }\n    return false;\n  },\n  ES: function ES(str) {\n    (0, _assertString.default)(str);\n    var DNI = /^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/;\n    var charsValue = {\n      X: 0,\n      Y: 1,\n      Z: 2\n    };\n    var controlDigits = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E'];\n\n    // sanitize user input\n    var sanitized = str.trim().toUpperCase();\n\n    // validate the data structure\n    if (!DNI.test(sanitized)) {\n      return false;\n    }\n\n    // validate the control digit\n    var number = sanitized.slice(0, -1).replace(/[X,Y,Z]/g, function (char) {\n      return charsValue[char];\n    });\n    return sanitized.endsWith(controlDigits[number % 23]);\n  },\n  FI: function FI(str) {\n    // https://dvv.fi/en/personal-identity-code#:~:text=control%20character%20for%20a-,personal,-identity%20code%20calculated\n    (0, _assertString.default)(str);\n    if (str.length !== 11) {\n      return false;\n    }\n    if (!str.match(/^\\d{6}[\\-A\\+]\\d{3}[0-9ABCDEFHJKLMNPRSTUVWXY]{1}$/)) {\n      return false;\n    }\n    var checkDigits = '0123456789ABCDEFHJKLMNPRSTUVWXY';\n    var idAsNumber = parseInt(str.slice(0, 6), 10) * 1000 + parseInt(str.slice(7, 10), 10);\n    var remainder = idAsNumber % 31;\n    var checkDigit = checkDigits[remainder];\n    return checkDigit === str.slice(10, 11);\n  },\n  IN: function IN(str) {\n    var DNI = /^[1-9]\\d{3}\\s?\\d{4}\\s?\\d{4}$/;\n\n    // multiplication table\n    var d = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 0, 6, 7, 8, 9, 5], [2, 3, 4, 0, 1, 7, 8, 9, 5, 6], [3, 4, 0, 1, 2, 8, 9, 5, 6, 7], [4, 0, 1, 2, 3, 9, 5, 6, 7, 8], [5, 9, 8, 7, 6, 0, 4, 3, 2, 1], [6, 5, 9, 8, 7, 1, 0, 4, 3, 2], [7, 6, 5, 9, 8, 2, 1, 0, 4, 3], [8, 7, 6, 5, 9, 3, 2, 1, 0, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]];\n\n    // permutation table\n    var p = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 5, 7, 6, 2, 8, 3, 0, 9, 4], [5, 8, 0, 3, 7, 9, 6, 1, 4, 2], [8, 9, 1, 6, 0, 4, 3, 5, 2, 7], [9, 4, 5, 3, 1, 2, 6, 8, 7, 0], [4, 2, 8, 6, 5, 7, 3, 9, 0, 1], [2, 7, 9, 3, 8, 0, 6, 4, 1, 5], [7, 0, 4, 6, 9, 1, 3, 2, 5, 8]];\n\n    // sanitize user input\n    var sanitized = str.trim();\n\n    // validate the data structure\n    if (!DNI.test(sanitized)) {\n      return false;\n    }\n    var c = 0;\n    var invertedArray = sanitized.replace(/\\s/g, '').split('').map(Number).reverse();\n    invertedArray.forEach(function (val, i) {\n      c = d[c][p[i % 8][val]];\n    });\n    return c === 0;\n  },\n  IR: function IR(str) {\n    if (!str.match(/^\\d{10}$/)) return false;\n    str = \"0000\".concat(str).slice(str.length - 6);\n    if (parseInt(str.slice(3, 9), 10) === 0) return false;\n    var lastNumber = parseInt(str.slice(9, 10), 10);\n    var sum = 0;\n    for (var i = 0; i < 9; i++) {\n      sum += parseInt(str.slice(i, i + 1), 10) * (10 - i);\n    }\n    sum %= 11;\n    return sum < 2 && lastNumber === sum || sum >= 2 && lastNumber === 11 - sum;\n  },\n  IT: function IT(str) {\n    if (str.length !== 9) return false;\n    if (str === 'CA00000AA') return false; // https://it.wikipedia.org/wiki/Carta_d%27identit%C3%A0_elettronica_italiana\n    return str.search(/C[A-Z]\\d{5}[A-Z]{2}/i) > -1;\n  },\n  NO: function NO(str) {\n    var sanitized = str.trim();\n    if (isNaN(Number(sanitized))) return false;\n    if (sanitized.length !== 11) return false;\n    if (sanitized === '00000000000') return false;\n\n    // https://no.wikipedia.org/wiki/F%C3%B8dselsnummer\n    var f = sanitized.split('').map(Number);\n    var k1 = (11 - (3 * f[0] + 7 * f[1] + 6 * f[2] + 1 * f[3] + 8 * f[4] + 9 * f[5] + 4 * f[6] + 5 * f[7] + 2 * f[8]) % 11) % 11;\n    var k2 = (11 - (5 * f[0] + 4 * f[1] + 3 * f[2] + 2 * f[3] + 7 * f[4] + 6 * f[5] + 5 * f[6] + 4 * f[7] + 3 * f[8] + 2 * k1) % 11) % 11;\n    if (k1 !== f[9] || k2 !== f[10]) return false;\n    return true;\n  },\n  TH: function TH(str) {\n    if (!str.match(/^[1-8]\\d{12}$/)) return false;\n\n    // validate check digit\n    var sum = 0;\n    for (var i = 0; i < 12; i++) {\n      sum += parseInt(str[i], 10) * (13 - i);\n    }\n    return str[12] === ((11 - sum % 11) % 10).toString();\n  },\n  LK: function LK(str) {\n    var old_nic = /^[1-9]\\d{8}[vx]$/i;\n    var new_nic = /^[1-9]\\d{11}$/i;\n    if (str.length === 10 && old_nic.test(str)) return true;else if (str.length === 12 && new_nic.test(str)) return true;\n    return false;\n  },\n  'he-IL': function heIL(str) {\n    var DNI = /^\\d{9}$/;\n\n    // sanitize user input\n    var sanitized = str.trim();\n\n    // validate the data structure\n    if (!DNI.test(sanitized)) {\n      return false;\n    }\n    var id = sanitized;\n    var sum = 0,\n      incNum;\n    for (var i = 0; i < id.length; i++) {\n      incNum = Number(id[i]) * (i % 2 + 1); // Multiply number by 1 or 2\n      sum += incNum > 9 ? incNum - 9 : incNum; // Sum the digits up and add to total\n    }\n    return sum % 10 === 0;\n  },\n  'ar-LY': function arLY(str) {\n    // Libya National Identity Number NIN is 12 digits, the first digit is either 1 or 2\n    var NIN = /^(1|2)\\d{11}$/;\n\n    // sanitize user input\n    var sanitized = str.trim();\n\n    // validate the data structure\n    if (!NIN.test(sanitized)) {\n      return false;\n    }\n    return true;\n  },\n  'ar-TN': function arTN(str) {\n    var DNI = /^\\d{8}$/;\n\n    // sanitize user input\n    var sanitized = str.trim();\n\n    // validate the data structure\n    if (!DNI.test(sanitized)) {\n      return false;\n    }\n    return true;\n  },\n  'zh-CN': function zhCN(str) {\n    var provincesAndCities = ['11',\n    // 北京\n    '12',\n    // 天津\n    '13',\n    // 河北\n    '14',\n    // 山西\n    '15',\n    // 内蒙古\n    '21',\n    // 辽宁\n    '22',\n    // 吉林\n    '23',\n    // 黑龙江\n    '31',\n    // 上海\n    '32',\n    // 江苏\n    '33',\n    // 浙江\n    '34',\n    // 安徽\n    '35',\n    // 福建\n    '36',\n    // 江西\n    '37',\n    // 山东\n    '41',\n    // 河南\n    '42',\n    // 湖北\n    '43',\n    // 湖南\n    '44',\n    // 广东\n    '45',\n    // 广西\n    '46',\n    // 海南\n    '50',\n    // 重庆\n    '51',\n    // 四川\n    '52',\n    // 贵州\n    '53',\n    // 云南\n    '54',\n    // 西藏\n    '61',\n    // 陕西\n    '62',\n    // 甘肃\n    '63',\n    // 青海\n    '64',\n    // 宁夏\n    '65',\n    // 新疆\n    '71',\n    // 台湾\n    '81',\n    // 香港\n    '82',\n    // 澳门\n    '91' // 国外\n    ];\n    var powers = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2'];\n    var parityBit = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n    var checkAddressCode = function checkAddressCode(addressCode) {\n      return (0, _includesArray.default)(provincesAndCities, addressCode);\n    };\n    var checkBirthDayCode = function checkBirthDayCode(birDayCode) {\n      var yyyy = parseInt(birDayCode.substring(0, 4), 10);\n      var mm = parseInt(birDayCode.substring(4, 6), 10);\n      var dd = parseInt(birDayCode.substring(6), 10);\n      var xdata = new Date(yyyy, mm - 1, dd);\n      if (xdata > new Date()) {\n        return false;\n        // eslint-disable-next-line max-len\n      } else if (xdata.getFullYear() === yyyy && xdata.getMonth() === mm - 1 && xdata.getDate() === dd) {\n        return true;\n      }\n      return false;\n    };\n    var getParityBit = function getParityBit(idCardNo) {\n      var id17 = idCardNo.substring(0, 17);\n      var power = 0;\n      for (var i = 0; i < 17; i++) {\n        power += parseInt(id17.charAt(i), 10) * parseInt(powers[i], 10);\n      }\n      var mod = power % 11;\n      return parityBit[mod];\n    };\n    var checkParityBit = function checkParityBit(idCardNo) {\n      return getParityBit(idCardNo) === idCardNo.charAt(17).toUpperCase();\n    };\n    var check15IdCardNo = function check15IdCardNo(idCardNo) {\n      var check = /^[1-9]\\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\\d{3}$/.test(idCardNo);\n      if (!check) return false;\n      var addressCode = idCardNo.substring(0, 2);\n      check = checkAddressCode(addressCode);\n      if (!check) return false;\n      var birDayCode = \"19\".concat(idCardNo.substring(6, 12));\n      check = checkBirthDayCode(birDayCode);\n      if (!check) return false;\n      return true;\n    };\n    var check18IdCardNo = function check18IdCardNo(idCardNo) {\n      var check = /^[1-9]\\d{5}[1-9]\\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\\d{3}(\\d|x|X)$/.test(idCardNo);\n      if (!check) return false;\n      var addressCode = idCardNo.substring(0, 2);\n      check = checkAddressCode(addressCode);\n      if (!check) return false;\n      var birDayCode = idCardNo.substring(6, 14);\n      check = checkBirthDayCode(birDayCode);\n      if (!check) return false;\n      return checkParityBit(idCardNo);\n    };\n    var checkIdCardNo = function checkIdCardNo(idCardNo) {\n      var check = /^\\d{15}|(\\d{17}(\\d|x|X))$/.test(idCardNo);\n      if (!check) return false;\n      if (idCardNo.length === 15) {\n        return check15IdCardNo(idCardNo);\n      }\n      return check18IdCardNo(idCardNo);\n    };\n    return checkIdCardNo(str);\n  },\n  'zh-HK': function zhHK(str) {\n    // sanitize user input\n    str = str.trim();\n\n    // HKID number starts with 1 or 2 letters, followed by 6 digits,\n    // then a checksum contained in square / round brackets or nothing\n    var regexHKID = /^[A-Z]{1,2}[0-9]{6}((\\([0-9A]\\))|(\\[[0-9A]\\])|([0-9A]))$/;\n    var regexIsDigit = /^[0-9]$/;\n\n    // convert the user input to all uppercase and apply regex\n    str = str.toUpperCase();\n    if (!regexHKID.test(str)) return false;\n    str = str.replace(/\\[|\\]|\\(|\\)/g, '');\n    if (str.length === 8) str = \"3\".concat(str);\n    var checkSumVal = 0;\n    for (var i = 0; i <= 7; i++) {\n      var convertedChar = void 0;\n      if (!regexIsDigit.test(str[i])) convertedChar = (str[i].charCodeAt(0) - 55) % 11;else convertedChar = str[i];\n      checkSumVal += convertedChar * (9 - i);\n    }\n    checkSumVal %= 11;\n    var checkSumConverted;\n    if (checkSumVal === 0) checkSumConverted = '0';else if (checkSumVal === 1) checkSumConverted = 'A';else checkSumConverted = String(11 - checkSumVal);\n    if (checkSumConverted === str[str.length - 1]) return true;\n    return false;\n  },\n  'zh-TW': function zhTW(str) {\n    var ALPHABET_CODES = {\n      A: 10,\n      B: 11,\n      C: 12,\n      D: 13,\n      E: 14,\n      F: 15,\n      G: 16,\n      H: 17,\n      I: 34,\n      J: 18,\n      K: 19,\n      L: 20,\n      M: 21,\n      N: 22,\n      O: 35,\n      P: 23,\n      Q: 24,\n      R: 25,\n      S: 26,\n      T: 27,\n      U: 28,\n      V: 29,\n      W: 32,\n      X: 30,\n      Y: 31,\n      Z: 33\n    };\n    var sanitized = str.trim().toUpperCase();\n    if (!/^[A-Z][0-9]{9}$/.test(sanitized)) return false;\n    return Array.from(sanitized).reduce(function (sum, number, index) {\n      if (index === 0) {\n        var code = ALPHABET_CODES[number];\n        return code % 10 * 9 + Math.floor(code / 10);\n      }\n      if (index === 9) {\n        return (10 - sum % 10 - Number(number)) % 10 === 0;\n      }\n      return sum + Number(number) * (9 - index);\n    }, 0);\n  },\n  PK: function PK(str) {\n    // Pakistani National Identity Number CNIC is 13 digits\n    var CNIC = /^[1-7][0-9]{4}-[0-9]{7}-[1-9]$/;\n\n    // sanitize user input\n    var sanitized = str.trim();\n\n    // validate the data structure\n    return CNIC.test(sanitized);\n  }\n};\nfunction isIdentityCard(str, locale) {\n  (0, _assertString.default)(str);\n  if (locale in validators) {\n    return validators[locale](str);\n  } else if (locale === 'any') {\n    for (var key in validators) {\n      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes\n      // istanbul ignore else\n      if (validators.hasOwnProperty(key)) {\n        var validator = validators[key];\n        if (validator(str)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISIN;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar isin = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/;\n\n// this link details how the check digit is calculated:\n// https://www.isin.org/isin-format/. it is a little bit\n// odd in that it works with digits, not numbers. in order\n// to make only one pass through the ISIN characters, the\n// each alpha character is handled as 2 characters within\n// the loop.\n\nfunction isISIN(str) {\n  (0, _assertString.default)(str);\n  if (!isin.test(str)) {\n    return false;\n  }\n  var double = true;\n  var sum = 0;\n  // convert values\n  for (var i = str.length - 2; i >= 0; i--) {\n    if (str[i] >= 'A' && str[i] <= 'Z') {\n      var value = str[i].charCodeAt(0) - 55;\n      var lo = value % 10;\n      var hi = Math.trunc(value / 10);\n      // letters have two digits, so handle the low order\n      // and high order digits separately.\n      for (var _i = 0, _arr = [lo, hi]; _i < _arr.length; _i++) {\n        var digit = _arr[_i];\n        if (double) {\n          if (digit >= 5) {\n            sum += 1 + (digit - 5) * 2;\n          } else {\n            sum += digit * 2;\n          }\n        } else {\n          sum += digit;\n        }\n        double = !double;\n      }\n    } else {\n      var _digit = str[i].charCodeAt(0) - '0'.charCodeAt(0);\n      if (double) {\n        if (_digit >= 5) {\n          sum += 1 + (_digit - 5) * 2;\n        } else {\n          sum += _digit * 2;\n        }\n      } else {\n        sum += _digit;\n      }\n      double = !double;\n    }\n  }\n  var check = Math.trunc((sum + 9) / 10) * 10 - sum;\n  return +str[str.length - 1] === check;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMultibyte;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/* eslint-disable no-control-regex */\nvar multibyte = /[^\\x00-\\x7F]/;\n/* eslint-enable no-control-regex */\n\nfunction isMultibyte(str) {\n  (0, _assertString.default)(str);\n  return multibyte.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISO31661Numeric;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// from https://en.wikipedia.org/wiki/ISO_3166-1_numeric\nvar validISO31661NumericCountriesCodes = new Set(['004', '008', '010', '012', '016', '020', '024', '028', '031', '032', '036', '040', '044', '048', '050', '051', '052', '056', '060', '064', '068', '070', '072', '074', '076', '084', '086', '090', '092', '096', '100', '104', '108', '112', '116', '120', '124', '132', '136', '140', '144', '148', '152', '156', '158', '162', '166', '170', '174', '175', '178', '180', '184', '188', '191', '192', '196', '203', '204', '208', '212', '214', '218', '222', '226', '231', '232', '233', '234', '238', '239', '242', '246', '248', '250', '254', '258', '260', '262', '266', '268', '270', '275', '276', '288', '292', '296', '300', '304', '308', '312', '316', '320', '324', '328', '332', '334', '336', '340', '344', '348', '352', '356', '360', '364', '368', '372', '376', '380', '384', '388', '392', '398', '400', '404', '408', '410', '414', '417', '418', '422', '426', '428', '430', '434', '438', '440', '442', '446', '450', '454', '458', '462', '466', '470', '474', '478', '480', '484', '492', '496', '498', '499', '500', '504', '508', '512', '516', '520', '524', '528', '531', '533', '534', '535', '540', '548', '554', '558', '562', '566', '570', '574', '578', '580', '581', '583', '584', '585', '586', '591', '598', '600', '604', '608', '612', '616', '620', '624', '626', '630', '634', '638', '642', '643', '646', '652', '654', '659', '660', '662', '663', '666', '670', '674', '678', '682', '686', '688', '690', '694', '702', '703', '704', '705', '706', '710', '716', '724', '728', '729', '732', '740', '744', '748', '752', '756', '760', '762', '764', '768', '772', '776', '780', '784', '788', '792', '795', '796', '798', '800', '804', '807', '818', '826', '831', '832', '833', '834', '840', '850', '854', '858', '860', '862', '876', '882', '887', '894']);\nfunction isISO31661Numeric(str) {\n  (0, _assertString.default)(str);\n  return validISO31661NumericCountriesCodes.has(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMACAddress;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar macAddress48 = /^(?:[0-9a-fA-F]{2}([-:\\s]))([0-9a-fA-F]{2}\\1){4}([0-9a-fA-F]{2})$/;\nvar macAddress48NoSeparators = /^([0-9a-fA-F]){12}$/;\nvar macAddress48WithDots = /^([0-9a-fA-F]{4}\\.){2}([0-9a-fA-F]{4})$/;\nvar macAddress64 = /^(?:[0-9a-fA-F]{2}([-:\\s]))([0-9a-fA-F]{2}\\1){6}([0-9a-fA-F]{2})$/;\nvar macAddress64NoSeparators = /^([0-9a-fA-F]){16}$/;\nvar macAddress64WithDots = /^([0-9a-fA-F]{4}\\.){3}([0-9a-fA-F]{4})$/;\nfunction isMACAddress(str, options) {\n  (0, _assertString.default)(str);\n  if (options !== null && options !== void 0 && options.eui) {\n    options.eui = String(options.eui);\n  }\n  /**\n   * @deprecated `no_colons` TODO: remove it in the next major\n  */\n  if (options !== null && options !== void 0 && options.no_colons || options !== null && options !== void 0 && options.no_separators) {\n    if (options.eui === '48') {\n      return macAddress48NoSeparators.test(str);\n    }\n    if (options.eui === '64') {\n      return macAddress64NoSeparators.test(str);\n    }\n    return macAddress48NoSeparators.test(str) || macAddress64NoSeparators.test(str);\n  }\n  if ((options === null || options === void 0 ? void 0 : options.eui) === '48') {\n    return macAddress48.test(str) || macAddress48WithDots.test(str);\n  }\n  if ((options === null || options === void 0 ? void 0 : options.eui) === '64') {\n    return macAddress64.test(str) || macAddress64WithDots.test(str);\n  }\n  return isMACAddress(str, {\n    eui: '48'\n  }) || isMACAddress(str, {\n    eui: '64'\n  });\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toBoolean;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction toBoolean(str, strict) {\n  (0, _assertString.default)(str);\n  if (strict) {\n    return str === '1' || /^true$/i.test(str);\n  }\n  return str !== '0' && !/^false$/i.test(str) && str !== '';\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.farsiLocales = exports.englishLocales = exports.dotDecimal = exports.decimal = exports.commaDecimal = exports.bengaliLocales = exports.arabicLocales = exports.alphanumeric = exports.alpha = void 0;\nvar alpha = exports.alpha = {\n  'en-US': /^[A-Z]+$/i,\n  'az-AZ': /^[A-VXYZÇƏĞİıÖŞÜ]+$/i,\n  'bg-BG': /^[А-Я]+$/i,\n  'cs-CZ': /^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i,\n  'da-DK': /^[A-ZÆØÅ]+$/i,\n  'de-DE': /^[A-ZÄÖÜß]+$/i,\n  'el-GR': /^[Α-ώ]+$/i,\n  'es-ES': /^[A-ZÁÉÍÑÓÚÜ]+$/i,\n  'fa-IR': /^[ابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی]+$/i,\n  'fi-FI': /^[A-ZÅÄÖ]+$/i,\n  'fr-FR': /^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,\n  'it-IT': /^[A-ZÀÉÈÌÎÓÒÙ]+$/i,\n  'ja-JP': /^[ぁ-んァ-ヶヲ-゚一-龠ー・。、]+$/i,\n  'nb-NO': /^[A-ZÆØÅ]+$/i,\n  'nl-NL': /^[A-ZÁÉËÏÓÖÜÚ]+$/i,\n  'nn-NO': /^[A-ZÆØÅ]+$/i,\n  'hu-HU': /^[A-ZÁÉÍÓÖŐÚÜŰ]+$/i,\n  'pl-PL': /^[A-ZĄĆĘŚŁŃÓŻŹ]+$/i,\n  'pt-PT': /^[A-ZÃÁÀÂÄÇÉÊËÍÏÕÓÔÖÚÜ]+$/i,\n  'ru-RU': /^[А-ЯЁ]+$/i,\n  'kk-KZ': /^[А-ЯЁ\\u04D8\\u04B0\\u0406\\u04A2\\u0492\\u04AE\\u049A\\u04E8\\u04BA]+$/i,\n  'sl-SI': /^[A-ZČĆĐŠŽ]+$/i,\n  'sk-SK': /^[A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i,\n  'sr-RS@latin': /^[A-ZČĆŽŠĐ]+$/i,\n  'sr-RS': /^[А-ЯЂЈЉЊЋЏ]+$/i,\n  'sv-SE': /^[A-ZÅÄÖ]+$/i,\n  'th-TH': /^[ก-๐\\s]+$/i,\n  'tr-TR': /^[A-ZÇĞİıÖŞÜ]+$/i,\n  'uk-UA': /^[А-ЩЬЮЯЄIЇҐі]+$/i,\n  'vi-VN': /^[A-ZÀÁẠẢÃÂẦẤẬẨẪĂẰẮẶẲẴĐÈÉẸẺẼÊỀẾỆỂỄÌÍỊỈĨÒÓỌỎÕÔỒỐỘỔỖƠỜỚỢỞỠÙÚỤỦŨƯỪỨỰỬỮỲÝỴỶỸ]+$/i,\n  'ko-KR': /^[ㄱ-ㅎㅏ-ㅣ가-힣]*$/,\n  'ku-IQ': /^[ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i,\n  ar: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/,\n  he: /^[א-ת]+$/,\n  fa: /^['آاءأؤئبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهةی']+$/i,\n  bn: /^['ঀঁংঃঅআইঈউঊঋঌএঐওঔকখগঘঙচছজঝঞটঠডঢণতথদধনপফবভমযরলশষসহ়ঽািীুূৃৄেৈোৌ্ৎৗড়ঢ়য়ৠৡৢৣৰৱ৲৳৴৵৶৷৸৹৺৻']+$/,\n  eo: /^[ABCĈD-GĜHĤIJĴK-PRSŜTUŬVZ]+$/i,\n  'hi-IN': /^[\\u0900-\\u0961]+[\\u0972-\\u097F]*$/i,\n  'si-LK': /^[\\u0D80-\\u0DFF]+$/\n};\nvar alphanumeric = exports.alphanumeric = {\n  'en-US': /^[0-9A-Z]+$/i,\n  'az-AZ': /^[0-9A-VXYZÇƏĞİıÖŞÜ]+$/i,\n  'bg-BG': /^[0-9А-Я]+$/i,\n  'cs-CZ': /^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i,\n  'da-DK': /^[0-9A-ZÆØÅ]+$/i,\n  'de-DE': /^[0-9A-ZÄÖÜß]+$/i,\n  'el-GR': /^[0-9Α-ω]+$/i,\n  'es-ES': /^[0-9A-ZÁÉÍÑÓÚÜ]+$/i,\n  'fi-FI': /^[0-9A-ZÅÄÖ]+$/i,\n  'fr-FR': /^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,\n  'it-IT': /^[0-9A-ZÀÉÈÌÎÓÒÙ]+$/i,\n  'ja-JP': /^[0-90-9ぁ-んァ-ヶヲ-゚一-龠ー・。、]+$/i,\n  'hu-HU': /^[0-9A-ZÁÉÍÓÖŐÚÜŰ]+$/i,\n  'nb-NO': /^[0-9A-ZÆØÅ]+$/i,\n  'nl-NL': /^[0-9A-ZÁÉËÏÓÖÜÚ]+$/i,\n  'nn-NO': /^[0-9A-ZÆØÅ]+$/i,\n  'pl-PL': /^[0-9A-ZĄĆĘŚŁŃÓŻŹ]+$/i,\n  'pt-PT': /^[0-9A-ZÃÁÀÂÄÇÉÊËÍÏÕÓÔÖÚÜ]+$/i,\n  'ru-RU': /^[0-9А-ЯЁ]+$/i,\n  'kk-KZ': /^[0-9А-ЯЁ\\u04D8\\u04B0\\u0406\\u04A2\\u0492\\u04AE\\u049A\\u04E8\\u04BA]+$/i,\n  'sl-SI': /^[0-9A-ZČĆĐŠŽ]+$/i,\n  'sk-SK': /^[0-9A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i,\n  'sr-RS@latin': /^[0-9A-ZČĆŽŠĐ]+$/i,\n  'sr-RS': /^[0-9А-ЯЂЈЉЊЋЏ]+$/i,\n  'sv-SE': /^[0-9A-ZÅÄÖ]+$/i,\n  'th-TH': /^[ก-๙\\s]+$/i,\n  'tr-TR': /^[0-9A-ZÇĞİıÖŞÜ]+$/i,\n  'uk-UA': /^[0-9А-ЩЬЮЯЄIЇҐі]+$/i,\n  'ko-KR': /^[0-9ㄱ-ㅎㅏ-ㅣ가-힣]*$/,\n  'ku-IQ': /^[٠١٢٣٤٥٦٧٨٩0-9ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i,\n  'vi-VN': /^[0-9A-ZÀÁẠẢÃÂẦẤẬẨẪĂẰẮẶẲẴĐÈÉẸẺẼÊỀẾỆỂỄÌÍỊỈĨÒÓỌỎÕÔỒỐỘỔỖƠỜỚỢỞỠÙÚỤỦŨƯỪỨỰỬỮỲÝỴỶỸ]+$/i,\n  ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/,\n  he: /^[0-9א-ת]+$/,\n  fa: /^['0-9آاءأؤئبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهةی۱۲۳۴۵۶۷۸۹۰']+$/i,\n  bn: /^['ঀঁংঃঅআইঈউঊঋঌএঐওঔকখগঘঙচছজঝঞটঠডঢণতথদধনপফবভমযরলশষসহ়ঽািীুূৃৄেৈোৌ্ৎৗড়ঢ়য়ৠৡৢৣ০১২৩৪৫৬৭৮৯ৰৱ৲৳৴৵৶৷৸৹৺৻']+$/,\n  eo: /^[0-9ABCĈD-GĜHĤIJĴK-PRSŜTUŬVZ]+$/i,\n  'hi-IN': /^[\\u0900-\\u0963]+[\\u0966-\\u097F]*$/i,\n  'si-LK': /^[0-9\\u0D80-\\u0DFF]+$/\n};\nvar decimal = exports.decimal = {\n  'en-US': '.',\n  ar: '٫'\n};\nvar englishLocales = exports.englishLocales = ['AU', 'GB', 'HK', 'IN', 'NZ', 'ZA', 'ZM'];\nfor (var locale, i = 0; i < englishLocales.length; i++) {\n  locale = \"en-\".concat(englishLocales[i]);\n  alpha[locale] = alpha['en-US'];\n  alphanumeric[locale] = alphanumeric['en-US'];\n  decimal[locale] = decimal['en-US'];\n}\n\n// Source: http://www.localeplanet.com/java/\nvar arabicLocales = exports.arabicLocales = ['AE', 'BH', 'DZ', 'EG', 'IQ', 'JO', 'KW', 'LB', 'LY', 'MA', 'QM', 'QA', 'SA', 'SD', 'SY', 'TN', 'YE'];\nfor (var _locale, _i = 0; _i < arabicLocales.length; _i++) {\n  _locale = \"ar-\".concat(arabicLocales[_i]);\n  alpha[_locale] = alpha.ar;\n  alphanumeric[_locale] = alphanumeric.ar;\n  decimal[_locale] = decimal.ar;\n}\nvar farsiLocales = exports.farsiLocales = ['IR', 'AF'];\nfor (var _locale2, _i2 = 0; _i2 < farsiLocales.length; _i2++) {\n  _locale2 = \"fa-\".concat(farsiLocales[_i2]);\n  alphanumeric[_locale2] = alphanumeric.fa;\n  decimal[_locale2] = decimal.ar;\n}\nvar bengaliLocales = exports.bengaliLocales = ['BD', 'IN'];\nfor (var _locale3, _i3 = 0; _i3 < bengaliLocales.length; _i3++) {\n  _locale3 = \"bn-\".concat(bengaliLocales[_i3]);\n  alpha[_locale3] = alpha.bn;\n  alphanumeric[_locale3] = alphanumeric.bn;\n  decimal[_locale3] = decimal['en-US'];\n}\n\n// Source: https://en.wikipedia.org/wiki/Decimal_mark\nvar dotDecimal = exports.dotDecimal = ['ar-EG', 'ar-LB', 'ar-LY'];\nvar commaDecimal = exports.commaDecimal = ['bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-ZM', 'eo', 'es-ES', 'fr-CA', 'fr-FR', 'id-ID', 'it-IT', 'ku-IQ', 'hi-IN', 'hu-HU', 'nb-NO', 'nn-NO', 'nl-NL', 'pl-PL', 'pt-PT', 'ru-RU', 'kk-KZ', 'si-LK', 'sl-SI', 'sr-RS@latin', 'sr-RS', 'sv-SE', 'tr-TR', 'uk-UA', 'vi-VN'];\nfor (var _i4 = 0; _i4 < dotDecimal.length; _i4++) {\n  decimal[dotDecimal[_i4]] = decimal['en-US'];\n}\nfor (var _i5 = 0; _i5 < commaDecimal.length; _i5++) {\n  decimal[commaDecimal[_i5]] = ',';\n}\nalpha['fr-CA'] = alpha['fr-FR'];\nalphanumeric['fr-CA'] = alphanumeric['fr-FR'];\nalpha['pt-BR'] = alpha['pt-PT'];\nalphanumeric['pt-BR'] = alphanumeric['pt-PT'];\ndecimal['pt-BR'] = decimal['pt-PT'];\n\n// see #862\nalpha['pl-Pl'] = alpha['pl-PL'];\nalphanumeric['pl-Pl'] = alphanumeric['pl-PL'];\ndecimal['pl-Pl'] = decimal['pl-PL'];\n\n// see #1455\nalpha['fa-AF'] = alpha.fa;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = assertString;\nfunction assertString(input) {\n  if (input === undefined || input === null) throw new TypeError(\"Expected a string but received a \".concat(input));\n  if (input.constructor.name !== 'String') throw new TypeError(\"Expected a string but received a \".concat(input.constructor.name));\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ScriptCodes = void 0;\nexports.default = isISO15924;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// from https://www.unicode.org/iso15924/iso15924-codes.html\nvar validISO15924Codes = new Set(['Adlm', 'Afak', 'Aghb', 'Ahom', 'Arab', 'Aran', 'Armi', 'Armn', 'Avst', 'Bali', 'Bamu', 'Bass', 'Batk', 'Beng', 'Bhks', 'Blis', 'Bopo', 'Brah', 'Brai', 'Bugi', 'Buhd', 'Cakm', 'Cans', 'Cari', 'Cham', 'Cher', 'Chis', 'Chrs', 'Cirt', 'Copt', 'Cpmn', 'Cprt', 'Cyrl', 'Cyrs', 'Deva', 'Diak', 'Dogr', 'Dsrt', 'Dupl', 'Egyd', 'Egyh', 'Egyp', 'Elba', 'Elym', 'Ethi', 'Gara', 'Geok', 'Geor', 'Glag', 'Gong', 'Gonm', 'Goth', 'Gran', 'Grek', 'Gujr', 'Gukh', 'Guru', 'Hanb', 'Hang', 'Hani', 'Hano', 'Hans', 'Hant', 'Hatr', 'Hebr', 'Hira', 'Hluw', 'Hmng', 'Hmnp', 'Hrkt', 'Hung', 'Inds', 'Ital', 'Jamo', 'Java', 'Jpan', 'Jurc', 'Kali', 'Kana', 'Kawi', 'Khar', 'Khmr', 'Khoj', 'Kitl', 'Kits', 'Knda', 'Kore', 'Kpel', 'Krai', 'Kthi', 'Lana', 'Laoo', 'Latf', 'Latg', 'Latn', 'Leke', 'Lepc', 'Limb', 'Lina', 'Linb', 'Lisu', 'Loma', 'Lyci', 'Lydi', 'Mahj', 'Maka', 'Mand', 'Mani', 'Marc', 'Maya', 'Medf', 'Mend', 'Merc', 'Mero', 'Mlym', 'Modi', 'Mong', 'Moon', 'Mroo', 'Mtei', 'Mult', 'Mymr', 'Nagm', 'Nand', 'Narb', 'Nbat', 'Newa', 'Nkdb', 'Nkgb', 'Nkoo', 'Nshu', 'Ogam', 'Olck', 'Onao', 'Orkh', 'Orya', 'Osge', 'Osma', 'Ougr', 'Palm', 'Pauc', 'Pcun', 'Pelm', 'Perm', 'Phag', 'Phli', 'Phlp', 'Phlv', 'Phnx', 'Plrd', 'Piqd', 'Prti', 'Psin', 'Qaaa', 'Qaab', 'Qaac', 'Qaad', 'Qaae', 'Qaaf', 'Qaag', 'Qaah', 'Qaai', 'Qaaj', 'Qaak', 'Qaal', 'Qaam', 'Qaan', 'Qaao', 'Qaap', 'Qaaq', 'Qaar', 'Qaas', 'Qaat', 'Qaau', 'Qaav', 'Qaaw', 'Qaax', 'Qaay', 'Qaaz', 'Qaba', 'Qabb', 'Qabc', 'Qabd', 'Qabe', 'Qabf', 'Qabg', 'Qabh', 'Qabi', 'Qabj', 'Qabk', 'Qabl', 'Qabm', 'Qabn', 'Qabo', 'Qabp', 'Qabq', 'Qabr', 'Qabs', 'Qabt', 'Qabu', 'Qabv', 'Qabw', 'Qabx', 'Ranj', 'Rjng', 'Rohg', 'Roro', 'Runr', 'Samr', 'Sara', 'Sarb', 'Saur', 'Sgnw', 'Shaw', 'Shrd', 'Shui', 'Sidd', 'Sidt', 'Sind', 'Sinh', 'Sogd', 'Sogo', 'Sora', 'Soyo', 'Sund', 'Sunu', 'Sylo', 'Syrc', 'Syre', 'Syrj', 'Syrn', 'Tagb', 'Takr', 'Tale', 'Talu', 'Taml', 'Tang', 'Tavt', 'Tayo', 'Telu', 'Teng', 'Tfng', 'Tglg', 'Thaa', 'Thai', 'Tibt', 'Tirh', 'Tnsa', 'Todr', 'Tols', 'Toto', 'Tutg', 'Ugar', 'Vaii', 'Visp', 'Vith', 'Wara', 'Wcho', 'Wole', 'Xpeo', 'Xsux', 'Yezi', 'Yiii', 'Zanb', 'Zinh', 'Zmth', 'Zsye', 'Zsym', 'Zxxx', 'Zyyy', 'Zzzz']);\nfunction isISO15924(str) {\n  (0, _assertString.default)(str);\n  return validISO15924Codes.has(str);\n}\nvar ScriptCodes = exports.ScriptCodes = validISO15924Codes;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isPassportNumber;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/**\n * Reference:\n * https://en.wikipedia.org/ -- Wikipedia\n * https://docs.microsoft.com/en-us/microsoft-365/compliance/eu-passport-number -- EU Passport Number\n * https://countrycode.org/ -- Country Codes\n */\nvar passportRegexByCountryCode = {\n  AM: /^[A-Z]{2}\\d{7}$/,\n  // ARMENIA\n  AR: /^[A-Z]{3}\\d{6}$/,\n  // ARGENTINA\n  AT: /^[A-Z]\\d{7}$/,\n  // AUSTRIA\n  AU: /^[A-Z]\\d{7}$/,\n  // AUSTRALIA\n  AZ: /^[A-Z]{1}\\d{8}$/,\n  // AZERBAIJAN\n  BE: /^[A-Z]{2}\\d{6}$/,\n  // BELGIUM\n  BG: /^\\d{9}$/,\n  // BULGARIA\n  BR: /^[A-Z]{2}\\d{6}$/,\n  // BRAZIL\n  BY: /^[A-Z]{2}\\d{7}$/,\n  // BELARUS\n  CA: /^[A-Z]{2}\\d{6}$|^[A-Z]\\d{6}[A-Z]{2}$/,\n  // CANADA\n  CH: /^[A-Z]\\d{7}$/,\n  // SWITZERLAND\n  CN: /^G\\d{8}$|^E(?![IO])[A-Z0-9]\\d{7}$/,\n  // CHINA [G=Ordinary, E=Electronic] followed by 8-digits, or E followed by any UPPERCASE letter (except I and O) followed by 7 digits\n  CY: /^[A-Z](\\d{6}|\\d{8})$/,\n  // CYPRUS\n  CZ: /^\\d{8}$/,\n  // CZECH REPUBLIC\n  DE: /^[CFGHJKLMNPRTVWXYZ0-9]{9}$/,\n  // GERMANY\n  DK: /^\\d{9}$/,\n  // DENMARK\n  DZ: /^\\d{9}$/,\n  // ALGERIA\n  EE: /^([A-Z]\\d{7}|[A-Z]{2}\\d{7})$/,\n  // ESTONIA (K followed by 7-digits), e-passports have 2 UPPERCASE followed by 7 digits\n  ES: /^[A-Z0-9]{2}([A-Z0-9]?)\\d{6}$/,\n  // SPAIN\n  FI: /^[A-Z]{2}\\d{7}$/,\n  // FINLAND\n  FR: /^\\d{2}[A-Z]{2}\\d{5}$/,\n  // FRANCE\n  GB: /^\\d{9}$/,\n  // UNITED KINGDOM\n  GR: /^[A-Z]{2}\\d{7}$/,\n  // GREECE\n  HR: /^\\d{9}$/,\n  // CROATIA\n  HU: /^[A-Z]{2}(\\d{6}|\\d{7})$/,\n  // HUNGARY\n  IE: /^[A-Z0-9]{2}\\d{7}$/,\n  // IRELAND\n  IN: /^[A-Z]{1}-?\\d{7}$/,\n  // INDIA\n  ID: /^[A-C]\\d{7}$/,\n  // INDONESIA\n  IR: /^[A-Z]\\d{8}$/,\n  // IRAN\n  IS: /^(A)\\d{7}$/,\n  // ICELAND\n  IT: /^[A-Z0-9]{2}\\d{7}$/,\n  // ITALY\n  JM: /^[Aa]\\d{7}$/,\n  // JAMAICA\n  JP: /^[A-Z]{2}\\d{7}$/,\n  // JAPAN\n  KR: /^[MS]\\d{8}$/,\n  // SOUTH KOREA, REPUBLIC OF KOREA, [S=PS Passports, M=PM Passports]\n  KZ: /^[a-zA-Z]\\d{7}$/,\n  // KAZAKHSTAN\n  LI: /^[a-zA-Z]\\d{5}$/,\n  // LIECHTENSTEIN\n  LT: /^[A-Z0-9]{8}$/,\n  // LITHUANIA\n  LU: /^[A-Z0-9]{8}$/,\n  // LUXEMBURG\n  LV: /^[A-Z0-9]{2}\\d{7}$/,\n  // LATVIA\n  LY: /^[A-Z0-9]{8}$/,\n  // LIBYA\n  MT: /^\\d{7}$/,\n  // MALTA\n  MZ: /^([A-Z]{2}\\d{7})|(\\d{2}[A-Z]{2}\\d{5})$/,\n  // MOZAMBIQUE\n  MY: /^[AHK]\\d{8}$/,\n  // MALAYSIA\n  MX: /^\\d{10,11}$/,\n  // MEXICO\n  NL: /^[A-Z]{2}[A-Z0-9]{6}\\d$/,\n  // NETHERLANDS\n  NZ: /^([Ll]([Aa]|[Dd]|[Ff]|[Hh])|[Ee]([Aa]|[Pp])|[Nn])\\d{6}$/,\n  // NEW ZEALAND\n  PH: /^([A-Z](\\d{6}|\\d{7}[A-Z]))|([A-Z]{2}(\\d{6}|\\d{7}))$/,\n  // PHILIPPINES\n  PK: /^[A-Z]{2}\\d{7}$/,\n  // PAKISTAN\n  PL: /^[A-Z]{2}\\d{7}$/,\n  // POLAND\n  PT: /^[A-Z]\\d{6}$/,\n  // PORTUGAL\n  RO: /^\\d{8,9}$/,\n  // ROMANIA\n  RU: /^\\d{9}$/,\n  // RUSSIAN FEDERATION\n  SE: /^\\d{8}$/,\n  // SWEDEN\n  SL: /^(P)[A-Z]\\d{7}$/,\n  // SLOVENIA\n  SK: /^[0-9A-Z]\\d{7}$/,\n  // SLOVAKIA\n  TH: /^[A-Z]{1,2}\\d{6,7}$/,\n  // THAILAND\n  TR: /^[A-Z]\\d{8}$/,\n  // TURKEY\n  UA: /^[A-Z]{2}\\d{6}$/,\n  // UKRAINE\n  US: /^\\d{9}$|^[A-Z]\\d{8}$/,\n  // UNITED STATES\n  ZA: /^[TAMD]\\d{8}$/ // SOUTH AFRICA\n};\nvar locales = exports.locales = Object.keys(passportRegexByCountryCode);\n\n/**\n * Check if str is a valid passport number\n * relative to provided ISO Country Code.\n *\n * @param {string} str\n * @param {string} countryCode\n * @return {boolean}\n */\nfunction isPassportNumber(str, countryCode) {\n  (0, _assertString.default)(str);\n  /** Remove All Whitespaces, Convert to UPPERCASE */\n  var normalizedStr = str.replace(/\\s/g, '').toUpperCase();\n  return countryCode.toUpperCase() in passportRegexByCountryCode && passportRegexByCountryCode[countryCode].test(normalizedStr);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isSurrogatePair;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar surrogatePair = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/;\nfunction isSurrogatePair(str) {\n  (0, _assertString.default)(str);\n  return surrogatePair.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isDataURI;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar validMediaType = /^[a-z]+\\/[a-z0-9\\-\\+\\._]+$/i;\nvar validAttribute = /^[a-z\\-]+=[a-z0-9\\-]+$/i;\nvar validData = /^[a-z0-9!\\$&'\\(\\)\\*\\+,;=\\-\\._~:@\\/\\?%\\s]*$/i;\nfunction isDataURI(str) {\n  (0, _assertString.default)(str);\n  var data = str.split(',');\n  if (data.length < 2) {\n    return false;\n  }\n  var attributes = data.shift().trim().split(';');\n  var schemeAndMediaType = attributes.shift();\n  if (schemeAndMediaType.slice(0, 5) !== 'data:') {\n    return false;\n  }\n  var mediaType = schemeAndMediaType.slice(5);\n  if (mediaType !== '' && !validMediaType.test(mediaType)) {\n    return false;\n  }\n  for (var i = 0; i < attributes.length; i++) {\n    if (!(i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') && !validAttribute.test(attributes[i])) {\n      return false;\n    }\n  }\n  for (var _i = 0; _i < data.length; _i++) {\n    if (!validData.test(data[_i])) {\n      return false;\n    }\n  }\n  return true;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLuhnNumber;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isLuhnNumber(str) {\n  (0, _assertString.default)(str);\n  var sanitized = str.replace(/[- ]+/g, '');\n  var sum = 0;\n  var digit;\n  var tmpNum;\n  var shouldDouble;\n  for (var i = sanitized.length - 1; i >= 0; i--) {\n    digit = sanitized.substring(i, i + 1);\n    tmpNum = parseInt(digit, 10);\n    if (shouldDouble) {\n      tmpNum *= 2;\n      if (tmpNum >= 10) {\n        sum += tmpNum % 10 + 1;\n      } else {\n        sum += tmpNum;\n      }\n    } else {\n      sum += tmpNum;\n    }\n    shouldDouble = !shouldDouble;\n  }\n  return !!(sum % 10 === 0 ? sanitized : false);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = merge;\nfunction merge() {\n  var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var defaults = arguments.length > 1 ? arguments[1] : undefined;\n  for (var key in defaults) {\n    if (typeof obj[key] === 'undefined') {\n      obj[key] = defaults[key];\n    }\n  }\n  return obj;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isIBAN;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _includesArray = _interopRequireDefault(require(\"./util/includesArray\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/**\n * List of country codes with\n * corresponding IBAN regular expression\n * Reference: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n */\nvar ibanRegexThroughCountryCode = {\n  AD: /^(AD[0-9]{2})\\d{8}[A-Z0-9]{12}$/,\n  AE: /^(AE[0-9]{2})\\d{3}\\d{16}$/,\n  AL: /^(AL[0-9]{2})\\d{8}[A-Z0-9]{16}$/,\n  AT: /^(AT[0-9]{2})\\d{16}$/,\n  AZ: /^(AZ[0-9]{2})[A-Z0-9]{4}\\d{20}$/,\n  BA: /^(BA[0-9]{2})\\d{16}$/,\n  BE: /^(BE[0-9]{2})\\d{12}$/,\n  BG: /^(BG[0-9]{2})[A-Z]{4}\\d{6}[A-Z0-9]{8}$/,\n  BH: /^(BH[0-9]{2})[A-Z]{4}[A-Z0-9]{14}$/,\n  BR: /^(BR[0-9]{2})\\d{23}[A-Z]{1}[A-Z0-9]{1}$/,\n  BY: /^(BY[0-9]{2})[A-Z0-9]{4}\\d{20}$/,\n  CH: /^(CH[0-9]{2})\\d{5}[A-Z0-9]{12}$/,\n  CR: /^(CR[0-9]{2})\\d{18}$/,\n  CY: /^(CY[0-9]{2})\\d{8}[A-Z0-9]{16}$/,\n  CZ: /^(CZ[0-9]{2})\\d{20}$/,\n  DE: /^(DE[0-9]{2})\\d{18}$/,\n  DK: /^(DK[0-9]{2})\\d{14}$/,\n  DO: /^(DO[0-9]{2})[A-Z]{4}\\d{20}$/,\n  DZ: /^(DZ\\d{24})$/,\n  EE: /^(EE[0-9]{2})\\d{16}$/,\n  EG: /^(EG[0-9]{2})\\d{25}$/,\n  ES: /^(ES[0-9]{2})\\d{20}$/,\n  FI: /^(FI[0-9]{2})\\d{14}$/,\n  FO: /^(FO[0-9]{2})\\d{14}$/,\n  FR: /^(FR[0-9]{2})\\d{10}[A-Z0-9]{11}\\d{2}$/,\n  GB: /^(GB[0-9]{2})[A-Z]{4}\\d{14}$/,\n  GE: /^(GE[0-9]{2})[A-Z0-9]{2}\\d{16}$/,\n  GI: /^(GI[0-9]{2})[A-Z]{4}[A-Z0-9]{15}$/,\n  GL: /^(GL[0-9]{2})\\d{14}$/,\n  GR: /^(GR[0-9]{2})\\d{7}[A-Z0-9]{16}$/,\n  GT: /^(GT[0-9]{2})[A-Z0-9]{4}[A-Z0-9]{20}$/,\n  HR: /^(HR[0-9]{2})\\d{17}$/,\n  HU: /^(HU[0-9]{2})\\d{24}$/,\n  IE: /^(IE[0-9]{2})[A-Z]{4}\\d{14}$/,\n  IL: /^(IL[0-9]{2})\\d{19}$/,\n  IQ: /^(IQ[0-9]{2})[A-Z]{4}\\d{15}$/,\n  IR: /^(IR[0-9]{2})0\\d{2}0\\d{18}$/,\n  IS: /^(IS[0-9]{2})\\d{22}$/,\n  IT: /^(IT[0-9]{2})[A-Z]{1}\\d{10}[A-Z0-9]{12}$/,\n  JO: /^(JO[0-9]{2})[A-Z]{4}\\d{22}$/,\n  KW: /^(KW[0-9]{2})[A-Z]{4}[A-Z0-9]{22}$/,\n  KZ: /^(KZ[0-9]{2})\\d{3}[A-Z0-9]{13}$/,\n  LB: /^(LB[0-9]{2})\\d{4}[A-Z0-9]{20}$/,\n  LC: /^(LC[0-9]{2})[A-Z]{4}[A-Z0-9]{24}$/,\n  LI: /^(LI[0-9]{2})\\d{5}[A-Z0-9]{12}$/,\n  LT: /^(LT[0-9]{2})\\d{16}$/,\n  LU: /^(LU[0-9]{2})\\d{3}[A-Z0-9]{13}$/,\n  LV: /^(LV[0-9]{2})[A-Z]{4}[A-Z0-9]{13}$/,\n  MA: /^(MA[0-9]{26})$/,\n  MC: /^(MC[0-9]{2})\\d{10}[A-Z0-9]{11}\\d{2}$/,\n  MD: /^(MD[0-9]{2})[A-Z0-9]{20}$/,\n  ME: /^(ME[0-9]{2})\\d{18}$/,\n  MK: /^(MK[0-9]{2})\\d{3}[A-Z0-9]{10}\\d{2}$/,\n  MR: /^(MR[0-9]{2})\\d{23}$/,\n  MT: /^(MT[0-9]{2})[A-Z]{4}\\d{5}[A-Z0-9]{18}$/,\n  MU: /^(MU[0-9]{2})[A-Z]{4}\\d{19}[A-Z]{3}$/,\n  MZ: /^(MZ[0-9]{2})\\d{21}$/,\n  NL: /^(NL[0-9]{2})[A-Z]{4}\\d{10}$/,\n  NO: /^(NO[0-9]{2})\\d{11}$/,\n  PK: /^(PK[0-9]{2})[A-Z0-9]{4}\\d{16}$/,\n  PL: /^(PL[0-9]{2})\\d{24}$/,\n  PS: /^(PS[0-9]{2})[A-Z]{4}[A-Z0-9]{21}$/,\n  PT: /^(PT[0-9]{2})\\d{21}$/,\n  QA: /^(QA[0-9]{2})[A-Z]{4}[A-Z0-9]{21}$/,\n  RO: /^(RO[0-9]{2})[A-Z]{4}[A-Z0-9]{16}$/,\n  RS: /^(RS[0-9]{2})\\d{18}$/,\n  SA: /^(SA[0-9]{2})\\d{2}[A-Z0-9]{18}$/,\n  SC: /^(SC[0-9]{2})[A-Z]{4}\\d{20}[A-Z]{3}$/,\n  SE: /^(SE[0-9]{2})\\d{20}$/,\n  SI: /^(SI[0-9]{2})\\d{15}$/,\n  SK: /^(SK[0-9]{2})\\d{20}$/,\n  SM: /^(SM[0-9]{2})[A-Z]{1}\\d{10}[A-Z0-9]{12}$/,\n  SV: /^(SV[0-9]{2})[A-Z0-9]{4}\\d{20}$/,\n  TL: /^(TL[0-9]{2})\\d{19}$/,\n  TN: /^(TN[0-9]{2})\\d{20}$/,\n  TR: /^(TR[0-9]{2})\\d{5}[A-Z0-9]{17}$/,\n  UA: /^(UA[0-9]{2})\\d{6}[A-Z0-9]{19}$/,\n  VA: /^(VA[0-9]{2})\\d{18}$/,\n  VG: /^(VG[0-9]{2})[A-Z]{4}\\d{16}$/,\n  XK: /^(XK[0-9]{2})\\d{16}$/\n};\n\n/**\n * Check if the country codes passed are valid using the\n * ibanRegexThroughCountryCode as a reference\n *\n * @param {array} countryCodeArray\n * @return {boolean}\n */\n\nfunction hasOnlyValidCountryCodes(countryCodeArray) {\n  var countryCodeArrayFilteredWithObjectIbanCode = countryCodeArray.filter(function (countryCode) {\n    return !(countryCode in ibanRegexThroughCountryCode);\n  });\n  if (countryCodeArrayFilteredWithObjectIbanCode.length > 0) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * Check whether string has correct universal IBAN format\n * The IBAN consists of up to 34 alphanumeric characters, as follows:\n * Country Code using ISO 3166-1 alpha-2, two letters\n * check digits, two digits and\n * Basic Bank Account Number (BBAN), up to 30 alphanumeric characters.\n * NOTE: Permitted IBAN characters are: digits [0-9] and the 26 latin alphabetic [A-Z]\n *\n * @param {string} str - string under validation\n * @param {object} options - object to pass the countries to be either whitelisted or blacklisted\n * @return {boolean}\n */\nfunction hasValidIbanFormat(str, options) {\n  // Strip white spaces and hyphens\n  var strippedStr = str.replace(/[\\s\\-]+/gi, '').toUpperCase();\n  var isoCountryCode = strippedStr.slice(0, 2).toUpperCase();\n  var isoCountryCodeInIbanRegexCodeObject = isoCountryCode in ibanRegexThroughCountryCode;\n  if (options.whitelist) {\n    if (!hasOnlyValidCountryCodes(options.whitelist)) {\n      return false;\n    }\n    var isoCountryCodeInWhiteList = (0, _includesArray.default)(options.whitelist, isoCountryCode);\n    if (!isoCountryCodeInWhiteList) {\n      return false;\n    }\n  }\n  if (options.blacklist) {\n    var isoCountryCodeInBlackList = (0, _includesArray.default)(options.blacklist, isoCountryCode);\n    if (isoCountryCodeInBlackList) {\n      return false;\n    }\n  }\n  return isoCountryCodeInIbanRegexCodeObject && ibanRegexThroughCountryCode[isoCountryCode].test(strippedStr);\n}\n\n/**\n   * Check whether string has valid IBAN Checksum\n   * by performing basic mod-97 operation and\n   * the remainder should equal 1\n   * -- Start by rearranging the IBAN by moving the four initial characters to the end of the string\n   * -- Replace each letter in the string with two digits, A -> 10, B = 11, Z = 35\n   * -- Interpret the string as a decimal integer and\n   * -- compute the remainder on division by 97 (mod 97)\n   * Reference: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n   *\n   * @param {string} str\n   * @return {boolean}\n   */\nfunction hasValidIbanChecksum(str) {\n  var strippedStr = str.replace(/[^A-Z0-9]+/gi, '').toUpperCase(); // Keep only digits and A-Z latin alphabetic\n  var rearranged = strippedStr.slice(4) + strippedStr.slice(0, 4);\n  var alphaCapsReplacedWithDigits = rearranged.replace(/[A-Z]/g, function (char) {\n    return char.charCodeAt(0) - 55;\n  });\n  var remainder = alphaCapsReplacedWithDigits.match(/\\d{1,7}/g).reduce(function (acc, value) {\n    return Number(acc + value) % 97;\n  }, '');\n  return remainder === 1;\n}\nfunction isIBAN(str) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  (0, _assertString.default)(str);\n  return hasValidIbanFormat(str, options) && hasValidIbanChecksum(str);\n}\nvar locales = exports.locales = Object.keys(ibanRegexThroughCountryCode);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isDivisibleBy;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _toFloat = _interopRequireDefault(require(\"./toFloat\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isDivisibleBy(str, num) {\n  (0, _assertString.default)(str);\n  return (0, _toFloat.default)(str) % parseInt(num, 10) === 0;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toDate;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction toDate(date) {\n  (0, _assertString.default)(date);\n  date = Date.parse(date);\n  return !isNaN(date) ? new Date(date) : null;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISO31661Alpha3;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3\nvar validISO31661Alpha3CountriesCodes = new Set(['AFG', 'ALA', 'ALB', 'DZA', 'ASM', 'AND', 'AGO', 'AIA', 'ATA', 'ATG', 'ARG', 'ARM', 'ABW', 'AUS', 'AUT', 'AZE', 'BHS', 'BHR', 'BGD', 'BRB', 'BLR', 'BEL', 'BLZ', 'BEN', 'BMU', 'BTN', 'BOL', 'BES', 'BIH', 'BWA', 'BVT', 'BRA', 'IOT', 'BRN', 'BGR', 'BFA', 'BDI', 'KHM', 'CMR', 'CAN', 'CPV', 'CYM', 'CAF', 'TCD', 'CHL', 'CHN', 'CXR', 'CCK', 'COL', 'COM', 'COG', 'COD', 'COK', 'CRI', 'CIV', 'HRV', 'CUB', 'CUW', 'CYP', 'CZE', 'DNK', 'DJI', 'DMA', 'DOM', 'ECU', 'EGY', 'SLV', 'GNQ', 'ERI', 'EST', 'ETH', 'FLK', 'FRO', 'FJI', 'FIN', 'FRA', 'GUF', 'PYF', 'ATF', 'GAB', 'GMB', 'GEO', 'DEU', 'GHA', 'GIB', 'GRC', 'GRL', 'GRD', 'GLP', 'GUM', 'GTM', 'GGY', 'GIN', 'GNB', 'GUY', 'HTI', 'HMD', 'VAT', 'HND', 'HKG', 'HUN', 'ISL', 'IND', 'IDN', 'IRN', 'IRQ', 'IRL', 'IMN', 'ISR', 'ITA', 'JAM', 'JPN', 'JEY', 'JOR', 'KAZ', 'KEN', 'KIR', 'PRK', 'KOR', 'KWT', 'KGZ', 'LAO', 'LVA', 'LBN', 'LSO', 'LBR', 'LBY', 'LIE', 'LTU', 'LUX', 'MAC', 'MKD', 'MDG', 'MWI', 'MYS', 'MDV', 'MLI', 'MLT', 'MHL', 'MTQ', 'MRT', 'MUS', 'MYT', 'MEX', 'FSM', 'MDA', 'MCO', 'MNG', 'MNE', 'MSR', 'MAR', 'MOZ', 'MMR', 'NAM', 'NRU', 'NPL', 'NLD', 'NCL', 'NZL', 'NIC', 'NER', 'NGA', 'NIU', 'NFK', 'MNP', 'NOR', 'OMN', 'PAK', 'PLW', 'PSE', 'PAN', 'PNG', 'PRY', 'PER', 'PHL', 'PCN', 'POL', 'PRT', 'PRI', 'QAT', 'REU', 'ROU', 'RUS', 'RWA', 'BLM', 'SHN', 'KNA', 'LCA', 'MAF', 'SPM', 'VCT', 'WSM', 'SMR', 'STP', 'SAU', 'SEN', 'SRB', 'SYC', 'SLE', 'SGP', 'SXM', 'SVK', 'SVN', 'SLB', 'SOM', 'ZAF', 'SGS', 'SSD', 'ESP', 'LKA', 'SDN', 'SUR', 'SJM', 'SWZ', 'SWE', 'CHE', 'SYR', 'TWN', 'TJK', 'TZA', 'THA', 'TLS', 'TGO', 'TKL', 'TON', 'TTO', 'TUN', 'TUR', 'TKM', 'TCA', 'TUV', 'UGA', 'UKR', 'ARE', 'GBR', 'USA', 'UMI', 'URY', 'UZB', 'VUT', 'VEN', 'VNM', 'VGB', 'VIR', 'WLF', 'ESH', 'YEM', 'ZMB', 'ZWE']);\nfunction isISO31661Alpha3(str) {\n  (0, _assertString.default)(str);\n  return validISO31661Alpha3CountriesCodes.has(str.toUpperCase());\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isPort;\nvar _isInt = _interopRequireDefault(require(\"./isInt\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isPort(str) {\n  return (0, _isInt.default)(str, {\n    allow_leading_zeroes: false,\n    min: 0,\n    max: 65535\n  });\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isPostalCode;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// common patterns\nvar threeDigit = /^\\d{3}$/;\nvar fourDigit = /^\\d{4}$/;\nvar fiveDigit = /^\\d{5}$/;\nvar sixDigit = /^\\d{6}$/;\nvar patterns = {\n  AD: /^AD\\d{3}$/,\n  AT: fourDigit,\n  AU: fourDigit,\n  AZ: /^AZ\\d{4}$/,\n  BA: /^([7-8]\\d{4}$)/,\n  BD: /^([1-8][0-9]{3}|9[0-4][0-9]{2})$/,\n  BE: fourDigit,\n  BG: fourDigit,\n  BR: /^\\d{5}-?\\d{3}$/,\n  BY: /^2[1-4]\\d{4}$/,\n  CA: /^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][\\s\\-]?\\d[ABCEGHJ-NPRSTV-Z]\\d$/i,\n  CH: fourDigit,\n  CN: /^(0[1-7]|1[012356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[1-5]|8[1345]|9[09])\\d{4}$/,\n  CO: /^(05|08|11|13|15|17|18|19|20|23|25|27|41|44|47|50|52|54|63|66|68|70|73|76|81|85|86|88|91|94|95|97|99)(\\d{4})$/,\n  CZ: /^\\d{3}\\s?\\d{2}$/,\n  DE: fiveDigit,\n  DK: fourDigit,\n  DO: fiveDigit,\n  DZ: fiveDigit,\n  EE: fiveDigit,\n  ES: /^(5[0-2]{1}|[0-4]{1}\\d{1})\\d{3}$/,\n  FI: fiveDigit,\n  FR: /^(?:(?:0[1-9]|[1-8]\\d|9[0-5])\\d{3}|97[1-46]\\d{2})$/,\n  GB: /^(gir\\s?0aa|[a-z]{1,2}\\d[\\da-z]?\\s?(\\d[a-z]{2})?)$/i,\n  GR: /^\\d{3}\\s?\\d{2}$/,\n  HR: /^([1-5]\\d{4}$)/,\n  HT: /^HT\\d{4}$/,\n  HU: fourDigit,\n  ID: fiveDigit,\n  IE: /^(?!.*(?:o))[A-Za-z]\\d[\\dw]\\s\\w{4}$/i,\n  IL: /^(\\d{5}|\\d{7})$/,\n  IN: /^((?!10|29|35|54|55|65|66|86|87|88|89)[1-9][0-9]{5})$/,\n  IR: /^(?!(\\d)\\1{3})[13-9]{4}[1346-9][013-9]{5}$/,\n  IS: threeDigit,\n  IT: fiveDigit,\n  JP: /^\\d{3}\\-\\d{4}$/,\n  KE: fiveDigit,\n  KR: /^(\\d{5}|\\d{6})$/,\n  LI: /^(948[5-9]|949[0-7])$/,\n  LT: /^LT\\-\\d{5}$/,\n  LU: fourDigit,\n  LV: /^LV\\-\\d{4}$/,\n  LK: fiveDigit,\n  MG: threeDigit,\n  MX: fiveDigit,\n  MT: /^[A-Za-z]{3}\\s{0,1}\\d{4}$/,\n  MY: fiveDigit,\n  NL: /^[1-9]\\d{3}\\s?(?!sa|sd|ss)[a-z]{2}$/i,\n  NO: fourDigit,\n  NP: /^(10|21|22|32|33|34|44|45|56|57)\\d{3}$|^(977)$/i,\n  NZ: fourDigit,\n  // https://www.pakpost.gov.pk/postcodes.php\n  PK: fiveDigit,\n  PL: /^\\d{2}\\-\\d{3}$/,\n  PR: /^00[679]\\d{2}([ -]\\d{4})?$/,\n  PT: /^\\d{4}\\-\\d{3}?$/,\n  RO: sixDigit,\n  RU: sixDigit,\n  SA: fiveDigit,\n  SE: /^[1-9]\\d{2}\\s?\\d{2}$/,\n  SG: sixDigit,\n  SI: fourDigit,\n  SK: /^\\d{3}\\s?\\d{2}$/,\n  TH: fiveDigit,\n  TN: fourDigit,\n  TW: /^\\d{3}(\\d{2,3})?$/,\n  UA: fiveDigit,\n  US: /^\\d{5}(-\\d{4})?$/,\n  ZA: fourDigit,\n  ZM: fiveDigit\n};\nvar locales = exports.locales = Object.keys(patterns);\nfunction isPostalCode(str, locale) {\n  (0, _assertString.default)(str);\n  if (locale in patterns) {\n    return patterns[locale].test(str);\n  } else if (locale === 'any') {\n    for (var key in patterns) {\n      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes\n      // istanbul ignore else\n      if (patterns.hasOwnProperty(key)) {\n        var pattern = patterns[key];\n        if (pattern.test(str)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isHash;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar lengths = {\n  md5: 32,\n  md4: 32,\n  sha1: 40,\n  sha256: 64,\n  sha384: 96,\n  sha512: 128,\n  ripemd128: 32,\n  ripemd160: 40,\n  tiger128: 32,\n  tiger160: 40,\n  tiger192: 48,\n  crc32: 8,\n  crc32b: 8\n};\nfunction isHash(str, algorithm) {\n  (0, _assertString.default)(str);\n  var hash = new RegExp(\"^[a-fA-F0-9]{\".concat(lengths[algorithm], \"}$\"));\n  return hash.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isAscii;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/* eslint-disable no-control-regex */\nvar ascii = /^[\\x00-\\x7F]+$/;\n/* eslint-enable no-control-regex */\n\nfunction isAscii(str) {\n  (0, _assertString.default)(str);\n  return ascii.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isAbaRouting;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// http://www.brainjar.com/js/validation/\n// https://www.aba.com/news-research/research-analysis/routing-number-policy-procedures\n// series reserved for future use are excluded\nvar isRoutingReg = /^(?!(1[3-9])|(20)|(3[3-9])|(4[0-9])|(5[0-9])|(60)|(7[3-9])|(8[1-9])|(9[0-2])|(9[3-9]))[0-9]{9}$/;\nfunction isAbaRouting(str) {\n  (0, _assertString.default)(str);\n  if (!isRoutingReg.test(str)) return false;\n  var checkSumVal = 0;\n  for (var i = 0; i < str.length; i++) {\n    if (i % 3 === 0) checkSumVal += str[i] * 3;else if (i % 3 === 1) checkSumVal += str[i] * 7;else checkSumVal += str[i] * 1;\n  }\n  return checkSumVal % 10 === 0;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMimeType;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/*\n  Checks if the provided string matches to a correct Media type format (MIME type)\n\n  This function only checks is the string format follows the\n  established rules by the according RFC specifications.\n  This function supports 'charset' in textual media types\n  (https://tools.ietf.org/html/rfc6657).\n\n  This function does not check against all the media types listed\n  by the IANA (https://www.iana.org/assignments/media-types/media-types.xhtml)\n  because of lightness purposes : it would require to include\n  all these MIME types in this library, which would weigh it\n  significantly. This kind of effort maybe is not worth for the use that\n  this function has in this entire library.\n\n  More information in the RFC specifications :\n  - https://tools.ietf.org/html/rfc2045\n  - https://tools.ietf.org/html/rfc2046\n  - https://tools.ietf.org/html/rfc7231#section-3.1.1.1\n  - https://tools.ietf.org/html/rfc7231#section-3.1.1.5\n*/\n\n// Match simple MIME types\n// NB :\n//   Subtype length must not exceed 100 characters.\n//   This rule does not comply to the RFC specs (what is the max length ?).\nvar mimeTypeSimple = /^(application|audio|font|image|message|model|multipart|text|video)\\/[a-zA-Z0-9\\.\\-\\+_]{1,100}$/i; // eslint-disable-line max-len\n\n// Handle \"charset\" in \"text/*\"\nvar mimeTypeText = /^text\\/[a-zA-Z0-9\\.\\-\\+]{1,100};\\s?charset=(\"[a-zA-Z0-9\\.\\-\\+\\s]{0,70}\"|[a-zA-Z0-9\\.\\-\\+]{0,70})(\\s?\\([a-zA-Z0-9\\.\\-\\+\\s]{1,20}\\))?$/i; // eslint-disable-line max-len\n\n// Handle \"boundary\" in \"multipart/*\"\nvar mimeTypeMultipart = /^multipart\\/[a-zA-Z0-9\\.\\-\\+]{1,100}(;\\s?(boundary|charset)=(\"[a-zA-Z0-9\\.\\-\\+\\s]{0,70}\"|[a-zA-Z0-9\\.\\-\\+]{0,70})(\\s?\\([a-zA-Z0-9\\.\\-\\+\\s]{1,20}\\))?){0,2}$/i; // eslint-disable-line max-len\n\nfunction isMimeType(str) {\n  (0, _assertString.default)(str);\n  return mimeTypeSimple.test(str) || mimeTypeText.test(str) || mimeTypeMultipart.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar includes = function includes(str, val) {\n  return str.indexOf(val) !== -1;\n};\nvar _default = exports.default = includes;\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isHexColor;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar hexcolor = /^#?([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$/i;\nfunction isHexColor(str) {\n  (0, _assertString.default)(str);\n  return hexcolor.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.iso7064Check = iso7064Check;\nexports.luhnCheck = luhnCheck;\nexports.reverseMultiplyAndSum = reverseMultiplyAndSum;\nexports.verhoeffCheck = verhoeffCheck;\n/**\n * Algorithmic validation functions\n * May be used as is or implemented in the workflow of other validators.\n */\n\n/*\n * ISO 7064 validation function\n * Called with a string of numbers (incl. check digit)\n * to validate according to ISO 7064 (MOD 11, 10).\n */\nfunction iso7064Check(str) {\n  var checkvalue = 10;\n  for (var i = 0; i < str.length - 1; i++) {\n    checkvalue = (parseInt(str[i], 10) + checkvalue) % 10 === 0 ? 10 * 2 % 11 : (parseInt(str[i], 10) + checkvalue) % 10 * 2 % 11;\n  }\n  checkvalue = checkvalue === 1 ? 0 : 11 - checkvalue;\n  return checkvalue === parseInt(str[10], 10);\n}\n\n/*\n * Luhn (mod 10) validation function\n * Called with a string of numbers (incl. check digit)\n * to validate according to the Luhn algorithm.\n */\nfunction luhnCheck(str) {\n  var checksum = 0;\n  var second = false;\n  for (var i = str.length - 1; i >= 0; i--) {\n    if (second) {\n      var product = parseInt(str[i], 10) * 2;\n      if (product > 9) {\n        // sum digits of product and add to checksum\n        checksum += product.toString().split('').map(function (a) {\n          return parseInt(a, 10);\n        }).reduce(function (a, b) {\n          return a + b;\n        }, 0);\n      } else {\n        checksum += product;\n      }\n    } else {\n      checksum += parseInt(str[i], 10);\n    }\n    second = !second;\n  }\n  return checksum % 10 === 0;\n}\n\n/*\n * Reverse TIN multiplication and summation helper function\n * Called with an array of single-digit integers and a base multiplier\n * to calculate the sum of the digits multiplied in reverse.\n * Normally used in variations of MOD 11 algorithmic checks.\n */\nfunction reverseMultiplyAndSum(digits, base) {\n  var total = 0;\n  for (var i = 0; i < digits.length; i++) {\n    total += digits[i] * (base - i);\n  }\n  return total;\n}\n\n/*\n * Verhoeff validation helper function\n * Called with a string of numbers\n * to validate according to the Verhoeff algorithm.\n */\nfunction verhoeffCheck(str) {\n  var d_table = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 0, 6, 7, 8, 9, 5], [2, 3, 4, 0, 1, 7, 8, 9, 5, 6], [3, 4, 0, 1, 2, 8, 9, 5, 6, 7], [4, 0, 1, 2, 3, 9, 5, 6, 7, 8], [5, 9, 8, 7, 6, 0, 4, 3, 2, 1], [6, 5, 9, 8, 7, 1, 0, 4, 3, 2], [7, 6, 5, 9, 8, 2, 1, 0, 4, 3], [8, 7, 6, 5, 9, 3, 2, 1, 0, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]];\n  var p_table = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 5, 7, 6, 2, 8, 3, 0, 9, 4], [5, 8, 0, 3, 7, 9, 6, 1, 4, 2], [8, 9, 1, 6, 0, 4, 3, 5, 2, 7], [9, 4, 5, 3, 1, 2, 6, 8, 7, 0], [4, 2, 8, 6, 5, 7, 3, 9, 0, 1], [2, 7, 9, 3, 8, 0, 6, 4, 1, 5], [7, 0, 4, 6, 9, 1, 3, 2, 5, 8]];\n\n  // Copy (to prevent replacement) and reverse\n  var str_copy = str.split('').reverse().join('');\n  var checksum = 0;\n  for (var i = 0; i < str_copy.length; i++) {\n    checksum = d_table[checksum][p_table[i % 8][parseInt(str_copy[i], 10)]];\n  }\n  return checksum === 0;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isUUID;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar uuid = {\n  1: /^[0-9A-F]{8}-[0-9A-F]{4}-1[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  2: /^[0-9A-F]{8}-[0-9A-F]{4}-2[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  3: /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  4: /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  5: /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  6: /^[0-9A-F]{8}-[0-9A-F]{4}-6[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  7: /^[0-9A-F]{8}-[0-9A-F]{4}-7[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  8: /^[0-9A-F]{8}-[0-9A-F]{4}-8[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  nil: /^00000000-0000-0000-0000-000000000000$/i,\n  max: /^ffffffff-ffff-ffff-ffff-ffffffffffff$/i,\n  loose: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i,\n  // From https://github.com/uuidjs/uuid/blob/main/src/regex.js\n  all: /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i\n};\nfunction isUUID(str, version) {\n  (0, _assertString.default)(str);\n  if (version === undefined || version === null) {\n    version = 'all';\n  }\n  return version in uuid ? uuid[version].test(str) : false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMobilePhone;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/* eslint-disable max-len */\nvar phones = {\n  'am-AM': /^(\\+?374|0)(33|4[134]|55|77|88|9[13-689])\\d{6}$/,\n  'ar-AE': /^((\\+?971)|0)?5[024568]\\d{7}$/,\n  'ar-BH': /^(\\+?973)?(3|6)\\d{7}$/,\n  'ar-DZ': /^(\\+?213|0)(5|6|7)\\d{8}$/,\n  'ar-LB': /^(\\+?961)?((3|81)\\d{6}|7\\d{7})$/,\n  'ar-EG': /^((\\+?20)|0)?1[0125]\\d{8}$/,\n  'ar-IQ': /^(\\+?964|0)?7[0-9]\\d{8}$/,\n  'ar-JO': /^(\\+?962|0)?7[789]\\d{7}$/,\n  'ar-KW': /^(\\+?965)([569]\\d{7}|41\\d{6})$/,\n  'ar-LY': /^((\\+?218)|0)?(9[1-6]\\d{7}|[1-8]\\d{7,9})$/,\n  'ar-MA': /^(?:(?:\\+|00)212|0)[5-7]\\d{8}$/,\n  'ar-OM': /^((\\+|00)968)?([79][1-9])\\d{6}$/,\n  'ar-PS': /^(\\+?970|0)5[6|9](\\d{7})$/,\n  'ar-SA': /^(!?(\\+?966)|0)?5\\d{8}$/,\n  'ar-SD': /^((\\+?249)|0)?(9[012369]|1[012])\\d{7}$/,\n  'ar-SY': /^(!?(\\+?963)|0)?9\\d{8}$/,\n  'ar-TN': /^(\\+?216)?[2459]\\d{7}$/,\n  'az-AZ': /^(\\+994|0)(10|5[015]|7[07]|99)\\d{7}$/,\n  'bs-BA': /^((((\\+|00)3876)|06))((([0-3]|[5-6])\\d{6})|(4\\d{7}))$/,\n  'be-BY': /^(\\+?375)?(24|25|29|33|44)\\d{7}$/,\n  'bg-BG': /^(\\+?359|0)?8[789]\\d{7}$/,\n  'bn-BD': /^(\\+?880|0)1[13456789][0-9]{8}$/,\n  'ca-AD': /^(\\+376)?[346]\\d{5}$/,\n  'cs-CZ': /^(\\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,\n  'da-DK': /^(\\+?45)?\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}$/,\n  'de-DE': /^((\\+49|0)1)(5[0-25-9]\\d|6([23]|0\\d?)|7([0-57-9]|6\\d))\\d{7,9}$/,\n  'de-AT': /^(\\+43|0)\\d{1,4}\\d{3,12}$/,\n  'de-CH': /^(\\+41|0)([1-9])\\d{1,9}$/,\n  'de-LU': /^(\\+352)?((6\\d1)\\d{6})$/,\n  'dv-MV': /^(\\+?960)?(7[2-9]|9[1-9])\\d{5}$/,\n  'el-GR': /^(\\+?30|0)?6(8[5-9]|9(?![26])[0-9])\\d{7}$/,\n  'el-CY': /^(\\+?357?)?(9(9|7|6|5|4)\\d{6})$/,\n  'en-AI': /^(\\+?1|0)264(?:2(35|92)|4(?:6[1-2]|76|97)|5(?:3[6-9]|8[1-4])|7(?:2(4|9)|72))\\d{4}$/,\n  'en-AU': /^(\\+?61|0)4\\d{8}$/,\n  'en-AG': /^(?:\\+1|1)268(?:464|7(?:1[3-9]|[28]\\d|3[0246]|64|7[0-689]))\\d{4}$/,\n  'en-BM': /^(\\+?1)?441(((3|7)\\d{6}$)|(5[0-3][0-9]\\d{4}$)|(59\\d{5}$))/,\n  'en-BS': /^(\\+?1[-\\s]?|0)?\\(?242\\)?[-\\s]?\\d{3}[-\\s]?\\d{4}$/,\n  'en-GB': /^(\\+?44|0)7[1-9]\\d{8}$/,\n  'en-GG': /^(\\+?44|0)1481\\d{6}$/,\n  'en-GH': /^(\\+233|0)(20|50|24|54|27|57|26|56|23|53|28|55|59)\\d{7}$/,\n  'en-GY': /^(\\+592|0)6\\d{6}$/,\n  'en-HK': /^(\\+?852[-\\s]?)?[456789]\\d{3}[-\\s]?\\d{4}$/,\n  'en-MO': /^(\\+?853[-\\s]?)?[6]\\d{3}[-\\s]?\\d{4}$/,\n  'en-IE': /^(\\+?353|0)8[356789]\\d{7}$/,\n  'en-IN': /^(\\+?91|0)?[6789]\\d{9}$/,\n  'en-JM': /^(\\+?876)?\\d{7}$/,\n  'en-KE': /^(\\+?254|0)(7|1)\\d{8}$/,\n  'fr-CF': /^(\\+?236| ?)(70|75|77|72|21|22)\\d{6}$/,\n  'en-SS': /^(\\+?211|0)(9[1257])\\d{7}$/,\n  'en-KI': /^((\\+686|686)?)?( )?((6|7)(2|3|8)[0-9]{6})$/,\n  'en-KN': /^(?:\\+1|1)869(?:46\\d|48[89]|55[6-8]|66\\d|76[02-7])\\d{4}$/,\n  'en-LS': /^(\\+?266)(22|28|57|58|59|27|52)\\d{6}$/,\n  'en-MT': /^(\\+?356|0)?(99|79|77|21|27|22|25)[0-9]{6}$/,\n  'en-MU': /^(\\+?230|0)?\\d{8}$/,\n  'en-MW': /^(\\+?265|0)(((77|88|31|99|98|21)\\d{7})|(((111)|1)\\d{6})|(32000\\d{4}))$/,\n  'en-NA': /^(\\+?264|0)(6|8)\\d{7}$/,\n  'en-NG': /^(\\+?234|0)?[789]\\d{9}$/,\n  'en-NZ': /^(\\+?64|0)[28]\\d{7,9}$/,\n  'en-PG': /^(\\+?675|0)?(7\\d|8[18])\\d{6}$/,\n  'en-PK': /^((00|\\+)?92|0)3[0-6]\\d{8}$/,\n  'en-PH': /^(09|\\+639)\\d{9}$/,\n  'en-RW': /^(\\+?250|0)?[7]\\d{8}$/,\n  'en-SG': /^(\\+65)?[3689]\\d{7}$/,\n  'en-SL': /^(\\+?232|0)\\d{8}$/,\n  'en-TZ': /^(\\+?255|0)?[67]\\d{8}$/,\n  'en-UG': /^(\\+?256|0)?[7]\\d{8}$/,\n  'en-US': /^((\\+1|1)?( |-)?)?(\\([2-9][0-9]{2}\\)|[2-9][0-9]{2})( |-)?([2-9][0-9]{2}( |-)?[0-9]{4})$/,\n  'en-ZA': /^(\\+?27|0)\\d{9}$/,\n  'en-ZM': /^(\\+?26)?0[79][567]\\d{7}$/,\n  'en-ZW': /^(\\+263)[0-9]{9}$/,\n  'en-BW': /^(\\+?267)?(7[1-8]{1})\\d{6}$/,\n  'es-AR': /^\\+?549(11|[2368]\\d)\\d{8}$/,\n  'es-BO': /^(\\+?591)?(6|7)\\d{7}$/,\n  'es-CO': /^(\\+?57)?3(0(0|1|2|4|5)|1\\d|2[0-4]|5(0|1))\\d{7}$/,\n  'es-CL': /^(\\+?56|0)[2-9]\\d{1}\\d{7}$/,\n  'es-CR': /^(\\+506)?[2-8]\\d{7}$/,\n  'es-CU': /^(\\+53|0053)?5\\d{7}$/,\n  'es-DO': /^(\\+?1)?8[024]9\\d{7}$/,\n  'es-HN': /^(\\+?504)?[9|8|3|2]\\d{7}$/,\n  'es-EC': /^(\\+?593|0)([2-7]|9[2-9])\\d{7}$/,\n  'es-ES': /^(\\+?34)?[6|7]\\d{8}$/,\n  'es-GT': /^(\\+?502)?[2|6|7]\\d{7}$/,\n  'es-PE': /^(\\+?51)?9\\d{8}$/,\n  'es-MX': /^(\\+?52)?(1|01)?\\d{10,11}$/,\n  'es-NI': /^(\\+?505)\\d{7,8}$/,\n  'es-PA': /^(\\+?507)\\d{7,8}$/,\n  'es-PY': /^(\\+?595|0)9[9876]\\d{7}$/,\n  'es-SV': /^(\\+?503)?[67]\\d{7}$/,\n  'es-UY': /^(\\+598|0)9[1-9][\\d]{6}$/,\n  'es-VE': /^(\\+?58)?(2|4)\\d{9}$/,\n  'et-EE': /^(\\+?372)?\\s?(5|8[1-4])\\s?([0-9]\\s?){6,7}$/,\n  'fa-IR': /^(\\+?98[\\-\\s]?|0)9[0-39]\\d[\\-\\s]?\\d{3}[\\-\\s]?\\d{4}$/,\n  'fi-FI': /^(\\+?358|0)\\s?(4[0-6]|50)\\s?(\\d\\s?){4,8}$/,\n  'fj-FJ': /^(\\+?679)?\\s?\\d{3}\\s?\\d{4}$/,\n  'fo-FO': /^(\\+?298)?\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}$/,\n  'fr-BF': /^(\\+226|0)[67]\\d{7}$/,\n  'fr-BJ': /^(\\+229)\\d{8}$/,\n  'fr-CD': /^(\\+?243|0)?(8|9)\\d{8}$/,\n  'fr-CM': /^(\\+?237)6[0-9]{8}$/,\n  'fr-FR': /^(\\+?33|0)[67]\\d{8}$/,\n  'fr-GF': /^(\\+?594|0|00594)[67]\\d{8}$/,\n  'fr-GP': /^(\\+?590|0|00590)[67]\\d{8}$/,\n  'fr-MQ': /^(\\+?596|0|00596)[67]\\d{8}$/,\n  'fr-PF': /^(\\+?689)?8[789]\\d{6}$/,\n  'fr-RE': /^(\\+?262|0|00262)[67]\\d{8}$/,\n  'fr-WF': /^(\\+681)?\\d{6}$/,\n  'he-IL': /^(\\+972|0)([23489]|5[012345689]|77)[1-9]\\d{6}$/,\n  'hu-HU': /^(\\+?36|06)(20|30|31|50|70)\\d{7}$/,\n  'id-ID': /^(\\+?62|0)8(1[123456789]|2[1238]|3[1238]|5[12356789]|7[78]|9[56789]|8[123456789])([\\s?|\\d]{5,11})$/,\n  'ir-IR': /^(\\+98|0)?9\\d{9}$/,\n  'it-IT': /^(\\+?39)?\\s?3\\d{2} ?\\d{6,7}$/,\n  'it-SM': /^((\\+378)|(0549)|(\\+390549)|(\\+3780549))?6\\d{5,9}$/,\n  'ja-JP': /^(\\+81[ \\-]?(\\(0\\))?|0)[6789]0[ \\-]?\\d{4}[ \\-]?\\d{4}$/,\n  'ka-GE': /^(\\+?995)?(79\\d{7}|5\\d{8})$/,\n  'kk-KZ': /^(\\+?7|8)?7\\d{9}$/,\n  'kl-GL': /^(\\+?299)?\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}$/,\n  'ko-KR': /^((\\+?82)[ \\-]?)?0?1([0|1|6|7|8|9]{1})[ \\-]?\\d{3,4}[ \\-]?\\d{4}$/,\n  'ky-KG': /^(\\+996\\s?)?(22[0-9]|50[0-9]|55[0-9]|70[0-9]|75[0-9]|77[0-9]|880|990|995|996|997|998)\\s?\\d{3}\\s?\\d{3}$/,\n  'lt-LT': /^(\\+370|8)\\d{8}$/,\n  'lv-LV': /^(\\+?371)2\\d{7}$/,\n  'mg-MG': /^((\\+?261|0)(2|3)\\d)?\\d{7}$/,\n  'mn-MN': /^(\\+|00|011)?976(77|81|88|91|94|95|96|99)\\d{6}$/,\n  'my-MM': /^(\\+?959|09|9)(2[5-7]|3[1-2]|4[0-5]|6[6-9]|7[5-9]|9[6-9])[0-9]{7}$/,\n  'ms-MY': /^(\\+?60|0)1(([0145](-|\\s)?\\d{7,8})|([236-9](-|\\s)?\\d{7}))$/,\n  'mz-MZ': /^(\\+?258)?8[234567]\\d{7}$/,\n  'nb-NO': /^(\\+?47)?[49]\\d{7}$/,\n  'ne-NP': /^(\\+?977)?9[78]\\d{8}$/,\n  'nl-BE': /^(\\+?32|0)4\\d{8}$/,\n  'nl-NL': /^(((\\+|00)?31\\(0\\))|((\\+|00)?31)|0)6{1}\\d{8}$/,\n  'nl-AW': /^(\\+)?297(56|59|64|73|74|99)\\d{5}$/,\n  'nn-NO': /^(\\+?47)?[49]\\d{7}$/,\n  'pl-PL': /^(\\+?48)? ?([5-8]\\d|45) ?\\d{3} ?\\d{2} ?\\d{2}$/,\n  'pt-BR': /^((\\+?55\\ ?[1-9]{2}\\ ?)|(\\+?55\\ ?\\([1-9]{2}\\)\\ ?)|(0[1-9]{2}\\ ?)|(\\([1-9]{2}\\)\\ ?)|([1-9]{2}\\ ?))((\\d{4}\\-?\\d{4})|(9[1-9]{1}\\d{3}\\-?\\d{4}))$/,\n  'pt-PT': /^(\\+?351)?9[1236]\\d{7}$/,\n  'pt-AO': /^(\\+?244)?9\\d{8}$/,\n  'ro-MD': /^(\\+?373|0)((6(0|1|2|6|7|8|9))|(7(6|7|8|9)))\\d{6}$/,\n  'ro-RO': /^(\\+?40|0)\\s?7\\d{2}(\\/|\\s|\\.|-)?\\d{3}(\\s|\\.|-)?\\d{3}$/,\n  'ru-RU': /^(\\+?7|8)?9\\d{9}$/,\n  'si-LK': /^(?:0|94|\\+94)?(7(0|1|2|4|5|6|7|8)( |-)?)\\d{7}$/,\n  'sl-SI': /^(\\+386\\s?|0)(\\d{1}\\s?\\d{3}\\s?\\d{2}\\s?\\d{2}|\\d{2}\\s?\\d{3}\\s?\\d{3})$/,\n  'sk-SK': /^(\\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,\n  'so-SO': /^(\\+?252|0)((6[0-9])\\d{7}|(7[1-9])\\d{7})$/,\n  'sq-AL': /^(\\+355|0)6[2-9]\\d{7}$/,\n  'sr-RS': /^(\\+3816|06)[- \\d]{5,9}$/,\n  'sv-SE': /^(\\+?46|0)[\\s\\-]?7[\\s\\-]?[02369]([\\s\\-]?\\d){7}$/,\n  'tg-TJ': /^(\\+?992)?[5][5]\\d{7}$/,\n  'th-TH': /^(\\+66|66|0)\\d{9}$/,\n  'tr-TR': /^(\\+?90|0)?5\\d{9}$/,\n  'tk-TM': /^(\\+993|993|8)\\d{8}$/,\n  'uk-UA': /^(\\+?38)?0(50|6[36-8]|7[357]|9[1-9])\\d{7}$/,\n  'uz-UZ': /^(\\+?998)?(6[125-79]|7[1-69]|88|9\\d)\\d{7}$/,\n  'vi-VN': /^((\\+?84)|0)((3([2-9]))|(5([25689]))|(7([0|6-9]))|(8([1-9]))|(9([0-9])))([0-9]{7})$/,\n  'zh-CN': /^((\\+|00)86)?(1[3-9]|9[28])\\d{9}$/,\n  'zh-TW': /^(\\+?886\\-?|0)?9\\d{8}$/,\n  'dz-BT': /^(\\+?975|0)?(17|16|77|02)\\d{6}$/,\n  'ar-YE': /^(((\\+|00)9677|0?7)[0137]\\d{7}|((\\+|00)967|0)[1-7]\\d{6})$/,\n  'ar-EH': /^(\\+?212|0)[\\s\\-]?(5288|5289)[\\s\\-]?\\d{5}$/,\n  'fa-AF': /^(\\+93|0)?(2{1}[0-8]{1}|[3-5]{1}[0-4]{1})(\\d{7})$/,\n  'mk-MK': /^(\\+?389|0)?((?:2[2-9]\\d{6}|(?:3[1-4]|4[2-8])\\d{6}|500\\d{5}|5[2-9]\\d{6}|7[0-9][2-9]\\d{5}|8[1-9]\\d{6}|800\\d{5}|8009\\d{4}))$/\n};\n/* eslint-enable max-len */\n\n// aliases\nphones['en-CA'] = phones['en-US'];\nphones['fr-CA'] = phones['en-CA'];\nphones['fr-BE'] = phones['nl-BE'];\nphones['zh-HK'] = phones['en-HK'];\nphones['zh-MO'] = phones['en-MO'];\nphones['ga-IE'] = phones['en-IE'];\nphones['fr-CH'] = phones['de-CH'];\nphones['it-CH'] = phones['fr-CH'];\nfunction isMobilePhone(str, locale, options) {\n  (0, _assertString.default)(str);\n  if (options && options.strictMode && !str.startsWith('+')) {\n    return false;\n  }\n  if (Array.isArray(locale)) {\n    return locale.some(function (key) {\n      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes\n      // istanbul ignore else\n      if (phones.hasOwnProperty(key)) {\n        var phone = phones[key];\n        if (phone.test(str)) {\n          return true;\n        }\n      }\n      return false;\n    });\n  } else if (locale in phones) {\n    return phones[locale].test(str);\n    // alias falsey locale as 'any'\n  } else if (!locale || locale === 'any') {\n    for (var key in phones) {\n      // istanbul ignore else\n      if (phones.hasOwnProperty(key)) {\n        var phone = phones[key];\n        if (phone.test(str)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}\nvar locales = exports.locales = Object.keys(phones);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBIC;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _isISO31661Alpha = require(\"./isISO31661Alpha2\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// https://en.wikipedia.org/wiki/ISO_9362\nvar isBICReg = /^[A-Za-z]{6}[A-Za-z0-9]{2}([A-Za-z0-9]{3})?$/;\nfunction isBIC(str) {\n  (0, _assertString.default)(str);\n\n  // toUpperCase() should be removed when a new major version goes out that changes\n  // the regex to [A-Z] (per the spec).\n  var countryCode = str.slice(4, 6).toUpperCase();\n  if (!_isISO31661Alpha.CountryCodes.has(countryCode) && countryCode !== 'XK') {\n    return false;\n  }\n  return isBICReg.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isVAT;\nexports.vatMatchers = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar algorithms = _interopRequireWildcard(require(\"./util/algorithms\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar AU = function AU(str) {\n  var match = str.match(/^(AU)?(\\d{11})$/);\n  if (!match) {\n    return false;\n  }\n  // @see {@link https://abr.business.gov.au/Help/AbnFormat}\n  var weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];\n  str = str.replace(/^AU/, '');\n  var ABN = (parseInt(str.slice(0, 1), 10) - 1).toString() + str.slice(1);\n  var total = 0;\n  for (var i = 0; i < 11; i++) {\n    total += weights[i] * ABN.charAt(i);\n  }\n  return total !== 0 && total % 89 === 0;\n};\nvar CH = function CH(str) {\n  // @see {@link https://www.ech.ch/de/ech/ech-0097/5.2.0}\n  var hasValidCheckNumber = function hasValidCheckNumber(digits) {\n    var lastDigit = digits.pop(); // used as check number\n    var weights = [5, 4, 3, 2, 7, 6, 5, 4];\n    var calculatedCheckNumber = (11 - digits.reduce(function (acc, el, idx) {\n      return acc + el * weights[idx];\n    }, 0) % 11) % 11;\n    return lastDigit === calculatedCheckNumber;\n  };\n\n  // @see {@link https://www.estv.admin.ch/estv/de/home/mehrwertsteuer/uid/mwst-uid-nummer.html}\n  return /^(CHE[- ]?)?(\\d{9}|(\\d{3}\\.\\d{3}\\.\\d{3})|(\\d{3} \\d{3} \\d{3})) ?(TVA|MWST|IVA)?$/.test(str) && hasValidCheckNumber(str.match(/\\d/g).map(function (el) {\n    return +el;\n  }));\n};\nvar PT = function PT(str) {\n  var match = str.match(/^(PT)?(\\d{9})$/);\n  if (!match) {\n    return false;\n  }\n  var tin = match[2];\n  var checksum = 11 - algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 8).map(function (a) {\n    return parseInt(a, 10);\n  }), 9) % 11;\n  if (checksum > 9) {\n    return parseInt(tin[8], 10) === 0;\n  }\n  return checksum === parseInt(tin[8], 10);\n};\nvar vatMatchers = exports.vatMatchers = {\n  /**\r\n   * European Union VAT identification numbers\r\n   */\n  AT: function AT(str) {\n    return /^(AT)?U\\d{8}$/.test(str);\n  },\n  BE: function BE(str) {\n    return /^(BE)?\\d{10}$/.test(str);\n  },\n  BG: function BG(str) {\n    return /^(BG)?\\d{9,10}$/.test(str);\n  },\n  HR: function HR(str) {\n    return /^(HR)?\\d{11}$/.test(str);\n  },\n  CY: function CY(str) {\n    return /^(CY)?\\w{9}$/.test(str);\n  },\n  CZ: function CZ(str) {\n    return /^(CZ)?\\d{8,10}$/.test(str);\n  },\n  DK: function DK(str) {\n    return /^(DK)?\\d{8}$/.test(str);\n  },\n  EE: function EE(str) {\n    return /^(EE)?\\d{9}$/.test(str);\n  },\n  FI: function FI(str) {\n    return /^(FI)?\\d{8}$/.test(str);\n  },\n  FR: function FR(str) {\n    return /^(FR)?\\w{2}\\d{9}$/.test(str);\n  },\n  DE: function DE(str) {\n    return /^(DE)?\\d{9}$/.test(str);\n  },\n  EL: function EL(str) {\n    return /^(EL)?\\d{9}$/.test(str);\n  },\n  HU: function HU(str) {\n    return /^(HU)?\\d{8}$/.test(str);\n  },\n  IE: function IE(str) {\n    return /^(IE)?\\d{7}\\w{1}(W)?$/.test(str);\n  },\n  IT: function IT(str) {\n    return /^(IT)?\\d{11}$/.test(str);\n  },\n  LV: function LV(str) {\n    return /^(LV)?\\d{11}$/.test(str);\n  },\n  LT: function LT(str) {\n    return /^(LT)?\\d{9,12}$/.test(str);\n  },\n  LU: function LU(str) {\n    return /^(LU)?\\d{8}$/.test(str);\n  },\n  MT: function MT(str) {\n    return /^(MT)?\\d{8}$/.test(str);\n  },\n  NL: function NL(str) {\n    return /^(NL)?\\d{9}B\\d{2}$/.test(str);\n  },\n  PL: function PL(str) {\n    return /^(PL)?(\\d{10}|(\\d{3}-\\d{3}-\\d{2}-\\d{2})|(\\d{3}-\\d{2}-\\d{2}-\\d{3}))$/.test(str);\n  },\n  PT: PT,\n  RO: function RO(str) {\n    return /^(RO)?\\d{2,10}$/.test(str);\n  },\n  SK: function SK(str) {\n    return /^(SK)?\\d{10}$/.test(str);\n  },\n  SI: function SI(str) {\n    return /^(SI)?\\d{8}$/.test(str);\n  },\n  ES: function ES(str) {\n    return /^(ES)?\\w\\d{7}[A-Z]$/.test(str);\n  },\n  SE: function SE(str) {\n    return /^(SE)?\\d{12}$/.test(str);\n  },\n  /**\r\n   * VAT numbers of non-EU countries\r\n   */\n  AL: function AL(str) {\n    return /^(AL)?\\w{9}[A-Z]$/.test(str);\n  },\n  MK: function MK(str) {\n    return /^(MK)?\\d{13}$/.test(str);\n  },\n  AU: AU,\n  BY: function BY(str) {\n    return /^(УНП )?\\d{9}$/.test(str);\n  },\n  CA: function CA(str) {\n    return /^(CA)?\\d{9}$/.test(str);\n  },\n  IS: function IS(str) {\n    return /^(IS)?\\d{5,6}$/.test(str);\n  },\n  IN: function IN(str) {\n    return /^(IN)?\\d{15}$/.test(str);\n  },\n  ID: function ID(str) {\n    return /^(ID)?(\\d{15}|(\\d{2}.\\d{3}.\\d{3}.\\d{1}-\\d{3}.\\d{3}))$/.test(str);\n  },\n  IL: function IL(str) {\n    return /^(IL)?\\d{9}$/.test(str);\n  },\n  KZ: function KZ(str) {\n    return /^(KZ)?\\d{12}$/.test(str);\n  },\n  NZ: function NZ(str) {\n    return /^(NZ)?\\d{9}$/.test(str);\n  },\n  NG: function NG(str) {\n    return /^(NG)?(\\d{12}|(\\d{8}-\\d{4}))$/.test(str);\n  },\n  NO: function NO(str) {\n    return /^(NO)?\\d{9}MVA$/.test(str);\n  },\n  PH: function PH(str) {\n    return /^(PH)?(\\d{12}|\\d{3} \\d{3} \\d{3} \\d{3})$/.test(str);\n  },\n  RU: function RU(str) {\n    return /^(RU)?(\\d{10}|\\d{12})$/.test(str);\n  },\n  SM: function SM(str) {\n    return /^(SM)?\\d{5}$/.test(str);\n  },\n  SA: function SA(str) {\n    return /^(SA)?\\d{15}$/.test(str);\n  },\n  RS: function RS(str) {\n    return /^(RS)?\\d{9}$/.test(str);\n  },\n  CH: CH,\n  TR: function TR(str) {\n    return /^(TR)?\\d{10}$/.test(str);\n  },\n  UA: function UA(str) {\n    return /^(UA)?\\d{12}$/.test(str);\n  },\n  GB: function GB(str) {\n    return /^GB((\\d{3} \\d{4} ([0-8][0-9]|9[0-6]))|(\\d{9} \\d{3})|(((GD[0-4])|(HA[5-9]))[0-9]{2}))$/.test(str);\n  },\n  UZ: function UZ(str) {\n    return /^(UZ)?\\d{9}$/.test(str);\n  },\n  /**\r\n   * VAT numbers of Latin American countries\r\n   */\n  AR: function AR(str) {\n    return /^(AR)?\\d{11}$/.test(str);\n  },\n  BO: function BO(str) {\n    return /^(BO)?\\d{7}$/.test(str);\n  },\n  BR: function BR(str) {\n    return /^(BR)?((\\d{2}.\\d{3}.\\d{3}\\/\\d{4}-\\d{2})|(\\d{3}.\\d{3}.\\d{3}-\\d{2}))$/.test(str);\n  },\n  CL: function CL(str) {\n    return /^(CL)?\\d{8}-\\d{1}$/.test(str);\n  },\n  CO: function CO(str) {\n    return /^(CO)?\\d{10}$/.test(str);\n  },\n  CR: function CR(str) {\n    return /^(CR)?\\d{9,12}$/.test(str);\n  },\n  EC: function EC(str) {\n    return /^(EC)?\\d{13}$/.test(str);\n  },\n  SV: function SV(str) {\n    return /^(SV)?\\d{4}-\\d{6}-\\d{3}-\\d{1}$/.test(str);\n  },\n  GT: function GT(str) {\n    return /^(GT)?\\d{7}-\\d{1}$/.test(str);\n  },\n  HN: function HN(str) {\n    return /^(HN)?$/.test(str);\n  },\n  MX: function MX(str) {\n    return /^(MX)?\\w{3,4}\\d{6}\\w{3}$/.test(str);\n  },\n  NI: function NI(str) {\n    return /^(NI)?\\d{3}-\\d{6}-\\d{4}\\w{1}$/.test(str);\n  },\n  PA: function PA(str) {\n    return /^(PA)?$/.test(str);\n  },\n  PY: function PY(str) {\n    return /^(PY)?\\d{6,8}-\\d{1}$/.test(str);\n  },\n  PE: function PE(str) {\n    return /^(PE)?\\d{11}$/.test(str);\n  },\n  DO: function DO(str) {\n    return /^(DO)?(\\d{11}|(\\d{3}-\\d{7}-\\d{1})|[1,4,5]{1}\\d{8}|([1,4,5]{1})-\\d{2}-\\d{5}-\\d{1})$/.test(str);\n  },\n  UY: function UY(str) {\n    return /^(UY)?\\d{12}$/.test(str);\n  },\n  VE: function VE(str) {\n    return /^(VE)?[J,G,V,E]{1}-(\\d{9}|(\\d{8}-\\d{1}))$/.test(str);\n  }\n};\nfunction isVAT(str, countryCode) {\n  (0, _assertString.default)(str);\n  (0, _assertString.default)(countryCode);\n  if (countryCode in vatMatchers) {\n    return vatMatchers[countryCode](str);\n  }\n  throw new Error(\"Invalid country code: '\".concat(countryCode, \"'\"));\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isIP;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/**\n11.3.  Examples\n\n   The following addresses\n\n             fe80::1234 (on the 1st link of the node)\n             ff02::5678 (on the 5th link of the node)\n             ff08::9abc (on the 10th organization of the node)\n\n   would be represented as follows:\n\n             fe80::1234%1\n             ff02::5678%5\n             ff08::9abc%10\n\n   (Here we assume a natural translation from a zone index to the\n   <zone_id> part, where the Nth zone of any scope is translated into\n   \"N\".)\n\n   If we use interface names as <zone_id>, those addresses could also be\n   represented as follows:\n\n            fe80::1234%ne0\n            ff02::5678%pvc1.3\n            ff08::9abc%interface10\n\n   where the interface \"ne0\" belongs to the 1st link, \"pvc1.3\" belongs\n   to the 5th link, and \"interface10\" belongs to the 10th organization.\n * * */\nvar IPv4SegmentFormat = '(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';\nvar IPv4AddressFormat = \"(\".concat(IPv4SegmentFormat, \"[.]){3}\").concat(IPv4SegmentFormat);\nvar IPv4AddressRegExp = new RegExp(\"^\".concat(IPv4AddressFormat, \"$\"));\nvar IPv6SegmentFormat = '(?:[0-9a-fA-F]{1,4})';\nvar IPv6AddressRegExp = new RegExp('^(' + \"(?:\".concat(IPv6SegmentFormat, \":){7}(?:\").concat(IPv6SegmentFormat, \"|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){6}(?:\").concat(IPv4AddressFormat, \"|:\").concat(IPv6SegmentFormat, \"|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){5}(?::\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,2}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){4}(?:(:\").concat(IPv6SegmentFormat, \"){0,1}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,3}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){3}(?:(:\").concat(IPv6SegmentFormat, \"){0,2}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,4}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){2}(?:(:\").concat(IPv6SegmentFormat, \"){0,3}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,5}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){1}(?:(:\").concat(IPv6SegmentFormat, \"){0,4}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,6}|:)|\") + \"(?::((?::\".concat(IPv6SegmentFormat, \"){0,5}:\").concat(IPv4AddressFormat, \"|(?::\").concat(IPv6SegmentFormat, \"){1,7}|:))\") + ')(%[0-9a-zA-Z.]{1,})?$');\nfunction isIP(ipAddress) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  (0, _assertString.default)(ipAddress);\n\n  // accessing 'arguments' for backwards compatibility: isIP(ipAddress [, version])\n  // eslint-disable-next-line prefer-rest-params\n  var version = (_typeof(options) === 'object' ? options.version : arguments[1]) || '';\n  if (!version) {\n    return isIP(ipAddress, {\n      version: 4\n    }) || isIP(ipAddress, {\n      version: 6\n    });\n  }\n  if (version.toString() === '4') {\n    return IPv4AddressRegExp.test(ipAddress);\n  }\n  if (version.toString() === '6') {\n    return IPv6AddressRegExp.test(ipAddress);\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isRgbColor;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); } /* eslint-disable prefer-rest-params */\nvar rgbColor = /^rgb\\((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]),){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\)$/;\nvar rgbaColor = /^rgba\\((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]),){3}(0?\\.\\d\\d?|1(\\.0)?|0(\\.0)?)\\)$/;\nvar rgbColorPercent = /^rgb\\((([0-9]%|[1-9][0-9]%|100%),){2}([0-9]%|[1-9][0-9]%|100%)\\)$/;\nvar rgbaColorPercent = /^rgba\\((([0-9]%|[1-9][0-9]%|100%),){3}(0?\\.\\d\\d?|1(\\.0)?|0(\\.0)?)\\)$/;\nvar startsWithRgb = /^rgba?/;\nfunction isRgbColor(str, options) {\n  (0, _assertString.default)(str);\n  // default options to true for percent and false for spaces\n  var allowSpaces = false;\n  var includePercentValues = true;\n  if (_typeof(options) !== 'object') {\n    if (arguments.length >= 2) {\n      includePercentValues = arguments[1];\n    }\n  } else {\n    allowSpaces = options.allowSpaces !== undefined ? options.allowSpaces : allowSpaces;\n    includePercentValues = options.includePercentValues !== undefined ? options.includePercentValues : includePercentValues;\n  }\n  if (allowSpaces) {\n    // make sure it starts with continous rgba? without spaces before stripping\n    if (!startsWithRgb.test(str)) {\n      return false;\n    }\n    // strip all whitespace\n    str = str.replace(/\\s/g, '');\n  }\n  if (!includePercentValues) {\n    return rgbColor.test(str) || rgbaColor.test(str);\n  }\n  return rgbColor.test(str) || rgbaColor.test(str) || rgbColorPercent.test(str) || rgbaColorPercent.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isUppercase;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isUppercase(str) {\n  (0, _assertString.default)(str);\n  return str === str.toUpperCase();\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = multilineRegexp;\n/**\n * Build RegExp object from an array\n * of multiple/multi-line regexp parts\n *\n * @param {string[]} parts\n * @param {string} flags\n * @return {object} - RegExp object\n */\nfunction multilineRegexp(parts, flags) {\n  var regexpAsStringLiteral = parts.join('');\n  return new RegExp(regexpAsStringLiteral, flags);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBtcAddress;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar bech32 = /^(bc1|tb1|bc1p|tb1p)[ac-hj-np-z02-9]{39,58}$/;\nvar base58 = /^(1|2|3|m)[A-HJ-NP-Za-km-z1-9]{25,39}$/;\nfunction isBtcAddress(str) {\n  (0, _assertString.default)(str);\n  return bech32.test(str) || base58.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isJSON;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _includesArray = _interopRequireDefault(require(\"./util/includesArray\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar default_json_options = {\n  allow_primitives: false\n};\nfunction isJSON(str, options) {\n  (0, _assertString.default)(str);\n  try {\n    options = (0, _merge.default)(options, default_json_options);\n    var primitives = [];\n    if (options.allow_primitives) {\n      primitives = [null, false, true];\n    }\n    var obj = JSON.parse(str);\n    return (0, _includesArray.default)(primitives, obj) || !!obj && _typeof(obj) === 'object';\n  } catch (e) {/* ignore */}\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = toString;\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction toString(input) {\n  if (_typeof(input) === 'object' && input !== null) {\n    if (typeof input.toString === 'function') {\n      input = input.toString();\n    } else {\n      input = '[object Object]';\n    }\n  } else if (input === null || typeof input === 'undefined' || isNaN(input) && !input.length) {\n    input = '';\n  }\n  return String(input);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isFreightContainerID = void 0;\nexports.isISO6346 = isISO6346;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// https://en.wikipedia.org/wiki/ISO_6346\n// according to ISO6346 standard, checksum digit is mandatory for freight container but recommended\n// for other container types (J and Z)\nvar isISO6346Str = /^[A-Z]{3}(U[0-9]{7})|([J,Z][0-9]{6,7})$/;\nvar isDigit = /^[0-9]$/;\nfunction isISO6346(str) {\n  (0, _assertString.default)(str);\n  str = str.toUpperCase();\n  if (!isISO6346Str.test(str)) return false;\n  if (str.length === 11) {\n    var sum = 0;\n    for (var i = 0; i < str.length - 1; i++) {\n      if (!isDigit.test(str[i])) {\n        var convertedCode = void 0;\n        var letterCode = str.charCodeAt(i) - 55;\n        if (letterCode < 11) convertedCode = letterCode;else if (letterCode >= 11 && letterCode <= 20) convertedCode = 12 + letterCode % 11;else if (letterCode >= 21 && letterCode <= 30) convertedCode = 23 + letterCode % 21;else convertedCode = 34 + letterCode % 31;\n        sum += convertedCode * Math.pow(2, i);\n      } else sum += str[i] * Math.pow(2, i);\n    }\n    var checkSumDigit = sum % 11;\n    if (checkSumDigit === 10) checkSumDigit = 0;\n    return Number(str[str.length - 1]) === checkSumDigit;\n  }\n  return true;\n}\nvar isFreightContainerID = exports.isFreightContainerID = isISO6346;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLatLong;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nvar _includesString = _interopRequireDefault(require(\"./util/includesString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar lat = /^\\(?[+-]?(90(\\.0+)?|[1-8]?\\d(\\.\\d+)?)$/;\nvar long = /^\\s?[+-]?(180(\\.0+)?|1[0-7]\\d(\\.\\d+)?|\\d{1,2}(\\.\\d+)?)\\)?$/;\nvar latDMS = /^(([1-8]?\\d)\\D+([1-5]?\\d|60)\\D+([1-5]?\\d|60)(\\.\\d+)?|90\\D+0\\D+0)\\D+[NSns]?$/i;\nvar longDMS = /^\\s*([1-7]?\\d{1,2}\\D+([1-5]?\\d|60)\\D+([1-5]?\\d|60)(\\.\\d+)?|180\\D+0\\D+0)\\D+[EWew]?$/i;\nvar defaultLatLongOptions = {\n  checkDMS: false\n};\nfunction isLatLong(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, defaultLatLongOptions);\n  if (!(0, _includesString.default)(str, ',')) return false;\n  var pair = str.split(',');\n  if (pair[0].startsWith('(') && !pair[1].endsWith(')') || pair[1].endsWith(')') && !pair[0].startsWith('(')) return false;\n  if (options.checkDMS) {\n    return latDMS.test(pair[0]) && longDMS.test(pair[1]);\n  }\n  return lat.test(pair[0]) && long.test(pair[1]);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isDecimal;\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _includesArray = _interopRequireDefault(require(\"./util/includesArray\"));\nvar _alpha = require(\"./alpha\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction decimalRegExp(options) {\n  var regExp = new RegExp(\"^[-+]?([0-9]+)?(\\\\\".concat(_alpha.decimal[options.locale], \"[0-9]{\").concat(options.decimal_digits, \"})\").concat(options.force_decimal ? '' : '?', \"$\"));\n  return regExp;\n}\nvar default_decimal_options = {\n  force_decimal: false,\n  decimal_digits: '1,',\n  locale: 'en-US'\n};\nvar blacklist = ['', '-', '+'];\nfunction isDecimal(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, default_decimal_options);\n  if (options.locale in _alpha.decimal) {\n    return !(0, _includesArray.default)(blacklist, str.replace(/ /g, '')) && decimalRegExp(options).test(str);\n  }\n  throw new Error(\"Invalid locale '\".concat(options.locale, \"'\"));\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isInt;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _nullUndefinedCheck = _interopRequireDefault(require(\"./util/nullUndefinedCheck\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar int = /^(?:[-+]?(?:0|[1-9][0-9]*))$/;\nvar intLeadingZeroes = /^[-+]?[0-9]+$/;\nfunction isInt(str, options) {\n  (0, _assertString.default)(str);\n  options = options || {};\n\n  // Get the regex to use for testing, based on whether\n  // leading zeroes are allowed or not.\n  var regex = options.allow_leading_zeroes === false ? int : intLeadingZeroes;\n\n  // Check min/max/lt/gt\n  var minCheckPassed = !options.hasOwnProperty('min') || (0, _nullUndefinedCheck.default)(options.min) || str >= options.min;\n  var maxCheckPassed = !options.hasOwnProperty('max') || (0, _nullUndefinedCheck.default)(options.max) || str <= options.max;\n  var ltCheckPassed = !options.hasOwnProperty('lt') || (0, _nullUndefinedCheck.default)(options.lt) || str < options.lt;\n  var gtCheckPassed = !options.hasOwnProperty('gt') || (0, _nullUndefinedCheck.default)(options.gt) || str > options.gt;\n  return regex.test(str) && minCheckPassed && maxCheckPassed && ltCheckPassed && gtCheckPassed;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISO8601;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/* eslint-disable max-len */\n// from http://goo.gl/0ejHHW\nvar iso8601 = /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/;\n// same as above, except with a strict 'T' separator between date and time\nvar iso8601StrictSeparator = /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/;\n/* eslint-enable max-len */\nvar isValidDate = function isValidDate(str) {\n  // str must have passed the ISO8601 check\n  // this check is meant to catch invalid dates\n  // like 2009-02-31\n  // first check for ordinal dates\n  var ordinalMatch = str.match(/^(\\d{4})-?(\\d{3})([ T]{1}\\.*|$)/);\n  if (ordinalMatch) {\n    var oYear = Number(ordinalMatch[1]);\n    var oDay = Number(ordinalMatch[2]);\n    // if is leap year\n    if (oYear % 4 === 0 && oYear % 100 !== 0 || oYear % 400 === 0) return oDay <= 366;\n    return oDay <= 365;\n  }\n  var match = str.match(/(\\d{4})-?(\\d{0,2})-?(\\d*)/).map(Number);\n  var year = match[1];\n  var month = match[2];\n  var day = match[3];\n  var monthString = month ? \"0\".concat(month).slice(-2) : month;\n  var dayString = day ? \"0\".concat(day).slice(-2) : day;\n\n  // create a date object and compare\n  var d = new Date(\"\".concat(year, \"-\").concat(monthString || '01', \"-\").concat(dayString || '01'));\n  if (month && day) {\n    return d.getUTCFullYear() === year && d.getUTCMonth() + 1 === month && d.getUTCDate() === day;\n  }\n  return true;\n};\nfunction isISO8601(str) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  (0, _assertString.default)(str);\n  var check = options.strictSeparator ? iso8601StrictSeparator.test(str) : iso8601.test(str);\n  if (check && options.strict) return isValidDate(str);\n  return check;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isByteLength;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/* eslint-disable prefer-rest-params */\nfunction isByteLength(str, options) {\n  (0, _assertString.default)(str);\n  var min;\n  var max;\n  if (_typeof(options) === 'object') {\n    min = options.min || 0;\n    max = options.max;\n  } else {\n    // backwards compatibility: isByteLength(str, min [, max])\n    min = arguments[1];\n    max = arguments[2];\n  }\n  var len = encodeURI(str).split(/%..|./).length - 1;\n  return len >= min && (typeof max === 'undefined' || len <= max);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isAlpha;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _alpha = require(\"./alpha\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isAlpha(_str) {\n  var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  (0, _assertString.default)(_str);\n  var str = _str;\n  var ignore = options.ignore;\n  if (ignore) {\n    if (ignore instanceof RegExp) {\n      str = str.replace(ignore, '');\n    } else if (typeof ignore === 'string') {\n      str = str.replace(new RegExp(\"[\".concat(ignore.replace(/[-[\\]{}()*+?.,\\\\^$|#\\\\s]/g, '\\\\$&'), \"]\"), 'g'), ''); // escape regex for ignore\n    } else {\n      throw new Error('ignore should be instance of a String or RegExp');\n    }\n  }\n  if (locale in _alpha.alpha) {\n    return _alpha.alpha[locale].test(str);\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}\nvar locales = exports.locales = Object.keys(_alpha.alpha);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBase58;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// Accepted chars - 123456789ABCDEFGH JKLMN PQRSTUVWXYZabcdefghijk mnopqrstuvwxyz\nvar base58Reg = /^[A-HJ-NP-Za-km-z1-9]*$/;\nfunction isBase58(str) {\n  (0, _assertString.default)(str);\n  if (base58Reg.test(str)) {\n    return true;\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBefore;\nvar _toDate = _interopRequireDefault(require(\"./toDate\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction isBefore(date, options) {\n  // For backwards compatibility:\n  // isBefore(str [, date]), i.e. `options` could be used as argument for the legacy `date`\n  var comparisonDate = (_typeof(options) === 'object' ? options.comparisonDate : options) || Date().toString();\n  var comparison = (0, _toDate.default)(comparisonDate);\n  var original = (0, _toDate.default)(date);\n  return !!(original && comparison && original < comparison);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isCurrency;\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction currencyRegex(options) {\n  var decimal_digits = \"\\\\d{\".concat(options.digits_after_decimal[0], \"}\");\n  options.digits_after_decimal.forEach(function (digit, index) {\n    if (index !== 0) decimal_digits = \"\".concat(decimal_digits, \"|\\\\d{\").concat(digit, \"}\");\n  });\n  var symbol = \"(\".concat(options.symbol.replace(/\\W/, function (m) {\n      return \"\\\\\".concat(m);\n    }), \")\").concat(options.require_symbol ? '' : '?'),\n    negative = '-?',\n    whole_dollar_amount_without_sep = '[1-9]\\\\d*',\n    whole_dollar_amount_with_sep = \"[1-9]\\\\d{0,2}(\\\\\".concat(options.thousands_separator, \"\\\\d{3})*\"),\n    valid_whole_dollar_amounts = ['0', whole_dollar_amount_without_sep, whole_dollar_amount_with_sep],\n    whole_dollar_amount = \"(\".concat(valid_whole_dollar_amounts.join('|'), \")?\"),\n    decimal_amount = \"(\\\\\".concat(options.decimal_separator, \"(\").concat(decimal_digits, \"))\").concat(options.require_decimal ? '' : '?');\n  var pattern = whole_dollar_amount + (options.allow_decimal || options.require_decimal ? decimal_amount : '');\n\n  // default is negative sign before symbol, but there are two other options (besides parens)\n  if (options.allow_negatives && !options.parens_for_negatives) {\n    if (options.negative_sign_after_digits) {\n      pattern += negative;\n    } else if (options.negative_sign_before_digits) {\n      pattern = negative + pattern;\n    }\n  }\n\n  // South African Rand, for example, uses R 123 (space) and R-123 (no space)\n  if (options.allow_negative_sign_placeholder) {\n    pattern = \"( (?!\\\\-))?\".concat(pattern);\n  } else if (options.allow_space_after_symbol) {\n    pattern = \" ?\".concat(pattern);\n  } else if (options.allow_space_after_digits) {\n    pattern += '( (?!$))?';\n  }\n  if (options.symbol_after_digits) {\n    pattern += symbol;\n  } else {\n    pattern = symbol + pattern;\n  }\n  if (options.allow_negatives) {\n    if (options.parens_for_negatives) {\n      pattern = \"(\\\\(\".concat(pattern, \"\\\\)|\").concat(pattern, \")\");\n    } else if (!(options.negative_sign_before_digits || options.negative_sign_after_digits)) {\n      pattern = negative + pattern;\n    }\n  }\n\n  // ensure there's a dollar and/or decimal amount, and that\n  // it doesn't start with a space or a negative sign followed by a space\n  return new RegExp(\"^(?!-? )(?=.*\\\\d)\".concat(pattern, \"$\"));\n}\nvar default_currency_options = {\n  symbol: '$',\n  require_symbol: false,\n  allow_space_after_symbol: false,\n  symbol_after_digits: false,\n  allow_negatives: true,\n  parens_for_negatives: false,\n  negative_sign_before_digits: false,\n  negative_sign_after_digits: false,\n  allow_negative_sign_placeholder: false,\n  thousands_separator: ',',\n  decimal_separator: '.',\n  allow_decimal: true,\n  require_decimal: false,\n  digits_after_decimal: [2],\n  allow_space_after_digits: false\n};\nfunction isCurrency(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, default_currency_options);\n  return currencyRegex(options).test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLocale;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/*\n  = 3ALPHA              ; selected ISO 639 codes\n    *2(\"-\" 3ALPHA)      ; permanently reserved\n */\nvar extlang = '([A-Za-z]{3}(-[A-Za-z]{3}){0,2})';\n\n/*\n  = 2*3ALPHA            ; shortest ISO 639 code\n    [\"-\" extlang]       ; sometimes followed by\n                        ; extended language subtags\n  / 4ALPHA              ; or reserved for future use\n  / 5*8ALPHA            ; or registered language subtag\n */\nvar language = \"(([a-zA-Z]{2,3}(-\".concat(extlang, \")?)|([a-zA-Z]{5,8}))\");\n\n/*\n  = 4ALPHA              ; ISO 15924 code\n */\nvar script = '([A-Za-z]{4})';\n\n/*\n  = 2ALPHA              ; ISO 3166-1 code\n  / 3DIGIT              ; UN M.49 code\n */\nvar region = '([A-Za-z]{2}|\\\\d{3})';\n\n/*\n  = 5*8alphanum         ; registered variants\n  / (DIGIT 3alphanum)\n */\nvar variant = '([A-Za-z0-9]{5,8}|(\\\\d[A-Z-a-z0-9]{3}))';\n\n/*\n  = DIGIT               ; 0 - 9\n  / %x41-57             ; A - W\n  / %x59-5A             ; Y - Z\n  / %x61-77             ; a - w\n  / %x79-7A             ; y - z\n */\nvar singleton = '(\\\\d|[A-W]|[Y-Z]|[a-w]|[y-z])';\n\n/*\n  = singleton 1*(\"-\" (2*8alphanum))\n                        ; Single alphanumerics\n                        ; \"x\" reserved for private use\n */\nvar extension = \"(\".concat(singleton, \"(-[A-Za-z0-9]{2,8})+)\");\n\n/*\n  = \"x\" 1*(\"-\" (1*8alphanum))\n */\nvar privateuse = '(x(-[A-Za-z0-9]{1,8})+)';\n\n// irregular tags do not match the 'langtag' production and would not\n// otherwise be considered 'well-formed'. These tags are all valid, but\n// most are deprecated in favor of more modern subtags or subtag combination\n\nvar irregular = '((en-GB-oed)|(i-ami)|(i-bnn)|(i-default)|(i-enochian)|' + '(i-hak)|(i-klingon)|(i-lux)|(i-mingo)|(i-navajo)|(i-pwn)|(i-tao)|' + '(i-tay)|(i-tsu)|(sgn-BE-FR)|(sgn-BE-NL)|(sgn-CH-DE))';\n\n// regular tags match the 'langtag' production, but their subtags are not\n// extended language or variant subtags: their meaning is defined by\n// their registration and all of these are deprecated in favor of a more\n// modern subtag or sequence of subtags\n\nvar regular = '((art-lojban)|(cel-gaulish)|(no-bok)|(no-nyn)|(zh-guoyu)|' + '(zh-hakka)|(zh-min)|(zh-min-nan)|(zh-xiang))';\n\n/*\n  = irregular           ; non-redundant tags registered\n  / regular             ; during the RFC 3066 era\n\n */\nvar grandfathered = \"(\".concat(irregular, \"|\").concat(regular, \")\");\n\n/*\n  RFC 5646 defines delimitation of subtags via a hyphen:\n\n      \"Subtag\" refers to a specific section of a tag, delimited by a\n      hyphen, such as the subtags 'zh', 'Hant', and 'CN' in the tag \"zh-\n      Hant-CN\".  Examples of subtags in this document are enclosed in\n      single quotes ('Hant')\n\n  However, we need to add \"_\" to maintain the existing behaviour.\n */\nvar delimiter = '(-|_)';\n\n/*\n  = language\n    [\"-\" script]\n    [\"-\" region]\n    *(\"-\" variant)\n    *(\"-\" extension)\n    [\"-\" privateuse]\n */\nvar langtag = \"\".concat(language, \"(\").concat(delimiter).concat(script, \")?(\").concat(delimiter).concat(region, \")?(\").concat(delimiter).concat(variant, \")*(\").concat(delimiter).concat(extension, \")*(\").concat(delimiter).concat(privateuse, \")?\");\n\n/*\n  Regex implementation based on BCP RFC 5646\n  Tags for Identifying Languages\n  https://www.rfc-editor.org/rfc/rfc5646.html\n */\nvar languageTagRegex = new RegExp(\"(^\".concat(privateuse, \"$)|(^\").concat(grandfathered, \"$)|(^\").concat(langtag, \"$)\"));\nfunction isLocale(str) {\n  (0, _assertString.default)(str);\n  return languageTagRegex.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isHSL;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar hslComma = /^hsla?\\(((\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?))(deg|grad|rad|turn)?(,(\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?)%){2}(,((\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?)%?))?\\)$/i;\nvar hslSpace = /^hsla?\\(((\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?))(deg|grad|rad|turn)?(\\s(\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?)%){2}\\s?(\\/\\s((\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?)%?)\\s?)?\\)$/i;\nfunction isHSL(str) {\n  (0, _assertString.default)(str);\n\n  // Strip duplicate spaces before calling the validation regex (See  #1598 for more info)\n  var strippedStr = str.replace(/\\s+/g, ' ').replace(/\\s?(hsla?\\(|\\)|,)\\s?/ig, '$1');\n  if (strippedStr.indexOf(',') !== -1) {\n    return hslComma.test(strippedStr);\n  }\n  return hslSpace.test(strippedStr);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isIPRange;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _isIP = _interopRequireDefault(require(\"./isIP\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar subnetMaybe = /^\\d{1,3}$/;\nvar v4Subnet = 32;\nvar v6Subnet = 128;\nfunction isIPRange(str) {\n  var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  (0, _assertString.default)(str);\n  var parts = str.split('/');\n\n  // parts[0] -> ip, parts[1] -> subnet\n  if (parts.length !== 2) {\n    return false;\n  }\n  if (!subnetMaybe.test(parts[1])) {\n    return false;\n  }\n\n  // Disallow preceding 0 i.e. 01, 02, ...\n  if (parts[1].length > 1 && parts[1].startsWith('0')) {\n    return false;\n  }\n  var isValidIP = (0, _isIP.default)(parts[0], version);\n  if (!isValidIP) {\n    return false;\n  }\n\n  // Define valid subnet according to IP's version\n  var expectedSubnet = null;\n  switch (String(version)) {\n    case '4':\n      expectedSubnet = v4Subnet;\n      break;\n    case '6':\n      expectedSubnet = v6Subnet;\n      break;\n    default:\n      expectedSubnet = (0, _isIP.default)(parts[0], '6') ? v6Subnet : v4Subnet;\n  }\n  return parts[1] <= expectedSubnet && parts[1] >= 0;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isStrongPassword;\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar upperCaseRegex = /^[A-Z]$/;\nvar lowerCaseRegex = /^[a-z]$/;\nvar numberRegex = /^[0-9]$/;\nvar symbolRegex = /^[-#!$@£%^&*()_+|~=`{}\\[\\]:\";'<>?,.\\/\\\\ ]$/;\nvar defaultOptions = {\n  minLength: 8,\n  minLowercase: 1,\n  minUppercase: 1,\n  minNumbers: 1,\n  minSymbols: 1,\n  returnScore: false,\n  pointsPerUnique: 1,\n  pointsPerRepeat: 0.5,\n  pointsForContainingLower: 10,\n  pointsForContainingUpper: 10,\n  pointsForContainingNumber: 10,\n  pointsForContainingSymbol: 10\n};\n\n/* Counts number of occurrences of each char in a string\n * could be moved to util/ ?\n*/\nfunction countChars(str) {\n  var result = {};\n  Array.from(str).forEach(function (char) {\n    var curVal = result[char];\n    if (curVal) {\n      result[char] += 1;\n    } else {\n      result[char] = 1;\n    }\n  });\n  return result;\n}\n\n/* Return information about a password */\nfunction analyzePassword(password) {\n  var charMap = countChars(password);\n  var analysis = {\n    length: password.length,\n    uniqueChars: Object.keys(charMap).length,\n    uppercaseCount: 0,\n    lowercaseCount: 0,\n    numberCount: 0,\n    symbolCount: 0\n  };\n  Object.keys(charMap).forEach(function (char) {\n    /* istanbul ignore else */\n    if (upperCaseRegex.test(char)) {\n      analysis.uppercaseCount += charMap[char];\n    } else if (lowerCaseRegex.test(char)) {\n      analysis.lowercaseCount += charMap[char];\n    } else if (numberRegex.test(char)) {\n      analysis.numberCount += charMap[char];\n    } else if (symbolRegex.test(char)) {\n      analysis.symbolCount += charMap[char];\n    }\n  });\n  return analysis;\n}\nfunction scorePassword(analysis, scoringOptions) {\n  var points = 0;\n  points += analysis.uniqueChars * scoringOptions.pointsPerUnique;\n  points += (analysis.length - analysis.uniqueChars) * scoringOptions.pointsPerRepeat;\n  if (analysis.lowercaseCount > 0) {\n    points += scoringOptions.pointsForContainingLower;\n  }\n  if (analysis.uppercaseCount > 0) {\n    points += scoringOptions.pointsForContainingUpper;\n  }\n  if (analysis.numberCount > 0) {\n    points += scoringOptions.pointsForContainingNumber;\n  }\n  if (analysis.symbolCount > 0) {\n    points += scoringOptions.pointsForContainingSymbol;\n  }\n  return points;\n}\nfunction isStrongPassword(str) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  (0, _assertString.default)(str);\n  var analysis = analyzePassword(str);\n  options = (0, _merge.default)(options || {}, defaultOptions);\n  if (options.returnScore) {\n    return scorePassword(analysis, options);\n  }\n  return analysis.length >= options.minLength && analysis.lowercaseCount >= options.minLowercase && analysis.uppercaseCount >= options.minUppercase && analysis.numberCount >= options.minNumbers && analysis.symbolCount >= options.minSymbols;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMagnetURI;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar magnetURIComponent = /(?:^magnet:\\?|[^?&]&)xt(?:\\.1)?=urn:(?:(?:aich|bitprint|btih|ed2k|ed2khash|kzhash|md5|sha1|tree:tiger):[a-z0-9]{32}(?:[a-z0-9]{8})?|btmh:1220[a-z0-9]{64})(?:$|&)/i;\nfunction isMagnetURI(url) {\n  (0, _assertString.default)(url);\n  if (url.indexOf('magnet:?') !== 0) {\n    return false;\n  }\n  return magnetURIComponent.test(url);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLowercase;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isLowercase(str) {\n  (0, _assertString.default)(str);\n  return str === str.toLowerCase();\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isFQDN;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar default_fqdn_options = {\n  require_tld: true,\n  allow_underscores: false,\n  allow_trailing_dot: false,\n  allow_numeric_tld: false,\n  allow_wildcard: false,\n  ignore_max_length: false\n};\nfunction isFQDN(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, default_fqdn_options);\n\n  /* Remove the optional trailing dot before checking validity */\n  if (options.allow_trailing_dot && str[str.length - 1] === '.') {\n    str = str.substring(0, str.length - 1);\n  }\n\n  /* Remove the optional wildcard before checking validity */\n  if (options.allow_wildcard === true && str.indexOf('*.') === 0) {\n    str = str.substring(2);\n  }\n  var parts = str.split('.');\n  var tld = parts[parts.length - 1];\n  if (options.require_tld) {\n    // disallow fqdns without tld\n    if (parts.length < 2) {\n      return false;\n    }\n    if (!options.allow_numeric_tld && !/^([a-z\\u00A1-\\u00A8\\u00AA-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {\n      return false;\n    }\n\n    // disallow spaces\n    if (/\\s/.test(tld)) {\n      return false;\n    }\n  }\n\n  // reject numeric TLDs\n  if (!options.allow_numeric_tld && /^\\d+$/.test(tld)) {\n    return false;\n  }\n  return parts.every(function (part) {\n    if (part.length > 63 && !options.ignore_max_length) {\n      return false;\n    }\n    if (!/^[a-z_\\u00a1-\\uffff0-9-]+$/i.test(part)) {\n      return false;\n    }\n\n    // disallow full-width chars\n    if (/[\\uff01-\\uff5e]/.test(part)) {\n      return false;\n    }\n\n    // disallow parts starting or ending with hyphen\n    if (/^-|-$/.test(part)) {\n      return false;\n    }\n    if (!options.allow_underscores && /_/.test(part)) {\n      return false;\n    }\n    return true;\n  });\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBase32;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar base32 = /^[A-Z2-7]+=*$/;\nvar crockfordBase32 = /^[A-HJKMNP-TV-Z0-9]+$/;\nvar defaultBase32Options = {\n  crockford: false\n};\nfunction isBase32(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, defaultBase32Options);\n  if (options.crockford) {\n    return crockfordBase32.test(str);\n  }\n  var len = str.length;\n  if (len % 8 === 0 && base32.test(str)) {\n    return true;\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = unescape;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction unescape(str) {\n  (0, _assertString.default)(str);\n  return str.replace(/&quot;/g, '\"').replace(/&#x27;/g, \"'\").replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&#x2F;/g, '/').replace(/&#x5C;/g, '\\\\').replace(/&#96;/g, '`').replace(/&amp;/g, '&');\n  // &amp; replacement has to be the last one to prevent\n  // bugs with intermediate strings containing escape sequences\n  // See: https://github.com/validatorjs/validator.js/issues/1827\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isEAN;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/**\n * The most commonly used EAN standard is\n * the thirteen-digit EAN-13, while the\n * less commonly used 8-digit EAN-8 barcode was\n * introduced for use on small packages.\n * Also EAN/UCC-14 is used for Grouping of individual\n * trade items above unit level(Intermediate, Carton or Pallet).\n * For more info about EAN-14 checkout: https://www.gtin.info/itf-14-barcodes/\n * EAN consists of:\n * GS1 prefix, manufacturer code, product code and check digit\n * Reference: https://en.wikipedia.org/wiki/International_Article_Number\n * Reference: https://www.gtin.info/\n */\n\n/**\n * Define EAN Lengths; 8 for EAN-8; 13 for EAN-13; 14 for EAN-14\n * and Regular Expression for valid EANs (EAN-8, EAN-13, EAN-14),\n * with exact numeric matching of 8 or 13 or 14 digits [0-9]\n */\nvar LENGTH_EAN_8 = 8;\nvar LENGTH_EAN_14 = 14;\nvar validEanRegex = /^(\\d{8}|\\d{13}|\\d{14})$/;\n\n/**\n * Get position weight given:\n * EAN length and digit index/position\n *\n * @param {number} length\n * @param {number} index\n * @return {number}\n */\nfunction getPositionWeightThroughLengthAndIndex(length, index) {\n  if (length === LENGTH_EAN_8 || length === LENGTH_EAN_14) {\n    return index % 2 === 0 ? 3 : 1;\n  }\n  return index % 2 === 0 ? 1 : 3;\n}\n\n/**\n * Calculate EAN Check Digit\n * Reference: https://en.wikipedia.org/wiki/International_Article_Number#Calculation_of_checksum_digit\n *\n * @param {string} ean\n * @return {number}\n */\nfunction calculateCheckDigit(ean) {\n  var checksum = ean.slice(0, -1).split('').map(function (char, index) {\n    return Number(char) * getPositionWeightThroughLengthAndIndex(ean.length, index);\n  }).reduce(function (acc, partialSum) {\n    return acc + partialSum;\n  }, 0);\n  var remainder = 10 - checksum % 10;\n  return remainder < 10 ? remainder : 0;\n}\n\n/**\n * Check if string is valid EAN:\n * Matches EAN-8/EAN-13/EAN-14 regex\n * Has valid check digit.\n *\n * @param {string} str\n * @return {boolean}\n */\nfunction isEAN(str) {\n  (0, _assertString.default)(str);\n  var actualCheckDigit = Number(str.slice(-1));\n  return validEanRegex.test(str) && actualCheckDigit === calculateCheckDigit(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isTaxID;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar algorithms = _interopRequireWildcard(require(\"./util/algorithms\"));\nvar _isDate = _interopRequireDefault(require(\"./isDate\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n/**\n * TIN Validation\n * Validates Tax Identification Numbers (TINs) from the US, EU member states and the United Kingdom.\n *\n * EU-UK:\n * National TIN validity is calculated using public algorithms as made available by DG TAXUD.\n *\n * See `https://ec.europa.eu/taxation_customs/tin/specs/FS-TIN%20Algorithms-Public.docx` for more information.\n *\n * US:\n * An Employer Identification Number (EIN), also known as a Federal Tax Identification Number,\n *  is used to identify a business entity.\n *\n * NOTES:\n *  - Prefix 47 is being reserved for future use\n *  - Prefixes 26, 27, 45, 46 and 47 were previously assigned by the Philadelphia campus.\n *\n * See `http://www.irs.gov/Businesses/Small-Businesses-&-Self-Employed/How-EINs-are-Assigned-and-Valid-EIN-Prefixes`\n * for more information.\n */\n\n// Locale functions\n\n/*\n * bg-BG validation function\n * (Edinen graždanski nomer (EGN/ЕГН), persons only)\n * Checks if birth date (first six digits) is valid and calculates check (last) digit\n */\nfunction bgBgCheck(tin) {\n  // Extract full year, normalize month and check birth date validity\n  var century_year = tin.slice(0, 2);\n  var month = parseInt(tin.slice(2, 4), 10);\n  if (month > 40) {\n    month -= 40;\n    century_year = \"20\".concat(century_year);\n  } else if (month > 20) {\n    month -= 20;\n    century_year = \"18\".concat(century_year);\n  } else {\n    century_year = \"19\".concat(century_year);\n  }\n  if (month < 10) {\n    month = \"0\".concat(month);\n  }\n  var date = \"\".concat(century_year, \"/\").concat(month, \"/\").concat(tin.slice(4, 6));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // split digits into an array for further processing\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n\n  // Calculate checksum by multiplying digits with fixed values\n  var multip_lookup = [2, 4, 8, 5, 10, 9, 7, 3, 6];\n  var checksum = 0;\n  for (var i = 0; i < multip_lookup.length; i++) {\n    checksum += digits[i] * multip_lookup[i];\n  }\n  checksum = checksum % 11 === 10 ? 0 : checksum % 11;\n  return checksum === digits[9];\n}\n\n/**\n * Check if an input is a valid Canadian SIN (Social Insurance Number)\n *\n * The Social Insurance Number (SIN) is a 9 digit number that\n * you need to work in Canada or to have access to government programs and benefits.\n *\n * https://en.wikipedia.org/wiki/Social_Insurance_Number\n * https://www.canada.ca/en/employment-social-development/services/sin.html\n * https://www.codercrunch.com/challenge/819302488/sin-validator\n *\n * @param {string} input\n * @return {boolean}\n */\nfunction isCanadianSIN(input) {\n  var digitsArray = input.split('');\n  var even = digitsArray.filter(function (_, idx) {\n    return idx % 2;\n  }).map(function (i) {\n    return Number(i) * 2;\n  }).join('').split('');\n  var total = digitsArray.filter(function (_, idx) {\n    return !(idx % 2);\n  }).concat(even).map(function (i) {\n    return Number(i);\n  }).reduce(function (acc, cur) {\n    return acc + cur;\n  });\n  return total % 10 === 0;\n}\n\n/*\n * cs-CZ validation function\n * (Rodné číslo (RČ), persons only)\n * Checks if birth date (first six digits) is valid and divisibility by 11\n * Material not in DG TAXUD document sourced from:\n * -`https://lorenc.info/3MA381/overeni-spravnosti-rodneho-cisla.htm`\n * -`https://www.mvcr.cz/clanek/rady-a-sluzby-dokumenty-rodne-cislo.aspx`\n */\nfunction csCzCheck(tin) {\n  tin = tin.replace(/\\W/, '');\n\n  // Extract full year from TIN length\n  var full_year = parseInt(tin.slice(0, 2), 10);\n  if (tin.length === 10) {\n    if (full_year < 54) {\n      full_year = \"20\".concat(full_year);\n    } else {\n      full_year = \"19\".concat(full_year);\n    }\n  } else {\n    if (tin.slice(6) === '000') {\n      return false;\n    } // Three-zero serial not assigned before 1954\n    if (full_year < 54) {\n      full_year = \"19\".concat(full_year);\n    } else {\n      return false; // No 18XX years seen in any of the resources\n    }\n  }\n  // Add missing zero if needed\n  if (full_year.length === 3) {\n    full_year = [full_year.slice(0, 2), '0', full_year.slice(2)].join('');\n  }\n\n  // Extract month from TIN and normalize\n  var month = parseInt(tin.slice(2, 4), 10);\n  if (month > 50) {\n    month -= 50;\n  }\n  if (month > 20) {\n    // Month-plus-twenty was only introduced in 2004\n    if (parseInt(full_year, 10) < 2004) {\n      return false;\n    }\n    month -= 20;\n  }\n  if (month < 10) {\n    month = \"0\".concat(month);\n  }\n\n  // Check date validity\n  var date = \"\".concat(full_year, \"/\").concat(month, \"/\").concat(tin.slice(4, 6));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // Verify divisibility by 11\n  if (tin.length === 10) {\n    if (parseInt(tin, 10) % 11 !== 0) {\n      // Some numbers up to and including 1985 are still valid if\n      // check (last) digit equals 0 and modulo of first 9 digits equals 10\n      var checkdigit = parseInt(tin.slice(0, 9), 10) % 11;\n      if (parseInt(full_year, 10) < 1986 && checkdigit === 10) {\n        if (parseInt(tin.slice(9), 10) !== 0) {\n          return false;\n        }\n      } else {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n/*\n * de-AT validation function\n * (Abgabenkontonummer, persons/entities)\n * Verify TIN validity by calling luhnCheck()\n */\nfunction deAtCheck(tin) {\n  return algorithms.luhnCheck(tin);\n}\n\n/*\n * de-DE validation function\n * (Steueridentifikationsnummer (Steuer-IdNr.), persons only)\n * Tests for single duplicate/triplicate value, then calculates ISO 7064 check (last) digit\n * Partial implementation of spec (same result with both algorithms always)\n */\nfunction deDeCheck(tin) {\n  // Split digits into an array for further processing\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n\n  // Fill array with strings of number positions\n  var occurrences = [];\n  for (var i = 0; i < digits.length - 1; i++) {\n    occurrences.push('');\n    for (var j = 0; j < digits.length - 1; j++) {\n      if (digits[i] === digits[j]) {\n        occurrences[i] += j;\n      }\n    }\n  }\n\n  // Remove digits with one occurrence and test for only one duplicate/triplicate\n  occurrences = occurrences.filter(function (a) {\n    return a.length > 1;\n  });\n  if (occurrences.length !== 2 && occurrences.length !== 3) {\n    return false;\n  }\n\n  // In case of triplicate value only two digits are allowed next to each other\n  if (occurrences[0].length === 3) {\n    var trip_locations = occurrences[0].split('').map(function (a) {\n      return parseInt(a, 10);\n    });\n    var recurrent = 0; // Amount of neighbor occurrences\n    for (var _i = 0; _i < trip_locations.length - 1; _i++) {\n      if (trip_locations[_i] + 1 === trip_locations[_i + 1]) {\n        recurrent += 1;\n      }\n    }\n    if (recurrent === 2) {\n      return false;\n    }\n  }\n  return algorithms.iso7064Check(tin);\n}\n\n/*\n * dk-DK validation function\n * (CPR-nummer (personnummer), persons only)\n * Checks if birth date (first six digits) is valid and assigned to century (seventh) digit,\n * and calculates check (last) digit\n */\nfunction dkDkCheck(tin) {\n  tin = tin.replace(/\\W/, '');\n\n  // Extract year, check if valid for given century digit and add century\n  var year = parseInt(tin.slice(4, 6), 10);\n  var century_digit = tin.slice(6, 7);\n  switch (century_digit) {\n    case '0':\n    case '1':\n    case '2':\n    case '3':\n      year = \"19\".concat(year);\n      break;\n    case '4':\n    case '9':\n      if (year < 37) {\n        year = \"20\".concat(year);\n      } else {\n        year = \"19\".concat(year);\n      }\n      break;\n    default:\n      if (year < 37) {\n        year = \"20\".concat(year);\n      } else if (year > 58) {\n        year = \"18\".concat(year);\n      } else {\n        return false;\n      }\n      break;\n  }\n  // Add missing zero if needed\n  if (year.length === 3) {\n    year = [year.slice(0, 2), '0', year.slice(2)].join('');\n  }\n  // Check date validity\n  var date = \"\".concat(year, \"/\").concat(tin.slice(2, 4), \"/\").concat(tin.slice(0, 2));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // Split digits into an array for further processing\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n  var checksum = 0;\n  var weight = 4;\n  // Multiply by weight and add to checksum\n  for (var i = 0; i < 9; i++) {\n    checksum += digits[i] * weight;\n    weight -= 1;\n    if (weight === 1) {\n      weight = 7;\n    }\n  }\n  checksum %= 11;\n  if (checksum === 1) {\n    return false;\n  }\n  return checksum === 0 ? digits[9] === 0 : digits[9] === 11 - checksum;\n}\n\n/*\n * el-CY validation function\n * (Arithmos Forologikou Mitroou (AFM/ΑΦΜ), persons only)\n * Verify TIN validity by calculating ASCII value of check (last) character\n */\nfunction elCyCheck(tin) {\n  // split digits into an array for further processing\n  var digits = tin.slice(0, 8).split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n  var checksum = 0;\n  // add digits in even places\n  for (var i = 1; i < digits.length; i += 2) {\n    checksum += digits[i];\n  }\n\n  // add digits in odd places\n  for (var _i2 = 0; _i2 < digits.length; _i2 += 2) {\n    if (digits[_i2] < 2) {\n      checksum += 1 - digits[_i2];\n    } else {\n      checksum += 2 * (digits[_i2] - 2) + 5;\n      if (digits[_i2] > 4) {\n        checksum += 2;\n      }\n    }\n  }\n  return String.fromCharCode(checksum % 26 + 65) === tin.charAt(8);\n}\n\n/*\n * el-GR validation function\n * (Arithmos Forologikou Mitroou (AFM/ΑΦΜ), persons/entities)\n * Verify TIN validity by calculating check (last) digit\n * Algorithm not in DG TAXUD document- sourced from:\n * - `http://epixeirisi.gr/%CE%9A%CE%A1%CE%99%CE%A3%CE%99%CE%9C%CE%91-%CE%98%CE%95%CE%9C%CE%91%CE%A4%CE%91-%CE%A6%CE%9F%CE%A1%CE%9F%CE%9B%CE%9F%CE%93%CE%99%CE%91%CE%A3-%CE%9A%CE%91%CE%99-%CE%9B%CE%9F%CE%93%CE%99%CE%A3%CE%A4%CE%99%CE%9A%CE%97%CE%A3/23791/%CE%91%CF%81%CE%B9%CE%B8%CE%BC%CF%8C%CF%82-%CE%A6%CE%BF%CF%81%CE%BF%CE%BB%CE%BF%CE%B3%CE%B9%CE%BA%CE%BF%CF%8D-%CE%9C%CE%B7%CF%84%CF%81%CF%8E%CE%BF%CF%85`\n */\nfunction elGrCheck(tin) {\n  // split digits into an array for further processing\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n  var checksum = 0;\n  for (var i = 0; i < 8; i++) {\n    checksum += digits[i] * Math.pow(2, 8 - i);\n  }\n  return checksum % 11 % 10 === digits[8];\n}\n\n/*\n * en-GB validation function (should go here if needed)\n * (National Insurance Number (NINO) or Unique Taxpayer Reference (UTR),\n * persons/entities respectively)\n */\n\n/*\n * en-IE validation function\n * (Personal Public Service Number (PPS No), persons only)\n * Verify TIN validity by calculating check (second to last) character\n */\nfunction enIeCheck(tin) {\n  var checksum = algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 7).map(function (a) {\n    return parseInt(a, 10);\n  }), 8);\n  if (tin.length === 9 && tin[8] !== 'W') {\n    checksum += (tin[8].charCodeAt(0) - 64) * 9;\n  }\n  checksum %= 23;\n  if (checksum === 0) {\n    return tin[7].toUpperCase() === 'W';\n  }\n  return tin[7].toUpperCase() === String.fromCharCode(64 + checksum);\n}\n\n// Valid US IRS campus prefixes\nvar enUsCampusPrefix = {\n  andover: ['10', '12'],\n  atlanta: ['60', '67'],\n  austin: ['50', '53'],\n  brookhaven: ['01', '02', '03', '04', '05', '06', '11', '13', '14', '16', '21', '22', '23', '25', '34', '51', '52', '54', '55', '56', '57', '58', '59', '65'],\n  cincinnati: ['30', '32', '35', '36', '37', '38', '61'],\n  fresno: ['15', '24'],\n  internet: ['20', '26', '27', '45', '46', '47'],\n  kansas: ['40', '44'],\n  memphis: ['94', '95'],\n  ogden: ['80', '90'],\n  philadelphia: ['33', '39', '41', '42', '43', '46', '48', '62', '63', '64', '66', '68', '71', '72', '73', '74', '75', '76', '77', '81', '82', '83', '84', '85', '86', '87', '88', '91', '92', '93', '98', '99'],\n  sba: ['31']\n};\n\n// Return an array of all US IRS campus prefixes\nfunction enUsGetPrefixes() {\n  var prefixes = [];\n  for (var location in enUsCampusPrefix) {\n    // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes\n    // istanbul ignore else\n    if (enUsCampusPrefix.hasOwnProperty(location)) {\n      prefixes.push.apply(prefixes, _toConsumableArray(enUsCampusPrefix[location]));\n    }\n  }\n  return prefixes;\n}\n\n/*\n * en-US validation function\n * Verify that the TIN starts with a valid IRS campus prefix\n */\nfunction enUsCheck(tin) {\n  return enUsGetPrefixes().indexOf(tin.slice(0, 2)) !== -1;\n}\n\n/*\n * es-AR validation function\n * Clave Única de Identificación Tributaria (CUIT/CUIL)\n * Sourced from:\n * - https://servicioscf.afip.gob.ar/publico/abc/ABCpaso2.aspx?id_nivel1=3036&id_nivel2=3040&p=Conceptos%20b%C3%A1sicos\n * - https://es.wikipedia.org/wiki/Clave_%C3%9Anica_de_Identificaci%C3%B3n_Tributaria\n */\n\nfunction esArCheck(tin) {\n  var accum = 0;\n  var digits = tin.split('');\n  var digit = parseInt(digits.pop(), 10);\n  for (var i = 0; i < digits.length; i++) {\n    accum += digits[9 - i] * (2 + i % 6);\n  }\n  var verif = 11 - accum % 11;\n  if (verif === 11) {\n    verif = 0;\n  } else if (verif === 10) {\n    verif = 9;\n  }\n  return digit === verif;\n}\n\n/*\n * es-ES validation function\n * (Documento Nacional de Identidad (DNI)\n * or Número de Identificación de Extranjero (NIE), persons only)\n * Verify TIN validity by calculating check (last) character\n */\nfunction esEsCheck(tin) {\n  // Split characters into an array for further processing\n  var chars = tin.toUpperCase().split('');\n\n  // Replace initial letter if needed\n  if (isNaN(parseInt(chars[0], 10)) && chars.length > 1) {\n    var lead_replace = 0;\n    switch (chars[0]) {\n      case 'Y':\n        lead_replace = 1;\n        break;\n      case 'Z':\n        lead_replace = 2;\n        break;\n      default:\n    }\n    chars.splice(0, 1, lead_replace);\n    // Fill with zeros if smaller than proper\n  } else {\n    while (chars.length < 9) {\n      chars.unshift(0);\n    }\n  }\n\n  // Calculate checksum and check according to lookup\n  var lookup = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E'];\n  chars = chars.join('');\n  var checksum = parseInt(chars.slice(0, 8), 10) % 23;\n  return chars[8] === lookup[checksum];\n}\n\n/*\n * et-EE validation function\n * (Isikukood (IK), persons only)\n * Checks if birth date (century digit and six following) is valid and calculates check (last) digit\n * Material not in DG TAXUD document sourced from:\n * - `https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Estonia-TIN.pdf`\n */\nfunction etEeCheck(tin) {\n  // Extract year and add century\n  var full_year = tin.slice(1, 3);\n  var century_digit = tin.slice(0, 1);\n  switch (century_digit) {\n    case '1':\n    case '2':\n      full_year = \"18\".concat(full_year);\n      break;\n    case '3':\n    case '4':\n      full_year = \"19\".concat(full_year);\n      break;\n    default:\n      full_year = \"20\".concat(full_year);\n      break;\n  }\n  // Check date validity\n  var date = \"\".concat(full_year, \"/\").concat(tin.slice(3, 5), \"/\").concat(tin.slice(5, 7));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // Split digits into an array for further processing\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n  var checksum = 0;\n  var weight = 1;\n  // Multiply by weight and add to checksum\n  for (var i = 0; i < 10; i++) {\n    checksum += digits[i] * weight;\n    weight += 1;\n    if (weight === 10) {\n      weight = 1;\n    }\n  }\n  // Do again if modulo 11 of checksum is 10\n  if (checksum % 11 === 10) {\n    checksum = 0;\n    weight = 3;\n    for (var _i3 = 0; _i3 < 10; _i3++) {\n      checksum += digits[_i3] * weight;\n      weight += 1;\n      if (weight === 10) {\n        weight = 1;\n      }\n    }\n    if (checksum % 11 === 10) {\n      return digits[10] === 0;\n    }\n  }\n  return checksum % 11 === digits[10];\n}\n\n/*\n * fi-FI validation function\n * (Henkilötunnus (HETU), persons only)\n * Checks if birth date (first six digits plus century symbol) is valid\n * and calculates check (last) digit\n */\nfunction fiFiCheck(tin) {\n  // Extract year and add century\n  var full_year = tin.slice(4, 6);\n  var century_symbol = tin.slice(6, 7);\n  switch (century_symbol) {\n    case '+':\n      full_year = \"18\".concat(full_year);\n      break;\n    case '-':\n      full_year = \"19\".concat(full_year);\n      break;\n    default:\n      full_year = \"20\".concat(full_year);\n      break;\n  }\n  // Check date validity\n  var date = \"\".concat(full_year, \"/\").concat(tin.slice(2, 4), \"/\").concat(tin.slice(0, 2));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // Calculate check character\n  var checksum = parseInt(tin.slice(0, 6) + tin.slice(7, 10), 10) % 31;\n  if (checksum < 10) {\n    return checksum === parseInt(tin.slice(10), 10);\n  }\n  checksum -= 10;\n  var letters_lookup = ['A', 'B', 'C', 'D', 'E', 'F', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y'];\n  return letters_lookup[checksum] === tin.slice(10);\n}\n\n/*\n * fr/nl-BE validation function\n * (Numéro national (N.N.), persons only)\n * Checks if birth date (first six digits) is valid and calculates check (last two) digits\n */\nfunction frBeCheck(tin) {\n  // Zero month/day value is acceptable\n  if (tin.slice(2, 4) !== '00' || tin.slice(4, 6) !== '00') {\n    // Extract date from first six digits of TIN\n    var date = \"\".concat(tin.slice(0, 2), \"/\").concat(tin.slice(2, 4), \"/\").concat(tin.slice(4, 6));\n    if (!(0, _isDate.default)(date, 'YY/MM/DD')) {\n      return false;\n    }\n  }\n  var checksum = 97 - parseInt(tin.slice(0, 9), 10) % 97;\n  var checkdigits = parseInt(tin.slice(9, 11), 10);\n  if (checksum !== checkdigits) {\n    checksum = 97 - parseInt(\"2\".concat(tin.slice(0, 9)), 10) % 97;\n    if (checksum !== checkdigits) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/*\n * fr-FR validation function\n * (Numéro fiscal de référence (numéro SPI), persons only)\n * Verify TIN validity by calculating check (last three) digits\n */\nfunction frFrCheck(tin) {\n  tin = tin.replace(/\\s/g, '');\n  var checksum = parseInt(tin.slice(0, 10), 10) % 511;\n  var checkdigits = parseInt(tin.slice(10, 13), 10);\n  return checksum === checkdigits;\n}\n\n/*\n * fr/lb-LU validation function\n * (numéro d’identification personnelle, persons only)\n * Verify birth date validity and run Luhn and Verhoeff checks\n */\nfunction frLuCheck(tin) {\n  // Extract date and check validity\n  var date = \"\".concat(tin.slice(0, 4), \"/\").concat(tin.slice(4, 6), \"/\").concat(tin.slice(6, 8));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // Run Luhn check\n  if (!algorithms.luhnCheck(tin.slice(0, 12))) {\n    return false;\n  }\n  // Remove Luhn check digit and run Verhoeff check\n  return algorithms.verhoeffCheck(\"\".concat(tin.slice(0, 11)).concat(tin[12]));\n}\n\n/*\n * hr-HR validation function\n * (Osobni identifikacijski broj (OIB), persons/entities)\n * Verify TIN validity by calling iso7064Check(digits)\n */\nfunction hrHrCheck(tin) {\n  return algorithms.iso7064Check(tin);\n}\n\n/*\n * hu-HU validation function\n * (Adóazonosító jel, persons only)\n * Verify TIN validity by calculating check (last) digit\n */\nfunction huHuCheck(tin) {\n  // split digits into an array for further processing\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n  var checksum = 8;\n  for (var i = 1; i < 9; i++) {\n    checksum += digits[i] * (i + 1);\n  }\n  return checksum % 11 === digits[9];\n}\n\n/*\n * lt-LT validation function (should go here if needed)\n * (Asmens kodas, persons/entities respectively)\n * Current validation check is alias of etEeCheck- same format applies\n */\n\n/*\n * it-IT first/last name validity check\n * Accepts it-IT TIN-encoded names as a three-element character array and checks their validity\n * Due to lack of clarity between resources (\"Are only Italian consonants used?\n * What happens if a person has X in their name?\" etc.) only two test conditions\n * have been implemented:\n * Vowels may only be followed by other vowels or an X character\n * and X characters after vowels may only be followed by other X characters.\n */\nfunction itItNameCheck(name) {\n  // true at the first occurrence of a vowel\n  var vowelflag = false;\n\n  // true at the first occurrence of an X AFTER vowel\n  // (to properly handle last names with X as consonant)\n  var xflag = false;\n  for (var i = 0; i < 3; i++) {\n    if (!vowelflag && /[AEIOU]/.test(name[i])) {\n      vowelflag = true;\n    } else if (!xflag && vowelflag && name[i] === 'X') {\n      xflag = true;\n    } else if (i > 0) {\n      if (vowelflag && !xflag) {\n        if (!/[AEIOU]/.test(name[i])) {\n          return false;\n        }\n      }\n      if (xflag) {\n        if (!/X/.test(name[i])) {\n          return false;\n        }\n      }\n    }\n  }\n  return true;\n}\n\n/*\n * it-IT validation function\n * (Codice fiscale (TIN-IT), persons only)\n * Verify name, birth date and codice catastale validity\n * and calculate check character.\n * Material not in DG-TAXUD document sourced from:\n * `https://en.wikipedia.org/wiki/Italian_fiscal_code`\n */\nfunction itItCheck(tin) {\n  // Capitalize and split characters into an array for further processing\n  var chars = tin.toUpperCase().split('');\n\n  // Check first and last name validity calling itItNameCheck()\n  if (!itItNameCheck(chars.slice(0, 3))) {\n    return false;\n  }\n  if (!itItNameCheck(chars.slice(3, 6))) {\n    return false;\n  }\n\n  // Convert letters in number spaces back to numbers if any\n  var number_locations = [6, 7, 9, 10, 12, 13, 14];\n  var number_replace = {\n    L: '0',\n    M: '1',\n    N: '2',\n    P: '3',\n    Q: '4',\n    R: '5',\n    S: '6',\n    T: '7',\n    U: '8',\n    V: '9'\n  };\n  for (var _i4 = 0, _number_locations = number_locations; _i4 < _number_locations.length; _i4++) {\n    var i = _number_locations[_i4];\n    if (chars[i] in number_replace) {\n      chars.splice(i, 1, number_replace[chars[i]]);\n    }\n  }\n\n  // Extract month and day, and check date validity\n  var month_replace = {\n    A: '01',\n    B: '02',\n    C: '03',\n    D: '04',\n    E: '05',\n    H: '06',\n    L: '07',\n    M: '08',\n    P: '09',\n    R: '10',\n    S: '11',\n    T: '12'\n  };\n  var month = month_replace[chars[8]];\n  var day = parseInt(chars[9] + chars[10], 10);\n  if (day > 40) {\n    day -= 40;\n  }\n  if (day < 10) {\n    day = \"0\".concat(day);\n  }\n  var date = \"\".concat(chars[6]).concat(chars[7], \"/\").concat(month, \"/\").concat(day);\n  if (!(0, _isDate.default)(date, 'YY/MM/DD')) {\n    return false;\n  }\n\n  // Calculate check character by adding up even and odd characters as numbers\n  var checksum = 0;\n  for (var _i5 = 1; _i5 < chars.length - 1; _i5 += 2) {\n    var char_to_int = parseInt(chars[_i5], 10);\n    if (isNaN(char_to_int)) {\n      char_to_int = chars[_i5].charCodeAt(0) - 65;\n    }\n    checksum += char_to_int;\n  }\n  var odd_convert = {\n    // Maps of characters at odd places\n    A: 1,\n    B: 0,\n    C: 5,\n    D: 7,\n    E: 9,\n    F: 13,\n    G: 15,\n    H: 17,\n    I: 19,\n    J: 21,\n    K: 2,\n    L: 4,\n    M: 18,\n    N: 20,\n    O: 11,\n    P: 3,\n    Q: 6,\n    R: 8,\n    S: 12,\n    T: 14,\n    U: 16,\n    V: 10,\n    W: 22,\n    X: 25,\n    Y: 24,\n    Z: 23,\n    0: 1,\n    1: 0\n  };\n  for (var _i6 = 0; _i6 < chars.length - 1; _i6 += 2) {\n    var _char_to_int = 0;\n    if (chars[_i6] in odd_convert) {\n      _char_to_int = odd_convert[chars[_i6]];\n    } else {\n      var multiplier = parseInt(chars[_i6], 10);\n      _char_to_int = 2 * multiplier + 1;\n      if (multiplier > 4) {\n        _char_to_int += 2;\n      }\n    }\n    checksum += _char_to_int;\n  }\n  if (String.fromCharCode(65 + checksum % 26) !== chars[15]) {\n    return false;\n  }\n  return true;\n}\n\n/*\n * lv-LV validation function\n * (Personas kods (PK), persons only)\n * Check validity of birth date and calculate check (last) digit\n * Support only for old format numbers (not starting with '32', issued before 2017/07/01)\n * Material not in DG TAXUD document sourced from:\n * `https://boot.ritakafija.lv/forums/index.php?/topic/88314-personas-koda-algoritms-%C4%8Deksumma/`\n */\nfunction lvLvCheck(tin) {\n  tin = tin.replace(/\\W/, '');\n  // Extract date from TIN\n  var day = tin.slice(0, 2);\n  if (day !== '32') {\n    // No date/checksum check if new format\n    var month = tin.slice(2, 4);\n    if (month !== '00') {\n      // No date check if unknown month\n      var full_year = tin.slice(4, 6);\n      switch (tin[6]) {\n        case '0':\n          full_year = \"18\".concat(full_year);\n          break;\n        case '1':\n          full_year = \"19\".concat(full_year);\n          break;\n        default:\n          full_year = \"20\".concat(full_year);\n          break;\n      }\n      // Check date validity\n      var date = \"\".concat(full_year, \"/\").concat(tin.slice(2, 4), \"/\").concat(day);\n      if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n        return false;\n      }\n    }\n\n    // Calculate check digit\n    var checksum = 1101;\n    var multip_lookup = [1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n    for (var i = 0; i < tin.length - 1; i++) {\n      checksum -= parseInt(tin[i], 10) * multip_lookup[i];\n    }\n    return parseInt(tin[10], 10) === checksum % 11;\n  }\n  return true;\n}\n\n/*\n * mt-MT validation function\n * (Identity Card Number or Unique Taxpayer Reference, persons/entities)\n * Verify Identity Card Number structure (no other tests found)\n */\nfunction mtMtCheck(tin) {\n  if (tin.length !== 9) {\n    // No tests for UTR\n    var chars = tin.toUpperCase().split('');\n    // Fill with zeros if smaller than proper\n    while (chars.length < 8) {\n      chars.unshift(0);\n    }\n    // Validate format according to last character\n    switch (tin[7]) {\n      case 'A':\n      case 'P':\n        if (parseInt(chars[6], 10) === 0) {\n          return false;\n        }\n        break;\n      default:\n        {\n          var first_part = parseInt(chars.join('').slice(0, 5), 10);\n          if (first_part > 32000) {\n            return false;\n          }\n          var second_part = parseInt(chars.join('').slice(5, 7), 10);\n          if (first_part === second_part) {\n            return false;\n          }\n        }\n    }\n  }\n  return true;\n}\n\n/*\n * nl-NL validation function\n * (Burgerservicenummer (BSN) or Rechtspersonen Samenwerkingsverbanden Informatie Nummer (RSIN),\n * persons/entities respectively)\n * Verify TIN validity by calculating check (last) digit (variant of MOD 11)\n */\nfunction nlNlCheck(tin) {\n  return algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 8).map(function (a) {\n    return parseInt(a, 10);\n  }), 9) % 11 === parseInt(tin[8], 10);\n}\n\n/*\n * pl-PL validation function\n * (Powszechny Elektroniczny System Ewidencji Ludności (PESEL)\n * or Numer identyfikacji podatkowej (NIP), persons/entities)\n * Verify TIN validity by validating birth date (PESEL) and calculating check (last) digit\n */\nfunction plPlCheck(tin) {\n  // NIP\n  if (tin.length === 10) {\n    // Calculate last digit by multiplying with lookup\n    var lookup = [6, 5, 7, 2, 3, 4, 5, 6, 7];\n    var _checksum = 0;\n    for (var i = 0; i < lookup.length; i++) {\n      _checksum += parseInt(tin[i], 10) * lookup[i];\n    }\n    _checksum %= 11;\n    if (_checksum === 10) {\n      return false;\n    }\n    return _checksum === parseInt(tin[9], 10);\n  }\n\n  // PESEL\n  // Extract full year using month\n  var full_year = tin.slice(0, 2);\n  var month = parseInt(tin.slice(2, 4), 10);\n  if (month > 80) {\n    full_year = \"18\".concat(full_year);\n    month -= 80;\n  } else if (month > 60) {\n    full_year = \"22\".concat(full_year);\n    month -= 60;\n  } else if (month > 40) {\n    full_year = \"21\".concat(full_year);\n    month -= 40;\n  } else if (month > 20) {\n    full_year = \"20\".concat(full_year);\n    month -= 20;\n  } else {\n    full_year = \"19\".concat(full_year);\n  }\n  // Add leading zero to month if needed\n  if (month < 10) {\n    month = \"0\".concat(month);\n  }\n  // Check date validity\n  var date = \"\".concat(full_year, \"/\").concat(month, \"/\").concat(tin.slice(4, 6));\n  if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n\n  // Calculate last digit by multiplying with odd one-digit numbers except 5\n  var checksum = 0;\n  var multiplier = 1;\n  for (var _i7 = 0; _i7 < tin.length - 1; _i7++) {\n    checksum += parseInt(tin[_i7], 10) * multiplier % 10;\n    multiplier += 2;\n    if (multiplier > 10) {\n      multiplier = 1;\n    } else if (multiplier === 5) {\n      multiplier += 2;\n    }\n  }\n  checksum = 10 - checksum % 10;\n  return checksum === parseInt(tin[10], 10);\n}\n\n/*\n* pt-BR validation function\n* (Cadastro de Pessoas Físicas (CPF, persons)\n* Cadastro Nacional de Pessoas Jurídicas (CNPJ, entities)\n* Both inputs will be validated\n*/\n\nfunction ptBrCheck(tin) {\n  if (tin.length === 11) {\n    var _sum;\n    var remainder;\n    _sum = 0;\n    if (\n    // Reject known invalid CPFs\n    tin === '11111111111' || tin === '22222222222' || tin === '33333333333' || tin === '44444444444' || tin === '55555555555' || tin === '66666666666' || tin === '77777777777' || tin === '88888888888' || tin === '99999999999' || tin === '00000000000') return false;\n    for (var i = 1; i <= 9; i++) _sum += parseInt(tin.substring(i - 1, i), 10) * (11 - i);\n    remainder = _sum * 10 % 11;\n    if (remainder === 10) remainder = 0;\n    if (remainder !== parseInt(tin.substring(9, 10), 10)) return false;\n    _sum = 0;\n    for (var _i8 = 1; _i8 <= 10; _i8++) _sum += parseInt(tin.substring(_i8 - 1, _i8), 10) * (12 - _i8);\n    remainder = _sum * 10 % 11;\n    if (remainder === 10) remainder = 0;\n    if (remainder !== parseInt(tin.substring(10, 11), 10)) return false;\n    return true;\n  }\n  if (\n  // Reject know invalid CNPJs\n  tin === '00000000000000' || tin === '11111111111111' || tin === '22222222222222' || tin === '33333333333333' || tin === '44444444444444' || tin === '55555555555555' || tin === '66666666666666' || tin === '77777777777777' || tin === '88888888888888' || tin === '99999999999999') {\n    return false;\n  }\n  var length = tin.length - 2;\n  var identifiers = tin.substring(0, length);\n  var verificators = tin.substring(length);\n  var sum = 0;\n  var pos = length - 7;\n  for (var _i9 = length; _i9 >= 1; _i9--) {\n    sum += identifiers.charAt(length - _i9) * pos;\n    pos -= 1;\n    if (pos < 2) {\n      pos = 9;\n    }\n  }\n  var result = sum % 11 < 2 ? 0 : 11 - sum % 11;\n  if (result !== parseInt(verificators.charAt(0), 10)) {\n    return false;\n  }\n  length += 1;\n  identifiers = tin.substring(0, length);\n  sum = 0;\n  pos = length - 7;\n  for (var _i0 = length; _i0 >= 1; _i0--) {\n    sum += identifiers.charAt(length - _i0) * pos;\n    pos -= 1;\n    if (pos < 2) {\n      pos = 9;\n    }\n  }\n  result = sum % 11 < 2 ? 0 : 11 - sum % 11;\n  if (result !== parseInt(verificators.charAt(1), 10)) {\n    return false;\n  }\n  return true;\n}\n\n/*\n * pt-PT validation function\n * (Número de identificação fiscal (NIF), persons/entities)\n * Verify TIN validity by calculating check (last) digit (variant of MOD 11)\n */\nfunction ptPtCheck(tin) {\n  var checksum = 11 - algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 8).map(function (a) {\n    return parseInt(a, 10);\n  }), 9) % 11;\n  if (checksum > 9) {\n    return parseInt(tin[8], 10) === 0;\n  }\n  return checksum === parseInt(tin[8], 10);\n}\n\n/*\n * ro-RO validation function\n * (Cod Numeric Personal (CNP) or Cod de înregistrare fiscală (CIF),\n * persons only)\n * Verify CNP validity by calculating check (last) digit (test not found for CIF)\n * Material not in DG TAXUD document sourced from:\n * `https://en.wikipedia.org/wiki/National_identification_number#Romania`\n */\nfunction roRoCheck(tin) {\n  if (tin.slice(0, 4) !== '9000') {\n    // No test found for this format\n    // Extract full year using century digit if possible\n    var full_year = tin.slice(1, 3);\n    switch (tin[0]) {\n      case '1':\n      case '2':\n        full_year = \"19\".concat(full_year);\n        break;\n      case '3':\n      case '4':\n        full_year = \"18\".concat(full_year);\n        break;\n      case '5':\n      case '6':\n        full_year = \"20\".concat(full_year);\n        break;\n      default:\n    }\n\n    // Check date validity\n    var date = \"\".concat(full_year, \"/\").concat(tin.slice(3, 5), \"/\").concat(tin.slice(5, 7));\n    if (date.length === 8) {\n      if (!(0, _isDate.default)(date, 'YY/MM/DD')) {\n        return false;\n      }\n    } else if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n      return false;\n    }\n\n    // Calculate check digit\n    var digits = tin.split('').map(function (a) {\n      return parseInt(a, 10);\n    });\n    var multipliers = [2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9];\n    var checksum = 0;\n    for (var i = 0; i < multipliers.length; i++) {\n      checksum += digits[i] * multipliers[i];\n    }\n    if (checksum % 11 === 10) {\n      return digits[12] === 1;\n    }\n    return digits[12] === checksum % 11;\n  }\n  return true;\n}\n\n/*\n * sk-SK validation function\n * (Rodné číslo (RČ) or bezvýznamové identifikačné číslo (BIČ), persons only)\n * Checks validity of pre-1954 birth numbers (rodné číslo) only\n * Due to the introduction of the pseudo-random BIČ it is not possible to test\n * post-1954 birth numbers without knowing whether they are BIČ or RČ beforehand\n */\nfunction skSkCheck(tin) {\n  if (tin.length === 9) {\n    tin = tin.replace(/\\W/, '');\n    if (tin.slice(6) === '000') {\n      return false;\n    } // Three-zero serial not assigned before 1954\n\n    // Extract full year from TIN length\n    var full_year = parseInt(tin.slice(0, 2), 10);\n    if (full_year > 53) {\n      return false;\n    }\n    if (full_year < 10) {\n      full_year = \"190\".concat(full_year);\n    } else {\n      full_year = \"19\".concat(full_year);\n    }\n\n    // Extract month from TIN and normalize\n    var month = parseInt(tin.slice(2, 4), 10);\n    if (month > 50) {\n      month -= 50;\n    }\n    if (month < 10) {\n      month = \"0\".concat(month);\n    }\n\n    // Check date validity\n    var date = \"\".concat(full_year, \"/\").concat(month, \"/\").concat(tin.slice(4, 6));\n    if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/*\n * sl-SI validation function\n * (Davčna številka, persons/entities)\n * Verify TIN validity by calculating check (last) digit (variant of MOD 11)\n */\nfunction slSiCheck(tin) {\n  var checksum = 11 - algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 7).map(function (a) {\n    return parseInt(a, 10);\n  }), 8) % 11;\n  if (checksum === 10) {\n    return parseInt(tin[7], 10) === 0;\n  }\n  return checksum === parseInt(tin[7], 10);\n}\n\n/*\n * sv-SE validation function\n * (Personnummer or samordningsnummer, persons only)\n * Checks validity of birth date and calls luhnCheck() to validate check (last) digit\n */\nfunction svSeCheck(tin) {\n  // Make copy of TIN and normalize to two-digit year form\n  var tin_copy = tin.slice(0);\n  if (tin.length > 11) {\n    tin_copy = tin_copy.slice(2);\n  }\n\n  // Extract date of birth\n  var full_year = '';\n  var month = tin_copy.slice(2, 4);\n  var day = parseInt(tin_copy.slice(4, 6), 10);\n  if (tin.length > 11) {\n    full_year = tin.slice(0, 4);\n  } else {\n    full_year = tin.slice(0, 2);\n    if (tin.length === 11 && day < 60) {\n      // Extract full year from centenarian symbol\n      // Should work just fine until year 10000 or so\n      var current_year = new Date().getFullYear().toString();\n      var current_century = parseInt(current_year.slice(0, 2), 10);\n      current_year = parseInt(current_year, 10);\n      if (tin[6] === '-') {\n        if (parseInt(\"\".concat(current_century).concat(full_year), 10) > current_year) {\n          full_year = \"\".concat(current_century - 1).concat(full_year);\n        } else {\n          full_year = \"\".concat(current_century).concat(full_year);\n        }\n      } else {\n        full_year = \"\".concat(current_century - 1).concat(full_year);\n        if (current_year - parseInt(full_year, 10) < 100) {\n          return false;\n        }\n      }\n    }\n  }\n\n  // Normalize day and check date validity\n  if (day > 60) {\n    day -= 60;\n  }\n  if (day < 10) {\n    day = \"0\".concat(day);\n  }\n  var date = \"\".concat(full_year, \"/\").concat(month, \"/\").concat(day);\n  if (date.length === 8) {\n    if (!(0, _isDate.default)(date, 'YY/MM/DD')) {\n      return false;\n    }\n  } else if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {\n    return false;\n  }\n  return algorithms.luhnCheck(tin.replace(/\\W/, ''));\n}\n\n/**\n * uk-UA validation function\n * Verify TIN validity by calculating check (last) digit (variant of MOD 11)\n */\nfunction ukUaCheck(tin) {\n  // Calculate check digit\n  var digits = tin.split('').map(function (a) {\n    return parseInt(a, 10);\n  });\n  var multipliers = [-1, 5, 7, 9, 4, 6, 10, 5, 7];\n  var checksum = 0;\n  for (var i = 0; i < multipliers.length; i++) {\n    checksum += digits[i] * multipliers[i];\n  }\n  return checksum % 11 === 10 ? digits[9] === 0 : digits[9] === checksum % 11;\n}\n\n// Locale lookup objects\n\n/*\n * Tax id regex formats for various locales\n *\n * Where not explicitly specified in DG-TAXUD document both\n * uppercase and lowercase letters are acceptable.\n */\nvar taxIdFormat = {\n  'bg-BG': /^\\d{10}$/,\n  'cs-CZ': /^\\d{6}\\/{0,1}\\d{3,4}$/,\n  'de-AT': /^\\d{9}$/,\n  'de-DE': /^[1-9]\\d{10}$/,\n  'dk-DK': /^\\d{6}-{0,1}\\d{4}$/,\n  'el-CY': /^[09]\\d{7}[A-Z]$/,\n  'el-GR': /^([0-4]|[7-9])\\d{8}$/,\n  'en-CA': /^\\d{9}$/,\n  'en-GB': /^\\d{10}$|^(?!GB|NK|TN|ZZ)(?![DFIQUV])[A-Z](?![DFIQUVO])[A-Z]\\d{6}[ABCD ]$/i,\n  'en-IE': /^\\d{7}[A-W][A-IW]{0,1}$/i,\n  'en-US': /^\\d{2}[- ]{0,1}\\d{7}$/,\n  'es-AR': /(20|23|24|27|30|33|34)[0-9]{8}[0-9]/,\n  'es-ES': /^(\\d{0,8}|[XYZKLM]\\d{7})[A-HJ-NP-TV-Z]$/i,\n  'et-EE': /^[1-6]\\d{6}(00[1-9]|0[1-9][0-9]|[1-6][0-9]{2}|70[0-9]|710)\\d$/,\n  'fi-FI': /^\\d{6}[-+A]\\d{3}[0-9A-FHJ-NPR-Y]$/i,\n  'fr-BE': /^\\d{11}$/,\n  'fr-FR': /^[0-3]\\d{12}$|^[0-3]\\d\\s\\d{2}(\\s\\d{3}){3}$/,\n  // Conforms both to official spec and provided example\n  'fr-LU': /^\\d{13}$/,\n  'hr-HR': /^\\d{11}$/,\n  'hu-HU': /^8\\d{9}$/,\n  'it-IT': /^[A-Z]{6}[L-NP-V0-9]{2}[A-EHLMPRST][L-NP-V0-9]{2}[A-ILMZ][L-NP-V0-9]{3}[A-Z]$/i,\n  'lv-LV': /^\\d{6}-{0,1}\\d{5}$/,\n  // Conforms both to DG TAXUD spec and original research\n  'mt-MT': /^\\d{3,7}[APMGLHBZ]$|^([1-8])\\1\\d{7}$/i,\n  'nl-NL': /^\\d{9}$/,\n  'pl-PL': /^\\d{10,11}$/,\n  'pt-BR': /(?:^\\d{11}$)|(?:^\\d{14}$)/,\n  'pt-PT': /^\\d{9}$/,\n  'ro-RO': /^\\d{13}$/,\n  'sk-SK': /^\\d{6}\\/{0,1}\\d{3,4}$/,\n  'sl-SI': /^[1-9]\\d{7}$/,\n  'sv-SE': /^(\\d{6}[-+]{0,1}\\d{4}|(18|19|20)\\d{6}[-+]{0,1}\\d{4})$/,\n  'uk-UA': /^\\d{10}$/\n};\n// taxIdFormat locale aliases\ntaxIdFormat['lb-LU'] = taxIdFormat['fr-LU'];\ntaxIdFormat['lt-LT'] = taxIdFormat['et-EE'];\ntaxIdFormat['nl-BE'] = taxIdFormat['fr-BE'];\ntaxIdFormat['fr-CA'] = taxIdFormat['en-CA'];\n\n// Algorithmic tax id check functions for various locales\nvar taxIdCheck = {\n  'bg-BG': bgBgCheck,\n  'cs-CZ': csCzCheck,\n  'de-AT': deAtCheck,\n  'de-DE': deDeCheck,\n  'dk-DK': dkDkCheck,\n  'el-CY': elCyCheck,\n  'el-GR': elGrCheck,\n  'en-CA': isCanadianSIN,\n  'en-IE': enIeCheck,\n  'en-US': enUsCheck,\n  'es-AR': esArCheck,\n  'es-ES': esEsCheck,\n  'et-EE': etEeCheck,\n  'fi-FI': fiFiCheck,\n  'fr-BE': frBeCheck,\n  'fr-FR': frFrCheck,\n  'fr-LU': frLuCheck,\n  'hr-HR': hrHrCheck,\n  'hu-HU': huHuCheck,\n  'it-IT': itItCheck,\n  'lv-LV': lvLvCheck,\n  'mt-MT': mtMtCheck,\n  'nl-NL': nlNlCheck,\n  'pl-PL': plPlCheck,\n  'pt-BR': ptBrCheck,\n  'pt-PT': ptPtCheck,\n  'ro-RO': roRoCheck,\n  'sk-SK': skSkCheck,\n  'sl-SI': slSiCheck,\n  'sv-SE': svSeCheck,\n  'uk-UA': ukUaCheck\n};\n// taxIdCheck locale aliases\ntaxIdCheck['lb-LU'] = taxIdCheck['fr-LU'];\ntaxIdCheck['lt-LT'] = taxIdCheck['et-EE'];\ntaxIdCheck['nl-BE'] = taxIdCheck['fr-BE'];\ntaxIdCheck['fr-CA'] = taxIdCheck['en-CA'];\n\n// Regexes for locales where characters should be omitted before checking format\nvar allsymbols = /[-\\\\\\/!@#$%\\^&\\*\\(\\)\\+\\=\\[\\]]+/g;\nvar sanitizeRegexes = {\n  'de-AT': allsymbols,\n  'de-DE': /[\\/\\\\]/g,\n  'fr-BE': allsymbols\n};\n// sanitizeRegexes locale aliases\nsanitizeRegexes['nl-BE'] = sanitizeRegexes['fr-BE'];\n\n/*\n * Validator function\n * Return true if the passed string is a valid tax identification number\n * for the specified locale.\n * Throw an error exception if the locale is not supported.\n */\nfunction isTaxID(str) {\n  var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';\n  (0, _assertString.default)(str);\n  // Copy TIN to avoid replacement if sanitized\n  var strcopy = str.slice(0);\n  if (locale in taxIdFormat) {\n    if (locale in sanitizeRegexes) {\n      strcopy = strcopy.replace(sanitizeRegexes[locale], '');\n    }\n    if (!taxIdFormat[locale].test(strcopy)) {\n      return false;\n    }\n    if (locale in taxIdCheck) {\n      return taxIdCheck[locale](strcopy);\n    }\n    // Fallthrough; not all locales have algorithmic checks\n    return true;\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _toDate = _interopRequireDefault(require(\"./lib/toDate\"));\nvar _toFloat = _interopRequireDefault(require(\"./lib/toFloat\"));\nvar _toInt = _interopRequireDefault(require(\"./lib/toInt\"));\nvar _toBoolean = _interopRequireDefault(require(\"./lib/toBoolean\"));\nvar _equals = _interopRequireDefault(require(\"./lib/equals\"));\nvar _contains = _interopRequireDefault(require(\"./lib/contains\"));\nvar _matches = _interopRequireDefault(require(\"./lib/matches\"));\nvar _isEmail = _interopRequireDefault(require(\"./lib/isEmail\"));\nvar _isURL = _interopRequireDefault(require(\"./lib/isURL\"));\nvar _isMACAddress = _interopRequireDefault(require(\"./lib/isMACAddress\"));\nvar _isIP = _interopRequireDefault(require(\"./lib/isIP\"));\nvar _isIPRange = _interopRequireDefault(require(\"./lib/isIPRange\"));\nvar _isFQDN = _interopRequireDefault(require(\"./lib/isFQDN\"));\nvar _isDate = _interopRequireDefault(require(\"./lib/isDate\"));\nvar _isTime = _interopRequireDefault(require(\"./lib/isTime\"));\nvar _isBoolean = _interopRequireDefault(require(\"./lib/isBoolean\"));\nvar _isLocale = _interopRequireDefault(require(\"./lib/isLocale\"));\nvar _isAbaRouting = _interopRequireDefault(require(\"./lib/isAbaRouting\"));\nvar _isAlpha = _interopRequireWildcard(require(\"./lib/isAlpha\"));\nvar _isAlphanumeric = _interopRequireWildcard(require(\"./lib/isAlphanumeric\"));\nvar _isNumeric = _interopRequireDefault(require(\"./lib/isNumeric\"));\nvar _isPassportNumber = _interopRequireWildcard(require(\"./lib/isPassportNumber\"));\nvar _isPort = _interopRequireDefault(require(\"./lib/isPort\"));\nvar _isLowercase = _interopRequireDefault(require(\"./lib/isLowercase\"));\nvar _isUppercase = _interopRequireDefault(require(\"./lib/isUppercase\"));\nvar _isIMEI = _interopRequireDefault(require(\"./lib/isIMEI\"));\nvar _isAscii = _interopRequireDefault(require(\"./lib/isAscii\"));\nvar _isFullWidth = _interopRequireDefault(require(\"./lib/isFullWidth\"));\nvar _isHalfWidth = _interopRequireDefault(require(\"./lib/isHalfWidth\"));\nvar _isVariableWidth = _interopRequireDefault(require(\"./lib/isVariableWidth\"));\nvar _isMultibyte = _interopRequireDefault(require(\"./lib/isMultibyte\"));\nvar _isSemVer = _interopRequireDefault(require(\"./lib/isSemVer\"));\nvar _isSurrogatePair = _interopRequireDefault(require(\"./lib/isSurrogatePair\"));\nvar _isInt = _interopRequireDefault(require(\"./lib/isInt\"));\nvar _isFloat = _interopRequireWildcard(require(\"./lib/isFloat\"));\nvar _isDecimal = _interopRequireDefault(require(\"./lib/isDecimal\"));\nvar _isHexadecimal = _interopRequireDefault(require(\"./lib/isHexadecimal\"));\nvar _isOctal = _interopRequireDefault(require(\"./lib/isOctal\"));\nvar _isDivisibleBy = _interopRequireDefault(require(\"./lib/isDivisibleBy\"));\nvar _isHexColor = _interopRequireDefault(require(\"./lib/isHexColor\"));\nvar _isRgbColor = _interopRequireDefault(require(\"./lib/isRgbColor\"));\nvar _isHSL = _interopRequireDefault(require(\"./lib/isHSL\"));\nvar _isISRC = _interopRequireDefault(require(\"./lib/isISRC\"));\nvar _isIBAN = _interopRequireWildcard(require(\"./lib/isIBAN\"));\nvar _isBIC = _interopRequireDefault(require(\"./lib/isBIC\"));\nvar _isMD = _interopRequireDefault(require(\"./lib/isMD5\"));\nvar _isHash = _interopRequireDefault(require(\"./lib/isHash\"));\nvar _isJWT = _interopRequireDefault(require(\"./lib/isJWT\"));\nvar _isJSON = _interopRequireDefault(require(\"./lib/isJSON\"));\nvar _isEmpty = _interopRequireDefault(require(\"./lib/isEmpty\"));\nvar _isLength = _interopRequireDefault(require(\"./lib/isLength\"));\nvar _isByteLength = _interopRequireDefault(require(\"./lib/isByteLength\"));\nvar _isULID = _interopRequireDefault(require(\"./lib/isULID\"));\nvar _isUUID = _interopRequireDefault(require(\"./lib/isUUID\"));\nvar _isMongoId = _interopRequireDefault(require(\"./lib/isMongoId\"));\nvar _isAfter = _interopRequireDefault(require(\"./lib/isAfter\"));\nvar _isBefore = _interopRequireDefault(require(\"./lib/isBefore\"));\nvar _isIn = _interopRequireDefault(require(\"./lib/isIn\"));\nvar _isLuhnNumber = _interopRequireDefault(require(\"./lib/isLuhnNumber\"));\nvar _isCreditCard = _interopRequireDefault(require(\"./lib/isCreditCard\"));\nvar _isIdentityCard = _interopRequireDefault(require(\"./lib/isIdentityCard\"));\nvar _isEAN = _interopRequireDefault(require(\"./lib/isEAN\"));\nvar _isISIN = _interopRequireDefault(require(\"./lib/isISIN\"));\nvar _isISBN = _interopRequireDefault(require(\"./lib/isISBN\"));\nvar _isISSN = _interopRequireDefault(require(\"./lib/isISSN\"));\nvar _isTaxID = _interopRequireDefault(require(\"./lib/isTaxID\"));\nvar _isMobilePhone = _interopRequireWildcard(require(\"./lib/isMobilePhone\"));\nvar _isEthereumAddress = _interopRequireDefault(require(\"./lib/isEthereumAddress\"));\nvar _isCurrency = _interopRequireDefault(require(\"./lib/isCurrency\"));\nvar _isBtcAddress = _interopRequireDefault(require(\"./lib/isBtcAddress\"));\nvar _isISO = require(\"./lib/isISO6346\");\nvar _isISO2 = _interopRequireDefault(require(\"./lib/isISO6391\"));\nvar _isISO3 = _interopRequireDefault(require(\"./lib/isISO8601\"));\nvar _isRFC = _interopRequireDefault(require(\"./lib/isRFC3339\"));\nvar _isISO4 = _interopRequireDefault(require(\"./lib/isISO15924\"));\nvar _isISO31661Alpha = _interopRequireDefault(require(\"./lib/isISO31661Alpha2\"));\nvar _isISO31661Alpha2 = _interopRequireDefault(require(\"./lib/isISO31661Alpha3\"));\nvar _isISO31661Numeric = _interopRequireDefault(require(\"./lib/isISO31661Numeric\"));\nvar _isISO5 = _interopRequireDefault(require(\"./lib/isISO4217\"));\nvar _isBase = _interopRequireDefault(require(\"./lib/isBase32\"));\nvar _isBase2 = _interopRequireDefault(require(\"./lib/isBase58\"));\nvar _isBase3 = _interopRequireDefault(require(\"./lib/isBase64\"));\nvar _isDataURI = _interopRequireDefault(require(\"./lib/isDataURI\"));\nvar _isMagnetURI = _interopRequireDefault(require(\"./lib/isMagnetURI\"));\nvar _isMailtoURI = _interopRequireDefault(require(\"./lib/isMailtoURI\"));\nvar _isMimeType = _interopRequireDefault(require(\"./lib/isMimeType\"));\nvar _isLatLong = _interopRequireDefault(require(\"./lib/isLatLong\"));\nvar _isPostalCode = _interopRequireWildcard(require(\"./lib/isPostalCode\"));\nvar _ltrim = _interopRequireDefault(require(\"./lib/ltrim\"));\nvar _rtrim = _interopRequireDefault(require(\"./lib/rtrim\"));\nvar _trim = _interopRequireDefault(require(\"./lib/trim\"));\nvar _escape = _interopRequireDefault(require(\"./lib/escape\"));\nvar _unescape = _interopRequireDefault(require(\"./lib/unescape\"));\nvar _stripLow = _interopRequireDefault(require(\"./lib/stripLow\"));\nvar _whitelist = _interopRequireDefault(require(\"./lib/whitelist\"));\nvar _blacklist = _interopRequireDefault(require(\"./lib/blacklist\"));\nvar _isWhitelisted = _interopRequireDefault(require(\"./lib/isWhitelisted\"));\nvar _normalizeEmail = _interopRequireDefault(require(\"./lib/normalizeEmail\"));\nvar _isSlug = _interopRequireDefault(require(\"./lib/isSlug\"));\nvar _isLicensePlate = _interopRequireDefault(require(\"./lib/isLicensePlate\"));\nvar _isStrongPassword = _interopRequireDefault(require(\"./lib/isStrongPassword\"));\nvar _isVAT = _interopRequireDefault(require(\"./lib/isVAT\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar version = '13.15.15';\nvar validator = {\n  version: version,\n  toDate: _toDate.default,\n  toFloat: _toFloat.default,\n  toInt: _toInt.default,\n  toBoolean: _toBoolean.default,\n  equals: _equals.default,\n  contains: _contains.default,\n  matches: _matches.default,\n  isEmail: _isEmail.default,\n  isURL: _isURL.default,\n  isMACAddress: _isMACAddress.default,\n  isIP: _isIP.default,\n  isIPRange: _isIPRange.default,\n  isFQDN: _isFQDN.default,\n  isBoolean: _isBoolean.default,\n  isIBAN: _isIBAN.default,\n  isBIC: _isBIC.default,\n  isAbaRouting: _isAbaRouting.default,\n  isAlpha: _isAlpha.default,\n  isAlphaLocales: _isAlpha.locales,\n  isAlphanumeric: _isAlphanumeric.default,\n  isAlphanumericLocales: _isAlphanumeric.locales,\n  isNumeric: _isNumeric.default,\n  isPassportNumber: _isPassportNumber.default,\n  passportNumberLocales: _isPassportNumber.locales,\n  isPort: _isPort.default,\n  isLowercase: _isLowercase.default,\n  isUppercase: _isUppercase.default,\n  isAscii: _isAscii.default,\n  isFullWidth: _isFullWidth.default,\n  isHalfWidth: _isHalfWidth.default,\n  isVariableWidth: _isVariableWidth.default,\n  isMultibyte: _isMultibyte.default,\n  isSemVer: _isSemVer.default,\n  isSurrogatePair: _isSurrogatePair.default,\n  isInt: _isInt.default,\n  isIMEI: _isIMEI.default,\n  isFloat: _isFloat.default,\n  isFloatLocales: _isFloat.locales,\n  isDecimal: _isDecimal.default,\n  isHexadecimal: _isHexadecimal.default,\n  isOctal: _isOctal.default,\n  isDivisibleBy: _isDivisibleBy.default,\n  isHexColor: _isHexColor.default,\n  isRgbColor: _isRgbColor.default,\n  isHSL: _isHSL.default,\n  isISRC: _isISRC.default,\n  isMD5: _isMD.default,\n  isHash: _isHash.default,\n  isJWT: _isJWT.default,\n  isJSON: _isJSON.default,\n  isEmpty: _isEmpty.default,\n  isLength: _isLength.default,\n  isLocale: _isLocale.default,\n  isByteLength: _isByteLength.default,\n  isULID: _isULID.default,\n  isUUID: _isUUID.default,\n  isMongoId: _isMongoId.default,\n  isAfter: _isAfter.default,\n  isBefore: _isBefore.default,\n  isIn: _isIn.default,\n  isLuhnNumber: _isLuhnNumber.default,\n  isCreditCard: _isCreditCard.default,\n  isIdentityCard: _isIdentityCard.default,\n  isEAN: _isEAN.default,\n  isISIN: _isISIN.default,\n  isISBN: _isISBN.default,\n  isISSN: _isISSN.default,\n  isMobilePhone: _isMobilePhone.default,\n  isMobilePhoneLocales: _isMobilePhone.locales,\n  isPostalCode: _isPostalCode.default,\n  isPostalCodeLocales: _isPostalCode.locales,\n  isEthereumAddress: _isEthereumAddress.default,\n  isCurrency: _isCurrency.default,\n  isBtcAddress: _isBtcAddress.default,\n  isISO6346: _isISO.isISO6346,\n  isFreightContainerID: _isISO.isFreightContainerID,\n  isISO6391: _isISO2.default,\n  isISO8601: _isISO3.default,\n  isISO15924: _isISO4.default,\n  isRFC3339: _isRFC.default,\n  isISO31661Alpha2: _isISO31661Alpha.default,\n  isISO31661Alpha3: _isISO31661Alpha2.default,\n  isISO31661Numeric: _isISO31661Numeric.default,\n  isISO4217: _isISO5.default,\n  isBase32: _isBase.default,\n  isBase58: _isBase2.default,\n  isBase64: _isBase3.default,\n  isDataURI: _isDataURI.default,\n  isMagnetURI: _isMagnetURI.default,\n  isMailtoURI: _isMailtoURI.default,\n  isMimeType: _isMimeType.default,\n  isLatLong: _isLatLong.default,\n  ltrim: _ltrim.default,\n  rtrim: _rtrim.default,\n  trim: _trim.default,\n  escape: _escape.default,\n  unescape: _unescape.default,\n  stripLow: _stripLow.default,\n  whitelist: _whitelist.default,\n  blacklist: _blacklist.default,\n  isWhitelisted: _isWhitelisted.default,\n  normalizeEmail: _normalizeEmail.default,\n  toString: toString,\n  isSlug: _isSlug.default,\n  isStrongPassword: _isStrongPassword.default,\n  isTaxID: _isTaxID.default,\n  isDate: _isDate.default,\n  isTime: _isTime.default,\n  isLicensePlate: _isLicensePlate.default,\n  isVAT: _isVAT.default,\n  ibanLocales: _isIBAN.locales\n};\nvar _default = exports.default = validator;\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isURL;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _checkHost = _interopRequireDefault(require(\"./util/checkHost\"));\nvar _includesString = _interopRequireDefault(require(\"./util/includesString\"));\nvar _isFQDN = _interopRequireDefault(require(\"./isFQDN\"));\nvar _isIP = _interopRequireDefault(require(\"./isIP\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n/*\noptions for isURL method\n\nprotocols - valid protocols can be modified with this option.\nrequire_tld - If set to false isURL will not check if the URL's host includes a top-level domain.\nrequire_protocol - if set to true isURL will return false if protocol is not present in the URL.\nrequire_host - if set to false isURL will not check if host is present in the URL.\nrequire_port - if set to true isURL will check if port is present in the URL.\nrequire_valid_protocol - isURL will check if the URL's protocol is present in the protocols option.\nallow_underscores - if set to true, the validator will allow underscores in the URL.\nhost_whitelist - if set to an array of strings or regexp, and the domain matches none of the strings\n                 defined in it, the validation fails.\nhost_blacklist - if set to an array of strings or regexp, and the domain matches any of the strings\n                 defined in it, the validation fails.\nallow_trailing_dot - if set to true, the validator will allow the domain to end with\n                     a `.` character.\nallow_protocol_relative_urls - if set to true protocol relative URLs will be allowed.\nallow_fragments - if set to false isURL will return false if fragments are present.\nallow_query_components - if set to false isURL will return false if query components are present.\ndisallow_auth - if set to true, the validator will fail if the URL contains an authentication\n                component, e.g. `http://username:[email protected]`\nvalidate_length - if set to false isURL will skip string length validation. `max_allowed_length`\n                  will be ignored if this is set as `false`.\nmax_allowed_length - if set, isURL will not allow URLs longer than the specified value (default is\n                     2084 that IE maximum URL length).\n\n*/\n\nvar default_url_options = {\n  protocols: ['http', 'https', 'ftp'],\n  require_tld: true,\n  require_protocol: false,\n  require_host: true,\n  require_port: false,\n  require_valid_protocol: true,\n  allow_underscores: false,\n  allow_trailing_dot: false,\n  allow_protocol_relative_urls: false,\n  allow_fragments: true,\n  allow_query_components: true,\n  validate_length: true,\n  max_allowed_length: 2084\n};\nvar wrapped_ipv6 = /^\\[([^\\]]+)\\](?::([0-9]+))?$/;\nfunction isURL(url, options) {\n  (0, _assertString.default)(url);\n  if (!url || /[\\s<>]/.test(url)) {\n    return false;\n  }\n  if (url.indexOf('mailto:') === 0) {\n    return false;\n  }\n  options = (0, _merge.default)(options, default_url_options);\n  if (options.validate_length && url.length > options.max_allowed_length) {\n    return false;\n  }\n  if (!options.allow_fragments && (0, _includesString.default)(url, '#')) {\n    return false;\n  }\n  if (!options.allow_query_components && ((0, _includesString.default)(url, '?') || (0, _includesString.default)(url, '&'))) {\n    return false;\n  }\n  var protocol, auth, host, hostname, port, port_str, split, ipv6;\n  split = url.split('#');\n  url = split.shift();\n  split = url.split('?');\n  url = split.shift();\n  split = url.split('://');\n  if (split.length > 1) {\n    protocol = split.shift().toLowerCase();\n    if (options.require_valid_protocol && options.protocols.indexOf(protocol) === -1) {\n      return false;\n    }\n  } else if (options.require_protocol) {\n    return false;\n  } else if (url.slice(0, 2) === '//') {\n    if (!options.allow_protocol_relative_urls) {\n      return false;\n    }\n    split[0] = url.slice(2);\n  }\n  url = split.join('://');\n  if (url === '') {\n    return false;\n  }\n  split = url.split('/');\n  url = split.shift();\n  if (url === '' && !options.require_host) {\n    return true;\n  }\n  split = url.split('@');\n  if (split.length > 1) {\n    if (options.disallow_auth) {\n      return false;\n    }\n    if (split[0] === '') {\n      return false;\n    }\n    auth = split.shift();\n    if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) {\n      return false;\n    }\n    var _auth$split = auth.split(':'),\n      _auth$split2 = _slicedToArray(_auth$split, 2),\n      user = _auth$split2[0],\n      password = _auth$split2[1];\n    if (user === '' && password === '') {\n      return false;\n    }\n  }\n  hostname = split.join('@');\n  port_str = null;\n  ipv6 = null;\n  var ipv6_match = hostname.match(wrapped_ipv6);\n  if (ipv6_match) {\n    host = '';\n    ipv6 = ipv6_match[1];\n    port_str = ipv6_match[2] || null;\n  } else {\n    split = hostname.split(':');\n    host = split.shift();\n    if (split.length) {\n      port_str = split.join(':');\n    }\n  }\n  if (port_str !== null && port_str.length > 0) {\n    port = parseInt(port_str, 10);\n    if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) {\n      return false;\n    }\n  } else if (options.require_port) {\n    return false;\n  }\n  if (options.host_whitelist) {\n    return (0, _checkHost.default)(host, options.host_whitelist);\n  }\n  if (host === '' && !options.require_host) {\n    return true;\n  }\n  if (!(0, _isIP.default)(host) && !(0, _isFQDN.default)(host, options) && (!ipv6 || !(0, _isIP.default)(ipv6, 6))) {\n    return false;\n  }\n  host = host || ipv6;\n  if (options.host_blacklist && (0, _checkHost.default)(host, options.host_blacklist)) {\n    return false;\n  }\n  return true;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISO6391;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar isISO6391Set = new Set(['aa', 'ab', 'ae', 'af', 'ak', 'am', 'an', 'ar', 'as', 'av', 'ay', 'az', 'az', 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ce', 'ch', 'co', 'cr', 'cs', 'cu', 'cv', 'cy', 'da', 'de', 'dv', 'dz', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fj', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hr', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'io', 'is', 'it', 'iu', 'ja', 'jv', 'ka', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ku', 'kv', 'kw', 'ky', 'la', 'lb', 'lg', 'li', 'ln', 'lo', 'lt', 'lu', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mr', 'ms', 'mt', 'my', 'na', 'nb', 'nd', 'ne', 'ng', 'nl', 'nn', 'no', 'nr', 'nv', 'ny', 'oc', 'oj', 'om', 'or', 'os', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu', 'rm', 'rn', 'ro', 'ru', 'rw', 'sa', 'sc', 'sd', 'se', 'sg', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tr', 'ts', 'tt', 'tw', 'ty', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi', 'yo', 'za', 'zh', 'zu']);\nfunction isISO6391(str) {\n  (0, _assertString.default)(str);\n  return isISO6391Set.has(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isBase64;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar base64WithPadding = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/;\nvar base64WithoutPadding = /^[A-Za-z0-9+/]+$/;\nvar base64UrlWithPadding = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2}==|[A-Za-z0-9_-]{3}=|[A-Za-z0-9_-]{4})$/;\nvar base64UrlWithoutPadding = /^[A-Za-z0-9_-]+$/;\nfunction isBase64(str, options) {\n  var _options;\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, {\n    urlSafe: false,\n    padding: !((_options = options) !== null && _options !== void 0 && _options.urlSafe)\n  });\n  if (str === '') return true;\n  var regex;\n  if (options.urlSafe) {\n    regex = options.padding ? base64UrlWithPadding : base64UrlWithoutPadding;\n  } else {\n    regex = options.padding ? base64WithPadding : base64WithoutPadding;\n  }\n  return (!options.padding || str.length % 4 === 0) && regex.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CurrencyCodes = void 0;\nexports.default = isISO4217;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// from https://en.wikipedia.org/wiki/ISO_4217\nvar validISO4217CurrencyCodes = new Set(['AED', 'AFN', 'ALL', 'AMD', 'ANG', 'AOA', 'ARS', 'AUD', 'AWG', 'AZN', 'BAM', 'BBD', 'BDT', 'BGN', 'BHD', 'BIF', 'BMD', 'BND', 'BOB', 'BOV', 'BRL', 'BSD', 'BTN', 'BWP', 'BYN', 'BZD', 'CAD', 'CDF', 'CHE', 'CHF', 'CHW', 'CLF', 'CLP', 'CNY', 'COP', 'COU', 'CRC', 'CUP', 'CVE', 'CZK', 'DJF', 'DKK', 'DOP', 'DZD', 'EGP', 'ERN', 'ETB', 'EUR', 'FJD', 'FKP', 'GBP', 'GEL', 'GHS', 'GIP', 'GMD', 'GNF', 'GTQ', 'GYD', 'HKD', 'HNL', 'HTG', 'HUF', 'IDR', 'ILS', 'INR', 'IQD', 'IRR', 'ISK', 'JMD', 'JOD', 'JPY', 'KES', 'KGS', 'KHR', 'KMF', 'KPW', 'KRW', 'KWD', 'KYD', 'KZT', 'LAK', 'LBP', 'LKR', 'LRD', 'LSL', 'LYD', 'MAD', 'MDL', 'MGA', 'MKD', 'MMK', 'MNT', 'MOP', 'MRU', 'MUR', 'MVR', 'MWK', 'MXN', 'MXV', 'MYR', 'MZN', 'NAD', 'NGN', 'NIO', 'NOK', 'NPR', 'NZD', 'OMR', 'PAB', 'PEN', 'PGK', 'PHP', 'PKR', 'PLN', 'PYG', 'QAR', 'RON', 'RSD', 'RUB', 'RWF', 'SAR', 'SBD', 'SCR', 'SDG', 'SEK', 'SGD', 'SHP', 'SLE', 'SLL', 'SOS', 'SRD', 'SSP', 'STN', 'SVC', 'SYP', 'SZL', 'THB', 'TJS', 'TMT', 'TND', 'TOP', 'TRY', 'TTD', 'TWD', 'TZS', 'UAH', 'UGX', 'USD', 'USN', 'UYI', 'UYU', 'UYW', 'UZS', 'VED', 'VES', 'VND', 'VUV', 'WST', 'XAF', 'XAG', 'XAU', 'XBA', 'XBB', 'XBC', 'XBD', 'XCD', 'XDR', 'XOF', 'XPD', 'XPF', 'XPT', 'XSU', 'XTS', 'XUA', 'XXX', 'YER', 'ZAR', 'ZMW', 'ZWL']);\nfunction isISO4217(str) {\n  (0, _assertString.default)(str);\n  return validISO4217CurrencyCodes.has(str.toUpperCase());\n}\nvar CurrencyCodes = exports.CurrencyCodes = validISO4217CurrencyCodes;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CountryCodes = void 0;\nexports.default = isISO31661Alpha2;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\nvar validISO31661Alpha2CountriesCodes = new Set(['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW']);\nfunction isISO31661Alpha2(str) {\n  (0, _assertString.default)(str);\n  return validISO31661Alpha2CountriesCodes.has(str.toUpperCase());\n}\nvar CountryCodes = exports.CountryCodes = validISO31661Alpha2CountriesCodes;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isIMEI;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar imeiRegexWithoutHyphens = /^[0-9]{15}$/;\nvar imeiRegexWithHyphens = /^\\d{2}-\\d{6}-\\d{6}-\\d{1}$/;\nfunction isIMEI(str, options) {\n  (0, _assertString.default)(str);\n  options = options || {};\n\n  // default regex for checking imei is the one without hyphens\n\n  var imeiRegex = imeiRegexWithoutHyphens;\n  if (options.allow_hyphens) {\n    imeiRegex = imeiRegexWithHyphens;\n  }\n  if (!imeiRegex.test(str)) {\n    return false;\n  }\n  str = str.replace(/-/g, '');\n  var sum = 0,\n    mul = 2,\n    l = 14;\n  for (var i = 0; i < l; i++) {\n    var digit = str.substring(l - i - 1, l - i);\n    var tp = parseInt(digit, 10) * mul;\n    if (tp >= 10) {\n      sum += tp % 10 + 1;\n    } else {\n      sum += tp;\n    }\n    if (mul === 1) {\n      mul += 1;\n    } else {\n      mul -= 1;\n    }\n  }\n  var chk = (10 - sum % 10) % 10;\n  if (chk !== parseInt(str.substring(14, 15), 10)) {\n    return false;\n  }\n  return true;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar includes = function includes(arr, val) {\n  return arr.some(function (arrVal) {\n    return val === arrVal;\n  });\n};\nvar _default = exports.default = includes;\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isTime;\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar default_time_options = {\n  hourFormat: 'hour24',\n  mode: 'default'\n};\nvar formats = {\n  hour24: {\n    default: /^([01]?[0-9]|2[0-3]):([0-5][0-9])$/,\n    withSeconds: /^([01]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/,\n    withOptionalSeconds: /^([01]?[0-9]|2[0-3]):([0-5][0-9])(?::([0-5][0-9]))?$/\n  },\n  hour12: {\n    default: /^(0?[1-9]|1[0-2]):([0-5][0-9]) (A|P)M$/,\n    withSeconds: /^(0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) (A|P)M$/,\n    withOptionalSeconds: /^(0?[1-9]|1[0-2]):([0-5][0-9])(?::([0-5][0-9]))? (A|P)M$/\n  }\n};\nfunction isTime(input, options) {\n  options = (0, _merge.default)(options, default_time_options);\n  if (typeof input !== 'string') return false;\n  return formats[options.hourFormat][options.mode].test(input);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isAlphanumeric;\nexports.locales = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _alpha = require(\"./alpha\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isAlphanumeric(_str) {\n  var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  (0, _assertString.default)(_str);\n  var str = _str;\n  var ignore = options.ignore;\n  if (ignore) {\n    if (ignore instanceof RegExp) {\n      str = str.replace(ignore, '');\n    } else if (typeof ignore === 'string') {\n      str = str.replace(new RegExp(\"[\".concat(ignore.replace(/[-[\\]{}()*+?.,\\\\^$|#\\\\s]/g, '\\\\$&'), \"]\"), 'g'), ''); // escape regex for ignore\n    } else {\n      throw new Error('ignore should be instance of a String or RegExp');\n    }\n  }\n  if (locale in _alpha.alphanumeric) {\n    return _alpha.alphanumeric[locale].test(str);\n  }\n  throw new Error(\"Invalid locale '\".concat(locale, \"'\"));\n}\nvar locales = exports.locales = Object.keys(_alpha.alphanumeric);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isDate;\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar default_date_options = {\n  format: 'YYYY/MM/DD',\n  delimiters: ['/', '-'],\n  strictMode: false\n};\nfunction isValidFormat(format) {\n  return /(^(y{4}|y{2})[.\\/-](m{1,2})[.\\/-](d{1,2})$)|(^(m{1,2})[.\\/-](d{1,2})[.\\/-]((y{4}|y{2})$))|(^(d{1,2})[.\\/-](m{1,2})[.\\/-]((y{4}|y{2})$))/gi.test(format);\n}\nfunction zip(date, format) {\n  var zippedArr = [],\n    len = Math.max(date.length, format.length);\n  for (var i = 0; i < len; i++) {\n    zippedArr.push([date[i], format[i]]);\n  }\n  return zippedArr;\n}\nfunction isDate(input, options) {\n  if (typeof options === 'string') {\n    // Allow backward compatibility for old format isDate(input [, format])\n    options = (0, _merge.default)({\n      format: options\n    }, default_date_options);\n  } else {\n    options = (0, _merge.default)(options, default_date_options);\n  }\n  if (typeof input === 'string' && isValidFormat(options.format)) {\n    if (options.strictMode && input.length !== options.format.length) return false;\n    var formatDelimiter = options.delimiters.find(function (delimiter) {\n      return options.format.indexOf(delimiter) !== -1;\n    });\n    var dateDelimiter = options.strictMode ? formatDelimiter : options.delimiters.find(function (delimiter) {\n      return input.indexOf(delimiter) !== -1;\n    });\n    var dateAndFormat = zip(input.split(dateDelimiter), options.format.toLowerCase().split(formatDelimiter));\n    var dateObj = {};\n    var _iterator = _createForOfIteratorHelper(dateAndFormat),\n      _step;\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var _step$value = _slicedToArray(_step.value, 2),\n          dateWord = _step$value[0],\n          formatWord = _step$value[1];\n        if (!dateWord || !formatWord || dateWord.length !== formatWord.length) {\n          return false;\n        }\n        dateObj[formatWord.charAt(0)] = dateWord;\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n    var fullYear = dateObj.y;\n\n    // Check if the year starts with a hyphen\n    if (fullYear.startsWith('-')) {\n      return false; // Hyphen before year is not allowed\n    }\n    if (dateObj.y.length === 2) {\n      var parsedYear = parseInt(dateObj.y, 10);\n      if (isNaN(parsedYear)) {\n        return false;\n      }\n      var currentYearLastTwoDigits = new Date().getFullYear() % 100;\n      if (parsedYear < currentYearLastTwoDigits) {\n        fullYear = \"20\".concat(dateObj.y);\n      } else {\n        fullYear = \"19\".concat(dateObj.y);\n      }\n    }\n    var month = dateObj.m;\n    if (dateObj.m.length === 1) {\n      month = \"0\".concat(dateObj.m);\n    }\n    var day = dateObj.d;\n    if (dateObj.d.length === 1) {\n      day = \"0\".concat(dateObj.d);\n    }\n    return new Date(\"\".concat(fullYear, \"-\").concat(month, \"-\").concat(day, \"T00:00:00.000Z\")).getUTCDate() === +dateObj.d;\n  }\n  if (!options.strictMode) {\n    return Object.prototype.toString.call(input) === '[object Date]' && isFinite(input);\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isJWT;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _isBase = _interopRequireDefault(require(\"./isBase64\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isJWT(str) {\n  (0, _assertString.default)(str);\n  var dotSplit = str.split('.');\n  var len = dotSplit.length;\n  if (len !== 3) {\n    return false;\n  }\n  return dotSplit.reduce(function (acc, currElem) {\n    return acc && (0, _isBase.default)(currElem, {\n      urlSafe: true\n    });\n  }, true);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = contains;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _toString = _interopRequireDefault(require(\"./util/toString\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar defaultContainsOptions = {\n  ignoreCase: false,\n  minOccurrences: 1\n};\nfunction contains(str, elem, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, defaultContainsOptions);\n  if (options.ignoreCase) {\n    return str.toLowerCase().split((0, _toString.default)(elem).toLowerCase()).length > options.minOccurrences;\n  }\n  return str.split((0, _toString.default)(elem)).length > options.minOccurrences;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isSlug;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar charsetRegex = /^[^\\s-_](?!.*?[-_]{2,})[a-z0-9-\\\\][^\\s]*[^-_\\s]$/;\nfunction isSlug(str) {\n  (0, _assertString.default)(str);\n  return charsetRegex.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isIn;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _toString = _interopRequireDefault(require(\"./util/toString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction isIn(str, options) {\n  (0, _assertString.default)(str);\n  var i;\n  if (Object.prototype.toString.call(options) === '[object Array]') {\n    var array = [];\n    for (i in options) {\n      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes\n      // istanbul ignore else\n      if ({}.hasOwnProperty.call(options, i)) {\n        array[i] = (0, _toString.default)(options[i]);\n      }\n    }\n    return array.indexOf(str) >= 0;\n  } else if (_typeof(options) === 'object') {\n    return options.hasOwnProperty(str);\n  } else if (options && typeof options.indexOf === 'function') {\n    return options.indexOf(str) >= 0;\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isLength;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/* eslint-disable prefer-rest-params */\nfunction isLength(str, options) {\n  (0, _assertString.default)(str);\n  var min;\n  var max;\n  if (_typeof(options) === 'object') {\n    min = options.min || 0;\n    max = options.max;\n  } else {\n    // backwards compatibility: isLength(str, min [, max])\n    min = arguments[1] || 0;\n    max = arguments[2];\n  }\n  var presentationSequences = str.match(/(\\uFE0F|\\uFE0E)/g) || [];\n  var surrogatePairs = str.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g) || [];\n  var len = str.length - presentationSequences.length - surrogatePairs.length;\n  var isInsideRange = len >= min && (typeof max === 'undefined' || len <= max);\n  if (isInsideRange && Array.isArray(options === null || options === void 0 ? void 0 : options.discreteLengths)) {\n    return options.discreteLengths.some(function (discreteLen) {\n      return discreteLen === len;\n    });\n  }\n  return isInsideRange;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isEmail;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _checkHost = _interopRequireDefault(require(\"./util/checkHost\"));\nvar _isByteLength = _interopRequireDefault(require(\"./isByteLength\"));\nvar _isFQDN = _interopRequireDefault(require(\"./isFQDN\"));\nvar _isIP = _interopRequireDefault(require(\"./isIP\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar default_email_options = {\n  allow_display_name: false,\n  allow_underscores: false,\n  require_display_name: false,\n  allow_utf8_local_part: true,\n  require_tld: true,\n  blacklisted_chars: '',\n  ignore_max_length: false,\n  host_blacklist: [],\n  host_whitelist: []\n};\n\n/* eslint-disable max-len */\n/* eslint-disable no-control-regex */\nvar splitNameAddress = /^([^\\x00-\\x1F\\x7F-\\x9F\\cX]+)</i;\nvar emailUserPart = /^[a-z\\d!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]+$/i;\nvar gmailUserPart = /^[a-z\\d]+$/;\nvar quotedEmailUser = /^([\\s\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f\\x21\\x23-\\x5b\\x5d-\\x7e]|(\\\\[\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]))*$/i;\nvar emailUserUtf8Part = /^[a-z\\d!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~\\u00A1-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+$/i;\nvar quotedEmailUserUtf8 = /^([\\s\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f\\x21\\x23-\\x5b\\x5d-\\x7e\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|(\\\\[\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))*$/i;\nvar defaultMaxEmailLength = 254;\n/* eslint-enable max-len */\n/* eslint-enable no-control-regex */\n\n/**\n * Validate display name according to the RFC2822: https://tools.ietf.org/html/rfc2822#appendix-A.1.2\n * @param {String} display_name\n */\nfunction validateDisplayName(display_name) {\n  var display_name_without_quotes = display_name.replace(/^\"(.+)\"$/, '$1');\n  // display name with only spaces is not valid\n  if (!display_name_without_quotes.trim()) {\n    return false;\n  }\n\n  // check whether display name contains illegal character\n  var contains_illegal = /[\\.\";<>]/.test(display_name_without_quotes);\n  if (contains_illegal) {\n    // if contains illegal characters,\n    // must to be enclosed in double-quotes, otherwise it's not a valid display name\n    if (display_name_without_quotes === display_name) {\n      return false;\n    }\n\n    // the quotes in display name must start with character symbol \\\n    var all_start_with_back_slash = display_name_without_quotes.split('\"').length === display_name_without_quotes.split('\\\\\"').length;\n    if (!all_start_with_back_slash) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction isEmail(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, default_email_options);\n  if (options.require_display_name || options.allow_display_name) {\n    var display_email = str.match(splitNameAddress);\n    if (display_email) {\n      var display_name = display_email[1];\n\n      // Remove display name and angle brackets to get email address\n      // Can be done in the regex but will introduce a ReDOS (See  #1597 for more info)\n      str = str.replace(display_name, '').replace(/(^<|>$)/g, '');\n\n      // sometimes need to trim the last space to get the display name\n      // because there may be a space between display name and email address\n      // eg. myname <[email protected]>\n      // the display name is `myname` instead of `myname `, so need to trim the last space\n      if (display_name.endsWith(' ')) {\n        display_name = display_name.slice(0, -1);\n      }\n      if (!validateDisplayName(display_name)) {\n        return false;\n      }\n    } else if (options.require_display_name) {\n      return false;\n    }\n  }\n  if (!options.ignore_max_length && str.length > defaultMaxEmailLength) {\n    return false;\n  }\n  var parts = str.split('@');\n  var domain = parts.pop();\n  var lower_domain = domain.toLowerCase();\n  if (options.host_blacklist.length > 0 && (0, _checkHost.default)(lower_domain, options.host_blacklist)) {\n    return false;\n  }\n  if (options.host_whitelist.length > 0 && !(0, _checkHost.default)(lower_domain, options.host_whitelist)) {\n    return false;\n  }\n  var user = parts.join('@');\n  if (options.domain_specific_validation && (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com')) {\n    /*\n    Previously we removed dots for gmail addresses before validating.\n    This was removed because it allows `[email protected]`\n    to be reported as valid, but it is not.\n    Gmail only normalizes single dots, removing them from here is pointless,\n    should be done in normalizeEmail\n    */\n    user = user.toLowerCase();\n\n    // Removing sub-address from username before gmail validation\n    var username = user.split('+')[0];\n\n    // Dots are not included in gmail length restriction\n    if (!(0, _isByteLength.default)(username.replace(/\\./g, ''), {\n      min: 6,\n      max: 30\n    })) {\n      return false;\n    }\n    var _user_parts = username.split('.');\n    for (var i = 0; i < _user_parts.length; i++) {\n      if (!gmailUserPart.test(_user_parts[i])) {\n        return false;\n      }\n    }\n  }\n  if (options.ignore_max_length === false && (!(0, _isByteLength.default)(user, {\n    max: 64\n  }) || !(0, _isByteLength.default)(domain, {\n    max: 254\n  }))) {\n    return false;\n  }\n  if (!(0, _isFQDN.default)(domain, {\n    require_tld: options.require_tld,\n    ignore_max_length: options.ignore_max_length,\n    allow_underscores: options.allow_underscores\n  })) {\n    if (!options.allow_ip_domain) {\n      return false;\n    }\n    if (!(0, _isIP.default)(domain)) {\n      if (!domain.startsWith('[') || !domain.endsWith(']')) {\n        return false;\n      }\n      var noBracketdomain = domain.slice(1, -1);\n      if (noBracketdomain.length === 0 || !(0, _isIP.default)(noBracketdomain)) {\n        return false;\n      }\n    }\n  }\n  if (options.blacklisted_chars) {\n    if (user.search(new RegExp(\"[\".concat(options.blacklisted_chars, \"]+\"), 'g')) !== -1) return false;\n  }\n  if (user[0] === '\"' && user[user.length - 1] === '\"') {\n    user = user.slice(1, user.length - 1);\n    return options.allow_utf8_local_part ? quotedEmailUserUtf8.test(user) : quotedEmailUser.test(user);\n  }\n  var pattern = options.allow_utf8_local_part ? emailUserUtf8Part : emailUserPart;\n  var user_parts = user.split('.');\n  for (var _i = 0; _i < user_parts.length; _i++) {\n    if (!pattern.test(user_parts[_i])) {\n      return false;\n    }\n  }\n  return true;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isHalfWidth;\nexports.halfWidth = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar halfWidth = exports.halfWidth = /[\\u0020-\\u007E\\uFF61-\\uFF9F\\uFFA0-\\uFFDC\\uFFE8-\\uFFEE0-9a-zA-Z]/;\nfunction isHalfWidth(str) {\n  (0, _assertString.default)(str);\n  return halfWidth.test(str);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isOctal;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar octal = /^(0o)?[0-7]+$/i;\nfunction isOctal(str) {\n  (0, _assertString.default)(str);\n  return octal.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isFullWidth;\nexports.fullWidth = void 0;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar fullWidth = exports.fullWidth = /[^\\u0020-\\u007E\\uFF61-\\uFF9F\\uFFA0-\\uFFDC\\uFFE8-\\uFFEE0-9a-zA-Z]/;\nfunction isFullWidth(str) {\n  (0, _assertString.default)(str);\n  return fullWidth.test(str);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isISBN;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar possibleIsbn10 = /^(?:[0-9]{9}X|[0-9]{10})$/;\nvar possibleIsbn13 = /^(?:[0-9]{13})$/;\nvar factor = [1, 3];\nfunction isISBN(isbn, options) {\n  (0, _assertString.default)(isbn);\n\n  // For backwards compatibility:\n  // isISBN(str [, version]), i.e. `options` could be used as argument for the legacy `version`\n  var version = String((options === null || options === void 0 ? void 0 : options.version) || options);\n  if (!(options !== null && options !== void 0 && options.version || options)) {\n    return isISBN(isbn, {\n      version: 10\n    }) || isISBN(isbn, {\n      version: 13\n    });\n  }\n  var sanitizedIsbn = isbn.replace(/[\\s-]+/g, '');\n  var checksum = 0;\n  if (version === '10') {\n    if (!possibleIsbn10.test(sanitizedIsbn)) {\n      return false;\n    }\n    for (var i = 0; i < version - 1; i++) {\n      checksum += (i + 1) * sanitizedIsbn.charAt(i);\n    }\n    if (sanitizedIsbn.charAt(9) === 'X') {\n      checksum += 10 * 10;\n    } else {\n      checksum += 10 * sanitizedIsbn.charAt(9);\n    }\n    if (checksum % 11 === 0) {\n      return true;\n    }\n  } else if (version === '13') {\n    if (!possibleIsbn13.test(sanitizedIsbn)) {\n      return false;\n    }\n    for (var _i = 0; _i < 12; _i++) {\n      checksum += factor[_i % 2] * sanitizedIsbn.charAt(_i);\n    }\n    if (sanitizedIsbn.charAt(12) - (10 - checksum % 10) % 10 === 0) {\n      return true;\n    }\n  }\n  return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isMD5;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar md5 = /^[a-f0-9]{32}$/;\nfunction isMD5(str) {\n  (0, _assertString.default)(str);\n  return md5.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = escape;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction escape(str) {\n  (0, _assertString.default)(str);\n  return str.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/'/g, '&#x27;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\//g, '&#x2F;').replace(/\\\\/g, '&#x5C;').replace(/`/g, '&#96;');\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isSemVer;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _multilineRegex = _interopRequireDefault(require(\"./util/multilineRegex\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/**\n * Regular Expression to match\n * semantic versioning (SemVer)\n * built from multi-line, multi-parts regexp\n * Reference: https://semver.org/\n */\nvar semanticVersioningRegex = (0, _multilineRegex.default)(['^(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)', '(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-z-][0-9a-z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-z-][0-9a-z-]*))*))', '?(?:\\\\+([0-9a-z-]+(?:\\\\.[0-9a-z-]+)*))?$'], 'i');\nfunction isSemVer(str) {\n  (0, _assertString.default)(str);\n  return semanticVersioningRegex.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isULID;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction isULID(str) {\n  (0, _assertString.default)(str);\n  return /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/i.test(str);\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// Original Source: https://raw.githubusercontent.com/validatorjs/validator.js/refs/heads/master/test/validators.test.js\n// Version: https://github.com/validatorjs/validator.js/tree/13.15.15\n\nimport { default as validatorjs } from \"validator\";\n\nlet assertionCount = 0;\n\nfunction assert(condition, ...args) {\n  assertionCount++;\n  if (!condition) throw new Error(`Assertion failure: ${args}`);\n}\n\nfunction describe(name, body) {\n  body();\n}\n\nfunction it(name, body) {\n  body();\n}\n\nfunction test({ validator, args = [], valid, invalid }) {\n  const validatorMethod = validatorjs[validator];\n  valid?.forEach((validValue) => {\n    assert(validatorMethod(validValue, ...args), validValue, ...args);\n  });\n  invalid?.forEach((validValue) => {\n    assert(!validatorMethod(validValue, ...args), validValue, ...args);\n  });\n}\n\nexport function runTest() {\n  assertionCount = 0;\n\n  describe(\"Validators\", () => {\n    it(\"should validate email addresses\", () => {\n      test({\n        validator: \"isEmail\",\n        valid: [\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"hans.m端[email protected]\",\n          \"hans@m端ller.com\",\n          \"test|123@m端ller.com\",\n          \"[email protected]\",\n          \"[email protected]\",\n          '\"foobar\"@example.com',\n          '\"  foo  m端ller \"@example.com',\n          '\"foo\\\\@bar\"@example.com',\n          `${\"a\".repeat(64)}@${\"a\".repeat(63)}.com`,\n          `${\"a\".repeat(64)}@${\"a\".repeat(63)}.com`,\n          `${\"a\".repeat(31)}@gmail.com`,\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n        ],\n        invalid: [\n          \"invalidemail@\",\n          \"invalid.com\",\n          \"@invalid.com\",\n          \"[email protected].\",\n          \"foo@_bar.com\",\n          \"somename@gmail.com\",\n          \"[email protected].\",\n          \"[email protected]\",\n          \"gmailgmailgmailgmailgmail@gmail.com\",\n          `${\"a\".repeat(64)}@${\"a\".repeat(251)}.com`,\n          `${\"a\".repeat(65)}@${\"a\".repeat(250)}.com`,\n          `${\"a\".repeat(64)}@${\"a\".repeat(64)}.com`,\n          `${\"a\".repeat(64)}@${\"a\".repeat(63)}.${\"a\".repeat(63)}.${\"a\".repeat(\n            63\n          )}.${\"a\".repeat(58)}.com`,\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected] m\",\n          \"[email protected]\",\n          \"test123+invalid! [email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          'wrong()[]\",:;<>@@gmail.com',\n          '\"wrong()[]\",:;<>@@gmail.com',\n          \"[email protected]�\",\n          \"[email protected]©\",\n          \"nbsp [email protected]\",\n          \"nbsp_test@te st.com\",\n          \"[email protected] m\",\n          '\"[email protected]',\n          '\"foo\"[email protected]',\n          'foo\"bar\"@gmail.com',\n        ],\n      });\n    });\n\n    it(\"should validate email addresses with domain specific validation\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ domain_specific_validation: true }],\n        valid: [\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          `${\"a\".repeat(30)}@gmail.com`,\n        ],\n        invalid: [\n          `${\"a\".repeat(31)}@gmail.com`,\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n        ],\n      });\n    });\n\n    it(\"should validate email addresses with underscores in the domain\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ allow_underscores: true }],\n        valid: [\"foobar@my_sarisari_store.typepad.com\"],\n        invalid: [],\n      });\n    });\n\n    it(\"should validate email addresses without UTF8 characters in local part\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ allow_utf8_local_part: false }],\n        valid: [\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"hans@m端ller.com\",\n          \"test|123@m端ller.com\",\n          \"[email protected]\",\n          \"[email protected]\",\n          '\"foobar\"@example.com',\n          '\"foo\\\\@bar\"@example.com',\n          '\"  foo  bar  \"@example.com',\n        ],\n        invalid: [\n          \"invalidemail@\",\n          \"invalid.com\",\n          \"@invalid.com\",\n          \"[email protected].\",\n          \"[email protected].\",\n          \"somename@gmail.com\",\n          \"hans.m端[email protected]\",\n          \"[email protected]\",\n          \"tü[email protected]\",\n          \"nbsp [email protected]\",\n        ],\n      });\n    });\n\n    it(\"should validate email addresses with display names\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ allow_display_name: true }],\n        valid: [\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"hans.m端[email protected]\",\n          \"hans@m端ller.com\",\n          \"test|123@m端ller.com\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <hans.m端[email protected]>\",\n          \"Some Name <hans@m端ller.com>\",\n          \"Some Name <test|123@m端ller.com>\",\n          \"Some Name <[email protected]>\",\n          \"'Foo Bar, Esq'<[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Middle Name <[email protected]>\",\n          \"Name <[email protected]>\",\n          \"Name<[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Name🍓With🍑Emoji🚴‍♀️🏆<[email protected]>\",\n          \"🍇🍗🍑<[email protected]>\",\n          '\"<displayNameInBrackets>\"<[email protected]>',\n          '\"\\\\\"quotes\\\\\"\"<[email protected]>',\n          '\"name;\"<[email protected]>',\n          '\"name;\" <[email protected]>',\n        ],\n        invalid: [\n          \"invalidemail@\",\n          \"invalid.com\",\n          \"@invalid.com\",\n          \"[email protected].\",\n          \"[email protected].\",\n          \"Some Name <invalidemail@>\",\n          \"Some Name <invalid.com>\",\n          \"Some Name <@invalid.com>\",\n          \"Some Name <[email protected].>\",\n          \"Some Name <[email protected].>\",\n          \"Some Name [email protected].>\",\n          \"Some Name <[email protected].\",\n          \"Some Name < [email protected] >\",\n          \"Name [email protected]\",\n          \"Some Name <[email protected]>\",\n          \"Some Name<emoji_in_address🍈@aftership.com>\",\n          \"invisibleCharacter\\u001F<[email protected]>\",\n          \"<displayNameInBrackets><[email protected]>\",\n          '\\\\\"quotes\\\\\"<[email protected]>',\n          '\"\"quotes\"\"<[email protected]>',\n          \"name;<[email protected]>\",\n          \"    <[email protected]>\",\n          '\"    \"<[email protected]>',\n        ],\n      });\n    });\n\n    it(\"should validate email addresses with required display names\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ require_display_name: true }],\n        valid: [\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <hans.m端[email protected]>\",\n          \"Some Name <hans@m端ller.com>\",\n          \"Some Name <test|123@m端ller.com>\",\n          \"Some Name <[email protected]>\",\n          \"Some Name <[email protected]>\",\n          \"Some Middle Name <[email protected]>\",\n          \"Name <[email protected]>\",\n          \"Name<[email protected]>\",\n        ],\n        invalid: [\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"[email protected]\",\n          \"hans.m端[email protected]\",\n          \"hans@m端ller.com\",\n          \"test|123@m端ller.com\",\n          \"[email protected]\",\n          \"invalidemail@\",\n          \"invalid.com\",\n          \"@invalid.com\",\n          \"[email protected].\",\n          \"[email protected].\",\n          \"Some Name <invalidemail@>\",\n          \"Some Name <invalid.com>\",\n          \"Some Name <@invalid.com>\",\n          \"Some Name <[email protected].>\",\n          \"Some Name <[email protected].>\",\n          \"Some Name [email protected].>\",\n          \"Some Name <[email protected].\",\n          \"Some Name < [email protected] >\",\n          \"Name [email protected]\",\n        ],\n      });\n    });\n\n    it(\"should validate email addresses with allowed IPs\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ allow_ip_domain: true }],\n        valid: [\"email@[123.123.123.123]\", \"[email protected]\"],\n        invalid: [\n          \"[email protected]\",\n          \"[email protected]\",\n          \"email@[266.266.266.266]\",\n        ],\n      });\n    });\n\n    it(\"should not validate email addresses with blacklisted chars in the name\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ blacklisted_chars: 'abc\"' }],\n        valid: [\"[email protected]\"],\n        invalid: [\n          \"[email protected]\",\n          '\"foobr\"@example.com',\n          '\" foo m端ller \"@example.com',\n          '\"foo@br\"@example.com',\n        ],\n      });\n    });\n\n    it(\"should validate really long emails if ignore_max_length is set\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ ignore_max_length: false }],\n        valid: [],\n        invalid: [\n          \"Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@example.com\",\n        ],\n      });\n\n      test({\n        validator: \"isEmail\",\n        args: [{ ignore_max_length: true }],\n        valid: [\n          \"Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@example.com\",\n        ],\n        invalid: [],\n      });\n\n      test({\n        validator: \"isEmail\",\n        args: [{ ignore_max_length: true }],\n        valid: [\n          \"Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX.com\",\n        ],\n        invalid: [],\n      });\n    });\n\n    it(\"should not validate email addresses with denylisted domains\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ host_blacklist: [\"gmail.com\", \"foo.bar.com\"] }],\n        valid: [\"[email protected]\"],\n        invalid: [\"[email protected]\", \"[email protected]\"],\n      });\n    });\n\n    it(\"should allow regular expressions in the host blacklist of isEmail\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [\n          {\n            host_blacklist: [\"bar.com\", \"foo.com\", /\\.foo\\.com$/],\n          },\n        ],\n        valid: [\"[email protected]\", \"[email protected]\", \"[email protected]\"],\n        invalid: [\"[email protected]\", \"[email protected]\", \"[email protected]\"],\n      });\n    });\n\n    it(\"should validate only email addresses with whitelisted domains\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [{ host_whitelist: [\"gmail.com\", \"foo.bar.com\"] }],\n        valid: [\"[email protected]\", \"[email protected]\"],\n        invalid: [\"[email protected]\", \"[email protected]\", \"[email protected]\"],\n      });\n    });\n\n    it(\"should allow regular expressions in the host whitelist of isEmail\", () => {\n      test({\n        validator: \"isEmail\",\n        args: [\n          {\n            host_whitelist: [\"bar.com\", \"foo.com\", /\\.foo\\.com$/],\n          },\n        ],\n        valid: [\"[email protected]\", \"[email protected]\", \"[email protected]\"],\n        invalid: [\"[email protected]\", \"[email protected]\", \"[email protected]\"],\n      });\n    });\n\n    it(\"should validate URLs\", () => {\n      test({\n        validator: \"isURL\",\n        valid: [\n          \"foobar.com\",\n          \"www.foobar.com\",\n          \"foobar.com/\",\n          \"valid.au\",\n          \"http://www.foobar.com/\",\n          \"HTTP://WWW.FOOBAR.COM/\",\n          \"https://www.foobar.com/\",\n          \"HTTPS://WWW.FOOBAR.COM/\",\n          \"http://www.foobar.com:23/\",\n          \"http://www.foobar.com:65535/\",\n          \"http://www.foobar.com:5/\",\n          \"https://www.foobar.com/\",\n          \"ftp://www.foobar.com/\",\n          \"http://www.foobar.com/~foobar\",\n          \"http://user:[email protected]/\",\n          \"http://user:@www.foobar.com/\",\n          \"http://:[email protected]/\",\n          \"http://[email protected]\",\n          \"http://127.0.0.1/\",\n          \"http://10.0.0.0/\",\n          \"http://189.123.14.13/\",\n          \"http://duckduckgo.com/?q=%2F\",\n          \"http://foobar.com/t$-_.+!*'(),\",\n          \"http://foobar.com/?foo=bar#baz=qux\",\n          \"http://foobar.com?foo=bar\",\n          \"http://foobar.com#baz=qux\",\n          \"http://www.xn--froschgrn-x9a.net/\",\n          \"http://xn--froschgrn-x9a.com/\",\n          \"http://foo--bar.com\",\n          \"http://høyfjellet.no\",\n          \"http://xn--j1aac5a4g.xn--j1amh\",\n          \"http://xn------eddceddeftq7bvv7c4ke4c.xn--p1ai\",\n          \"http://кулік.укр\",\n          \"test.com?ref=http://test2.com\",\n          \"http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html\",\n          \"http://[1080:0:0:0:8:800:200C:417A]/index.html\",\n          \"http://[3ffe:2a00:100:7031::1]\",\n          \"http://[1080::8:800:200C:417A]/foo\",\n          \"http://[::192.9.5.5]/ipng\",\n          \"http://[::FFFF:129.144.52.38]:80/index.html\",\n          \"http://[2010:836B:4179::836B:4179]\",\n          \"http://example.com/example.json#/foo/bar\",\n          \"http://1337.com\",\n        ],\n        invalid: [\n          \"http://localhost:3000/\",\n          \"//foobar.com\",\n          \"xyz://foobar.com\",\n          \"invalid/\",\n          \"invalid.x\",\n          \"invalid.\",\n          \".com\",\n          \"http://com/\",\n          \"http://300.0.0.1/\",\n          \"mailto:[email protected]\",\n          \"rtmp://foobar.com\",\n          \"http://www.xn--.com/\",\n          \"http://xn--.com/\",\n          \"http://www.foobar.com:0/\",\n          \"http://www.foobar.com:70000/\",\n          \"http://www.foobar.com:99999/\",\n          \"http://www.-foobar.com/\",\n          \"http://www.foobar-.com/\",\n          \"http://foobar/# lol\",\n          \"http://foobar/? lol\",\n          \"http://foobar/ lol/\",\n          \"http://lol @foobar.com/\",\n          \"http://lol:lol @foobar.com/\",\n          \"http://lol:lol:[email protected]/\",\n          \"http://lol: @foobar.com/\",\n          \"http://www.foo_bar.com/\",\n          \"http://www.foobar.com/\\t\",\n          \"http://@foobar.com\",\n          \"http://:@foobar.com\",\n          \"http://\\[email protected]/\",\n          \"\",\n          `http://foobar.com/${new Array(2083).join(\"f\")}`,\n          \"http://*.foo.com\",\n          \"*.foo.com\",\n          \"!.foo.com\",\n          \"http://example.com.\",\n          \"http://localhost:61500this is an invalid url!!!!\",\n          \"////foobar.com\",\n          \"http:////foobar.com\",\n          \"https://example.com/foo/<script>alert('XSS')</script>/\",\n        ],\n      });\n    });\n\n    it(\"should validate URLs with custom protocols\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            protocols: [\"rtmp\"],\n          },\n        ],\n        valid: [\"rtmp://foobar.com\"],\n        invalid: [\"http://foobar.com\"],\n      });\n    });\n\n    it(\"should validate file URLs without a host\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            protocols: [\"file\"],\n            require_host: false,\n            require_tld: false,\n          },\n        ],\n        valid: [\"file://localhost/foo.txt\", \"file:///foo.txt\", \"file:///\"],\n        invalid: [\"http://foobar.com\", \"file://\"],\n      });\n    });\n\n    it(\"should validate postgres URLs without a host\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            protocols: [\"postgres\"],\n            require_host: false,\n          },\n        ],\n        valid: [\"postgres://user:pw@/test\"],\n        invalid: [\"http://foobar.com\", \"postgres://\"],\n      });\n    });\n\n    it(\"should validate URLs with any protocol\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            require_valid_protocol: false,\n          },\n        ],\n        valid: [\"rtmp://foobar.com\", \"http://foobar.com\", \"test://foobar.com\"],\n        invalid: [\"mailto:[email protected]\"],\n      });\n    });\n\n    it(\"should validate URLs with underscores\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            allow_underscores: true,\n          },\n        ],\n        valid: [\n          \"http://foo_bar.com\",\n          \"http://pr.example_com.294.example.com/\",\n          \"http://foo__bar.com\",\n          \"http://_.example.com\",\n        ],\n        invalid: [],\n      });\n    });\n\n    it(\"should validate URLs that do not have a TLD\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            require_tld: false,\n          },\n        ],\n        valid: [\n          \"http://foobar.com/\",\n          \"http://foobar/\",\n          \"http://localhost/\",\n          \"foobar/\",\n          \"foobar\",\n        ],\n        invalid: [],\n      });\n    });\n\n    it(\"should validate URLs with a trailing dot option\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            allow_trailing_dot: true,\n            require_tld: false,\n          },\n        ],\n        valid: [\"http://example.com.\", \"foobar.\"],\n      });\n    });\n\n    it(\"should validate URLs with column and no port\", () => {\n      test({\n        validator: \"isURL\",\n        valid: [\"http://example.com:\", \"ftp://example.com:\"],\n        invalid: [\"https://example.com:abc\"],\n      });\n    });\n\n    it(\"should validate sftp protocol URL containing column and no port\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            protocols: [\"sftp\"],\n          },\n        ],\n        valid: [\"sftp://user:[email protected]:/incoming/things.csv\"],\n      });\n    });\n\n    it(\"should validate protocol relative URLs\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            allow_protocol_relative_urls: true,\n          },\n        ],\n        valid: [\"//foobar.com\", \"http://foobar.com\", \"foobar.com\"],\n        invalid: [\n          \"://foobar.com\",\n          \"/foobar.com\",\n          \"////foobar.com\",\n          \"http:////foobar.com\",\n        ],\n      });\n    });\n\n    it(\"should not validate URLs with fragments when allow fragments is false\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            allow_fragments: false,\n          },\n        ],\n        valid: [\"http://foobar.com\", \"foobar.com\"],\n        invalid: [\"http://foobar.com#part\", \"foobar.com#part\"],\n      });\n    });\n\n    it(\"should not validate URLs with query components when allow query components is false\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            allow_query_components: false,\n          },\n        ],\n        valid: [\"http://foobar.com\", \"foobar.com\"],\n        invalid: [\n          \"http://foobar.com?foo=bar\",\n          \"http://foobar.com?foo=bar&bar=foo\",\n          \"foobar.com?foo=bar\",\n          \"foobar.com?foo=bar&bar=foo\",\n        ],\n      });\n    });\n\n    it(\"should not validate protocol relative URLs when require protocol is true\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            allow_protocol_relative_urls: true,\n            require_protocol: true,\n          },\n        ],\n        valid: [\"http://foobar.com\"],\n        invalid: [\"//foobar.com\", \"://foobar.com\", \"/foobar.com\", \"foobar.com\"],\n      });\n    });\n\n    it(\"should let users specify whether URLs require a protocol\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            require_protocol: true,\n          },\n        ],\n        valid: [\"http://foobar.com/\"],\n        invalid: [\"http://localhost/\", \"foobar.com\", \"foobar\"],\n      });\n    });\n\n    it(\"should let users specify a host whitelist\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            host_whitelist: [\"foo.com\", \"bar.com\"],\n          },\n        ],\n        valid: [\"http://bar.com/\", \"http://foo.com/\"],\n        invalid: [\"http://foobar.com\", \"http://foo.bar.com/\", \"http://qux.com\"],\n      });\n    });\n\n    it(\"should allow regular expressions in the host whitelist\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            host_whitelist: [\"bar.com\", \"foo.com\", /\\.foo\\.com$/],\n          },\n        ],\n        valid: [\n          \"http://bar.com/\",\n          \"http://foo.com/\",\n          \"http://images.foo.com/\",\n          \"http://cdn.foo.com/\",\n          \"http://a.b.c.foo.com/\",\n        ],\n        invalid: [\"http://foobar.com\", \"http://foo.bar.com/\", \"http://qux.com\"],\n      });\n    });\n\n    it(\"should let users specify a host blacklist\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            host_blacklist: [\"foo.com\", \"bar.com\"],\n          },\n        ],\n        valid: [\"http://foobar.com\", \"http://foo.bar.com/\", \"http://qux.com\"],\n        invalid: [\"http://bar.com/\", \"http://foo.com/\"],\n      });\n    });\n\n    it(\"should allow regular expressions in the host blacklist\", () => {\n      test({\n        validator: \"isURL\",\n        args: [\n          {\n            host_blacklist: [\"bar.com\", \"foo.com\", /\\.foo\\.com$/],\n          },\n        ],\n        valid: [\"http://foobar.com\", \"http://foo.bar.com/\", \"http://qux.com\"],\n        invalid: [\n          \"http://bar.com/\",\n          \"http://foo.com/\",\n          \"http://images.foo.com/\",\n          \"http://cdn.foo.com/\",\n          \"http://a.b.c.foo.com/\",\n        ],\n      });\n    });\n\n    it(\"should allow rejecting urls containing authentication information\", () => {\n      test({\n        validator: \"isURL\",\n        args: [{ disallow_auth: true }],\n        valid: [\"doe.com\"],\n        invalid: [\"[email protected]\", \"john:[email protected]\"],\n      });\n    });\n\n    it(\"should accept urls containing authentication information\", () => {\n      test({\n        validator: \"isURL\",\n        args: [{ disallow_auth: false }],\n        valid: [\n          \"[email protected]\",\n          \"user:@example.com\",\n          \"user:[email protected]\",\n        ],\n        invalid: [\n          \"user:user:[email protected]\",\n          \"@example.com\",\n          \":@example.com\",\n          \":example.com\",\n        ],\n      });\n    });\n\n    it(\"should allow user to skip URL length validation\", () => {\n      test({\n        validator: \"isURL\",\n        args: [{ validate_length: false }],\n        valid: [\n          \"http://foobar.com/f\",\n          `http://foobar.com/${new Array(2083).join(\"f\")}`,\n        ],\n        invalid: [],\n      });\n    });\n\n    it(\"should allow user to configure the maximum URL length\", () => {\n      test({\n        validator: \"isURL\",\n        args: [{ max_allowed_length: 20 }],\n        valid: [\n          \"http://foobar.com/12\", // 20 characters\n          \"http://foobar.com/\",\n        ],\n        invalid: [\n          \"http://foobar.com/123\", // 21 characters\n          \"http://foobar.com/1234567890\",\n        ],\n      });\n    });\n\n    it(\"should validate URLs with port present\", () => {\n      test({\n        validator: \"isURL\",\n        args: [{ require_port: true }],\n        valid: [\n          \"http://user:[email protected]:1\",\n          \"http://user:@www.foobar.com:65535\",\n          \"http://127.0.0.1:23\",\n          \"http://10.0.0.0:256\",\n          \"http://189.123.14.13:256\",\n          \"http://duckduckgo.com:65535?q=%2F\",\n        ],\n        invalid: [\n          \"http://user:[email protected]/\",\n          \"http://user:@www.foobar.com/\",\n          \"http://127.0.0.1/\",\n          \"http://10.0.0.0/\",\n          \"http://189.123.14.13/\",\n          \"http://duckduckgo.com/?q=%2F\",\n        ],\n      });\n    });\n\n    it(\"should validate MAC addresses\", () => {\n      test({\n        validator: \"isMACAddress\",\n        valid: [\n          \"ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:ab\",\n          \"01:AB:03:04:05:06\",\n          \"A9 C5 D4 9F EB D3\",\n          \"01 02 03 04 05 ab\",\n          \"01-02-03-04-05-ab\",\n          \"0102.0304.05ab\",\n          \"ab:ab:ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:06:07:ab\",\n          \"01:AB:03:04:05:06:07:08\",\n          \"A9 C5 D4 9F EB D3 B6 65\",\n          \"01 02 03 04 05 06 07 ab\",\n          \"01-02-03-04-05-06-07-ab\",\n          \"0102.0304.0506.07ab\",\n        ],\n        invalid: [\n          \"abc\",\n          \"01:02:03:04:05\",\n          \"01:02:03:04:05:z0\",\n          \"01:02:03:04::ab\",\n          \"1:2:3:4:5:6\",\n          \"AB:CD:EF:GH:01:02\",\n          \"A9C5 D4 9F EB D3\",\n          \"01-02 03:04 05 ab\",\n          \"0102.03:04.05ab\",\n          \"900f/dffs/sdea\",\n          \"01:02:03:04:05:06:07\",\n          \"01:02:03:04:05:06:07:z0\",\n          \"01:02:03:04:05:06::ab\",\n          \"1:2:3:4:5:6:7:8\",\n          \"AB:CD:EF:GH:01:02:03:04\",\n          \"A9C5 D4 9F EB D3 B6 65\",\n          \"01-02 03:04 05 06 07 ab\",\n          \"0102.03:04.0506.07ab\",\n          \"900f/dffs/sdea/54gh\",\n        ],\n      });\n      test({\n        validator: \"isMACAddress\",\n        args: [\n          {\n            eui: \"48\",\n          },\n        ],\n        valid: [\n          \"ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:ab\",\n          \"01:AB:03:04:05:06\",\n          \"A9 C5 D4 9F EB D3\",\n          \"01 02 03 04 05 ab\",\n          \"01-02-03-04-05-ab\",\n          \"0102.0304.05ab\",\n        ],\n        invalid: [\n          \"ab:ab:ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:06:07:ab\",\n          \"01:AB:03:04:05:06:07:08\",\n          \"A9 C5 D4 9F EB D3 B6 65\",\n          \"01 02 03 04 05 06 07 ab\",\n          \"01-02-03-04-05-06-07-ab\",\n          \"0102.0304.0506.07ab\",\n        ],\n      });\n      test({\n        validator: \"isMACAddress\",\n        args: [\n          {\n            eui: \"64\",\n          },\n        ],\n        valid: [\n          \"ab:ab:ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:06:07:ab\",\n          \"01:AB:03:04:05:06:07:08\",\n          \"A9 C5 D4 9F EB D3 B6 65\",\n          \"01 02 03 04 05 06 07 ab\",\n          \"01-02-03-04-05-06-07-ab\",\n          \"0102.0304.0506.07ab\",\n        ],\n        invalid: [\n          \"ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:ab\",\n          \"01:AB:03:04:05:06\",\n          \"A9 C5 D4 9F EB D3\",\n          \"01 02 03 04 05 ab\",\n          \"01-02-03-04-05-ab\",\n          \"0102.0304.05ab\",\n        ],\n      });\n    });\n\n    it(\"should validate MAC addresses without separator\", () => {\n      test({\n        validator: \"isMACAddress\",\n        args: [\n          {\n            no_separators: true,\n          },\n        ],\n        valid: [\n          \"abababababab\",\n          \"FFFFFFFFFFFF\",\n          \"0102030405ab\",\n          \"01AB03040506\",\n          \"abababababababab\",\n          \"FFFFFFFFFFFFFFFF\",\n          \"01020304050607ab\",\n          \"01AB030405060708\",\n        ],\n        invalid: [\n          \"abc\",\n          \"01:02:03:04:05\",\n          \"01:02:03:04::ab\",\n          \"1:2:3:4:5:6\",\n          \"AB:CD:EF:GH:01:02\",\n          \"ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:ab\",\n          \"01:AB:03:04:05:06\",\n          \"0102030405\",\n          \"01020304ab\",\n          \"123456\",\n          \"ABCDEFGH0102\",\n          \"01:02:03:04:05:06:07\",\n          \"01:02:03:04:05:06::ab\",\n          \"1:2:3:4:5:6:7:8\",\n          \"AB:CD:EF:GH:01:02:03:04\",\n          \"ab:ab:ab:ab:ab:ab:ab:ab\",\n          \"FF:FF:FF:FF:FF:FF:FF:FF\",\n          \"01:02:03:04:05:06:07:ab\",\n          \"01:AB:03:04:05:06:07:08\",\n          \"01020304050607\",\n          \"010203040506ab\",\n          \"12345678\",\n          \"ABCDEFGH01020304\",\n        ],\n      });\n      test({\n        validator: \"isMACAddress\",\n        args: [\n          {\n            no_separators: true,\n            eui: \"48\",\n          },\n        ],\n        valid: [\"abababababab\", \"FFFFFFFFFFFF\", \"0102030405ab\", \"01AB03040506\"],\n        invalid: [\n          \"abababababababab\",\n          \"FFFFFFFFFFFFFFFF\",\n          \"01020304050607ab\",\n          \"01AB030405060708\",\n        ],\n      });\n      test({\n        validator: \"isMACAddress\",\n        args: [\n          {\n            no_separators: true,\n            eui: \"64\",\n          },\n        ],\n        valid: [\n          \"abababababababab\",\n          \"FFFFFFFFFFFFFFFF\",\n          \"01020304050607ab\",\n          \"01AB030405060708\",\n        ],\n        invalid: [\n          \"abababababab\",\n          \"FFFFFFFFFFFF\",\n          \"0102030405ab\",\n          \"01AB03040506\",\n        ],\n      });\n    });\n\n    it(\"should validate isIPRange\", () => {\n      test({\n        validator: \"isIPRange\",\n        valid: [\n          \"127.0.0.1/24\",\n          \"0.0.0.0/0\",\n          \"255.255.255.0/32\",\n          \"::/0\",\n          \"::/128\",\n          \"2001::/128\",\n          \"2001:800::/128\",\n          \"::ffff:127.0.0.1/128\",\n        ],\n        invalid: [\n          \"abc\",\n          \"127.200.230.1/35\",\n          \"127.200.230.1/-1\",\n          \"1.1.1.1/011\",\n          \"1.1.1/24.1\",\n          \"1.1.1.1/01\",\n          \"1.1.1.1/1.1\",\n          \"1.1.1.1/1.\",\n          \"1.1.1.1/1/1\",\n          \"1.1.1.1\",\n          \"::1\",\n          \"::1/164\",\n          \"2001::/240\",\n          \"2001::/-1\",\n          \"2001::/001\",\n          \"2001::/24.1\",\n          \"2001:db8:0000:1:1:1:1:1\",\n          \"::ffff:127.0.0.1\",\n        ],\n      });\n      test({\n        validator: \"isIPRange\",\n        args: [4],\n        valid: [\n          \"127.0.0.1/1\",\n          \"0.0.0.0/1\",\n          \"255.255.255.255/1\",\n          \"1.2.3.4/1\",\n          \"255.0.0.1/1\",\n          \"0.0.1.1/1\",\n        ],\n        invalid: [\n          \"abc\",\n          \"::1\",\n          \"2001:db8:0000:1:1:1:1:1\",\n          \"::ffff:127.0.0.1\",\n          \"137.132.10.01\",\n          \"0.256.0.256\",\n          \"255.256.255.256\",\n        ],\n      });\n      test({\n        validator: \"isIPRange\",\n        args: [6],\n        valid: [\"::1/1\", \"2001:db8:0000:1:1:1:1:1/1\", \"::ffff:127.0.0.1/1\"],\n        invalid: [\n          \"abc\",\n          \"127.0.0.1\",\n          \"0.0.0.0\",\n          \"255.255.255.255\",\n          \"1.2.3.4\",\n          \"::ffff:287.0.0.1\",\n          \"::ffff:287.0.0.1/254\",\n          \"%\",\n          \"fe80::1234%\",\n          \"fe80::1234%1%3%4\",\n          \"fe80%fe80%\",\n        ],\n      });\n      test({\n        validator: \"isIPRange\",\n        args: [10],\n        valid: [],\n        invalid: [\n          \"abc\",\n          \"127.0.0.1/1\",\n          \"0.0.0.0/1\",\n          \"255.255.255.255/1\",\n          \"1.2.3.4/1\",\n          \"::1/1\",\n          \"2001:db8:0000:1:1:1:1:1/1\",\n        ],\n      });\n    });\n\n    it(\"should validate FQDN\", () => {\n      test({\n        validator: \"isFQDN\",\n        valid: [\n          \"domain.com\",\n          \"dom.plato\",\n          \"a.domain.co\",\n          \"foo--bar.com\",\n          \"xn--froschgrn-x9a.com\",\n          \"rebecca.blackfriday\",\n          \"1337.com\",\n        ],\n        invalid: [\n          \"abc\",\n          \"256.0.0.0\",\n          \"_.com\",\n          \"*.some.com\",\n          \"s!ome.com\",\n          \"domain.com/\",\n          \"/more.com\",\n          \"domain.com�\",\n          \"domain.co\\u00A0m\",\n          \"domain.co\\u1680m\",\n          \"domain.co\\u2006m\",\n          \"domain.co\\u2028m\",\n          \"domain.co\\u2029m\",\n          \"domain.co\\u202Fm\",\n          \"domain.co\\u205Fm\",\n          \"domain.co\\u3000m\",\n          \"domain.com\\uDC00\",\n          \"domain.co\\uEFFFm\",\n          \"domain.co\\uFDDAm\",\n          \"domain.co\\uFFF4m\",\n          \"domain.com©\",\n          \"example.0\",\n          \"192.168.0.9999\",\n          \"192.168.0\",\n        ],\n      });\n    });\n    it(\"should validate FQDN with trailing dot option\", () => {\n      test({\n        validator: \"isFQDN\",\n        args: [{ allow_trailing_dot: true }],\n        valid: [\"example.com.\"],\n      });\n    });\n    it(\"should invalidate FQDN when not require_tld\", () => {\n      test({\n        validator: \"isFQDN\",\n        args: [{ require_tld: false }],\n        invalid: [\"example.0\", \"192.168.0\", \"192.168.0.9999\"],\n      });\n    });\n    it(\"should validate FQDN when not require_tld but allow_numeric_tld\", () => {\n      test({\n        validator: \"isFQDN\",\n        args: [{ allow_numeric_tld: true, require_tld: false }],\n        valid: [\"example.0\", \"192.168.0\", \"192.168.0.9999\"],\n      });\n    });\n    it(\"should validate FQDN with wildcard option\", () => {\n      test({\n        validator: \"isFQDN\",\n        args: [{ allow_wildcard: true }],\n        valid: [\"*.example.com\", \"*.shop.example.com\"],\n      });\n    });\n    it(\"should validate FQDN with required allow_trailing_dot, allow_underscores and allow_numeric_tld options\", () => {\n      test({\n        validator: \"isFQDN\",\n        args: [\n          {\n            allow_trailing_dot: true,\n            allow_underscores: true,\n            allow_numeric_tld: true,\n          },\n        ],\n        valid: [\"abc.efg.g1h.\", \"as1s.sad3s.ssa2d.\"],\n      });\n    });\n\n    it(\"should validate alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        valid: [\"abc\", \"ABC\", \"FoObar\"],\n        invalid: [\"abc1\", \"  foo  \", \"\", \"ÄBC\", \"FÜübar\", \"Jön\", \"Heiß\"],\n      });\n    });\n\n    it(\"should validate alpha string with ignored characters\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"en-US\", { ignore: \"- /\" }], // ignore [space-/]\n        valid: [\"en-US\", \"this is a valid alpha string\", \"us/usa\"],\n        invalid: [\n          \"1. this is not a valid alpha string\",\n          \"this$is also not a valid.alpha string\",\n          \"this is also not a valid alpha string.\",\n        ],\n      });\n\n      test({\n        validator: \"isAlpha\",\n        args: [\"en-US\", { ignore: /[\\s/-]/g }], // ignore [space -]\n        valid: [\"en-US\", \"this is a valid alpha string\"],\n        invalid: [\n          \"1. this is not a valid alpha string\",\n          \"this$is also not a valid.alpha string\",\n          \"this is also not a valid alpha string.\",\n        ],\n      });\n\n      test({\n        validator: \"isAlpha\",\n        args: [\"en-US\", { ignore: 1234 }], // invalid ignore matcher\n        error: [\"alpha\"],\n      });\n    });\n\n    it(\"should validate Azerbaijani alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"az-AZ\"],\n        valid: [\n          \"Azərbaycan\",\n          \"Bakı\",\n          \"üöğıəçş\",\n          \"sizAzərbaycanlaşdırılmışlardansınızmı\",\n          \"dahaBirDüzgünString\",\n          \"abcçdeəfgğhxıijkqlmnoöprsştuüvyz\",\n        ],\n        invalid: [\"rəqəm1\", \"  foo  \", \"\", \"ab(cd)\", \"simvol@\", \"wəkil\"],\n      });\n    });\n\n    it(\"should validate bulgarian alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"bg-BG\"],\n        valid: [\"абв\", \"АБВ\", \"жаба\", \"яГоДа\"],\n        invalid: [\"abc1\", \"  foo  \", \"\", \"ЁЧПС\", \"_аз_обичам_обувки_\", \"ехо!\"],\n      });\n    });\n\n    it(\"should validate Bengali alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"bn-BD\"],\n        valid: [\"অয়াওর\", \"ফগফদ্রত\", \"ফদ্ম্যতভ\", \"বেরেওভচনভন\", \"আমারবাসগা\"],\n        invalid: [\"দাস২৩৪\", \"  দ্গফহ্নভ  \", \"\", \"(গফদ)\"],\n      });\n    });\n\n    it(\"should validate czech alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"cs-CZ\"],\n        valid: [\"žluťoučký\", \"KŮŇ\", \"Pěl\", \"Ďábelské\", \"ódy\"],\n        invalid: [\"ábc1\", \"  fůj  \", \"\"],\n      });\n    });\n\n    it(\"should validate slovak alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"sk-SK\"],\n        valid: [\n          \"môj\",\n          \"ľúbím\",\n          \"mäkčeň\",\n          \"stĹp\",\n          \"vŕba\",\n          \"ňorimberk\",\n          \"ťava\",\n          \"žanéta\",\n          \"Ďábelské\",\n          \"ódy\",\n        ],\n        invalid: [\"1moj\", \"你好世界\", \"  Привет мир  \", \"مرحبا العا \"],\n      });\n    });\n\n    it(\"should validate danish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"da-DK\"],\n        valid: [\"aøå\", \"Ære\", \"Øre\", \"Åre\"],\n        invalid: [\"äbc123\", \"ÄBC11\", \"\"],\n      });\n    });\n\n    it(\"should validate dutch alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"nl-NL\"],\n        valid: [\"Kán\", \"één\", \"vóór\", \"nú\", \"héél\"],\n        invalid: [\"äca \", \"abcß\", \"Øre\"],\n      });\n    });\n\n    it(\"should validate german alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"de-DE\"],\n        valid: [\"äbc\", \"ÄBC\", \"FöÖbär\", \"Heiß\"],\n        invalid: [\"äbc1\", \"  föö  \", \"\"],\n      });\n    });\n\n    it(\"should validate hungarian alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"hu-HU\"],\n        valid: [\"árvíztűrőtükörfúrógép\", \"ÁRVÍZTŰRŐTÜKÖRFÚRÓGÉP\"],\n        invalid: [\"äbc1\", \"  fäö  \", \"Heiß\", \"\"],\n      });\n    });\n\n    it(\"should validate portuguese alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"pt-PT\"],\n        valid: [\"palíndromo\", \"órgão\", \"qwértyúão\", \"àäãcëüïÄÏÜ\"],\n        invalid: [\"12abc\", \"Heiß\", \"Øre\", \"æøå\", \"\"],\n      });\n    });\n\n    it(\"should validate italian alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"it-IT\"],\n        valid: [\n          \"àéèìîóòù\",\n          \"correnti\",\n          \"DEFINIZIONE\",\n          \"compilazione\",\n          \"metró\",\n          \"pèsca\",\n          \"PÉSCA\",\n          \"genî\",\n        ],\n        invalid: [\"äbc123\", \"ÄBC11\", \"æøå\", \"\"],\n      });\n    });\n\n    it(\"should validate Japanese alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"ja-JP\"],\n        valid: [\n          \"あいうえお\",\n          \"がぎぐげご\",\n          \"ぁぃぅぇぉ\",\n          \"アイウエオ\",\n          \"ァィゥェ\",\n          \"アイウエオ\",\n          \"吾輩は猫である\",\n          \"臥薪嘗胆\",\n          \"新世紀エヴァンゲリオン\",\n          \"天国と地獄\",\n          \"七人の侍\",\n          \"シン・ウルトラマン\",\n        ],\n        invalid: [\"あいう123\", \"abcあいう\", \"1984\"],\n      });\n    });\n\n    it(\"should validate kazakh alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"kk-KZ\"],\n        valid: [\n          \"Сәлем\",\n          \"қанағаттандырылмағандықтарыңыздан\",\n          \"Кешіріңіз\",\n          \"Өкінішке\",\n          \"Қайталаңызшы\",\n          \"ағылшынша\",\n          \"түсінбедім\",\n        ],\n        invalid: [\"Кешіріңіз1\", \"  Кет бар  \", \"مرحبا العا\"],\n      });\n    });\n\n    it(\"should validate Vietnamese alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"vi-VN\"],\n        valid: [\"thiến\", \"nghiêng\", \"xin\", \"chào\", \"thế\", \"giới\"],\n        invalid: [\"thầy3\", \"Ba gà\", \"\"],\n      });\n    });\n\n    it(\"should validate arabic alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"ar\"],\n        valid: [\"أبت\", \"اَبِتَثّجً\"],\n        invalid: [\n          \"١٢٣أبت\",\n          \"١٢٣\",\n          \"abc1\",\n          \"  foo  \",\n          \"\",\n          \"ÄBC\",\n          \"FÜübar\",\n          \"Jön\",\n          \"Heiß\",\n        ],\n      });\n    });\n\n    it(\"should validate farsi alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"fa-IR\"],\n        valid: [\"پدر\", \"مادر\", \"برادر\", \"خواهر\"],\n        invalid: [\n          \"فارسی۱۲۳\",\n          \"۱۶۴\",\n          \"abc1\",\n          \"  foo  \",\n          \"\",\n          \"ÄBC\",\n          \"FÜübar\",\n          \"Jön\",\n          \"Heiß\",\n        ],\n      });\n    });\n\n    it(\"should validate finnish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"fi-FI\"],\n        valid: [\"äiti\", \"Öljy\", \"Åke\", \"testÖ\"],\n        invalid: [\"AİıÖöÇ窺ĞğÜüZ\", \"äöå123\", \"\"],\n      });\n    });\n\n    it(\"should validate kurdish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"ku-IQ\"],\n        valid: [\"ئؤڤگێ\", \"کوردستان\"],\n        invalid: [\n          \"ئؤڤگێ١٢٣\",\n          \"١٢٣\",\n          \"abc1\",\n          \"  foo  \",\n          \"\",\n          \"ÄBC\",\n          \"FÜübar\",\n          \"Jön\",\n          \"Heiß\",\n        ],\n      });\n    });\n\n    it(\"should validate norwegian alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"nb-NO\"],\n        valid: [\"aøå\", \"Ære\", \"Øre\", \"Åre\"],\n        invalid: [\"äbc123\", \"ÄBC11\", \"\"],\n      });\n    });\n\n    it(\"should validate polish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"pl-PL\"],\n        valid: [\n          \"kreską\",\n          \"zamknięte\",\n          \"zwykłe\",\n          \"kropką\",\n          \"przyjęły\",\n          \"święty\",\n          \"Pozwól\",\n        ],\n        invalid: [\"12řiď \", \"blé!!\", \"föö!2!\"],\n      });\n    });\n\n    it(\"should validate serbian cyrillic alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"sr-RS\"],\n        valid: [\"ШћжЂљЕ\", \"ЧПСТЋЏ\"],\n        invalid: [\"řiď \", \"blé33!!\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate serbian latin alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"sr-RS@latin\"],\n        valid: [\"ŠAabčšđćž\", \"ŠATROĆčđš\"],\n        invalid: [\"12řiď \", \"blé!!\", \"föö!2!\"],\n      });\n    });\n\n    it(\"should validate spanish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"es-ES\"],\n        valid: [\"ábcó\", \"ÁBCÓ\", \"dormís\", \"volvés\", \"español\"],\n        invalid: [\"äca \", \"abcß\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate swedish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"sv-SE\"],\n        valid: [\"religiös\", \"stjäla\", \"västgöte\", \"Åre\"],\n        invalid: [\"AİıÖöÇ窺ĞğÜüZ\", \"religiös23\", \"\"],\n      });\n    });\n\n    it(\"should validate defined arabic locales alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"ar-SY\"],\n        valid: [\"أبت\", \"اَبِتَثّجً\"],\n        invalid: [\n          \"١٢٣أبت\",\n          \"١٢٣\",\n          \"abc1\",\n          \"  foo  \",\n          \"\",\n          \"ÄBC\",\n          \"FÜübar\",\n          \"Jön\",\n          \"Heiß\",\n        ],\n      });\n    });\n\n    it(\"should validate turkish alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"tr-TR\"],\n        valid: [\"AİıÖöÇ窺ĞğÜüZ\"],\n        invalid: [\n          \"0AİıÖöÇ窺ĞğÜüZ1\",\n          \"  AİıÖöÇ窺ĞğÜüZ  \",\n          \"abc1\",\n          \"  foo  \",\n          \"\",\n          \"ÄBC\",\n          \"Heiß\",\n        ],\n      });\n    });\n\n    it(\"should validate urkrainian alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"uk-UA\"],\n        valid: [\"АБВГҐДЕЄЖЗИIЇЙКЛМНОПРСТУФХЦШЩЬЮЯ\"],\n        invalid: [\n          \"0AİıÖöÇ窺ĞğÜüZ1\",\n          \"  AİıÖöÇ窺ĞğÜüZ  \",\n          \"abc1\",\n          \"  foo  \",\n          \"\",\n          \"ÄBC\",\n          \"Heiß\",\n          \"ЫыЪъЭэ\",\n        ],\n      });\n    });\n\n    it(\"should validate greek alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"el-GR\"],\n        valid: [\n          \"αβγδεζηθικλμνξοπρςστυφχψω\",\n          \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ\",\n          \"άέήίΰϊϋόύώ\",\n          \"ΆΈΉΊΪΫΎΏ\",\n        ],\n        invalid: [\n          \"0AİıÖöÇ窺ĞğÜüZ1\",\n          \"  AİıÖöÇ窺ĞğÜüZ  \",\n          \"ÄBC\",\n          \"Heiß\",\n          \"ЫыЪъЭэ\",\n          \"120\",\n          \"jαckγ\",\n        ],\n      });\n    });\n\n    it(\"should validate Hebrew alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"he\"],\n        valid: [\"בדיקה\", \"שלום\"],\n        invalid: [\"בדיקה123\", \"  foo  \", \"abc1\", \"\"],\n      });\n    });\n\n    it(\"should validate Hindi alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"hi-IN\"],\n        valid: [\n          \"अतअपनाअपनीअपनेअभीअंदरआदिआपइत्यादिइनइनकाइन्हींइन्हेंइन्होंइसइसकाइसकीइसकेइसमेंइसीइसेउनउनकाउनकीउनकेउनकोउन्हींउन्हेंउन्होंउसउसकेउसीउसेएकएवंएसऐसेऔरकईकरकरताकरतेकरनाकरनेकरेंकहतेकहाकाकाफ़ीकिकितनाकिन्हेंकिन्होंकियाकिरकिसकिसीकिसेकीकुछकुलकेकोकोईकौनकौनसागयाघरजबजहाँजाजितनाजिनजिन्हेंजिन्होंजिसजिसेजीधरजैसाजैसेजोतकतबतरहतिनतिन्हेंतिन्होंतिसतिसेतोथाथीथेदबारादियादुसरादूसरेदोद्वाराननकेनहींनानिहायतनीचेनेपरपहलेपूरापेफिरबनीबहीबहुतबादबालाबिलकुलभीभीतरमगरमानोमेमेंयदियहयहाँयहीयायिहयेरखेंरहारहेऱ्वासालिएलियेलेकिनववग़ैरहवर्गवहवहाँवहींवालेवुहवेवोसकतासकतेसबसेसभीसाथसाबुतसाभसारासेसोसंगहीहुआहुईहुएहैहैंहोहोताहोतीहोतेहोनाहोने\",\n          \"इन्हें\",\n        ],\n        invalid: [\"अत०२३४५६७८९\", \"अत 12\", \" अत \", \"abc1\", \"abc\", \"\"],\n      });\n    });\n\n    it(\"should validate persian alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"fa-IR\"],\n        valid: [\"تست\", \"عزیزم\", \"ح\"],\n        invalid: [\"تست 1\", \"  عزیزم  \", \"\"],\n      });\n    });\n\n    it(\"should validate Thai alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"th-TH\"],\n        valid: [\"สวัสดี\", \"ยินดีต้อนรับ เทสเคส\"],\n        invalid: [\"สวัสดีHi\", \"123 ยินดีต้อนรับ\", \"ยินดีต้อนรับ-๑๒๓\"],\n      });\n    });\n\n    it(\"should validate Korea alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"ko-KR\"],\n        valid: [\n          \"ㄱ\",\n          \"ㅑ\",\n          \"ㄱㄴㄷㅏㅕ\",\n          \"세종대왕\",\n          \"나랏말싸미듕귁에달아문자와로서르사맛디아니할쎄\",\n        ],\n        invalid: [\n          \"abc\",\n          \"123\",\n          \"흥선대원군 문호개방\",\n          \"1592년임진왜란\",\n          \"대한민국!\",\n        ],\n      });\n    });\n\n    it(\"should validate Sinhala alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"si-LK\"],\n        valid: [\"චතුර\", \"කචටදබ\", \"ඎඏදාෛපසුගො\"],\n        invalid: [\"ஆஐअतක\", \"කචට 12\", \" ඎ \", \"abc1\", \"abc\", \"\"],\n      });\n    });\n\n    it(\"should validate Esperanto alpha strings\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"eo\"],\n        valid: [\n          \"saluton\",\n          \"eĥoŝanĝoĉiuĵaŭde\",\n          \"EĤOŜANĜOĈIUĴAŬDE\",\n          \"Esperanto\",\n          \"LaŭLudovikoZamenhofBongustasFreŝaĈeĥaManĝaĵoKunSpicoj\",\n        ],\n        invalid: [\"qwxyz\", \"1887\", \"qwxyz 1887\"],\n      });\n    });\n\n    it(\"should error on invalid locale\", () => {\n      test({\n        validator: \"isAlpha\",\n        args: [\"is-NOT\"],\n        error: [\"abc\", \"ABC\"],\n      });\n    });\n\n    it(\"should validate alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        valid: [\"abc123\", \"ABC11\"],\n        invalid: [\"abc \", \"foo!!\", \"ÄBC\", \"FÜübar\", \"Jön\"],\n      });\n    });\n\n    it(\"should validate alphanumeric string with ignored characters\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"en-US\", { ignore: \"@_- \" }], // ignore [@ space _ -]\n        valid: [\n          \"Hello@123\",\n          \"this is a valid alphaNumeric string\",\n          \"En-US @ alpha_numeric\",\n        ],\n        invalid: [\"In*Valid\", \"hello$123\", \"{invalid}\"],\n      });\n\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"en-US\", { ignore: /[\\s/-]/g }], // ignore [space -]\n        valid: [\"en-US\", \"this is a valid alphaNumeric string\"],\n        invalid: [\"INVALID$ AlphaNum Str\", \"hello@123\", \"abc*123\"],\n      });\n\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"en-US\", { ignore: 1234 }], // invalid ignore matcher (ignore should be instance of a String or RegExp)\n        error: [\"alpha\"],\n      });\n    });\n\n    it(\"should validate defined english aliases\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"en-GB\"],\n        valid: [\"abc123\", \"ABC11\"],\n        invalid: [\"abc \", \"foo!!\", \"ÄBC\", \"FÜübar\", \"Jön\"],\n      });\n    });\n\n    it(\"should validate Azerbaijani alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"az-AZ\"],\n        valid: [\"Azərbaycan\", \"Bakı\", \"abc1\", \"abcç2\", \"3kərə4kərə\"],\n        invalid: [\"  foo1  \", \"\", \"ab(cd)\", \"simvol@\", \"wəkil\"],\n      });\n    });\n\n    it(\"should validate bulgarian alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"bg-BG\"],\n        valid: [\"абв1\", \"4АБ5В6\", \"жаба\", \"яГоДа2\", \"йЮя\", \"123\"],\n        invalid: [\" \", \"789  \", \"hello000\"],\n      });\n    });\n\n    it(\"should validate Bengali alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"bn-BD\"],\n        valid: [\n          \"দ্গজ্ঞহ্রত্য১২৩\",\n          \"দ্গগফ৮৯০\",\n          \"চব৩৬৫ভবচ\",\n          \"১২৩৪\",\n          \"৩৪২৩৪দফজ্ঞদফ\",\n        ],\n        invalid: [\" \", \"১২৩  \", \"hel৩২0\"],\n      });\n    });\n\n    it(\"should validate czech alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"cs-CZ\"],\n        valid: [\"řiť123\", \"KŮŇ11\"],\n        invalid: [\"řiď \", \"blé!!\"],\n      });\n    });\n\n    it(\"should validate slovak alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"sk-SK\"],\n        valid: [\n          \"1môj\",\n          \"2ľúbím\",\n          \"3mäkčeň\",\n          \"4stĹp\",\n          \"5vŕba\",\n          \"6ňorimberk\",\n          \"7ťava\",\n          \"8žanéta\",\n          \"9Ďábelské\",\n          \"10ódy\",\n        ],\n        invalid: [\"1moj!\", \"你好世界\", \"  Привет мир  \"],\n      });\n    });\n\n    it(\"should validate danish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"da-DK\"],\n        valid: [\"ÆØÅ123\", \"Ære321\", \"321Øre\", \"123Åre\"],\n        invalid: [\"äbc123\", \"ÄBC11\", \"\"],\n      });\n    });\n\n    it(\"should validate dutch alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"nl-NL\"],\n        valid: [\"Kán123\", \"één354\", \"v4óór\", \"nú234\", \"hé54él\"],\n        invalid: [\"1äca \", \"ab3cß\", \"Øre\"],\n      });\n    });\n\n    it(\"should validate finnish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"fi-FI\"],\n        valid: [\"äiti124\", \"ÖLJY1234\", \"123Åke\", \"451åå23\"],\n        invalid: [\"AİıÖöÇ窺ĞğÜüZ\", \"foo!!\", \"\"],\n      });\n    });\n\n    it(\"should validate german alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"de-DE\"],\n        valid: [\"äbc123\", \"ÄBC11\"],\n        invalid: [\"äca \", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate hungarian alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"hu-HU\"],\n        valid: [\"0árvíztűrőtükörfúrógép123\", \"0ÁRVÍZTŰRŐTÜKÖRFÚRÓGÉP123\"],\n        invalid: [\"1időúr!\", \"äbc1\", \"  fäö  \", \"Heiß!\", \"\"],\n      });\n    });\n\n    it(\"should validate portuguese alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"pt-PT\"],\n        valid: [\"palíndromo\", \"2órgão\", \"qwértyúão9\", \"àäãcë4üïÄÏÜ\"],\n        invalid: [\"!abc\", \"Heiß\", \"Øre\", \"æøå\", \"\"],\n      });\n    });\n\n    it(\"should validate italian alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"it-IT\"],\n        valid: [\n          \"123àéèìîóòù\",\n          \"123correnti\",\n          \"DEFINIZIONE321\",\n          \"compil123azione\",\n          \"met23ró\",\n          \"pès56ca\",\n          \"PÉS45CA\",\n          \"gen45î\",\n        ],\n        invalid: [\"äbc123\", \"ÄBC11\", \"æøå\", \"\"],\n      });\n    });\n\n    it(\"should validate spanish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"es-ES\"],\n        valid: [\"ábcó123\", \"ÁBCÓ11\"],\n        invalid: [\"äca \", \"abcß\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate Vietnamese alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"vi-VN\"],\n        valid: [\"Thầy3\", \"3Gà\"],\n        invalid: [\"toang!\", \"Cậu Vàng\"],\n      });\n    });\n\n    it(\"should validate arabic alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"ar\"],\n        valid: [\"أبت123\", \"أبتَُِ١٢٣\"],\n        invalid: [\"äca \", \"abcß\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate Hindi alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"hi-IN\"],\n        valid: [\n          \"अतअपनाअपनीअपनेअभीअंदरआदिआपइत्यादिइनइनकाइन्हींइन्हेंइन्होंइसइसकाइसकीइसकेइसमेंइसीइसेउनउनकाउनकीउनकेउनकोउन्हींउन्हेंउन्होंउसउसकेउसीउसेएकएवंएसऐसेऔरकईकरकरताकरतेकरनाकरनेकरेंकहतेकहाकाकाफ़ीकिकितनाकिन्हेंकिन्होंकियाकिरकिसकिसीकिसेकीकुछकुलकेकोकोईकौनकौनसागयाघरजबजहाँजाजितनाजिनजिन्हेंजिन्होंजिसजिसेजीधरजैसाजैसेजोतकतबतरहतिनतिन्हेंतिन्होंतिसतिसेतोथाथीथेदबारादियादुसरादूसरेदोद्वाराननकेनहींनानिहायतनीचेनेपरपहलेपूरापेफिरबनीबहीबहुतबादबालाबिलकुलभीभीतरमगरमानोमेमेंयदियहयहाँयहीयायिहयेरखेंरहारहेऱ्वासालिएलियेलेकिनववग़ैरहवर्गवहवहाँवहींवालेवुहवेवोसकतासकतेसबसेसभीसाथसाबुतसाभसारासेसोसंगहीहुआहुईहुएहैहैंहोहोताहोतीहोतेहोनाहोने०२३४५६७८९\",\n          \"इन्हें४५६७८९\",\n        ],\n        invalid: [\"अत ०२३४५६७८९\", \" ३४५६७८९\", \"12 \", \" अत \", \"abc1\", \"abc\", \"\"],\n      });\n    });\n\n    it(\"should validate farsi alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"fa-IR\"],\n        valid: [\"پارسی۱۲۳\", \"۱۴۵۶\", \"مژگان9\"],\n        invalid: [\"äca \", \"abcßة\", \"föö!!\", \"٤٥٦\"],\n      });\n    });\n\n    it(\"should validate Japanese alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"ja-JP\"],\n        valid: [\n          \"あいうえお123\",\n          \"123がぎぐげご\",\n          \"ぁぃぅぇぉ\",\n          \"アイウエオ\",\n          \"ァィゥェ\",\n          \"アイウエオ\",\n          \"20世紀少年\",\n          \"華氏451度\",\n        ],\n        invalid: [\" あいう123 \", \"abcあいう\", \"生きろ!!\"],\n      });\n    });\n\n    it(\"should validate kazakh alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"kk-KZ\"],\n        valid: [\n          \"Сәлем777\",\n          \"123Бәсе\",\n          \"солай\",\n          \"Жиенсу\",\n          \"90тоқсан\",\n          \"жалғыз\",\n          \"570бердім\",\n        ],\n        invalid: [\" кешіріңіз \", \"abcағылшынша\", \"мүмкін!!\"],\n      });\n    });\n\n    it(\"should validate kurdish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"ku-IQ\"],\n        valid: [\"ئؤڤگێ١٢٣\"],\n        invalid: [\"äca \", \"abcß\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate defined arabic aliases\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"ar-SY\"],\n        valid: [\"أبت123\", \"أبتَُِ١٢٣\"],\n        invalid: [\"abc \", \"foo!!\", \"ÄBC\", \"FÜübar\", \"Jön\"],\n      });\n    });\n\n    it(\"should validate norwegian alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"nb-NO\"],\n        valid: [\"ÆØÅ123\", \"Ære321\", \"321Øre\", \"123Åre\"],\n        invalid: [\"äbc123\", \"ÄBC11\", \"\"],\n      });\n    });\n\n    it(\"should validate polish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"pl-PL\"],\n        valid: [\n          \"kre123ską\",\n          \"zam21knięte\",\n          \"zw23ykłe\",\n          \"123\",\n          \"prz23yjęły\",\n          \"świ23ęty\",\n          \"Poz1322wól\",\n        ],\n        invalid: [\"12řiď \", \"blé!!\", \"föö!2!\"],\n      });\n    });\n\n    it(\"should validate serbian cyrillic alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"sr-RS\"],\n        valid: [\"ШћжЂљЕ123\", \"ЧПСТ132ЋЏ\"],\n        invalid: [\"řiď \", \"blé!!\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate serbian latin alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"sr-RS@latin\"],\n        valid: [\"ŠAabčšđćž123\", \"ŠATRO11Ćčđš\"],\n        invalid: [\"řiď \", \"blé!!\", \"föö!!\"],\n      });\n    });\n\n    it(\"should validate swedish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"sv-SE\"],\n        valid: [\"religiös13\", \"st23jäla\", \"västgöte123\", \"123Åre\"],\n        invalid: [\"AİıÖöÇ窺ĞğÜüZ\", \"foo!!\", \"\"],\n      });\n    });\n\n    it(\"should validate turkish alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"tr-TR\"],\n        valid: [\"AİıÖöÇ窺ĞğÜüZ123\"],\n        invalid: [\"AİıÖöÇ窺ĞğÜüZ \", \"foo!!\", \"ÄBC\"],\n      });\n    });\n\n    it(\"should validate urkrainian alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"uk-UA\"],\n        valid: [\"АБВГҐДЕЄЖЗИIЇЙКЛМНОПРСТУФХЦШЩЬЮЯ123\"],\n        invalid: [\"éeoc \", \"foo!!\", \"ÄBC\", \"ЫыЪъЭэ\"],\n      });\n    });\n\n    it(\"should validate greek alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"el-GR\"],\n        valid: [\n          \"αβγδεζηθικλμνξοπρςστυφχψω\",\n          \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ\",\n          \"20θ\",\n          \"1234568960\",\n        ],\n        invalid: [\n          \"0AİıÖöÇ窺ĞğÜüZ1\",\n          \"  AİıÖöÇ窺ĞğÜüZ  \",\n          \"ÄBC\",\n          \"Heiß\",\n          \"ЫыЪъЭэ\",\n          \"jαckγ\",\n        ],\n      });\n    });\n\n    it(\"should validate Hebrew alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"he\"],\n        valid: [\"אבג123\", \"שלום11\"],\n        invalid: [\"אבג \", \"לא!!\", \"abc\", \"  foo  \"],\n      });\n    });\n\n    it(\"should validate Thai alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"th-TH\"],\n        valid: [\"สวัสดี ๑๒๓\", \"ยินดีต้อนรับทั้ง ๒ คน\"],\n        invalid: [\"1.สวัสดี\", \"ยินดีต้อนรับทั้ง 2 คน\"],\n      });\n    });\n\n    it(\"should validate Korea alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"ko-KR\"],\n        valid: [\"2002\", \"훈민정음\", \"1446년훈민정음반포\"],\n        invalid: [\"2022!\", \"2019 코로나시작\", \"1.로렘입숨\"],\n      });\n    });\n\n    it(\"should validate Sinhala alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"si-LK\"],\n        valid: [\"චතුර\", \"කචට12\", \"ඎඏදාෛපසුගො2\", \"1234\"],\n        invalid: [\"ஆஐअतක\", \"කචට 12\", \" ඎ \", \"a1234\", \"abc\", \"\"],\n      });\n    });\n\n    it(\"should validate Esperanto alphanumeric strings\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"eo\"],\n        valid: [\n          \"saluton\",\n          \"eĥoŝanĝoĉiuĵaŭde0123456789\",\n          \"EĤOŜANĜOĈIUĴAŬDE0123456789\",\n          \"Esperanto1887\",\n          \"LaŭLudovikoZamenhofBongustasFreŝaĈeĥaManĝaĵoKunSpicoj\",\n        ],\n        invalid: [\"qwxyz\", \"qwxyz 1887\"],\n      });\n    });\n\n    it(\"should error on invalid locale\", () => {\n      test({\n        validator: \"isAlphanumeric\",\n        args: [\"is-NOT\"],\n        error: [\"1234568960\", \"abc123\"],\n      });\n    });\n\n    it(\"should validate numeric strings\", () => {\n      test({\n        validator: \"isNumeric\",\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"123.123\",\n          \"+000000\",\n        ],\n        invalid: [\" \", \"\", \".\"],\n      });\n    });\n\n    it(\"should validate numeric strings without symbols\", () => {\n      test({\n        validator: \"isNumeric\",\n        args: [\n          {\n            no_symbols: true,\n          },\n        ],\n        valid: [\"123\", \"00123\", \"0\"],\n        invalid: [\"-0\", \"+000000\", \"\", \"+123\", \"123.123\", \"-00123\", \" \", \".\"],\n      });\n    });\n\n    it(\"should validate numeric strings with locale\", () => {\n      test({\n        validator: \"isNumeric\",\n        args: [\n          {\n            locale: \"fr-FR\",\n          },\n        ],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"123,123\",\n          \"+000000\",\n        ],\n        invalid: [\" \", \"\", \",\"],\n      });\n    });\n\n    it(\"should validate numeric strings with locale\", () => {\n      test({\n        validator: \"isNumeric\",\n        args: [\n          {\n            locale: \"fr-CA\",\n          },\n        ],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"123,123\",\n          \"+000000\",\n        ],\n        invalid: [\" \", \"\", \".\"],\n      });\n    });\n\n    it(\"should validate ports\", () => {\n      test({\n        validator: \"isPort\",\n        valid: [\"0\", \"22\", \"80\", \"443\", \"3000\", \"8080\", \"65535\"],\n        invalid: [\"\", \"-1\", \"65536\", \"0080\"],\n      });\n    });\n\n    it(\"should validate passport number\", () => {\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"AM\"],\n        valid: [\"AF0549358\"],\n        invalid: [\"A1054935\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"ID\"],\n        valid: [\"C1253473\", \"B5948378\", \"A4859472\"],\n        invalid: [\"D39481728\", \"A-3847362\", \"324132132\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"AR\"],\n        valid: [\"AAC811035\"],\n        invalid: [\"A11811035\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"AT\"],\n        valid: [\"P 1630837\", \"P 4366918\"],\n        invalid: [\"0 1630837\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"AU\"],\n        valid: [\"N0995852\", \"L4819236\"],\n        invalid: [\"1A012345\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"AZ\"],\n        valid: [\"A16175905\", \"A16175958\"],\n        invalid: [\"AZ1234584\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"BE\"],\n        valid: [\"EM000000\", \"LA080402\"],\n        invalid: [\"00123456\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"BG\"],\n        valid: [\"346395366\", \"039903356\"],\n        invalid: [\"ABC123456\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"BR\"],\n        valid: [\"FZ973689\", \"GH231233\"],\n        invalid: [\"ABX29332\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"BY\"],\n        valid: [\"MP3899901\"],\n        invalid: [\"345333454\", \"FG53334542\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"CA\"],\n        valid: [\"GA302922\", \"ZE000509\", \"A123456AB\", \"Z556378HG\"],\n        invalid: [\n          \"AB0123456\",\n          \"AZ556378H\",\n          \"556378HCX\",\n          \"556378432\",\n          \"5563784\",\n          \"#B12345FD\",\n          \"A43F12354\",\n        ],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"CH\"],\n        valid: [\"S1100409\", \"S5200073\", \"X4028791\"],\n        invalid: [\"AB123456\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"CN\"],\n        valid: [\"G25352389\", \"E00160027\", \"EA1234567\"],\n        invalid: [\n          \"K0123456\",\n          \"E-1234567\",\n          \"G.1234567\",\n          \"GA1234567\",\n          \"EI1234567\",\n          \"GO1234567\",\n        ],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"CY\"],\n        valid: [\"K00000413\"],\n        invalid: [\"K10100\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"CZ\"],\n        valid: [\"99003853\", \"42747260\"],\n        invalid: [\"012345678\", \"AB123456\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"DE\"],\n        valid: [\"C01X00T47\", \"C26VMVVC3\"],\n        invalid: [\"AS0123456\", \"A012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"DK\"],\n        valid: [\"900010172\"],\n        invalid: [\"01234567\", \"K01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"DZ\"],\n        valid: [\"855609385\", \"154472412\", \"197025599\"],\n        invalid: [\n          \"AS0123456\",\n          \"A012345678\",\n          \"0123456789\",\n          \"12345678\",\n          \"98KK54321\",\n        ],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"EE\"],\n        valid: [\"K4218285\", \"K3295867\", \"KB0167630\", \"VD0023777\"],\n        invalid: [\"K01234567\", \"KB00112233\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"ES\"],\n        valid: [\"AF238143\", \"ZAB000254\"],\n        invalid: [\"AF01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"FI\"],\n        valid: [\"XP8271602\", \"XD8500003\"],\n        invalid: [\"A01234567\", \"ABC012345\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"FR\"],\n        valid: [\"10CV28144\", \"60RF19342\", \"05RP34083\"],\n        invalid: [\"012345678\", \"AB0123456\", \"01C234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"GB\"],\n        valid: [\"925076473\", \"107182890\", \"104121156\"],\n        invalid: [\"A012345678\", \"K000000000\", \"0123456789\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"GR\"],\n        valid: [\"AE0000005\", \"AK0219304\"],\n        invalid: [\"A01234567\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"HR\"],\n        valid: [\"007007007\", \"138463188\"],\n        invalid: [\"A01234567\", \"00112233\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"HU\"],\n        valid: [\"ZA084505\", \"BA0006902\"],\n        invalid: [\"A01234567\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"IE\"],\n        valid: [\"D23145890\", \"X65097105\", \"XN0019390\"],\n        invalid: [\"XND012345\", \"0123456789\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"IN\"],\n        valid: [\"A-1234567\", \"A1234567\", \"X0019390\"],\n        invalid: [\"AB-1234567\", \"0123456789\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"IR\"],\n        valid: [\"J97634522\", \"A01234567\", \"Z11977831\"],\n        invalid: [\"A0123456\", \"A0123456Z\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"IS\"],\n        valid: [\"A2040611\", \"A1197783\"],\n        invalid: [\"K0000000\", \"01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"IT\"],\n        valid: [\"YA8335453\", \"KK0000000\"],\n        invalid: [\"01234567\", \"KAK001122\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"JM\"],\n        valid: [\"A0123456\"],\n        invalid: [\"s0123456\", \"a01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"JP\"],\n        valid: [\"NH1106002\", \"TE3180251\", \"XS1234567\"],\n        invalid: [\"X12345678\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"KR\"],\n        valid: [\"M35772699\", \"M70689098\"],\n        invalid: [\"X12345678\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"KZ\"],\n        valid: [\"A0123456\", \"b0123456\"],\n        invalid: [\"01234567\", \"bb0123456\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"LI\"],\n        valid: [\"a01234\", \"f01234\"],\n        invalid: [\"012345\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"LT\"],\n        valid: [\"20200997\", \"LB311756\"],\n        invalid: [\"LB01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"LU\"],\n        valid: [\"JCU9J4T2\", \"JC4E7L2H\"],\n        invalid: [\"JCU9J4T\", \"JC4E7L2H0\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"LV\"],\n        valid: [\"LV9000339\", \"LV4017173\"],\n        invalid: [\"LV01234567\", \"4017173LV\"],\n      });\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"LY\"],\n        valid: [\"P79JF34X\", \"RJ45H4V2\"],\n        invalid: [\"P79JF34\", \"RJ45H4V2C\", \"RJ4-H4V2\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"MT\"],\n        valid: [\"1026564\"],\n        invalid: [\"01234567\", \"MT01234\"],\n      });\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"MZ\"],\n        valid: [\"AB0808212\", \"08AB12123\"],\n        invalid: [\"1AB011241\", \"1AB01121\", \"ABAB01121\"],\n      });\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"MY\"],\n        valid: [\"A00000000\", \"H12345678\", \"K43143233\"],\n        invalid: [\"A1234567\", \"C01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"MX\"],\n        valid: [\"43986369222\", \"01234567890\"],\n        invalid: [\"ABC34567890\", \"34567890\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"NL\"],\n        valid: [\"XTR110131\", \"XR1001R58\"],\n        invalid: [\"XTR11013R\", \"XR1001R58A\"],\n      });\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"PK\"],\n        valid: [\"QZ1791293\", \"XR1001458\"],\n        invalid: [\"XTR11013R\", \"XR1001R58A\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"PH\"],\n        valid: [\"X123456\", \"XY123456\", \"XY1234567\", \"X1234567Y\"],\n        invalid: [\"XY12345\", \"X12345Z\", \"XY12345Z\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"NZ\"],\n        valid: [\n          \"Lf012345\",\n          \"La012345\",\n          \"Ld012345\",\n          \"Lh012345\",\n          \"ea012345\",\n          \"ep012345\",\n          \"n012345\",\n        ],\n        invalid: [\"Lp012345\", \"nd012345\", \"ed012345\", \"eh012345\", \"ef012345\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"PL\"],\n        valid: [\"ZS 0000177\", \"AN 3000011\"],\n        invalid: [\"A1 0000177\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"PT\"],\n        valid: [\"I700044\", \"K453286\"],\n        invalid: [\"0700044\", \"K4532861\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"RO\"],\n        valid: [\"05485968\", \"040005646\"],\n        invalid: [\"R05485968\", \"0511060461\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"RU\"],\n        valid: [\"2 32 636829\", \"012 345321\", \"439863692\"],\n        invalid: [\n          \"A 2R YU46J0\",\n          \"01A 3D5321\",\n          \"SF233D53T\",\n          \"12345678\",\n          \"1234567890\",\n        ],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"SE\"],\n        valid: [\"59000001\", \"56702928\"],\n        invalid: [\"SE012345\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"SL\"],\n        valid: [\"PB0036440\", \"PB1390281\"],\n        invalid: [\"SL0123456\", \"P01234567\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"SK\"],\n        valid: [\"P0000000\"],\n        invalid: [\"SK012345\", \"012345678\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"TH\"],\n        valid: [\"A123456\", \"B1234567\", \"CD123456\", \"EF1234567\"],\n        invalid: [\"123456\", \"1234567\", \"010485371AA\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"TR\"],\n        valid: [\"U 06764100\", \"U 01048537\"],\n        invalid: [\"06764100U\", \"010485371\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"UA\"],\n        valid: [\"EH345655\", \"EK000001\", \"AP841503\"],\n        invalid: [\"01234567\", \"012345EH\", \"A012345P\"],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"US\"],\n        valid: [\"790369937\", \"340007237\", \"A90583942\", \"E00007734\"],\n        invalid: [\n          \"US0123456\",\n          \"0123456US\",\n          \"7903699371\",\n          \"90583942\",\n          \"E000077341\",\n        ],\n      });\n\n      test({\n        validator: \"isPassportNumber\",\n        args: [\"ZA\"],\n        valid: [\"T12345678\", \"A12345678\", \"M12345678\", \"D12345678\"],\n        invalid: [\"123456789\", \"Z12345678\"],\n      });\n    });\n\n    it(\"should validate decimal numbers\", () => {\n      test({\n        validator: \"isDecimal\",\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0.01\",\n          \".1\",\n          \"1.0\",\n          \"-.25\",\n          \"-0\",\n          \"0.0000000000001\",\n        ],\n        invalid: [\n          \"0,01\",\n          \",1\",\n          \"1,0\",\n          \"-,25\",\n          \"0,0000000000001\",\n          \"0٫01\",\n          \"٫1\",\n          \"1٫0\",\n          \"-٫25\",\n          \"0٫0000000000001\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: \"en-AU\" }],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0.01\",\n          \".1\",\n          \"1.0\",\n          \"-.25\",\n          \"-0\",\n          \"0.0000000000001\",\n        ],\n        invalid: [\n          \"0,01\",\n          \",1\",\n          \"1,0\",\n          \"-,25\",\n          \"0,0000000000001\",\n          \"0٫01\",\n          \"٫1\",\n          \"1٫0\",\n          \"-٫25\",\n          \"0٫0000000000001\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: [\"bg-BG\"] }],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0,01\",\n          \",1\",\n          \"1,0\",\n          \"-,25\",\n          \"-0\",\n          \"0,0000000000001\",\n        ],\n        invalid: [\n          \"0.0000000000001\",\n          \"0.01\",\n          \".1\",\n          \"1.0\",\n          \"-.25\",\n          \"0٫01\",\n          \"٫1\",\n          \"1٫0\",\n          \"-٫25\",\n          \"0٫0000000000001\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: [\"cs-CZ\"] }],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0,01\",\n          \",1\",\n          \"1,0\",\n          \"-,25\",\n          \"-0\",\n          \"0,0000000000001\",\n        ],\n        invalid: [\n          \"0.0000000000001\",\n          \"0.01\",\n          \".1\",\n          \"1.0\",\n          \"-.25\",\n          \"0٫01\",\n          \"٫1\",\n          \"1٫0\",\n          \"-٫25\",\n          \"0٫0000000000001\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: [\"ar-JO\"] }],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0٫01\",\n          \"٫1\",\n          \"1٫0\",\n          \"-٫25\",\n          \"-0\",\n          \"0٫0000000000001\",\n        ],\n        invalid: [\n          \"0,0000000000001\",\n          \"0,01\",\n          \",1\",\n          \"1,0\",\n          \"-,25\",\n          \"0.0000000000001\",\n          \"0.01\",\n          \".1\",\n          \"1.0\",\n          \"-.25\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: [\"ar-EG\"] }],\n        valid: [\"0.01\"],\n        invalid: [\"0,01\"],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: [\"en-ZM\"] }],\n        valid: [\"0,01\"],\n        invalid: [\"0.01\"],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ force_decimal: true }],\n        valid: [\"0.01\", \".1\", \"1.0\", \"-.25\", \"0.0000000000001\"],\n        invalid: [\n          \"-0\",\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0,0000000000001\",\n          \"0,01\",\n          \",1\",\n          \"1,0\",\n          \"-,25\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n\n      test({\n        validator: \"isDecimal\",\n        args: [{ decimal_digits: \"2,3\" }],\n        valid: [\n          \"123\",\n          \"00123\",\n          \"-00123\",\n          \"0\",\n          \"-0\",\n          \"+123\",\n          \"0.01\",\n          \"1.043\",\n          \".15\",\n          \"-.255\",\n          \"-0\",\n        ],\n        invalid: [\n          \"0.0000000000001\",\n          \"0.0\",\n          \".1\",\n          \"1.0\",\n          \"-.2564\",\n          \"0.0\",\n          \"٫1\",\n          \"1٫0\",\n          \"-٫25\",\n          \"0٫0000000000001\",\n          \"....\",\n          \" \",\n          \"\",\n          \"-\",\n          \"+\",\n          \".\",\n          \"0.1a\",\n          \"a\",\n          \"\\n\",\n        ],\n      });\n    });\n\n    it(\"should error on invalid locale\", () => {\n      test({\n        validator: \"isDecimal\",\n        args: [{ locale: [\"is-NOT\"] }],\n        error: [\"123\", \"0.01\", \"0,01\"],\n      });\n    });\n\n    it(\"should validate lowercase strings\", () => {\n      test({\n        validator: \"isLowercase\",\n        valid: [\"abc\", \"abc123\", \"this is lowercase.\", \"tr竪s 端ber\"],\n        invalid: [\"fooBar\", \"123A\"],\n      });\n    });\n\n    it(\"should validate imei strings\", () => {\n      test({\n        validator: \"isIMEI\",\n        valid: [\n          \"352099001761481\",\n          \"868932036356090\",\n          \"490154203237518\",\n          \"546918475942169\",\n          \"998227667144730\",\n          \"532729766805999\",\n        ],\n        invalid: [\"490154203237517\", \"3568680000414120\", \"3520990017614823\"],\n      });\n    });\n\n    it(\"should validate imei strings with hyphens\", () => {\n      test({\n        validator: \"isIMEI\",\n        args: [{ allow_hyphens: true }],\n        valid: [\n          \"35-209900-176148-1\",\n          \"86-893203-635609-0\",\n          \"49-015420-323751-8\",\n          \"54-691847-594216-9\",\n          \"99-822766-714473-0\",\n          \"53-272976-680599-9\",\n        ],\n        invalid: [\n          \"49-015420-323751-7\",\n          \"35-686800-0041412-0\",\n          \"35-209900-1761482-3\",\n        ],\n      });\n    });\n\n    it(\"should validate uppercase strings\", () => {\n      test({\n        validator: \"isUppercase\",\n        valid: [\"ABC\", \"ABC123\", \"ALL CAPS IS FUN.\", \"   .\"],\n        invalid: [\"fooBar\", \"123abc\"],\n      });\n    });\n\n    it(\"should validate integers\", () => {\n      test({\n        validator: \"isInt\",\n        valid: [\"13\", \"123\", \"0\", \"123\", \"-0\", \"+1\", \"01\", \"-01\", \"000\"],\n        invalid: [\"100e10\", \"123.123\", \"   \", \"\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [{ allow_leading_zeroes: false }],\n        valid: [\"13\", \"123\", \"0\", \"123\", \"-0\", \"+1\"],\n        invalid: [\"01\", \"-01\", \"000\", \"100e10\", \"123.123\", \"   \", \"\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [{ allow_leading_zeroes: true }],\n        valid: [\n          \"13\",\n          \"123\",\n          \"0\",\n          \"123\",\n          \"-0\",\n          \"+1\",\n          \"01\",\n          \"-01\",\n          \"000\",\n          \"-000\",\n          \"+000\",\n        ],\n        invalid: [\"100e10\", \"123.123\", \"   \", \"\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            min: 10,\n          },\n        ],\n        valid: [\"15\", \"80\", \"99\"],\n        invalid: [\"9\", \"6\", \"3.2\", \"a\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            min: 10,\n            max: 15,\n          },\n        ],\n        valid: [\"15\", \"11\", \"13\"],\n        invalid: [\"9\", \"2\", \"17\", \"3.2\", \"33\", \"a\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            gt: 10,\n            lt: 15,\n          },\n        ],\n        valid: [\"14\", \"11\", \"13\"],\n        invalid: [\"10\", \"15\", \"17\", \"3.2\", \"33\", \"a\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            min: undefined,\n            max: undefined,\n          },\n        ],\n        valid: [\"143\", \"15\", \"767777575\"],\n        invalid: [\"10.4\", \"bar\", \"10a\", \"c44\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            gt: undefined,\n            lt: undefined,\n          },\n        ],\n        valid: [\"289373466\", \"55\", \"989\"],\n        invalid: [\"10.4\", \"baz\", \"66a\", \"c21\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            gt: null,\n            max: null,\n          },\n        ],\n        valid: [\"1\", \"886\", \"84512345\"],\n        invalid: [\"10.4\", \"h\", \"1.2\", \"+\"],\n      });\n      test({\n        validator: \"isInt\",\n        args: [\n          {\n            lt: null,\n            min: null,\n          },\n        ],\n        valid: [\"289373466\", \"55\", \"989\"],\n        invalid: [\",\", \"+11212+\", \"fail\", \"111987234i\"],\n      });\n    });\n\n    it(\"should validate floats\", () => {\n      test({\n        validator: \"isFloat\",\n        valid: [\n          \"123\",\n          \"123.\",\n          \"123.123\",\n          \"-123.123\",\n          \"-0.123\",\n          \"+0.123\",\n          \"0.123\",\n          \".0\",\n          \"-.123\",\n          \"+.123\",\n          \"01.123\",\n          \"-0.22250738585072011e-307\",\n        ],\n        invalid: [\n          \"+\",\n          \"-\",\n          \"  \",\n          \"\",\n          \".\",\n          \",\",\n          \"foo\",\n          \"20.foo\",\n          \"2020-01-06T14:31:00.135Z\",\n        ],\n      });\n\n      test({\n        validator: \"isFloat\",\n        args: [{ locale: \"en-AU\" }],\n        valid: [\n          \"123\",\n          \"123.\",\n          \"123.123\",\n          \"-123.123\",\n          \"-0.123\",\n          \"+0.123\",\n          \"0.123\",\n          \".0\",\n          \"-.123\",\n          \"+.123\",\n          \"01.123\",\n          \"-0.22250738585072011e-307\",\n        ],\n        invalid: [\"123٫123\", \"123,123\", \"  \", \"\", \".\", \"foo\"],\n      });\n\n      test({\n        validator: \"isFloat\",\n        args: [{ locale: \"de-DE\" }],\n        valid: [\n          \"123\",\n          \"123,\",\n          \"123,123\",\n          \"-123,123\",\n          \"-0,123\",\n          \"+0,123\",\n          \"0,123\",\n          \",0\",\n          \"-,123\",\n          \"+,123\",\n          \"01,123\",\n          \"-0,22250738585072011e-307\",\n        ],\n        invalid: [\"123.123\", \"123٫123\", \"  \", \"\", \".\", \"foo\"],\n      });\n\n      test({\n        validator: \"isFloat\",\n        args: [{ locale: \"ar-JO\" }],\n        valid: [\n          \"123\",\n          \"123٫\",\n          \"123٫123\",\n          \"-123٫123\",\n          \"-0٫123\",\n          \"+0٫123\",\n          \"0٫123\",\n          \"٫0\",\n          \"-٫123\",\n          \"+٫123\",\n          \"01٫123\",\n          \"-0٫22250738585072011e-307\",\n        ],\n        invalid: [\"123,123\", \"123.123\", \"  \", \"\", \".\", \"foo\"],\n      });\n\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            min: 3.7,\n          },\n        ],\n        valid: [\"3.888\", \"3.92\", \"4.5\", \"50\", \"3.7\", \"3.71\"],\n        invalid: [\"3.6\", \"3.69\", \"3\", \"1.5\", \"a\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            min: 0.1,\n            max: 1.0,\n          },\n        ],\n        valid: [\"0.1\", \"1.0\", \"0.15\", \"0.33\", \"0.57\", \"0.7\"],\n        invalid: [\"0\", \"0.0\", \"a\", \"1.3\", \"0.05\", \"5\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            gt: -5.5,\n            lt: 10,\n          },\n        ],\n        valid: [\"9.9\", \"1.0\", \"0\", \"-1\", \"7\", \"-5.4\"],\n        invalid: [\"10\", \"-5.5\", \"a\", \"-20.3\", \"20e3\", \"10.00001\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            min: -5.5,\n            max: 10,\n            gt: -5.5,\n            lt: 10,\n          },\n        ],\n        valid: [\"9.99999\", \"-5.499999\"],\n        invalid: [\"10\", \"-5.5\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            locale: \"de-DE\",\n            min: 3.1,\n          },\n        ],\n        valid: [\"123\", \"123,\", \"123,123\", \"3,1\", \"3,100001\"],\n        invalid: [\n          \"3,09\",\n          \"-,123\",\n          \"+,123\",\n          \"01,123\",\n          \"-0,22250738585072011e-307\",\n          \"-123,123\",\n          \"-0,123\",\n          \"+0,123\",\n          \"0,123\",\n          \",0\",\n          \"123.123\",\n          \"123٫123\",\n          \"  \",\n          \"\",\n          \".\",\n          \"foo\",\n        ],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            min: undefined,\n            max: undefined,\n          },\n        ],\n        valid: [\"123\", \"123.\", \"123.123\", \"-767.767\", \"+111.111\"],\n        invalid: [\"ab565\", \"-,123\", \"+,123\", \"7866.t\", \"123,123\", \"123,\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            gt: undefined,\n            lt: undefined,\n          },\n        ],\n        valid: [\"14.34343\", \"11.1\", \"456\"],\n        invalid: [\"ab565\", \"-,123\", \"+,123\", \"7866.t\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            locale: \"ar\",\n            gt: null,\n            max: null,\n          },\n        ],\n        valid: [\"13324٫\", \"12321\", \"444٫83874\"],\n        invalid: [\"55.55.55\", \"1;23\", \"+-123\", \"1111111l1\", \"3.3\"],\n      });\n      test({\n        validator: \"isFloat\",\n        args: [\n          {\n            locale: \"ru-RU\",\n            lt: null,\n            min: null,\n          },\n        ],\n        valid: [\"11231554,34343\", \"11,1\", \"456\", \",311\"],\n        invalid: [\"ab565\", \"-.123\", \"+.123\", \"7866.t\", \"22.3\"],\n      });\n    });\n\n    it(\"should validate hexadecimal strings\", () => {\n      test({\n        validator: \"isHexadecimal\",\n        valid: [\n          \"deadBEEF\",\n          \"ff0044\",\n          \"0xff0044\",\n          \"0XfF0044\",\n          \"0x0123456789abcDEF\",\n          \"0X0123456789abcDEF\",\n          \"0hfedCBA9876543210\",\n          \"0HfedCBA9876543210\",\n          \"0123456789abcDEF\",\n        ],\n        invalid: [\n          \"abcdefg\",\n          \"\",\n          \"..\",\n          \"0xa2h\",\n          \"0xa20x\",\n          \"0x0123456789abcDEFq\",\n          \"0hfedCBA9876543210q\",\n          \"01234q56789abcDEF\",\n        ],\n      });\n    });\n\n    it(\"should validate octal strings\", () => {\n      test({\n        validator: \"isOctal\",\n        valid: [\"076543210\", \"0o01234567\"],\n        invalid: [\n          \"abcdefg\",\n          \"012345678\",\n          \"012345670c\",\n          \"00c12345670c\",\n          \"\",\n          \"..\",\n        ],\n      });\n    });\n\n    it(\"should validate hexadecimal color strings\", () => {\n      test({\n        validator: \"isHexColor\",\n        valid: [\"#ff0000ff\", \"#ff0034\", \"#CCCCCC\", \"0f38\", \"fff\", \"#f00\"],\n        invalid: [\"#ff\", \"fff0a\", \"#ff12FG\"],\n      });\n    });\n\n    it(\"should validate HSL color strings\", () => {\n      test({\n        validator: \"isHSL\",\n        valid: [\n          \"hsl(360,0000000000100%,000000100%)\",\n          \"hsl(000010, 00000000001%, 00000040%)\",\n          \"HSL(00000,0000000000100%,000000100%)\",\n          \"hsL(0, 0%, 0%)\",\n          \"hSl(  360  , 100%  , 100%   )\",\n          \"Hsl(  00150  , 000099%  , 01%   )\",\n          \"hsl(01080, 03%, 4%)\",\n          \"hsl(-540, 03%, 4%)\",\n          \"hsla(+540, 03%, 4%)\",\n          \"hsla(+540, 03%, 4%, 500)\",\n          \"hsl(+540deg, 03%, 4%, 500)\",\n          \"hsl(+540gRaD, 03%, 4%, 500)\",\n          \"hsl(+540.01e-98rad, 03%, 4%, 500)\",\n          \"hsl(-540.5turn, 03%, 4%, 500)\",\n          \"hsl(+540, 03%, 4%, 500e-01)\",\n          \"hsl(+540, 03%, 4%, 500e+80)\",\n          \"hsl(4.71239rad, 60%, 70%)\",\n          \"hsl(270deg, 60%, 70%)\",\n          \"hsl(200, +.1%, 62%, 1)\",\n          \"hsl(270 60% 70%)\",\n          \"hsl(200, +.1e-9%, 62e10%, 1)\",\n          \"hsl(.75turn, 60%, 70%)\",\n          // 'hsl(200grad+.1%62%/1)', //supposed to pass, but need to handle delimiters\n          \"hsl(200grad +.1% 62% / 1)\",\n          \"hsl(270, 60%, 50%, .15)\",\n          \"hsl(270, 60%, 50%, 15%)\",\n          \"hsl(270 60% 50% / .15)\",\n          \"hsl(270 60% 50% / 15%)\",\n        ],\n        invalid: [\n          \"hsl (360,0000000000100%,000000100%)\",\n          \"hsl(0260, 100 %, 100%)\",\n          \"hsl(0160, 100%, 100%, 100 %)\",\n          \"hsl(-0160, 100%, 100a)\",\n          \"hsl(-0160, 100%, 100)\",\n          \"hsl(-0160 100%, 100%, )\",\n          \"hsl(270 deg, 60%, 70%)\",\n          \"hsl( deg, 60%, 70%)\",\n          \"hsl(, 60%, 70%)\",\n          \"hsl(3000deg, 70%)\",\n        ],\n      });\n    });\n\n    it(\"should validate rgb color strings\", () => {\n      test({\n        validator: \"isRgbColor\",\n        valid: [\n          \"rgb(0,0,0)\",\n          \"rgb(255,255,255)\",\n          \"rgba(0,0,0,0)\",\n          \"rgba(255,255,255,1)\",\n          \"rgba(255,255,255,.1)\",\n          \"rgba(255,255,255,0.1)\",\n          \"rgba(255,255,255,.12)\",\n          \"rgb(5%,5%,5%)\",\n          \"rgba(5%,5%,5%,.3)\",\n          \"rgba(5%,5%,5%,.32)\",\n        ],\n        invalid: [\n          \"rgb(0,0,0,)\",\n          \"rgb(0,0,)\",\n          \"rgb(0,0,256)\",\n          \"rgb()\",\n          \"rgba(0,0,0)\",\n          \"rgba(255,255,255,2)\",\n          \"rgba(255,255,255,.123)\",\n          \"rgba(255,255,256,0.1)\",\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"rgba(3,3,3%,.3)\",\n          \"rgba(5%,5%,5%,.321)\",\n          \"rgb(101%,101%,101%)\",\n          \"rgba(3%,3%,101%,0.3)\",\n          \"rgb(101%,101%,101%) additional invalid string part\",\n          \"rgba(3%,3%,101%,0.3) additional invalid string part\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"r         g    ba(   0,         251,       222     )\",\n          \"rg ba(0, 251, 22, 0.5)\",\n          \"rgb( 255,255 ,255)\",\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgb(5%, 5%, 5%)\",\n        ],\n      });\n\n      // test empty options object\n      test({\n        validator: \"isRgbColor\",\n        args: [{}],\n        valid: [\n          \"rgb(0,0,0)\",\n          \"rgb(255,255,255)\",\n          \"rgba(0,0,0,0)\",\n          \"rgba(255,255,255,1)\",\n          \"rgba(255,255,255,.1)\",\n          \"rgba(255,255,255,.12)\",\n          \"rgba(255,255,255,0.1)\",\n          \"rgb(5%,5%,5%)\",\n          \"rgba(5%,5%,5%,.3)\",\n        ],\n        invalid: [\n          \"rgb(0,0,0,)\",\n          \"rgb(0,0,)\",\n          \"rgb(0,0,256)\",\n          \"rgb()\",\n          \"rgba(0,0,0)\",\n          \"rgba(255,255,255,2)\",\n          \"rgba(255,255,256,0.1)\",\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"rgba(3,3,3%,.3)\",\n          \"rgb(101%,101%,101%)\",\n          \"rgba(3%,3%,101%,0.3)\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"r         g    ba(   0,         251,       222     )\",\n          \"rg ba(0, 251, 22, 0.5)\",\n          \"rgb( 255,255 ,255)\",\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgb(5%, 5%, 5%)\",\n        ],\n      });\n      // test where includePercentValues is given as false\n      test({\n        validator: \"isRgbColor\",\n        args: [false],\n        valid: [\"rgb(5,5,5)\", \"rgba(5,5,5,.3)\"],\n        invalid: [\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"r         g    ba(   0,         251,       222     )\",\n        ],\n      });\n\n      // test where includePercentValues is given as false as part of options object\n      test({\n        validator: \"isRgbColor\",\n        args: [{ includePercentValues: false }],\n        valid: [\"rgb(5,5,5)\", \"rgba(5,5,5,.3)\"],\n        invalid: [\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"rgba(255, 255, 255 ,0.2)\",\n          \"r         g    ba(   0,         251,       222     )\",\n        ],\n      });\n\n      // test where include percent is true explciitly\n      test({\n        validator: \"isRgbColor\",\n        args: [true],\n        valid: [\n          \"rgb(5,5,5)\",\n          \"rgba(5,5,5,.3)\",\n          \"rgb(0,0,0)\",\n          \"rgb(255,255,255)\",\n          \"rgba(0,0,0,0)\",\n          \"rgba(255,255,255,1)\",\n          \"rgba(255,255,255,.1)\",\n          \"rgba(255,255,255,.12)\",\n          \"rgba(255,255,255,0.1)\",\n          \"rgb(5%,5%,5%)\",\n          \"rgba(5%,5%,5%,.3)\",\n          \"rgb(5%,5%,5%)\",\n          \"rgba(255,255,255,0.5)\",\n        ],\n        invalid: [\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgb(5%, 5%, 5%)\",\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"r         g    ba(   0,         251,       222     )\",\n          \"rgb(0,0,0,)\",\n          \"rgb(0,0,)\",\n          \"rgb(0,0,256)\",\n          \"rgb()\",\n          \"rgba(0,0,0)\",\n          \"rgba(255,255,255,2)\",\n          \"rgba(255,255,256,0.1)\",\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"rgba(3,3,3%,.3)\",\n          \"rgb(101%,101%,101%)\",\n          \"rgba(3%,3%,101%,0.3)\",\n        ],\n      });\n\n      // test where percent value is false and allowSpaces is true as part of options object\n      test({\n        validator: \"isRgbColor\",\n        args: [{ includePercentValues: false, allowSpaces: true }],\n        valid: [\n          \"rgb(5,5,5)\",\n          \"rgba(5,5,5,.3)\",\n          \"rgba(255,255,255,0.2)\",\n          \"rgba(255, 255, 255 ,0.2)\",\n        ],\n        invalid: [\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"rgba(5% ,5%, 5%)\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"r         g    ba(   0,         251,       222     )\",\n          \"rgb(0,0,)\",\n          \"rgb()\",\n          \"rgb(4,4,5%)\",\n          \"rgb(5%,5%,5%)\",\n          \"rgba(3,3,3%,.3)\",\n          \"rgb(101%, 101%, 101%)\",\n          \"rgba(3%,3%,101%,0.3)\",\n        ],\n      });\n\n      // test where both are true as part of options object\n      test({\n        validator: \"isRgbColor\",\n        args: [{ includePercentValues: true, allowSpaces: true }],\n        valid: [\n          \"rgb(  5, 5, 5)\",\n          \"rgba(5, 5, 5, .3)\",\n          \"rgb(0, 0, 0)\",\n          \"rgb(255, 255, 255)\",\n          \"rgba(0, 0, 0, 0)\",\n          \"rgba(255, 255, 255, 1)\",\n          \"rgba(255, 255, 255, .1)\",\n          \"rgba(255, 255, 255, 0.1)\",\n          \"rgb(5% ,5% ,5%)\",\n          \"rgba(5%,5%,5%, .3)\",\n        ],\n        invalid: [\n          \"r         g    b(   0,         251,       222     )\",\n          \"rgb(4,4,5%)\",\n          \"rgb(101%,101%,101%)\",\n        ],\n      });\n\n      // test where allowSpaces is false as part of options object\n      test({\n        validator: \"isRgbColor\",\n        args: [{ includePercentValues: true, allowSpaces: false }],\n        valid: [\n          \"rgb(5,5,5)\",\n          \"rgba(5,5,5,.3)\",\n          \"rgb(0,0,0)\",\n          \"rgb(255,255,255)\",\n          \"rgba(0,0,0,0)\",\n          \"rgba(255,255,255,1)\",\n          \"rgba(255,255,255,.1)\",\n          \"rgba(255,255,255,.12)\",\n          \"rgba(255,255,255,0.1)\",\n          \"rgb(5%,5%,5%)\",\n          \"rgba(5%,5%,5%,.3)\",\n        ],\n        invalid: [\n          \"rgb( 255,255 ,255)\",\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgb(5%, 5%, 5%)\",\n          \"rgba(255, 255, 255, 0.5)\",\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"r         g    b(   0,         251,       222     )\",\n          \"r         g    ba(   0,         251,       222     )\",\n          \"rgb(0,0,0,)\",\n          \"rgb(0,0,)\",\n          \"rgb(0,0,256)\",\n          \"rgb()\",\n          \"rgba(0,0,0)\",\n          \"rgba(255,255,255,2)\",\n          \"rgba(255,255,256,0.1)\",\n          \"rgb(4,4,5%)\",\n          \"rgba(5%,5%,5%)\",\n          \"rgba(3,3,3%,.3)\",\n          \"rgb(101%,101%,101%)\",\n          \"rgba(3%,3%,101%,0.3)\",\n        ],\n      });\n    });\n\n    it(\"should validate ISRC code strings\", () => {\n      test({\n        validator: \"isISRC\",\n        valid: [\"USAT29900609\", \"GBAYE6800011\", \"USRC15705223\", \"USCA29500702\"],\n        invalid: [\n          \"USAT2990060\",\n          \"SRC15705223\",\n          \"US-CA29500702\",\n          \"USARC15705223\",\n        ],\n      });\n    });\n\n    it(\"should validate md5 strings\", () => {\n      test({\n        validator: \"isMD5\",\n        valid: [\n          \"d94f3f016ae679c3008de268209132f2\",\n          \"751adbc511ccbe8edf23d486fa4581cd\",\n          \"88dae00e614d8f24cfd5a8b3f8002e93\",\n          \"0bf1c35032a71a14c2f719e5a14c1e96\",\n        ],\n        invalid: [\n          \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n          \"q94375dj93458w34\",\n          \"39485729348\",\n          \"%&FHKJFvk\",\n        ],\n      });\n    });\n\n    it(\"should validate hash strings\", () => {\n      [\"md5\", \"md4\", \"ripemd128\", \"tiger128\"].forEach((algorithm) => {\n        test({\n          validator: \"isHash\",\n          args: [algorithm],\n          valid: [\n            \"d94f3f016ae679c3008de268209132f2\",\n            \"751adbc511ccbe8edf23d486fa4581cd\",\n            \"88dae00e614d8f24cfd5a8b3f8002e93\",\n            \"0bf1c35032a71a14c2f719e5a14c1e96\",\n            \"d94f3F016Ae679C3008de268209132F2\",\n            \"88DAE00e614d8f24cfd5a8b3f8002E93\",\n          ],\n          invalid: [\n            \"q94375dj93458w34\",\n            \"39485729348\",\n            \"%&FHKJFvk\",\n            \"KYT0bf1c35032a71a14c2f719e5a1\",\n          ],\n        });\n      });\n\n      [\"crc32\", \"crc32b\"].forEach((algorithm) => {\n        test({\n          validator: \"isHash\",\n          args: [algorithm],\n          valid: [\n            \"d94f3f01\",\n            \"751adbc5\",\n            \"88dae00e\",\n            \"0bf1c350\",\n            \"88DAE00e\",\n            \"751aDBc5\",\n          ],\n          invalid: [\n            \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n            \"q94375dj93458w34\",\n            \"q943\",\n            \"39485729348\",\n            \"%&FHKJFvk\",\n          ],\n        });\n      });\n\n      [\"sha1\", \"tiger160\", \"ripemd160\"].forEach((algorithm) => {\n        test({\n          validator: \"isHash\",\n          args: [algorithm],\n          valid: [\n            \"3ca25ae354e192b26879f651a51d92aa8a34d8d3\",\n            \"aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d\",\n            \"beb8c3f30da46be179b8df5f5ecb5e4b10508230\",\n            \"efd5d3b190e893ed317f38da2420d63b7ae0d5ed\",\n            \"AAF4c61ddCC5e8a2dabede0f3b482cd9AEA9434D\",\n            \"3ca25AE354e192b26879f651A51d92aa8a34d8D3\",\n          ],\n          invalid: [\n            \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n            \"KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk\",\n            \"q94375dj93458w34\",\n            \"39485729348\",\n            \"%&FHKJFvk\",\n          ],\n        });\n      });\n\n      test({\n        validator: \"isHash\",\n        args: [\"sha256\"],\n        valid: [\n          \"2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824\",\n          \"1d996e033d612d9af2b44b70061ee0e868bfd14c2dd90b129e1edeb7953e7985\",\n          \"80f70bfeaed5886e33536bcfa8c05c60afef5a0e48f699a7912d5e399cdcc441\",\n          \"579282cfb65ca1f109b78536effaf621b853c9f7079664a3fbe2b519f435898c\",\n          \"2CF24dba5FB0a30e26E83b2AC5b9E29E1b161e5C1fa7425E73043362938b9824\",\n          \"80F70bFEAed5886e33536bcfa8c05c60aFEF5a0e48f699a7912d5e399cdCC441\",\n        ],\n        invalid: [\n          \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n          \"KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk\",\n          \"q94375dj93458w34\",\n          \"39485729348\",\n          \"%&FHKJFvk\",\n        ],\n      });\n      test({\n        validator: \"isHash\",\n        args: [\"sha384\"],\n        valid: [\n          \"3fed1f814d28dc5d63e313f8a601ecc4836d1662a19365cbdcf6870f6b56388850b58043f7ebf2418abb8f39c3a42e31\",\n          \"b330f4e575db6e73500bd3b805db1a84b5a034e5d21f0041d91eec85af1dfcb13e40bb1c4d36a72487e048ac6af74b58\",\n          \"bf547c3fc5841a377eb1519c2890344dbab15c40ae4150b4b34443d2212e5b04aa9d58865bf03d8ae27840fef430b891\",\n          \"fc09a3d11368386530f985dacddd026ae1e44e0e297c805c3429d50744e6237eb4417c20ffca8807b071823af13a3f65\",\n          \"3fed1f814d28dc5d63e313f8A601ecc4836d1662a19365CBDCf6870f6b56388850b58043f7ebf2418abb8f39c3a42e31\",\n          \"b330f4E575db6e73500bd3b805db1a84b5a034e5d21f0041d91EEC85af1dfcb13e40bb1c4d36a72487e048ac6af74b58\",\n        ],\n        invalid: [\n          \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n          \"KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk\",\n          \"q94375dj93458w34\",\n          \"39485729348\",\n          \"%&FHKJFvk\",\n        ],\n      });\n      test({\n        validator: \"isHash\",\n        args: [\"sha512\"],\n        valid: [\n          \"9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043\",\n          \"83c586381bf5ba94c8d9ba8b6b92beb0997d76c257708742a6c26d1b7cbb9269af92d527419d5b8475f2bb6686d2f92a6649b7f174c1d8306eb335e585ab5049\",\n          \"45bc5fa8cb45ee408c04b6269e9f1e1c17090c5ce26ffeeda2af097735b29953ce547e40ff3ad0d120e5361cc5f9cee35ea91ecd4077f3f589b4d439168f91b9\",\n          \"432ac3d29e4f18c7f604f7c3c96369a6c5c61fc09bf77880548239baffd61636d42ed374f41c261e424d20d98e320e812a6d52865be059745fdb2cb20acff0ab\",\n          \"9B71D224bd62f3785D96d46ad3ea3d73319bFBC2890CAAdae2dff72519673CA72323C3d99ba5c11d7c7ACC6e14b8c5DA0c4663475c2E5c3adef46f73bcDEC043\",\n          \"432AC3d29E4f18c7F604f7c3c96369A6C5c61fC09Bf77880548239baffd61636d42ed374f41c261e424d20d98e320e812a6d52865be059745fdb2cb20acff0ab\",\n        ],\n        invalid: [\n          \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n          \"KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk\",\n          \"q94375dj93458w34\",\n          \"39485729348\",\n          \"%&FHKJFvk\",\n        ],\n      });\n      test({\n        validator: \"isHash\",\n        args: [\"tiger192\"],\n        valid: [\n          \"6281a1f098c5e7290927ed09150d43ff3990a0fe1a48267c\",\n          \"56268f7bc269cf1bc83d3ce42e07a85632394737918f4760\",\n          \"46fc0125a148788a3ac1d649566fc04eb84a746f1a6e4fa7\",\n          \"7731ea1621ae99ea3197b94583d034fdbaa4dce31a67404a\",\n          \"6281A1f098c5e7290927ed09150d43ff3990a0fe1a48267C\",\n          \"46FC0125a148788a3AC1d649566fc04eb84A746f1a6E4fa7\",\n        ],\n        invalid: [\n          \"KYT0bf1c35032a71a14c2f719e5a14c1\",\n          \"KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk\",\n          \"q94375dj93458w34\",\n          \"39485729348\",\n          \"%&FHKJFvk\",\n        ],\n      });\n    });\n    it(\"should validate JWT tokens\", () => {\n      test({\n        validator: \"isJWT\",\n        valid: [\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI\",\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb3JlbSI6Imlwc3VtIn0.ymiJSsMJXR6tMSr8G9usjQ15_8hKPDv_CArLhxw28MI\",\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2xvciI6InNpdCIsImFtZXQiOlsibG9yZW0iLCJpcHN1bSJdfQ.rRpe04zbWbbJjwM43VnHzAboDzszJtGrNsUxaqQ-GQ8\",\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqb2huIjp7ImFnZSI6MjUsImhlaWdodCI6MTg1fSwiamFrZSI6eyJhZ2UiOjMwLCJoZWlnaHQiOjI3MH19.YRLPARDmhGMC3BBk_OhtwwK21PIkVCqQe8ncIRPKo-E\",\n        ],\n        invalid: [\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\",\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI6MTUxNjIzOTAyMn0\",\n          \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI6MTYxNjY1Mzg3Mn0.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tIiwiaWF0IjoxNjE2NjUzODcyLCJleHAiOjE2MTY2NTM4ODJ9.a1jLRQkO5TV5y5ERcaPAiM9Xm2gBdRjKrrCpHkGr_8M\",\n          \"$Zs.ewu.su84\",\n          \"ks64$S/9.dy$§kz.3sd73b\",\n        ],\n        error: [[], {}, null, undefined],\n      });\n    });\n\n    it(\"should validate null strings\", () => {\n      test({\n        validator: \"isEmpty\",\n        valid: [\"\"],\n        invalid: [\" \", \"foo\", \"3\"],\n      });\n      test({\n        validator: \"isEmpty\",\n        args: [{ ignore_whitespace: false }],\n        valid: [\"\"],\n        invalid: [\" \", \"foo\", \"3\"],\n      });\n      test({\n        validator: \"isEmpty\",\n        args: [{ ignore_whitespace: true }],\n        valid: [\"\", \" \"],\n        invalid: [\"foo\", \"3\"],\n      });\n    });\n\n    it(\"should validate strings against an expected value\", () => {\n      test({\n        validator: \"equals\",\n        args: [\"abc\"],\n        valid: [\"abc\"],\n        invalid: [\"Abc\", \"123\"],\n      });\n    });\n\n    it(\"should validate strings contain another string\", () => {\n      test({\n        validator: \"contains\",\n        args: [\"foo\"],\n        valid: [\"foo\", \"foobar\", \"bazfoo\"],\n        invalid: [\"bar\", \"fobar\"],\n      });\n\n      test({\n        validator: \"contains\",\n        args: [\n          \"foo\",\n          {\n            ignoreCase: true,\n          },\n        ],\n        valid: [\"Foo\", \"FOObar\", \"BAZfoo\"],\n        invalid: [\"bar\", \"fobar\", \"baxoof\"],\n      });\n\n      test({\n        validator: \"contains\",\n        args: [\n          \"foo\",\n          {\n            minOccurrences: 2,\n          },\n        ],\n        valid: [\"foofoofoo\", \"12foo124foo\", \"fofooofoooofoooo\", \"foo1foo\"],\n        invalid: [\"foo\", \"foobar\", \"Fooofoo\", \"foofo\"],\n      });\n    });\n\n    it(\"should validate strings against a pattern\", () => {\n      test({\n        validator: \"matches\",\n        args: [/abc/],\n        valid: [\"abc\", \"abcdef\", \"123abc\"],\n        invalid: [\"acb\", \"Abc\"],\n      });\n      test({\n        validator: \"matches\",\n        args: [\"abc\"],\n        valid: [\"abc\", \"abcdef\", \"123abc\"],\n        invalid: [\"acb\", \"Abc\"],\n      });\n      test({\n        validator: \"matches\",\n        args: [\"abc\", \"i\"],\n        valid: [\"abc\", \"abcdef\", \"123abc\", \"AbC\"],\n        invalid: [\"acb\"],\n      });\n    });\n\n    it(\"should validate strings by length (deprecated api)\", () => {\n      test({\n        validator: \"isLength\",\n        args: [2],\n        valid: [\"abc\", \"de\", \"abcd\"],\n        invalid: [\"\", \"a\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [2, 3],\n        valid: [\"abc\", \"de\"],\n        invalid: [\"\", \"a\", \"abcd\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [2, 3],\n        valid: [\"干𩸽\", \"𠮷野家\"],\n        invalid: [\"\", \"𠀋\", \"千竈通り\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [0, 0],\n        valid: [\"\"],\n        invalid: [\"a\", \"ab\"],\n      });\n    });\n\n    it(\"should validate isLocale codes\", () => {\n      test({\n        validator: \"isLocale\",\n        valid: [\n          \"uz_Latn_UZ\",\n          \"en\",\n          \"gsw\",\n          \"en-US\",\n          \"es_ES\",\n          \"es-419\",\n          \"sw_KE\",\n          \"am_ET\",\n          \"zh-CHS\",\n          \"ca_ES_VALENCIA\",\n          \"en_US_POSIX\",\n          \"hak-CN\",\n          \"zh-Hant\",\n          \"zh-Hans\",\n          \"sr-Cyrl\",\n          \"sr-Latn\",\n          \"zh-cmn-Hans-CN\",\n          \"cmn-Hans-CN\",\n          \"zh-yue-HK\",\n          \"yue-HK\",\n          \"zh-Hans-CN\",\n          \"sr-Latn-RS\",\n          \"sl-rozaj\",\n          \"sl-rozaj-biske\",\n          \"sl-nedis\",\n          \"de-CH-1901\",\n          \"sl-IT-nedis\",\n          \"hy-Latn-IT-arevela\",\n          \"i-enochian\",\n          \"en-scotland-fonipa\",\n          \"sl-IT-rozaj-biske-1994\",\n          \"de-CH-x-phonebk\",\n          \"az-Arab-x-AZE-derbend\",\n          \"x-whatever\",\n          \"qaa-Qaaa-QM-x-southern\",\n          \"de-Qaaa\",\n          \"sr-Latn-QM\",\n          \"sr-Qaaa-RS\",\n          \"en-US-u-islamcal\",\n          \"zh-CN-a-myext-x-private\",\n          \"en-a-myext-b-another\",\n        ],\n        invalid: [\"lo_POP\", \"12\", \"12_DD\", \"de-419-DE\", \"a-DE\"],\n      });\n    });\n\n    it(\"should validate strings by byte length (deprecated api)\", () => {\n      test({\n        validator: \"isByteLength\",\n        args: [2],\n        valid: [\"abc\", \"de\", \"abcd\", \"gmail\"],\n        invalid: [\"\", \"a\"],\n      });\n      test({\n        validator: \"isByteLength\",\n        args: [2, 3],\n        valid: [\"abc\", \"de\", \"g\"],\n        invalid: [\"\", \"a\", \"abcd\", \"gm\"],\n      });\n      test({\n        validator: \"isByteLength\",\n        args: [0, 0],\n        valid: [\"\"],\n        invalid: [\"g\", \"a\"],\n      });\n    });\n\n    it(\"should validate strings by length\", () => {\n      test({\n        validator: \"isLength\",\n        args: [{ min: 2 }],\n        valid: [\"abc\", \"de\", \"abcd\"],\n        invalid: [\"\", \"a\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ min: 2, max: 3 }],\n        valid: [\"abc\", \"de\"],\n        invalid: [\"\", \"a\", \"abcd\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ min: 2, max: 3 }],\n        valid: [\"干𩸽\", \"𠮷野家\"],\n        invalid: [\"\", \"𠀋\", \"千竈通り\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ max: 3 }],\n        valid: [\"abc\", \"de\", \"a\", \"\"],\n        invalid: [\"abcd\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ max: 6, discreteLengths: 5 }],\n        valid: [\"abcd\", \"vfd\", \"ff\", \"\", \"k\"],\n        invalid: [\"abcdefgh\", \"hfjdksks\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ min: 2, max: 6, discreteLengths: 5 }],\n        valid: [\"bsa\", \"vfvd\", \"ff\"],\n        invalid: [\"\", \" \", \"hfskdunvc\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ min: 1, discreteLengths: 2 }],\n        valid: [\" \", \"hello\", \"bsa\"],\n        invalid: [\"\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ max: 0 }],\n        valid: [\"\"],\n        invalid: [\"a\", \"ab\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ min: 5, max: 10, discreteLengths: [2, 6, 8, 9] }],\n        valid: [\"helloguy\", \"shopping\", \"validator\", \"length\"],\n        invalid: [\"abcde\", \"abcdefg\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ discreteLengths: \"9\" }],\n        valid: [\"a\", \"abcd\", \"abcdefghijkl\"],\n        invalid: [],\n      });\n      test({\n        validator: \"isLength\",\n        valid: [\"a\", \"\", \"asds\"],\n      });\n      test({\n        validator: \"isLength\",\n        args: [{ max: 8 }],\n        valid: [\"👩🦰👩👩👦👦🏳️🌈\", \"⏩︎⏩︎⏪︎⏪︎⏭︎⏭︎⏮︎⏮︎\"],\n      });\n    });\n\n    it(\"should validate strings by byte length\", () => {\n      test({\n        validator: \"isByteLength\",\n        args: [{ min: 2 }],\n        valid: [\"abc\", \"de\", \"abcd\", \"gmail\"],\n        invalid: [\"\", \"a\"],\n      });\n      test({\n        validator: \"isByteLength\",\n        args: [{ min: 2, max: 3 }],\n        valid: [\"abc\", \"de\", \"g\"],\n        invalid: [\"\", \"a\", \"abcd\", \"gm\"],\n      });\n      test({\n        validator: \"isByteLength\",\n        args: [{ max: 3 }],\n        valid: [\"abc\", \"de\", \"g\", \"a\", \"\"],\n        invalid: [\"abcd\", \"gm\"],\n      });\n      test({\n        validator: \"isByteLength\",\n        args: [{ max: 0 }],\n        valid: [\"\"],\n        invalid: [\"g\", \"a\"],\n      });\n    });\n\n    it(\"should validate ULIDs\", () => {\n      test({\n        validator: \"isULID\",\n        valid: [\n          \"01HBGW8CWQ5Q6DTT7XP89VV4KT\",\n          \"01HBGW8CWR8MZQMBG6FA2QHMDD\",\n          \"01HBGW8CWS3MEEK12Y9G7SVW4V\",\n          \"01hbgw8cws1tq2njavy9amb0wx\",\n          \"01HBGW8cwS43H4jkQ0A4ZRJ7QV\",\n        ],\n        invalid: [\n          \"\",\n          \"01HBGW-CWS3MEEK1#Y9G7SVW4V\",\n          \"91HBGW8CWS3MEEK12Y9G7SVW4V\",\n          \"81HBGW8CWS3MEEK12Y9G7SVW4V\",\n          \"934859\",\n          \"01HBGW8CWS3MEEK12Y9G7SVW4VXXX\",\n          \"01UBGW8IWS3MOEK12Y9G7SVW4V\",\n          \"01HBGW8CuS43H4JKQ0A4ZRJ7QV\",\n        ],\n      });\n    });\n\n    it(\"should validate UUIDs\", () => {\n      test({\n        validator: \"isUUID\",\n        valid: [\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"934859\",\n          \"987FBC9-4BED-3078-CF07A-9141BA07C9F3\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [undefined],\n        valid: [\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A117FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n        invalid: [\n          \"\",\n          \"A117FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"A11AAAAA-1111-1111-AAAG-111111111111\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [null],\n        valid: [\n          \"A127FBC9-4BED-3078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A127FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A127FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"912859\",\n          \"A12AAAAA-1111-1111-AAAG-111111111111\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [1],\n        valid: [\"E034B584-7D89-11E9-9669-1AECF481A97B\"],\n        invalid: [\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"AAAAAAAA-1111-2222-AAAG\",\n          \"AAAAAAAA-1111-2222-AAAG-111111111111\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [2],\n        valid: [\"A987FBC9-4BED-2078-AF07-9141BA07C9F3\"],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"11111\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"A987FBC9-4BED-2078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [3],\n        valid: [\"9deb20fe-a6e0-355c-81ea-288b009e4f6d\"],\n        invalid: [\n          \"\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"934859\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [4],\n        valid: [\n          \"713ae7e3-cb32-45f9-adcb-7c4fa86b90c1\",\n          \"625e63f3-58f5-40b7-83a1-a72ad31acffb\",\n          \"57b73598-8764-4ad0-a76a-679bb6640eb1\",\n          \"9c858901-8a57-4791-81fe-4c455b099bc9\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"934859\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [5],\n        valid: [\n          \"987FBC97-4BED-5078-AF07-9141BA07C9F3\",\n          \"987FBC97-4BED-5078-BF07-9141BA07C9F3\",\n          \"987FBC97-4BED-5078-8F07-9141BA07C9F3\",\n          \"987FBC97-4BED-5078-9F07-9141BA07C9F3\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"934859\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"9c858901-8a57-4791-81fe-4c455b099bc9\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [6],\n        valid: [\"1ef29908-cde1-69d0-be16-bfc8518a95f0\"],\n        invalid: [\n          \"987FBC97-4BED-1078-AF07-9141BA07C9F3\",\n          \"987FBC97-4BED-2078-AF07-9141BA07C9F3\",\n          \"987FBC97-4BED-3078-AF07-9141BA07C9F3\",\n          \"987FBC97-4BED-4078-AF07-9141BA07C9F3\",\n          \"987FBC97-4BED-5078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"987FBC97-4BED-8078-AF07-9141BA07C9F3\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [7],\n        valid: [\"018C544A-D384-7000-BB74-3B1738ABE43C\"],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"934859\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n          \"713ae7e3-cb32-45f9-adcb-7c4fa86b90c1\",\n          \"625e63f3-58f5-40b7-83a1-a72ad31acffb\",\n          \"57b73598-8764-4ad0-a76a-679bb6640eb1\",\n          \"9c858901-8a57-4791-81fe-4c455b099bc9\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [8],\n        valid: [\"018C544A-D384-8000-BB74-3B1738ABE43C\"],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"934859\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-7078-AF07-9141BA07C9F3\",\n          \"713ae7e3-cb32-45f9-adcb-7c4fa86b90c1\",\n          \"625e63f3-58f5-40b7-83a1-a72ad31acffb\",\n          \"57b73598-8764-4ad0-a76a-679bb6640eb1\",\n          \"9c858901-8a57-4791-81fe-4c455b099bc9\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [\"nil\"],\n        valid: [\"00000000-0000-0000-0000-000000000000\"],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"934859\",\n          \"987FBC9-4BED-3078-CF07A-9141BA07C9F3\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n          \"ffffffff-ffff-ffff-ffff-ffffffffffff\",\n          \"FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [\"max\"],\n        valid: [\n          \"ffffffff-ffff-ffff-ffff-ffffffffffff\",\n          \"FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"934859\",\n          \"987FBC9-4BED-3078-CF07A-9141BA07C9F3\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n          \"00000000-0000-0000-0000-000000000000\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [\"loose\"],\n        valid: [\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n          \"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\",\n          \"AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA\",\n          \"eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee\",\n          \"EEEEEEEE-EEEE-EEEE-EEEE-EEEEEEEEEEEE\",\n          \"99999999-9999-9999-9999-999999999999\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"987FBC9-4BED-3078-CF07A-9141BA07C9F3\",\n          \"934859\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [\"all\"],\n        valid: [\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n          \"00000000-0000-0000-0000-000000000000\",\n          \"ffffffff-ffff-ffff-ffff-ffffffffffff\",\n          \"FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF\",\n        ],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"934859\",\n          \"987FBC9-4BED-3078-CF07A-9141BA07C9F3\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n        ],\n      });\n      test({\n        validator: \"isUUID\",\n        args: [\"invalid\"],\n        valid: [],\n        invalid: [\n          \"\",\n          \"xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx\",\n          \"A987FBC94BED3078CF079141BA07C9F3\",\n          \"934859\",\n          \"987FBC9-4BED-3078-CF07A-9141BA07C9F3\",\n          \"AAAAAAAA-1111-1111-AAAG-111111111111\",\n          \"9deb20fe-a6e0-355c-81ea-288b009e4f6d\",\n          \"A987FBC9-4BED-4078-8F07-9141BA07C9F3\",\n          \"A987FBC9-4BED-5078-AF07-9141BA07C9F3\",\n          \"A987FBC9-4BED-6078-AF07-9141BA07C9F3\",\n          \"018C544A-D384-7000-BB74-3B1738ABE43C\",\n          \"A987FBC9-4BED-8078-AF07-9141BA07C9F3\",\n          \"00000000-0000-0000-0000-000000000000\",\n          \"ffffffff-ffff-ffff-ffff-ffffffffffff\",\n          \"FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF\",\n        ],\n      });\n    });\n\n    it(\"should validate a string that is in another string or array\", () => {\n      test({\n        validator: \"isIn\",\n        args: [\"foobar\"],\n        valid: [\"foo\", \"bar\", \"foobar\", \"\"],\n        invalid: [\"foobarbaz\", \"barfoo\"],\n      });\n      test({\n        validator: \"isIn\",\n        args: [[\"foo\", \"bar\"]],\n        valid: [\"foo\", \"bar\"],\n        invalid: [\"foobar\", \"barfoo\", \"\"],\n      });\n      test({\n        validator: \"isIn\",\n        args: [[\"1\", \"2\", \"3\"]],\n        valid: [\"1\", \"2\", \"3\"],\n        invalid: [\"4\", \"\"],\n      });\n      test({\n        validator: \"isIn\",\n        args: [[\"1\", \"2\", \"3\", { foo: \"bar\" }, () => 5, { toString: \"test\" }]],\n        valid: [\"1\", \"2\", \"3\", \"\"],\n        invalid: [\"4\"],\n      });\n      test({ validator: \"isIn\", invalid: [\"foo\", \"\"] });\n    });\n\n    it(\"should validate a string that is in another object\", () => {\n      test({\n        validator: \"isIn\",\n        args: [{ foo: 1, bar: 2, foobar: 3 }],\n        valid: [\"foo\", \"bar\", \"foobar\"],\n        invalid: [\"foobarbaz\", \"barfoo\", \"\"],\n      });\n      test({\n        validator: \"isIn\",\n        args: [{ 1: 3, 2: 0, 3: 1 }],\n        valid: [\"1\", \"2\", \"3\"],\n        invalid: [\"4\", \"\"],\n      });\n    });\n\n    it(\"should validate ABA routing number\", () => {\n      test({\n        validator: \"isAbaRouting\",\n        valid: [\"322070381\", \"011103093\", \"263170175\", \"124303065\"],\n        invalid: [\n          \"426317017\",\n          \"789456124\",\n          \"603558459\",\n          \"qwerty\",\n          \"12430306\",\n          \"382070381\",\n        ],\n      });\n    });\n\n    it(\"should validate IBAN\", () => {\n      test({\n        validator: \"isIBAN\",\n        valid: [\n          \"SC52BAHL01031234567890123456USD\",\n          \"LC14BOSL123456789012345678901234\",\n          \"MT31MALT01100000000000000000123\",\n          \"SV43ACAT00000000000000123123\",\n          \"EG800002000156789012345180002\",\n          \"BE71 0961 2345 6769\",\n          \"FR76 3000 6000 0112 3456 7890 189\",\n          \"DE91 1000 0000 0123 4567 89\",\n          \"GR96 0810 0010 0000 0123 4567 890\",\n          \"RO09 BCYP 0000 0012 3456 7890\",\n          \"SA44 2000 0001 2345 6789 1234\",\n          \"ES79 2100 0813 6101 2345 6789\",\n          \"CH56 0483 5012 3456 7800 9\",\n          \"GB98 MIDL 0700 9312 3456 78\",\n          \"IL170108000000012612345\",\n          \"IT60X0542811101000000123456\",\n          \"JO71CBJO0000000000001234567890\",\n          \"TR320010009999901234567890\",\n          \"BR1500000000000010932840814P2\",\n          \"LB92000700000000123123456123\",\n          \"IR200170000000339545727003\",\n          \"MZ97123412341234123412341\",\n          \"MA64011519000001205000534921\",\n          \"VG96VPVG0000012345678901\",\n          \"DZ580002100001113000000570\",\n          \"IE29AIBK93115212345678\",\n          \"PS92PALS000000000400123456702\",\n          \"PS92PALS00000000040012345670O\",\n        ],\n        invalid: [\n          \"XX22YYY1234567890123\",\n          \"FR14 2004 1010 0505 0001 3\",\n          \"FR7630006000011234567890189@\",\n          \"FR7630006000011234567890189😅\",\n          \"FR763000600001123456!!🤨7890189@\",\n          \"VG46H07Y0223060094359858\",\n          \"IE95TE8270900834048660\",\n          \"PS072435171802145240705922007\",\n        ],\n      });\n      test({\n        validator: \"isIBAN\",\n        args: [{ whitelist: [\"DK\", \"GB\"] }],\n        valid: [\"DK5000400440116243\", \"GB29NWBK60161331926819\"],\n        invalid: [\n          \"BE71 0961 2345 6769\",\n          \"FR76 3000 6000 0112 3456 7890 189\",\n          \"DE91 1000 0000 0123 4567 89\",\n          \"GR96 0810 0010 0000 0123 4567 890\",\n          \"RO09 BCYP 0000 0012 3456 7890\",\n          \"SA44 2000 0001 2345 6789 1234\",\n          \"ES79 2100 0813 6101 2345 6789\",\n          \"XX22YYY1234567890123\",\n          \"FR14 2004 1010 0505 0001 3\",\n          \"FR7630006000011234567890189@\",\n          \"FR7630006000011234567890189😅\",\n          \"FR763000600001123456!!🤨7890189@\",\n        ],\n      });\n      test({\n        validator: \"isIBAN\",\n        args: [{ whitelist: [\"XX\", \"AA\"] }],\n        invalid: [\n          \"DK5000400440116243\",\n          \"GB29NWBK60161331926819\",\n          \"BE71 0961 2345 6769\",\n          \"FR76 3000 6000 0112 3456 7890 189\",\n          \"DE91 1000 0000 0123 4567 89\",\n          \"GR96 0810 0010 0000 0123 4567 890\",\n          \"RO09 BCYP 0000 0012 3456 7890\",\n          \"SA44 2000 0001 2345 6789 1234\",\n          \"ES79 2100 0813 6101 2345 6789\",\n          \"XX22YYY1234567890123\",\n          \"FR14 2004 1010 0505 0001 3\",\n          \"FR7630006000011234567890189@\",\n          \"FR7630006000011234567890189😅\",\n          \"FR763000600001123456!!🤨7890189@\",\n        ],\n      });\n      test({\n        validator: \"isIBAN\",\n        args: [{ blacklist: [\"IT\"] }],\n        valid: [\n          \"SC52BAHL01031234567890123456USD\",\n          \"LC14BOSL123456789012345678901234\",\n          \"MT31MALT01100000000000000000123\",\n          \"SV43ACAT00000000000000123123\",\n          \"EG800002000156789012345180002\",\n          \"BE71 0961 2345 6769\",\n          \"FR76 3000 6000 0112 3456 7890 189\",\n          \"DE91 1000 0000 0123 4567 89\",\n          \"GR96 0810 0010 0000 0123 4567 890\",\n          \"RO09 BCYP 0000 0012 3456 7890\",\n          \"SA44 2000 0001 2345 6789 1234\",\n          \"ES79 2100 0813 6101 2345 6789\",\n          \"CH56 0483 5012 3456 7800 9\",\n          \"GB98 MIDL 0700 9312 3456 78\",\n          \"IL170108000000012612345\",\n          \"JO71CBJO0000000000001234567890\",\n          \"TR320010009999901234567890\",\n          \"BR1500000000000010932840814P2\",\n          \"LB92000700000000123123456123\",\n          \"IR200170000000339545727003\",\n          \"MZ97123412341234123412341\",\n        ],\n        invalid: [\n          \"XX22YYY1234567890123\",\n          \"FR14 2004 1010 0505 0001 3\",\n          \"FR7630006000011234567890189@\",\n          \"FR7630006000011234567890189😅\",\n          \"FR763000600001123456!!🤨7890189@\",\n          \"IT60X0542811101000000123456\",\n        ],\n      });\n    });\n\n    it(\"should validate BIC codes\", () => {\n      test({\n        validator: \"isBIC\",\n        valid: [\n          \"SBICKEN1345\",\n          \"SBICKEN1\",\n          \"SBICKENY\",\n          \"SBICKEN1YYP\",\n          \"SBICXKN1YYP\",\n        ],\n        invalid: [\n          \"SBIC23NXXX\",\n          \"S23CKENXXXX\",\n          \"SBICKENXX\",\n          \"SBICKENXX9\",\n          \"SBICKEN13458\",\n          \"SBICKEN\",\n          \"SBICXK\",\n        ],\n      });\n    });\n\n    it(\"should validate that integer strings are divisible by a number\", () => {\n      test({\n        validator: \"isDivisibleBy\",\n        args: [2],\n        valid: [\"2\", \"4\", \"100\", \"1000\"],\n        invalid: [\"1\", \"2.5\", \"101\", \"foo\", \"\", \"2020-01-06T14:31:00.135Z\"],\n      });\n    });\n\n    it(\"should validate luhn numbers\", () => {\n      test({\n        validator: \"isLuhnNumber\",\n        valid: [\n          \"0\",\n          \"5421\",\n          \"01234567897\",\n          \"0123456789012345678906\",\n          \"0123456789012345678901234567891\",\n          \"123456789012345678906\",\n          \"375556917985515\",\n          \"36050234196908\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4929 7226 5379 7141\",\n        ],\n        invalid: [\n          \"\",\n          \"1\",\n          \"5422\",\n          \"foo\",\n          \"prefix6234917882863855\",\n          \"623491788middle2863855\",\n          \"6234917882863855suffix\",\n        ],\n      });\n    });\n\n    it(\"should validate credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        valid: [\n          \"375556917985515\",\n          \"36050234196908\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4929 7226 5379 7141\",\n          \"5398228707871527\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"6765780016990268\",\n          \"4716989580001715211\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n        invalid: [\n          \"foo\",\n          \"foo\",\n          \"5398228707871528\",\n          \"2718760626256571\",\n          \"2721465526338453\",\n          \"2220175103860763\",\n          \"375556917985515999999993\",\n          \"899999996234917882863855\",\n          \"prefix6234917882863855\",\n          \"623491788middle2863855\",\n          \"6234917882863855suffix\",\n          \"4716989580001715213\",\n        ],\n      });\n    });\n\n    it(\"should validate credit cards without a proper provider\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"Plorf\" }],\n        error: [\n          \"foo\",\n          // valid cc #\n          \"375556917985515\",\n          \"4716-2210-5188-5662\",\n          \"375556917985515999999993\",\n          \"6234917882863855suffix\",\n        ],\n      });\n    });\n\n    it(\"should validate AmEx provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"AmEx\" }],\n        valid: [\"375556917985515\"],\n        invalid: [\n          \"foo\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"36050234196908\",\n          \"375556917985515999999993\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n          \"5398228707871527\",\n          \"6234917882863855suffix\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n      });\n    });\n\n    it(\"should validate Diners Club provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"DinersClub\" }],\n        valid: [\"36050234196908\"],\n        invalid: [\n          \"foo\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"375556917985515\",\n          \"375556917985515999999993\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n          \"5398228707871527\",\n          \"6234917882863855suffix\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n      });\n    });\n\n    it(\"should validate Discover provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"Discover\" }],\n        valid: [\"6011111111111117\", \"6011000990139424\"],\n        invalid: [\n          \"foo\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"36050234196908\",\n          \"375556917985515\",\n          \"375556917985515999999993\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n          \"5398228707871527\",\n          \"6234917882863855suffix\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n      });\n    });\n\n    it(\"should validate JCB provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"JCB\" }],\n        valid: [\"3530111333300000\", \"3566002020360505\"],\n        invalid: [\n          \"foo\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"36050234196908\",\n          \"375556917985515\",\n          \"375556917985515999999993\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n          \"5398228707871527\",\n          \"6234917882863855suffix\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n      });\n    });\n\n    it(\"should validate Mastercard provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"Mastercard\" }],\n        valid: [\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2718760626256570\",\n          \"2720428011723762\",\n          \"5398228707871527\",\n        ],\n        invalid: [\n          \"foo\",\n          \"36050234196908\",\n          \"375556917985515\",\n          \"375556917985515999999993\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n          \"6234917882863855suffix\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n      });\n    });\n\n    it(\"should validate Union Pay provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"UnionPay\" }],\n        valid: [\n          \"6226050967750613\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6246281879460688\",\n          \"6263892624162870\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n        invalid: [\n          \"foo\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"36050234196908\",\n          \"375556917985515\",\n          \"375556917985515999999993\",\n          \"4716461583322103\",\n          \"4716-2210-5188-5662\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n          \"5398228707871527\",\n          \"6234917882863855suffix\",\n        ],\n      });\n    });\n\n    it(\"should validate Visa provided credit cards\", () => {\n      test({\n        validator: \"isCreditCard\",\n        args: [{ provider: \"Visa\" }],\n        valid: [\n          \"4716-2210-5188-5662\",\n          \"4716461583322103\",\n          \"4716989580001715211\",\n          \"4929 7226 5379 7141\",\n        ],\n        invalid: [\n          \"foo\",\n          \"2222155765072228\",\n          \"2225855203075256\",\n          \"2720428011723762\",\n          \"2718760626256570\",\n          \"36050234196908\",\n          \"375556917985515\",\n          \"375556917985515999999993\",\n          \"5398228707871527\",\n          \"6234917882863855suffix\",\n          \"6283875070985593\",\n          \"6263892624162870\",\n          \"6234917882863855\",\n          \"6234698580215388\",\n          \"6226050967750613\",\n          \"6246281879460688\",\n          \"6283875070985593\",\n          \"6765780016990268\",\n          \"8171999927660000\",\n          \"8171999900000000021\",\n        ],\n      });\n    });\n\n    it(\"should validate identity cards\", () => {\n      const fixtures = [\n        {\n          locale: \"PK\",\n          valid: [\n            \"45504-4185771-3\",\n            \"39915-6182971-9\",\n            \"21143-6182971-2\",\n            \"34543-2323471-1\",\n            \"72345-2345678-7\",\n            \"63456-8765432-8\",\n            \"55672-1234567-5\",\n            \"21234-9876543-6\",\n          ],\n          invalid: [\n            \"08000-1234567-5\",\n            \"74321-87654321-1\",\n            \"51234-98765-2\",\n            \"00000-0000000-0\",\n            \"88888-88888888-0\",\n            \"99999-9999999-9\",\n            \"11111\",\n          ],\n        },\n        {\n          locale: \"zh-HK\",\n          valid: [\n            \"OV290326[A]\",\n            \"Q803337[0]\",\n            \"Z0977986\",\n            \"W520128(7)\",\n            \"A494866[4]\",\n            \"A494866(4)\",\n            \"Z867821A\",\n            \"ag293013(9)\",\n            \"k348609(5)\",\n          ],\n          invalid: [\n            \"A1234567890\",\n            \"98765432\",\n            \"O962472(9)\",\n            \"M4578601\",\n            \"X731324[8]\",\n            \"C503134(5)\",\n            \"RH265886(3)\",\n          ],\n        },\n        {\n          locale: \"LK\",\n          valid: [\n            \"722222222v\",\n            \"722222222V\",\n            \"993151225x\",\n            \"993151225X\",\n            \"188888388x\",\n            \"935632124V\",\n            \"199931512253\",\n            \"200023125632\",\n          ],\n          invalid: [\n            \"023125648V\",\n            \"023345621v\",\n            \"021354211X\",\n            \"055321231x\",\n            \"02135465462\",\n            \"199931512253X\",\n          ],\n        },\n        {\n          locale: \"PL\",\n          valid: [\n            \"99012229019\",\n            \"09210215408\",\n            \"20313034701\",\n            \"86051575214\",\n            \"77334586883\",\n            \"54007481320\",\n            \"06566860643\",\n            \"77552478861\",\n          ],\n          invalid: [\n            \"aa\",\n            \"5\",\n            \"195\",\n            \"\",\n            \" \",\n            \"12345678901\",\n            \"99212229019\",\n            \"09210215402\",\n            \"20313534701\",\n            \"86241579214\",\n          ],\n        },\n        {\n          locale: \"ES\",\n          valid: [\n            \"99999999R\",\n            \"12345678Z\",\n            \"01234567L\",\n            \"01234567l\",\n            \"X1234567l\",\n            \"x1234567l\",\n            \"X1234567L\",\n            \"Y1234567X\",\n            \"Z1234567R\",\n          ],\n          invalid: [\n            \"123456789\",\n            \"12345678A\",\n            \"12345 678Z\",\n            \"12345678-Z\",\n            \"1234*6789\",\n            \"1234*678Z\",\n            \"12345678!\",\n            \"1234567L\",\n            \"A1234567L\",\n            \"X1234567A\",\n            \"Y1234567B\",\n            \"Z1234567C\",\n          ],\n        },\n        {\n          locale: \"FI\",\n          valid: [\n            \"131052-308T\", // People born in 1900s\n            \"131052A308T\", // People born in 2000s\n            \"131052+308T\", // People born in 1800s\n            \"131052-313Y\",\n          ],\n          invalid: [\"131052308T\", \"131052-308T \", \"131052-308A\"],\n        },\n        {\n          locale: \"IN\",\n          valid: [\"298448863364\", \"2984 4886 3364\"],\n          invalid: [\n            \"99999999R\",\n            \"12345678Z\",\n            \"01234567L\",\n            \"01234567l\",\n            \"X1234567l\",\n            \"x1234567l\",\n            \"X1234567L\",\n          ],\n        },\n        {\n          locale: \"IR\",\n          valid: [\n            \"0499370899\",\n            \"0790419904\",\n            \"0084575948\",\n            \"0963695398\",\n            \"0684159414\",\n            \"0067749828\",\n            \"0650451252\",\n            \"1583250689\",\n            \"4032152314\",\n            \"0076229645\",\n            \"4271467685\",\n            \"0200203241\",\n          ],\n          invalid: [\n            \"1260293040\",\n            \"0000000001\",\n            \"1999999999\",\n            \"9999999991\",\n            \"AAAAAAAAAA\",\n            \"0684159415\",\n          ],\n        },\n        {\n          locale: \"IT\",\n          valid: [\"CR43675TM\", \"CA79382RA\"],\n          invalid: [\"CA00000AA\", \"CB2342TG\", \"CS123456A\", \"C1236EC\"],\n        },\n        {\n          locale: \"NO\",\n          valid: [\n            \"09053426694\",\n            \"26028338723\",\n            \"08031470790\",\n            \"12051539514\",\n            \"02077448074\",\n            \"14035638319\",\n            \"13031379673\",\n            \"29126214926\",\n          ],\n          invalid: [\"09053426699\", \"00000000000\", \"26028338724\", \"92031470790\"],\n        },\n        {\n          locale: \"TH\",\n          valid: [\"1101230000001\", \"1101230000060\"],\n          invalid: [\n            \"abc\",\n            \"1101230\",\n            \"11012300000011\",\n            \"aaaaaaaaaaaaa\",\n            \"110123abcd001\",\n            \"1101230000007\",\n            \"0101123450000\",\n            \"0101123450004\",\n            \"9101123450008\",\n          ],\n        },\n        {\n          locale: \"he-IL\",\n          valid: [\n            \"219472156\",\n            \"219486610\",\n            \"219488962\",\n            \"219566726\",\n            \"219640216\",\n            \"219645041\",\n            \"334795465\",\n            \"335211686\",\n            \"335240479\",\n            \"335472171\",\n            \"336999842\",\n            \"337090443\",\n          ],\n          invalid: [\n            \"123456789\",\n            \"12345678A\",\n            \"12345 678Z\",\n            \"12345678-Z\",\n            \"1234*6789\",\n            \"1234*678Z\",\n            \"12345678!\",\n            \"1234567L\",\n            \"A1234567L\",\n            \"X1234567A\",\n            \"Y1234567B\",\n            \"Z1234567C\",\n            \"219772156\",\n            \"219487710\",\n            \"334705465\",\n            \"336000842\",\n          ],\n        },\n        {\n          locale: \"ar-LY\",\n          valid: [\n            \"119803455876\",\n            \"120024679875\",\n            \"219624876201\",\n            \"220103480657\",\n          ],\n          invalid: [\n            \"987654320123\",\n            \"123-456-7890\",\n            \"012345678912\",\n            \"1234567890\",\n            \"AFJBHUYTREWR\",\n            \"C4V6B1X0M5T6\",\n            \"9876543210123\",\n          ],\n        },\n        {\n          locale: \"ar-TN\",\n          valid: [\n            \"09958092\",\n            \"09151092\",\n            \"65126506\",\n            \"79378815\",\n            \"58994407\",\n            \"73089789\",\n            \"73260311\",\n          ],\n          invalid: [\n            \"123456789546\",\n            \"123456789\",\n            \"023456789\",\n            \"12345678A\",\n            \"12345\",\n            \"1234578A\",\n            \"123 578A\",\n            \"12345 678Z\",\n            \"12345678-Z\",\n            \"1234*6789\",\n            \"1234*678Z\",\n            \"GE9800as98\",\n            \"X231071922\",\n            \"1234*678Z\",\n            \"12345678!\",\n          ],\n        },\n        {\n          locale: \"zh-CN\",\n          valid: [\n            \"235407195106112745\",\n            \"210203197503102721\",\n            \"520323197806058856\",\n            \"110101491001001\",\n          ],\n          invalid: [\n            \"160323197806058856\",\n            \"010203197503102721\",\n            \"520323297806058856\",\n            \"520323197802318856\",\n            \"235407195106112742\",\n            \"010101491001001\",\n            \"110101491041001\",\n            \"160101491001001\",\n            \"110101940231001\",\n            \"xx1234567\",\n            \"135407195106112742\",\n            \"123456789546\",\n            \"123456789\",\n            \"023456789\",\n            \"12345678A\",\n            \"12345\",\n            \"1234578A\",\n            \"123 578A\",\n            \"12345 678Z\",\n            \"12345678-Z\",\n            \"1234*6789\",\n            \"1234*678Z\",\n            \"GE9800as98\",\n            \"X231071922\",\n            \"1234*678Z\",\n            \"12345678!\",\n            \"235407207006112742\",\n          ],\n        },\n        {\n          locale: \"zh-TW\",\n          valid: [\n            \"B176944193\",\n            \"K101189797\",\n            \"F112866121\",\n            \"A219758834\",\n            \"A244144802\",\n            \"A146047171\",\n            \"Q170219004\",\n            \"Z277018381\",\n            \"X231071923\",\n          ],\n          invalid: [\n            \"123456789\",\n            \"A185034995\",\n            \"X431071923\",\n            \"GE9800as98\",\n            \"X231071922\",\n            \"1234*678Z\",\n            \"12345678!\",\n            \"1234567L\",\n            \"A1234567L\",\n            \"X1234567A\",\n            \"Y1234567B\",\n            \"Z1234567C\",\n            \"219772156\",\n            \"219487710\",\n            \"334705465\",\n            \"336000842\",\n          ],\n        },\n      ];\n\n      let allValid = [];\n\n      // Test fixtures\n      fixtures.forEach((fixture) => {\n        if (fixture.valid) allValid = allValid.concat(fixture.valid);\n        test({\n          validator: \"isIdentityCard\",\n          valid: fixture.valid,\n          invalid: fixture.invalid,\n          args: [fixture.locale],\n        });\n      });\n\n      // Test generics\n      test({\n        validator: \"isIdentityCard\",\n        valid: [...allValid],\n        invalid: [\"foo\"],\n        args: [\"any\"],\n      });\n    });\n\n    it(\"should error on invalid locale\", () => {\n      test({\n        validator: \"isIdentityCard\",\n        args: [\"is-NOT\"],\n        error: [\"99999999R\", \"12345678Z\"],\n      });\n    });\n\n    it(\"should validate ISINs\", () => {\n      test({\n        validator: \"isISIN\",\n        valid: [\n          \"AU0000XVGZA3\",\n          \"DE000BAY0017\",\n          \"BE0003796134\",\n          \"SG1G55870362\",\n          \"GB0001411924\",\n          \"DE000WCH8881\",\n          \"PLLWBGD00016\",\n          \"US0378331005\",\n        ],\n        invalid: [\"DE000BAY0018\", \"PLLWBGD00019\", \"foo\", \"5398228707871528\"],\n      });\n    });\n\n    it(\"should validate EANs\", () => {\n      test({\n        validator: \"isEAN\",\n        valid: [\n          \"9421023610112\",\n          \"1234567890128\",\n          \"4012345678901\",\n          \"9771234567003\",\n          \"9783161484100\",\n          \"73513537\",\n          \"00012345600012\",\n          \"10012345678902\",\n          \"20012345678909\",\n        ],\n        invalid: [\"5901234123451\", \"079777681629\", \"0705632085948\"],\n      });\n    });\n\n    it(\"should validate ISSNs\", () => {\n      test({\n        validator: \"isISSN\",\n        valid: [\n          \"0378-5955\",\n          \"0000-0000\",\n          \"2434-561X\",\n          \"2434-561x\",\n          \"01896016\",\n          \"20905076\",\n        ],\n        invalid: [\n          \"0378-5954\",\n          \"0000-0001\",\n          \"0378-123\",\n          \"037-1234\",\n          \"0\",\n          \"2434-561c\",\n          \"1684-5370\",\n          \"19960791\",\n          \"\",\n        ],\n      });\n      test({\n        validator: \"isISSN\",\n        args: [{ case_sensitive: true }],\n        valid: [\"2434-561X\", \"2434561X\", \"0378-5955\", \"03785955\"],\n        invalid: [\"2434-561x\", \"2434561x\"],\n      });\n      test({\n        validator: \"isISSN\",\n        args: [{ require_hyphen: true }],\n        valid: [\"2434-561X\", \"2434-561x\", \"0378-5955\"],\n        invalid: [\"2434561X\", \"2434561x\", \"03785955\"],\n      });\n      test({\n        validator: \"isISSN\",\n        args: [{ case_sensitive: true, require_hyphen: true }],\n        valid: [\"2434-561X\", \"0378-5955\"],\n        invalid: [\"2434-561x\", \"2434561X\", \"2434561x\", \"03785955\"],\n      });\n    });\n\n    it(\"should validate JSON\", () => {\n      test({\n        validator: \"isJSON\",\n        valid: ['{ \"key\": \"value\" }', \"{}\"],\n        invalid: [\n          '{ key: \"value\" }',\n          \"{ 'key': 'value' }\",\n          \"null\",\n          \"1234\",\n          '\"nope\"',\n        ],\n      });\n    });\n\n    it(\"should validate JSON with primitives\", () => {\n      test({\n        validator: \"isJSON\",\n        args: [{ allow_primitives: true }],\n        valid: ['{ \"key\": \"value\" }', \"{}\", \"null\", \"false\", \"true\"],\n        invalid: [\n          '{ key: \"value\" }',\n          \"{ 'key': 'value' }\",\n          '{ \"key\": value }',\n          \"1234\",\n          '\"nope\"',\n        ],\n      });\n    });\n\n    it(\"should validate multibyte strings\", () => {\n      test({\n        validator: \"isMultibyte\",\n        valid: [\n          \"ひらがな・カタカナ、.漢字\",\n          \"あいうえお foobar\",\n          \"test@example.com\",\n          \"1234abcDExyz\",\n          \"カタカナ\",\n          \"中文\",\n        ],\n        invalid: [\"abc\", \"abc123\", '<>@\" *.'],\n      });\n    });\n\n    it(\"should validate ascii strings\", () => {\n      test({\n        validator: \"isAscii\",\n        valid: [\"foobar\", \"0987654321\", \"[email protected]\", \"1234abcDEF\"],\n        invalid: [\"foobar\", \"xyz098\", \"123456\", \"カタカナ\"],\n      });\n    });\n\n    it(\"should validate full-width strings\", () => {\n      test({\n        validator: \"isFullWidth\",\n        valid: [\n          \"ひらがな・カタカナ、.漢字\",\n          \"3ー0 a@com\",\n          \"Fカタカナ゙ᆲ\",\n          \"Good=Parts\",\n        ],\n        invalid: [\"abc\", \"abc123\", '!\"#$%&()<>/+=-_? ~^|.,@`{}[]'],\n      });\n    });\n\n    it(\"should validate half-width strings\", () => {\n      test({\n        validator: \"isHalfWidth\",\n        valid: [\n          '!\"#$%&()<>/+=-_? ~^|.,@`{}[]',\n          \"l-btn_02--active\",\n          \"abc123い\",\n          \"カタカナ゙ᆲ←\",\n        ],\n        invalid: [\"あいうえお\", \"0011\"],\n      });\n    });\n\n    it(\"should validate variable-width strings\", () => {\n      test({\n        validator: \"isVariableWidth\",\n        valid: [\n          \"ひらがなカタカナ漢字ABCDE\",\n          \"3ー0123\",\n          \"Fカタカナ゙ᆲ\",\n          \"Good=Parts\",\n        ],\n        invalid: [\n          \"abc\",\n          \"abc123\",\n          '!\"#$%&()<>/+=-_? ~^|.,@`{}[]',\n          \"ひらがな・カタカナ、.漢字\",\n          \"123456\",\n          \"カタカナ゙ᆲ\",\n        ],\n      });\n    });\n\n    it(\"should validate surrogate pair strings\", () => {\n      test({\n        validator: \"isSurrogatePair\",\n        valid: [\"𠮷野𠮷\", \"𩸽\", \"ABC千𥧄1-2-3\"],\n        invalid: [\"吉野竈\", \"鮪\", \"ABC1-2-3\"],\n      });\n    });\n\n    it(\"should validate Semantic Versioning Specification (SemVer) strings\", () => {\n      test({\n        validator: \"isSemVer\",\n        valid: [\n          \"0.0.4\",\n          \"1.2.3\",\n          \"10.20.30\",\n          \"1.1.2-prerelease+meta\",\n          \"1.1.2+meta\",\n          \"1.1.2+meta-valid\",\n          \"1.0.0-alpha\",\n          \"1.0.0-beta\",\n          \"1.0.0-alpha.beta\",\n          \"1.0.0-alpha.beta.1\",\n          \"1.0.0-alpha.1\",\n          \"1.0.0-alpha0.valid\",\n          \"1.0.0-alpha.0valid\",\n          \"1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay\",\n          \"1.0.0-rc.1+build.1\",\n          \"2.0.0-rc.1+build.123\",\n          \"1.2.3-beta\",\n          \"10.2.3-DEV-SNAPSHOT\",\n          \"1.2.3-SNAPSHOT-123\",\n          \"1.0.0\",\n          \"2.0.0\",\n          \"1.1.7\",\n          \"2.0.0+build.1848\",\n          \"2.0.1-alpha.1227\",\n          \"1.0.0-alpha+beta\",\n          \"1.2.3----RC-SNAPSHOT.12.9.1--.12+788\",\n          \"1.2.3----R-S.12.9.1--.12+meta\",\n          \"1.2.3----RC-SNAPSHOT.12.9.1--.12\",\n          \"1.0.0+0.build.1-rc.10000aaa-kk-0.1\",\n          \"99999999999999999999999.999999999999999999.99999999999999999\",\n          \"1.0.0-0A.is.legal\",\n        ],\n        invalid: [\n          \"-invalid+invalid\",\n          \"-invalid.01\",\n          \"alpha\",\n          \"alpha.beta\",\n          \"alpha.beta.1\",\n          \"alpha.1\",\n          \"alpha+beta\",\n          \"alpha_beta\",\n          \"alpha.\",\n          \"alpha..\",\n          \"beta\",\n          \"1.0.0-alpha_beta\",\n          \"-alpha.\",\n          \"1.0.0-alpha..\",\n          \"1.0.0-alpha..1\",\n          \"1.0.0-alpha...1\",\n          \"1.0.0-alpha....1\",\n          \"1.0.0-alpha.....1\",\n          \"1.0.0-alpha......1\",\n          \"1.0.0-alpha.......1\",\n          \"01.1.1\",\n          \"1.01.1\",\n          \"1.1.01\",\n          \"1.2\",\n          \"1.2.3.DEV\",\n          \"1.2-SNAPSHOT\",\n          \"1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788\",\n          \"1.2-RC-SNAPSHOT\",\n          \"-1.0.3-gamma+b7718\",\n          \"+justmeta\",\n          \"9.8.7+meta+meta\",\n          \"9.8.7-whatever+meta+meta\",\n          \"99999999999999999999999.999999999999999999.99999999999999999-\",\n          \"---RC-SNAPSHOT.12.09.1--------------------------------..12\",\n        ],\n      });\n    });\n\n    it(\"should validate base32 strings\", () => {\n      test({\n        validator: \"isBase32\",\n        valid: [\n          \"ZG======\",\n          \"JBSQ====\",\n          \"JBSWY===\",\n          \"JBSWY3A=\",\n          \"JBSWY3DP\",\n          \"JBSWY3DPEA======\",\n          \"K5SWYY3PNVSSA5DPEBXG6ZA=\",\n          \"K5SWYY3PNVSSA5DPEBXG6===\",\n        ],\n        invalid: [\n          \"12345\",\n          \"\",\n          \"JBSWY3DPtesting123\",\n          \"ZG=====\",\n          \"Z======\",\n          \"Zm=8JBSWY3DP\",\n          \"=m9vYg==\",\n          \"Zm9vYm/y====\",\n        ],\n      });\n    });\n\n    it(\"should validate base32 strings with crockford alternative\", () => {\n      test({\n        validator: \"isBase32\",\n        args: [{ crockford: true }],\n        valid: [\"91JPRV3F41BPYWKCCGGG\", \"60\", \"64\", \"B5QQA833C5Q20S3F41MQ8\"],\n        invalid: [\n          \"91JPRV3F41BUPYWKCCGGG\",\n          \"B5QQA833C5Q20S3F41MQ8L\",\n          \"60I\",\n          \"B5QQA833OULIC5Q20S3F41MQ8\",\n        ],\n      });\n    });\n\n    it(\"should validate base58 strings\", () => {\n      test({\n        validator: \"isBase58\",\n        valid: [\n          \"BukQL\",\n          \"3KMUV89zab\",\n          \"91GHkLMNtyo98\",\n          \"YyjKm3H\",\n          \"Mkhss145TRFg\",\n          \"7678765677\",\n          \"abcodpq\",\n          \"AAVHJKLPY\",\n        ],\n        invalid: [\n          \"0OPLJH\",\n          \"IMKLP23\",\n          \"KLMOmk986\",\n          \"LL1l1985hG\",\n          \"*MP9K\",\n          \"Zm=8JBSWY3DP\",\n          \")()(=9292929MKL\",\n        ],\n      });\n    });\n\n    it(\"should validate hex-encoded MongoDB ObjectId\", () => {\n      test({\n        validator: \"isMongoId\",\n        valid: [\"507f1f77bcf86cd799439011\"],\n        invalid: [\n          \"507f1f77bcf86cd7994390\",\n          \"507f1f77bcf86cd79943901z\",\n          \"\",\n          \"507f1f77bcf86cd799439011 \",\n        ],\n      });\n    });\n\n    it(\"should validate mobile phone number\", () => {\n      let fixtures = [\n        {\n          locale: \"am-AM\",\n          valid: [\n            \"+37433123456\",\n            \"+37441123456\",\n            \"+37443123456\",\n            \"+37444123456\",\n            \"+37455123456\",\n            \"+37477123456\",\n            \"+37488123456\",\n            \"+37491123456\",\n            \"+37493123456\",\n            \"+37494123456\",\n            \"+37495123456\",\n            \"+37496123456\",\n            \"+37498123456\",\n            \"+37499123456\",\n            \"055123456\",\n            \"37455123456\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+37403498855\",\n            \"+37416498123\",\n            \"05614988556\",\n            \"\",\n            \"37456789000\",\n            \"37486789000\",\n            \"+37431312345\",\n            \"+37430312345\",\n            \"+37460123456\",\n            \"+37410324123\",\n            \"+37422298765\",\n            \"+37431276521\",\n            \"022698763\",\n            \"+37492123456\",\n          ],\n        },\n        {\n          locale: \"ar-AE\",\n          valid: [\n            \"+971502674453\",\n            \"+971521247658\",\n            \"+971541255684\",\n            \"+971555454458\",\n            \"+971561498855\",\n            \"+971585215778\",\n            \"971585215778\",\n            \"0585215778\",\n            \"585215778\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+971511498855\",\n            \"+9715614988556\",\n            \"+9745614988556\",\n            \"\",\n            \"+9639626626262\",\n            \"+963332210972\",\n            \"0114152198\",\n            \"962796477263\",\n          ],\n        },\n        {\n          locale: \"ar-BH\",\n          valid: [\n            \"+97335078110\",\n            \"+97339534385\",\n            \"+97366331055\",\n            \"+97333146000\",\n            \"97335078110\",\n            \"35078110\",\n            \"66331055\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+973350781101\",\n            \"+97379534385\",\n            \"+973035078110\",\n            \"\",\n            \"+9639626626262\",\n            \"+963332210972\",\n            \"0114152198\",\n            \"962796477263\",\n            \"035078110\",\n            \"16331055\",\n            \"hello\",\n            \"+9733507811a\",\n          ],\n        },\n        {\n          locale: \"ar-EG\",\n          valid: [\n            \"+201004513789\",\n            \"+201111453489\",\n            \"+201221204610\",\n            \"+201144621154\",\n            \"+201200124304\",\n            \"+201011201564\",\n            \"+201124679001\",\n            \"+201064790156\",\n            \"+201274652177\",\n            \"+201280134679\",\n            \"+201090124576\",\n            \"+201583728900\",\n            \"201599495596\",\n            \"201090124576\",\n            \"01090124576\",\n            \"01538920744\",\n            \"1593075993\",\n            \"1090124576\",\n          ],\n          invalid: [\n            \"+221004513789\",\n            \"+201404513789\",\n            \"12345\",\n            \"\",\n            \"+9639626626262\",\n            \"+963332210972\",\n            \"0114152198\",\n            \"962796477263\",\n          ],\n        },\n        {\n          locale: \"ar-JO\",\n          valid: [\n            \"0796477263\",\n            \"0777866254\",\n            \"0786725261\",\n            \"+962796477263\",\n            \"+962777866254\",\n            \"+962786725261\",\n            \"962796477263\",\n            \"962777866254\",\n            \"962786725261\",\n          ],\n          invalid: [\n            \"00962786725261\",\n            \"00962796477263\",\n            \"12345\",\n            \"\",\n            \"+9639626626262\",\n            \"+963332210972\",\n            \"0114152198\",\n          ],\n        },\n        {\n          locale: \"ar-KW\",\n          valid: [\n            \"96550000000\",\n            \"96560000000\",\n            \"96590000000\",\n            \"96541000000\",\n            \"+96550000000\",\n            \"+96550000220\",\n            \"+96551111220\",\n            \"+96541000000\",\n          ],\n          invalid: [\n            \"+96570000220\",\n            \"00962786725261\",\n            \"00962796477263\",\n            \"12345\",\n            \"\",\n            \"+9639626626262\",\n            \"+963332210972\",\n            \"0114152198\",\n            \"+96540000000\",\n          ],\n        },\n        {\n          locale: \"ar-LB\",\n          valid: [\n            \"+96171234568\",\n            \"+9613123456\",\n            \"3456123\",\n            \"3123456\",\n            \"81978468\",\n            \"77675798\",\n          ],\n          invalid: [\n            \"+961712345688888\",\n            \"00912220000\",\n            \"7767579888\",\n            \"+0921110000\",\n            \"+3123456888\",\n            \"021222200000\",\n            \"213333444444\",\n            \"\",\n            \"+212234\",\n            \"+21\",\n            \"02122333\",\n          ],\n        },\n        {\n          locale: \"ar-LY\",\n          valid: [\n            \"912220000\",\n            \"0923330000\",\n            \"218945550000\",\n            \"+218958880000\",\n            \"212220000\",\n            \"0212220000\",\n            \"+218212220000\",\n          ],\n          invalid: [\n            \"9122220000\",\n            \"00912220000\",\n            \"09211110000\",\n            \"+0921110000\",\n            \"+2180921110000\",\n            \"021222200000\",\n            \"213333444444\",\n            \"\",\n            \"+212234\",\n            \"+21\",\n            \"02122333\",\n          ],\n        },\n        {\n          locale: \"ar-MA\",\n          valid: [\n            \"0522714782\",\n            \"0690851123\",\n            \"0708186135\",\n            \"+212522714782\",\n            \"+212690851123\",\n            \"+212708186135\",\n            \"00212522714782\",\n            \"00212690851123\",\n            \"00212708186135\",\n          ],\n          invalid: [\n            \"522714782\",\n            \"690851123\",\n            \"708186135\",\n            \"212522714782\",\n            \"212690851123\",\n            \"212708186135\",\n            \"0212522714782\",\n            \"0212690851123\",\n            \"0212708186135\",\n            \"\",\n            \"12345\",\n            \"0922714782\",\n            \"+212190851123\",\n            \"00212408186135\",\n          ],\n        },\n        {\n          locale: \"dz-BT\",\n          valid: [\n            \"+97517374354\",\n            \"+97517454971\",\n            \"77324646\",\n            \"016329712\",\n            \"97517265559\",\n          ],\n          invalid: [\"\", \"9898347255\", \"+96326626262\", \"963372\", \"0114152198\"],\n        },\n        {\n          locale: \"ar-OM\",\n          valid: [\n            \"+96891212121\",\n            \"+96871212121\",\n            \"0096899999999\",\n            \"93112211\",\n            \"99099009\",\n          ],\n          invalid: [\n            \"+96890212121\",\n            \"0096890999999\",\n            \"0090999999\",\n            \"+9689021212\",\n            \"\",\n            \"+212234\",\n            \"+21\",\n            \"02122333\",\n          ],\n        },\n        {\n          locale: \"ar-PS\",\n          valid: [\"+970563459876\", \"970592334218\", \"0566372345\", \"0598273583\"],\n          invalid: [\n            \"+9759029487\",\n            \"97059123456789\",\n            \"598372348\",\n            \"97058aaaafjd\",\n            \"\",\n            \"05609123484\",\n            \"+97059\",\n            \"+970\",\n            \"97056\",\n          ],\n        },\n        {\n          locale: \"ar-SY\",\n          valid: [\n            \"0944549710\",\n            \"+963944549710\",\n            \"956654379\",\n            \"0944549710\",\n            \"0962655597\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"+9639626626262\",\n            \"+963332210972\",\n            \"0114152198\",\n          ],\n        },\n        {\n          locale: \"ar-SA\",\n          valid: [\n            \"0556578654\",\n            \"+966556578654\",\n            \"966556578654\",\n            \"596578654\",\n            \"572655597\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"+9665626626262\",\n            \"+96633221097\",\n            \"0114152198\",\n          ],\n        },\n        {\n          locale: \"ar-SD\",\n          valid: [\"0128652312\", \"+249919425113\", \"249123212345\", \"0993212345\"],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"+249972662622\",\n            \"+24946266262\",\n            \"+24933221097\",\n            \"0614152198\",\n            \"096554\",\n          ],\n        },\n        {\n          locale: \"ar-TN\",\n          valid: [\"23456789\", \"+21623456789\", \"21623456789\"],\n          invalid: [\n            \"12345\",\n            \"75200123\",\n            \"+216512345678\",\n            \"13520459\",\n            \"85479520\",\n          ],\n        },\n        {\n          locale: \"bg-BG\",\n          valid: [\"+359897123456\", \"+359898888888\", \"0897123123\"],\n          invalid: [\n            \"\",\n            \"0898123\",\n            \"+359212555666\",\n            \"18001234567\",\n            \"12125559999\",\n          ],\n        },\n        {\n          locale: \"bn-BD\",\n          valid: [\n            \"+8801794626846\",\n            \"01399098893\",\n            \"8801671163269\",\n            \"01717112029\",\n            \"8801898765432\",\n            \"+8801312345678\",\n            \"01494676946\",\n          ],\n          invalid: [\n            \"\",\n            \"0174626346\",\n            \"017943563469\",\n            \"18001234567\",\n            \"0131234567\",\n          ],\n        },\n        {\n          locale: \"bs-BA\",\n          valid: [\n            \"060123456\",\n            \"061123456\",\n            \"062123456\",\n            \"063123456\",\n            \"0641234567\",\n            \"065123456\",\n            \"066123456\",\n            \"+38760123456\",\n            \"+38761123456\",\n            \"+38762123456\",\n            \"+38763123456\",\n            \"+387641234567\",\n            \"+38765123456\",\n            \"+38766123456\",\n            \"0038760123456\",\n            \"0038761123456\",\n            \"0038762123456\",\n            \"0038763123456\",\n            \"00387641234567\",\n            \"0038765123456\",\n            \"0038766123456\",\n          ],\n          invalid: [\n            \"0601234567\",\n            \"0611234567\",\n            \"06212345\",\n            \"06312345\",\n            \"064123456\",\n            \"0651234567\",\n            \"06612345\",\n            \"+3866123456\",\n            \"+3856123456\",\n            \"00038760123456\",\n            \"038761123456\",\n          ],\n        },\n        {\n          locale: \"cs-CZ\",\n          valid: [\n            \"+420 123 456 789\",\n            \"+420 123456789\",\n            \"+420123456789\",\n            \"123 456 789\",\n            \"123456789\",\n          ],\n          invalid: [\n            \"\",\n            \"+42012345678\",\n            \"+421 123 456 789\",\n            \"+420 023456789\",\n            \"+4201234567892\",\n          ],\n        },\n        {\n          locale: \"sk-SK\",\n          valid: [\n            \"+421 123 456 789\",\n            \"+421 123456789\",\n            \"+421123456789\",\n            \"123 456 789\",\n            \"123456789\",\n          ],\n          invalid: [\n            \"\",\n            \"+42112345678\",\n            \"+422 123 456 789\",\n            \"+421 023456789\",\n            \"+4211234567892\",\n          ],\n        },\n        {\n          locale: \"de-DE\",\n          valid: [\n            \"+4915123456789\",\n            \"015123456789\",\n            \"015123456789\",\n            \"015623456789\",\n            \"015623456789\",\n            \"01601234567\",\n            \"016012345678\",\n            \"01621234567\",\n            \"01631234567\",\n            \"01701234567\",\n            \"017612345678\",\n          ],\n          invalid: [\n            \"+4930405044550\",\n            \"34412345678\",\n            \"14412345678\",\n            \"16212345678\",\n            \"1761234567\",\n            \"16412345678\",\n            \"17012345678\",\n            \"+4912345678910\",\n            \"+49015123456789\",\n            \"015345678910\",\n            \"015412345678\",\n          ],\n        },\n        {\n          locale: \"de-AT\",\n          valid: [\n            \"+436761234567\",\n            \"06761234567\",\n            \"00436123456789\",\n            \"+436123456789\",\n            \"01999\",\n            \"+4372876\",\n            \"06434908989562345\",\n          ],\n          invalid: [\"167612345678\", \"1234\", \"064349089895623459\"],\n        },\n        {\n          locale: \"hu-HU\",\n          valid: [\"06301234567\", \"+36201234567\", \"06701234567\"],\n          invalid: [\"1234\", \"06211234567\", \"+3620123456\"],\n        },\n        {\n          locale: \"mz-MZ\",\n          valid: [\n            \"+258849229754\",\n            \"258849229754\",\n            \"849229754\",\n            \"829229754\",\n            \"839229754\",\n            \"869229754\",\n            \"859229754\",\n            \"869229754\",\n            \"879229754\",\n            \"+258829229754\",\n            \"+258839229754\",\n            \"+258869229754\",\n            \"+258859229754\",\n            \"+258869229754\",\n            \"+258879229754\",\n            \"258829229754\",\n            \"258839229754\",\n            \"258869229754\",\n            \"258859229754\",\n            \"258869229754\",\n            \"258879229754\",\n          ],\n          invalid: [\n            \"+248849229754\",\n            \"158849229754\",\n            \"249229754\",\n            \"819229754\",\n            \"899229754\",\n            \"889229754\",\n            \"89229754\",\n            \"8619229754\",\n            \"87922975411\",\n            \"257829229754\",\n            \"+255839229754\",\n            \"+2258869229754\",\n            \"+1258859229754\",\n            \"+2588692297541\",\n            \"+2588792519754\",\n            \"25882922975411\",\n          ],\n        },\n        {\n          locale: \"pt-BR\",\n          valid: [\n            \"+55 12 996551215\",\n            \"+55 15 97661234\",\n            \"+55 (12) 996551215\",\n            \"+55 (15) 97661234\",\n            \"55 (17) 96332-2155\",\n            \"55 (17) 6332-2155\",\n            \"55 15 976612345\",\n            \"55 15 75661234\",\n            \"+5512984567890\",\n            \"+551283456789\",\n            \"5512984567890\",\n            \"551283456789\",\n            \"015994569878\",\n            \"01593456987\",\n            \"022995678947\",\n            \"02299567894\",\n            \"(22)99567894\",\n            \"(22)9956-7894\",\n            \"(22) 99567894\",\n            \"(22) 9956-7894\",\n            \"(22)999567894\",\n            \"(22)99956-7894\",\n            \"(22) 999567894\",\n            \"(22) 99956-7894\",\n            \"(11) 94123-4567\",\n            \"(11) 91431-4567\",\n            \"+55 (11) 91431-4567\",\n            \"+55 11 91431-4567\",\n            \"+551191431-4567\",\n            \"5511914314567\",\n            \"5511912345678\",\n          ],\n          invalid: [\n            \"0819876543\",\n            \"+55 15 7566123\",\n            \"+017 123456789\",\n            \"5501599623874\",\n            \"+55012962308\",\n            \"+55 015 1234-3214\",\n            \"+55 11 90431-4567\",\n            \"+55 (11) 90431-4567\",\n            \"+551190431-4567\",\n            \"5511904314567\",\n            \"5511902345678\",\n            \"(11) 90431-4567\",\n          ],\n        },\n        {\n          locale: \"zh-CN\",\n          valid: [\n            \"13523333233\",\n            \"13838389438\",\n            \"14899230918\",\n            \"14999230918\",\n            \"15323456787\",\n            \"15052052020\",\n            \"16237108167\",\n            \"008616238234822\",\n            \"+8616238234822\",\n            \"16565600001\",\n            \"17269427292\",\n            \"17469427292\",\n            \"18199617480\",\n            \"19151751717\",\n            \"19651751717\",\n            \"+8613238234822\",\n            \"+8613487234567\",\n            \"+8617823492338\",\n            \"+8617823492338\",\n            \"+8616637108167\",\n            \"+8616637108167\",\n            \"+8616712341234\",\n            \"+8619912341234\",\n            \"+8619812341234\",\n            \"+8619712341234\",\n            \"+8619612341234\",\n            \"+8619512341234\",\n            \"+8619312341234\",\n            \"+8619212341234\",\n            \"+8619112341234\",\n            \"+8617269427292\",\n            \"008618812341234\",\n            \"008618812341234\",\n            \"008617269427292\",\n            // Reserve number segments in the future.\n            \"92138389438\",\n            \"+8692138389438\",\n            \"008692138389438\",\n            \"98199649964\",\n            \"+8698099649964\",\n            \"008698099649964\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"12038389438\",\n            \"12838389438\",\n            \"013838389438\",\n            \"+86-13838389438\",\n            \"+08613811211114\",\n            \"+008613811211114\",\n            \"08613811211114\",\n            \"0086-13811211114\",\n            \"0086-138-1121-1114\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"010-38238383\",\n          ],\n        },\n        {\n          locale: \"zh-TW\",\n          valid: [\n            \"0987123456\",\n            \"+886987123456\",\n            \"886987123456\",\n            \"+886-987123456\",\n            \"886-987123456\",\n          ],\n          invalid: [\"12345\", \"\", \"Vml2YW11cyBmZXJtZtesting123\", \"0-987123456\"],\n        },\n        {\n          locale: \"en-LS\",\n          valid: [\n            \"+26622123456\",\n            \"+26628123456\",\n            \"+26657123456\",\n            \"+26658123456\",\n            \"+26659123456\",\n            \"+26627123456\",\n            \"+26652123456\",\n          ],\n          invalid: [\n            \"+26612345678\",\n            \"\",\n            \"2664512-21\",\n            \"+2662212345678\",\n            \"someString\",\n          ],\n        },\n        {\n          locale: \"en-BM\",\n          valid: [\"+14417974653\", \"14413986653\", \"4415370973\", \"+14415005489\"],\n          invalid: [\n            \"85763287\",\n            \"+14412020436\",\n            \"+14412236546\",\n            \"+14418245567\",\n            \"+14416546789\",\n            \"44087635627\",\n            \"+4418970973\",\n            \"\",\n            \"+1441897465\",\n            \"+1441897465 additional invalid string part\",\n          ],\n        },\n        {\n          locale: \"en-BS\",\n          valid: [\n            \"+12421231234\",\n            \"2421231234\",\n            \"+1-2421231234\",\n            \"+1-242-123-1234\",\n            \"(242)-123-1234\",\n            \"+1 (242)-123-1234\",\n            \"242 123-1234\",\n            \"(242) 123 1234\",\n          ],\n          invalid: [\n            \"85763287\",\n            \"+1 242 12 12 12 12\",\n            \"+1424123123\",\n            \"+14418245567\",\n            \"+14416546789\",\n            \"not a number\",\n            \"\",\n          ],\n        },\n        {\n          locale: \"en-ZA\",\n          valid: [\"0821231234\", \"+27821231234\", \"27821231234\"],\n          invalid: [\n            \"082123\",\n            \"08212312345\",\n            \"21821231234\",\n            \"+21821231234\",\n            \"+0821231234\",\n          ],\n        },\n        {\n          locale: \"en-AU\",\n          valid: [\"61404111222\", \"+61411222333\", \"0417123456\"],\n          invalid: [\n            \"082123\",\n            \"08212312345\",\n            \"21821231234\",\n            \"+21821231234\",\n            \"+0821231234\",\n            \"04123456789\",\n          ],\n        },\n        {\n          locale: \"es-BO\",\n          valid: [\n            \"+59175553635\",\n            \"+59162223685\",\n            \"+59179783890\",\n            \"+59160081890\",\n            \"79783890\",\n            \"60081890\",\n          ],\n          invalid: [\n            \"082123\",\n            \"08212312345\",\n            \"21821231234\",\n            \"+21821231234\",\n            \"+59199783890\",\n          ],\n        },\n        {\n          locale: \"en-GG\",\n          valid: [\n            \"+441481123456\",\n            \"+441481789123\",\n            \"441481123456\",\n            \"441481789123\",\n          ],\n          invalid: [\"999\", \"+441481123456789\", \"+447123456789\"],\n        },\n        {\n          locale: \"en-GH\",\n          valid: [\n            \"0202345671\",\n            \"0502345671\",\n            \"0242345671\",\n            \"0542345671\",\n            \"0532345671\",\n            \"0272345671\",\n            \"0572345671\",\n            \"0262345671\",\n            \"0562345671\",\n            \"0232345671\",\n            \"0282345671\",\n            \"+233202345671\",\n            \"+233502345671\",\n            \"+233242345671\",\n            \"+233542345671\",\n            \"+233532345671\",\n            \"+233272345671\",\n            \"+233572345671\",\n            \"+233262345671\",\n            \"+233562345671\",\n            \"+233232345671\",\n            \"+233282345671\",\n            \"+233592349493\",\n            \"0550298219\",\n          ],\n          invalid: [\"082123\", \"232345671\", \"0292345671\", \"+233292345671\"],\n        },\n        {\n          locale: \"en-GY\",\n          valid: [\"+5926121234\", \"06121234\", \"06726381\", \"+5926726381\"],\n          invalid: [\n            \"5926121234\",\n            \"6121234\",\n            \"+592 6121234\",\n            \"05926121234\",\n            \"+592-6121234\",\n          ],\n        },\n        {\n          locale: \"en-HK\",\n          valid: [\n            \"91234567\",\n            \"9123-4567\",\n            \"61234567\",\n            \"51234567\",\n            \"+85291234567\",\n            \"+852-91234567\",\n            \"+852-9123-4567\",\n            \"+852 9123 4567\",\n            \"9123 4567\",\n            \"852-91234567\",\n          ],\n          invalid: [\"999\", \"+852-912345678\", \"123456789\", \"+852-1234-56789\"],\n        },\n        {\n          locale: \"en-MO\",\n          valid: [\n            \"61234567\",\n            \"+85361234567\",\n            \"+853-61234567\",\n            \"+853-6123-4567\",\n            \"+853 6123 4567\",\n            \"6123 4567\",\n            \"853-61234567\",\n          ],\n          invalid: [\n            \"999\",\n            \"12345678\",\n            \"612345678\",\n            \"+853-12345678\",\n            \"+853-22345678\",\n            \"+853-82345678\",\n            \"+853-612345678\",\n            \"+853-1234-5678\",\n            \"+853 1234 5678\",\n            \"+853-6123-45678\",\n          ],\n        },\n        {\n          locale: \"en-IE\",\n          valid: [\n            \"+353871234567\",\n            \"353831234567\",\n            \"353851234567\",\n            \"353861234567\",\n            \"353871234567\",\n            \"353881234567\",\n            \"353891234567\",\n            \"0871234567\",\n            \"0851234567\",\n          ],\n          invalid: [\n            \"999\",\n            \"+353341234567\",\n            \"+33589484858\",\n            \"353841234567\",\n            \"353811234567\",\n          ],\n        },\n        {\n          locale: \"en-JM\",\n          valid: [\"+8761021234\", \"8761211234\", \"8763511274\", \"+8764511274\"],\n          invalid: [\n            \"999\",\n            \"+876102123422\",\n            \"+8861021234\",\n            \"8761021212213\",\n            \"876102123\",\n          ],\n        },\n        {\n          locale: \"en-KE\",\n          valid: [\n            \"+254728590432\",\n            \"+254733875610\",\n            \"254728590234\",\n            \"0733346543\",\n            \"0700459022\",\n            \"0110934567\",\n            \"+254110456794\",\n            \"254198452389\",\n          ],\n          invalid: [\"999\", \"+25489032\", \"123456789\", \"+254800723845\"],\n        },\n        {\n          locale: \"fr-CF\",\n          valid: [\n            \"+23670850000\",\n            \"+23675038756\",\n            \"+23677859002\",\n            \"+23672854202\",\n            \"+23621854052\",\n            \"+23622854072\",\n            \"72234650\",\n            \"70045902\",\n            \"77934567\",\n            \"21456794\",\n            \"22452389\",\n          ],\n          invalid: [\n            \"+23689032\",\n            \"123456789\",\n            \"+236723845987\",\n            \"022452389\",\n            \"+236772345678\",\n            \"+236700456794\",\n          ],\n        },\n        {\n          locale: \"en-KI\",\n          valid: [\"+68673140000\", \"68673059999\", \"+68663000000\", \"68663019999\"],\n          invalid: [\n            \"+68653000000\",\n            \"68664019999\",\n            \"+68619019999\",\n            \"686123456789\",\n            \"+686733445\",\n          ],\n        },\n        {\n          locale: \"en-MT\",\n          valid: [\"+35699000000\", \"+35679000000\", \"99000000\"],\n          invalid: [\"356\", \"+35699000\", \"+35610000000\"],\n        },\n        {\n          locale: \"en-PH\",\n          valid: [\n            \"+639275149120\",\n            \"+639275142327\",\n            \"+639003002023\",\n            \"09275149116\",\n            \"09194877624\",\n          ],\n          invalid: [\n            \"12112-13-345\",\n            \"12345678901\",\n            \"sx23YW11cyBmZxxXJt123123\",\n            \"010-38238383\",\n            \"966684123123-2590\",\n          ],\n        },\n        {\n          locale: \"en-UG\",\n          valid: [\n            \"+256728590432\",\n            \"+256733875610\",\n            \"256728590234\",\n            \"0773346543\",\n            \"0700459022\",\n          ],\n          invalid: [\n            \"999\",\n            \"+254728590432\",\n            \"+25489032\",\n            \"123456789\",\n            \"+254800723845\",\n          ],\n        },\n        {\n          locale: \"en-RW\",\n          valid: [\n            \"+250728590432\",\n            \"+250733875610\",\n            \"250738590234\",\n            \"0753346543\",\n            \"0780459022\",\n          ],\n          invalid: [\n            \"999\",\n            \"+254728590432\",\n            \"+25089032\",\n            \"123456789\",\n            \"+250800723845\",\n          ],\n        },\n        {\n          locale: \"en-TZ\",\n          valid: [\n            \"+255728590432\",\n            \"+255733875610\",\n            \"255628590234\",\n            \"0673346543\",\n            \"0600459022\",\n          ],\n          invalid: [\n            \"999\",\n            \"+254728590432\",\n            \"+25589032\",\n            \"123456789\",\n            \"+255800723845\",\n          ],\n        },\n        {\n          locale: \"en-MW\",\n          valid: [\n            \"+265994563785\",\n            \"+265111785436\",\n            \"+265318596857\",\n            \"0320008744\",\n            \"01256258\",\n            \"0882541896\",\n            \"+265984563214\",\n          ],\n          invalid: [\n            \"58563\",\n            \"+2658256258\",\n            \"0896328741\",\n            \"0708574896\",\n            \"+26570857489635\",\n          ],\n        },\n        {\n          locale: \"es-PE\",\n          valid: [\n            \"+51912232764\",\n            \"+51923464567\",\n            \"+51968267382\",\n            \"+51908792973\",\n            \"974980472\",\n            \"908792973\",\n            \"+51974980472\",\n          ],\n          invalid: [\n            \"999\",\n            \"+51812232764\",\n            \"+5181223276499\",\n            \"+25589032\",\n            \"123456789\",\n          ],\n        },\n        {\n          locale: \"fr-FR\",\n          valid: [\n            \"0612457898\",\n            \"+33612457898\",\n            \"33612457898\",\n            \"0712457898\",\n            \"+33712457898\",\n            \"33712457898\",\n          ],\n          invalid: [\n            \"061245789\",\n            \"06124578980\",\n            \"0112457898\",\n            \"0212457898\",\n            \"0312457898\",\n            \"0412457898\",\n            \"0512457898\",\n            \"0812457898\",\n            \"0912457898\",\n            \"+34612457898\",\n            \"+336124578980\",\n            \"+3361245789\",\n          ],\n        },\n        {\n          locale: \"fr-BF\",\n          valid: [\n            \"+22661245789\",\n            \"+22665903092\",\n            \"+22672457898\",\n            \"+22673572346\",\n            \"061245789\",\n            \"071245783\",\n          ],\n          invalid: [\n            \"0612457892\",\n            \"06124578980\",\n            \"0112457898\",\n            \"0212457898\",\n            \"0312457898\",\n            \"0412457898\",\n            \"0512457898\",\n            \"0812457898\",\n            \"0912457898\",\n            \"+22762457898\",\n            \"+226724578980\",\n            \"+22634523\",\n          ],\n        },\n        {\n          locale: \"fr-BJ\",\n          valid: [\n            \"+22920215789\",\n            \"+22920293092\",\n            \"+22921307898\",\n            \"+22921736346\",\n            \"+22922416346\",\n            \"+22923836346\",\n          ],\n          invalid: [\n            \"0612457892\",\n            \"01122921737346\",\n            \"+22762457898\",\n            \"+226724578980\",\n            \"+22634523\",\n          ],\n        },\n        {\n          locale: \"fr-CA\",\n          valid: [\"19876543210\", \"8005552222\", \"+15673628910\"],\n          invalid: [\n            \"564785\",\n            \"0123456789\",\n            \"1437439210\",\n            \"+10345672645\",\n            \"11435213543\",\n          ],\n        },\n        {\n          locale: \"fr-CD\",\n          valid: [\n            \"+243818590432\",\n            \"+243893875610\",\n            \"243978590234\",\n            \"0813346543\",\n            \"0820459022\",\n            \"+243902590221\",\n          ],\n          invalid: [\n            \"243\",\n            \"+254818590432\",\n            \"+24389032\",\n            \"123456789\",\n            \"+243700723845\",\n          ],\n        },\n        {\n          locale: \"fr-GF\",\n          valid: [\n            \"0612457898\",\n            \"+594612457898\",\n            \"594612457898\",\n            \"0712457898\",\n            \"+594712457898\",\n            \"594712457898\",\n          ],\n          invalid: [\n            \"061245789\",\n            \"06124578980\",\n            \"0112457898\",\n            \"0212457898\",\n            \"0312457898\",\n            \"0412457898\",\n            \"0512457898\",\n            \"0812457898\",\n            \"0912457898\",\n            \"+54612457898\",\n            \"+5946124578980\",\n            \"+59461245789\",\n          ],\n        },\n        {\n          locale: \"fr-GP\",\n          valid: [\n            \"0612457898\",\n            \"+590612457898\",\n            \"590612457898\",\n            \"0712457898\",\n            \"+590712457898\",\n            \"590712457898\",\n          ],\n          invalid: [\n            \"061245789\",\n            \"06124578980\",\n            \"0112457898\",\n            \"0212457898\",\n            \"0312457898\",\n            \"0412457898\",\n            \"0512457898\",\n            \"0812457898\",\n            \"0912457898\",\n            \"+594612457898\",\n            \"+5906124578980\",\n            \"+59061245789\",\n          ],\n        },\n        {\n          locale: \"fr-MQ\",\n          valid: [\n            \"0612457898\",\n            \"+596612457898\",\n            \"596612457898\",\n            \"0712457898\",\n            \"+596712457898\",\n            \"596712457898\",\n          ],\n          invalid: [\n            \"061245789\",\n            \"06124578980\",\n            \"0112457898\",\n            \"0212457898\",\n            \"0312457898\",\n            \"0412457898\",\n            \"0512457898\",\n            \"0812457898\",\n            \"0912457898\",\n            \"+594612457898\",\n            \"+5966124578980\",\n            \"+59661245789\",\n          ],\n        },\n        {\n          locale: \"fr-RE\",\n          valid: [\n            \"0612457898\",\n            \"+262612457898\",\n            \"262612457898\",\n            \"0712457898\",\n            \"+262712457898\",\n            \"262712457898\",\n          ],\n          invalid: [\n            \"061245789\",\n            \"06124578980\",\n            \"0112457898\",\n            \"0212457898\",\n            \"0312457898\",\n            \"0412457898\",\n            \"0512457898\",\n            \"0812457898\",\n            \"0912457898\",\n            \"+264612457898\",\n            \"+2626124578980\",\n            \"+26261245789\",\n          ],\n        },\n        {\n          locale: \"fr-PF\",\n          valid: [\n            \"87123456\",\n            \"88123456\",\n            \"89123456\",\n            \"+68987123456\",\n            \"+68988123456\",\n            \"+68989123456\",\n            \"68987123456\",\n            \"68988123456\",\n            \"68989123456\",\n          ],\n          invalid: [\n            \"7123456\",\n            \"86123456\",\n            \"87 12 34 56\",\n            \"definitely not a number\",\n            \"01+68988123456\",\n            \"6898912345\",\n          ],\n        },\n        {\n          locale: \"fr-WF\",\n          valid: [\n            \"+681408500\",\n            \"+681499387\",\n            \"+681728590\",\n            \"+681808542\",\n            \"+681828540\",\n            \"+681832014\",\n            \"408500\",\n            \"499387\",\n            \"728590\",\n            \"808542\",\n            \"828540\",\n            \"832014\",\n          ],\n          invalid: [\n            \"+68189032\",\n            \"123456789\",\n            \"+681723845987\",\n            \"022452389\",\n            \"+681772345678\",\n            \"+681700456794\",\n          ],\n        },\n        {\n          locale: \"ka-GE\",\n          valid: [\n            \"+995500011111\",\n            \"+995515352134\",\n            \"+995798526662\",\n            \"798526662\",\n            \"500011119\",\n            \"798526662\",\n            \"+995799766525\",\n          ],\n          invalid: [\n            \"+99550001111\",\n            \"+9957997665250\",\n            \"+9959997665251\",\n            \"+995780011111\",\n            \"20000000000\",\n            \"68129485729\",\n            \"6589394827\",\n            \"298RI89572\",\n          ],\n        },\n        {\n          locale: \"el-GR\",\n          valid: [\n            \"+306944848966\",\n            \"306944848966\",\n            \"06904567890\",\n            \"6944848966\",\n            \"6904567890\",\n            \"6914567890\",\n            \"6934567890\",\n            \"6944567890\",\n            \"6954567890\",\n            \"6974567890\",\n            \"6984567890\",\n            \"6994567890\",\n            \"6854567890\",\n            \"6864567890\",\n            \"6874567890\",\n            \"6884567890\",\n            \"6894567890\",\n          ],\n          invalid: [\n            \"2102323234\",\n            \"+302646041461\",\n            \"120000000\",\n            \"20000000000\",\n            \"68129485729\",\n            \"6589394827\",\n            \"298RI89572\",\n            \"6924567890\",\n            \"6964567890\",\n            \"6844567890\",\n            \"690456789\",\n            \"00690456789\",\n            \"not a number\",\n          ],\n        },\n        {\n          locale: \"el-CY\",\n          valid: [\n            \"96546247\",\n            \"96978927\",\n            \"+35799837145\",\n            \"+35799646792\",\n            \"96056927\",\n            \"99629593\",\n            \"99849980\",\n            \"3599701619\",\n            \"+3599148725\",\n            \"96537247\",\n            \"3596676533\",\n            \"+35795123455\",\n            \"+35797012204\",\n            \"35799123456\",\n            \"+35794123456\",\n            \"+35796123456\",\n          ],\n          invalid: [\n            \"\",\n            \"somechars\",\n            \"9697892\",\n            \"998499803\",\n            \"33799837145\",\n            \"+3799646792\",\n            \"93056927\",\n          ],\n        },\n        {\n          locale: \"en-GB\",\n          valid: [\"447789345856\", \"+447861235675\", \"07888814488\"],\n          invalid: [\n            \"67699567\",\n            \"0773894868\",\n            \"077389f8688\",\n            \"+07888814488\",\n            \"0152456999\",\n            \"442073456754\",\n            \"+443003434751\",\n            \"05073456754\",\n            \"08001123123\",\n            \"07043425232\",\n            \"01273884231\",\n            \"03332654034\",\n          ],\n        },\n        {\n          locale: \"en-SG\",\n          valid: [\n            \"32891278\",\n            \"87654321\",\n            \"98765432\",\n            \"+6587654321\",\n            \"+6598765432\",\n            \"+6565241234\",\n          ],\n          invalid: [\n            \"332891231\",\n            \"987654321\",\n            \"876543219\",\n            \"8765432\",\n            \"9876543\",\n            \"12345678\",\n            \"+98765432\",\n            \"+9876543212\",\n            \"+15673628910\",\n            \"19876543210\",\n            \"8005552222\",\n          ],\n        },\n        {\n          locale: \"en-US\",\n          valid: [\n            \"19876543210\",\n            \"8005552222\",\n            \"+15673628910\",\n            \"+1(567)3628910\",\n            \"+1(567)362-8910\",\n            \"+1(567) 362-8910\",\n            \"1(567)362-8910\",\n            \"1(567)362 8910\",\n            \"223-456-7890\",\n          ],\n          invalid: [\n            \"564785\",\n            \"0123456789\",\n            \"1437439210\",\n            \"+10345672645\",\n            \"11435213543\",\n            \"1(067)362-8910\",\n            \"1(167)362-8910\",\n            \"+2(267)362-8910\",\n            \"+3365520145\",\n          ],\n        },\n        {\n          locale: \"en-CA\",\n          valid: [\"19876543210\", \"8005552222\", \"+15673628910\"],\n          invalid: [\n            \"564785\",\n            \"0123456789\",\n            \"1437439210\",\n            \"+10345672645\",\n            \"11435213543\",\n          ],\n        },\n        {\n          locale: \"en-ZM\",\n          valid: [\n            \"0956684590\",\n            \"0966684590\",\n            \"0976684590\",\n            \"+260956684590\",\n            \"+260966684590\",\n            \"+260976684590\",\n            \"260976684590\",\n            \"+260779493521\",\n            \"+260760010936\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"010-38238383\",\n            \"966684590\",\n            \"760010936\",\n          ],\n        },\n        {\n          locale: [\"en-ZW\"],\n          valid: [\n            \"+263561890123\",\n            \"+263715558041\",\n            \"+263775551112\",\n            \"+263775551695\",\n            \"+263715556633\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+2631234567890\",\n            \"+2641234567\",\n            \"+263981234\",\n            \"4736338855\",\n            \"66338855\",\n          ],\n        },\n        {\n          locale: [\"en-NA\"],\n          valid: [\n            \"+26466189012\",\n            \"+26461555804\",\n            \"+26461434221\",\n            \"+26487555169\",\n            \"+26481555663\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+2641234567890\",\n            \"+2641234567\",\n            \"+2648143422\",\n            \"+264981234\",\n            \"4736338855\",\n            \"66338855\",\n          ],\n        },\n        {\n          locale: \"ru-RU\",\n          valid: [\"+79676338855\", \"79676338855\", \"89676338855\", \"9676338855\"],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"010-38238383\",\n            \"+9676338855\",\n            \"19676338855\",\n            \"6676338855\",\n            \"+99676338855\",\n          ],\n        },\n        {\n          locale: \"si-LK\",\n          valid: [\n            \"+94766661206\",\n            \"94713114340\",\n            \"0786642116\",\n            \"078 7642116\",\n            \"078-7642116\",\n            \"0749994567\",\n          ],\n          invalid: [\n            \"9912349956789\",\n            \"12345\",\n            \"1678123456\",\n            \"0731234567\",\n            \"0797878674\",\n          ],\n        },\n        {\n          locale: \"sr-RS\",\n          valid: [\n            \"0640133338\",\n            \"063333133\",\n            \"0668888878\",\n            \"+381645678912\",\n            \"+381611314000\",\n            \"0655885010\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"010-38238383\",\n            \"+9676338855\",\n            \"19676338855\",\n            \"6676338855\",\n            \"+99676338855\",\n          ],\n        },\n        {\n          locale: \"en-NZ\",\n          valid: [\"+6427987035\", \"642240512347\", \"0293981646\", \"029968425\"],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+642956696123566\",\n            \"+02119620856\",\n            \"+9676338855\",\n            \"19676338855\",\n            \"6676338855\",\n            \"+99676338855\",\n          ],\n        },\n        {\n          locale: \"en-MU\",\n          valid: [\"+23012341234\", \"12341234\", \"012341234\"],\n          invalid: [\n            \"41234\",\n            \"\",\n            \"+230\",\n            \"+2301\",\n            \"+23012\",\n            \"+230123\",\n            \"+2301234\",\n            \"+23012341\",\n            \"+230123412\",\n            \"+2301234123\",\n            \"+230123412341\",\n            \"+2301234123412\",\n            \"+23012341234123\",\n          ],\n        },\n        {\n          locale: [\"nb-NO\", \"nn-NO\"], // for multiple locales\n          valid: [\n            \"+4796338855\",\n            \"+4746338855\",\n            \"4796338855\",\n            \"4746338855\",\n            \"46338855\",\n            \"96338855\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+4676338855\",\n            \"19676338855\",\n            \"+4726338855\",\n            \"4736338855\",\n            \"66338855\",\n          ],\n        },\n        {\n          locale: [\"ne-NP\"],\n          valid: [\n            \"+9779817385479\",\n            \"+9779717385478\",\n            \"+9779862002615\",\n            \"+9779853660020\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+97796123456789\",\n            \"+9771234567\",\n            \"+977981234\",\n            \"4736338855\",\n            \"66338855\",\n          ],\n        },\n        {\n          locale: \"vi-VN\",\n          valid: [\n            \"0336012403\",\n            \"+84586012403\",\n            \"84981577798\",\n            \"0708001240\",\n            \"84813601243\",\n            \"0523803765\",\n            \"0863803732\",\n            \"0883805866\",\n            \"0892405867\",\n            \"+84888696413\",\n            \"0878123456\",\n            \"84781234567\",\n            \"0553803765\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"010-38238383\",\n            \"260976684590\",\n            \"01678912345\",\n            \"+841698765432\",\n            \"841626543219\",\n            \"0533803765\",\n            \"08712345678\",\n            \"+0321234567\",\n          ],\n        },\n        {\n          locale: \"es-AR\",\n          valid: [\n            \"5491143214321\",\n            \"+5491143214321\",\n            \"+5492414321432\",\n            \"5498418432143\",\n          ],\n          invalid: [\n            \"1143214321\",\n            \"91143214321\",\n            \"+91143214321\",\n            \"549841004321432\",\n            \"549 11 43214321\",\n            \"549111543214321\",\n            \"5714003425432\",\n            \"549114a214321\",\n            \"54 9 11 4321-4321\",\n          ],\n        },\n        {\n          locale: \"es-CO\",\n          valid: [\n            \"+573003321235\",\n            \"573003321235\",\n            \"3003321235\",\n            \"3213321235\",\n            \"3103321235\",\n            \"3243321235\",\n            \"573011140876\",\n          ],\n          invalid: [\n            \"1234\",\n            \"+57443875615\",\n            \"57309875615\",\n            \"57109834567\",\n            \"5792434567\",\n            \"5702345689\",\n            \"5714003425432\",\n            \"5703013347567\",\n            \"069834567\",\n            \"969834567\",\n            \"579871235\",\n            \"574321235\",\n            \"5784321235\",\n            \"5784321235\",\n            \"9821235\",\n            \"0698345\",\n            \"3321235\",\n          ],\n        },\n        {\n          locale: \"es-CL\",\n          valid: [\"+56733875615\", \"56928590234\", \"0928590294\", \"0208590294\"],\n          invalid: [\n            \"1234\",\n            \"+5633875615\",\n            \"563875615\",\n            \"56109834567\",\n            \"56069834567\",\n          ],\n        },\n        {\n          locale: \"es-EC\",\n          valid: [\n            \"+593987654321\",\n            \"593987654321\",\n            \"0987654321\",\n            \"027332615\",\n            \"+59323456789\",\n          ],\n          invalid: [\n            \"03321321\",\n            \"+593387561\",\n            \"59312345677\",\n            \"02344635\",\n            \"593123456789\",\n            \"081234567\",\n            \"+593912345678\",\n            \"+593902345678\",\n            \"+593287654321\",\n            \"593287654321\",\n          ],\n        },\n        {\n          locale: \"es-CR\",\n          valid: [\n            \"+50688888888\",\n            \"+50665408090\",\n            \"+50640895069\",\n            \"25789563\",\n            \"85789563\",\n          ],\n          invalid: [\n            \"+5081\",\n            \"+5067777777\",\n            \"+50188888888\",\n            \"+50e987643254\",\n            \"+506e4t4\",\n            \"-50688888888\",\n            \"50688888888\",\n            \"12345678\",\n            \"98765432\",\n            \"01234567\",\n          ],\n        },\n        {\n          locale: \"es-CU\",\n          valid: [\"+5351234567\", \"005353216547\", \"51234567\", \"53214567\"],\n          invalid: [\n            \"1234\",\n            \"+5341234567\",\n            \"0041234567\",\n            \"41234567\",\n            \"11234567\",\n            \"21234567\",\n            \"31234567\",\n            \"60303456\",\n            \"71234567\",\n            \"81234567\",\n            \"91234567\",\n            \"+5343216547\",\n            \"+5332165498\",\n            \"+53121234567\",\n            \"\",\n            \"abc\",\n            \"+535123457\",\n            \"56043029304\",\n          ],\n        },\n        {\n          locale: \"es-DO\",\n          valid: [\n            \"+18096622563\",\n            \"+18295614488\",\n            \"+18495259567\",\n            \"8492283478\",\n            \"8092324576\",\n            \"8292387713\",\n          ],\n          invalid: [\n            \"+18091\",\n            \"+1849777777\",\n            \"-18296643245\",\n            \"+18086643245\",\n            \"+18396643245\",\n            \"8196643245\",\n            \"+38492283478\",\n            \"6492283478\",\n            \"8192283478\",\n          ],\n        },\n        {\n          locale: \"es-HN\",\n          valid: [\n            \"+50495551876\",\n            \"+50488908787\",\n            \"+50493456789\",\n            \"+50489234567\",\n            \"+50488987896\",\n            \"+50497567389\",\n            \"+50427367389\",\n            \"+50422357389\",\n            \"+50431257389\",\n            \"+50430157389\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+34683456543\",\n            \"65478932\",\n            \"+50298787654\",\n            \"+504989874\",\n          ],\n        },\n        {\n          locale: \"es-ES\",\n          valid: [\n            \"+34654789321\",\n            \"654789321\",\n            \"+34714789321\",\n            \"714789321\",\n            \"+34744789321\",\n            \"744789321\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+3465478932\",\n            \"65478932\",\n            \"+346547893210\",\n            \"6547893210\",\n            \"+3470478932\",\n            \"7047893210\",\n            \"+34854789321\",\n            \"7547893219\",\n          ],\n        },\n        {\n          locale: \"es-MX\",\n          valid: [\n            \"+52019654789321\",\n            \"+52199654789321\",\n            \"+5201965478932\",\n            \"+5219654789321\",\n            \"52019654789321\",\n            \"52199654789321\",\n            \"5201965478932\",\n            \"5219654789321\",\n            \"87654789321\",\n            \"8654789321\",\n            \"0187654789321\",\n            \"18654789321\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+3465478932\",\n            \"65478932\",\n            \"+346547893210\",\n            \"+34704789321\",\n            \"704789321\",\n            \"+34754789321\",\n          ],\n        },\n        {\n          locale: \"es-NI\",\n          valid: [\n            \"+5051234567\",\n            \"+50512345678\",\n            \"5051234567\",\n            \"50512345678\",\n            \"+50555555555\",\n          ],\n          invalid: [\n            \"1234\",\n            \"\",\n            \"1234567\",\n            \"12345678\",\n            \"+12345678\",\n            \"+505123456789\",\n            \"+50612345678\",\n            \"+50712345678\",\n            \"-50512345678\",\n          ],\n        },\n        {\n          locale: \"es-PA\",\n          valid: [\"+5076784565\", \"+5074321557\", \"5073331112\", \"+50723431212\"],\n          invalid: [\n            \"+50755555\",\n            \"+207123456\",\n            \"2001236542\",\n            \"+507987643254\",\n            \"+507jjjghtf\",\n          ],\n        },\n        {\n          locale: \"es-PY\",\n          valid: [\n            \"+595991372649\",\n            \"+595992847352\",\n            \"+595993847593\",\n            \"+595994857473\",\n            \"+595995348532\",\n            \"+595996435231\",\n            \"+595981847362\",\n            \"+595982435452\",\n            \"+595983948502\",\n            \"+595984342351\",\n            \"+595985403481\",\n            \"+595986384012\",\n            \"+595971435231\",\n            \"+595972103924\",\n            \"+595973438542\",\n            \"+595974425864\",\n            \"+595975425843\",\n            \"+595976342546\",\n            \"+595961435234\",\n            \"+595963425043\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"65478932\",\n            \"+59599384712\",\n            \"+5959938471234\",\n            \"+595547893218\",\n            \"+591993546843\",\n          ],\n        },\n        {\n          locale: \"es-SV\",\n          valid: [\n            \"62136634\",\n            \"50361366631\",\n            \"+50361366634\",\n            \"+50361367217\",\n            \"+50361367460\",\n            \"+50371367632\",\n            \"+50371367767\",\n            \"+50371368314\",\n          ],\n          invalid: [\n            \"+5032136663\",\n            \"21346663\",\n            \"+50321366663\",\n            \"12345\",\n            \"El salvador\",\n            \"this should fail\",\n            \"+5032222\",\n            \"+503 1111 1111\",\n            \"00 +503 1234 5678\",\n          ],\n        },\n        {\n          locale: \"es-UY\",\n          valid: [\"+59899123456\", \"099123456\", \"+59894654321\", \"091111111\"],\n          invalid: [\n            \"54321\",\n            \"montevideo\",\n            \"\",\n            \"+598099123456\",\n            \"090883338\",\n            \"099 999 999\",\n          ],\n        },\n        {\n          locale: \"es-VE\",\n          valid: [\"+582125457765\", \"+582125458053\", \"+584125458053\"],\n          invalid: [\"+585129934395\", \"+58212993439\", \"\"],\n        },\n        {\n          locale: \"et-EE\",\n          valid: [\n            \"+372 512 34 567\",\n            \"372 512 34 567\",\n            \"+37251234567\",\n            \"51234567\",\n            \"81234567\",\n            \"+372842345678\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"NotANumber\",\n            \"+333 51234567\",\n            \"61234567\",\n            \"+51234567\",\n            \"+372 539 57 4\",\n            \"+372 900 1234\",\n            \"12345678\",\n          ],\n        },\n        {\n          locale: \"pl-PL\",\n          valid: [\n            \"+48512689767\",\n            \"+48 56 376 87 47\",\n            \"56 566 78 46\",\n            \"657562855\",\n            \"+48657562855\",\n            \"+48 887472765\",\n            \"+48 56 6572724\",\n            \"+48 67 621 5461\",\n            \"48 67 621 5461\",\n            \"+48 45 621 5461\",\n          ],\n          invalid: [\n            \"+48  67 621 5461\",\n            \"+55657562855\",\n            \"3454535\",\n            \"teststring\",\n            \"\",\n            \"1800-88-8687\",\n            \"+6019-5830837\",\n            \"357562855\",\n            \"+48 44 621 5461\",\n          ],\n        },\n        {\n          locale: \"fa-IR\",\n          valid: [\n            \"+989123456789\",\n            \"989223456789\",\n            \"09323456789\",\n            \"09021456789\",\n            \"+98-990-345-6789\",\n            \"+98 938 345 6789\",\n            \"0938 345 6789\",\n          ],\n          invalid: [\n            \"\",\n            \"+989623456789\",\n            \"+981123456789\",\n            \"01234567890\",\n            \"09423456789\",\n            \"09823456789\",\n            \"9123456789\",\n            \"091234567890\",\n            \"0912345678\",\n            \"+98 912 3456 6789\",\n            \"0912 345 678\",\n          ],\n        },\n        {\n          locale: \"fi-FI\",\n          valid: [\n            \"+358505557171\",\n            \"0455571\",\n            \"0505557171\",\n            \"358505557171\",\n            \"04412345\",\n            \"0457 123 45 67\",\n            \"+358457 123 45 67\",\n            \"+358 50 555 7171\",\n            \"0501234\",\n            \"+358501234\",\n            \"050 1234\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"045557\",\n            \"045555717112312332423423421\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"010-38238383\",\n            \"+3-585-0555-7171\",\n            \"+9676338855\",\n            \"19676338855\",\n            \"6676338855\",\n            \"+99676338855\",\n            \"044123\",\n            \"019123456789012345678901\",\n          ],\n        },\n        {\n          locale: \"fj-FJ\",\n          valid: [\n            \"+6799898679\",\n            \"6793788679\",\n            \"+679 989 8679\",\n            \"679 989 8679\",\n            \"679 3456799\",\n            \"679908 8909\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"04555792\",\n            \"902w99900030900000000099\",\n            \"8uiuiuhhyy&GUU88d\",\n            \"010-38238383\",\n            \"19676338855\",\n            \"679 9 89 8679\",\n            \"6793 45679\",\n          ],\n        },\n        {\n          locale: \"ms-MY\",\n          valid: [\n            \"+60128228789\",\n            \"+60195830837\",\n            \"+6019-5830837\",\n            \"+6019-5830837\",\n            \"+6010-4357675\",\n            \"+60172012370\",\n            \"0128737867\",\n            \"0172012370\",\n            \"01468987837\",\n            \"01112347345\",\n            \"016-2838768\",\n            \"016 2838768\",\n          ],\n          invalid: [\n            \"12345\",\n            \"601238788657\",\n            \"088387675\",\n            \"16-2838768\",\n            \"032551433\",\n            \"6088-387888\",\n            \"088-261987\",\n            \"1800-88-8687\",\n            \"088-320000\",\n            \"+01112353576\",\n            \"+0111419752\",\n          ],\n        },\n        {\n          locale: \"fr-CM\",\n          valid: [\n            \"+237677936141\",\n            \"237623456789\",\n            \"+237698124842\",\n            \"237693029202\",\n          ],\n          invalid: [\n            \"NotANumber\",\n            \"+(703)-572-2920\",\n            \"+237 623 45 67 890\",\n            \"+2379981247429\",\n          ],\n        },\n        {\n          locale: \"ko-KR\",\n          valid: [\n            \"+82-010-1234-5678\",\n            \"+82-10-1234-5678\",\n            \"82-010-1234-5678\",\n            \"82-10-1234-5678\",\n            \"+82 10 1234 5678\",\n            \"010-123-5678\",\n            \"10-1234-5678\",\n            \"+82 10 1234 5678\",\n            \"011 1234 5678\",\n            \"+820112345678\",\n            \"01012345678\",\n            \"+82 016 1234 5678\",\n            \"82 19 1234 5678\",\n            \"+82 010 12345678\",\n          ],\n          invalid: [\n            \"abcdefghi\",\n            \"+82 10 1234 567\",\n            \"+82 10o 1234 1234\",\n            \"+82 101 1234 5678\",\n            \"+82 10 12 5678\",\n            \"+011 7766 1234\",\n            \"011_7766_1234\",\n            \"+820 11 7766 1234\",\n          ],\n        },\n        {\n          locale: \"ky-KG\",\n          valid: [\n            \"+996553033300\",\n            \"+996 222 123456\",\n            \"+996 500 987654\",\n            \"+996 555 111222\",\n            \"+996 700 333444\",\n            \"+996 770 555666\",\n            \"+996 880 777888\",\n            \"+996 990 999000\",\n            \"+996 995 555666\",\n            \"+996 996 555666\",\n            \"+996 997 555666\",\n            \"+996 998 555666\",\n          ],\n          invalid: [\n            \"+996 201 123456\",\n            \"+996 312 123456\",\n            \"+996 3960 12345\",\n            \"+996 3961 12345\",\n            \"+996 3962 12345\",\n            \"+996 3963 12345\",\n            \"+996 3964 12345\",\n            \"+996 3965 12345\",\n            \"+996 3966 12345\",\n            \"+996 3967 12345\",\n            \"+996 3968 12345\",\n            \"+996 511 123456\",\n            \"+996 522 123456\",\n            \"+996 561 123456\",\n            \"+996 571 123456\",\n            \"+996 624 123456\",\n            \"+996 623 123456\",\n            \"+996 622 123456\",\n            \"+996 609 123456\",\n            \"+996 100 12345\",\n            \"+996 100 1234567\",\n            \"996 100 123456\",\n            \"0 100 123456\",\n            \"0 100 123abc\",\n          ],\n        },\n        {\n          locale: \"ja-JP\",\n          valid: [\n            \"09012345678\",\n            \"08012345678\",\n            \"07012345678\",\n            \"06012345678\",\n            \"090 1234 5678\",\n            \"+8190-1234-5678\",\n            \"+81 (0)90-1234-5678\",\n            \"+819012345678\",\n            \"+81-(0)90-1234-5678\",\n            \"+81 90 1234 5678\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"045555717112312332423423421\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+3-585-0555-7171\",\n            \"0 1234 5689\",\n            \"16 1234 5689\",\n            \"03_1234_5689\",\n            \"0312345678\",\n            \"0721234567\",\n            \"06 1234 5678\",\n            \"072 123 4567\",\n            \"0729 12 3456\",\n            \"07296 1 2345\",\n            \"072961 2345\",\n            \"03-1234-5678\",\n            \"+81312345678\",\n            \"+816-1234-5678\",\n            \"+81 090 1234 5678\",\n            \"+8109012345678\",\n            \"+81-090-1234-5678\",\n            \"90 1234 5678\",\n          ],\n        },\n        {\n          locale: \"ir-IR\",\n          valid: [\n            \"09023818688\",\n            \"09123809999\",\n            \"+989023818688\",\n            \"+989103923523\",\n          ],\n          invalid: [\n            \"19023818688\",\n            \"323254\",\n            \"+903232323257\",\n            \"++3567868\",\n            \"0902381888832\",\n          ],\n        },\n        {\n          locale: \"it-IT\",\n          valid: [\n            \"370 3175423\",\n            \"333202925\",\n            \"+39 310 7688449\",\n            \"+39 3339847632\",\n          ],\n          invalid: [\"011 7387545\", \"12345\", \"+45 345 6782395\"],\n        },\n        {\n          locale: \"fr-BE\",\n          valid: [\n            \"0470123456\",\n            \"+32470123456\",\n            \"32470123456\",\n            \"0421234567\",\n            \"+32421234567\",\n            \"32421234567\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+3212345\",\n            \"3212345\",\n            \"04701234567\",\n            \"+3204701234567\",\n            \"3204701234567\",\n            \"0212345678\",\n            \"+320212345678\",\n            \"320212345678\",\n            \"021234567\",\n            \"+3221234567\",\n            \"3221234567\",\n          ],\n        },\n        {\n          locale: \"nl-BE\",\n          valid: [\n            \"0470123456\",\n            \"+32470123456\",\n            \"32470123456\",\n            \"0421234567\",\n            \"+32421234567\",\n            \"32421234567\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+3212345\",\n            \"3212345\",\n            \"04701234567\",\n            \"+3204701234567\",\n            \"3204701234567\",\n            \"0212345678\",\n            \"+320212345678\",\n            \"320212345678\",\n            \"021234567\",\n            \"+3221234567\",\n            \"3221234567\",\n          ],\n        },\n        {\n          locale: \"nl-NL\",\n          valid: [\n            \"0670123456\",\n            \"0612345678\",\n            \"31612345678\",\n            \"31670123456\",\n            \"+31612345678\",\n            \"+31670123456\",\n            \"+31(0)612345678\",\n            \"0031612345678\",\n            \"0031(0)612345678\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+3112345\",\n            \"3112345\",\n            \"06701234567\",\n            \"012345678\",\n            \"+3104701234567\",\n            \"3104701234567\",\n            \"0212345678\",\n            \"021234567\",\n            \"+3121234567\",\n            \"3121234567\",\n            \"+310212345678\",\n            \"310212345678\",\n          ],\n        },\n        {\n          locale: \"nl-AW\",\n          valid: [\n            \"2975612345\",\n            \"2976412345\",\n            \"+2975612345\",\n            \"+2975912345\",\n            \"+2976412345\",\n            \"+2977312345\",\n            \"+2977412345\",\n            \"+2979912345\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+2972345\",\n            \"2972345\",\n            \"06701234567\",\n            \"012345678\",\n            \"+2974701234567\",\n            \"2974701234567\",\n            \"0297345678\",\n            \"029734567\",\n            \"+2971234567\",\n            \"2971234567\",\n            \"+297212345678\",\n            \"297212345678\",\n            \"number\",\n          ],\n        },\n        {\n          locale: \"ro-MD\",\n          valid: [\n            \"+37360375781\",\n            \"+37361945673\",\n            \"+37362387563\",\n            \"+37368447788\",\n            \"+37369000101\",\n            \"+37367568910\",\n            \"+37376758294\",\n            \"+37378457892\",\n            \"+37379067436\",\n            \"37362387563\",\n            \"37368447788\",\n            \"37369000101\",\n            \"37367568910\",\n          ],\n          invalid: [\n            \"\",\n            \"+37363373381\",\n            \"+37364310581\",\n            \"+37365578199\",\n            \"+37371088636\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"123456\",\n            \"740123456\",\n            \"+40640123456\",\n            \"+40210123456\",\n          ],\n        },\n        {\n          locale: \"ro-RO\",\n          valid: [\n            \"+40740123456\",\n            \"+40 740123456\",\n            \"+40740 123 456\",\n            \"+40740.123.456\",\n            \"+40740-123-456\",\n            \"40740123456\",\n            \"40 740123456\",\n            \"40740 123 456\",\n            \"40740.123.456\",\n            \"40740-123-456\",\n            \"0740123456\",\n            \"0740/123456\",\n            \"0740 123 456\",\n            \"0740.123.456\",\n            \"0740-123-456\",\n          ],\n          invalid: [\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"123456\",\n            \"740123456\",\n            \"+40640123456\",\n            \"+40210123456\",\n            \"+0765351689\",\n            \"+0711419752\",\n          ],\n        },\n        {\n          locale: \"id-ID\",\n          valid: [\n            \"0811 778 998\",\n            \"0811 7785 9983\",\n            \"0812 7784 9984\",\n            \"0813 7782 9982\",\n            \"0821 1234 1234\",\n            \"0822 1234 1234\",\n            \"0823 1234 1234\",\n            \"0852 1234 6764\",\n            \"0853 1234 6764\",\n            \"0851 1234 6764\",\n            \"0814 7782 9982\",\n            \"0815 7782 9982\",\n            \"0816 7782 9982\",\n            \"0855 7782 9982\",\n            \"0856 7782 9982\",\n            \"0857 7782 9982\",\n            \"0858 7782 9982\",\n            \"0817 7785 9983\",\n            \"0818 7784 9984\",\n            \"0819 7782 9982\",\n            \"0859 1234 1234\",\n            \"0877 1234 1234\",\n            \"0878 1234 1234\",\n            \"0895 7785 9983\",\n            \"0896 7784 9984\",\n            \"0897 7782 9982\",\n            \"0898 1234 1234\",\n            \"0899 1234 1234\",\n            \"0881 7785 9983\",\n            \"0882 7784 9984\",\n            \"0883 7782 9982\",\n            \"0884 1234 1234\",\n            \"0886 1234 1234\",\n            \"0887 1234 1234\",\n            \"0888 7785 9983\",\n            \"0889 7784 9984\",\n            \"0828 7784 9984\",\n            \"0838 7784 9984\",\n            \"0831 7784 9984\",\n            \"0832 7784 9984\",\n            \"0833 7784 9984\",\n            \"089931236181900\",\n            \"62811 778 998\",\n            \"62811778998\",\n            \"628993123618190\",\n            \"62898 740123456\",\n            \"62899 7401 2346\",\n            \"+62811 778 998\",\n            \"+62811778998\",\n            \"+62812 9650 3508\",\n            \"08197231819\",\n            \"085361008008\",\n            \"+62811787391\",\n          ],\n          invalid: [\n            \"0899312361819001\",\n            \"0217123456\",\n            \"622178878890\",\n            \"6221 740123456\",\n            \"0341 8123456\",\n            \"0778 89800910\",\n            \"0741 123456\",\n            \"+6221740123456\",\n            \"+65740 123 456\",\n            \"\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"123456\",\n            \"740123456\",\n            \"+65640123456\",\n            \"+64210123456\",\n          ],\n        },\n        {\n          locale: \"lt-LT\",\n          valid: [\"+37051234567\", \"851234567\"],\n          invalid: [\n            \"+65740 123 456\",\n            \"\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"123456\",\n            \"740123456\",\n            \"+65640123456\",\n            \"+64210123456\",\n          ],\n        },\n        {\n          locale: \"uk-UA\",\n          valid: [\n            \"+380501234567\",\n            \"+380631234567\",\n            \"+380661234567\",\n            \"+380671234567\",\n            \"+380681234567\",\n            \"+380731234567\",\n            \"+380751234567\",\n            \"+380771234567\",\n            \"+380911234567\",\n            \"+380921234567\",\n            \"+380931234567\",\n            \"+380941234567\",\n            \"+380951234567\",\n            \"+380961234567\",\n            \"+380971234567\",\n            \"+380981234567\",\n            \"+380991234567\",\n            \"380501234567\",\n            \"380631234567\",\n            \"380661234567\",\n            \"380671234567\",\n            \"380681234567\",\n            \"380731234567\",\n            \"380751234567\",\n            \"380771234567\",\n            \"380911234567\",\n            \"380921234567\",\n            \"380931234567\",\n            \"380941234567\",\n            \"380951234567\",\n            \"380961234567\",\n            \"380971234567\",\n            \"380981234567\",\n            \"380991234567\",\n            \"0501234567\",\n            \"0631234567\",\n            \"0661234567\",\n            \"0671234567\",\n            \"0681234567\",\n            \"0731234567\",\n            \"0751234567\",\n            \"0771234567\",\n            \"0911234567\",\n            \"0921234567\",\n            \"0931234567\",\n            \"0941234567\",\n            \"0951234567\",\n            \"0961234567\",\n            \"0971234567\",\n            \"0981234567\",\n            \"0991234567\",\n          ],\n          invalid: [\n            \"+30982345679\",\n            \"+380321234567\",\n            \"+380441234567\",\n            \"982345679\",\n            \"80982345679\",\n            \"+380 98 234 5679\",\n            \"+380-98-234-5679\",\n            \"+380 (98) 234-56-79\",\n            \"\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"123456\",\n            \"740123456\",\n          ],\n        },\n        {\n          locale: \"uz-UZ\",\n          valid: [\n            \"+998664835244\",\n            \"998664835244\",\n            \"664835244\",\n            \"+998957124555\",\n            \"998957124555\",\n            \"957124555\",\n          ],\n          invalid: [\n            \"+998644835244\",\n            \"998644835244\",\n            \"644835244\",\n            \"+99664835244\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"123456789\",\n            \"870123456\",\n            \"\",\n            \"+998\",\n            \"998\",\n          ],\n        },\n        {\n          locale: \"da-DK\",\n          valid: [\n            \"12345678\",\n            \"12 34 56 78\",\n            \"45 12345678\",\n            \"4512345678\",\n            \"45 12 34 56 78\",\n            \"+45 12 34 56 78\",\n          ],\n          invalid: [\n            \"\",\n            \"+45010203\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"123456\",\n            \"12 34 56\",\n            \"123 123 12\",\n          ],\n        },\n        {\n          locale: \"sv-SE\",\n          valid: [\n            \"+46701234567\",\n            \"46701234567\",\n            \"0721234567\",\n            \"073-1234567\",\n            \"0761-234567\",\n            \"079-123 45 67\",\n          ],\n          invalid: [\n            \"12345\",\n            \"+4670123456\",\n            \"+46301234567\",\n            \"+0731234567\",\n            \"0731234 56\",\n            \"+7312345678\",\n            \"\",\n          ],\n        },\n        {\n          locale: \"fo-FO\",\n          valid: [\n            \"123456\",\n            \"12 34 56\",\n            \"298 123456\",\n            \"298123456\",\n            \"298 12 34 56\",\n            \"+298 12 34 56\",\n          ],\n          invalid: [\n            \"\",\n            \"+4501020304\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"12345678\",\n            \"12 34 56 78\",\n          ],\n        },\n        {\n          locale: \"kl-GL\",\n          valid: [\n            \"123456\",\n            \"12 34 56\",\n            \"299 123456\",\n            \"299123456\",\n            \"299 12 34 56\",\n            \"+299 12 34 56\",\n          ],\n          invalid: [\n            \"\",\n            \"+4501020304\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"12345678\",\n            \"12 34 56 78\",\n          ],\n        },\n        {\n          locale: \"kk-KZ\",\n          valid: [\"+77254716212\", \"77254716212\", \"87254716212\", \"7254716212\"],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"010-38238383\",\n            \"+9676338855\",\n            \"19676338855\",\n            \"6676338855\",\n            \"+99676338855\",\n          ],\n        },\n        {\n          locale: \"be-BY\",\n          valid: [\n            \"+375241234567\",\n            \"+375251234567\",\n            \"+375291234567\",\n            \"+375331234567\",\n            \"+375441234567\",\n            \"375331234567\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"ASDFGJKLmZXJtZtesting123\",\n            \"010-38238383\",\n            \"+9676338855\",\n            \"19676338855\",\n            \"6676338855\",\n            \"+99676338855\",\n          ],\n        },\n        {\n          locale: \"th-TH\",\n          valid: [\"0912345678\", \"+66912345678\", \"66912345678\"],\n          invalid: [\"99123456789\", \"12345\", \"67812345623\", \"081234567891\"],\n        },\n        {\n          locale: \"tk-TM\",\n          valid: [\n            \"+99312495154\",\n            \"99312130136\",\n            \"+99312918407\",\n            \"99312183399\",\n            \"812391717\",\n          ],\n          invalid: [\"12345\", \"+99412495154\", \"99412495154\", \"998900066506\"],\n        },\n        {\n          locale: \"en-SL\",\n          valid: [\"+23274560591\", \"23274560591\", \"074560591\"],\n          invalid: [\n            \"0745605912\",\n            \"12345\",\n            \"232745605917\",\n            \"0797878674\",\n            \"23274560591 \",\n          ],\n        },\n        {\n          locale: \"en-BW\",\n          valid: [\n            \"+26772868545\",\n            \"+26776368790\",\n            \"+26774560512\",\n            \"26774560591\",\n            \"26778560512\",\n            \"74560512\",\n            \"76710284\",\n          ],\n          invalid: [\n            \"0799375902\",\n            \"12345\",\n            \"+2670745605448\",\n            \"2670745605482\",\n            \"+26779685451\",\n            \"+26770685451\",\n            \"267074560\",\n            \"2670ab5608\",\n            \"+267074560\",\n            \"70560512\",\n            \"79710284\",\n          ],\n        },\n        {\n          locale: \"az-AZ\",\n          valid: [\n            \"+994707007070\",\n            \"0707007070\",\n            \"+994502111111\",\n            \"0505436743\",\n            \"0554328772\",\n            \"0104328772\",\n            \"0993301022\",\n            \"+994776007139\",\n            \"+994106007139\",\n          ],\n          invalid: [\n            \"wrong-number\",\n            \"\",\n            \"994707007070\",\n            \"++9945005050\",\n            \"556007070\",\n            \"1234566\",\n            \"+994778008080a\",\n          ],\n        },\n        {\n          locale: \"de-LU\",\n          valid: [\"601123456\", \"+352601123456\"],\n          invalid: [\n            \"NaN\",\n            \"791234\",\n            \"+352791234\",\n            \"26791234\",\n            \"+35226791234\",\n            \"+112039812\",\n            \"+352703123456\",\n            \"1234\",\n          ],\n        },\n        {\n          locale: \"it-SM\",\n          valid: [\n            \"612345\",\n            \"05496123456\",\n            \"+37861234567\",\n            \"+390549612345678\",\n            \"+37805496123456789\",\n          ],\n          invalid: [\n            \"61234567890\",\n            \"6123\",\n            \"1234567\",\n            \"+49123456\",\n            \"NotANumber\",\n          ],\n        },\n        {\n          locale: \"so-SO\",\n          valid: [\n            \"+252601234567\",\n            \"+252650101010\",\n            \"+252794567120\",\n            \"252650647388\",\n            \"252751234567\",\n            \"0601234567\",\n            \"0609876543\",\n          ],\n          invalid: [\n            \"\",\n            \"not a number\",\n            \"+2526012345678\",\n            \"25260123456\",\n            \"+252705555555\",\n            \"+0601234567\",\n            \"06945454545\",\n          ],\n        },\n        {\n          locale: \"sq-AL\",\n          valid: [\n            \"0621234567\",\n            \"0661234567\",\n            \"0671234567\",\n            \"0681234567\",\n            \"0691234567\",\n            \"+355621234567\",\n            \"+355651234567\",\n            \"+355661234567\",\n            \"+355671234567\",\n            \"+355681234567\",\n            \"+355691234567\",\n          ],\n          invalid: [\n            \"67123456\",\n            \"06712345\",\n            \"067123456\",\n            \"06712345678\",\n            \"0571234567\",\n            \"+3556712345\",\n            \"+35565123456\",\n            \"+35157123456\",\n            \"NotANumber\",\n          ],\n        },\n        {\n          locale: \"ca-AD\",\n          valid: [\"+376312345\", \"312345\"],\n          invalid: [\"31234\", \"31234567\", \"512345\", \"NotANumber\"],\n        },\n        {\n          locale: \"pt-AO\",\n          valid: [\"+244911123432\", \"911123432\", \"244911123432\"],\n          invalid: [\n            \"+2449111234321\",\n            \"+244811123432\",\n            \"31234\",\n            \"31234567\",\n            \"512345\",\n            \"NotANumber\",\n          ],\n        },\n        {\n          locale: \"lv-LV\",\n          valid: [\"+37121234567\", \"37121234567\"],\n          invalid: [\n            \"+37201234567\",\n            \"+3754321\",\n            \"3712123456\",\n            \"+371212345678\",\n            \"NotANumber\",\n          ],\n        },\n        {\n          locale: \"mg-MG\",\n          valid: [\n            \"+261204269174\",\n            \"261204269174\",\n            \"0204269174\",\n            \"0209269174\",\n            \"0374269174\",\n            \"4269174\",\n          ],\n          invalid: [\n            \"0261204269174\",\n            \"+261 20 4 269174\",\n            \"+261 20 4269174\",\n            \"020 4269174\",\n            \"204269174\",\n            \"0404269174\",\n            \"NotANumber\",\n          ],\n        },\n        {\n          locale: \"mn-MN\",\n          valid: [\n            \"+97699112222\",\n            \"97696112222\",\n            \"97695112222\",\n            \"01197691112222\",\n            \"0097688112222\",\n            \"+97677112222\",\n            \"+97694112222\",\n            \"+97681112222\",\n          ],\n          invalid: [\n            \"+97888112222\",\n            \"+97977112222\",\n            \"+97094112222\",\n            \"+97281112222\",\n            \"02297681112222\",\n          ],\n        },\n        {\n          locale: \"my-MM\",\n          valid: [\n            \"+959750202595\",\n            \"09750202595\",\n            \"9750202595\",\n            \"+959260000966\",\n            \"09256000323\",\n            \"09276000323\",\n            \"09426000323\",\n            \"09456000323\",\n            \"09761234567\",\n            \"09791234567\",\n            \"09961234567\",\n            \"09771234567\",\n            \"09660000234\",\n          ],\n          invalid: [\n            \"59750202595\",\n            \"+9597502025\",\n            \"08943234524\",\n            \"09950000966\",\n            \"959240000966\",\n            \"09246000323\",\n            \"09466000323\",\n            \"09951234567\",\n            \"09801234567\",\n            \"09650000234\",\n          ],\n        },\n        {\n          locale: \"en-PG\",\n          valid: [\n            \"+67570123456\",\n            \"67570123456\",\n            \"+67571123456\",\n            \"+67572123456\",\n            \"+67573123456\",\n            \"+67574123456\",\n            \"+67575123456\",\n            \"+67576123456\",\n            \"+67577123456\",\n            \"+67578123456\",\n            \"+67579123456\",\n            \"+67581123456\",\n            \"+67588123456\",\n          ],\n          invalid: [\n            \"\",\n            \"not a number\",\n            \"12345\",\n            \"+675123456789\",\n            \"+67580123456\",\n            \"+67569123456\",\n            \"+67582123456\",\n            \"+6757012345\",\n          ],\n        },\n        {\n          locale: \"en-AG\",\n          valid: [\n            \"12687151234\",\n            \"+12687151234\",\n            \"+12684641234\",\n            \"12684641234\",\n            \"+12687211234\",\n            \"+12687302468\",\n            \"+12687642456\",\n            \"+12687763333\",\n          ],\n          invalid: [\n            \"2687151234\",\n            \"+12687773333\",\n            \"+126846412333\",\n            \"+12684641\",\n            \"+12687123456\",\n            \"+12687633456\",\n          ],\n        },\n        {\n          locale: \"en-AI\",\n          valid: [\n            \"+12642351234\",\n            \"12642351234\",\n            \"+12644612222\",\n            \"+12645366326\",\n            \"+12645376326\",\n            \"+12647246326\",\n            \"+12647726326\",\n          ],\n          invalid: [\n            \"\",\n            \"not a number\",\n            \"+22642351234\",\n            \"+12902351234\",\n            \"+12642331234\",\n            \"+1264235\",\n            \"22642353456\",\n            \"+12352643456\",\n          ],\n        },\n        {\n          locale: \"en-KN\",\n          valid: [\n            \"+18694699040\",\n            \"18694699040\",\n            \"+18697652917\",\n            \"18697652917\",\n            \"18694658472\",\n            \"+18696622969\",\n            \"+18694882224\",\n          ],\n          invalid: [\n            \"\",\n            \"+18694238545\",\n            \"+1 8694882224\",\n            \"8694658472\",\n            \"+186946990\",\n            \"+1869469904\",\n            \"1869469904\",\n          ],\n        },\n        {\n          locale: \"en-PK\",\n          valid: [\n            \"+923412877421\",\n            \"+923001234567\",\n            \"00923001234567\",\n            \"923001234567\",\n            \"03001234567\",\n          ],\n          invalid: [\n            \"+3001234567\",\n            \"+933001234567\",\n            \"+924001234567\",\n            \"+92300123456720\",\n            \"030012345672\",\n            \"30012345673\",\n            \"0030012345673\",\n            \"3001234567\",\n          ],\n        },\n        {\n          locale: [\"tg-TJ\"],\n          valid: [\n            \"+992553388551\",\n            \"+992553322551\",\n            \"992553388551\",\n            \"992553322551\",\n          ],\n          invalid: [\n            \"12345\",\n            \"\",\n            \"Vml2YW11cyBmZXJtZtesting123\",\n            \"+995563388559\",\n            \"+9955633559\",\n            \"19676338855\",\n            \"+992263388505\",\n            \"9923633885\",\n            \"99255363885\",\n            \"66338855\",\n          ],\n        },\n        {\n          locale: \"dv-MV\",\n          valid: [\n            \"+9609112345\",\n            \"+9609958973\",\n            \"+9607258963\",\n            \"+9607958463\",\n            \"9609112345\",\n            \"9609958973\",\n            \"9607212963\",\n            \"9607986963\",\n            \"9112345\",\n            \"9958973\",\n            \"7258963\",\n            \"7958963\",\n          ],\n          invalid: [\n            \"+96059234567\",\n            \"+96045789\",\n            \"7812463784\",\n            \"NotANumber\",\n            \"+9607112345\",\n            \"+9609012345\",\n            \"+609012345\",\n            \"+96071123456\",\n            \"3412345\",\n            \"9603412345\",\n          ],\n        },\n        {\n          locale: \"ar-YE\",\n          valid: [\"737198225\", \"733111355\", \"+967700990270\"],\n          invalid: [\n            \"+5032136663\",\n            \"21346663\",\n            \"+50321366663\",\n            \"12345\",\n            \"Yemen\",\n            \"this should fail\",\n            \"+5032222\",\n            \"+503 1111 1111\",\n            \"00 +503 1234 5678\",\n          ],\n        },\n        {\n          locale: \"ar-EH\",\n          valid: [\n            \"+212-5288-12312\",\n            \"+212-5288 12312\",\n            \"+212 5288 12312\",\n            \"212528912312\",\n            \"+212528912312\",\n            \"+212528812312\",\n          ],\n          invalid: [\n            \"212528812312123\",\n            \"+212-5290-12312\",\n            \"++212528812312\",\n            \"12345\",\n            \"Wester Sahara\",\n            \"this should fail\",\n            \"212  5288---12312\",\n            \"+503 1111 1111\",\n            \"00 +503 1234 5678\",\n          ],\n        },\n        {\n          locale: \"fa-AF\",\n          valid: [\"0511231231\", \"+93511231231\", \"+93281234567\"],\n          invalid: [\n            \"212528812312123\",\n            \"+212-5290-12312\",\n            \"++212528812312\",\n            \"12345\",\n            \"Afghanistan\",\n            \"this should fail\",\n            \"212  5288---12312\",\n            \"+503 1111 1111\",\n            \"00 +503 1234 5678\",\n          ],\n        },\n        {\n          locale: \"en-SS\",\n          valid: [\n            \"+211928530422\",\n            \"+211913384561\",\n            \"+211972879174\",\n            \"+211952379334\",\n            \"0923346543\",\n            \"0950459022\",\n            \"0970934567\",\n            \"211979841238\",\n            \"211929843238\",\n            \"211959840238\",\n          ],\n          invalid: [\n            \"911\",\n            \"+211999\",\n            \"123456789909\",\n            \"South Sudan\",\n            \"21195 840 238\",\n            \"+211981234567\",\n            \"+211931234567\",\n            \"+211901234567\",\n            \"+211991234567\",\n          ],\n        },\n        {\n          locale: \"es-GT\",\n          valid: [\n            \"+50221234567\",\n            \"+50277654321\",\n            \"50226753421\",\n            \"50272332468\",\n            \"50278984455\",\n            \"+50273472492\",\n            \"71234567\",\n            \"21132398\",\n          ],\n          invalid: [\n            \"44\",\n            \"+5022712345678\",\n            \"1234567899\",\n            \"502712345678\",\n            \"This should fail\",\n            \"5021931234567\",\n            \"+50281234567\",\n          ],\n        },\n        {\n          locale: \"mk-MK\",\n          valid: [\n            \"+38923234567\",\n            \"38931234567\",\n            \"022123456\",\n            \"22234567\",\n            \"71234567\",\n            \"31234567\",\n            \"+38923091500\",\n            \"80091234\",\n            \"81123456\",\n            \"54123456\",\n          ],\n          invalid: [\n            \"38912345678\",\n            \"+389123456789\",\n            \"21234567\",\n            \"123456789\",\n            \"+3891234567\",\n            \"700012345\",\n            \"510123456\",\n            \"This should fail\",\n            \"+389123456\",\n            \"389123456\",\n            \"80912345\",\n          ],\n        },\n      ];\n\n      let allValid = [];\n\n      fixtures.forEach((fixture) => {\n        // to be used later on for validating 'any' locale\n        if (fixture.valid) allValid = allValid.concat(fixture.valid);\n\n        if (Array.isArray(fixture.locale)) {\n          test({\n            validator: \"isMobilePhone\",\n            valid: fixture.valid,\n            invalid: fixture.invalid,\n            args: [fixture.locale],\n          });\n        } else {\n          test({\n            validator: \"isMobilePhone\",\n            valid: fixture.valid,\n            invalid: fixture.invalid,\n            args: [fixture.locale],\n          });\n        }\n      });\n\n      test({\n        validator: \"isMobilePhone\",\n        valid: allValid.slice(0, 20),\n        invalid: [\n          \"\",\n          \"asdf\",\n          \"1\",\n          \"ASDFGJKLmZXJtZtesting123\",\n          \"Vml2YW11cyBmZXJtZtesting123\",\n        ],\n        args: [\"any\"],\n      });\n\n      // strict mode\n      test({\n        validator: \"isMobilePhone\",\n        valid: [\"+254728530234\", \"+299 12 34 56\", \"+94766660206\"],\n        invalid: [\n          \"254728530234\",\n          \"0728530234\",\n          \"+728530234\",\n          \"766667206\",\n          \"0766670206\",\n        ],\n        args: [\"any\", { strictMode: true }],\n      });\n\n      // falsey locale defaults to 'any'\n      test({\n        validator: \"isMobilePhone\",\n        valid: allValid.slice(0, 20),\n        invalid: [\n          \"\",\n          \"asdf\",\n          \"1\",\n          \"ASDFGJKLmZXJtZtesting123\",\n          \"Vml2YW11cyBmZXJtZtesting123\",\n        ],\n        args: [],\n      });\n    });\n\n    // de-CH, fr-CH, it-CH\n    test({\n      validator: \"isMobilePhone\",\n      valid: [\n        \"+41751112233\",\n        \"+41761112233\",\n        \"+41771112233\",\n        \"+41781112233\",\n        \"+41791112233\",\n        \"+411122112211\",\n      ],\n      invalid: [\"+41041112233\"],\n      args: [],\n    });\n\n    it(\"should error on invalid locale\", () => {\n      test({\n        validator: \"isMobilePhone\",\n        args: [{ locale: [\"is-NOT\"] }],\n        error: [\"+123456789\", \"012345\"],\n      });\n    });\n\n    it(\"should validate currency\", () => {\n      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)\n      test({\n        validator: \"isCurrency\",\n        valid: [\n          \"-$10,123.45\",\n          \"$10,123.45\",\n          \"$10123.45\",\n          \"10,123.45\",\n          \"10123.45\",\n          \"10,123\",\n          \"1,123,456\",\n          \"1123456\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"$0.10\",\n          \"-$0.01\",\n          \"-$.99\",\n          \"$100,234,567.89\",\n          \"$10,123\",\n          \"10,123\",\n          \"-10123\",\n        ],\n        invalid: [\n          \"1.234\",\n          \"$1.1\",\n          \"$ 32.50\",\n          \"500$\",\n          \".0001\",\n          \"$.001\",\n          \"$0.001\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"123,4\",\n          \",123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"- $\",\n        ],\n      });\n\n      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            allow_decimal: false,\n          },\n        ],\n        valid: [\n          \"-$10,123\",\n          \"$10,123\",\n          \"$10123\",\n          \"10,123\",\n          \"10123\",\n          \"10,123\",\n          \"1,123,456\",\n          \"1123456\",\n          \"1\",\n          \"0\",\n          \"$0\",\n          \"-$0\",\n          \"$100,234,567\",\n          \"$10,123\",\n          \"10,123\",\n          \"-10123\",\n        ],\n        invalid: [\n          \"-$10,123.45\",\n          \"$10,123.45\",\n          \"$10123.45\",\n          \"10,123.45\",\n          \"10123.45\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"$0.10\",\n          \"-$0.01\",\n          \"-$.99\",\n          \"$100,234,567.89\",\n          \"1.234\",\n          \"$1.1\",\n          \"$ 32.50\",\n          \".0001\",\n          \"$.001\",\n          \"$0.001\",\n          \"12,34.56\",\n          \"123,4\",\n          \",123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"- $\",\n        ],\n      });\n\n      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            require_decimal: true,\n          },\n        ],\n        valid: [\n          \"-$10,123.45\",\n          \"$10,123.45\",\n          \"$10123.45\",\n          \"10,123.45\",\n          \"10123.45\",\n          \"10,123.00\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"$0.10\",\n          \"-$0.01\",\n          \"-$.99\",\n          \"$100,234,567.89\",\n        ],\n        invalid: [\n          \"$10,123\",\n          \"10,123\",\n          \"-10123\",\n          \"1,123,456\",\n          \"1123456\",\n          \"1.234\",\n          \"$1.1\",\n          \"$ 32.50\",\n          \"500$\",\n          \".0001\",\n          \"$.001\",\n          \"$0.001\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"123,4\",\n          \",123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"- $\",\n        ],\n      });\n\n      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            digits_after_decimal: [1, 3],\n          },\n        ],\n        valid: [\n          \"-$10,123.4\",\n          \"$10,123.454\",\n          \"$10123.452\",\n          \"10,123.453\",\n          \"10123.450\",\n          \"10,123\",\n          \"1,123,456\",\n          \"1123456\",\n          \"1.3\",\n          \".030\",\n          \"0.100\",\n          \"$0.1\",\n          \"-$0.0\",\n          \"-$.9\",\n          \"$100,234,567.893\",\n          \"$10,123\",\n          \"10,123.123\",\n          \"-10123.1\",\n        ],\n        invalid: [\n          \"1.23\",\n          \"$1.13322\",\n          \"$ 32.50\",\n          \"500$\",\n          \".0001\",\n          \"$.01\",\n          \"$0.01\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"123,4\",\n          \",123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"- $\",\n        ],\n      });\n\n      // -$##,###.## with $ required (en-US, en-CA, en-AU, en-NZ, en-HK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            require_symbol: true,\n          },\n        ],\n        valid: [\n          \"-$10,123.45\",\n          \"$10,123.45\",\n          \"$10123.45\",\n          \"$10,123.45\",\n          \"$10,123\",\n          \"$1,123,456\",\n          \"$1123456\",\n          \"$1.39\",\n          \"$.03\",\n          \"$0.10\",\n          \"$0.10\",\n          \"-$0.01\",\n          \"-$.99\",\n          \"$100,234,567.89\",\n          \"$10,123\",\n          \"-$10123\",\n        ],\n        invalid: [\n          \"1.234\",\n          \"$1.234\",\n          \"1.1\",\n          \"$1.1\",\n          \"$ 32.50\",\n          \" 32.50\",\n          \"500\",\n          \"10,123,456\",\n          \".0001\",\n          \"$.001\",\n          \"$0.001\",\n          \"1,234.56\",\n          \"123456,123,123456\",\n          \"$123456,123,123456\",\n          \"123.4\",\n          \"$123.4\",\n          \",123\",\n          \"$,123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \"$.\",\n          \",\",\n          \"$,\",\n          \"00\",\n          \"$00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"$ \",\n          \"- $\",\n        ],\n      });\n\n      // ¥-##,###.## (zh-CN)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"¥\",\n            negative_sign_before_digits: true,\n          },\n        ],\n        valid: [\n          \"123,456.78\",\n          \"-123,456.78\",\n          \"¥6,954,231\",\n          \"¥-6,954,231\",\n          \"¥10.03\",\n          \"¥-10.03\",\n          \"10.03\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"¥-10567.01\",\n          \"¥0.01\",\n          \"¥1,234,567.89\",\n          \"¥10,123\",\n          \"¥-10,123\",\n          \"¥-10,123.45\",\n          \"10,123\",\n          \"10123\",\n          \"¥-100\",\n        ],\n        invalid: [\n          \"1.234\",\n          \"¥1.1\",\n          \"5,00\",\n          \".0001\",\n          \"¥.001\",\n          \"¥0.001\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"123 456\",\n          \",123\",\n          \"¥-,123\",\n          \"\",\n          \" \",\n          \"¥\",\n          \"¥-\",\n          \"¥-,.\",\n          \"-\",\n          \"- ¥\",\n          \"-¥\",\n        ],\n      });\n\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            negative_sign_after_digits: true,\n          },\n        ],\n        valid: [\n          \"$10,123.45-\",\n          \"$10,123.45\",\n          \"$10123.45\",\n          \"10,123.45\",\n          \"10123.45\",\n          \"10,123\",\n          \"1,123,456\",\n          \"1123456\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"$0.10\",\n          \"$0.01-\",\n          \"$.99-\",\n          \"$100,234,567.89\",\n          \"$10,123\",\n          \"10,123\",\n          \"10123-\",\n        ],\n        invalid: [\n          \"-123\",\n          \"1.234\",\n          \"$1.1\",\n          \"$ 32.50\",\n          \"500$\",\n          \".0001\",\n          \"$.001\",\n          \"$0.001\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"123,4\",\n          \",123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"- $\",\n        ],\n      });\n\n      // ¥##,###.## with no negatives (zh-CN)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"¥\",\n            allow_negatives: false,\n          },\n        ],\n        valid: [\n          \"123,456.78\",\n          \"¥6,954,231\",\n          \"¥10.03\",\n          \"10.03\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"¥0.01\",\n          \"¥1,234,567.89\",\n          \"¥10,123\",\n          \"10,123\",\n          \"10123\",\n          \"¥100\",\n        ],\n        invalid: [\n          \"1.234\",\n          \"-123,456.78\",\n          \"¥-6,954,231\",\n          \"¥-10.03\",\n          \"¥-10567.01\",\n          \"¥1.1\",\n          \"¥-10,123\",\n          \"¥-10,123.45\",\n          \"5,00\",\n          \"¥-100\",\n          \".0001\",\n          \"¥.001\",\n          \"¥-.001\",\n          \"¥0.001\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"123 456\",\n          \",123\",\n          \"¥-,123\",\n          \"\",\n          \" \",\n          \"¥\",\n          \"¥-\",\n          \"¥-,.\",\n          \"-\",\n          \"- ¥\",\n          \"-¥\",\n        ],\n      });\n\n      // R ## ###,## and R-10 123,25 (el-ZA)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"R\",\n            negative_sign_before_digits: true,\n            thousands_separator: \" \",\n            decimal_separator: \",\",\n            allow_negative_sign_placeholder: true,\n          },\n        ],\n        valid: [\n          \"123 456,78\",\n          \"-10 123\",\n          \"R-10 123\",\n          \"R 6 954 231\",\n          \"R10,03\",\n          \"10,03\",\n          \"1,39\",\n          \",03\",\n          \"0,10\",\n          \"R10567,01\",\n          \"R0,01\",\n          \"R1 234 567,89\",\n          \"R10 123\",\n          \"R 10 123\",\n          \"R 10123\",\n          \"R-10123\",\n          \"10 123\",\n          \"10123\",\n        ],\n        invalid: [\n          \"1,234\",\n          \"R -10123\",\n          \"R- 10123\",\n          \"R,1\",\n          \",0001\",\n          \"R,001\",\n          \"R0,001\",\n          \"12 34,56\",\n          \"123456 123 123456\",\n          \" 123\",\n          \"- 123\",\n          \"123 \",\n          \"\",\n          \" \",\n          \"R\",\n          \"R- .1\",\n          \"R-\",\n          \"-\",\n          \"-R 10123\",\n          \"R00\",\n          \"R -\",\n          \"-R\",\n        ],\n      });\n\n      // -€ ##.###,## (it-IT)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"€\",\n            thousands_separator: \".\",\n            decimal_separator: \",\",\n            allow_space_after_symbol: true,\n          },\n        ],\n        valid: [\n          \"123.456,78\",\n          \"-123.456,78\",\n          \"€6.954.231\",\n          \"-€6.954.231\",\n          \"€ 896.954.231\",\n          \"-€ 896.954.231\",\n          \"16.954.231\",\n          \"-16.954.231\",\n          \"€10,03\",\n          \"-€10,03\",\n          \"10,03\",\n          \"-10,03\",\n          \"-1,39\",\n          \",03\",\n          \"0,10\",\n          \"-€10567,01\",\n          \"-€ 10567,01\",\n          \"€ 0,01\",\n          \"€1.234.567,89\",\n          \"€10.123\",\n          \"10.123\",\n          \"-€10.123\",\n          \"€ 10.123\",\n          \"€10.123\",\n          \"€ 10123\",\n          \"10.123\",\n          \"-10123\",\n        ],\n        invalid: [\n          \"1,234\",\n          \"€ 1,1\",\n          \"50#,50\",\n          \"123,@€ \",\n          \"€€500\",\n          \",0001\",\n          \"€ ,001\",\n          \"€0,001\",\n          \"12.34,56\",\n          \"123456.123.123456\",\n          \"€123€\",\n          \"\",\n          \" \",\n          \"€\",\n          \" €\",\n          \"€ \",\n          \"€€\",\n          \" 123\",\n          \"- 123\",\n          \".123\",\n          \"-€.123\",\n          \"123 \",\n          \"€-\",\n          \"- €\",\n          \"€ - \",\n          \"-\",\n          \"- \",\n          \"-€\",\n        ],\n      });\n\n      // -##.###,## € (el-GR)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"€\",\n            thousands_separator: \".\",\n            symbol_after_digits: true,\n            decimal_separator: \",\",\n            allow_space_after_digits: true,\n          },\n        ],\n        valid: [\n          \"123.456,78\",\n          \"-123.456,78\",\n          \"6.954.231 €\",\n          \"-6.954.231 €\",\n          \"896.954.231\",\n          \"-896.954.231\",\n          \"16.954.231\",\n          \"-16.954.231\",\n          \"10,03€\",\n          \"-10,03€\",\n          \"10,03\",\n          \"-10,03\",\n          \"1,39\",\n          \",03\",\n          \"-,03\",\n          \"-,03 €\",\n          \"-,03€\",\n          \"0,10\",\n          \"10567,01€\",\n          \"0,01 €\",\n          \"1.234.567,89€\",\n          \"10.123€\",\n          \"10.123\",\n          \"10.123€\",\n          \"10.123 €\",\n          \"10123 €\",\n          \"10.123\",\n          \"10123\",\n        ],\n        invalid: [\n          \"1,234\",\n          \"1,1 €\",\n          \",0001\",\n          \",001 €\",\n          \"0,001€\",\n          \"12.34,56\",\n          \"123456.123.123456\",\n          \"€123€\",\n          \"\",\n          \" \",\n          \"€\",\n          \" €\",\n          \"€ \",\n          \" 123\",\n          \"- 123\",\n          \".123\",\n          \"-.123€\",\n          \"-.123 €\",\n          \"123 \",\n          \"-€\",\n          \"- €\",\n          \"-\",\n          \"- \",\n        ],\n      });\n\n      // kr. -##.###,## (da-DK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"kr.\",\n            negative_sign_before_digits: true,\n            thousands_separator: \".\",\n            decimal_separator: \",\",\n            allow_space_after_symbol: true,\n          },\n        ],\n        valid: [\n          \"123.456,78\",\n          \"-10.123\",\n          \"kr. -10.123\",\n          \"kr.-10.123\",\n          \"kr. 6.954.231\",\n          \"kr.10,03\",\n          \"kr. -10,03\",\n          \"10,03\",\n          \"1,39\",\n          \",03\",\n          \"0,10\",\n          \"kr. 10567,01\",\n          \"kr. 0,01\",\n          \"kr. 1.234.567,89\",\n          \"kr. -1.234.567,89\",\n          \"10.123\",\n          \"kr. 10.123\",\n          \"kr.10.123\",\n          \"10123\",\n          \"10.123\",\n          \"kr.-10123\",\n        ],\n        invalid: [\n          \"1,234\",\n          \"kr.  -10123\",\n          \"kr.,1\",\n          \",0001\",\n          \"kr. ,001\",\n          \"kr.0,001\",\n          \"12.34,56\",\n          \"123456.123.123456\",\n          \".123\",\n          \"kr.-.123\",\n          \"kr. -.123\",\n          \"- 123\",\n          \"123 \",\n          \"\",\n          \" \",\n          \"kr.\",\n          \" kr.\",\n          \"kr. \",\n          \"kr.-\",\n          \"kr. -\",\n          \"kr. - \",\n          \" - \",\n          \"-\",\n          \"- kr.\",\n          \"-kr.\",\n        ],\n      });\n\n      // kr. ##.###,## with no negatives (da-DK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"kr.\",\n            allow_negatives: false,\n            negative_sign_before_digits: true,\n            thousands_separator: \".\",\n            decimal_separator: \",\",\n            allow_space_after_symbol: true,\n          },\n        ],\n        valid: [\n          \"123.456,78\",\n          \"10.123\",\n          \"kr. 10.123\",\n          \"kr.10.123\",\n          \"kr. 6.954.231\",\n          \"kr.10,03\",\n          \"kr. 10,03\",\n          \"10,03\",\n          \"1,39\",\n          \",03\",\n          \"0,10\",\n          \"kr. 10567,01\",\n          \"kr. 0,01\",\n          \"kr. 1.234.567,89\",\n          \"kr.1.234.567,89\",\n          \"10.123\",\n          \"kr. 10.123\",\n          \"kr.10.123\",\n          \"10123\",\n          \"10.123\",\n          \"kr.10123\",\n        ],\n        invalid: [\n          \"1,234\",\n          \"-10.123\",\n          \"kr. -10.123\",\n          \"kr. -1.234.567,89\",\n          \"kr.-10123\",\n          \"kr.  -10123\",\n          \"kr.-10.123\",\n          \"kr. -10,03\",\n          \"kr.,1\",\n          \",0001\",\n          \"kr. ,001\",\n          \"kr.0,001\",\n          \"12.34,56\",\n          \"123456.123.123456\",\n          \".123\",\n          \"kr.-.123\",\n          \"kr. -.123\",\n          \"- 123\",\n          \"123 \",\n          \"\",\n          \" \",\n          \"kr.\",\n          \" kr.\",\n          \"kr. \",\n          \"kr.-\",\n          \"kr. -\",\n          \"kr. - \",\n          \" - \",\n          \"-\",\n          \"- kr.\",\n          \"-kr.\",\n        ],\n      });\n\n      // ($##,###.##) (en-US, en-HK)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            parens_for_negatives: true,\n          },\n        ],\n        valid: [\n          \"1,234\",\n          \"(1,234)\",\n          \"($6,954,231)\",\n          \"$10.03\",\n          \"(10.03)\",\n          \"($10.03)\",\n          \"1.39\",\n          \".03\",\n          \"(.03)\",\n          \"($.03)\",\n          \"0.10\",\n          \"$10567.01\",\n          \"($0.01)\",\n          \"$1,234,567.89\",\n          \"$10,123\",\n          \"(10,123)\",\n          \"10123\",\n        ],\n        invalid: [\n          \"1.234\",\n          \"($1.1)\",\n          \"-$1.10\",\n          \"$ 32.50\",\n          \"500$\",\n          \".0001\",\n          \"$.001\",\n          \"($0.001)\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"( 123)\",\n          \",123\",\n          \"$-,123\",\n          \"\",\n          \" \",\n          \"  \",\n          \"   \",\n          \"$\",\n          \"$ \",\n          \" $\",\n          \" 123\",\n          \"(123) \",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$ - \",\n          \"$- \",\n          \" - \",\n          \"-\",\n          \"- $\",\n          \"-$\",\n          \"()\",\n          \"( )\",\n          \"(  -)\",\n          \"(  - )\",\n          \"(  -  )\",\n          \"(-)\",\n          \"(-$)\",\n        ],\n      });\n      // $##,###.## with no negatives (en-US, en-CA, en-AU, en-HK)\n      test({\n        validator: \"isCurrency\",\n        args: [{ allow_negatives: false }],\n        valid: [\n          \"$10,123.45\",\n          \"$10123.45\",\n          \"10,123.45\",\n          \"10123.45\",\n          \"10,123\",\n          \"1,123,456\",\n          \"1123456\",\n          \"1.39\",\n          \".03\",\n          \"0.10\",\n          \"$0.10\",\n          \"$100,234,567.89\",\n          \"$10,123\",\n          \"10,123\",\n        ],\n        invalid: [\n          \"1.234\",\n          \"-1.234\",\n          \"-10123\",\n          \"-$0.01\",\n          \"-$.99\",\n          \"$1.1\",\n          \"-$1.1\",\n          \"$ 32.50\",\n          \"500$\",\n          \".0001\",\n          \"$.001\",\n          \"$0.001\",\n          \"12,34.56\",\n          \"123456,123,123456\",\n          \"-123456,123,123456\",\n          \"123,4\",\n          \",123\",\n          \"$-,123\",\n          \"$\",\n          \".\",\n          \",\",\n          \"00\",\n          \"$-\",\n          \"$-,.\",\n          \"-\",\n          \"-$\",\n          \"\",\n          \"- $\",\n          \"-$10,123.45\",\n        ],\n      });\n\n      //  R$ ##,###.## (pt_BR)\n      test({\n        validator: \"isCurrency\",\n        args: [\n          {\n            symbol: \"R$\",\n            require_symbol: true,\n            allow_space_after_symbol: true,\n            symbol_after_digits: false,\n            thousands_separator: \".\",\n            decimal_separator: \",\",\n          },\n        ],\n        valid: [\"R$ 1.400,00\", \"R$ 400,00\"],\n        invalid: [\"$ 1.400,00\", \"$R 1.400,00\"],\n      });\n    });\n\n    it(\"should validate Ethereum addresses\", () => {\n      test({\n        validator: \"isEthereumAddress\",\n        valid: [\n          \"0x0000000000000000000000000000000000000001\",\n          \"0x683E07492fBDfDA84457C16546ac3f433BFaa128\",\n          \"0x88dA6B6a8D3590e88E0FcadD5CEC56A7C9478319\",\n          \"0x8a718a84ee7B1621E63E680371e0C03C417cCaF6\",\n          \"0xFCb5AFB808b5679b4911230Aa41FfCD0cd335b42\",\n        ],\n        invalid: [\n          \"0xGHIJK05pwm37asdf5555QWERZCXV2345AoEuIdHt\",\n          \"0xFCb5AFB808b5679b4911230Aa41FfCD0cd335b422222\",\n          \"0xFCb5AFB808b5679b4911230Aa41FfCD0cd33\",\n          \"0b0110100001100101011011000110110001101111\",\n          \"683E07492fBDfDA84457C16546ac3f433BFaa128\",\n          \"1C6o5CDkLxjsVpnLSuqRs1UBFozXLEwYvU\",\n        ],\n      });\n    });\n\n    it(\"should validate Bitcoin addresses\", () => {\n      test({\n        validator: \"isBtcAddress\",\n        valid: [\n          \"1MUz4VMYui5qY1mxUiG8BQ1Luv6tqkvaiL\",\n          \"mucFNhKMYoBQYUAEsrFVscQ1YaFQPekBpg\",\n          \"3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy\",\n          \"2NFUBBRcTJbYc1D4HSCbJhKZp6YCV4PQFpQ\",\n          \"bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq\",\n          \"14qViLJfdGaP4EeHnDyJbEGQysnCpwk3gd\",\n          \"35bSzXvRKLpHsHMrzb82f617cV4Srnt7hS\",\n          \"17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhemt\",\n          \"bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4\",\n          \"tb1qxhkl607frtvjsy9nlyeg03lf6fsq947pl2pe82\",\n          \"bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297\",\n          \"tb1pzpelffrdh9ptpaqnurwx30dlewqv57rcxfeetp86hsssk30p4cws38tr9y\",\n        ],\n        invalid: [\n          \"3J98t1WpEZ73CNmQviecrnyiWrnqh0WNL0\",\n          \"3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLo\",\n          \"3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLI\",\n          \"3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLl\",\n          \"4J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy\",\n          \"0x56F0B8A998425c53c75C4A303D4eF987533c5597\",\n          \"pp8skudq3x5hzw8ew7vzsw8tn4k8wxsqsv0lt0mf3g\",\n          \"17VZNX1SN5NlKa8UQFxwQbFeFc3iqRYhem\",\n          \"BC1QW508D6QEJXTDG4Y5R3ZARVAYR0C5XW7KV8F3T4\",\n          \"bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3291\",\n          \"bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329b\",\n          \"bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329i\",\n          \"bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329o\",\n          \"BC1P5D7RJQ7G6RDK2YHZKS9SMLAQTEDR4DEKQ08GE8ZTWAC72SFR9RUSXG3297\",\n          \"TB1PZPELFFRDH9PTPAQNURWX30DLEWQV57RCXFEETP86HSSSK30P4CWS38TR9Y\",\n        ],\n      });\n    });\n\n    it(\"should validate booleans\", () => {\n      test({\n        validator: \"isBoolean\",\n        valid: [\"true\", \"false\", \"0\", \"1\"],\n        invalid: [\"1.0\", \"0.0\", \"true \", \"False\", \"True\", \"yes\"],\n      });\n    });\n\n    it(\"should validate booleans with option loose set to true\", () => {\n      test({\n        validator: \"isBoolean\",\n        args: [{ loose: true }],\n        valid: [\n          \"true\",\n          \"True\",\n          \"TRUE\",\n          \"false\",\n          \"False\",\n          \"FALSE\",\n          \"0\",\n          \"1\",\n          \"yes\",\n          \"Yes\",\n          \"YES\",\n          \"no\",\n          \"No\",\n          \"NO\",\n        ],\n        invalid: [\"1.0\", \"0.0\", \"true \", \" false\"],\n      });\n    });\n\n    it(\"should validate ISO 639-1 language codes\", () => {\n      test({\n        validator: \"isISO6391\",\n        valid: [\"ay\", \"az\", \"ba\", \"be\", \"bg\"],\n        invalid: [\"aj\", \"al\", \"pe\", \"pf\", \"abc\", \"123\", \"\"],\n      });\n    });\n\n    const validISO8601 = [\n      \"2009-12T12:34\",\n      \"2009\",\n      \"2009-05-19\",\n      \"2009-05-19\",\n      \"20090519\",\n      \"2009123\",\n      \"2009-05\",\n      \"2009-123\",\n      \"2009-222\",\n      \"2009-001\",\n      \"2009-W01-1\",\n      \"2009-W51-1\",\n      \"2009-W511\",\n      \"2009-W33\",\n      \"2009W511\",\n      \"2009-05-19\",\n      \"2009-05-19 00:00\",\n      \"2009-05-19 14\",\n      \"2009-05-19 14:31\",\n      \"2009-05-19 14:39:22\",\n      \"2009-05-19T14:39Z\",\n      \"2009-W21-2\",\n      \"2009-W21-2T01:22\",\n      \"2009-139\",\n      \"2009-05-19 14:39:22-06:00\",\n      \"2009-05-19 14:39:22+0600\",\n      \"2009-05-19 14:39:22-01\",\n      \"20090621T0545Z\",\n      \"2007-04-06T00:00\",\n      \"2007-04-05T24:00\",\n      \"2010-02-18T16:23:48.5\",\n      \"2010-02-18T16:23:48,444\",\n      \"2010-02-18T16:23:48,3-06:00\",\n      \"2010-02-18T16:23.4\",\n      \"2010-02-18T16:23,25\",\n      \"2010-02-18T16:23.33+0600\",\n      \"2010-02-18T16.23334444\",\n      \"2010-02-18T16,2283\",\n      \"2009-05-19 143922.500\",\n      \"2009-05-19 1439,55\",\n      \"2009-10-10\",\n      \"2020-366\",\n      \"2000-366\",\n    ];\n\n    const invalidISO8601 = [\n      \"200905\",\n      \"2009367\",\n      \"2009-\",\n      \"2007-04-05T24:50\",\n      \"2009-000\",\n      \"2009-M511\",\n      \"2009M511\",\n      \"2009-05-19T14a39r\",\n      \"2009-05-19T14:3924\",\n      \"2009-0519\",\n      \"2009-05-1914:39\",\n      \"2009-05-19 14:\",\n      \"2009-05-19r14:39\",\n      \"2009-05-19 14a39a22\",\n      \"200912-01\",\n      \"2009-05-19 14:39:22+06a00\",\n      \"2009-05-19 146922.500\",\n      \"2010-02-18T16.5:23.35:48\",\n      \"2010-02-18T16:23.35:48\",\n      \"2010-02-18T16:23.35:48.45\",\n      \"2009-05-19 14.5.44\",\n      \"2010-02-18T16:23.33.600\",\n      \"2010-02-18T16,25:23:48,444\",\n      \"2010-13-1\",\n      \"nonsense2021-01-01T00:00:00Z\",\n      \"2021-01-01T00:00:00Znonsense\",\n    ];\n\n    it(\"should validate ISO 8601 dates\", () => {\n      // from http://www.pelagodesign.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/\n      test({\n        validator: \"isISO8601\",\n        valid: validISO8601,\n        invalid: invalidISO8601,\n      });\n    });\n\n    it(\"should validate ISO 8601 dates, with strict = true (regression)\", () => {\n      test({\n        validator: \"isISO8601\",\n        args: [{ strict: true }],\n        valid: validISO8601,\n        invalid: invalidISO8601,\n      });\n    });\n\n    it(\"should validate ISO 8601 dates, with strict = true\", () => {\n      test({\n        validator: \"isISO8601\",\n        args: [{ strict: true }],\n        valid: [\"2000-02-29\", \"2009-123\", \"2009-222\", \"2020-366\", \"2400-366\"],\n        invalid: [\"2010-02-30\", \"2009-02-29\", \"2009-366\", \"2019-02-31\"],\n      });\n    });\n\n    it(\"should validate ISO 8601 dates, with strictSeparator = true\", () => {\n      test({\n        validator: \"isISO8601\",\n        args: [{ strictSeparator: true }],\n        valid: [\n          \"2009-12T12:34\",\n          \"2009\",\n          \"2009-05-19\",\n          \"2009-05-19\",\n          \"20090519\",\n          \"2009123\",\n          \"2009-05\",\n          \"2009-123\",\n          \"2009-222\",\n          \"2009-001\",\n          \"2009-W01-1\",\n          \"2009-W51-1\",\n          \"2009-W511\",\n          \"2009-W33\",\n          \"2009W511\",\n          \"2009-05-19\",\n          \"2009-05-19T14:39Z\",\n          \"2009-W21-2\",\n          \"2009-W21-2T01:22\",\n          \"2009-139\",\n          \"20090621T0545Z\",\n          \"2007-04-06T00:00\",\n          \"2007-04-05T24:00\",\n          \"2010-02-18T16:23:48.5\",\n          \"2010-02-18T16:23:48,444\",\n          \"2010-02-18T16:23:48,3-06:00\",\n          \"2010-02-18T16:23.4\",\n          \"2010-02-18T16:23,25\",\n          \"2010-02-18T16:23.33+0600\",\n          \"2010-02-18T16.23334444\",\n          \"2010-02-18T16,2283\",\n          \"2009-10-10\",\n          \"2020-366\",\n          \"2000-366\",\n        ],\n        invalid: [\n          \"200905\",\n          \"2009367\",\n          \"2009-\",\n          \"2007-04-05T24:50\",\n          \"2009-000\",\n          \"2009-M511\",\n          \"2009M511\",\n          \"2009-05-19T14a39r\",\n          \"2009-05-19T14:3924\",\n          \"2009-0519\",\n          \"2009-05-1914:39\",\n          \"2009-05-19 14:\",\n          \"2009-05-19r14:39\",\n          \"2009-05-19 14a39a22\",\n          \"200912-01\",\n          \"2009-05-19 14:39:22+06a00\",\n          \"2009-05-19 146922.500\",\n          \"2010-02-18T16.5:23.35:48\",\n          \"2010-02-18T16:23.35:48\",\n          \"2010-02-18T16:23.35:48.45\",\n          \"2009-05-19 14.5.44\",\n          \"2010-02-18T16:23.33.600\",\n          \"2010-02-18T16,25:23:48,444\",\n          \"2010-13-1\",\n          \"2009-05-19 00:00\",\n          // Previously valid cases\n          \"2009-05-19 14\",\n          \"2009-05-19 14:31\",\n          \"2009-05-19 14:39:22\",\n          \"2009-05-19 14:39:22-06:00\",\n          \"2009-05-19 14:39:22+0600\",\n          \"2009-05-19 14:39:22-01\",\n        ],\n      });\n    });\n\n    it(\"should validate ISO 8601 dates, with strict = true and strictSeparator = true (regression)\", () => {\n      test({\n        validator: \"isISO8601\",\n        args: [{ strict: true, strictSeparator: true }],\n        valid: [\"2000-02-29\", \"2009-123\", \"2009-222\", \"2020-366\", \"2400-366\"],\n        invalid: [\n          \"2010-02-30\",\n          \"2009-02-29\",\n          \"2009-366\",\n          \"2019-02-31\",\n          \"2009-05-19 14\",\n          \"2009-05-19 14:31\",\n          \"2009-05-19 14:39:22\",\n          \"2009-05-19 14:39:22-06:00\",\n          \"2009-05-19 14:39:22+0600\",\n          \"2009-05-19 14:39:22-01\",\n        ],\n      });\n    });\n\n    it(\"should validate ISO 15924 script codes\", () => {\n      test({\n        validator: \"isISO15924\",\n        valid: [\"Adlm\", \"Bass\", \"Copt\", \"Dsrt\", \"Egyd\", \"Latn\", \"Zzzz\"],\n        invalid: [\"\", \"arab\", \"zzzz\", \"Qaby\", \"Lati\"],\n      });\n    });\n\n    it(\"should validate RFC 3339 dates\", () => {\n      test({\n        validator: \"isRFC3339\",\n        valid: [\n          \"2009-05-19 14:39:22-06:00\",\n          \"2009-05-19 14:39:22+06:00\",\n          \"2009-05-19 14:39:22Z\",\n          \"2009-05-19T14:39:22-06:00\",\n          \"2009-05-19T14:39:22Z\",\n          \"2010-02-18T16:23:48.3-06:00\",\n          \"2010-02-18t16:23:33+06:00\",\n          \"2010-02-18t16:23:33+06:00\",\n          \"2010-02-18t16:12:23.23334444z\",\n          \"2010-02-18T16:23:55.2283Z\",\n          \"2009-05-19 14:39:22.500Z\",\n          \"2009-05-19 14:39:55Z\",\n          \"2009-05-31 14:39:55Z\",\n          \"2009-05-31 14:53:60Z\",\n          \"2010-02-18t00:23:23.33+06:00\",\n          \"2010-02-18t00:23:32.33+00:00\",\n          \"2010-02-18t00:23:32.33+23:00\",\n        ],\n        invalid: [\n          \"2010-02-18t00:23:32.33+24:00\",\n          \"2009-05-31 14:60:55Z\",\n          \"2010-02-18t24:23.33+0600\",\n          \"2009-05-00 1439,55Z\",\n          \"2009-13-19 14:39:22-06:00\",\n          \"2009-05-00 14:39:22+0600\",\n          \"2009-00-1 14:39:22Z\",\n          \"2009-05-19T14:39:22\",\n          \"nonsense2021-01-01T00:00:00Z\",\n          \"2021-01-01T00:00:00Znonsense\",\n        ],\n      });\n    });\n\n    it(\"should validate ISO 3166-1 alpha 2 country codes\", () => {\n      // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n      test({\n        validator: \"isISO31661Alpha2\",\n        valid: [\n          \"FR\",\n          \"fR\",\n          \"GB\",\n          \"PT\",\n          \"CM\",\n          \"JP\",\n          \"PM\",\n          \"ZW\",\n          \"MM\",\n          \"cc\",\n          \"GG\",\n        ],\n        invalid: [\"\", \"FRA\", \"AA\", \"PI\", \"RP\", \"WV\", \"WL\", \"UK\", \"ZZ\"],\n      });\n    });\n\n    it(\"should validate ISO 3166-1 alpha 3 country codes\", () => {\n      // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3\n      test({\n        validator: \"isISO31661Alpha3\",\n        valid: [\"ABW\", \"HND\", \"KHM\", \"RWA\"],\n        invalid: [\"\", \"FR\", \"fR\", \"GB\", \"PT\", \"CM\", \"JP\", \"PM\", \"ZW\"],\n      });\n    });\n\n    it(\"should validate ISO 3166-1 numeric country codes\", () => {\n      // from https://en.wikipedia.org/wiki/ISO_3166-1_numeric\n      test({\n        validator: \"isISO31661Numeric\",\n        valid: [\n          \"076\",\n          \"208\",\n          \"276\",\n          \"348\",\n          \"380\",\n          \"410\",\n          \"440\",\n          \"528\",\n          \"554\",\n          \"826\",\n        ],\n        invalid: [\n          \"\",\n          \"NL\",\n          \"NLD\",\n          \"002\",\n          \"197\",\n          \"249\",\n          \"569\",\n          \"810\",\n          \"900\",\n          \"999\",\n        ],\n      });\n    });\n\n    it(\"should validate ISO 4217 corrency codes\", () => {\n      // from https://en.wikipedia.org/wiki/ISO_4217\n      test({\n        validator: \"isISO4217\",\n        valid: [\n          \"AED\",\n          \"aed\",\n          \"AUD\",\n          \"CUP\",\n          \"EUR\",\n          \"GBP\",\n          \"LYD\",\n          \"MYR\",\n          \"SGD\",\n          \"SLE\",\n          \"USD\",\n          \"VED\",\n          \"SLE\",\n        ],\n        invalid: [\n          \"\",\n          \"$\",\n          \"US\",\n          \"us\",\n          \"AAA\",\n          \"aaa\",\n          \"RWA\",\n          \"EURO\",\n          \"euro\",\n          \"HRK\",\n          \"CUC\",\n        ],\n      });\n    });\n\n    it(\"should validate whitelisted characters\", () => {\n      test({\n        validator: \"isWhitelisted\",\n        args: [\"abcdefghijklmnopqrstuvwxyz-\"],\n        valid: [\"foo\", \"foobar\", \"baz-foo\"],\n        invalid: [\"foo bar\", \"fo.bar\", \"türkçe\"],\n      });\n    });\n\n    it(\"should error on non-string input\", () => {\n      test({\n        validator: \"isEmpty\",\n        error: [undefined, null, [], NaN],\n      });\n    });\n\n    it(\"should validate dataURI\", () => {\n      /* eslint-disable max-len */\n      test({\n        validator: \"isDataURI\",\n        valid: [\n          \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC\",\n          \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC\",\n          \"data:application/media_control+xml;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC\",\n          \"   data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC   \",\n          \"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%3E%3Crect%20fill%3D%22%2300B1FF%22%20width%3D%22100%22%20height%3D%22100%22%2F%3E%3C%2Fsvg%3E\",\n          \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIj48cmVjdCBmaWxsPSIjMDBCMUZGIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPjwvc3ZnPg==\",\n          \" data:,Hello%2C%20World!\",\n          \" data:,Hello World!\",\n          \" data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D\",\n          \" data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E\",\n          \"data:,A%20brief%20note\",\n          \"data:text/html;charset=US-ASCII,%3Ch1%3EHello!%3C%2Fh1%3E\",\n          \"data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,dGVzdC5kb2N4\",\n        ],\n        invalid: [\n          \"dataxbase64\",\n          \"data:HelloWorld\",\n          \"data:,A%20brief%20invalid%20[note\",\n          \"file:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D\",\n          \"data:text/html;charset=,%3Ch1%3EHello!%3C%2Fh1%3E\",\n          \"data:text/html;charset,%3Ch1%3EHello!%3C%2Fh1%3E\",\n          \"data:base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC\",\n          \"\",\n          \"http://wikipedia.org\",\n          \"base64\",\n          \"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC\",\n        ],\n      });\n      /* eslint-enable max-len */\n    });\n\n    it(\"should validate magnetURI\", () => {\n      /* eslint-disable max-len */\n      test({\n        validator: \"isMagnetURI\",\n        valid: [\n          \"magnet:?xt.1=urn:sha1:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456&xt.2=urn:sha1:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456\",\n          \"magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=helloword2000&tr=udp://helloworld:1337/announce\",\n          \"magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=foo\",\n          \"magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=&tr=&nonexisting=hello world\",\n          \"magnet:?xt=urn:md5:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456\",\n          \"magnet:?xt=urn:tree:tiger:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456\",\n          \"magnet:?xt=urn:ed2k:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magnet:?tr=udp://helloworld:1337/announce&xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magnet:?xt=urn:btmh:1220caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e\",\n        ],\n        invalid: [\n          \":?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magneta:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magnet:?xt=uarn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magnet:?xt=urn:btihz\",\n          \"magnet::?xt=urn:btih:UHWY2892JNEJ2GTEYOMDNU67E8ICGICYE92JDUGH\",\n          \"magnet:?xt:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n          \"magnet:?xt:urn:nonexisting:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magnet:?xt.2=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234\",\n          \"magnet:?xt=urn:ed2k:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890123456789ABCD\",\n          \"magnet:?xt=urn:btmh:1120caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e\",\n          \"magnet:?ttxt=urn:btmh:1220caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e\",\n        ],\n      });\n      /* eslint-enable max-len */\n    });\n\n    it(\"should validate LatLong\", () => {\n      test({\n        validator: \"isLatLong\",\n        valid: [\n          \"(-17.738223, 85.605469)\",\n          \"(-12.3456789, +12.3456789)\",\n          \"(-60.978437, -0.175781)\",\n          \"(77.719772, -37.529297)\",\n          \"(7.264394, 165.058594)\",\n          \"0.955766, -19.863281\",\n          \"(31.269161,164.355469)\",\n          \"+12.3456789, -12.3456789\",\n          \"-15.379543, -137.285156\",\n          \"(11.770570, -162.949219)\",\n          \"-55.034319, 113.027344\",\n          \"58.025555, 36.738281\",\n          \"55.720923,-28.652344\",\n          \"-90.00000,-180.00000\",\n          \"(-71, -146)\",\n          \"(-71.616864, -146.616864)\",\n          \"-0.55, +0.22\",\n          \"90, 180\",\n          \"+90, -180\",\n          \"-90,+180\",\n          \"90,180\",\n          \"0, 0\",\n        ],\n        invalid: [\n          \"(020.000000, 010.000000000)\",\n          \"89.9999999989, 360.0000000\",\n          \"90.1000000, 180.000000\",\n          \"+90.000000, -180.00001\",\n          \"090.0000, 0180.0000\",\n          \"126, -158\",\n          \"(-126.400010, -158.400010)\",\n          \"-95, -96\",\n          \"-95.738043, -96.738043\",\n          \"137, -148\",\n          \"(-137.5942, -148.5942)\",\n          \"(-120, -203)\",\n          \"(-119, -196)\",\n          \"+119.821728, -196.821728\",\n          \"(-110, -223)\",\n          \"-110.369532, 223.369532\",\n          \"(-120.969949, +203.969949)\",\n          \"-116, -126\",\n          \"-116.894222, -126.894222\",\n          \"-112, -160\",\n          \"-112.96381, -160.96381\",\n          \"-90., -180.\",\n          \"+90.1, -180.1\",\n          \"(-17.738223, 85.605469\",\n          \"0.955766, -19.863281)\",\n          \"+,-\",\n          \"(,)\",\n          \",\",\n          \" \",\n        ],\n      });\n\n      test({\n        validator: \"isLatLong\",\n        args: [\n          {\n            checkDMS: true,\n          },\n        ],\n        valid: [\n          \"40° 26′ 46″ N, 79° 58′ 56″ W\",\n          \"40° 26′ 46″ S, 79° 58′ 56″ E\",\n          \"90° 0′ 0″ S, 180° 0′ 0″ E\",\n          \"40° 26′ 45.9996″ N, 79° 58′ 55.2″ E\",\n          \"40° 26′ 46″ n, 79° 58′ 56″ w\",\n          \"40°26′46″s, 79°58′56″e\",\n          \"11° 0′ 0.005″ S, 180° 0′ 0″ E\",\n          \"40°26′45.9996″N, 79°58′55.2″E\",\n        ],\n        invalid: [\n          \"100° 26′ 46″ N, 79° 70′ 56″ W\",\n          \"40° 89′ 46″ S, 79° 58′ 100″ E\",\n          \"40° 26.445′ 45″ N, 79° 58′ 55.2″ E\",\n          \"40° 46″ N, 79° 58′ 56″ W\",\n        ],\n      });\n    });\n\n    it(\"should validate postal code\", () => {\n      const fixtures = [\n        {\n          locale: \"AU\",\n          valid: [\"4000\", \"2620\", \"3000\", \"2017\", \"0800\"],\n        },\n        {\n          locale: \"BD\",\n          valid: [\n            \"1000\",\n            \"1200\",\n            \"1300\",\n            \"1400\",\n            \"1500\",\n            \"2000\",\n            \"3000\",\n            \"4000\",\n            \"5000\",\n            \"6000\",\n            \"7000\",\n            \"8000\",\n            \"9000\",\n            \"9400\",\n            \"9499\",\n          ],\n          invalid: [\n            \"0999\",\n            \"9500\",\n            \"10000\",\n            \"12345\",\n            \"123\",\n            \"123456\",\n            \"abcd\",\n            \"123a\",\n            \"a123\",\n            \"12 34\",\n            \"12-34\",\n          ],\n        },\n        {\n          locale: \"BY\",\n          valid: [\"225320\", \"211120\", \"247710\", \"231960\"],\n          invalid: [\"test 225320\", \"211120 test\", \"317543\", \"267946\"],\n        },\n        {\n          locale: \"CA\",\n          valid: [\n            \"L4T 0A5\",\n            \"G1A-0A2\",\n            \"A1A 1A1\",\n            \"X0A-0H0\",\n            \"V5K 0A1\",\n            \"A1C 3S4\",\n            \"A1C3S4\",\n            \"a1c 3s4\",\n            \"V9A 7N2\",\n            \"B3K 5X5\",\n            \"K8N 5W6\",\n            \"K1A 0B1\",\n            \"B1Z 0B9\",\n          ],\n          invalid: [\n            \"        \",\n            \"invalid value\",\n            \"a1a1a\",\n            \"A1A  1A1\",\n            \"K1A 0D1\",\n            \"W1A 0B1\",\n            \"Z1A 0B1\",\n          ],\n        },\n        {\n          locale: \"CO\",\n          valid: [\"050034\", \"110221\", \"441029\", \"910001\"],\n          invalid: [\"11001\", \"000000\", \"109999\", \"329999\"],\n        },\n        {\n          locale: \"ES\",\n          valid: [\"01001\", \"52999\", \"27880\"],\n          invalid: [\"123\", \"1234\", \"53000\", \"052999\", \"0123\", \"abcde\"],\n        },\n        {\n          locale: \"JP\",\n          valid: [\"135-0000\", \"874-8577\", \"669-1161\", \"470-0156\", \"672-8031\"],\n        },\n        {\n          locale: \"GR\",\n          valid: [\"022 93\", \"29934\", \"90293\", \"299 42\", \"94944\"],\n        },\n        {\n          locale: \"GB\",\n          valid: [\n            \"TW8 9GS\",\n            \"BS98 1TL\",\n            \"DE99 3GG\",\n            \"DE55 4SW\",\n            \"DH98 1BT\",\n            \"DH99 1NS\",\n            \"GIR0aa\",\n            \"SA99\",\n            \"W1N 4DJ\",\n            \"AA9A 9AA\",\n            \"AA99 9AA\",\n            \"BS98 1TL\",\n            \"DE993GG\",\n          ],\n        },\n        {\n          locale: \"FR\",\n          valid: [\"75008\", \"44522\", \"38499\", \"39940\", \"01000\"],\n          invalid: [\"44 522\", \"38 499\", \"96000\", \"98025\"],\n        },\n        {\n          locale: \"ID\",\n          valid: [\"10210\", \"40181\", \"55161\", \"60233\"],\n        },\n        {\n          locale: \"IE\",\n          valid: [\"A65 TF12\", \"A6W U9U9\"],\n          invalid: [\n            \"123\",\n            \"75690HG\",\n            \"AW5  TF12\",\n            \"AW5 TF12\",\n            \"756  90HG\",\n            \"A65T F12\",\n            \"O62 O1O2\",\n          ],\n        },\n        {\n          locale: \"IN\",\n          valid: [\"364240\", \"360005\"],\n          invalid: [\n            \"123\",\n            \"012345\",\n            \"011111\",\n            \"101123\",\n            \"291123\",\n            \"351123\",\n            \"541123\",\n            \"551123\",\n            \"651123\",\n            \"661123\",\n            \"861123\",\n            \"871123\",\n            \"881123\",\n            \"891123\",\n          ],\n        },\n        {\n          locale: \"IL\",\n          valid: [\n            \"10200\",\n            \"10292\",\n            \"10300\",\n            \"10329\",\n            \"3885500\",\n            \"4290500\",\n            \"4286000\",\n            \"7080000\",\n          ],\n          invalid: [\n            \"123\",\n            \"012345\",\n            \"011111\",\n            \"101123\",\n            \"291123\",\n            \"351123\",\n            \"541123\",\n            \"551123\",\n            \"651123\",\n            \"661123\",\n            \"861123\",\n            \"871123\",\n            \"881123\",\n            \"891123\",\n          ],\n        },\n        {\n          locale: \"BG\",\n          valid: [\"1000\"],\n        },\n        {\n          locale: \"IR\",\n          valid: [\"4351666456\", \"5614736867\"],\n          invalid: [\n            \"43516 6456\",\n            \"123443516 6456\",\n            \"891123\",\n            \"test 4351666456\",\n            \"4351666456 test\",\n            \"test 4351666456 test\",\n          ],\n        },\n        {\n          locale: \"CZ\",\n          valid: [\"20134\", \"392 90\", \"39919\", \"938 29\", \"39949\"],\n        },\n        {\n          locale: \"NL\",\n          valid: [\"1012 SZ\", \"3432FE\", \"1118 BH\", \"3950IO\", \"3997 GH\"],\n          invalid: [\"1234\", \"0603 JV\", \"5194SA\", \"9164 SD\", \"1841SS\"],\n        },\n        {\n          locale: \"NP\",\n          valid: [\"10811\", \"32600\", \"56806\", \"977\"],\n          invalid: [\"11977\", \"asds\", \"13 32\", \"-977\", \"97765\"],\n        },\n        {\n          locale: \"PL\",\n          valid: [\n            \"47-260\",\n            \"12-930\",\n            \"78-399\",\n            \"39-490\",\n            \"38-483\",\n            \"05-800\",\n            \"54-060\",\n          ],\n        },\n        {\n          locale: \"TW\",\n          valid: [\"360\", \"90312\", \"399\", \"935\", \"38842\", \"546023\"],\n        },\n        {\n          locale: \"LI\",\n          valid: [\"9485\", \"9497\", \"9491\", \"9489\", \"9496\"],\n        },\n        {\n          locale: \"PT\",\n          valid: [\"4829-489\", \"0294-348\", \"8156-392\"],\n        },\n        {\n          locale: \"SE\",\n          valid: [\"12994\", \"284 39\", \"39556\", \"489 39\", \"499 49\"],\n        },\n        {\n          locale: \"AD\",\n          valid: [\n            \"AD100\",\n            \"AD200\",\n            \"AD300\",\n            \"AD400\",\n            \"AD500\",\n            \"AD600\",\n            \"AD700\",\n          ],\n        },\n        {\n          locale: \"UA\",\n          valid: [\"65000\", \"65080\", \"01000\", \"51901\", \"51909\", \"49125\"],\n        },\n        {\n          locale: \"BR\",\n          valid: [\n            \"39100-000\",\n            \"22040-020\",\n            \"39400-152\",\n            \"39100000\",\n            \"22040020\",\n            \"39400152\",\n          ],\n          invalid: [\n            \"79800A12\",\n            \"13165-00\",\n            \"38175-abc\",\n            \"81470-2763\",\n            \"78908\",\n            \"13010|111\",\n          ],\n        },\n        {\n          locale: \"NZ\",\n          valid: [\"7843\", \"3581\", \"0449\", \"0984\", \"4144\"],\n        },\n        {\n          locale: \"PK\",\n          valid: [\"25000\", \"44000\", \"54810\", \"74200\"],\n          invalid: [\"5400\", \"540000\", \"NY540\", \"540CA\", \"540-0\"],\n        },\n        {\n          locale: \"MG\",\n          valid: [\"101\", \"303\", \"407\", \"512\"],\n        },\n        {\n          locale: \"MT\",\n          valid: [\"VLT2345\", \"VLT 2345\", \"ATD1234\", \"MSK8723\"],\n        },\n        {\n          locale: \"MY\",\n          valid: [\"56000\", \"12000\", \"79502\"],\n        },\n        {\n          locale: \"PR\",\n          valid: [\"00979\", \"00631\", \"00786\", \"00987\"],\n        },\n        {\n          locale: \"AZ\",\n          valid: [\"AZ0100\", \"AZ0121\", \"AZ3500\"],\n          invalid: [\"\", \" AZ0100\", \"AZ100\", \"AZ34340\", \"EN2020\", \"AY3030\"],\n        },\n        {\n          locale: \"DO\",\n          valid: [\"12345\"],\n          invalid: [\"A1234\", \"123\", \"123456\"],\n        },\n        {\n          locale: \"HT\",\n          valid: [\"HT1234\"],\n          invalid: [\"HT123\", \"HT12345\", \"AA1234\"],\n        },\n        {\n          locale: \"TH\",\n          valid: [\"10250\", \"72170\", \"12140\"],\n          invalid: [\"T1025\", \"T72170\", \"12140TH\"],\n        },\n        {\n          locale: \"SG\",\n          valid: [\"308215\", \"546080\"],\n        },\n        {\n          locale: \"CN\",\n          valid: [\"150237\", \"100000\"],\n          invalid: [\"141234\", \"386789\", \"ab1234\"],\n        },\n        {\n          locale: \"KR\",\n          valid: [\"17008\", \"339012\"],\n          invalid: [\"1412347\", \"ab1234\"],\n        },\n        {\n          locale: \"LK\",\n          valid: [\"11500\", \"22200\", \"10370\", \"43000\"],\n          invalid: [\"1234\", \"789389\", \"982\"],\n        },\n        {\n          locale: \"BA\",\n          valid: [\"76300\", \"71000\", \"75412\", \"76100\", \"88202\", \"88313\"],\n          invalid: [\"1234\", \"789389\", \"98212\", \"11000\"],\n        },\n      ];\n\n      let allValid = [];\n\n      // Test fixtures\n      fixtures.forEach((fixture) => {\n        if (fixture.valid) allValid = allValid.concat(fixture.valid);\n        test({\n          validator: \"isPostalCode\",\n          valid: fixture.valid,\n          invalid: fixture.invalid,\n          args: [fixture.locale],\n        });\n      });\n\n      // Test generics\n      test({\n        validator: \"isPostalCode\",\n        valid: [\n          ...allValid,\n          \"1234\",\n          \"6900\",\n          \"1292\",\n          \"9400\",\n          \"27616\",\n          \"90210\",\n          \"10001\",\n          \"21201\",\n          \"33142\",\n          \"060623\",\n          \"123456\",\n          \"293940\",\n          \"002920\",\n        ],\n        invalid: [\n          \"asdf\",\n          \"1\",\n          \"ASDFGJKLmZXJtZtesting123\",\n          \"Vml2YW11cyBmZXJtZtesting123\",\n          \"48380480343\",\n          \"29923-329393-2324\",\n          \"4294924224\",\n          \"13\",\n        ],\n        args: [\"any\"],\n      });\n    });\n\n    it(\"should error on invalid locale\", () => {\n      test({\n        validator: \"isPostalCode\",\n        args: [\"is-NOT\"],\n        error: [\"293940\", \"1234\"],\n      });\n    });\n\n    it(\"should validate MIME types\", () => {\n      test({\n        validator: \"isMimeType\",\n        valid: [\n          \"application/json\",\n          \"application/xhtml+xml\",\n          \"audio/mp4\",\n          \"image/bmp\",\n          \"font/woff2\",\n          \"message/http\",\n          \"model/vnd.gtw\",\n          \"application/media_control+xml\",\n          \"multipart/form-data\",\n          \"multipart/form-data; boundary=something\",\n          \"multipart/form-data; charset=utf-8; boundary=something\",\n          \"multipart/form-data; boundary=something; charset=utf-8\",\n          'multipart/form-data; boundary=something; charset=\"utf-8\"',\n          'multipart/form-data; boundary=\"something\"; charset=utf-8',\n          'multipart/form-data; boundary=\"something\"; charset=\"utf-8\"',\n          \"text/css\",\n          \"text/plain; charset=utf8\",\n          'Text/HTML;Charset=\"utf-8\"',\n          \"text/html;charset=UTF-8\",\n          \"Text/html;charset=UTF-8\",\n          \"text/html; charset=us-ascii\",\n          \"text/html; charset=us-ascii (Plain text)\",\n          'text/html; charset=\"us-ascii\"',\n          \"video/mp4\",\n        ],\n        invalid: [\n          \"\",\n          \" \",\n          \"/\",\n          \"f/b\",\n          \"application\",\n          \"application\\\\json\",\n          \"application/json/text\",\n          \"application/json; charset=utf-8\",\n          \"audio/mp4; charset=utf-8\",\n          \"image/bmp; charset=utf-8\",\n          \"font/woff2; charset=utf-8\",\n          \"message/http; charset=utf-8\",\n          \"model/vnd.gtw; charset=utf-8\",\n          \"video/mp4; charset=utf-8\",\n        ],\n      });\n    });\n\n    it(\"should validate ISO6346 shipping containerID\", () => {\n      test({\n        validator: \"isISO6346\",\n        valid: [\n          \"HLXU2008419\",\n          \"TGHU7599330\",\n          \"ECMU4657496\",\n          \"MEDU6246078\",\n          \"YMLU2809976\",\n          \"MRKU0046221\",\n          \"EMCU3811879\",\n          \"OOLU8643084\",\n          \"HJCU1922713\",\n          \"QJRZ123456\",\n        ],\n        invalid: [\n          \"OOLU1922713\",\n          \"HJCU1922413\",\n          \"FCUI985619\",\n          \"ECMJ4657496\",\n          \"TBJA7176445\",\n          \"AFFU5962593\",\n        ],\n      });\n    });\n    it(\"should validate ISO6346 shipping containerID\", () => {\n      test({\n        validator: \"isFreightContainerID\",\n        valid: [\n          \"HLXU2008419\",\n          \"TGHU7599330\",\n          \"ECMU4657496\",\n          \"MEDU6246078\",\n          \"YMLU2809976\",\n          \"MRKU0046221\",\n          \"EMCU3811879\",\n          \"OOLU8643084\",\n          \"HJCU1922713\",\n          \"QJRZ123456\",\n        ],\n        invalid: [\n          \"OOLU1922713\",\n          \"HJCU1922413\",\n          \"FCUI985619\",\n          \"ECMJ4657496\",\n          \"TBJA7176445\",\n          \"AFFU5962593\",\n        ],\n      });\n    });\n\n    it(\"should validate ISO6346 shipping container IDs with checksum digit 10 represented as 0\", () => {\n      test({\n        validator: \"isISO6346\",\n        valid: [\n          \"APZU3789870\",\n          \"TEMU1002030\",\n          \"DFSU1704420\",\n          \"CMAU2221480\",\n          \"SEGU5060260\",\n          \"FCIU8939320\",\n          \"TRHU3495670\",\n          \"MEDU3871410\",\n          \"CMAU2184010\",\n          \"TCLU2265970\",\n        ],\n        invalid: [\n          \"APZU3789871\", // Incorrect check digit\n          \"TEMU1002031\",\n          \"DFSU1704421\",\n          \"CMAU2221481\",\n          \"SEGU5060261\",\n        ],\n      });\n    });\n    it(\"should validate ISO6346 shipping container IDs with checksum digit 10 represented as 0\", () => {\n      test({\n        validator: \"isFreightContainerID\",\n        valid: [\n          \"APZU3789870\",\n          \"TEMU1002030\",\n          \"DFSU1704420\",\n          \"CMAU2221480\",\n          \"SEGU5060260\",\n          \"FCIU8939320\",\n          \"TRHU3495670\",\n          \"MEDU3871410\",\n          \"CMAU2184010\",\n          \"TCLU2265970\",\n        ],\n        invalid: [\n          \"APZU3789871\", // Incorrect check digit\n          \"TEMU1002031\",\n          \"DFSU1704421\",\n          \"CMAU2221481\",\n          \"SEGU5060261\",\n        ],\n      });\n    });\n\n    // EU-UK valid numbers sourced from https://ec.europa.eu/taxation_customs/tin/specs/FS-TIN%20Algorithms-Public.docx or constructed by @tplessas.\n    it(\"should validate taxID\", () => {\n      test({\n        validator: \"isTaxID\",\n        args: [\"bg-BG\"],\n        valid: [\n          \"7501010010\",\n          \"0101010012\",\n          \"0111010010\",\n          \"7521010014\",\n          \"7541010019\",\n        ],\n        invalid: [\n          \"750101001\",\n          \"75010100101\",\n          \"75-01010/01 0\",\n          \"7521320010\",\n          \"7501010019\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"cs-CZ\"],\n        valid: [\n          \"530121999\",\n          \"530121/999\",\n          \"530121/9990\",\n          \"5301219990\",\n          \"1602295134\",\n          \"5451219994\",\n          \"0424175466\",\n          \"0532175468\",\n          \"7159079940\",\n        ],\n        invalid: [\n          \"53-0121 999\",\n          \"530121000\",\n          \"960121999\",\n          \"0124175466\",\n          \"0472301754\",\n          \"1975116400\",\n          \"7159079945\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"de-AT\"],\n        valid: [\"931736581\", \"93-173/6581\", \"93--173/6581\"],\n        invalid: [\"999999999\", \"93 173 6581\", \"93-173/65811\", \"93-173/658\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"de-DE\"],\n        valid: [\n          \"26954371827\",\n          \"86095742719\",\n          \"65929970489\",\n          \"79608434120\",\n          \"659/299/7048/9\",\n        ],\n        invalid: [\n          \"26954371828\",\n          \"86095752719\",\n          \"8609575271\",\n          \"860957527190\",\n          \"65299970489\",\n          \"65999970489\",\n          \"6592997048-9\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"dk-DK\"],\n        valid: [\n          \"010111-1113\",\n          \"0101110117\",\n          \"2110084008\",\n          \"2110489008\",\n          \"2110595002\",\n          \"2110197007\",\n          \"0101110117\",\n          \"0101110230\",\n        ],\n        invalid: [\n          \"010111/1113\",\n          \"010111111\",\n          \"01011111133\",\n          \"2110485008\",\n          \"2902034000\",\n          \"0101110630\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"el-CY\"],\n        valid: [\"00123123T\", \"99652156X\"],\n        invalid: [\n          \"99652156A\",\n          \"00124123T\",\n          \"00123123\",\n          \"001123123T\",\n          \"00 12-3123/T\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"el-GR\"],\n        valid: [\"758426713\", \"032792320\", \"054100004\"],\n        invalid: [\n          \"054100005\",\n          \"05410000\",\n          \"0541000055\",\n          \"05 4100005\",\n          \"05-410/0005\",\n          \"658426713\",\n          \"558426713\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"en-CA\"],\n        valid: [\n          \"000000000\",\n          \"521719666\",\n          \"469317481\",\n          \"120217450\",\n          \"480534858\",\n          \"325268597\",\n          \"336475660\",\n          \"744797853\",\n          \"130692544\",\n          \"046454286\",\n        ],\n        invalid: [\n          \"        \",\n          \"any value\",\n          \"012345678\",\n          \"111111111\",\n          \"999999999\",\n          \"657449110\",\n          \"74 47 978 53\",\n          \"744 797 853\",\n          \"744-797-853\",\n          \"981062432\",\n          \"267500713\",\n          \"2675o0713\",\n          \"70597312\",\n          \"7058973122\",\n          \"069437151\",\n          \"046454281\",\n          \"146452286\",\n          \"30x92544\",\n          \"30692544\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"en-GB\"],\n        valid: [\"1234567890\", \"AA123456A\", \"AA123456 \"],\n        invalid: [\n          \"GB123456A\",\n          \"123456789\",\n          \"12345678901\",\n          \"NK123456A\",\n          \"TN123456A\",\n          \"ZZ123456A\",\n          \"GB123456Z\",\n          \"DM123456A\",\n          \"AO123456A\",\n          \"GB-123456A\",\n          \"GB 123456 A\",\n          \"GB123456  \",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"en-IE\"],\n        valid: [\"1234567T\", \"1234567TW\", \"1234577W\", \"1234577WW\", \"1234577IA\"],\n        invalid: [\"1234567\", \"1234577WWW\", \"1234577A\", \"1234577JA\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"en-US\"],\n        valid: [\n          \"01-1234567\",\n          \"01 1234567\",\n          \"011234567\",\n          \"10-1234567\",\n          \"02-1234567\",\n          \"67-1234567\",\n          \"15-1234567\",\n          \"31-1234567\",\n          \"99-1234567\",\n        ],\n        invalid: [\n          \"0-11234567\",\n          \"01#1234567\",\n          \"01  1234567\",\n          \"01 1234 567\",\n          \"07-1234567\",\n          \"28-1234567\",\n          \"96-1234567\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"es-AR\"],\n        valid: [\n          \"20271633638\",\n          \"23274986069\",\n          \"27333234519\",\n          \"30678561165\",\n          \"33693450239\",\n          \"30534868460\",\n          \"23111111129\",\n          \"34557619099\",\n        ],\n        invalid: [\n          \"20-27163363-8\",\n          \"20.27163363.8\",\n          \"33693450231\",\n          \"69345023\",\n          \"693450233123123\",\n          \"3369ew50231\",\n          \"34557619095\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"es-ES\"],\n        valid: [\n          \"00054237A\",\n          \"54237A\",\n          \"X1234567L\",\n          \"Z1234567R\",\n          \"M2812345C\",\n          \"Y2812345B\",\n        ],\n        invalid: [\"M2812345CR\", \"A2812345C\", \"0/005 423-7A\", \"00054237U\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"et-EE\"],\n        valid: [\"10001010080\", \"46304280206\", \"37102250382\", \"32708101201\"],\n        invalid: [\n          \"46304280205\",\n          \"61002293333\",\n          \"4-6304 28/0206\",\n          \"4630428020\",\n          \"463042802066\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"fi-FI\"],\n        valid: [\"131052-308T\", \"131002+308W\", \"131019A3089\"],\n        invalid: [\n          \"131052308T\",\n          \"131052-308TT\",\n          \"131052S308T\",\n          \"13 1052-308/T\",\n          \"290219A1111\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"fr-BE\"],\n        valid: [\"00012511119\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"fr-FR\"],\n        valid: [\"30 23 217 600 053\", \"3023217600053\"],\n        invalid: [\n          \"30 2 3 217 600 053\",\n          \"3 023217-600/053\",\n          \"3023217600052\",\n          \"3023217500053\",\n          \"30232176000534\",\n          \"302321760005\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"nl-BE\"],\n        valid: [\"00012511148\", \"00/0125-11148\", \"00000011115\"],\n        invalid: [\n          \"00 01 2511148\",\n          \"01022911148\",\n          \"00013211148\",\n          \"0001251114\",\n          \"000125111480\",\n          \"00012511149\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"fr-LU\"],\n        valid: [\"1893120105732\"],\n        invalid: [\n          \"189312010573\",\n          \"18931201057322\",\n          \"1893 12-01057/32\",\n          \"1893120105742\",\n          \"1893120105733\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"lb-LU\"],\n        invalid: [\"2016023005732\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"hr-HR\"],\n        valid: [\"94577403194\"],\n        invalid: [\n          \"94 57-7403/194\",\n          \"9457740319\",\n          \"945774031945\",\n          \"94577403197\",\n          \"94587403194\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"hu-HU\"],\n        valid: [\"8071592153\"],\n        invalid: [\n          \"80 71-592/153\",\n          \"80715921534\",\n          \"807159215\",\n          \"8071592152\",\n          \"8071582153\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"lt-LT\"],\n        valid: [\"33309240064\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"it-IT\"],\n        valid: [\"DMLPRY77D15H501F\", \"AXXFAXTTD41H501D\"],\n        invalid: [\n          \"DML PRY/77D15H501-F\",\n          \"DMLPRY77D15H501\",\n          \"DMLPRY77D15H501FF\",\n          \"AAPPRY77D15H501F\",\n          \"DMLAXA77D15H501F\",\n          \"AXXFAX90A01Z001F\",\n          \"DMLPRY77B29H501F\",\n          \"AXXFAX3TD41H501E\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"lv-LV\"],\n        valid: [\"01011012344\", \"32579461005\", \"01019902341\", \"325794-61005\"],\n        invalid: [\"010110123444\", \"0101101234\", \"01001612345\", \"290217-22343\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"mt-MT\"],\n        valid: [\"1234567A\", \"882345608\", \"34581M\", \"199Z\"],\n        invalid: [\n          \"812345608\",\n          \"88234560\",\n          \"8823456088\",\n          \"11234567A\",\n          \"12/34-567 A\",\n          \"88 23-456/08\",\n          \"1234560A\",\n          \"0000000M\",\n          \"3200100G\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"nl-NL\"],\n        valid: [\"174559434\"],\n        invalid: [\"17455943\", \"1745594344\", \"17 455-94/34\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"pl-PL\"],\n        valid: [\n          \"2234567895\",\n          \"02070803628\",\n          \"02870803622\",\n          \"02670803626\",\n          \"01510813623\",\n        ],\n        invalid: [\n          \"020708036285\",\n          \"223456789\",\n          \"22 345-678/95\",\n          \"02 070-8036/28\",\n          \"2234567855\",\n          \"02223013623\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"pt-BR\"],\n        valid: [\n          \"35161990910\",\n          \"74407265027\",\n          \"05423994000172\",\n          \"11867044000130\",\n        ],\n        invalid: [\n          \"ABCDEFGH\",\n          \"170.691.440-72\",\n          \"11494282142\",\n          \"74405265037\",\n          \"11111111111\",\n          \"48469799384\",\n          \"94.592.973/0001-82\",\n          \"28592361000192\",\n          \"11111111111111\",\n          \"111111111111112\",\n          \"61938188550993\",\n          \"82168365502729\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"pt-PT\"],\n        valid: [\"299999998\", \"299992020\"],\n        invalid: [\"2999999988\", \"29999999\", \"29 999-999/8\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"ro-RO\"],\n        valid: [\n          \"8001011234563\",\n          \"9000123456789\",\n          \"1001011234560\",\n          \"3001011234564\",\n          \"5001011234568\",\n        ],\n        invalid: [\n          \"5001011234569\",\n          \"500 1011-234/568\",\n          \"500101123456\",\n          \"50010112345688\",\n          \"5001011504568\",\n          \"8000230234563\",\n          \"6000230234563\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"sk-SK\"],\n        valid: [\n          \"530121999\",\n          \"536221/999\",\n          \"031121999\",\n          \"520229999\",\n          \"1234567890\",\n        ],\n        invalid: [\n          \"53012199999\",\n          \"990101999\",\n          \"530121000\",\n          \"53012199\",\n          \"53-0121 999\",\n          \"535229999\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"sl-SI\"],\n        valid: [\"15012557\", \"15012590\"],\n        invalid: [\"150125577\", \"1501255\", \"15 01-255/7\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"sv-SE\"],\n        valid: [\n          \"640823-3234\",\n          \"640883-3231\",\n          \"6408833231\",\n          \"19640823-3233\",\n          \"196408233233\",\n          \"19640883-3230\",\n          \"200228+5266\",\n          \"20180101-5581\",\n        ],\n        invalid: [\n          \"640823+3234\",\n          \"160230-3231\",\n          \"160260-3231\",\n          \"160260-323\",\n          \"160260323\",\n          \"640823+323\",\n          \"640823323\",\n          \"640823+32344\",\n          \"64082332344\",\n          \"19640823-32333\",\n          \"1964082332333\",\n        ],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"uk-UA\"],\n        valid: [\"3006321856\", \"3003102490\", \"2164212906\"],\n        invalid: [\"2565975632\", \"256597563287\", \"КС00123456\", \"2896235845\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        valid: [\"01-1234567\"],\n      });\n      test({\n        validator: \"isTaxID\",\n        args: [\"is-NOT\"],\n        error: [\n          \"01-1234567\",\n          \"01 1234567\",\n          \"011234567\",\n          \"0-11234567\",\n          \"01#1234567\",\n          \"01  1234567\",\n          \"01 1234 567\",\n          \"07-1234567\",\n          \"28-1234567\",\n          \"96-1234567\",\n        ],\n      });\n    });\n\n    it(\"should validate slug\", () => {\n      test({\n        validator: \"isSlug\",\n        valid: [\n          \"foo\",\n          \"foo-bar\",\n          \"foo_bar\",\n          \"foo-bar-foo\",\n          \"foo-bar_foo\",\n          \"foo-bar_foo*75-b4r-**_foo\",\n          \"foo-bar_foo*75-b4r-**_foo-&&\",\n        ],\n        invalid: [\n          \"not-----------slug\",\n          \"@#_$@\",\n          \"-not-slug\",\n          \"not-slug-\",\n          \"_not-slug\",\n          \"not-slug_\",\n          \"not slug\",\n        ],\n      });\n    });\n\n    it(\"should validate strong passwords\", () => {\n      test({\n        validator: \"isStrongPassword\",\n        args: [\n          {\n            minLength: 8,\n            minLowercase: 1,\n            minUppercase: 1,\n            minNumbers: 1,\n            minSymbols: 1,\n          },\n        ],\n        valid: [\n          '%2%k{7BsL\"M%Kd6e',\n          \"EXAMPLE of very long_password123!\",\n          \"mxH_+2vs&54_+H3P\",\n          \"+&DxJ=X7-4L8jRCD\",\n          \"etV*p%Nr6w&H%FeF\",\n          \"£3.ndSau_7\",\n          \"VaLIDWith\\\\Symb0l\",\n        ],\n        invalid: [\n          \"\",\n          \"password\",\n          \"hunter2\",\n          \"hello world\",\n          \"passw0rd\",\n          \"password!\",\n          \"PASSWORD!\",\n        ],\n      });\n    });\n\n    it(\"should validate date\", () => {\n      test({\n        validator: \"isDate\",\n        valid: [\n          new Date(),\n          new Date(2014, 2, 15),\n          new Date(\"2014-03-15\"),\n          \"2020/02/29\",\n          \"2020-02-19\",\n        ],\n        invalid: [\n          \"\",\n          \"15072002\",\n          null,\n          undefined,\n          { year: 2002, month: 7, day: 15 },\n          42,\n          {\n            toString() {\n              return \"[object Date]\";\n            },\n          }, // faking\n          \"2020-02-30\", // invalid date\n          \"2019-02-29\", // non-leap year\n          \"2020-04-31\", // invalid date\n          \"2020/03-15\", // mixed delimiter\n          \"-2020-04-19\",\n          \"-2023/05/24\",\n          \"abc-2023/05/24\",\n          \"2024\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01-\",\n          \"2024-05-01-abc\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [\"DD/MM/YYYY\"], // old format for backward compatibility\n        valid: [\"15-07-2002\", \"15/07/2002\"],\n        invalid: [\n          \"15/7/2002\",\n          \"15-7-2002\",\n          \"15/7/02\",\n          \"15-7-02\",\n          \"15-07/2002\",\n          \"2024\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01-\",\n          \"2024-05-01-abc\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n          \"15/\",\n          \"15/07\",\n          \"15/07/\",\n          \"15/07/2024/\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ format: \"DD/MM/YYYY\" }],\n        valid: [\"15-07-2002\", \"15/07/2002\"],\n        invalid: [\n          \"15/7/2002\",\n          \"15-7-2002\",\n          \"15/7/02\",\n          \"15-7-02\",\n          \"15-07/2002\",\n          \"2024\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01-\",\n          \"2024-05-01-abc\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n          \"15/\",\n          \"15/07\",\n          \"15/07/\",\n          \"15/07/2024/\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ format: \"DD/MM/YY\" }],\n        valid: [\"15-07-02\", \"15/07/02\"],\n        invalid: [\n          \"15/7/2002\",\n          \"15-7-2002\",\n          \"15/07-02\",\n          \"30/04/--\",\n          \"2024\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01-\",\n          \"2024-05-01-abc\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n          \"15/\",\n          \"15/07\",\n          \"15/07/\",\n          \"15/07/2024/\",\n          \"15/07/24/\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ format: \"D/M/YY\" }],\n        valid: [\"5-7-02\", \"5/7/02\"],\n        invalid: [\n          \"5/07/02\",\n          \"15/7/02\",\n          \"15-7-02\",\n          \"5/7-02\",\n          \"3/4/aa\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n          \"15/\",\n          \"15/07\",\n          \"15/07/\",\n          \"15/07/2024/\",\n          \"15/07/24/\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ format: \"DD/MM/YYYY\", strictMode: true }],\n        valid: [\"15/07/2002\"],\n        invalid: [\n          \"15-07-2002\",\n          \"15/7/2002\",\n          \"15-7-2002\",\n          \"15/7/02\",\n          \"15-7-02\",\n          \"15-07/2002\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n          \"15/\",\n          \"15/07\",\n          \"15/07/\",\n          \"15/07/2024/\",\n          \"15/07/24/\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ strictMode: true }],\n        valid: [\"2020/01/15\", \"2014/02/15\", \"2014/03/15\", \"2020/02/29\"],\n        invalid: [\n          \"2014-02-15\",\n          \"2020-02-29\",\n          \"15-07/2002\",\n          new Date(),\n          new Date(2014, 2, 15),\n          new Date(\"2014-03-15\"),\n          \"-2020-04-19\",\n          \"-2023/05/24\",\n          \"abc-2023/05/24\",\n          \"2024\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01-\",\n          \"2024-05-01-abc\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ delimiters: [\"/\", \" \"] }],\n        valid: [\n          new Date(),\n          new Date(2014, 2, 15),\n          new Date(\"2014-03-15\"),\n          \"2020/02/29\",\n          \"2020 02 29\",\n        ],\n        invalid: [\n          \"2020-02-29\",\n          \"\",\n          \"15072002\",\n          null,\n          undefined,\n          { year: 2002, month: 7, day: 15 },\n          42,\n          {\n            toString() {\n              return \"[object Date]\";\n            },\n          },\n          \"2020/02/30\",\n          \"2019/02/29\",\n          \"2020/04/31\",\n          \"2020/03-15\",\n          \"-2020-04-19\",\n          \"-2023/05/24\",\n          \"abc-2023/05/24\",\n          \"2024\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01-\",\n          \"2024-05-01-abc\",\n          \"2024/\",\n          \"2024/05\",\n          \"2024/05/\",\n          \"2024/05/01/\",\n          \"2024/05/01/abc\",\n          \"2024 05 01 abc\",\n        ],\n      });\n      test({\n        validator: \"isDate\",\n        args: [{ format: \"MM.DD.YYYY\", delimiters: [\".\"], strictMode: true }],\n        valid: [\"01.15.2020\", \"02.15.2014\", \"03.15.2014\", \"02.29.2020\"],\n        invalid: [\n          \"2014-02-15\",\n          \"2020-02-29\",\n          \"15-07/2002\",\n          new Date(),\n          new Date(2014, 2, 15),\n          new Date(\"2014-03-15\"),\n          \"29.02.2020\",\n          \"02.29.2020.20\",\n          \"2024-\",\n          \"2024-05\",\n          \"2024-05-\",\n          \"2024-05-01\",\n          \"-2020-04-19\",\n          \"-2023/05/24\",\n          \"abc-2023/05/24\",\n          \"04.05.2024.\",\n          \"04.05.2024.abc\",\n          \"abc.04.05.2024\",\n        ],\n      });\n    });\n    it(\"should validate time\", () => {\n      test({\n        validator: \"isTime\",\n        valid: [\"00:00\", \"23:59\", \"9:00\"],\n        invalid: [\n          \"\",\n          null,\n          undefined,\n          0,\n          \"07:00 PM\",\n          \"23\",\n          \"00:60\",\n          \"00:\",\n          \"01:0 \",\n          \"001:01\",\n        ],\n      });\n      test({\n        validator: \"isTime\",\n        args: [{ hourFormat: \"hour24\", mode: \"withSeconds\" }],\n        valid: [\"23:59:59\", \"00:00:00\", \"9:50:01\"],\n        invalid: [\n          \"\",\n          null,\n          undefined,\n          23,\n          \"01:00:01 PM\",\n          \"13:00:\",\n          \"00\",\n          \"26\",\n          \"00;01\",\n          \"0 :09\",\n          \"59:59:59\",\n          \"24:00:00\",\n          \"00:59:60\",\n          \"99:99:99\",\n          \"009:50:01\",\n        ],\n      });\n      test({\n        validator: \"isTime\",\n        args: [{ hourFormat: \"hour24\", mode: \"withOptionalSeconds\" }],\n        valid: [\"23:59:59\", \"00:00:00\", \"9:50:01\", \"00:00\", \"23:59\", \"9:00\"],\n        invalid: [\n          \"\",\n          null,\n          undefined,\n          23,\n          \"01:00:01 PM\",\n          \"13:00:\",\n          \"00\",\n          \"26\",\n          \"00;01\",\n          \"0 :09\",\n          \"59:59:59\",\n          \"24:00:00\",\n          \"00:59:60\",\n          \"99:99:99\",\n          \"009:50:01\",\n        ],\n      });\n      test({\n        validator: \"isTime\",\n        args: [{ hourFormat: \"hour12\" }],\n        valid: [\"12:59 PM\", \"12:59 AM\", \"01:00 PM\", \"01:00 AM\", \"7:00 AM\"],\n        invalid: [\n          \"\",\n          null,\n          undefined,\n          0,\n          \"12:59 MM\",\n          \"12:59 MA\",\n          \"12:59 PA\",\n          \"12:59 A M\",\n          \"13:00 PM\",\n          \"23\",\n          \"00:60\",\n          \"00:\",\n          \"9:00\",\n          \"01:0 \",\n          \"001:01\",\n          \"12:59:00 PM\",\n          \"12:59:00 A M\",\n          \"12:59:00 \",\n        ],\n      });\n      test({\n        validator: \"isTime\",\n        args: [{ hourFormat: \"hour12\", mode: \"withSeconds\" }],\n        valid: [\"12:59:59 PM\", \"2:34:45 AM\", \"7:00:00 AM\"],\n        invalid: [\n          \"\",\n          null,\n          undefined,\n          23,\n          \"01:00: 1 PM\",\n          \"13:00:\",\n          \"13:00:00 PM\",\n          \"00\",\n          \"26\",\n          \"00;01\",\n          \"0 :09\",\n          \"59:59:59\",\n          \"24:00:00\",\n          \"00:59:60\",\n          \"99:99:99\",\n          \"9:50:01\",\n          \"009:50:01\",\n        ],\n      });\n      test({\n        validator: \"isTime\",\n        args: [{ hourFormat: \"hour12\", mode: \"withOptionalSeconds\" }],\n        valid: [\n          \"12:59:59 PM\",\n          \"2:34:45 AM\",\n          \"7:00:00 AM\",\n          \"12:59 PM\",\n          \"12:59 AM\",\n          \"01:00 PM\",\n          \"01:00 AM\",\n          \"7:00 AM\",\n        ],\n        invalid: [\n          \"\",\n          null,\n          undefined,\n          23,\n          \"01:00: 1 PM\",\n          \"13:00:\",\n          \"00\",\n          \"26\",\n          \"00;01\",\n          \"0 :09\",\n          \"59:59:59\",\n          \"24:00:00\",\n          \"00:59:60\",\n          \"99:99:99\",\n          \"9:50:01\",\n          \"009:50:01\",\n        ],\n      });\n    });\n    it(\"should be valid license plate\", () => {\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"es-AR\"],\n        valid: [\"AB 123 CD\", \"AB123CD\", \"ABC 123\", \"ABC123\"],\n        invalid: [\n          \"\",\n          \"notalicenseplate\",\n          \"AB-123-CD\",\n          \"ABC-123\",\n          \"AABC 123\",\n          \"AB CDE FG\",\n          \"ABC DEF\",\n          \"12 ABC 34\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"pt-PT\"],\n        valid: [\n          \"AA-12-34\",\n          \"12-AA-34\",\n          \"12-34-AA\",\n          \"AA-12-AA\",\n          \"AA·12·34\",\n          \"12·AB·34\",\n          \"12·34·AB\",\n          \"AB·34·AB\",\n          \"AA 12 34\",\n          \"12 AA 34\",\n          \"12 34 AA\",\n          \"AB 12 CD\",\n          \"AA1234\",\n          \"12AA34\",\n          \"1234AA\",\n          \"AB12CD\",\n        ],\n        invalid: [\n          \"\",\n          \"notalicenseplate\",\n          \"AA-AA-00\",\n          \"00-AA-AA\",\n          \"AA-AA-AA\",\n          \"00-00-00\",\n          \"AA·AA·00\",\n          \"00·AA·AA\",\n          \"AA·AA·AA\",\n          \"00·00·00\",\n          \"AA AA 00\",\n          \"00 AA AA\",\n          \"AA AA AA\",\n          \"00 00 00\",\n          \"A1-B2-C3\",\n          \"1A-2B-3C\",\n          \"ABC-1-EF\",\n          \"AB-C1D-EF\",\n          \"AB-C1-DEF\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"de-LI\"],\n        valid: [\"FL 1\", \"FL 99999\", \"FL 1337\"],\n        invalid: [\"\", \"FL 999999\", \"AB 12345\", \"FL -1\"],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"de-DE\"],\n        valid: [\n          \"M A 1\",\n          \"M A 12\",\n          \"M A 123\",\n          \"M A 1234\",\n          \"M AB 1\",\n          \"M AB 12\",\n          \"M AB 123\",\n          \"M AB 1234\",\n          \"FS A 1\",\n          \"FS A 12\",\n          \"FS A 123\",\n          \"FS A 1234\",\n          \"FS AB 1\",\n          \"FS AB 12\",\n          \"FS AB 123\",\n          \"FS AB 1234\",\n          \"FSAB1234\",\n          \"FS-AB-1234\",\n          \"FS AB 1234 H\",\n          \"FS AB 1234 E\",\n          \"FSAB1234E\",\n          \"FS-AB-1234-E\",\n          \"FS AB-1234-E\",\n          \"FSAB1234 E\",\n          \"FS AB1234E\",\n          \"LRO AB 123\",\n          \"LRO-AB-123-E\",\n          \"LRO-AB-123E\",\n          \"LRO-AB-123 E\",\n          \"LRO-AB-123-H\",\n          \"LRO-AB-123H\",\n          \"LRO-AB-123 H\",\n        ],\n        invalid: [\n          \"YY AB 123\",\n          \"PAF AB 1234\",\n          \"M ABC 123\",\n          \"M AB 12345\",\n          \"FS AB 1234 A\",\n          \"LRO-AB-1234\",\n          \"HRO ABC 123\",\n          \"HRO ABC 1234\",\n          \"LDK-AB-1234-E\",\n          \"ÖHR FA 123D\",\n          \"MZG-AB-123X\",\n          \"OBG-ABD-123\",\n          \"PAF-AB2-123\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"fi-FI\"],\n        valid: [\n          \"ABC-123\",\n          \"ABC 123\",\n          \"ABC123\",\n          \"A100\",\n          \"A 100\",\n          \"A-100\",\n          \"C10001\",\n          \"C 10001\",\n          \"C-10001\",\n          \"123-ABC\",\n          \"123 ABC\",\n          \"123ABC\",\n          \"123-A\",\n          \"123 A\",\n          \"123A\",\n          \"199AA\",\n          \"199 AA\",\n          \"199-AA\",\n        ],\n        invalid: [\n          \" \",\n          \"A-1\",\n          \"A1A-100\",\n          \"1-A-2\",\n          \"C1234567\",\n          \"A B C 1 2 3\",\n          \"abc-123\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"sq-AL\"],\n        valid: [\"AA 000 AA\", \"ZZ 999 ZZ\"],\n        invalid: [\"\", \"AA 0 A\", \"AAA 00 AAA\"],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"cs-CZ\"],\n        valid: [\n          \"ALA4011\",\n          \"4A23000\",\n          \"DICTAT0R\",\n          \"VETERAN\",\n          \"AZKVIZ8\",\n          \"2A45876\",\n          \"DIC-TAT0R\",\n        ],\n        invalid: [\n          \"\",\n          \"invalidlicenseplate\",\n          \"LN5758898\",\n          \"X-|$|-X\",\n          \"AE0F-OP4\",\n          \"GO0MER\",\n          \"2AAAAAAAA\",\n          \"FS AB 1234 E\",\n          \"GB999 9999 00\",\n        ],\n      });\n\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"pt-BR\"],\n        valid: [\n          \"ABC1234\",\n          \"ABC 1234\",\n          \"ABC-1234\",\n          \"ABC1D23\",\n          \"ABC1K23\",\n          \"ABC1Z23\",\n          \"ABC 1D23\",\n          \"ABC-1D23\",\n        ],\n        invalid: [\"\", \"AA 0 A\", \"AAA 00 AAA\", \"ABCD123\", \"AB12345\", \"AB123DC\"],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"hu-HU\"],\n        valid: [\n          \"AAB-001\",\n          \"AVC-987\",\n          \"KOC-124\",\n          \"JCM-871\",\n          \"AWQ-777\",\n          \"BPO-001\",\n          \"BPI-002\",\n          \"UCO-342\",\n          \"UDO-385\",\n          \"XAO-987\",\n          \"AAI-789\",\n          \"ABI-789\",\n          \"ACI-789\",\n          \"AAO-789\",\n          \"ABO-789\",\n          \"ACO-789\",\n          \"YAA-123\",\n          \"XAA-123\",\n          \"WAA-258\",\n          \"XZZ-784\",\n          \"M123456\",\n          \"CK 12-34\",\n          \"DT 12-34\",\n          \"CD 12-34\",\n          \"HC 12-34\",\n          \"HB 12-34\",\n          \"HK 12-34\",\n          \"MA 12-34\",\n          \"OT 12-34\",\n          \"RR 17-87\",\n          \"CD 124-348\",\n          \"C-C 2021\",\n          \"C-X 2458\",\n          \"X-A 7842\",\n          \"E-72345\",\n          \"Z-07458\",\n          \"S ACF 83\",\n          \"SP 04-68\",\n        ],\n        invalid: [\n          \"AAA-547\",\n          \"aab-001\",\n          \"AAB 001\",\n          \"AB34\",\n          \"789-LKJ\",\n          \"BBO-987\",\n          \"BBI-987\",\n          \"BWQ-777\",\n          \"BQW-987\",\n          \"BAI-789\",\n          \"BBI-789\",\n          \"BCI-789\",\n          \"BAO-789\",\n          \"BBO-789\",\n          \"BCO-789\",\n          \"ADI-789\",\n          \"ADO-789\",\n          \"KOC-1234\",\n          \"M1234567\",\n          \"W-12345\",\n          \"S BCF 83\",\n          \"X-D 1234\",\n          \"C-D 1234\",\n          \"HU 12-34\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"any\"],\n        valid: [\"FL 1\", \"FS AB 123\"],\n        invalid: [\"\", \"FL 999999\", \"FS AB 1234 A\"],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"asdfasdf\"],\n        error: [\"FL 1\", \"FS AB 123\", \"FL 999999\", \"FS AB 1234 A\"],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"sv-SE\"],\n        valid: [\n          \"ABC 123\",\n          \"ABC 12A\",\n          \"ABC123\",\n          \"ABC12A\",\n          \"A WORD\",\n          \"WORD\",\n          \"ÅSNA\",\n          \"EN VARG\",\n          \"CERISE\",\n          \"AA\",\n          \"ABCDEFG\",\n          \"ÅÄÖ\",\n          \"ÅÄÖ ÅÄÖ\",\n        ],\n        invalid: [\n          \"\",\n          \"    \",\n          \"IQV 123\",\n          \"IQV123\",\n          \"ABI 12Q\",\n          \"ÅÄÖ 123\",\n          \"ÅÄÖ 12A\",\n          \"AB1 A23\",\n          \"AB1 12A\",\n          \"lower\",\n          \"abc 123\",\n          \"abc 12A\",\n          \"abc 12a\",\n          \"AbC 12a\",\n          \"WORDLONGERTHANSEVENCHARACTERS\",\n          \"A\",\n          \"ABC-123\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"en-IN\"],\n        valid: [\n          \"MH 04 AD 0001\",\n          \"HR26DQ0001\",\n          \"WB-04-ZU-2001\",\n          \"KL 18 X 5800\",\n          \"DL 4 CAF 4856\",\n          \"KA-41CE-5289\",\n          \"GJ 04-AD 5822\",\n        ],\n        invalid: [\n          \"mh04ad0045\",\n          \"invalidlicenseplate\",\n          \"4578\",\n          \"\",\n          \"GJ054GH4785\",\n        ],\n      });\n      test({\n        validator: \"isLicensePlate\",\n        args: [\"en-SG\"],\n        valid: [\"SGX 1234 A\", \"SGX-1234-A\", \"SGB1234Z\"],\n        invalid: [\"sg1234a\", \"invalidlicenseplate\", \"4578\", \"\", \"GJ054GH4785\"],\n      });\n    });\n    it(\"should validate VAT numbers\", () => {\n      test({\n        validator: \"isVAT\",\n        args: [\"AT\"],\n        valid: [\"ATU12345678\", \"U12345678\"],\n        invalid: [\"AT 12345678\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"BE\"],\n        valid: [\"BE1234567890\", \"1234567890\"],\n        invalid: [\"BE 1234567890\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"BG\"],\n        valid: [\"BG1234567890\", \"1234567890\", \"BG123456789\", \"123456789\"],\n        invalid: [\"BG 1234567890\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"HR\"],\n        valid: [\"HR12345678901\", \"12345678901\"],\n        invalid: [\"HR 12345678901\", \"1234567890\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CY\"],\n        valid: [\"CY123456789\", \"123456789\"],\n        invalid: [\"CY 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CZ\"],\n        valid: [\n          \"CZ1234567890\",\n          \"CZ123456789\",\n          \"CZ12345678\",\n          \"1234567890\",\n          \"123456789\",\n          \"12345678\",\n        ],\n        invalid: [\"CZ 123456789\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"DK\"],\n        valid: [\"DK12345678\", \"12345678\"],\n        invalid: [\"DK 12345678\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"EE\"],\n        valid: [\"EE123456789\", \"123456789\"],\n        invalid: [\"EE 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"FI\"],\n        valid: [\"FI12345678\", \"12345678\"],\n        invalid: [\"FI 12345678\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"FR\"],\n        valid: [\"FRAA123456789\", \"AA123456789\"],\n        invalid: [\"FR AA123456789\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"DE\"],\n        valid: [\"DE123456789\", \"123456789\"],\n        invalid: [\"DE 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"EL\"],\n        valid: [\"EL123456789\", \"123456789\"],\n        invalid: [\"EL 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"HU\"],\n        valid: [\"HU12345678\", \"12345678\"],\n        invalid: [\"HU 12345678\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"IE\"],\n        valid: [\"IE1234567AW\", \"1234567AW\"],\n        invalid: [\"IE 1234567\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"IT\"],\n        valid: [\"IT12345678910\", \"12345678910\"],\n        invalid: [\n          \"IT12345678 910\",\n          \"IT 123456789101\",\n          \"IT123456789101\",\n          \"GB12345678910\",\n          \"IT123456789\",\n        ],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"LV\"],\n        valid: [\"LV12345678901\", \"12345678901\"],\n        invalid: [\"LV 12345678901\", \"1234567890\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"LT\"],\n        valid: [\n          \"LT123456789012\",\n          \"123456789012\",\n          \"LT12345678901\",\n          \"12345678901\",\n          \"LT1234567890\",\n          \"1234567890\",\n          \"LT123456789\",\n          \"123456789\",\n        ],\n        invalid: [\"LT 123456789012\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"LU\"],\n        valid: [\"LU12345678\", \"12345678\"],\n        invalid: [\"LU 12345678\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"MT\"],\n        valid: [\"MT12345678\", \"12345678\"],\n        invalid: [\"MT 12345678\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"NL\"],\n        valid: [\"NL123456789B10\", \"123456789B10\"],\n        invalid: [\n          \"NL12345678 910\",\n          \"NL 123456789101\",\n          \"NL123456789B1\",\n          \"GB12345678910\",\n          \"NL123456789\",\n        ],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"PL\"],\n        valid: [\n          \"PL1234567890\",\n          \"1234567890\",\n          \"PL123-456-78-90\",\n          \"123-456-78-90\",\n          \"PL123-45-67-890\",\n          \"123-45-67-890\",\n        ],\n        invalid: [\"PL 1234567890\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"PT\"],\n        valid: [\"PT123456789\", \"123456789\"],\n        invalid: [\"PT 123456789\", \"000000001\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"RO\"],\n        valid: [\"RO1234567890\", \"1234567890\", \"RO12\", \"12\"],\n        invalid: [\"RO 12\", \"1\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"SK\"],\n        valid: [\"SK1234567890\", \"1234567890\"],\n        invalid: [\"SK 1234567890\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"SI\"],\n        valid: [\"SI12345678\", \"12345678\"],\n        invalid: [\"SI 12345678\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"ES\"],\n        valid: [\"ESA1234567A\", \"A1234567A\"],\n        invalid: [\"ES 1234567A\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"SE\"],\n        valid: [\"SE123456789012\", \"123456789012\"],\n        invalid: [\"SE 123456789012\", \"12345678901\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"AL\"],\n        valid: [\"AL123456789A\", \"123456789A\"],\n        invalid: [\"AL 123456789A\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"MK\"],\n        valid: [\"MK1234567890123\", \"1234567890123\"],\n        invalid: [\"MK 1234567890123\", \"123456789012\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"AU\"],\n        valid: [\n          \"AU53004085616\",\n          \"53004085616\",\n          \"AU65613309809\",\n          \"65613309809\",\n          \"AU34118972998\",\n          \"34118972998\",\n        ],\n        invalid: [\n          \"AU65613309808\",\n          \"65613309808\",\n          \"AU55613309809\",\n          \"55613309809\",\n          \"AU65613319809\",\n          \"65613319809\",\n          \"AU34117972998\",\n          \"34117972998\",\n          \"AU12345678901\",\n          \"12345678901\",\n          \"AU 12345678901\",\n          \"1234567890\",\n        ],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"BY\"],\n        valid: [\"УНП 123456789\", \"123456789\"],\n        invalid: [\"BY 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CA\"],\n        valid: [\"CA123456789\", \"123456789\"],\n        invalid: [\"CA 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"IS\"],\n        valid: [\"IS123456\", \"12345\"],\n        invalid: [\"IS 12345\", \"1234\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"IN\"],\n        valid: [\"IN123456789012345\", \"123456789012345\"],\n        invalid: [\"IN 123456789012345\", \"12345678901234\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"ID\"],\n        valid: [\n          \"ID123456789012345\",\n          \"123456789012345\",\n          \"ID12.345.678.9-012.345\",\n          \"12.345.678.9-012.345\",\n        ],\n        invalid: [\"ID 123456789012345\", \"12345678901234\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"IL\"],\n        valid: [\"IL123456789\", \"123456789\"],\n        invalid: [\"IL 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"KZ\"],\n        valid: [\"KZ123456789012\", \"123456789012\"],\n        invalid: [\"KZ 123456789012\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"NZ\"],\n        valid: [\"NZ123456789\", \"123456789\"],\n        invalid: [\"NZ 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"NG\"],\n        valid: [\n          \"NG123456789012\",\n          \"123456789012\",\n          \"NG12345678-9012\",\n          \"12345678-9012\",\n        ],\n        invalid: [\"NG 123456789012\", \"12345678901\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"NO\"],\n        valid: [\"NO123456789MVA\", \"123456789MVA\"],\n        invalid: [\"NO 123456789MVA\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"PH\"],\n        valid: [\n          \"PH123456789012\",\n          \"123456789012\",\n          \"PH123 456 789 012\",\n          \"123 456 789 012\",\n        ],\n        invalid: [\"PH 123456789012\", \"12345678901\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"RU\"],\n        valid: [\"RU1234567890\", \"1234567890\", \"RU123456789012\", \"123456789012\"],\n        invalid: [\"RU 123456789012\", \"12345678901\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"SM\"],\n        valid: [\"SM12345\", \"12345\"],\n        invalid: [\"SM 12345\", \"1234\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"SA\"],\n        valid: [\"SA123456789012345\", \"123456789012345\"],\n        invalid: [\"SA 123456789012345\", \"12345678901234\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"RS\"],\n        valid: [\"RS123456789\", \"123456789\"],\n        invalid: [\"RS 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CH\"],\n        valid: [\n          // strictly valid\n          \"CHE-116.281.710 MWST\",\n          \"CHE-116.281.710 IVA\",\n          \"CHE-116.281.710 TVA\",\n          // loosely valid presentation variants\n          \"CHE 116 281 710 IVA\", // all separators are spaces\n          \"CHE-191.398.369MWST\", // no space before suffix\n          \"CHE-116281710 MWST\", // no number separators\n          \"CHE-116281710MWST\", // no number separators and no space before suffix\n          \"CHE105854263MWST\", // no separators\n          \"CHE-116.285.524\", // no suffix (vat abbreviation)\n          \"CHE116281710\", // no suffix and separators\n          \"116.281.710 TVA\", // no prefix (CHE, ISO-3166-1 Alpha-3)\n          \"116281710MWST\", // no prefix and separators\n          \"100.218.485\", // no prefix and suffix\n          \"123456788\", // no prefix, separators and suffix\n        ],\n        invalid: [\n          \"CH-116.281.710 MWST\", // invalid prefix (should be CHE)\n          \"CHE-116.281 MWST\", // invalid number of digits (should be 9)\n          \"CHE-123.456.789 MWST\", // invalid last digit (should match the calculated check-number 8)\n          \"CHE-123.356.780 MWST\", // invalid check-number (there are no swiss UIDs with the calculated check number 10)\n          \"CH-116.281.710 VAT\", // invalid suffix (should be MWST, IVA or TVA)\n          \"CHE-116/281/710 IVA\", // invalid number separators (should be all dots or all spaces)\n        ],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"TR\"],\n        valid: [\"TR1234567890\", \"1234567890\"],\n        invalid: [\"TR 1234567890\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"UA\"],\n        valid: [\"UA123456789012\", \"123456789012\"],\n        invalid: [\"UA 123456789012\", \"12345678901\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"GB\"],\n        valid: [\n          \"GB999 9999 00\",\n          \"GB999 9999 96\",\n          \"GB999999999 999\",\n          \"GBGD000\",\n          \"GBGD499\",\n          \"GBHA500\",\n          \"GBHA999\",\n        ],\n        invalid: [\n          \"GB999999900\",\n          \"GB999999996\",\n          \"GB999 9999 97\",\n          \"GB999999999999\",\n          \"GB999999999 9999\",\n          \"GB9999999999 999\",\n          \"GBGD 000\",\n          \"GBGD 499\",\n          \"GBHA 500\",\n          \"GBHA 999\",\n          \"GBGD500\",\n          \"GBGD999\",\n          \"GBHA000\",\n          \"GBHA499\",\n        ],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"UZ\"],\n        valid: [\"UZ123456789\", \"123456789\"],\n        invalid: [\"UZ 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"AR\"],\n        valid: [\"AR12345678901\", \"12345678901\"],\n        invalid: [\"AR 12345678901\", \"1234567890\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"BO\"],\n        valid: [\"BO1234567\", \"1234567\"],\n        invalid: [\"BO 1234567\", \"123456\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"BR\"],\n        valid: [\n          \"BR12.345.678/9012-34\",\n          \"12.345.678/9012-34\",\n          \"BR123.456.789-01\",\n          \"123.456.789-01\",\n        ],\n        invalid: [\"BR 12.345.678/9012-34\", \"12345678901234\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CL\"],\n        valid: [\"CL12345678-9\", \"12345678-9\"],\n        invalid: [\"CL 12345678-9\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CO\"],\n        valid: [\"CO1234567890\", \"1234567890\"],\n        invalid: [\"CO 1234567890\", \"123456789\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"CR\"],\n        valid: [\"CR123456789012\", \"123456789012\", \"CR123456789\", \"123456789\"],\n        invalid: [\"CR 123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"EC\"],\n        valid: [\"EC1234567890123\", \"1234567890123\"],\n        invalid: [\"EC 1234567890123\", \"123456789012\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"SV\"],\n        valid: [\"SV1234-567890-123-1\", \"1234-567890-123-1\"],\n        invalid: [\"SV 1234-567890-123-1\", \"1234567890123\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"GT\"],\n        valid: [\"GT1234567-8\", \"1234567-8\"],\n        invalid: [\"GT 1234567-8\", \"1234567\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"HN\"],\n        valid: [\"HN\"],\n        invalid: [\"HN \"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"MX\"],\n        valid: [\n          \"MXABCD123456EFG\",\n          \"ABCD123456EFG\",\n          \"MXABC123456DEF\",\n          \"ABC123456DEF\",\n        ],\n        invalid: [\"MX ABC123456EFG\", \"123456\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"NI\"],\n        valid: [\"NI123-456789-0123A\", \"123-456789-0123A\"],\n        invalid: [\"NI 123-456789-0123A\", \"1234567890123\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"PA\"],\n        valid: [\"PA\"],\n        invalid: [\"PA \"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"PY\"],\n        valid: [\"PY12345678-9\", \"12345678-9\", \"PY123456-7\", \"123456-7\"],\n        invalid: [\"PY 123456-7\", \"123456\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"PE\"],\n        valid: [\"PE12345678901\", \"12345678901\"],\n        invalid: [\"PE 12345678901\", \"1234567890\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"DO\"],\n        valid: [\n          \"DO12345678901\",\n          \"12345678901\",\n          \"DO123-4567890-1\",\n          \"123-4567890-1\",\n          \"DO123456789\",\n          \"123456789\",\n          \"DO1-23-45678-9\",\n          \"1-23-45678-9\",\n        ],\n        invalid: [\"DO 12345678901\", \"1234567890\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"UY\"],\n        valid: [\"UY123456789012\", \"123456789012\"],\n        invalid: [\"UY 123456789012\", \"12345678901\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"VE\"],\n        valid: [\n          \"VEJ-123456789\",\n          \"J-123456789\",\n          \"VEJ-12345678-9\",\n          \"J-12345678-9\",\n        ],\n        invalid: [\"VE J-123456789\", \"12345678\"],\n      });\n      test({\n        validator: \"isVAT\",\n        args: [\"invalidCountryCode\"],\n        error: [\"GB999 9999 00\"],\n      });\n    });\n    it(\"should validate mailto URI\", () => {\n      test({\n        validator: \"isMailtoURI\",\n        valid: [\n          \"mailto:?subject=something&[email protected]\",\n          \"mailto:?subject=something&[email protected],[email protected],\",\n          \"mailto:?subject=something&[email protected]\",\n          \"mailto:?subject=something&[email protected],[email protected]\",\n          \"mailto:[email protected],[email protected]\",\n          \"mailto:[email protected],[email protected]\",\n          \"mailto:[email protected]\",\n          \"mailto:[email protected]\",\n          \"mailto:?subject=something&body=something else\",\n          \"mailto:?subject=something&body=something else&[email protected],[email protected]\",\n          \"mailto:?subject=something&body=something else&[email protected],[email protected]\",\n          \"mailto:?subject=something&body=something else&[email protected]&[email protected],[email protected]\",\n          \"mailto:[email protected]\",\n          \"mailto:[email protected]?\",\n          \"mailto:[email protected]?subject=something\",\n          \"mailto:[email protected]?subject=something&[email protected]\",\n          \"mailto:[email protected]?subject=something&[email protected],[email protected],\",\n          \"mailto:[email protected]?subject=something&[email protected]\",\n          \"mailto:[email protected]?subject=something&[email protected],[email protected]\",\n          \"mailto:[email protected][email protected],[email protected]\",\n          \"mailto:[email protected][email protected],[email protected]\",\n          \"mailto:[email protected][email protected]\",\n          \"mailto:[email protected][email protected]&\",\n          \"mailto:[email protected]?subject=something&body=something else\",\n          \"mailto:[email protected]?subject=something&body=something else&[email protected],[email protected]\",\n          \"mailto:[email protected]?subject=something&body=something else&[email protected],[email protected]\",\n          \"mailto:[email protected]?subject=something&body=something else&[email protected]&[email protected],[email protected]\",\n          \"mailto:\",\n        ],\n        invalid: [\n          \"\",\n          \"something\",\n          \"[email protected]\",\n          \"mailto:?subject=okay&subject=444\",\n          \"mailto:?subject=something&wrong=888\",\n          \"mailto:somename@gmail.com\",\n          \"mailto:[email protected]?cc=somename@gmail.com\",\n          \"mailto:[email protected]?bcc=somename@gmail.com\",\n          \"mailto:[email protected]?bcc=somename@gmail.com&bcc\",\n          \"mailto:[email protected]?subject=anything&body=nothing&cc=&bcc=&key=\",\n          \"mailto:[email protected]?cc=somename\",\n          \"mailto:somename\",\n          \"mailto:[email protected]?subject=something&body=something else&[email protected]&[email protected],[email protected]&\",\n          \"mailto:?subject=something&body=something else&[email protected]&[email protected],[email protected]&\",\n        ],\n      });\n    });\n  });\n\n  describe(\"isAfter\", () => {\n    it(\"should validate dates against a start date\", () => {\n      test({\n        validator: \"isAfter\",\n        args: [{ comparisonDate: \"2011-08-03\" }],\n        valid: [\"2011-08-04\", new Date(2011, 8, 10).toString()],\n        invalid: [\"2010-07-02\", \"2011-08-03\", new Date(0).toString(), \"foo\"],\n      });\n\n      test({\n        validator: \"isAfter\",\n        valid: [\"2100-08-04\", new Date(Date.now() + 86400000).toString()],\n        invalid: [\"2010-07-02\", new Date(0).toString()],\n      });\n\n      test({\n        validator: \"isAfter\",\n        args: [{ comparisonDate: \"2011-08-03\" }],\n        valid: [\"2015-09-17\"],\n        invalid: [\"invalid date\"],\n      });\n\n      test({\n        validator: \"isAfter\",\n        args: [{ comparisonDate: \"invalid date\" }],\n        invalid: [\"invalid date\", \"2015-09-17\"],\n      });\n      test({\n        validator: \"isAfter\",\n        args: [], // will fall back to the current date\n        valid: [\"2100-08-04\", new Date(Date.now() + 86400000).toString()],\n      });\n      test({\n        validator: \"isAfter\",\n        args: [undefined], // will fall back to the current date\n        valid: [\"2100-08-04\", new Date(Date.now() + 86400000).toString()],\n      });\n      test({\n        validator: \"isAfter\",\n        args: [{ comparisonDate: undefined }], // will fall back to the current date\n        valid: [\"2100-08-04\", new Date(Date.now() + 86400000).toString()],\n      });\n    });\n\n    describe(\"(legacy syntax)\", () => {\n      it(\"should validate dates against a start date\", () => {\n        test({\n          validator: \"isAfter\",\n          args: [\"2011-08-03\"],\n          valid: [\"2011-08-04\", new Date(2011, 8, 10).toString()],\n          invalid: [\"2010-07-02\", \"2011-08-03\", new Date(0).toString(), \"foo\"],\n        });\n\n        test({\n          validator: \"isAfter\",\n          valid: [\"2100-08-04\", new Date(Date.now() + 86400000).toString()],\n          invalid: [\"2010-07-02\", new Date(0).toString()],\n        });\n\n        test({\n          validator: \"isAfter\",\n          args: [\"2011-08-03\"],\n          valid: [\"2015-09-17\"],\n          invalid: [\"invalid date\"],\n        });\n\n        test({\n          validator: \"isAfter\",\n          args: [\"invalid date\"],\n          invalid: [\"invalid date\", \"2015-09-17\"],\n        });\n      });\n    });\n  });\n\n  describe(\"isBase64\", () => {\n    it(\"should validate base64 strings with default options\", () => {\n      test({\n        validator: \"isBase64\",\n        valid: [\n          \"\",\n          \"Zg==\",\n          \"Zm8=\",\n          \"Zm9v\",\n          \"Zm9vYg==\",\n          \"Zm9vYmE=\",\n          \"Zm9vYmFy\",\n          \"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4=\",\n          \"Vml2YW11cyBmZXJtZW50dW0gc2VtcGVyIHBvcnRhLg==\",\n          \"U3VzcGVuZGlzc2UgbGVjdHVzIGxlbw==\",\n          \"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuMPNS1Ufof9EW/M98FNw\" +\n            \"UAKrwflsqVxaxQjBQnHQmiI7Vac40t8x7pIb8gLGV6wL7sBTJiPovJ0V7y7oc0Ye\" +\n            \"rhKh0Rm4skP2z/jHwwZICgGzBvA0rH8xlhUiTvcwDCJ0kc+fh35hNt8srZQM4619\" +\n            \"FTgB66Xmp4EtVyhpQV+t02g6NzK72oZI0vnAvqhpkxLeLiMCyrI416wHm5Tkukhx\" +\n            \"QmcL2a6hNOyu0ixX/x2kSFXApEnVrJ+/IxGyfyw8kf4N2IZpW5nEP847lpfj0SZZ\" +\n            \"Fwrd1mnfnDbYohX2zRptLy2ZUn06Qo9pkG5ntvFEPo9bfZeULtjYzIl6K8gJ2uGZ\" +\n            \"HQIDAQAB\",\n        ],\n        invalid: [\n          \"12345\",\n          \"Vml2YW11cyBmZXJtZtesting123\",\n          \"Zg=\",\n          \"Z===\",\n          \"Zm=8\",\n          \"=m9vYg==\",\n          \"Zm9vYmFy====\",\n        ],\n      });\n\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: true }],\n        valid: [\n          \"\",\n          \"bGFkaWVzIGFuZCBnZW50bGVtZW4sIHdlIGFyZSBmbG9hdGluZyBpbiBzcGFjZQ\",\n          \"1234\",\n          \"bXVtLW5ldmVyLXByb3Vk\",\n          \"PDw_Pz8-Pg\",\n          \"VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw\",\n        ],\n        invalid: [\n          \" AA\",\n          \"\\tAA\",\n          \"\\rAA\",\n          \"\\nAA\",\n          \"This+isa/bad+base64Url==\",\n          \"0K3RgtC+INC30LDQutC+0LTQuNGA0L7QstCw0L3QvdCw0Y8g0YHRgtGA0L7QutCw\",\n        ],\n        error: [null, undefined, {}, [], 42],\n      });\n\n      // for (let i = 0, str = '', encoded; i < 1000; i++) {\n      //   str += String.fromCharCode(Math.random() * 26 | 97); // eslint-disable-line no-bitwise\n      //   encoded = Buffer.from(str).toString('base64');\n      //   if (!validatorjs.isBase64(encoded)) {\n      //     let msg = format('validator.isBase64() failed with \"%s\"', encoded);\n      //     throw new Error(msg);\n      //   }\n      // }\n    });\n\n    it(\"should validate standard Base64 with padding\", () => {\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: false, padding: true }],\n        valid: [\n          \"\",\n          \"TWFu\",\n          \"TWE=\",\n          \"TQ==\",\n          \"SGVsbG8=\",\n          \"U29mdHdhcmU=\",\n          \"YW55IGNhcm5hbCBwbGVhc3VyZS4=\",\n        ],\n        invalid: [\n          \"TWF\",\n          \"TWE===\",\n          \"SGVsbG8@\",\n          \"SGVsbG8===\",\n          \"SGVsb G8=\",\n          \"====\",\n        ],\n      });\n    });\n\n    it(\"should validate standard Base64 without padding\", () => {\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: false, padding: false }],\n        valid: [\n          \"\",\n          \"TWFu\",\n          \"TWE\",\n          \"TQ\",\n          \"SGVsbG8\",\n          \"U29mdHdhcmU\",\n          \"YW55IGNhcm5hbCBwbGVhc3VyZS4\",\n        ],\n        invalid: [\n          \"TWE=\",\n          \"TQ===\",\n          \"SGVsbG8@\",\n          \"SGVsbG8===\",\n          \"SGVsb G8\",\n          \"====\",\n        ],\n      });\n    });\n\n    it(\"should validate Base64url with padding\", () => {\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: true, padding: true }],\n        valid: [\n          \"\",\n          \"SGVsbG8=\",\n          \"U29mdHdhcmU=\",\n          \"YW55IGNhcm5hbCBwbGVhc3VyZS4=\",\n          \"SGVsbG8-\",\n          \"SGVsbG8_\",\n        ],\n        invalid: [\"SGVsbG8===\", \"SGVsbG8@\", \"SGVsb G8=\", \"====\"],\n      });\n    });\n\n    it(\"should validate Base64url without padding\", () => {\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: true, padding: false }],\n        valid: [\n          \"\",\n          \"SGVsbG8\",\n          \"U29mdHdhcmU\",\n          \"YW55IGNhcm5hbCBwbGVhc3VyZS4\",\n          \"SGVsbG8-\",\n          \"SGVsbG8_\",\n        ],\n        invalid: [\"SGVsbG8=\", \"SGVsbG8===\", \"SGVsbG8@\", \"SGVsb G8\", \"====\"],\n      });\n    });\n\n    it(\"should handle mixed cases correctly\", () => {\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: false, padding: true }],\n        valid: [\"\", \"TWFu\", \"TWE=\", \"TQ==\"],\n        invalid: [\"TWE\", \"TQ=\", \"TQ===\"],\n      });\n\n      test({\n        validator: \"isBase64\",\n        args: [{ urlSafe: true, padding: false }],\n        valid: [\"\", \"SGVsbG8\", \"SGVsbG8-\", \"SGVsbG8_\"],\n        invalid: [\"SGVsbG8=\", \"SGVsbG8@\", \"SGVsb G8\"],\n      });\n    });\n  });\n\n  describe(\"isBefore\", () => {\n    describe(\"should validate dates a given end date\", () => {\n      describe(\"new syntax\", () => {\n        test({\n          validator: \"isBefore\",\n          args: [{ comparisonDate: \"08/04/2011\" }],\n          valid: [\"2010-07-02\", \"2010-08-04\", new Date(0).toString()],\n          invalid: [\"08/04/2011\", new Date(2011, 9, 10).toString()],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [{ comparisonDate: new Date(2011, 7, 4).toString() }],\n          valid: [\"2010-07-02\", \"2010-08-04\", new Date(0).toString()],\n          invalid: [\"08/04/2011\", new Date(2011, 9, 10).toString()],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [{ comparisonDate: \"2011-08-03\" }],\n          valid: [\"1999-12-31\"],\n          invalid: [\"invalid date\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [{ comparisonDate: \"invalid date\" }],\n          invalid: [\"invalid date\", \"1999-12-31\"],\n        });\n      });\n\n      describe(\"legacy syntax\", () => {\n        test({\n          validator: \"isBefore\",\n          args: [\"08/04/2011\"],\n          valid: [\"2010-07-02\", \"2010-08-04\", new Date(0).toString()],\n          invalid: [\"08/04/2011\", new Date(2011, 9, 10).toString()],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [new Date(2011, 7, 4).toString()],\n          valid: [\"2010-07-02\", \"2010-08-04\", new Date(0).toString()],\n          invalid: [\"08/04/2011\", new Date(2011, 9, 10).toString()],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [\"2011-08-03\"],\n          valid: [\"1999-12-31\"],\n          invalid: [\"invalid date\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [\"invalid date\"],\n          invalid: [\"invalid date\", \"1999-12-31\"],\n        });\n      });\n    });\n\n    describe(\"should validate dates a default end date\", () => {\n      describe(\"new syntax\", () => {\n        test({\n          validator: \"isBefore\",\n          valid: [\n            \"2000-08-04\",\n            new Date(0).toString(),\n            new Date(Date.now() - 86400000).toString(),\n          ],\n          invalid: [\"2100-07-02\", new Date(2217, 10, 10).toString()],\n        });\n        test({\n          validator: \"isBefore\",\n          args: undefined, // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [], // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [undefined], // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [{ comparisonDate: undefined }], // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n      });\n\n      describe(\"legacy syntax\", () => {\n        test({\n          validator: \"isBefore\",\n          valid: [\n            \"2000-08-04\",\n            new Date(0).toString(),\n            new Date(Date.now() - 86400000).toString(),\n          ],\n          invalid: [\"2100-07-02\", new Date(2217, 10, 10).toString()],\n        });\n        test({\n          validator: \"isBefore\",\n          args: undefined, // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [], // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n        test({\n          validator: \"isBefore\",\n          args: [undefined], // will fall back to the current date\n          valid: [\"1999-06-07\"],\n        });\n      });\n    });\n  });\n\n  describe(\"isFQDN\", () => {\n    it(\"should validate domain names.\", () => {\n      test({\n        validator: \"isFQDN\",\n        args: [],\n        valid: [\"google.com\"],\n        invalid: [\"google.l33t\"],\n      });\n      test({\n        validator: \"isFQDN\",\n        args: [{ allow_numeric_tld: true }],\n        valid: [\"google.com\", \"google.l33t\"],\n        invalid: [],\n      });\n    });\n  });\n\n  describe(\"isIP\", () => {\n    it(\"should validate IP addresses\", () => {\n      test({\n        validator: \"isIP\",\n        valid: [\n          \"127.0.0.1\",\n          \"0.0.0.0\",\n          \"255.255.255.255\",\n          \"1.2.3.4\",\n          \"::1\",\n          \"2001:db8:0000:1:1:1:1:1\",\n          \"2001:db8:3:4::192.0.2.33\",\n          \"2001:41d0:2:a141::1\",\n          \"::ffff:127.0.0.1\",\n          \"::0000\",\n          \"0000::\",\n          \"1::\",\n          \"1111:1:1:1:1:1:1:1\",\n          \"fe80::a6db:30ff:fe98:e946\",\n          \"::\",\n          \"::8\",\n          \"::ffff:127.0.0.1\",\n          \"::ffff:255.255.255.255\",\n          \"::ffff:0:255.255.255.255\",\n          \"::2:3:4:5:6:7:8\",\n          \"::255.255.255.255\",\n          \"0:0:0:0:0:ffff:127.0.0.1\",\n          \"1:2:3:4:5:6:7::\",\n          \"1:2:3:4:5:6::8\",\n          \"1::7:8\",\n          \"1:2:3:4:5::7:8\",\n          \"1:2:3:4:5::8\",\n          \"1::6:7:8\",\n          \"1:2:3:4::6:7:8\",\n          \"1:2:3:4::8\",\n          \"1::5:6:7:8\",\n          \"1:2:3::5:6:7:8\",\n          \"1:2:3::8\",\n          \"1::4:5:6:7:8\",\n          \"1:2::4:5:6:7:8\",\n          \"1:2::8\",\n          \"1::3:4:5:6:7:8\",\n          \"1::8\",\n          \"fe80::7:8%eth0\",\n          \"fe80::7:8%1\",\n          \"64:ff9b::192.0.2.33\",\n          \"0:0:0:0:0:0:10.0.0.1\",\n        ],\n        invalid: [\n          \"abc\",\n          \"256.0.0.0\",\n          \"0.0.0.256\",\n          \"26.0.0.256\",\n          \"0200.200.200.200\",\n          \"200.0200.200.200\",\n          \"200.200.0200.200\",\n          \"200.200.200.0200\",\n          \"::banana\",\n          \"banana::\",\n          \"::1banana\",\n          \"::1::\",\n          \"1:\",\n          \":1\",\n          \":1:1:1::2\",\n          \"1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1\",\n          \"::11111\",\n          \"11111:1:1:1:1:1:1:1\",\n          \"2001:db8:0000:1:1:1:1::1\",\n          \"0:0:0:0:0:0:ffff:127.0.0.1\",\n          \"0:0:0:0:ffff:127.0.0.1\",\n          \"BC:e4d5:c:e7b9::%40i0nccymtl9cwfKo.5vaeXLSGRMe:EDh2qs5wkhnPws5xQKqafjfAMm6wGFCJ.bVFsZfb\",\n          \"1dC:0DF8:62D:3AC::%KTatXocjaFVioS0RTNQl4mA.V151o0RSy.JIu-D-D8.d3171ZWsSJ7PK4YjkJCRN0F\",\n        ],\n      });\n\n      test({\n        validator: \"isIP\",\n        args: [{ version: \"invalid version\" }],\n        valid: [],\n        invalid: [\"127.0.0.1\", \"0.0.0.0\", \"255.255.255.255\", \"1.2.3.4\"],\n      });\n\n      test({\n        validator: \"isIP\",\n        args: [{ version: null }],\n        valid: [\"127.0.0.1\", \"0.0.0.0\", \"255.255.255.255\", \"1.2.3.4\"],\n      });\n\n      test({\n        validator: \"isIP\",\n        args: [{ version: undefined }],\n        valid: [\"127.0.0.1\", \"0.0.0.0\", \"255.255.255.255\", \"1.2.3.4\"],\n      });\n\n      test({\n        validator: \"isIP\",\n        args: [{ version: 4 }],\n        valid: [\n          \"127.0.0.1\",\n          \"0.0.0.0\",\n          \"255.255.255.255\",\n          \"1.2.3.4\",\n          \"255.0.0.1\",\n          \"0.0.1.1\",\n        ],\n        invalid: [\n          \"::1\",\n          \"2001:db8:0000:1:1:1:1:1\",\n          \"::ffff:127.0.0.1\",\n          \"137.132.10.01\",\n          \"0.256.0.256\",\n          \"255.256.255.256\",\n        ],\n      });\n\n      test({\n        validator: \"isIP\",\n        args: [{ version: 6 }],\n        valid: [\n          \"::1\",\n          \"2001:db8:0000:1:1:1:1:1\",\n          \"::ffff:127.0.0.1\",\n          \"fe80::1234%1\",\n          \"ff08::9abc%10\",\n          \"ff08::9abc%interface10\",\n          \"ff02::5678%pvc1.3\",\n        ],\n        invalid: [\n          \"127.0.0.1\",\n          \"0.0.0.0\",\n          \"255.255.255.255\",\n          \"1.2.3.4\",\n          \"::ffff:287.0.0.1\",\n          \"%\",\n          \"fe80::1234%\",\n          \"fe80::1234%1%3%4\",\n          \"fe80%fe80%\",\n        ],\n      });\n\n      test({\n        validator: \"isIP\",\n        args: [{ version: 10 }],\n        valid: [],\n        invalid: [\n          \"127.0.0.1\",\n          \"0.0.0.0\",\n          \"255.255.255.255\",\n          \"1.2.3.4\",\n          \"::1\",\n          \"2001:db8:0000:1:1:1:1:1\",\n        ],\n      });\n    });\n\n    describe(\"legacy syntax\", () => {\n      it(\"should validate IP addresses\", () => {\n        test({\n          validator: \"isIP\",\n          valid: [\n            \"127.0.0.1\",\n            \"0.0.0.0\",\n            \"255.255.255.255\",\n            \"1.2.3.4\",\n            \"::1\",\n            \"2001:db8:0000:1:1:1:1:1\",\n            \"2001:db8:3:4::192.0.2.33\",\n            \"2001:41d0:2:a141::1\",\n            \"::ffff:127.0.0.1\",\n            \"::0000\",\n            \"0000::\",\n            \"1::\",\n            \"1111:1:1:1:1:1:1:1\",\n            \"fe80::a6db:30ff:fe98:e946\",\n            \"::\",\n            \"::8\",\n            \"::ffff:127.0.0.1\",\n            \"::ffff:255.255.255.255\",\n            \"::ffff:0:255.255.255.255\",\n            \"::2:3:4:5:6:7:8\",\n            \"::255.255.255.255\",\n            \"0:0:0:0:0:ffff:127.0.0.1\",\n            \"1:2:3:4:5:6:7::\",\n            \"1:2:3:4:5:6::8\",\n            \"1::7:8\",\n            \"1:2:3:4:5::7:8\",\n            \"1:2:3:4:5::8\",\n            \"1::6:7:8\",\n            \"1:2:3:4::6:7:8\",\n            \"1:2:3:4::8\",\n            \"1::5:6:7:8\",\n            \"1:2:3::5:6:7:8\",\n            \"1:2:3::8\",\n            \"1::4:5:6:7:8\",\n            \"1:2::4:5:6:7:8\",\n            \"1:2::8\",\n            \"1::3:4:5:6:7:8\",\n            \"1::8\",\n            \"fe80::7:8%eth0\",\n            \"fe80::7:8%1\",\n            \"64:ff9b::192.0.2.33\",\n            \"0:0:0:0:0:0:10.0.0.1\",\n          ],\n          invalid: [\n            \"abc\",\n            \"256.0.0.0\",\n            \"0.0.0.256\",\n            \"26.0.0.256\",\n            \"0200.200.200.200\",\n            \"200.0200.200.200\",\n            \"200.200.0200.200\",\n            \"200.200.200.0200\",\n            \"::banana\",\n            \"banana::\",\n            \"::1banana\",\n            \"::1::\",\n            \"1:\",\n            \":1\",\n            \":1:1:1::2\",\n            \"1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1\",\n            \"::11111\",\n            \"11111:1:1:1:1:1:1:1\",\n            \"2001:db8:0000:1:1:1:1::1\",\n            \"0:0:0:0:0:0:ffff:127.0.0.1\",\n            \"0:0:0:0:ffff:127.0.0.1\",\n          ],\n        });\n        test({\n          validator: \"isIP\",\n          args: [4],\n          valid: [\n            \"127.0.0.1\",\n            \"0.0.0.0\",\n            \"255.255.255.255\",\n            \"1.2.3.4\",\n            \"255.0.0.1\",\n            \"0.0.1.1\",\n          ],\n          invalid: [\n            \"::1\",\n            \"2001:db8:0000:1:1:1:1:1\",\n            \"::ffff:127.0.0.1\",\n            \"137.132.10.01\",\n            \"0.256.0.256\",\n            \"255.256.255.256\",\n          ],\n        });\n        test({\n          validator: \"isIP\",\n          args: [6],\n          valid: [\n            \"::1\",\n            \"2001:db8:0000:1:1:1:1:1\",\n            \"::ffff:127.0.0.1\",\n            \"fe80::1234%1\",\n            \"ff08::9abc%10\",\n            \"ff08::9abc%interface10\",\n            \"ff02::5678%pvc1.3\",\n          ],\n          invalid: [\n            \"127.0.0.1\",\n            \"0.0.0.0\",\n            \"255.255.255.255\",\n            \"1.2.3.4\",\n            \"::ffff:287.0.0.1\",\n            \"%\",\n            \"fe80::1234%\",\n            \"fe80::1234%1%3%4\",\n            \"fe80%fe80%\",\n          ],\n        });\n        test({\n          validator: \"isIP\",\n          args: [10],\n          valid: [],\n          invalid: [\n            \"127.0.0.1\",\n            \"0.0.0.0\",\n            \"255.255.255.255\",\n            \"1.2.3.4\",\n            \"::1\",\n            \"2001:db8:0000:1:1:1:1:1\",\n          ],\n        });\n      });\n    });\n  });\n  describe(\"isISBN\", () => {\n    it(\"should validate ISBNs\", () => {\n      test({\n        validator: \"isISBN\",\n        args: [{ version: 10 }],\n        valid: [\n          \"3836221195\",\n          \"3-8362-2119-5\",\n          \"3 8362 2119 5\",\n          \"1617290858\",\n          \"1-61729-085-8\",\n          \"1 61729 085-8\",\n          \"0007269706\",\n          \"0-00-726970-6\",\n          \"0 00 726970 6\",\n          \"3423214120\",\n          \"3-423-21412-0\",\n          \"3 423 21412 0\",\n          \"340101319X\",\n          \"3-401-01319-X\",\n          \"3 401 01319 X\",\n        ],\n        invalid: [\n          \"3423214121\",\n          \"3-423-21412-1\",\n          \"3 423 21412 1\",\n          \"978-3836221191\",\n          \"9783836221191\",\n          \"123456789a\",\n          \"foo\",\n          \"\",\n        ],\n      });\n      test({\n        validator: \"isISBN\",\n        args: [{ version: 13 }],\n        valid: [\n          \"9783836221191\",\n          \"978-3-8362-2119-1\",\n          \"978 3 8362 2119 1\",\n          \"9783401013190\",\n          \"978-3401013190\",\n          \"978 3401013190\",\n          \"9784873113685\",\n          \"978-4-87311-368-5\",\n          \"978 4 87311 368 5\",\n        ],\n        invalid: [\n          \"9783836221190\",\n          \"978-3-8362-2119-0\",\n          \"978 3 8362 2119 0\",\n          \"3836221195\",\n          \"3-8362-2119-5\",\n          \"3 8362 2119 5\",\n          \"01234567890ab\",\n          \"foo\",\n          \"\",\n        ],\n      });\n      test({\n        validator: \"isISBN\",\n        valid: [\"340101319X\", \"9784873113685\"],\n        invalid: [\"3423214121\", \"9783836221190\"],\n      });\n      test({\n        validator: \"isISBN\",\n        args: [{ version: \"foo\" }],\n        invalid: [\"340101319X\", \"9784873113685\"],\n      });\n    });\n\n    describe(\"(legacy syntax)\", () => {\n      it(\"should validate ISBNs\", () => {\n        test({\n          validator: \"isISBN\",\n          args: [10],\n          valid: [\n            \"3836221195\",\n            \"3-8362-2119-5\",\n            \"3 8362 2119 5\",\n            \"1617290858\",\n            \"1-61729-085-8\",\n            \"1 61729 085-8\",\n            \"0007269706\",\n            \"0-00-726970-6\",\n            \"0 00 726970 6\",\n            \"3423214120\",\n            \"3-423-21412-0\",\n            \"3 423 21412 0\",\n            \"340101319X\",\n            \"3-401-01319-X\",\n            \"3 401 01319 X\",\n          ],\n          invalid: [\n            \"3423214121\",\n            \"3-423-21412-1\",\n            \"3 423 21412 1\",\n            \"978-3836221191\",\n            \"9783836221191\",\n            \"123456789a\",\n            \"foo\",\n            \"\",\n          ],\n        });\n        test({\n          validator: \"isISBN\",\n          args: [13],\n          valid: [\n            \"9783836221191\",\n            \"978-3-8362-2119-1\",\n            \"978 3 8362 2119 1\",\n            \"9783401013190\",\n            \"978-3401013190\",\n            \"978 3401013190\",\n            \"9784873113685\",\n            \"978-4-87311-368-5\",\n            \"978 4 87311 368 5\",\n          ],\n          invalid: [\n            \"9783836221190\",\n            \"978-3-8362-2119-0\",\n            \"978 3 8362 2119 0\",\n            \"3836221195\",\n            \"3-8362-2119-5\",\n            \"3 8362 2119 5\",\n            \"01234567890ab\",\n            \"foo\",\n            \"\",\n          ],\n        });\n        test({\n          validator: \"isISBN\",\n          valid: [\"340101319X\", \"9784873113685\"],\n          invalid: [\"3423214121\", \"9783836221190\"],\n        });\n        test({\n          validator: \"isISBN\",\n          args: [\"foo\"],\n          invalid: [\"340101319X\", \"9784873113685\"],\n        });\n      });\n    });\n  });\n\n  return assertionCount;\n}\n"],"names":["Object","defineProperty","exports","value","str","_assertString","default","eth","test","e","__esModule","module","chars","_rtrim","_ltrim","_interopRequireDefault","replace","RegExp","concat","keep_new_lines","_blacklist","options","arguments","length","undefined","testIssn","issn","require_hyphen","case_sensitive","digits","toUpperCase","checksum","i","digit","indexOf","locale","validators","key","validator","Error","trim","comparison","radix","parseInt","float","_alpha","decimal","parseFloat","hasOwnProperty","_nullUndefinedCheck","min","max","lt","gt","locales","keys","card","provider","sanitized","toLowerCase","cards","allCards","some","cardProvider","_isLuhnNumber","amex","dinersclub","discover","jcb","mastercard","unionpay","visa","tmpCardsArray","push","email","_merge","default_normalize_email_options","raw_parts","split","domain","pop","parts","join","gmail_remove_subaddress","gmail_remove_dots","dotsReplacer","all_lowercase","gmail_lowercase","gmail_convert_googlemaildotcom","icloud_domains","icloud_remove_subaddress","icloud_lowercase","outlookdotcom_domains","outlookdotcom_remove_subaddress","outlookdotcom_lowercase","yahoo_domains","yahoo_remove_subaddress","components","slice","yahoo_lowercase","yandex_domains","yandex_lowercase","yandex_convert_yandexru","match","date","comparisonDate","_typeof","Date","toString","_toDate","original","o","Symbol","iterator","constructor","prototype","_isHexadecimal","_isFloat","NaN","_isFullWidth","fullWidth","_isHalfWidth","halfWidth","isRegExp","obj","call","host","matches","rfc3339","timeHour","timeMinute","timeNumOffset","source","timeOffset","partialTime","fullDate","fullTime","no_symbols","numericNoSymbols","defaultOptions","loose","_includesArray","looseBooleans","strictBooleans","isrc","hexadecimal","default_is_empty_options","ignore_whitespace","pattern","url","_url$replace$split2","_slicedToArray","to","_url$replace$split2$","queryString","query","allowedParams","Set","cc","bcc","isParseFailed","queryParams","_step","_iterator","r","t","Array","isArray","_unsupportedIterableToArray","_n","F","s","n","done","f","TypeError","a","u","next","return","_createForOfIteratorHelper","_q$split2","has","delete","err","parseMailtoQueryString","every","_trim","_isEmail","_arrayWithHoles","l","_iterableToArrayLimit","_nonIterableRest","_arrayLikeToArray","name","from","strIndex","charAt","modifiers","_isInt","PL","weightOfDigits","allow_leading_zeroes","modulo","reduce","acc","index","Number","lastDigit","ES","charsValue","X","Y","Z","number","char","endsWith","FI","IN","d","p","c","map","reverse","forEach","val","IR","lastNumber","sum","IT","search","NO","isNaN","k1","k2","TH","LK","incNum","id","idCardNo","provincesAndCities","powers","parityBit","checkAddressCode","addressCode","checkBirthDayCode","birDayCode","yyyy","substring","mm","dd","xdata","getFullYear","getMonth","getDate","check","check15IdCardNo","id17","power","getParityBit","checkParityBit","check18IdCardNo","regexIsDigit","checkSumVal","charCodeAt","String","ALPHABET_CODES","A","B","C","D","E","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","code","Math","floor","PK","isin","double","_i","_arr","trunc","_digit","multibyte","validISO31661NumericCountriesCodes","isMACAddress","eui","no_colons","no_separators","macAddress48NoSeparators","macAddress64NoSeparators","macAddress48","macAddress48WithDots","macAddress64","macAddress64WithDots","strict","farsiLocales","englishLocales","dotDecimal","commaDecimal","bengaliLocales","arabicLocales","alphanumeric","alpha","ar","he","fa","bn","eo","_locale","_locale2","_i2","_locale3","_i3","_i4","_i5","input","ScriptCodes","validISO15924Codes","countryCode","normalizedStr","passportRegexByCountryCode","AM","AR","AT","AU","AZ","BE","BG","BR","BY","CA","CH","CN","CY","CZ","DE","DK","DZ","EE","FR","GB","GR","HR","HU","IE","ID","IS","JM","JP","KR","KZ","LI","LT","LU","LV","LY","MT","MZ","MY","MX","NL","NZ","PH","PT","RO","RU","SE","SL","SK","TR","UA","US","ZA","surrogatePair","data","attributes","shift","schemeAndMediaType","mediaType","validMediaType","validAttribute","validData","tmpNum","shouldDouble","defaults","strippedStr","isoCountryCode","isoCountryCodeInIbanRegexCodeObject","ibanRegexThroughCountryCode","whitelist","filter","blacklist","hasValidIbanFormat","hasValidIbanChecksum","AD","AE","AL","BA","BH","CR","DO","EG","FO","GE","GI","GL","GT","IL","IQ","JO","KW","LB","LC","MA","MC","MD","ME","MK","MR","MU","PS","QA","RS","SA","SC","SI","SM","SV","TL","TN","VA","VG","XK","num","_toFloat","parse","validISO31661Alpha3CountriesCodes","patterns","threeDigit","fourDigit","fiveDigit","sixDigit","BD","CO","HT","KE","MG","NP","PR","SG","TW","ZM","algorithm","lengths","md5","md4","sha1","sha256","sha384","sha512","ripemd128","ripemd160","tiger128","tiger160","tiger192","crc32","crc32b","ascii","isRoutingReg","mimeTypeSimple","mimeTypeText","mimeTypeMultipart","hexcolor","iso7064Check","checkvalue","luhnCheck","second","product","b","reverseMultiplyAndSum","base","total","verhoeffCheck","d_table","p_table","str_copy","version","uuid","nil","all","strictMode","startsWith","phones","_isISO31661Alpha","CountryCodes","isBICReg","vatMatchers","algorithms","WeakMap","__proto__","get","set","_t","getOwnPropertyDescriptor","_interopRequireWildcard","EL","tin","weights","ABN","NG","el","idx","UZ","BO","CL","EC","HN","NI","PA","PY","PE","UY","VE","isIP","ipAddress","IPv4AddressRegExp","IPv6AddressRegExp","IPv4SegmentFormat","IPv4AddressFormat","IPv6SegmentFormat","allowSpaces","includePercentValues","startsWithRgb","rgbColor","rgbaColor","rgbColorPercent","rgbaColorPercent","flags","regexpAsStringLiteral","bech32","base58","default_json_options","primitives","allow_primitives","JSON","isFreightContainerID","isISO6346","isISO6346Str","isDigit","pow","letterCode","checkSumDigit","defaultLatLongOptions","_includesString","pair","checkDMS","latDMS","longDMS","lat","long","default_decimal_options","decimal_digits","force_decimal","decimalRegExp","regex","int","intLeadingZeroes","minCheckPassed","maxCheckPassed","ltCheckPassed","gtCheckPassed","strictSeparator","iso8601StrictSeparator","iso8601","isValidDate","ordinalMatch","oYear","oDay","year","month","day","monthString","dayString","getUTCFullYear","getUTCMonth","getUTCDate","len","encodeURI","_str","ignore","base58Reg","digits_after_decimal","symbol","m","require_symbol","negative","whole_dollar_amount_with_sep","thousands_separator","whole_dollar_amount","decimal_amount","decimal_separator","require_decimal","allow_decimal","allow_negatives","parens_for_negatives","negative_sign_after_digits","negative_sign_before_digits","allow_negative_sign_placeholder","allow_space_after_symbol","allow_space_after_digits","symbol_after_digits","currencyRegex","default_currency_options","languageTagRegex","language","extension","privateuse","grandfathered","delimiter","langtag","hslComma","hslSpace","subnetMaybe","_isIP","expectedSubnet","v4Subnet","v6Subnet","analysis","password","charMap","result","countChars","uniqueChars","uppercaseCount","lowercaseCount","numberCount","symbolCount","upperCaseRegex","lowerCaseRegex","numberRegex","symbolRegex","analyzePassword","returnScore","scoringOptions","points","pointsPerUnique","pointsPerRepeat","pointsForContainingLower","pointsForContainingUpper","pointsForContainingNumber","pointsForContainingSymbol","scorePassword","minLength","minLowercase","minUppercase","minNumbers","minSymbols","magnetURIComponent","default_fqdn_options","allow_trailing_dot","allow_wildcard","tld","require_tld","allow_numeric_tld","part","ignore_max_length","allow_underscores","defaultBase32Options","crockford","crockfordBase32","base32","ean","remainder","actualCheckDigit","validEanRegex","LENGTH_EAN_8","LENGTH_EAN_14","getPositionWeightThroughLengthAndIndex","partialSum","strcopy","taxIdFormat","sanitizeRegexes","taxIdCheck","_isDate","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","enUsCampusPrefix","andover","atlanta","austin","brookhaven","cincinnati","fresno","internet","kansas","memphis","ogden","philadelphia","sba","itItNameCheck","vowelflag","xflag","century_year","multip_lookup","full_year","checkdigit","occurrences","j","trip_locations","recurrent","weight","fromCharCode","digitsArray","even","_","cur","prefixes","location","apply","enUsGetPrefixes","accum","verif","lead_replace","splice","unshift","checkdigits","number_replace","_number_locations","char_to_int","odd_convert","_i6","_char_to_int","multiplier","first_part","lookup","_checksum","_i7","_sum","_i8","identifiers","verificators","pos","_i9","_i0","multipliers","tin_copy","current_year","current_century","allsymbols","_toInt","_toBoolean","_equals","_contains","_matches","_isURL","_isMACAddress","_isIPRange","_isFQDN","_isTime","_isBoolean","_isLocale","_isAbaRouting","_isAlpha","_isAlphanumeric","_isNumeric","_isPassportNumber","_isPort","_isLowercase","_isUppercase","_isIMEI","_isAscii","_isVariableWidth","_isMultibyte","_isSemVer","_isSurrogatePair","_isDecimal","_isOctal","_isDivisibleBy","_isHexColor","_isRgbColor","_isHSL","_isISRC","_isIBAN","_isBIC","_isMD","_isHash","_isJWT","_isJSON","_isEmpty","_isLength","_isByteLength","_isULID","_isUUID","_isMongoId","_isAfter","_isBefore","_isIn","_isCreditCard","_isIdentityCard","_isEAN","_isISIN","_isISBN","_isISSN","_isTaxID","_isMobilePhone","_isEthereumAddress","_isCurrency","_isBtcAddress","_isISO","_isISO2","_isISO3","_isRFC","_isISO4","_isISO31661Alpha2","_isISO31661Numeric","_isISO5","_isBase","_isBase2","_isBase3","_isDataURI","_isMagnetURI","_isMailtoURI","_isMimeType","_isLatLong","_isPostalCode","_escape","_unescape","_stripLow","_whitelist","_isWhitelisted","_normalizeEmail","_isSlug","_isLicensePlate","_isStrongPassword","_isVAT","toDate","toFloat","toInt","toBoolean","equals","contains","isEmail","isURL","isIPRange","isFQDN","isBoolean","isIBAN","isBIC","isAbaRouting","isAlpha","isAlphaLocales","isAlphanumeric","isAlphanumericLocales","isNumeric","isPassportNumber","passportNumberLocales","isPort","isLowercase","isUppercase","isAscii","isFullWidth","isHalfWidth","isVariableWidth","isMultibyte","isSemVer","isSurrogatePair","isInt","isIMEI","isFloat","isFloatLocales","isDecimal","isHexadecimal","isOctal","isDivisibleBy","isHexColor","isRgbColor","isHSL","isISRC","isMD5","isHash","isJWT","isJSON","isEmpty","isLength","isLocale","isByteLength","isULID","isUUID","isMongoId","isAfter","isBefore","isIn","isLuhnNumber","isCreditCard","isIdentityCard","isEAN","isISIN","isISBN","isISSN","isMobilePhone","isMobilePhoneLocales","isPostalCode","isPostalCodeLocales","isEthereumAddress","isCurrency","isBtcAddress","isISO6391","isISO8601","isISO15924","isRFC3339","isISO31661Alpha2","isISO31661Alpha3","isISO31661Numeric","isISO4217","isBase32","isBase58","isBase64","isDataURI","isMagnetURI","isMailtoURI","isMimeType","isLatLong","ltrim","rtrim","escape","unescape","stripLow","isWhitelisted","normalizeEmail","isSlug","isStrongPassword","isTaxID","isDate","isTime","isLicensePlate","isVAT","ibanLocales","default_url_options","validate_length","max_allowed_length","allow_fragments","allow_query_components","protocol","auth","hostname","port","port_str","ipv6","require_valid_protocol","protocols","require_protocol","allow_protocol_relative_urls","require_host","disallow_auth","_auth$split2","user","ipv6_match","wrapped_ipv6","require_port","host_whitelist","_checkHost","host_blacklist","isISO6391Set","_options","urlSafe","padding","base64UrlWithPadding","base64UrlWithoutPadding","base64WithPadding","base64WithoutPadding","CurrencyCodes","validISO4217CurrencyCodes","validISO31661Alpha2CountriesCodes","imeiRegex","imeiRegexWithoutHyphens","allow_hyphens","imeiRegexWithHyphens","mul","tp","arr","arrVal","default_time_options","formats","hourFormat","mode","hour24","withSeconds","withOptionalSeconds","hour12","format","default_date_options","formatDelimiter","delimiters","find","dateDelimiter","dateAndFormat","zippedArr","zip","dateObj","_step$value","dateWord","formatWord","fullYear","y","parsedYear","isFinite","dotSplit","currElem","elem","defaultContainsOptions","ignoreCase","_toString","minOccurrences","charsetRegex","array","presentationSequences","surrogatePairs","isInsideRange","discreteLengths","discreteLen","default_email_options","require_display_name","allow_display_name","display_email","splitNameAddress","display_name","display_name_without_quotes","validateDisplayName","defaultMaxEmailLength","lower_domain","domain_specific_validation","username","_user_parts","gmailUserPart","allow_ip_domain","noBracketdomain","blacklisted_chars","allow_utf8_local_part","quotedEmailUserUtf8","quotedEmailUser","emailUserUtf8Part","emailUserPart","user_parts","octal","isbn","sanitizedIsbn","possibleIsbn10","possibleIsbn13","factor","semanticVersioningRegex","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","enumerable","prop","toStringTag","assertionCount","assert","condition","args","describe","body","it","valid","invalid","validatorMethod","validValue","runTest","repeat","error","foo","bar","foobar","allValid","fixture","validISO8601","invalidISO8601","now"],"sourceRoot":""}
\ No newline at end of file
diff --git a/validatorjs/package-lock.json b/validatorjs/package-lock.json
new file mode 100644
index 0000000..7bfc0ec
--- /dev/null
+++ b/validatorjs/package-lock.json
@@ -0,0 +1,1468 @@
+{
+  "name": "validatorjs",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "validatorjs",
+      "version": "1.0.0",
+      "dependencies": {
+        "@dapplets/unicode-escape-webpack-plugin": "^0.1.1",
+        "buffer": "^6.0.3",
+        "process": "^0.11.10",
+        "validator": "^13.15.15",
+        "webpack": "^5.101.2",
+        "webpack-cli": "^6.0.1"
+      }
+    },
+    "node_modules/@dapplets/unicode-escape-webpack-plugin": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/@dapplets/unicode-escape-webpack-plugin/-/unicode-escape-webpack-plugin-0.1.1.tgz",
+      "integrity": "sha512-dBcrCWE6ZOOHD1XLe3raXk29CwQSJQCXYx8QNcCMvfG+cZ9tZh1h2OVV7D936pmues8OTm1KhjWeiZXbH30SAg==",
+      "license": "MIT"
+    },
+    "node_modules/@discoveryjs/json-ext": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz",
+      "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=14.17.0"
+      }
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.13",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+      "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/source-map": {
+      "version": "0.3.11",
+      "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
+      "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+      "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.30",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz",
+      "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@types/eslint": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
+      "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "*",
+        "@types/json-schema": "*"
+      }
+    },
+    "node_modules/@types/eslint-scope": {
+      "version": "3.7.7",
+      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+      "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/eslint": "*",
+        "@types/estree": "*"
+      }
+    },
+    "node_modules/@types/estree": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+      "license": "MIT"
+    },
+    "node_modules/@types/json-schema": {
+      "version": "7.0.15",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+      "license": "MIT"
+    },
+    "node_modules/@types/node": {
+      "version": "24.3.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz",
+      "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==",
+      "license": "MIT",
+      "dependencies": {
+        "undici-types": "~7.10.0"
+      }
+    },
+    "node_modules/@webassemblyjs/ast": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
+      "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/helper-numbers": "1.13.2",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
+      }
+    },
+    "node_modules/@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
+      "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
+      "license": "MIT"
+    },
+    "node_modules/@webassemblyjs/helper-api-error": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
+      "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
+      "license": "MIT"
+    },
+    "node_modules/@webassemblyjs/helper-buffer": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
+      "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
+      "license": "MIT"
+    },
+    "node_modules/@webassemblyjs/helper-numbers": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
+      "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/floating-point-hex-parser": "1.13.2",
+        "@webassemblyjs/helper-api-error": "1.13.2",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
+      "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
+      "license": "MIT"
+    },
+    "node_modules/@webassemblyjs/helper-wasm-section": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
+      "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-buffer": "1.14.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+        "@webassemblyjs/wasm-gen": "1.14.1"
+      }
+    },
+    "node_modules/@webassemblyjs/ieee754": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
+      "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
+      "license": "MIT",
+      "dependencies": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "node_modules/@webassemblyjs/leb128": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
+      "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@webassemblyjs/utf8": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
+      "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
+      "license": "MIT"
+    },
+    "node_modules/@webassemblyjs/wasm-edit": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
+      "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-buffer": "1.14.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+        "@webassemblyjs/helper-wasm-section": "1.14.1",
+        "@webassemblyjs/wasm-gen": "1.14.1",
+        "@webassemblyjs/wasm-opt": "1.14.1",
+        "@webassemblyjs/wasm-parser": "1.14.1",
+        "@webassemblyjs/wast-printer": "1.14.1"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-gen": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
+      "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+        "@webassemblyjs/ieee754": "1.13.2",
+        "@webassemblyjs/leb128": "1.13.2",
+        "@webassemblyjs/utf8": "1.13.2"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-opt": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
+      "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-buffer": "1.14.1",
+        "@webassemblyjs/wasm-gen": "1.14.1",
+        "@webassemblyjs/wasm-parser": "1.14.1"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-parser": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
+      "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-api-error": "1.13.2",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+        "@webassemblyjs/ieee754": "1.13.2",
+        "@webassemblyjs/leb128": "1.13.2",
+        "@webassemblyjs/utf8": "1.13.2"
+      }
+    },
+    "node_modules/@webassemblyjs/wast-printer": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
+      "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@webpack-cli/configtest": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz",
+      "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "peerDependencies": {
+        "webpack": "^5.82.0",
+        "webpack-cli": "6.x.x"
+      }
+    },
+    "node_modules/@webpack-cli/info": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz",
+      "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "peerDependencies": {
+        "webpack": "^5.82.0",
+        "webpack-cli": "6.x.x"
+      }
+    },
+    "node_modules/@webpack-cli/serve": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz",
+      "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "peerDependencies": {
+        "webpack": "^5.82.0",
+        "webpack-cli": "6.x.x"
+      },
+      "peerDependenciesMeta": {
+        "webpack-dev-server": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@xtuc/long": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/acorn": {
+      "version": "8.15.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+      "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+      "license": "MIT",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/acorn-import-phases": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
+      "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "peerDependencies": {
+        "acorn": "^8.14.0"
+      }
+    },
+    "node_modules/ajv": {
+      "version": "8.17.1",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3",
+        "fast-uri": "^3.0.1",
+        "json-schema-traverse": "^1.0.0",
+        "require-from-string": "^2.0.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/ajv-formats": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+      "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^8.0.0"
+      },
+      "peerDependencies": {
+        "ajv": "^8.0.0"
+      },
+      "peerDependenciesMeta": {
+        "ajv": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/ajv-keywords": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3"
+      },
+      "peerDependencies": {
+        "ajv": "^8.8.2"
+      }
+    },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/browserslist": {
+      "version": "4.25.2",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz",
+      "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001733",
+        "electron-to-chromium": "^1.5.199",
+        "node-releases": "^2.0.19",
+        "update-browserslist-db": "^1.1.3"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/buffer": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.2.1"
+      }
+    },
+    "node_modules/buffer-from": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+      "license": "MIT"
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001735",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz",
+      "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "CC-BY-4.0"
+    },
+    "node_modules/chrome-trace-event": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+      "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0"
+      }
+    },
+    "node_modules/clone-deep": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+      "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+      "license": "MIT",
+      "dependencies": {
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.2",
+        "shallow-clone": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/colorette": {
+      "version": "2.0.20",
+      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+      "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+      "license": "MIT"
+    },
+    "node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "license": "MIT"
+    },
+    "node_modules/cross-spawn": {
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/electron-to-chromium": {
+      "version": "1.5.203",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.203.tgz",
+      "integrity": "sha512-uz4i0vLhfm6dLZWbz/iH88KNDV+ivj5+2SA+utpgjKaj9Q0iDLuwk6Idhe9BTxciHudyx6IvTvijhkPvFGUQ0g==",
+      "license": "ISC"
+    },
+    "node_modules/enhanced-resolve": {
+      "version": "5.18.3",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz",
+      "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==",
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.2.4",
+        "tapable": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/envinfo": {
+      "version": "7.14.0",
+      "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz",
+      "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==",
+      "license": "MIT",
+      "bin": {
+        "envinfo": "dist/cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/es-module-lexer": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+      "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+      "license": "MIT"
+    },
+    "node_modules/escalade": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/eslint-scope": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/esrecurse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/esrecurse/node_modules/estraverse": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8.x"
+      }
+    },
+    "node_modules/fast-deep-equal": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+      "license": "MIT"
+    },
+    "node_modules/fast-uri": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
+      "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fastify"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/fastify"
+        }
+      ],
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/fastest-levenshtein": {
+      "version": "1.0.16",
+      "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+      "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4.9.1"
+      }
+    },
+    "node_modules/find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+      "license": "MIT",
+      "dependencies": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/flat": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+      "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+      "license": "BSD-3-Clause",
+      "bin": {
+        "flat": "cli.js"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/glob-to-regexp": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+      "license": "ISC"
+    },
+    "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==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+      "license": "MIT",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/import-local": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+      "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
+      "license": "MIT",
+      "dependencies": {
+        "pkg-dir": "^4.2.0",
+        "resolve-cwd": "^3.0.0"
+      },
+      "bin": {
+        "import-local-fixture": "fixtures/cli.js"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/interpret": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
+      "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.16.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+      "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+      "license": "MIT",
+      "dependencies": {
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+      "license": "MIT",
+      "dependencies": {
+        "isobject": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+      "license": "ISC"
+    },
+    "node_modules/isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/jest-worker": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+      "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      }
+    },
+    "node_modules/json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+      "license": "MIT"
+    },
+    "node_modules/json-schema-traverse": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+      "license": "MIT"
+    },
+    "node_modules/kind-of": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+      "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/loader-runner": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+      "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.11.5"
+      }
+    },
+    "node_modules/locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+      "license": "MIT",
+      "dependencies": {
+        "p-locate": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+      "license": "MIT"
+    },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/neo-async": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+      "license": "MIT"
+    },
+    "node_modules/node-releases": {
+      "version": "2.0.19",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+      "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+      "license": "MIT"
+    },
+    "node_modules/p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+      "license": "MIT",
+      "dependencies": {
+        "p-try": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+      "license": "MIT",
+      "dependencies": {
+        "p-limit": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "license": "MIT"
+    },
+    "node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "license": "ISC"
+    },
+    "node_modules/pkg-dir": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+      "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+      "license": "MIT",
+      "dependencies": {
+        "find-up": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
+    "node_modules/randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "node_modules/rechoir": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
+      "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
+      "license": "MIT",
+      "dependencies": {
+        "resolve": "^1.20.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      }
+    },
+    "node_modules/require-from-string": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/resolve": {
+      "version": "1.22.10",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+      "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+      "license": "MIT",
+      "dependencies": {
+        "is-core-module": "^2.16.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/resolve-cwd": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+      "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+      "license": "MIT",
+      "dependencies": {
+        "resolve-from": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/resolve-from": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/schema-utils": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz",
+      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/json-schema": "^7.0.9",
+        "ajv": "^8.9.0",
+        "ajv-formats": "^2.1.1",
+        "ajv-keywords": "^5.1.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      }
+    },
+    "node_modules/serialize-javascript": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+      "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "randombytes": "^2.1.0"
+      }
+    },
+    "node_modules/shallow-clone": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+      "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^6.0.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "license": "MIT",
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-support": {
+      "version": "0.5.21",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+      "license": "MIT",
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "node_modules/supports-color": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/tapable": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
+      "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/terser": {
+      "version": "5.43.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz",
+      "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "@jridgewell/source-map": "^0.3.3",
+        "acorn": "^8.14.0",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
+      },
+      "bin": {
+        "terser": "bin/terser"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/terser-webpack-plugin": {
+      "version": "5.3.14",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz",
+      "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.25",
+        "jest-worker": "^27.4.5",
+        "schema-utils": "^4.3.0",
+        "serialize-javascript": "^6.0.2",
+        "terser": "^5.31.1"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.1.0"
+      },
+      "peerDependenciesMeta": {
+        "@swc/core": {
+          "optional": true
+        },
+        "esbuild": {
+          "optional": true
+        },
+        "uglify-js": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/undici-types": {
+      "version": "7.10.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz",
+      "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==",
+      "license": "MIT"
+    },
+    "node_modules/update-browserslist-db": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.1"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    },
+    "node_modules/validator": {
+      "version": "13.15.15",
+      "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz",
+      "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/watchpack": {
+      "version": "2.4.4",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz",
+      "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==",
+      "license": "MIT",
+      "dependencies": {
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.1.2"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/webpack": {
+      "version": "5.101.2",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.2.tgz",
+      "integrity": "sha512-4JLXU0tD6OZNVqlwzm3HGEhAHufSiyv+skb7q0d2367VDMzrU1Q/ZeepvkcHH0rZie6uqEtTQQe0OEOOluH3Mg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/eslint-scope": "^3.7.7",
+        "@types/estree": "^1.0.8",
+        "@types/json-schema": "^7.0.15",
+        "@webassemblyjs/ast": "^1.14.1",
+        "@webassemblyjs/wasm-edit": "^1.14.1",
+        "@webassemblyjs/wasm-parser": "^1.14.1",
+        "acorn": "^8.15.0",
+        "acorn-import-phases": "^1.0.3",
+        "browserslist": "^4.24.0",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^5.17.3",
+        "es-module-lexer": "^1.2.1",
+        "eslint-scope": "5.1.1",
+        "events": "^3.2.0",
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.2.11",
+        "json-parse-even-better-errors": "^2.3.1",
+        "loader-runner": "^4.2.0",
+        "mime-types": "^2.1.27",
+        "neo-async": "^2.6.2",
+        "schema-utils": "^4.3.2",
+        "tapable": "^2.1.1",
+        "terser-webpack-plugin": "^5.3.11",
+        "watchpack": "^2.4.1",
+        "webpack-sources": "^3.3.3"
+      },
+      "bin": {
+        "webpack": "bin/webpack.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependenciesMeta": {
+        "webpack-cli": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/webpack-cli": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz",
+      "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==",
+      "license": "MIT",
+      "dependencies": {
+        "@discoveryjs/json-ext": "^0.6.1",
+        "@webpack-cli/configtest": "^3.0.1",
+        "@webpack-cli/info": "^3.0.1",
+        "@webpack-cli/serve": "^3.0.1",
+        "colorette": "^2.0.14",
+        "commander": "^12.1.0",
+        "cross-spawn": "^7.0.3",
+        "envinfo": "^7.14.0",
+        "fastest-levenshtein": "^1.0.12",
+        "import-local": "^3.0.2",
+        "interpret": "^3.1.1",
+        "rechoir": "^0.8.0",
+        "webpack-merge": "^6.0.1"
+      },
+      "bin": {
+        "webpack-cli": "bin/cli.js"
+      },
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.82.0"
+      },
+      "peerDependenciesMeta": {
+        "webpack-bundle-analyzer": {
+          "optional": true
+        },
+        "webpack-dev-server": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/webpack-cli/node_modules/commander": {
+      "version": "12.1.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+      "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/webpack-merge": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz",
+      "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==",
+      "license": "MIT",
+      "dependencies": {
+        "clone-deep": "^4.0.1",
+        "flat": "^5.0.2",
+        "wildcard": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=18.0.0"
+      }
+    },
+    "node_modules/webpack-sources": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz",
+      "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "license": "ISC",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/wildcard": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
+      "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
+      "license": "MIT"
+    }
+  }
+}
diff --git a/validatorjs/package.json b/validatorjs/package.json
new file mode 100644
index 0000000..703857f
--- /dev/null
+++ b/validatorjs/package.json
@@ -0,0 +1,18 @@
+{
+  "name": "validatorjs",
+  "version": "1.0.0",
+  "main": "src/test.mjs",
+  "scripts": {
+    "test": "node benchmark-node.mjs",
+    "clean": "rm -rf dist/*",
+    "build": "webpack"
+  },
+  "dependencies": {
+    "@dapplets/unicode-escape-webpack-plugin": "^0.1.1",
+    "buffer": "^6.0.3",
+    "process": "^0.11.10",
+    "validator": "^13.15.15",
+    "webpack": "^5.101.2",
+    "webpack-cli": "^6.0.1"
+  }
+}
diff --git a/validatorjs/src/test.mjs b/validatorjs/src/test.mjs
new file mode 100644
index 0000000..7eddd07
--- /dev/null
+++ b/validatorjs/src/test.mjs
@@ -0,0 +1,13953 @@
+// Original Source: https://raw.githubusercontent.com/validatorjs/validator.js/refs/heads/master/test/validators.test.js
+// Version: https://github.com/validatorjs/validator.js/tree/13.15.15
+
+import { default as validatorjs } from "validator";
+
+let assertionCount = 0;
+
+function assert(condition, ...args) {
+  assertionCount++;
+  if (!condition) throw new Error(`Assertion failure: ${args}`);
+}
+
+function describe(name, body) {
+  body();
+}
+
+function it(name, body) {
+  body();
+}
+
+function test({ validator, args = [], valid, invalid }) {
+  const validatorMethod = validatorjs[validator];
+  valid?.forEach((validValue) => {
+    assert(validatorMethod(validValue, ...args), validValue, ...args);
+  });
+  invalid?.forEach((validValue) => {
+    assert(!validatorMethod(validValue, ...args), validValue, ...args);
+  });
+}
+
+export function runTest() {
+  assertionCount = 0;
+
+  describe("Validators", () => {
+    it("should validate email addresses", () => {
+      test({
+        validator: "isEmail",
+        valid: [
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "hans.m端[email protected]",
+          "hans@m端ller.com",
+          "test|123@m端ller.com",
+          "[email protected]",
+          "[email protected]",
+          '"foobar"@example.com',
+          '"  foo  m端ller "@example.com',
+          '"foo\\@bar"@example.com',
+          `${"a".repeat(64)}@${"a".repeat(63)}.com`,
+          `${"a".repeat(64)}@${"a".repeat(63)}.com`,
+          `${"a".repeat(31)}@gmail.com`,
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+        ],
+        invalid: [
+          "invalidemail@",
+          "invalid.com",
+          "@invalid.com",
+          "[email protected].",
+          "foo@_bar.com",
+          "somename@gmail.com",
+          "[email protected].",
+          "[email protected]",
+          "gmailgmailgmailgmailgmail@gmail.com",
+          `${"a".repeat(64)}@${"a".repeat(251)}.com`,
+          `${"a".repeat(65)}@${"a".repeat(250)}.com`,
+          `${"a".repeat(64)}@${"a".repeat(64)}.com`,
+          `${"a".repeat(64)}@${"a".repeat(63)}.${"a".repeat(63)}.${"a".repeat(
+            63
+          )}.${"a".repeat(58)}.com`,
+          "[email protected] m",
+          "[email protected] m",
+          "[email protected] m",
+          "[email protected] m",
+          "[email protected] m",
+          "[email protected] m",
+          "[email protected] m",
+          "[email protected] m",
+          "[email protected] m",
+          "[email protected] m",
+          "[email protected] m",
+          "[email protected] m",
+          "[email protected] m",
+          "[email protected]",
+          "test123+invalid! [email protected]",
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          'wrong()[]",:;<>@@gmail.com',
+          '"wrong()[]",:;<>@@gmail.com',
+          "[email protected]�",
+          "[email protected]©",
+          "nbsp [email protected]",
+          "nbsp_test@te st.com",
+          "[email protected] m",
+          '"[email protected]',
+          '"foo"[email protected]',
+          'foo"bar"@gmail.com',
+        ],
+      });
+    });
+
+    it("should validate email addresses with domain specific validation", () => {
+      test({
+        validator: "isEmail",
+        args: [{ domain_specific_validation: true }],
+        valid: [
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          `${"a".repeat(30)}@gmail.com`,
+        ],
+        invalid: [
+          `${"a".repeat(31)}@gmail.com`,
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+        ],
+      });
+    });
+
+    it("should validate email addresses with underscores in the domain", () => {
+      test({
+        validator: "isEmail",
+        args: [{ allow_underscores: true }],
+        valid: ["foobar@my_sarisari_store.typepad.com"],
+        invalid: [],
+      });
+    });
+
+    it("should validate email addresses without UTF8 characters in local part", () => {
+      test({
+        validator: "isEmail",
+        args: [{ allow_utf8_local_part: false }],
+        valid: [
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "hans@m端ller.com",
+          "test|123@m端ller.com",
+          "[email protected]",
+          "[email protected]",
+          '"foobar"@example.com',
+          '"foo\\@bar"@example.com',
+          '"  foo  bar  "@example.com',
+        ],
+        invalid: [
+          "invalidemail@",
+          "invalid.com",
+          "@invalid.com",
+          "[email protected].",
+          "[email protected].",
+          "somename@gmail.com",
+          "hans.m端[email protected]",
+          "[email protected]",
+          "tü[email protected]",
+          "nbsp [email protected]",
+        ],
+      });
+    });
+
+    it("should validate email addresses with display names", () => {
+      test({
+        validator: "isEmail",
+        args: [{ allow_display_name: true }],
+        valid: [
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "hans.m端[email protected]",
+          "hans@m端ller.com",
+          "test|123@m端ller.com",
+          "[email protected]",
+          "[email protected]",
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Name <hans.m端[email protected]>",
+          "Some Name <hans@m端ller.com>",
+          "Some Name <test|123@m端ller.com>",
+          "Some Name <[email protected]>",
+          "'Foo Bar, Esq'<[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Middle Name <[email protected]>",
+          "Name <[email protected]>",
+          "Name<[email protected]>",
+          "Some Name <[email protected]>",
+          "Name🍓With🍑Emoji🚴‍♀️🏆<[email protected]>",
+          "🍇🍗🍑<[email protected]>",
+          '"<displayNameInBrackets>"<[email protected]>',
+          '"\\"quotes\\""<[email protected]>',
+          '"name;"<[email protected]>',
+          '"name;" <[email protected]>',
+        ],
+        invalid: [
+          "invalidemail@",
+          "invalid.com",
+          "@invalid.com",
+          "[email protected].",
+          "[email protected].",
+          "Some Name <invalidemail@>",
+          "Some Name <invalid.com>",
+          "Some Name <@invalid.com>",
+          "Some Name <[email protected].>",
+          "Some Name <[email protected].>",
+          "Some Name [email protected].>",
+          "Some Name <[email protected].",
+          "Some Name < [email protected] >",
+          "Name [email protected]",
+          "Some Name <[email protected]>",
+          "Some Name<emoji_in_address🍈@aftership.com>",
+          "invisibleCharacter\u001F<[email protected]>",
+          "<displayNameInBrackets><[email protected]>",
+          '\\"quotes\\"<[email protected]>',
+          '""quotes""<[email protected]>',
+          "name;<[email protected]>",
+          "    <[email protected]>",
+          '"    "<[email protected]>',
+        ],
+      });
+    });
+
+    it("should validate email addresses with required display names", () => {
+      test({
+        validator: "isEmail",
+        args: [{ require_display_name: true }],
+        valid: [
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Name <hans.m端[email protected]>",
+          "Some Name <hans@m端ller.com>",
+          "Some Name <test|123@m端ller.com>",
+          "Some Name <[email protected]>",
+          "Some Name <[email protected]>",
+          "Some Middle Name <[email protected]>",
+          "Name <[email protected]>",
+          "Name<[email protected]>",
+        ],
+        invalid: [
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "[email protected]",
+          "hans.m端[email protected]",
+          "hans@m端ller.com",
+          "test|123@m端ller.com",
+          "[email protected]",
+          "invalidemail@",
+          "invalid.com",
+          "@invalid.com",
+          "[email protected].",
+          "[email protected].",
+          "Some Name <invalidemail@>",
+          "Some Name <invalid.com>",
+          "Some Name <@invalid.com>",
+          "Some Name <[email protected].>",
+          "Some Name <[email protected].>",
+          "Some Name [email protected].>",
+          "Some Name <[email protected].",
+          "Some Name < [email protected] >",
+          "Name [email protected]",
+        ],
+      });
+    });
+
+    it("should validate email addresses with allowed IPs", () => {
+      test({
+        validator: "isEmail",
+        args: [{ allow_ip_domain: true }],
+        valid: ["email@[123.123.123.123]", "[email protected]"],
+        invalid: [
+          "[email protected]",
+          "[email protected]",
+          "email@[266.266.266.266]",
+        ],
+      });
+    });
+
+    it("should not validate email addresses with blacklisted chars in the name", () => {
+      test({
+        validator: "isEmail",
+        args: [{ blacklisted_chars: 'abc"' }],
+        valid: ["[email protected]"],
+        invalid: [
+          "[email protected]",
+          '"foobr"@example.com',
+          '" foo m端ller "@example.com',
+          '"foo@br"@example.com',
+        ],
+      });
+    });
+
+    it("should validate really long emails if ignore_max_length is set", () => {
+      test({
+        validator: "isEmail",
+        args: [{ ignore_max_length: false }],
+        valid: [],
+        invalid: [
+          "Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@example.com",
+        ],
+      });
+
+      test({
+        validator: "isEmail",
+        args: [{ ignore_max_length: true }],
+        valid: [
+          "Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@example.com",
+        ],
+        invalid: [],
+      });
+
+      test({
+        validator: "isEmail",
+        args: [{ ignore_max_length: true }],
+        valid: [
+          "Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX@Deleted-user-id-19430-Team-5051deleted-user-id-19430-team-5051XXXXXX.com",
+        ],
+        invalid: [],
+      });
+    });
+
+    it("should not validate email addresses with denylisted domains", () => {
+      test({
+        validator: "isEmail",
+        args: [{ host_blacklist: ["gmail.com", "foo.bar.com"] }],
+        valid: ["[email protected]"],
+        invalid: ["[email protected]", "[email protected]"],
+      });
+    });
+
+    it("should allow regular expressions in the host blacklist of isEmail", () => {
+      test({
+        validator: "isEmail",
+        args: [
+          {
+            host_blacklist: ["bar.com", "foo.com", /\.foo\.com$/],
+          },
+        ],
+        valid: ["[email protected]", "[email protected]", "[email protected]"],
+        invalid: ["[email protected]", "[email protected]", "[email protected]"],
+      });
+    });
+
+    it("should validate only email addresses with whitelisted domains", () => {
+      test({
+        validator: "isEmail",
+        args: [{ host_whitelist: ["gmail.com", "foo.bar.com"] }],
+        valid: ["[email protected]", "[email protected]"],
+        invalid: ["[email protected]", "[email protected]", "[email protected]"],
+      });
+    });
+
+    it("should allow regular expressions in the host whitelist of isEmail", () => {
+      test({
+        validator: "isEmail",
+        args: [
+          {
+            host_whitelist: ["bar.com", "foo.com", /\.foo\.com$/],
+          },
+        ],
+        valid: ["[email protected]", "[email protected]", "[email protected]"],
+        invalid: ["[email protected]", "[email protected]", "[email protected]"],
+      });
+    });
+
+    it("should validate URLs", () => {
+      test({
+        validator: "isURL",
+        valid: [
+          "foobar.com",
+          "www.foobar.com",
+          "foobar.com/",
+          "valid.au",
+          "http://www.foobar.com/",
+          "HTTP://WWW.FOOBAR.COM/",
+          "https://www.foobar.com/",
+          "HTTPS://WWW.FOOBAR.COM/",
+          "http://www.foobar.com:23/",
+          "http://www.foobar.com:65535/",
+          "http://www.foobar.com:5/",
+          "https://www.foobar.com/",
+          "ftp://www.foobar.com/",
+          "http://www.foobar.com/~foobar",
+          "http://user:[email protected]/",
+          "http://user:@www.foobar.com/",
+          "http://:[email protected]/",
+          "http://[email protected]",
+          "http://127.0.0.1/",
+          "http://10.0.0.0/",
+          "http://189.123.14.13/",
+          "http://duckduckgo.com/?q=%2F",
+          "http://foobar.com/t$-_.+!*'(),",
+          "http://foobar.com/?foo=bar#baz=qux",
+          "http://foobar.com?foo=bar",
+          "http://foobar.com#baz=qux",
+          "http://www.xn--froschgrn-x9a.net/",
+          "http://xn--froschgrn-x9a.com/",
+          "http://foo--bar.com",
+          "http://høyfjellet.no",
+          "http://xn--j1aac5a4g.xn--j1amh",
+          "http://xn------eddceddeftq7bvv7c4ke4c.xn--p1ai",
+          "http://кулік.укр",
+          "test.com?ref=http://test2.com",
+          "http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html",
+          "http://[1080:0:0:0:8:800:200C:417A]/index.html",
+          "http://[3ffe:2a00:100:7031::1]",
+          "http://[1080::8:800:200C:417A]/foo",
+          "http://[::192.9.5.5]/ipng",
+          "http://[::FFFF:129.144.52.38]:80/index.html",
+          "http://[2010:836B:4179::836B:4179]",
+          "http://example.com/example.json#/foo/bar",
+          "http://1337.com",
+        ],
+        invalid: [
+          "http://localhost:3000/",
+          "//foobar.com",
+          "xyz://foobar.com",
+          "invalid/",
+          "invalid.x",
+          "invalid.",
+          ".com",
+          "http://com/",
+          "http://300.0.0.1/",
+          "mailto:[email protected]",
+          "rtmp://foobar.com",
+          "http://www.xn--.com/",
+          "http://xn--.com/",
+          "http://www.foobar.com:0/",
+          "http://www.foobar.com:70000/",
+          "http://www.foobar.com:99999/",
+          "http://www.-foobar.com/",
+          "http://www.foobar-.com/",
+          "http://foobar/# lol",
+          "http://foobar/? lol",
+          "http://foobar/ lol/",
+          "http://lol @foobar.com/",
+          "http://lol:lol @foobar.com/",
+          "http://lol:lol:[email protected]/",
+          "http://lol: @foobar.com/",
+          "http://www.foo_bar.com/",
+          "http://www.foobar.com/\t",
+          "http://@foobar.com",
+          "http://:@foobar.com",
+          "http://\[email protected]/",
+          "",
+          `http://foobar.com/${new Array(2083).join("f")}`,
+          "http://*.foo.com",
+          "*.foo.com",
+          "!.foo.com",
+          "http://example.com.",
+          "http://localhost:61500this is an invalid url!!!!",
+          "////foobar.com",
+          "http:////foobar.com",
+          "https://example.com/foo/<script>alert('XSS')</script>/",
+        ],
+      });
+    });
+
+    it("should validate URLs with custom protocols", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            protocols: ["rtmp"],
+          },
+        ],
+        valid: ["rtmp://foobar.com"],
+        invalid: ["http://foobar.com"],
+      });
+    });
+
+    it("should validate file URLs without a host", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            protocols: ["file"],
+            require_host: false,
+            require_tld: false,
+          },
+        ],
+        valid: ["file://localhost/foo.txt", "file:///foo.txt", "file:///"],
+        invalid: ["http://foobar.com", "file://"],
+      });
+    });
+
+    it("should validate postgres URLs without a host", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            protocols: ["postgres"],
+            require_host: false,
+          },
+        ],
+        valid: ["postgres://user:pw@/test"],
+        invalid: ["http://foobar.com", "postgres://"],
+      });
+    });
+
+    it("should validate URLs with any protocol", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            require_valid_protocol: false,
+          },
+        ],
+        valid: ["rtmp://foobar.com", "http://foobar.com", "test://foobar.com"],
+        invalid: ["mailto:[email protected]"],
+      });
+    });
+
+    it("should validate URLs with underscores", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            allow_underscores: true,
+          },
+        ],
+        valid: [
+          "http://foo_bar.com",
+          "http://pr.example_com.294.example.com/",
+          "http://foo__bar.com",
+          "http://_.example.com",
+        ],
+        invalid: [],
+      });
+    });
+
+    it("should validate URLs that do not have a TLD", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            require_tld: false,
+          },
+        ],
+        valid: [
+          "http://foobar.com/",
+          "http://foobar/",
+          "http://localhost/",
+          "foobar/",
+          "foobar",
+        ],
+        invalid: [],
+      });
+    });
+
+    it("should validate URLs with a trailing dot option", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            allow_trailing_dot: true,
+            require_tld: false,
+          },
+        ],
+        valid: ["http://example.com.", "foobar."],
+      });
+    });
+
+    it("should validate URLs with column and no port", () => {
+      test({
+        validator: "isURL",
+        valid: ["http://example.com:", "ftp://example.com:"],
+        invalid: ["https://example.com:abc"],
+      });
+    });
+
+    it("should validate sftp protocol URL containing column and no port", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            protocols: ["sftp"],
+          },
+        ],
+        valid: ["sftp://user:[email protected]:/incoming/things.csv"],
+      });
+    });
+
+    it("should validate protocol relative URLs", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            allow_protocol_relative_urls: true,
+          },
+        ],
+        valid: ["//foobar.com", "http://foobar.com", "foobar.com"],
+        invalid: [
+          "://foobar.com",
+          "/foobar.com",
+          "////foobar.com",
+          "http:////foobar.com",
+        ],
+      });
+    });
+
+    it("should not validate URLs with fragments when allow fragments is false", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            allow_fragments: false,
+          },
+        ],
+        valid: ["http://foobar.com", "foobar.com"],
+        invalid: ["http://foobar.com#part", "foobar.com#part"],
+      });
+    });
+
+    it("should not validate URLs with query components when allow query components is false", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            allow_query_components: false,
+          },
+        ],
+        valid: ["http://foobar.com", "foobar.com"],
+        invalid: [
+          "http://foobar.com?foo=bar",
+          "http://foobar.com?foo=bar&bar=foo",
+          "foobar.com?foo=bar",
+          "foobar.com?foo=bar&bar=foo",
+        ],
+      });
+    });
+
+    it("should not validate protocol relative URLs when require protocol is true", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            allow_protocol_relative_urls: true,
+            require_protocol: true,
+          },
+        ],
+        valid: ["http://foobar.com"],
+        invalid: ["//foobar.com", "://foobar.com", "/foobar.com", "foobar.com"],
+      });
+    });
+
+    it("should let users specify whether URLs require a protocol", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            require_protocol: true,
+          },
+        ],
+        valid: ["http://foobar.com/"],
+        invalid: ["http://localhost/", "foobar.com", "foobar"],
+      });
+    });
+
+    it("should let users specify a host whitelist", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            host_whitelist: ["foo.com", "bar.com"],
+          },
+        ],
+        valid: ["http://bar.com/", "http://foo.com/"],
+        invalid: ["http://foobar.com", "http://foo.bar.com/", "http://qux.com"],
+      });
+    });
+
+    it("should allow regular expressions in the host whitelist", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            host_whitelist: ["bar.com", "foo.com", /\.foo\.com$/],
+          },
+        ],
+        valid: [
+          "http://bar.com/",
+          "http://foo.com/",
+          "http://images.foo.com/",
+          "http://cdn.foo.com/",
+          "http://a.b.c.foo.com/",
+        ],
+        invalid: ["http://foobar.com", "http://foo.bar.com/", "http://qux.com"],
+      });
+    });
+
+    it("should let users specify a host blacklist", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            host_blacklist: ["foo.com", "bar.com"],
+          },
+        ],
+        valid: ["http://foobar.com", "http://foo.bar.com/", "http://qux.com"],
+        invalid: ["http://bar.com/", "http://foo.com/"],
+      });
+    });
+
+    it("should allow regular expressions in the host blacklist", () => {
+      test({
+        validator: "isURL",
+        args: [
+          {
+            host_blacklist: ["bar.com", "foo.com", /\.foo\.com$/],
+          },
+        ],
+        valid: ["http://foobar.com", "http://foo.bar.com/", "http://qux.com"],
+        invalid: [
+          "http://bar.com/",
+          "http://foo.com/",
+          "http://images.foo.com/",
+          "http://cdn.foo.com/",
+          "http://a.b.c.foo.com/",
+        ],
+      });
+    });
+
+    it("should allow rejecting urls containing authentication information", () => {
+      test({
+        validator: "isURL",
+        args: [{ disallow_auth: true }],
+        valid: ["doe.com"],
+        invalid: ["[email protected]", "john:[email protected]"],
+      });
+    });
+
+    it("should accept urls containing authentication information", () => {
+      test({
+        validator: "isURL",
+        args: [{ disallow_auth: false }],
+        valid: [
+          "[email protected]",
+          "user:@example.com",
+          "user:[email protected]",
+        ],
+        invalid: [
+          "user:user:[email protected]",
+          "@example.com",
+          ":@example.com",
+          ":example.com",
+        ],
+      });
+    });
+
+    it("should allow user to skip URL length validation", () => {
+      test({
+        validator: "isURL",
+        args: [{ validate_length: false }],
+        valid: [
+          "http://foobar.com/f",
+          `http://foobar.com/${new Array(2083).join("f")}`,
+        ],
+        invalid: [],
+      });
+    });
+
+    it("should allow user to configure the maximum URL length", () => {
+      test({
+        validator: "isURL",
+        args: [{ max_allowed_length: 20 }],
+        valid: [
+          "http://foobar.com/12", // 20 characters
+          "http://foobar.com/",
+        ],
+        invalid: [
+          "http://foobar.com/123", // 21 characters
+          "http://foobar.com/1234567890",
+        ],
+      });
+    });
+
+    it("should validate URLs with port present", () => {
+      test({
+        validator: "isURL",
+        args: [{ require_port: true }],
+        valid: [
+          "http://user:[email protected]:1",
+          "http://user:@www.foobar.com:65535",
+          "http://127.0.0.1:23",
+          "http://10.0.0.0:256",
+          "http://189.123.14.13:256",
+          "http://duckduckgo.com:65535?q=%2F",
+        ],
+        invalid: [
+          "http://user:[email protected]/",
+          "http://user:@www.foobar.com/",
+          "http://127.0.0.1/",
+          "http://10.0.0.0/",
+          "http://189.123.14.13/",
+          "http://duckduckgo.com/?q=%2F",
+        ],
+      });
+    });
+
+    it("should validate MAC addresses", () => {
+      test({
+        validator: "isMACAddress",
+        valid: [
+          "ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:ab",
+          "01:AB:03:04:05:06",
+          "A9 C5 D4 9F EB D3",
+          "01 02 03 04 05 ab",
+          "01-02-03-04-05-ab",
+          "0102.0304.05ab",
+          "ab:ab:ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:06:07:ab",
+          "01:AB:03:04:05:06:07:08",
+          "A9 C5 D4 9F EB D3 B6 65",
+          "01 02 03 04 05 06 07 ab",
+          "01-02-03-04-05-06-07-ab",
+          "0102.0304.0506.07ab",
+        ],
+        invalid: [
+          "abc",
+          "01:02:03:04:05",
+          "01:02:03:04:05:z0",
+          "01:02:03:04::ab",
+          "1:2:3:4:5:6",
+          "AB:CD:EF:GH:01:02",
+          "A9C5 D4 9F EB D3",
+          "01-02 03:04 05 ab",
+          "0102.03:04.05ab",
+          "900f/dffs/sdea",
+          "01:02:03:04:05:06:07",
+          "01:02:03:04:05:06:07:z0",
+          "01:02:03:04:05:06::ab",
+          "1:2:3:4:5:6:7:8",
+          "AB:CD:EF:GH:01:02:03:04",
+          "A9C5 D4 9F EB D3 B6 65",
+          "01-02 03:04 05 06 07 ab",
+          "0102.03:04.0506.07ab",
+          "900f/dffs/sdea/54gh",
+        ],
+      });
+      test({
+        validator: "isMACAddress",
+        args: [
+          {
+            eui: "48",
+          },
+        ],
+        valid: [
+          "ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:ab",
+          "01:AB:03:04:05:06",
+          "A9 C5 D4 9F EB D3",
+          "01 02 03 04 05 ab",
+          "01-02-03-04-05-ab",
+          "0102.0304.05ab",
+        ],
+        invalid: [
+          "ab:ab:ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:06:07:ab",
+          "01:AB:03:04:05:06:07:08",
+          "A9 C5 D4 9F EB D3 B6 65",
+          "01 02 03 04 05 06 07 ab",
+          "01-02-03-04-05-06-07-ab",
+          "0102.0304.0506.07ab",
+        ],
+      });
+      test({
+        validator: "isMACAddress",
+        args: [
+          {
+            eui: "64",
+          },
+        ],
+        valid: [
+          "ab:ab:ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:06:07:ab",
+          "01:AB:03:04:05:06:07:08",
+          "A9 C5 D4 9F EB D3 B6 65",
+          "01 02 03 04 05 06 07 ab",
+          "01-02-03-04-05-06-07-ab",
+          "0102.0304.0506.07ab",
+        ],
+        invalid: [
+          "ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:ab",
+          "01:AB:03:04:05:06",
+          "A9 C5 D4 9F EB D3",
+          "01 02 03 04 05 ab",
+          "01-02-03-04-05-ab",
+          "0102.0304.05ab",
+        ],
+      });
+    });
+
+    it("should validate MAC addresses without separator", () => {
+      test({
+        validator: "isMACAddress",
+        args: [
+          {
+            no_separators: true,
+          },
+        ],
+        valid: [
+          "abababababab",
+          "FFFFFFFFFFFF",
+          "0102030405ab",
+          "01AB03040506",
+          "abababababababab",
+          "FFFFFFFFFFFFFFFF",
+          "01020304050607ab",
+          "01AB030405060708",
+        ],
+        invalid: [
+          "abc",
+          "01:02:03:04:05",
+          "01:02:03:04::ab",
+          "1:2:3:4:5:6",
+          "AB:CD:EF:GH:01:02",
+          "ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:ab",
+          "01:AB:03:04:05:06",
+          "0102030405",
+          "01020304ab",
+          "123456",
+          "ABCDEFGH0102",
+          "01:02:03:04:05:06:07",
+          "01:02:03:04:05:06::ab",
+          "1:2:3:4:5:6:7:8",
+          "AB:CD:EF:GH:01:02:03:04",
+          "ab:ab:ab:ab:ab:ab:ab:ab",
+          "FF:FF:FF:FF:FF:FF:FF:FF",
+          "01:02:03:04:05:06:07:ab",
+          "01:AB:03:04:05:06:07:08",
+          "01020304050607",
+          "010203040506ab",
+          "12345678",
+          "ABCDEFGH01020304",
+        ],
+      });
+      test({
+        validator: "isMACAddress",
+        args: [
+          {
+            no_separators: true,
+            eui: "48",
+          },
+        ],
+        valid: ["abababababab", "FFFFFFFFFFFF", "0102030405ab", "01AB03040506"],
+        invalid: [
+          "abababababababab",
+          "FFFFFFFFFFFFFFFF",
+          "01020304050607ab",
+          "01AB030405060708",
+        ],
+      });
+      test({
+        validator: "isMACAddress",
+        args: [
+          {
+            no_separators: true,
+            eui: "64",
+          },
+        ],
+        valid: [
+          "abababababababab",
+          "FFFFFFFFFFFFFFFF",
+          "01020304050607ab",
+          "01AB030405060708",
+        ],
+        invalid: [
+          "abababababab",
+          "FFFFFFFFFFFF",
+          "0102030405ab",
+          "01AB03040506",
+        ],
+      });
+    });
+
+    it("should validate isIPRange", () => {
+      test({
+        validator: "isIPRange",
+        valid: [
+          "127.0.0.1/24",
+          "0.0.0.0/0",
+          "255.255.255.0/32",
+          "::/0",
+          "::/128",
+          "2001::/128",
+          "2001:800::/128",
+          "::ffff:127.0.0.1/128",
+        ],
+        invalid: [
+          "abc",
+          "127.200.230.1/35",
+          "127.200.230.1/-1",
+          "1.1.1.1/011",
+          "1.1.1/24.1",
+          "1.1.1.1/01",
+          "1.1.1.1/1.1",
+          "1.1.1.1/1.",
+          "1.1.1.1/1/1",
+          "1.1.1.1",
+          "::1",
+          "::1/164",
+          "2001::/240",
+          "2001::/-1",
+          "2001::/001",
+          "2001::/24.1",
+          "2001:db8:0000:1:1:1:1:1",
+          "::ffff:127.0.0.1",
+        ],
+      });
+      test({
+        validator: "isIPRange",
+        args: [4],
+        valid: [
+          "127.0.0.1/1",
+          "0.0.0.0/1",
+          "255.255.255.255/1",
+          "1.2.3.4/1",
+          "255.0.0.1/1",
+          "0.0.1.1/1",
+        ],
+        invalid: [
+          "abc",
+          "::1",
+          "2001:db8:0000:1:1:1:1:1",
+          "::ffff:127.0.0.1",
+          "137.132.10.01",
+          "0.256.0.256",
+          "255.256.255.256",
+        ],
+      });
+      test({
+        validator: "isIPRange",
+        args: [6],
+        valid: ["::1/1", "2001:db8:0000:1:1:1:1:1/1", "::ffff:127.0.0.1/1"],
+        invalid: [
+          "abc",
+          "127.0.0.1",
+          "0.0.0.0",
+          "255.255.255.255",
+          "1.2.3.4",
+          "::ffff:287.0.0.1",
+          "::ffff:287.0.0.1/254",
+          "%",
+          "fe80::1234%",
+          "fe80::1234%1%3%4",
+          "fe80%fe80%",
+        ],
+      });
+      test({
+        validator: "isIPRange",
+        args: [10],
+        valid: [],
+        invalid: [
+          "abc",
+          "127.0.0.1/1",
+          "0.0.0.0/1",
+          "255.255.255.255/1",
+          "1.2.3.4/1",
+          "::1/1",
+          "2001:db8:0000:1:1:1:1:1/1",
+        ],
+      });
+    });
+
+    it("should validate FQDN", () => {
+      test({
+        validator: "isFQDN",
+        valid: [
+          "domain.com",
+          "dom.plato",
+          "a.domain.co",
+          "foo--bar.com",
+          "xn--froschgrn-x9a.com",
+          "rebecca.blackfriday",
+          "1337.com",
+        ],
+        invalid: [
+          "abc",
+          "256.0.0.0",
+          "_.com",
+          "*.some.com",
+          "s!ome.com",
+          "domain.com/",
+          "/more.com",
+          "domain.com�",
+          "domain.co\u00A0m",
+          "domain.co\u1680m",
+          "domain.co\u2006m",
+          "domain.co\u2028m",
+          "domain.co\u2029m",
+          "domain.co\u202Fm",
+          "domain.co\u205Fm",
+          "domain.co\u3000m",
+          "domain.com\uDC00",
+          "domain.co\uEFFFm",
+          "domain.co\uFDDAm",
+          "domain.co\uFFF4m",
+          "domain.com©",
+          "example.0",
+          "192.168.0.9999",
+          "192.168.0",
+        ],
+      });
+    });
+    it("should validate FQDN with trailing dot option", () => {
+      test({
+        validator: "isFQDN",
+        args: [{ allow_trailing_dot: true }],
+        valid: ["example.com."],
+      });
+    });
+    it("should invalidate FQDN when not require_tld", () => {
+      test({
+        validator: "isFQDN",
+        args: [{ require_tld: false }],
+        invalid: ["example.0", "192.168.0", "192.168.0.9999"],
+      });
+    });
+    it("should validate FQDN when not require_tld but allow_numeric_tld", () => {
+      test({
+        validator: "isFQDN",
+        args: [{ allow_numeric_tld: true, require_tld: false }],
+        valid: ["example.0", "192.168.0", "192.168.0.9999"],
+      });
+    });
+    it("should validate FQDN with wildcard option", () => {
+      test({
+        validator: "isFQDN",
+        args: [{ allow_wildcard: true }],
+        valid: ["*.example.com", "*.shop.example.com"],
+      });
+    });
+    it("should validate FQDN with required allow_trailing_dot, allow_underscores and allow_numeric_tld options", () => {
+      test({
+        validator: "isFQDN",
+        args: [
+          {
+            allow_trailing_dot: true,
+            allow_underscores: true,
+            allow_numeric_tld: true,
+          },
+        ],
+        valid: ["abc.efg.g1h.", "as1s.sad3s.ssa2d."],
+      });
+    });
+
+    it("should validate alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        valid: ["abc", "ABC", "FoObar"],
+        invalid: ["abc1", "  foo  ", "", "ÄBC", "FÜübar", "Jön", "Heiß"],
+      });
+    });
+
+    it("should validate alpha string with ignored characters", () => {
+      test({
+        validator: "isAlpha",
+        args: ["en-US", { ignore: "- /" }], // ignore [space-/]
+        valid: ["en-US", "this is a valid alpha string", "us/usa"],
+        invalid: [
+          "1. this is not a valid alpha string",
+          "this$is also not a valid.alpha string",
+          "this is also not a valid alpha string.",
+        ],
+      });
+
+      test({
+        validator: "isAlpha",
+        args: ["en-US", { ignore: /[\s/-]/g }], // ignore [space -]
+        valid: ["en-US", "this is a valid alpha string"],
+        invalid: [
+          "1. this is not a valid alpha string",
+          "this$is also not a valid.alpha string",
+          "this is also not a valid alpha string.",
+        ],
+      });
+
+      test({
+        validator: "isAlpha",
+        args: ["en-US", { ignore: 1234 }], // invalid ignore matcher
+        error: ["alpha"],
+      });
+    });
+
+    it("should validate Azerbaijani alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["az-AZ"],
+        valid: [
+          "Azərbaycan",
+          "Bakı",
+          "üöğıəçş",
+          "sizAzərbaycanlaşdırılmışlardansınızmı",
+          "dahaBirDüzgünString",
+          "abcçdeəfgğhxıijkqlmnoöprsştuüvyz",
+        ],
+        invalid: ["rəqəm1", "  foo  ", "", "ab(cd)", "simvol@", "wəkil"],
+      });
+    });
+
+    it("should validate bulgarian alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["bg-BG"],
+        valid: ["абв", "АБВ", "жаба", "яГоДа"],
+        invalid: ["abc1", "  foo  ", "", "ЁЧПС", "_аз_обичам_обувки_", "ехо!"],
+      });
+    });
+
+    it("should validate Bengali alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["bn-BD"],
+        valid: ["অয়াওর", "ফগফদ্রত", "ফদ্ম্যতভ", "বেরেওভচনভন", "আমারবাসগা"],
+        invalid: ["দাস২৩৪", "  দ্গফহ্নভ  ", "", "(গফদ)"],
+      });
+    });
+
+    it("should validate czech alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["cs-CZ"],
+        valid: ["žluťoučký", "KŮŇ", "Pěl", "Ďábelské", "ódy"],
+        invalid: ["ábc1", "  fůj  ", ""],
+      });
+    });
+
+    it("should validate slovak alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["sk-SK"],
+        valid: [
+          "môj",
+          "ľúbím",
+          "mäkčeň",
+          "stĹp",
+          "vŕba",
+          "ňorimberk",
+          "ťava",
+          "žanéta",
+          "Ďábelské",
+          "ódy",
+        ],
+        invalid: ["1moj", "你好世界", "  Привет мир  ", "مرحبا العا "],
+      });
+    });
+
+    it("should validate danish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["da-DK"],
+        valid: ["aøå", "Ære", "Øre", "Åre"],
+        invalid: ["äbc123", "ÄBC11", ""],
+      });
+    });
+
+    it("should validate dutch alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["nl-NL"],
+        valid: ["Kán", "één", "vóór", "nú", "héél"],
+        invalid: ["äca ", "abcß", "Øre"],
+      });
+    });
+
+    it("should validate german alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["de-DE"],
+        valid: ["äbc", "ÄBC", "FöÖbär", "Heiß"],
+        invalid: ["äbc1", "  föö  ", ""],
+      });
+    });
+
+    it("should validate hungarian alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["hu-HU"],
+        valid: ["árvíztűrőtükörfúrógép", "ÁRVÍZTŰRŐTÜKÖRFÚRÓGÉP"],
+        invalid: ["äbc1", "  fäö  ", "Heiß", ""],
+      });
+    });
+
+    it("should validate portuguese alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["pt-PT"],
+        valid: ["palíndromo", "órgão", "qwértyúão", "àäãcëüïÄÏÜ"],
+        invalid: ["12abc", "Heiß", "Øre", "æøå", ""],
+      });
+    });
+
+    it("should validate italian alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["it-IT"],
+        valid: [
+          "àéèìîóòù",
+          "correnti",
+          "DEFINIZIONE",
+          "compilazione",
+          "metró",
+          "pèsca",
+          "PÉSCA",
+          "genî",
+        ],
+        invalid: ["äbc123", "ÄBC11", "æøå", ""],
+      });
+    });
+
+    it("should validate Japanese alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["ja-JP"],
+        valid: [
+          "あいうえお",
+          "がぎぐげご",
+          "ぁぃぅぇぉ",
+          "アイウエオ",
+          "ァィゥェ",
+          "アイウエオ",
+          "吾輩は猫である",
+          "臥薪嘗胆",
+          "新世紀エヴァンゲリオン",
+          "天国と地獄",
+          "七人の侍",
+          "シン・ウルトラマン",
+        ],
+        invalid: ["あいう123", "abcあいう", "1984"],
+      });
+    });
+
+    it("should validate kazakh alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["kk-KZ"],
+        valid: [
+          "Сәлем",
+          "қанағаттандырылмағандықтарыңыздан",
+          "Кешіріңіз",
+          "Өкінішке",
+          "Қайталаңызшы",
+          "ағылшынша",
+          "түсінбедім",
+        ],
+        invalid: ["Кешіріңіз1", "  Кет бар  ", "مرحبا العا"],
+      });
+    });
+
+    it("should validate Vietnamese alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["vi-VN"],
+        valid: ["thiến", "nghiêng", "xin", "chào", "thế", "giới"],
+        invalid: ["thầy3", "Ba gà", ""],
+      });
+    });
+
+    it("should validate arabic alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["ar"],
+        valid: ["أبت", "اَبِتَثّجً"],
+        invalid: [
+          "١٢٣أبت",
+          "١٢٣",
+          "abc1",
+          "  foo  ",
+          "",
+          "ÄBC",
+          "FÜübar",
+          "Jön",
+          "Heiß",
+        ],
+      });
+    });
+
+    it("should validate farsi alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["fa-IR"],
+        valid: ["پدر", "مادر", "برادر", "خواهر"],
+        invalid: [
+          "فارسی۱۲۳",
+          "۱۶۴",
+          "abc1",
+          "  foo  ",
+          "",
+          "ÄBC",
+          "FÜübar",
+          "Jön",
+          "Heiß",
+        ],
+      });
+    });
+
+    it("should validate finnish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["fi-FI"],
+        valid: ["äiti", "Öljy", "Åke", "testÖ"],
+        invalid: ["AİıÖöÇ窺ĞğÜüZ", "äöå123", ""],
+      });
+    });
+
+    it("should validate kurdish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["ku-IQ"],
+        valid: ["ئؤڤگێ", "کوردستان"],
+        invalid: [
+          "ئؤڤگێ١٢٣",
+          "١٢٣",
+          "abc1",
+          "  foo  ",
+          "",
+          "ÄBC",
+          "FÜübar",
+          "Jön",
+          "Heiß",
+        ],
+      });
+    });
+
+    it("should validate norwegian alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["nb-NO"],
+        valid: ["aøå", "Ære", "Øre", "Åre"],
+        invalid: ["äbc123", "ÄBC11", ""],
+      });
+    });
+
+    it("should validate polish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["pl-PL"],
+        valid: [
+          "kreską",
+          "zamknięte",
+          "zwykłe",
+          "kropką",
+          "przyjęły",
+          "święty",
+          "Pozwól",
+        ],
+        invalid: ["12řiď ", "blé!!", "föö!2!"],
+      });
+    });
+
+    it("should validate serbian cyrillic alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["sr-RS"],
+        valid: ["ШћжЂљЕ", "ЧПСТЋЏ"],
+        invalid: ["řiď ", "blé33!!", "föö!!"],
+      });
+    });
+
+    it("should validate serbian latin alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["sr-RS@latin"],
+        valid: ["ŠAabčšđćž", "ŠATROĆčđš"],
+        invalid: ["12řiď ", "blé!!", "föö!2!"],
+      });
+    });
+
+    it("should validate spanish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["es-ES"],
+        valid: ["ábcó", "ÁBCÓ", "dormís", "volvés", "español"],
+        invalid: ["äca ", "abcß", "föö!!"],
+      });
+    });
+
+    it("should validate swedish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["sv-SE"],
+        valid: ["religiös", "stjäla", "västgöte", "Åre"],
+        invalid: ["AİıÖöÇ窺ĞğÜüZ", "religiös23", ""],
+      });
+    });
+
+    it("should validate defined arabic locales alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["ar-SY"],
+        valid: ["أبت", "اَبِتَثّجً"],
+        invalid: [
+          "١٢٣أبت",
+          "١٢٣",
+          "abc1",
+          "  foo  ",
+          "",
+          "ÄBC",
+          "FÜübar",
+          "Jön",
+          "Heiß",
+        ],
+      });
+    });
+
+    it("should validate turkish alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["tr-TR"],
+        valid: ["AİıÖöÇ窺ĞğÜüZ"],
+        invalid: [
+          "0AİıÖöÇ窺ĞğÜüZ1",
+          "  AİıÖöÇ窺ĞğÜüZ  ",
+          "abc1",
+          "  foo  ",
+          "",
+          "ÄBC",
+          "Heiß",
+        ],
+      });
+    });
+
+    it("should validate urkrainian alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["uk-UA"],
+        valid: ["АБВГҐДЕЄЖЗИIЇЙКЛМНОПРСТУФХЦШЩЬЮЯ"],
+        invalid: [
+          "0AİıÖöÇ窺ĞğÜüZ1",
+          "  AİıÖöÇ窺ĞğÜüZ  ",
+          "abc1",
+          "  foo  ",
+          "",
+          "ÄBC",
+          "Heiß",
+          "ЫыЪъЭэ",
+        ],
+      });
+    });
+
+    it("should validate greek alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["el-GR"],
+        valid: [
+          "αβγδεζηθικλμνξοπρςστυφχψω",
+          "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ",
+          "άέήίΰϊϋόύώ",
+          "ΆΈΉΊΪΫΎΏ",
+        ],
+        invalid: [
+          "0AİıÖöÇ窺ĞğÜüZ1",
+          "  AİıÖöÇ窺ĞğÜüZ  ",
+          "ÄBC",
+          "Heiß",
+          "ЫыЪъЭэ",
+          "120",
+          "jαckγ",
+        ],
+      });
+    });
+
+    it("should validate Hebrew alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["he"],
+        valid: ["בדיקה", "שלום"],
+        invalid: ["בדיקה123", "  foo  ", "abc1", ""],
+      });
+    });
+
+    it("should validate Hindi alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["hi-IN"],
+        valid: [
+          "अतअपनाअपनीअपनेअभीअंदरआदिआपइत्यादिइनइनकाइन्हींइन्हेंइन्होंइसइसकाइसकीइसकेइसमेंइसीइसेउनउनकाउनकीउनकेउनकोउन्हींउन्हेंउन्होंउसउसकेउसीउसेएकएवंएसऐसेऔरकईकरकरताकरतेकरनाकरनेकरेंकहतेकहाकाकाफ़ीकिकितनाकिन्हेंकिन्होंकियाकिरकिसकिसीकिसेकीकुछकुलकेकोकोईकौनकौनसागयाघरजबजहाँजाजितनाजिनजिन्हेंजिन्होंजिसजिसेजीधरजैसाजैसेजोतकतबतरहतिनतिन्हेंतिन्होंतिसतिसेतोथाथीथेदबारादियादुसरादूसरेदोद्वाराननकेनहींनानिहायतनीचेनेपरपहलेपूरापेफिरबनीबहीबहुतबादबालाबिलकुलभीभीतरमगरमानोमेमेंयदियहयहाँयहीयायिहयेरखेंरहारहेऱ्वासालिएलियेलेकिनववग़ैरहवर्गवहवहाँवहींवालेवुहवेवोसकतासकतेसबसेसभीसाथसाबुतसाभसारासेसोसंगहीहुआहुईहुएहैहैंहोहोताहोतीहोतेहोनाहोने",
+          "इन्हें",
+        ],
+        invalid: ["अत०२३४५६७८९", "अत 12", " अत ", "abc1", "abc", ""],
+      });
+    });
+
+    it("should validate persian alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["fa-IR"],
+        valid: ["تست", "عزیزم", "ح"],
+        invalid: ["تست 1", "  عزیزم  ", ""],
+      });
+    });
+
+    it("should validate Thai alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["th-TH"],
+        valid: ["สวัสดี", "ยินดีต้อนรับ เทสเคส"],
+        invalid: ["สวัสดีHi", "123 ยินดีต้อนรับ", "ยินดีต้อนรับ-๑๒๓"],
+      });
+    });
+
+    it("should validate Korea alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["ko-KR"],
+        valid: [
+          "ㄱ",
+          "ㅑ",
+          "ㄱㄴㄷㅏㅕ",
+          "세종대왕",
+          "나랏말싸미듕귁에달아문자와로서르사맛디아니할쎄",
+        ],
+        invalid: [
+          "abc",
+          "123",
+          "흥선대원군 문호개방",
+          "1592년임진왜란",
+          "대한민국!",
+        ],
+      });
+    });
+
+    it("should validate Sinhala alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["si-LK"],
+        valid: ["චතුර", "කචටදබ", "ඎඏදාෛපසුගො"],
+        invalid: ["ஆஐअतක", "කචට 12", " ඎ ", "abc1", "abc", ""],
+      });
+    });
+
+    it("should validate Esperanto alpha strings", () => {
+      test({
+        validator: "isAlpha",
+        args: ["eo"],
+        valid: [
+          "saluton",
+          "eĥoŝanĝoĉiuĵaŭde",
+          "EĤOŜANĜOĈIUĴAŬDE",
+          "Esperanto",
+          "LaŭLudovikoZamenhofBongustasFreŝaĈeĥaManĝaĵoKunSpicoj",
+        ],
+        invalid: ["qwxyz", "1887", "qwxyz 1887"],
+      });
+    });
+
+    it("should error on invalid locale", () => {
+      test({
+        validator: "isAlpha",
+        args: ["is-NOT"],
+        error: ["abc", "ABC"],
+      });
+    });
+
+    it("should validate alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        valid: ["abc123", "ABC11"],
+        invalid: ["abc ", "foo!!", "ÄBC", "FÜübar", "Jön"],
+      });
+    });
+
+    it("should validate alphanumeric string with ignored characters", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["en-US", { ignore: "@_- " }], // ignore [@ space _ -]
+        valid: [
+          "Hello@123",
+          "this is a valid alphaNumeric string",
+          "En-US @ alpha_numeric",
+        ],
+        invalid: ["In*Valid", "hello$123", "{invalid}"],
+      });
+
+      test({
+        validator: "isAlphanumeric",
+        args: ["en-US", { ignore: /[\s/-]/g }], // ignore [space -]
+        valid: ["en-US", "this is a valid alphaNumeric string"],
+        invalid: ["INVALID$ AlphaNum Str", "hello@123", "abc*123"],
+      });
+
+      test({
+        validator: "isAlphanumeric",
+        args: ["en-US", { ignore: 1234 }], // invalid ignore matcher (ignore should be instance of a String or RegExp)
+        error: ["alpha"],
+      });
+    });
+
+    it("should validate defined english aliases", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["en-GB"],
+        valid: ["abc123", "ABC11"],
+        invalid: ["abc ", "foo!!", "ÄBC", "FÜübar", "Jön"],
+      });
+    });
+
+    it("should validate Azerbaijani alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["az-AZ"],
+        valid: ["Azərbaycan", "Bakı", "abc1", "abcç2", "3kərə4kərə"],
+        invalid: ["  foo1  ", "", "ab(cd)", "simvol@", "wəkil"],
+      });
+    });
+
+    it("should validate bulgarian alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["bg-BG"],
+        valid: ["абв1", "4АБ5В6", "жаба", "яГоДа2", "йЮя", "123"],
+        invalid: [" ", "789  ", "hello000"],
+      });
+    });
+
+    it("should validate Bengali alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["bn-BD"],
+        valid: [
+          "দ্গজ্ঞহ্রত্য১২৩",
+          "দ্গগফ৮৯০",
+          "চব৩৬৫ভবচ",
+          "১২৩৪",
+          "৩৪২৩৪দফজ্ঞদফ",
+        ],
+        invalid: [" ", "১২৩  ", "hel৩২0"],
+      });
+    });
+
+    it("should validate czech alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["cs-CZ"],
+        valid: ["řiť123", "KŮŇ11"],
+        invalid: ["řiď ", "blé!!"],
+      });
+    });
+
+    it("should validate slovak alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["sk-SK"],
+        valid: [
+          "1môj",
+          "2ľúbím",
+          "3mäkčeň",
+          "4stĹp",
+          "5vŕba",
+          "6ňorimberk",
+          "7ťava",
+          "8žanéta",
+          "9Ďábelské",
+          "10ódy",
+        ],
+        invalid: ["1moj!", "你好世界", "  Привет мир  "],
+      });
+    });
+
+    it("should validate danish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["da-DK"],
+        valid: ["ÆØÅ123", "Ære321", "321Øre", "123Åre"],
+        invalid: ["äbc123", "ÄBC11", ""],
+      });
+    });
+
+    it("should validate dutch alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["nl-NL"],
+        valid: ["Kán123", "één354", "v4óór", "nú234", "hé54él"],
+        invalid: ["1äca ", "ab3cß", "Øre"],
+      });
+    });
+
+    it("should validate finnish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["fi-FI"],
+        valid: ["äiti124", "ÖLJY1234", "123Åke", "451åå23"],
+        invalid: ["AİıÖöÇ窺ĞğÜüZ", "foo!!", ""],
+      });
+    });
+
+    it("should validate german alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["de-DE"],
+        valid: ["äbc123", "ÄBC11"],
+        invalid: ["äca ", "föö!!"],
+      });
+    });
+
+    it("should validate hungarian alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["hu-HU"],
+        valid: ["0árvíztűrőtükörfúrógép123", "0ÁRVÍZTŰRŐTÜKÖRFÚRÓGÉP123"],
+        invalid: ["1időúr!", "äbc1", "  fäö  ", "Heiß!", ""],
+      });
+    });
+
+    it("should validate portuguese alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["pt-PT"],
+        valid: ["palíndromo", "2órgão", "qwértyúão9", "àäãcë4üïÄÏÜ"],
+        invalid: ["!abc", "Heiß", "Øre", "æøå", ""],
+      });
+    });
+
+    it("should validate italian alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["it-IT"],
+        valid: [
+          "123àéèìîóòù",
+          "123correnti",
+          "DEFINIZIONE321",
+          "compil123azione",
+          "met23ró",
+          "pès56ca",
+          "PÉS45CA",
+          "gen45î",
+        ],
+        invalid: ["äbc123", "ÄBC11", "æøå", ""],
+      });
+    });
+
+    it("should validate spanish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["es-ES"],
+        valid: ["ábcó123", "ÁBCÓ11"],
+        invalid: ["äca ", "abcß", "föö!!"],
+      });
+    });
+
+    it("should validate Vietnamese alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["vi-VN"],
+        valid: ["Thầy3", "3Gà"],
+        invalid: ["toang!", "Cậu Vàng"],
+      });
+    });
+
+    it("should validate arabic alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["ar"],
+        valid: ["أبت123", "أبتَُِ١٢٣"],
+        invalid: ["äca ", "abcß", "föö!!"],
+      });
+    });
+
+    it("should validate Hindi alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["hi-IN"],
+        valid: [
+          "अतअपनाअपनीअपनेअभीअंदरआदिआपइत्यादिइनइनकाइन्हींइन्हेंइन्होंइसइसकाइसकीइसकेइसमेंइसीइसेउनउनकाउनकीउनकेउनकोउन्हींउन्हेंउन्होंउसउसकेउसीउसेएकएवंएसऐसेऔरकईकरकरताकरतेकरनाकरनेकरेंकहतेकहाकाकाफ़ीकिकितनाकिन्हेंकिन्होंकियाकिरकिसकिसीकिसेकीकुछकुलकेकोकोईकौनकौनसागयाघरजबजहाँजाजितनाजिनजिन्हेंजिन्होंजिसजिसेजीधरजैसाजैसेजोतकतबतरहतिनतिन्हेंतिन्होंतिसतिसेतोथाथीथेदबारादियादुसरादूसरेदोद्वाराननकेनहींनानिहायतनीचेनेपरपहलेपूरापेफिरबनीबहीबहुतबादबालाबिलकुलभीभीतरमगरमानोमेमेंयदियहयहाँयहीयायिहयेरखेंरहारहेऱ्वासालिएलियेलेकिनववग़ैरहवर्गवहवहाँवहींवालेवुहवेवोसकतासकतेसबसेसभीसाथसाबुतसाभसारासेसोसंगहीहुआहुईहुएहैहैंहोहोताहोतीहोतेहोनाहोने०२३४५६७८९",
+          "इन्हें४५६७८९",
+        ],
+        invalid: ["अत ०२३४५६७८९", " ३४५६७८९", "12 ", " अत ", "abc1", "abc", ""],
+      });
+    });
+
+    it("should validate farsi alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["fa-IR"],
+        valid: ["پارسی۱۲۳", "۱۴۵۶", "مژگان9"],
+        invalid: ["äca ", "abcßة", "föö!!", "٤٥٦"],
+      });
+    });
+
+    it("should validate Japanese alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["ja-JP"],
+        valid: [
+          "あいうえお123",
+          "123がぎぐげご",
+          "ぁぃぅぇぉ",
+          "アイウエオ",
+          "ァィゥェ",
+          "アイウエオ",
+          "20世紀少年",
+          "華氏451度",
+        ],
+        invalid: [" あいう123 ", "abcあいう", "生きろ!!"],
+      });
+    });
+
+    it("should validate kazakh alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["kk-KZ"],
+        valid: [
+          "Сәлем777",
+          "123Бәсе",
+          "солай",
+          "Жиенсу",
+          "90тоқсан",
+          "жалғыз",
+          "570бердім",
+        ],
+        invalid: [" кешіріңіз ", "abcағылшынша", "мүмкін!!"],
+      });
+    });
+
+    it("should validate kurdish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["ku-IQ"],
+        valid: ["ئؤڤگێ١٢٣"],
+        invalid: ["äca ", "abcß", "föö!!"],
+      });
+    });
+
+    it("should validate defined arabic aliases", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["ar-SY"],
+        valid: ["أبت123", "أبتَُِ١٢٣"],
+        invalid: ["abc ", "foo!!", "ÄBC", "FÜübar", "Jön"],
+      });
+    });
+
+    it("should validate norwegian alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["nb-NO"],
+        valid: ["ÆØÅ123", "Ære321", "321Øre", "123Åre"],
+        invalid: ["äbc123", "ÄBC11", ""],
+      });
+    });
+
+    it("should validate polish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["pl-PL"],
+        valid: [
+          "kre123ską",
+          "zam21knięte",
+          "zw23ykłe",
+          "123",
+          "prz23yjęły",
+          "świ23ęty",
+          "Poz1322wól",
+        ],
+        invalid: ["12řiď ", "blé!!", "föö!2!"],
+      });
+    });
+
+    it("should validate serbian cyrillic alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["sr-RS"],
+        valid: ["ШћжЂљЕ123", "ЧПСТ132ЋЏ"],
+        invalid: ["řiď ", "blé!!", "föö!!"],
+      });
+    });
+
+    it("should validate serbian latin alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["sr-RS@latin"],
+        valid: ["ŠAabčšđćž123", "ŠATRO11Ćčđš"],
+        invalid: ["řiď ", "blé!!", "föö!!"],
+      });
+    });
+
+    it("should validate swedish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["sv-SE"],
+        valid: ["religiös13", "st23jäla", "västgöte123", "123Åre"],
+        invalid: ["AİıÖöÇ窺ĞğÜüZ", "foo!!", ""],
+      });
+    });
+
+    it("should validate turkish alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["tr-TR"],
+        valid: ["AİıÖöÇ窺ĞğÜüZ123"],
+        invalid: ["AİıÖöÇ窺ĞğÜüZ ", "foo!!", "ÄBC"],
+      });
+    });
+
+    it("should validate urkrainian alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["uk-UA"],
+        valid: ["АБВГҐДЕЄЖЗИIЇЙКЛМНОПРСТУФХЦШЩЬЮЯ123"],
+        invalid: ["éeoc ", "foo!!", "ÄBC", "ЫыЪъЭэ"],
+      });
+    });
+
+    it("should validate greek alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["el-GR"],
+        valid: [
+          "αβγδεζηθικλμνξοπρςστυφχψω",
+          "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ",
+          "20θ",
+          "1234568960",
+        ],
+        invalid: [
+          "0AİıÖöÇ窺ĞğÜüZ1",
+          "  AİıÖöÇ窺ĞğÜüZ  ",
+          "ÄBC",
+          "Heiß",
+          "ЫыЪъЭэ",
+          "jαckγ",
+        ],
+      });
+    });
+
+    it("should validate Hebrew alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["he"],
+        valid: ["אבג123", "שלום11"],
+        invalid: ["אבג ", "לא!!", "abc", "  foo  "],
+      });
+    });
+
+    it("should validate Thai alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["th-TH"],
+        valid: ["สวัสดี ๑๒๓", "ยินดีต้อนรับทั้ง ๒ คน"],
+        invalid: ["1.สวัสดี", "ยินดีต้อนรับทั้ง 2 คน"],
+      });
+    });
+
+    it("should validate Korea alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["ko-KR"],
+        valid: ["2002", "훈민정음", "1446년훈민정음반포"],
+        invalid: ["2022!", "2019 코로나시작", "1.로렘입숨"],
+      });
+    });
+
+    it("should validate Sinhala alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["si-LK"],
+        valid: ["චතුර", "කචට12", "ඎඏදාෛපසුගො2", "1234"],
+        invalid: ["ஆஐअतක", "කචට 12", " ඎ ", "a1234", "abc", ""],
+      });
+    });
+
+    it("should validate Esperanto alphanumeric strings", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["eo"],
+        valid: [
+          "saluton",
+          "eĥoŝanĝoĉiuĵaŭde0123456789",
+          "EĤOŜANĜOĈIUĴAŬDE0123456789",
+          "Esperanto1887",
+          "LaŭLudovikoZamenhofBongustasFreŝaĈeĥaManĝaĵoKunSpicoj",
+        ],
+        invalid: ["qwxyz", "qwxyz 1887"],
+      });
+    });
+
+    it("should error on invalid locale", () => {
+      test({
+        validator: "isAlphanumeric",
+        args: ["is-NOT"],
+        error: ["1234568960", "abc123"],
+      });
+    });
+
+    it("should validate numeric strings", () => {
+      test({
+        validator: "isNumeric",
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "123.123",
+          "+000000",
+        ],
+        invalid: [" ", "", "."],
+      });
+    });
+
+    it("should validate numeric strings without symbols", () => {
+      test({
+        validator: "isNumeric",
+        args: [
+          {
+            no_symbols: true,
+          },
+        ],
+        valid: ["123", "00123", "0"],
+        invalid: ["-0", "+000000", "", "+123", "123.123", "-00123", " ", "."],
+      });
+    });
+
+    it("should validate numeric strings with locale", () => {
+      test({
+        validator: "isNumeric",
+        args: [
+          {
+            locale: "fr-FR",
+          },
+        ],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "123,123",
+          "+000000",
+        ],
+        invalid: [" ", "", ","],
+      });
+    });
+
+    it("should validate numeric strings with locale", () => {
+      test({
+        validator: "isNumeric",
+        args: [
+          {
+            locale: "fr-CA",
+          },
+        ],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "123,123",
+          "+000000",
+        ],
+        invalid: [" ", "", "."],
+      });
+    });
+
+    it("should validate ports", () => {
+      test({
+        validator: "isPort",
+        valid: ["0", "22", "80", "443", "3000", "8080", "65535"],
+        invalid: ["", "-1", "65536", "0080"],
+      });
+    });
+
+    it("should validate passport number", () => {
+      test({
+        validator: "isPassportNumber",
+        args: ["AM"],
+        valid: ["AF0549358"],
+        invalid: ["A1054935"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["ID"],
+        valid: ["C1253473", "B5948378", "A4859472"],
+        invalid: ["D39481728", "A-3847362", "324132132"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["AR"],
+        valid: ["AAC811035"],
+        invalid: ["A11811035"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["AT"],
+        valid: ["P 1630837", "P 4366918"],
+        invalid: ["0 1630837"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["AU"],
+        valid: ["N0995852", "L4819236"],
+        invalid: ["1A012345"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["AZ"],
+        valid: ["A16175905", "A16175958"],
+        invalid: ["AZ1234584"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["BE"],
+        valid: ["EM000000", "LA080402"],
+        invalid: ["00123456"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["BG"],
+        valid: ["346395366", "039903356"],
+        invalid: ["ABC123456"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["BR"],
+        valid: ["FZ973689", "GH231233"],
+        invalid: ["ABX29332"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["BY"],
+        valid: ["MP3899901"],
+        invalid: ["345333454", "FG53334542"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["CA"],
+        valid: ["GA302922", "ZE000509", "A123456AB", "Z556378HG"],
+        invalid: [
+          "AB0123456",
+          "AZ556378H",
+          "556378HCX",
+          "556378432",
+          "5563784",
+          "#B12345FD",
+          "A43F12354",
+        ],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["CH"],
+        valid: ["S1100409", "S5200073", "X4028791"],
+        invalid: ["AB123456"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["CN"],
+        valid: ["G25352389", "E00160027", "EA1234567"],
+        invalid: [
+          "K0123456",
+          "E-1234567",
+          "G.1234567",
+          "GA1234567",
+          "EI1234567",
+          "GO1234567",
+        ],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["CY"],
+        valid: ["K00000413"],
+        invalid: ["K10100"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["CZ"],
+        valid: ["99003853", "42747260"],
+        invalid: ["012345678", "AB123456"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["DE"],
+        valid: ["C01X00T47", "C26VMVVC3"],
+        invalid: ["AS0123456", "A012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["DK"],
+        valid: ["900010172"],
+        invalid: ["01234567", "K01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["DZ"],
+        valid: ["855609385", "154472412", "197025599"],
+        invalid: [
+          "AS0123456",
+          "A012345678",
+          "0123456789",
+          "12345678",
+          "98KK54321",
+        ],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["EE"],
+        valid: ["K4218285", "K3295867", "KB0167630", "VD0023777"],
+        invalid: ["K01234567", "KB00112233"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["ES"],
+        valid: ["AF238143", "ZAB000254"],
+        invalid: ["AF01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["FI"],
+        valid: ["XP8271602", "XD8500003"],
+        invalid: ["A01234567", "ABC012345"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["FR"],
+        valid: ["10CV28144", "60RF19342", "05RP34083"],
+        invalid: ["012345678", "AB0123456", "01C234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["GB"],
+        valid: ["925076473", "107182890", "104121156"],
+        invalid: ["A012345678", "K000000000", "0123456789"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["GR"],
+        valid: ["AE0000005", "AK0219304"],
+        invalid: ["A01234567", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["HR"],
+        valid: ["007007007", "138463188"],
+        invalid: ["A01234567", "00112233"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["HU"],
+        valid: ["ZA084505", "BA0006902"],
+        invalid: ["A01234567", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["IE"],
+        valid: ["D23145890", "X65097105", "XN0019390"],
+        invalid: ["XND012345", "0123456789"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["IN"],
+        valid: ["A-1234567", "A1234567", "X0019390"],
+        invalid: ["AB-1234567", "0123456789"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["IR"],
+        valid: ["J97634522", "A01234567", "Z11977831"],
+        invalid: ["A0123456", "A0123456Z", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["IS"],
+        valid: ["A2040611", "A1197783"],
+        invalid: ["K0000000", "01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["IT"],
+        valid: ["YA8335453", "KK0000000"],
+        invalid: ["01234567", "KAK001122"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["JM"],
+        valid: ["A0123456"],
+        invalid: ["s0123456", "a01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["JP"],
+        valid: ["NH1106002", "TE3180251", "XS1234567"],
+        invalid: ["X12345678", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["KR"],
+        valid: ["M35772699", "M70689098"],
+        invalid: ["X12345678", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["KZ"],
+        valid: ["A0123456", "b0123456"],
+        invalid: ["01234567", "bb0123456"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["LI"],
+        valid: ["a01234", "f01234"],
+        invalid: ["012345"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["LT"],
+        valid: ["20200997", "LB311756"],
+        invalid: ["LB01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["LU"],
+        valid: ["JCU9J4T2", "JC4E7L2H"],
+        invalid: ["JCU9J4T", "JC4E7L2H0"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["LV"],
+        valid: ["LV9000339", "LV4017173"],
+        invalid: ["LV01234567", "4017173LV"],
+      });
+      test({
+        validator: "isPassportNumber",
+        args: ["LY"],
+        valid: ["P79JF34X", "RJ45H4V2"],
+        invalid: ["P79JF34", "RJ45H4V2C", "RJ4-H4V2"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["MT"],
+        valid: ["1026564"],
+        invalid: ["01234567", "MT01234"],
+      });
+      test({
+        validator: "isPassportNumber",
+        args: ["MZ"],
+        valid: ["AB0808212", "08AB12123"],
+        invalid: ["1AB011241", "1AB01121", "ABAB01121"],
+      });
+      test({
+        validator: "isPassportNumber",
+        args: ["MY"],
+        valid: ["A00000000", "H12345678", "K43143233"],
+        invalid: ["A1234567", "C01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["MX"],
+        valid: ["43986369222", "01234567890"],
+        invalid: ["ABC34567890", "34567890"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["NL"],
+        valid: ["XTR110131", "XR1001R58"],
+        invalid: ["XTR11013R", "XR1001R58A"],
+      });
+      test({
+        validator: "isPassportNumber",
+        args: ["PK"],
+        valid: ["QZ1791293", "XR1001458"],
+        invalid: ["XTR11013R", "XR1001R58A"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["PH"],
+        valid: ["X123456", "XY123456", "XY1234567", "X1234567Y"],
+        invalid: ["XY12345", "X12345Z", "XY12345Z"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["NZ"],
+        valid: [
+          "Lf012345",
+          "La012345",
+          "Ld012345",
+          "Lh012345",
+          "ea012345",
+          "ep012345",
+          "n012345",
+        ],
+        invalid: ["Lp012345", "nd012345", "ed012345", "eh012345", "ef012345"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["PL"],
+        valid: ["ZS 0000177", "AN 3000011"],
+        invalid: ["A1 0000177", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["PT"],
+        valid: ["I700044", "K453286"],
+        invalid: ["0700044", "K4532861"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["RO"],
+        valid: ["05485968", "040005646"],
+        invalid: ["R05485968", "0511060461"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["RU"],
+        valid: ["2 32 636829", "012 345321", "439863692"],
+        invalid: [
+          "A 2R YU46J0",
+          "01A 3D5321",
+          "SF233D53T",
+          "12345678",
+          "1234567890",
+        ],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["SE"],
+        valid: ["59000001", "56702928"],
+        invalid: ["SE012345", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["SL"],
+        valid: ["PB0036440", "PB1390281"],
+        invalid: ["SL0123456", "P01234567"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["SK"],
+        valid: ["P0000000"],
+        invalid: ["SK012345", "012345678"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["TH"],
+        valid: ["A123456", "B1234567", "CD123456", "EF1234567"],
+        invalid: ["123456", "1234567", "010485371AA"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["TR"],
+        valid: ["U 06764100", "U 01048537"],
+        invalid: ["06764100U", "010485371"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["UA"],
+        valid: ["EH345655", "EK000001", "AP841503"],
+        invalid: ["01234567", "012345EH", "A012345P"],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["US"],
+        valid: ["790369937", "340007237", "A90583942", "E00007734"],
+        invalid: [
+          "US0123456",
+          "0123456US",
+          "7903699371",
+          "90583942",
+          "E000077341",
+        ],
+      });
+
+      test({
+        validator: "isPassportNumber",
+        args: ["ZA"],
+        valid: ["T12345678", "A12345678", "M12345678", "D12345678"],
+        invalid: ["123456789", "Z12345678"],
+      });
+    });
+
+    it("should validate decimal numbers", () => {
+      test({
+        validator: "isDecimal",
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0.01",
+          ".1",
+          "1.0",
+          "-.25",
+          "-0",
+          "0.0000000000001",
+        ],
+        invalid: [
+          "0,01",
+          ",1",
+          "1,0",
+          "-,25",
+          "0,0000000000001",
+          "0٫01",
+          "٫1",
+          "1٫0",
+          "-٫25",
+          "0٫0000000000001",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ locale: "en-AU" }],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0.01",
+          ".1",
+          "1.0",
+          "-.25",
+          "-0",
+          "0.0000000000001",
+        ],
+        invalid: [
+          "0,01",
+          ",1",
+          "1,0",
+          "-,25",
+          "0,0000000000001",
+          "0٫01",
+          "٫1",
+          "1٫0",
+          "-٫25",
+          "0٫0000000000001",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ locale: ["bg-BG"] }],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0,01",
+          ",1",
+          "1,0",
+          "-,25",
+          "-0",
+          "0,0000000000001",
+        ],
+        invalid: [
+          "0.0000000000001",
+          "0.01",
+          ".1",
+          "1.0",
+          "-.25",
+          "0٫01",
+          "٫1",
+          "1٫0",
+          "-٫25",
+          "0٫0000000000001",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ locale: ["cs-CZ"] }],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0,01",
+          ",1",
+          "1,0",
+          "-,25",
+          "-0",
+          "0,0000000000001",
+        ],
+        invalid: [
+          "0.0000000000001",
+          "0.01",
+          ".1",
+          "1.0",
+          "-.25",
+          "0٫01",
+          "٫1",
+          "1٫0",
+          "-٫25",
+          "0٫0000000000001",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ locale: ["ar-JO"] }],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0٫01",
+          "٫1",
+          "1٫0",
+          "-٫25",
+          "-0",
+          "0٫0000000000001",
+        ],
+        invalid: [
+          "0,0000000000001",
+          "0,01",
+          ",1",
+          "1,0",
+          "-,25",
+          "0.0000000000001",
+          "0.01",
+          ".1",
+          "1.0",
+          "-.25",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ locale: ["ar-EG"] }],
+        valid: ["0.01"],
+        invalid: ["0,01"],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ locale: ["en-ZM"] }],
+        valid: ["0,01"],
+        invalid: ["0.01"],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ force_decimal: true }],
+        valid: ["0.01", ".1", "1.0", "-.25", "0.0000000000001"],
+        invalid: [
+          "-0",
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0,0000000000001",
+          "0,01",
+          ",1",
+          "1,0",
+          "-,25",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+
+      test({
+        validator: "isDecimal",
+        args: [{ decimal_digits: "2,3" }],
+        valid: [
+          "123",
+          "00123",
+          "-00123",
+          "0",
+          "-0",
+          "+123",
+          "0.01",
+          "1.043",
+          ".15",
+          "-.255",
+          "-0",
+        ],
+        invalid: [
+          "0.0000000000001",
+          "0.0",
+          ".1",
+          "1.0",
+          "-.2564",
+          "0.0",
+          "٫1",
+          "1٫0",
+          "-٫25",
+          "0٫0000000000001",
+          "....",
+          " ",
+          "",
+          "-",
+          "+",
+          ".",
+          "0.1a",
+          "a",
+          "\n",
+        ],
+      });
+    });
+
+    it("should error on invalid locale", () => {
+      test({
+        validator: "isDecimal",
+        args: [{ locale: ["is-NOT"] }],
+        error: ["123", "0.01", "0,01"],
+      });
+    });
+
+    it("should validate lowercase strings", () => {
+      test({
+        validator: "isLowercase",
+        valid: ["abc", "abc123", "this is lowercase.", "tr竪s 端ber"],
+        invalid: ["fooBar", "123A"],
+      });
+    });
+
+    it("should validate imei strings", () => {
+      test({
+        validator: "isIMEI",
+        valid: [
+          "352099001761481",
+          "868932036356090",
+          "490154203237518",
+          "546918475942169",
+          "998227667144730",
+          "532729766805999",
+        ],
+        invalid: ["490154203237517", "3568680000414120", "3520990017614823"],
+      });
+    });
+
+    it("should validate imei strings with hyphens", () => {
+      test({
+        validator: "isIMEI",
+        args: [{ allow_hyphens: true }],
+        valid: [
+          "35-209900-176148-1",
+          "86-893203-635609-0",
+          "49-015420-323751-8",
+          "54-691847-594216-9",
+          "99-822766-714473-0",
+          "53-272976-680599-9",
+        ],
+        invalid: [
+          "49-015420-323751-7",
+          "35-686800-0041412-0",
+          "35-209900-1761482-3",
+        ],
+      });
+    });
+
+    it("should validate uppercase strings", () => {
+      test({
+        validator: "isUppercase",
+        valid: ["ABC", "ABC123", "ALL CAPS IS FUN.", "   ."],
+        invalid: ["fooBar", "123abc"],
+      });
+    });
+
+    it("should validate integers", () => {
+      test({
+        validator: "isInt",
+        valid: ["13", "123", "0", "123", "-0", "+1", "01", "-01", "000"],
+        invalid: ["100e10", "123.123", "   ", ""],
+      });
+      test({
+        validator: "isInt",
+        args: [{ allow_leading_zeroes: false }],
+        valid: ["13", "123", "0", "123", "-0", "+1"],
+        invalid: ["01", "-01", "000", "100e10", "123.123", "   ", ""],
+      });
+      test({
+        validator: "isInt",
+        args: [{ allow_leading_zeroes: true }],
+        valid: [
+          "13",
+          "123",
+          "0",
+          "123",
+          "-0",
+          "+1",
+          "01",
+          "-01",
+          "000",
+          "-000",
+          "+000",
+        ],
+        invalid: ["100e10", "123.123", "   ", ""],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            min: 10,
+          },
+        ],
+        valid: ["15", "80", "99"],
+        invalid: ["9", "6", "3.2", "a"],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            min: 10,
+            max: 15,
+          },
+        ],
+        valid: ["15", "11", "13"],
+        invalid: ["9", "2", "17", "3.2", "33", "a"],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            gt: 10,
+            lt: 15,
+          },
+        ],
+        valid: ["14", "11", "13"],
+        invalid: ["10", "15", "17", "3.2", "33", "a"],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            min: undefined,
+            max: undefined,
+          },
+        ],
+        valid: ["143", "15", "767777575"],
+        invalid: ["10.4", "bar", "10a", "c44"],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            gt: undefined,
+            lt: undefined,
+          },
+        ],
+        valid: ["289373466", "55", "989"],
+        invalid: ["10.4", "baz", "66a", "c21"],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            gt: null,
+            max: null,
+          },
+        ],
+        valid: ["1", "886", "84512345"],
+        invalid: ["10.4", "h", "1.2", "+"],
+      });
+      test({
+        validator: "isInt",
+        args: [
+          {
+            lt: null,
+            min: null,
+          },
+        ],
+        valid: ["289373466", "55", "989"],
+        invalid: [",", "+11212+", "fail", "111987234i"],
+      });
+    });
+
+    it("should validate floats", () => {
+      test({
+        validator: "isFloat",
+        valid: [
+          "123",
+          "123.",
+          "123.123",
+          "-123.123",
+          "-0.123",
+          "+0.123",
+          "0.123",
+          ".0",
+          "-.123",
+          "+.123",
+          "01.123",
+          "-0.22250738585072011e-307",
+        ],
+        invalid: [
+          "+",
+          "-",
+          "  ",
+          "",
+          ".",
+          ",",
+          "foo",
+          "20.foo",
+          "2020-01-06T14:31:00.135Z",
+        ],
+      });
+
+      test({
+        validator: "isFloat",
+        args: [{ locale: "en-AU" }],
+        valid: [
+          "123",
+          "123.",
+          "123.123",
+          "-123.123",
+          "-0.123",
+          "+0.123",
+          "0.123",
+          ".0",
+          "-.123",
+          "+.123",
+          "01.123",
+          "-0.22250738585072011e-307",
+        ],
+        invalid: ["123٫123", "123,123", "  ", "", ".", "foo"],
+      });
+
+      test({
+        validator: "isFloat",
+        args: [{ locale: "de-DE" }],
+        valid: [
+          "123",
+          "123,",
+          "123,123",
+          "-123,123",
+          "-0,123",
+          "+0,123",
+          "0,123",
+          ",0",
+          "-,123",
+          "+,123",
+          "01,123",
+          "-0,22250738585072011e-307",
+        ],
+        invalid: ["123.123", "123٫123", "  ", "", ".", "foo"],
+      });
+
+      test({
+        validator: "isFloat",
+        args: [{ locale: "ar-JO" }],
+        valid: [
+          "123",
+          "123٫",
+          "123٫123",
+          "-123٫123",
+          "-0٫123",
+          "+0٫123",
+          "0٫123",
+          "٫0",
+          "-٫123",
+          "+٫123",
+          "01٫123",
+          "-0٫22250738585072011e-307",
+        ],
+        invalid: ["123,123", "123.123", "  ", "", ".", "foo"],
+      });
+
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            min: 3.7,
+          },
+        ],
+        valid: ["3.888", "3.92", "4.5", "50", "3.7", "3.71"],
+        invalid: ["3.6", "3.69", "3", "1.5", "a"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            min: 0.1,
+            max: 1.0,
+          },
+        ],
+        valid: ["0.1", "1.0", "0.15", "0.33", "0.57", "0.7"],
+        invalid: ["0", "0.0", "a", "1.3", "0.05", "5"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            gt: -5.5,
+            lt: 10,
+          },
+        ],
+        valid: ["9.9", "1.0", "0", "-1", "7", "-5.4"],
+        invalid: ["10", "-5.5", "a", "-20.3", "20e3", "10.00001"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            min: -5.5,
+            max: 10,
+            gt: -5.5,
+            lt: 10,
+          },
+        ],
+        valid: ["9.99999", "-5.499999"],
+        invalid: ["10", "-5.5"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            locale: "de-DE",
+            min: 3.1,
+          },
+        ],
+        valid: ["123", "123,", "123,123", "3,1", "3,100001"],
+        invalid: [
+          "3,09",
+          "-,123",
+          "+,123",
+          "01,123",
+          "-0,22250738585072011e-307",
+          "-123,123",
+          "-0,123",
+          "+0,123",
+          "0,123",
+          ",0",
+          "123.123",
+          "123٫123",
+          "  ",
+          "",
+          ".",
+          "foo",
+        ],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            min: undefined,
+            max: undefined,
+          },
+        ],
+        valid: ["123", "123.", "123.123", "-767.767", "+111.111"],
+        invalid: ["ab565", "-,123", "+,123", "7866.t", "123,123", "123,"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            gt: undefined,
+            lt: undefined,
+          },
+        ],
+        valid: ["14.34343", "11.1", "456"],
+        invalid: ["ab565", "-,123", "+,123", "7866.t"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            locale: "ar",
+            gt: null,
+            max: null,
+          },
+        ],
+        valid: ["13324٫", "12321", "444٫83874"],
+        invalid: ["55.55.55", "1;23", "+-123", "1111111l1", "3.3"],
+      });
+      test({
+        validator: "isFloat",
+        args: [
+          {
+            locale: "ru-RU",
+            lt: null,
+            min: null,
+          },
+        ],
+        valid: ["11231554,34343", "11,1", "456", ",311"],
+        invalid: ["ab565", "-.123", "+.123", "7866.t", "22.3"],
+      });
+    });
+
+    it("should validate hexadecimal strings", () => {
+      test({
+        validator: "isHexadecimal",
+        valid: [
+          "deadBEEF",
+          "ff0044",
+          "0xff0044",
+          "0XfF0044",
+          "0x0123456789abcDEF",
+          "0X0123456789abcDEF",
+          "0hfedCBA9876543210",
+          "0HfedCBA9876543210",
+          "0123456789abcDEF",
+        ],
+        invalid: [
+          "abcdefg",
+          "",
+          "..",
+          "0xa2h",
+          "0xa20x",
+          "0x0123456789abcDEFq",
+          "0hfedCBA9876543210q",
+          "01234q56789abcDEF",
+        ],
+      });
+    });
+
+    it("should validate octal strings", () => {
+      test({
+        validator: "isOctal",
+        valid: ["076543210", "0o01234567"],
+        invalid: [
+          "abcdefg",
+          "012345678",
+          "012345670c",
+          "00c12345670c",
+          "",
+          "..",
+        ],
+      });
+    });
+
+    it("should validate hexadecimal color strings", () => {
+      test({
+        validator: "isHexColor",
+        valid: ["#ff0000ff", "#ff0034", "#CCCCCC", "0f38", "fff", "#f00"],
+        invalid: ["#ff", "fff0a", "#ff12FG"],
+      });
+    });
+
+    it("should validate HSL color strings", () => {
+      test({
+        validator: "isHSL",
+        valid: [
+          "hsl(360,0000000000100%,000000100%)",
+          "hsl(000010, 00000000001%, 00000040%)",
+          "HSL(00000,0000000000100%,000000100%)",
+          "hsL(0, 0%, 0%)",
+          "hSl(  360  , 100%  , 100%   )",
+          "Hsl(  00150  , 000099%  , 01%   )",
+          "hsl(01080, 03%, 4%)",
+          "hsl(-540, 03%, 4%)",
+          "hsla(+540, 03%, 4%)",
+          "hsla(+540, 03%, 4%, 500)",
+          "hsl(+540deg, 03%, 4%, 500)",
+          "hsl(+540gRaD, 03%, 4%, 500)",
+          "hsl(+540.01e-98rad, 03%, 4%, 500)",
+          "hsl(-540.5turn, 03%, 4%, 500)",
+          "hsl(+540, 03%, 4%, 500e-01)",
+          "hsl(+540, 03%, 4%, 500e+80)",
+          "hsl(4.71239rad, 60%, 70%)",
+          "hsl(270deg, 60%, 70%)",
+          "hsl(200, +.1%, 62%, 1)",
+          "hsl(270 60% 70%)",
+          "hsl(200, +.1e-9%, 62e10%, 1)",
+          "hsl(.75turn, 60%, 70%)",
+          // 'hsl(200grad+.1%62%/1)', //supposed to pass, but need to handle delimiters
+          "hsl(200grad +.1% 62% / 1)",
+          "hsl(270, 60%, 50%, .15)",
+          "hsl(270, 60%, 50%, 15%)",
+          "hsl(270 60% 50% / .15)",
+          "hsl(270 60% 50% / 15%)",
+        ],
+        invalid: [
+          "hsl (360,0000000000100%,000000100%)",
+          "hsl(0260, 100 %, 100%)",
+          "hsl(0160, 100%, 100%, 100 %)",
+          "hsl(-0160, 100%, 100a)",
+          "hsl(-0160, 100%, 100)",
+          "hsl(-0160 100%, 100%, )",
+          "hsl(270 deg, 60%, 70%)",
+          "hsl( deg, 60%, 70%)",
+          "hsl(, 60%, 70%)",
+          "hsl(3000deg, 70%)",
+        ],
+      });
+    });
+
+    it("should validate rgb color strings", () => {
+      test({
+        validator: "isRgbColor",
+        valid: [
+          "rgb(0,0,0)",
+          "rgb(255,255,255)",
+          "rgba(0,0,0,0)",
+          "rgba(255,255,255,1)",
+          "rgba(255,255,255,.1)",
+          "rgba(255,255,255,0.1)",
+          "rgba(255,255,255,.12)",
+          "rgb(5%,5%,5%)",
+          "rgba(5%,5%,5%,.3)",
+          "rgba(5%,5%,5%,.32)",
+        ],
+        invalid: [
+          "rgb(0,0,0,)",
+          "rgb(0,0,)",
+          "rgb(0,0,256)",
+          "rgb()",
+          "rgba(0,0,0)",
+          "rgba(255,255,255,2)",
+          "rgba(255,255,255,.123)",
+          "rgba(255,255,256,0.1)",
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "rgba(3,3,3%,.3)",
+          "rgba(5%,5%,5%,.321)",
+          "rgb(101%,101%,101%)",
+          "rgba(3%,3%,101%,0.3)",
+          "rgb(101%,101%,101%) additional invalid string part",
+          "rgba(3%,3%,101%,0.3) additional invalid string part",
+          "r         g    b(   0,         251,       222     )",
+          "r         g    ba(   0,         251,       222     )",
+          "rg ba(0, 251, 22, 0.5)",
+          "rgb( 255,255 ,255)",
+          "rgba(255, 255, 255, 0.5)",
+          "rgba(255, 255, 255, 0.5)",
+          "rgb(5%, 5%, 5%)",
+        ],
+      });
+
+      // test empty options object
+      test({
+        validator: "isRgbColor",
+        args: [{}],
+        valid: [
+          "rgb(0,0,0)",
+          "rgb(255,255,255)",
+          "rgba(0,0,0,0)",
+          "rgba(255,255,255,1)",
+          "rgba(255,255,255,.1)",
+          "rgba(255,255,255,.12)",
+          "rgba(255,255,255,0.1)",
+          "rgb(5%,5%,5%)",
+          "rgba(5%,5%,5%,.3)",
+        ],
+        invalid: [
+          "rgb(0,0,0,)",
+          "rgb(0,0,)",
+          "rgb(0,0,256)",
+          "rgb()",
+          "rgba(0,0,0)",
+          "rgba(255,255,255,2)",
+          "rgba(255,255,256,0.1)",
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "rgba(3,3,3%,.3)",
+          "rgb(101%,101%,101%)",
+          "rgba(3%,3%,101%,0.3)",
+          "r         g    b(   0,         251,       222     )",
+          "r         g    ba(   0,         251,       222     )",
+          "rg ba(0, 251, 22, 0.5)",
+          "rgb( 255,255 ,255)",
+          "rgba(255, 255, 255, 0.5)",
+          "rgba(255, 255, 255, 0.5)",
+          "rgb(5%, 5%, 5%)",
+        ],
+      });
+      // test where includePercentValues is given as false
+      test({
+        validator: "isRgbColor",
+        args: [false],
+        valid: ["rgb(5,5,5)", "rgba(5,5,5,.3)"],
+        invalid: [
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "r         g    b(   0,         251,       222     )",
+          "r         g    ba(   0,         251,       222     )",
+        ],
+      });
+
+      // test where includePercentValues is given as false as part of options object
+      test({
+        validator: "isRgbColor",
+        args: [{ includePercentValues: false }],
+        valid: ["rgb(5,5,5)", "rgba(5,5,5,.3)"],
+        invalid: [
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "r         g    b(   0,         251,       222     )",
+          "rgba(255, 255, 255 ,0.2)",
+          "r         g    ba(   0,         251,       222     )",
+        ],
+      });
+
+      // test where include percent is true explciitly
+      test({
+        validator: "isRgbColor",
+        args: [true],
+        valid: [
+          "rgb(5,5,5)",
+          "rgba(5,5,5,.3)",
+          "rgb(0,0,0)",
+          "rgb(255,255,255)",
+          "rgba(0,0,0,0)",
+          "rgba(255,255,255,1)",
+          "rgba(255,255,255,.1)",
+          "rgba(255,255,255,.12)",
+          "rgba(255,255,255,0.1)",
+          "rgb(5%,5%,5%)",
+          "rgba(5%,5%,5%,.3)",
+          "rgb(5%,5%,5%)",
+          "rgba(255,255,255,0.5)",
+        ],
+        invalid: [
+          "rgba(255, 255, 255, 0.5)",
+          "rgb(5%, 5%, 5%)",
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "r         g    b(   0,         251,       222     )",
+          "r         g    ba(   0,         251,       222     )",
+          "rgb(0,0,0,)",
+          "rgb(0,0,)",
+          "rgb(0,0,256)",
+          "rgb()",
+          "rgba(0,0,0)",
+          "rgba(255,255,255,2)",
+          "rgba(255,255,256,0.1)",
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "rgba(3,3,3%,.3)",
+          "rgb(101%,101%,101%)",
+          "rgba(3%,3%,101%,0.3)",
+        ],
+      });
+
+      // test where percent value is false and allowSpaces is true as part of options object
+      test({
+        validator: "isRgbColor",
+        args: [{ includePercentValues: false, allowSpaces: true }],
+        valid: [
+          "rgb(5,5,5)",
+          "rgba(5,5,5,.3)",
+          "rgba(255,255,255,0.2)",
+          "rgba(255, 255, 255 ,0.2)",
+        ],
+        invalid: [
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "rgba(5% ,5%, 5%)",
+          "r         g    b(   0,         251,       222     )",
+          "r         g    ba(   0,         251,       222     )",
+          "rgb(0,0,)",
+          "rgb()",
+          "rgb(4,4,5%)",
+          "rgb(5%,5%,5%)",
+          "rgba(3,3,3%,.3)",
+          "rgb(101%, 101%, 101%)",
+          "rgba(3%,3%,101%,0.3)",
+        ],
+      });
+
+      // test where both are true as part of options object
+      test({
+        validator: "isRgbColor",
+        args: [{ includePercentValues: true, allowSpaces: true }],
+        valid: [
+          "rgb(  5, 5, 5)",
+          "rgba(5, 5, 5, .3)",
+          "rgb(0, 0, 0)",
+          "rgb(255, 255, 255)",
+          "rgba(0, 0, 0, 0)",
+          "rgba(255, 255, 255, 1)",
+          "rgba(255, 255, 255, .1)",
+          "rgba(255, 255, 255, 0.1)",
+          "rgb(5% ,5% ,5%)",
+          "rgba(5%,5%,5%, .3)",
+        ],
+        invalid: [
+          "r         g    b(   0,         251,       222     )",
+          "rgb(4,4,5%)",
+          "rgb(101%,101%,101%)",
+        ],
+      });
+
+      // test where allowSpaces is false as part of options object
+      test({
+        validator: "isRgbColor",
+        args: [{ includePercentValues: true, allowSpaces: false }],
+        valid: [
+          "rgb(5,5,5)",
+          "rgba(5,5,5,.3)",
+          "rgb(0,0,0)",
+          "rgb(255,255,255)",
+          "rgba(0,0,0,0)",
+          "rgba(255,255,255,1)",
+          "rgba(255,255,255,.1)",
+          "rgba(255,255,255,.12)",
+          "rgba(255,255,255,0.1)",
+          "rgb(5%,5%,5%)",
+          "rgba(5%,5%,5%,.3)",
+        ],
+        invalid: [
+          "rgb( 255,255 ,255)",
+          "rgba(255, 255, 255, 0.5)",
+          "rgb(5%, 5%, 5%)",
+          "rgba(255, 255, 255, 0.5)",
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "r         g    b(   0,         251,       222     )",
+          "r         g    ba(   0,         251,       222     )",
+          "rgb(0,0,0,)",
+          "rgb(0,0,)",
+          "rgb(0,0,256)",
+          "rgb()",
+          "rgba(0,0,0)",
+          "rgba(255,255,255,2)",
+          "rgba(255,255,256,0.1)",
+          "rgb(4,4,5%)",
+          "rgba(5%,5%,5%)",
+          "rgba(3,3,3%,.3)",
+          "rgb(101%,101%,101%)",
+          "rgba(3%,3%,101%,0.3)",
+        ],
+      });
+    });
+
+    it("should validate ISRC code strings", () => {
+      test({
+        validator: "isISRC",
+        valid: ["USAT29900609", "GBAYE6800011", "USRC15705223", "USCA29500702"],
+        invalid: [
+          "USAT2990060",
+          "SRC15705223",
+          "US-CA29500702",
+          "USARC15705223",
+        ],
+      });
+    });
+
+    it("should validate md5 strings", () => {
+      test({
+        validator: "isMD5",
+        valid: [
+          "d94f3f016ae679c3008de268209132f2",
+          "751adbc511ccbe8edf23d486fa4581cd",
+          "88dae00e614d8f24cfd5a8b3f8002e93",
+          "0bf1c35032a71a14c2f719e5a14c1e96",
+        ],
+        invalid: [
+          "KYT0bf1c35032a71a14c2f719e5a14c1",
+          "q94375dj93458w34",
+          "39485729348",
+          "%&FHKJFvk",
+        ],
+      });
+    });
+
+    it("should validate hash strings", () => {
+      ["md5", "md4", "ripemd128", "tiger128"].forEach((algorithm) => {
+        test({
+          validator: "isHash",
+          args: [algorithm],
+          valid: [
+            "d94f3f016ae679c3008de268209132f2",
+            "751adbc511ccbe8edf23d486fa4581cd",
+            "88dae00e614d8f24cfd5a8b3f8002e93",
+            "0bf1c35032a71a14c2f719e5a14c1e96",
+            "d94f3F016Ae679C3008de268209132F2",
+            "88DAE00e614d8f24cfd5a8b3f8002E93",
+          ],
+          invalid: [
+            "q94375dj93458w34",
+            "39485729348",
+            "%&FHKJFvk",
+            "KYT0bf1c35032a71a14c2f719e5a1",
+          ],
+        });
+      });
+
+      ["crc32", "crc32b"].forEach((algorithm) => {
+        test({
+          validator: "isHash",
+          args: [algorithm],
+          valid: [
+            "d94f3f01",
+            "751adbc5",
+            "88dae00e",
+            "0bf1c350",
+            "88DAE00e",
+            "751aDBc5",
+          ],
+          invalid: [
+            "KYT0bf1c35032a71a14c2f719e5a14c1",
+            "q94375dj93458w34",
+            "q943",
+            "39485729348",
+            "%&FHKJFvk",
+          ],
+        });
+      });
+
+      ["sha1", "tiger160", "ripemd160"].forEach((algorithm) => {
+        test({
+          validator: "isHash",
+          args: [algorithm],
+          valid: [
+            "3ca25ae354e192b26879f651a51d92aa8a34d8d3",
+            "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d",
+            "beb8c3f30da46be179b8df5f5ecb5e4b10508230",
+            "efd5d3b190e893ed317f38da2420d63b7ae0d5ed",
+            "AAF4c61ddCC5e8a2dabede0f3b482cd9AEA9434D",
+            "3ca25AE354e192b26879f651A51d92aa8a34d8D3",
+          ],
+          invalid: [
+            "KYT0bf1c35032a71a14c2f719e5a14c1",
+            "KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk",
+            "q94375dj93458w34",
+            "39485729348",
+            "%&FHKJFvk",
+          ],
+        });
+      });
+
+      test({
+        validator: "isHash",
+        args: ["sha256"],
+        valid: [
+          "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824",
+          "1d996e033d612d9af2b44b70061ee0e868bfd14c2dd90b129e1edeb7953e7985",
+          "80f70bfeaed5886e33536bcfa8c05c60afef5a0e48f699a7912d5e399cdcc441",
+          "579282cfb65ca1f109b78536effaf621b853c9f7079664a3fbe2b519f435898c",
+          "2CF24dba5FB0a30e26E83b2AC5b9E29E1b161e5C1fa7425E73043362938b9824",
+          "80F70bFEAed5886e33536bcfa8c05c60aFEF5a0e48f699a7912d5e399cdCC441",
+        ],
+        invalid: [
+          "KYT0bf1c35032a71a14c2f719e5a14c1",
+          "KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk",
+          "q94375dj93458w34",
+          "39485729348",
+          "%&FHKJFvk",
+        ],
+      });
+      test({
+        validator: "isHash",
+        args: ["sha384"],
+        valid: [
+          "3fed1f814d28dc5d63e313f8a601ecc4836d1662a19365cbdcf6870f6b56388850b58043f7ebf2418abb8f39c3a42e31",
+          "b330f4e575db6e73500bd3b805db1a84b5a034e5d21f0041d91eec85af1dfcb13e40bb1c4d36a72487e048ac6af74b58",
+          "bf547c3fc5841a377eb1519c2890344dbab15c40ae4150b4b34443d2212e5b04aa9d58865bf03d8ae27840fef430b891",
+          "fc09a3d11368386530f985dacddd026ae1e44e0e297c805c3429d50744e6237eb4417c20ffca8807b071823af13a3f65",
+          "3fed1f814d28dc5d63e313f8A601ecc4836d1662a19365CBDCf6870f6b56388850b58043f7ebf2418abb8f39c3a42e31",
+          "b330f4E575db6e73500bd3b805db1a84b5a034e5d21f0041d91EEC85af1dfcb13e40bb1c4d36a72487e048ac6af74b58",
+        ],
+        invalid: [
+          "KYT0bf1c35032a71a14c2f719e5a14c1",
+          "KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk",
+          "q94375dj93458w34",
+          "39485729348",
+          "%&FHKJFvk",
+        ],
+      });
+      test({
+        validator: "isHash",
+        args: ["sha512"],
+        valid: [
+          "9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043",
+          "83c586381bf5ba94c8d9ba8b6b92beb0997d76c257708742a6c26d1b7cbb9269af92d527419d5b8475f2bb6686d2f92a6649b7f174c1d8306eb335e585ab5049",
+          "45bc5fa8cb45ee408c04b6269e9f1e1c17090c5ce26ffeeda2af097735b29953ce547e40ff3ad0d120e5361cc5f9cee35ea91ecd4077f3f589b4d439168f91b9",
+          "432ac3d29e4f18c7f604f7c3c96369a6c5c61fc09bf77880548239baffd61636d42ed374f41c261e424d20d98e320e812a6d52865be059745fdb2cb20acff0ab",
+          "9B71D224bd62f3785D96d46ad3ea3d73319bFBC2890CAAdae2dff72519673CA72323C3d99ba5c11d7c7ACC6e14b8c5DA0c4663475c2E5c3adef46f73bcDEC043",
+          "432AC3d29E4f18c7F604f7c3c96369A6C5c61fC09Bf77880548239baffd61636d42ed374f41c261e424d20d98e320e812a6d52865be059745fdb2cb20acff0ab",
+        ],
+        invalid: [
+          "KYT0bf1c35032a71a14c2f719e5a14c1",
+          "KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk",
+          "q94375dj93458w34",
+          "39485729348",
+          "%&FHKJFvk",
+        ],
+      });
+      test({
+        validator: "isHash",
+        args: ["tiger192"],
+        valid: [
+          "6281a1f098c5e7290927ed09150d43ff3990a0fe1a48267c",
+          "56268f7bc269cf1bc83d3ce42e07a85632394737918f4760",
+          "46fc0125a148788a3ac1d649566fc04eb84a746f1a6e4fa7",
+          "7731ea1621ae99ea3197b94583d034fdbaa4dce31a67404a",
+          "6281A1f098c5e7290927ed09150d43ff3990a0fe1a48267C",
+          "46FC0125a148788a3AC1d649566fc04eb84A746f1a6E4fa7",
+        ],
+        invalid: [
+          "KYT0bf1c35032a71a14c2f719e5a14c1",
+          "KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk",
+          "q94375dj93458w34",
+          "39485729348",
+          "%&FHKJFvk",
+        ],
+      });
+    });
+    it("should validate JWT tokens", () => {
+      test({
+        validator: "isJWT",
+        valid: [
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI",
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb3JlbSI6Imlwc3VtIn0.ymiJSsMJXR6tMSr8G9usjQ15_8hKPDv_CArLhxw28MI",
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2xvciI6InNpdCIsImFtZXQiOlsibG9yZW0iLCJpcHN1bSJdfQ.rRpe04zbWbbJjwM43VnHzAboDzszJtGrNsUxaqQ-GQ8",
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqb2huIjp7ImFnZSI6MjUsImhlaWdodCI6MTg1fSwiamFrZSI6eyJhZ2UiOjMwLCJoZWlnaHQiOjI3MH19.YRLPARDmhGMC3BBk_OhtwwK21PIkVCqQe8ncIRPKo-E",
+        ],
+        invalid: [
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI6MTUxNjIzOTAyMn0",
+          "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI6MTYxNjY1Mzg3Mn0.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tIiwiaWF0IjoxNjE2NjUzODcyLCJleHAiOjE2MTY2NTM4ODJ9.a1jLRQkO5TV5y5ERcaPAiM9Xm2gBdRjKrrCpHkGr_8M",
+          "$Zs.ewu.su84",
+          "ks64$S/9.dy$§kz.3sd73b",
+        ],
+        error: [[], {}, null, undefined],
+      });
+    });
+
+    it("should validate null strings", () => {
+      test({
+        validator: "isEmpty",
+        valid: [""],
+        invalid: [" ", "foo", "3"],
+      });
+      test({
+        validator: "isEmpty",
+        args: [{ ignore_whitespace: false }],
+        valid: [""],
+        invalid: [" ", "foo", "3"],
+      });
+      test({
+        validator: "isEmpty",
+        args: [{ ignore_whitespace: true }],
+        valid: ["", " "],
+        invalid: ["foo", "3"],
+      });
+    });
+
+    it("should validate strings against an expected value", () => {
+      test({
+        validator: "equals",
+        args: ["abc"],
+        valid: ["abc"],
+        invalid: ["Abc", "123"],
+      });
+    });
+
+    it("should validate strings contain another string", () => {
+      test({
+        validator: "contains",
+        args: ["foo"],
+        valid: ["foo", "foobar", "bazfoo"],
+        invalid: ["bar", "fobar"],
+      });
+
+      test({
+        validator: "contains",
+        args: [
+          "foo",
+          {
+            ignoreCase: true,
+          },
+        ],
+        valid: ["Foo", "FOObar", "BAZfoo"],
+        invalid: ["bar", "fobar", "baxoof"],
+      });
+
+      test({
+        validator: "contains",
+        args: [
+          "foo",
+          {
+            minOccurrences: 2,
+          },
+        ],
+        valid: ["foofoofoo", "12foo124foo", "fofooofoooofoooo", "foo1foo"],
+        invalid: ["foo", "foobar", "Fooofoo", "foofo"],
+      });
+    });
+
+    it("should validate strings against a pattern", () => {
+      test({
+        validator: "matches",
+        args: [/abc/],
+        valid: ["abc", "abcdef", "123abc"],
+        invalid: ["acb", "Abc"],
+      });
+      test({
+        validator: "matches",
+        args: ["abc"],
+        valid: ["abc", "abcdef", "123abc"],
+        invalid: ["acb", "Abc"],
+      });
+      test({
+        validator: "matches",
+        args: ["abc", "i"],
+        valid: ["abc", "abcdef", "123abc", "AbC"],
+        invalid: ["acb"],
+      });
+    });
+
+    it("should validate strings by length (deprecated api)", () => {
+      test({
+        validator: "isLength",
+        args: [2],
+        valid: ["abc", "de", "abcd"],
+        invalid: ["", "a"],
+      });
+      test({
+        validator: "isLength",
+        args: [2, 3],
+        valid: ["abc", "de"],
+        invalid: ["", "a", "abcd"],
+      });
+      test({
+        validator: "isLength",
+        args: [2, 3],
+        valid: ["干𩸽", "𠮷野家"],
+        invalid: ["", "𠀋", "千竈通り"],
+      });
+      test({
+        validator: "isLength",
+        args: [0, 0],
+        valid: [""],
+        invalid: ["a", "ab"],
+      });
+    });
+
+    it("should validate isLocale codes", () => {
+      test({
+        validator: "isLocale",
+        valid: [
+          "uz_Latn_UZ",
+          "en",
+          "gsw",
+          "en-US",
+          "es_ES",
+          "es-419",
+          "sw_KE",
+          "am_ET",
+          "zh-CHS",
+          "ca_ES_VALENCIA",
+          "en_US_POSIX",
+          "hak-CN",
+          "zh-Hant",
+          "zh-Hans",
+          "sr-Cyrl",
+          "sr-Latn",
+          "zh-cmn-Hans-CN",
+          "cmn-Hans-CN",
+          "zh-yue-HK",
+          "yue-HK",
+          "zh-Hans-CN",
+          "sr-Latn-RS",
+          "sl-rozaj",
+          "sl-rozaj-biske",
+          "sl-nedis",
+          "de-CH-1901",
+          "sl-IT-nedis",
+          "hy-Latn-IT-arevela",
+          "i-enochian",
+          "en-scotland-fonipa",
+          "sl-IT-rozaj-biske-1994",
+          "de-CH-x-phonebk",
+          "az-Arab-x-AZE-derbend",
+          "x-whatever",
+          "qaa-Qaaa-QM-x-southern",
+          "de-Qaaa",
+          "sr-Latn-QM",
+          "sr-Qaaa-RS",
+          "en-US-u-islamcal",
+          "zh-CN-a-myext-x-private",
+          "en-a-myext-b-another",
+        ],
+        invalid: ["lo_POP", "12", "12_DD", "de-419-DE", "a-DE"],
+      });
+    });
+
+    it("should validate strings by byte length (deprecated api)", () => {
+      test({
+        validator: "isByteLength",
+        args: [2],
+        valid: ["abc", "de", "abcd", "gmail"],
+        invalid: ["", "a"],
+      });
+      test({
+        validator: "isByteLength",
+        args: [2, 3],
+        valid: ["abc", "de", "g"],
+        invalid: ["", "a", "abcd", "gm"],
+      });
+      test({
+        validator: "isByteLength",
+        args: [0, 0],
+        valid: [""],
+        invalid: ["g", "a"],
+      });
+    });
+
+    it("should validate strings by length", () => {
+      test({
+        validator: "isLength",
+        args: [{ min: 2 }],
+        valid: ["abc", "de", "abcd"],
+        invalid: ["", "a"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ min: 2, max: 3 }],
+        valid: ["abc", "de"],
+        invalid: ["", "a", "abcd"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ min: 2, max: 3 }],
+        valid: ["干𩸽", "𠮷野家"],
+        invalid: ["", "𠀋", "千竈通り"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ max: 3 }],
+        valid: ["abc", "de", "a", ""],
+        invalid: ["abcd"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ max: 6, discreteLengths: 5 }],
+        valid: ["abcd", "vfd", "ff", "", "k"],
+        invalid: ["abcdefgh", "hfjdksks"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ min: 2, max: 6, discreteLengths: 5 }],
+        valid: ["bsa", "vfvd", "ff"],
+        invalid: ["", " ", "hfskdunvc"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ min: 1, discreteLengths: 2 }],
+        valid: [" ", "hello", "bsa"],
+        invalid: [""],
+      });
+      test({
+        validator: "isLength",
+        args: [{ max: 0 }],
+        valid: [""],
+        invalid: ["a", "ab"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ min: 5, max: 10, discreteLengths: [2, 6, 8, 9] }],
+        valid: ["helloguy", "shopping", "validator", "length"],
+        invalid: ["abcde", "abcdefg"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ discreteLengths: "9" }],
+        valid: ["a", "abcd", "abcdefghijkl"],
+        invalid: [],
+      });
+      test({
+        validator: "isLength",
+        valid: ["a", "", "asds"],
+      });
+      test({
+        validator: "isLength",
+        args: [{ max: 8 }],
+        valid: ["👩🦰👩👩👦👦🏳️🌈", "⏩︎⏩︎⏪︎⏪︎⏭︎⏭︎⏮︎⏮︎"],
+      });
+    });
+
+    it("should validate strings by byte length", () => {
+      test({
+        validator: "isByteLength",
+        args: [{ min: 2 }],
+        valid: ["abc", "de", "abcd", "gmail"],
+        invalid: ["", "a"],
+      });
+      test({
+        validator: "isByteLength",
+        args: [{ min: 2, max: 3 }],
+        valid: ["abc", "de", "g"],
+        invalid: ["", "a", "abcd", "gm"],
+      });
+      test({
+        validator: "isByteLength",
+        args: [{ max: 3 }],
+        valid: ["abc", "de", "g", "a", ""],
+        invalid: ["abcd", "gm"],
+      });
+      test({
+        validator: "isByteLength",
+        args: [{ max: 0 }],
+        valid: [""],
+        invalid: ["g", "a"],
+      });
+    });
+
+    it("should validate ULIDs", () => {
+      test({
+        validator: "isULID",
+        valid: [
+          "01HBGW8CWQ5Q6DTT7XP89VV4KT",
+          "01HBGW8CWR8MZQMBG6FA2QHMDD",
+          "01HBGW8CWS3MEEK12Y9G7SVW4V",
+          "01hbgw8cws1tq2njavy9amb0wx",
+          "01HBGW8cwS43H4jkQ0A4ZRJ7QV",
+        ],
+        invalid: [
+          "",
+          "01HBGW-CWS3MEEK1#Y9G7SVW4V",
+          "91HBGW8CWS3MEEK12Y9G7SVW4V",
+          "81HBGW8CWS3MEEK12Y9G7SVW4V",
+          "934859",
+          "01HBGW8CWS3MEEK12Y9G7SVW4VXXX",
+          "01UBGW8IWS3MOEK12Y9G7SVW4V",
+          "01HBGW8CuS43H4JKQ0A4ZRJ7QV",
+        ],
+      });
+    });
+
+    it("should validate UUIDs", () => {
+      test({
+        validator: "isUUID",
+        valid: [
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "934859",
+          "987FBC9-4BED-3078-CF07A-9141BA07C9F3",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [undefined],
+        valid: [
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A117FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+        invalid: [
+          "",
+          "A117FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "A11AAAAA-1111-1111-AAAG-111111111111",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [null],
+        valid: [
+          "A127FBC9-4BED-3078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A127FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A127FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "912859",
+          "A12AAAAA-1111-1111-AAAG-111111111111",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [1],
+        valid: ["E034B584-7D89-11E9-9669-1AECF481A97B"],
+        invalid: [
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "AAAAAAAA-1111-2222-AAAG",
+          "AAAAAAAA-1111-2222-AAAG-111111111111",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [2],
+        valid: ["A987FBC9-4BED-2078-AF07-9141BA07C9F3"],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "11111",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "A987FBC9-4BED-2078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [3],
+        valid: ["9deb20fe-a6e0-355c-81ea-288b009e4f6d"],
+        invalid: [
+          "",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "934859",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [4],
+        valid: [
+          "713ae7e3-cb32-45f9-adcb-7c4fa86b90c1",
+          "625e63f3-58f5-40b7-83a1-a72ad31acffb",
+          "57b73598-8764-4ad0-a76a-679bb6640eb1",
+          "9c858901-8a57-4791-81fe-4c455b099bc9",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "934859",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [5],
+        valid: [
+          "987FBC97-4BED-5078-AF07-9141BA07C9F3",
+          "987FBC97-4BED-5078-BF07-9141BA07C9F3",
+          "987FBC97-4BED-5078-8F07-9141BA07C9F3",
+          "987FBC97-4BED-5078-9F07-9141BA07C9F3",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "934859",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "9c858901-8a57-4791-81fe-4c455b099bc9",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [6],
+        valid: ["1ef29908-cde1-69d0-be16-bfc8518a95f0"],
+        invalid: [
+          "987FBC97-4BED-1078-AF07-9141BA07C9F3",
+          "987FBC97-4BED-2078-AF07-9141BA07C9F3",
+          "987FBC97-4BED-3078-AF07-9141BA07C9F3",
+          "987FBC97-4BED-4078-AF07-9141BA07C9F3",
+          "987FBC97-4BED-5078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "987FBC97-4BED-8078-AF07-9141BA07C9F3",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [7],
+        valid: ["018C544A-D384-7000-BB74-3B1738ABE43C"],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "934859",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+          "713ae7e3-cb32-45f9-adcb-7c4fa86b90c1",
+          "625e63f3-58f5-40b7-83a1-a72ad31acffb",
+          "57b73598-8764-4ad0-a76a-679bb6640eb1",
+          "9c858901-8a57-4791-81fe-4c455b099bc9",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: [8],
+        valid: ["018C544A-D384-8000-BB74-3B1738ABE43C"],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "934859",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-7078-AF07-9141BA07C9F3",
+          "713ae7e3-cb32-45f9-adcb-7c4fa86b90c1",
+          "625e63f3-58f5-40b7-83a1-a72ad31acffb",
+          "57b73598-8764-4ad0-a76a-679bb6640eb1",
+          "9c858901-8a57-4791-81fe-4c455b099bc9",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: ["nil"],
+        valid: ["00000000-0000-0000-0000-000000000000"],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "934859",
+          "987FBC9-4BED-3078-CF07A-9141BA07C9F3",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+          "ffffffff-ffff-ffff-ffff-ffffffffffff",
+          "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: ["max"],
+        valid: [
+          "ffffffff-ffff-ffff-ffff-ffffffffffff",
+          "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "934859",
+          "987FBC9-4BED-3078-CF07A-9141BA07C9F3",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+          "00000000-0000-0000-0000-000000000000",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: ["loose"],
+        valid: [
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+          "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
+          "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA",
+          "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee",
+          "EEEEEEEE-EEEE-EEEE-EEEE-EEEEEEEEEEEE",
+          "99999999-9999-9999-9999-999999999999",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "987FBC9-4BED-3078-CF07A-9141BA07C9F3",
+          "934859",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: ["all"],
+        valid: [
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+          "00000000-0000-0000-0000-000000000000",
+          "ffffffff-ffff-ffff-ffff-ffffffffffff",
+          "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF",
+        ],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "934859",
+          "987FBC9-4BED-3078-CF07A-9141BA07C9F3",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+        ],
+      });
+      test({
+        validator: "isUUID",
+        args: ["invalid"],
+        valid: [],
+        invalid: [
+          "",
+          "xxxA987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3",
+          "A987FBC9-4BED-3078-CF07-9141BA07C9F3xxx",
+          "A987FBC94BED3078CF079141BA07C9F3",
+          "934859",
+          "987FBC9-4BED-3078-CF07A-9141BA07C9F3",
+          "AAAAAAAA-1111-1111-AAAG-111111111111",
+          "9deb20fe-a6e0-355c-81ea-288b009e4f6d",
+          "A987FBC9-4BED-4078-8F07-9141BA07C9F3",
+          "A987FBC9-4BED-5078-AF07-9141BA07C9F3",
+          "A987FBC9-4BED-6078-AF07-9141BA07C9F3",
+          "018C544A-D384-7000-BB74-3B1738ABE43C",
+          "A987FBC9-4BED-8078-AF07-9141BA07C9F3",
+          "00000000-0000-0000-0000-000000000000",
+          "ffffffff-ffff-ffff-ffff-ffffffffffff",
+          "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF",
+        ],
+      });
+    });
+
+    it("should validate a string that is in another string or array", () => {
+      test({
+        validator: "isIn",
+        args: ["foobar"],
+        valid: ["foo", "bar", "foobar", ""],
+        invalid: ["foobarbaz", "barfoo"],
+      });
+      test({
+        validator: "isIn",
+        args: [["foo", "bar"]],
+        valid: ["foo", "bar"],
+        invalid: ["foobar", "barfoo", ""],
+      });
+      test({
+        validator: "isIn",
+        args: [["1", "2", "3"]],
+        valid: ["1", "2", "3"],
+        invalid: ["4", ""],
+      });
+      test({
+        validator: "isIn",
+        args: [["1", "2", "3", { foo: "bar" }, () => 5, { toString: "test" }]],
+        valid: ["1", "2", "3", ""],
+        invalid: ["4"],
+      });
+      test({ validator: "isIn", invalid: ["foo", ""] });
+    });
+
+    it("should validate a string that is in another object", () => {
+      test({
+        validator: "isIn",
+        args: [{ foo: 1, bar: 2, foobar: 3 }],
+        valid: ["foo", "bar", "foobar"],
+        invalid: ["foobarbaz", "barfoo", ""],
+      });
+      test({
+        validator: "isIn",
+        args: [{ 1: 3, 2: 0, 3: 1 }],
+        valid: ["1", "2", "3"],
+        invalid: ["4", ""],
+      });
+    });
+
+    it("should validate ABA routing number", () => {
+      test({
+        validator: "isAbaRouting",
+        valid: ["322070381", "011103093", "263170175", "124303065"],
+        invalid: [
+          "426317017",
+          "789456124",
+          "603558459",
+          "qwerty",
+          "12430306",
+          "382070381",
+        ],
+      });
+    });
+
+    it("should validate IBAN", () => {
+      test({
+        validator: "isIBAN",
+        valid: [
+          "SC52BAHL01031234567890123456USD",
+          "LC14BOSL123456789012345678901234",
+          "MT31MALT01100000000000000000123",
+          "SV43ACAT00000000000000123123",
+          "EG800002000156789012345180002",
+          "BE71 0961 2345 6769",
+          "FR76 3000 6000 0112 3456 7890 189",
+          "DE91 1000 0000 0123 4567 89",
+          "GR96 0810 0010 0000 0123 4567 890",
+          "RO09 BCYP 0000 0012 3456 7890",
+          "SA44 2000 0001 2345 6789 1234",
+          "ES79 2100 0813 6101 2345 6789",
+          "CH56 0483 5012 3456 7800 9",
+          "GB98 MIDL 0700 9312 3456 78",
+          "IL170108000000012612345",
+          "IT60X0542811101000000123456",
+          "JO71CBJO0000000000001234567890",
+          "TR320010009999901234567890",
+          "BR1500000000000010932840814P2",
+          "LB92000700000000123123456123",
+          "IR200170000000339545727003",
+          "MZ97123412341234123412341",
+          "MA64011519000001205000534921",
+          "VG96VPVG0000012345678901",
+          "DZ580002100001113000000570",
+          "IE29AIBK93115212345678",
+          "PS92PALS000000000400123456702",
+          "PS92PALS00000000040012345670O",
+        ],
+        invalid: [
+          "XX22YYY1234567890123",
+          "FR14 2004 1010 0505 0001 3",
+          "FR7630006000011234567890189@",
+          "FR7630006000011234567890189😅",
+          "FR763000600001123456!!🤨7890189@",
+          "VG46H07Y0223060094359858",
+          "IE95TE8270900834048660",
+          "PS072435171802145240705922007",
+        ],
+      });
+      test({
+        validator: "isIBAN",
+        args: [{ whitelist: ["DK", "GB"] }],
+        valid: ["DK5000400440116243", "GB29NWBK60161331926819"],
+        invalid: [
+          "BE71 0961 2345 6769",
+          "FR76 3000 6000 0112 3456 7890 189",
+          "DE91 1000 0000 0123 4567 89",
+          "GR96 0810 0010 0000 0123 4567 890",
+          "RO09 BCYP 0000 0012 3456 7890",
+          "SA44 2000 0001 2345 6789 1234",
+          "ES79 2100 0813 6101 2345 6789",
+          "XX22YYY1234567890123",
+          "FR14 2004 1010 0505 0001 3",
+          "FR7630006000011234567890189@",
+          "FR7630006000011234567890189😅",
+          "FR763000600001123456!!🤨7890189@",
+        ],
+      });
+      test({
+        validator: "isIBAN",
+        args: [{ whitelist: ["XX", "AA"] }],
+        invalid: [
+          "DK5000400440116243",
+          "GB29NWBK60161331926819",
+          "BE71 0961 2345 6769",
+          "FR76 3000 6000 0112 3456 7890 189",
+          "DE91 1000 0000 0123 4567 89",
+          "GR96 0810 0010 0000 0123 4567 890",
+          "RO09 BCYP 0000 0012 3456 7890",
+          "SA44 2000 0001 2345 6789 1234",
+          "ES79 2100 0813 6101 2345 6789",
+          "XX22YYY1234567890123",
+          "FR14 2004 1010 0505 0001 3",
+          "FR7630006000011234567890189@",
+          "FR7630006000011234567890189😅",
+          "FR763000600001123456!!🤨7890189@",
+        ],
+      });
+      test({
+        validator: "isIBAN",
+        args: [{ blacklist: ["IT"] }],
+        valid: [
+          "SC52BAHL01031234567890123456USD",
+          "LC14BOSL123456789012345678901234",
+          "MT31MALT01100000000000000000123",
+          "SV43ACAT00000000000000123123",
+          "EG800002000156789012345180002",
+          "BE71 0961 2345 6769",
+          "FR76 3000 6000 0112 3456 7890 189",
+          "DE91 1000 0000 0123 4567 89",
+          "GR96 0810 0010 0000 0123 4567 890",
+          "RO09 BCYP 0000 0012 3456 7890",
+          "SA44 2000 0001 2345 6789 1234",
+          "ES79 2100 0813 6101 2345 6789",
+          "CH56 0483 5012 3456 7800 9",
+          "GB98 MIDL 0700 9312 3456 78",
+          "IL170108000000012612345",
+          "JO71CBJO0000000000001234567890",
+          "TR320010009999901234567890",
+          "BR1500000000000010932840814P2",
+          "LB92000700000000123123456123",
+          "IR200170000000339545727003",
+          "MZ97123412341234123412341",
+        ],
+        invalid: [
+          "XX22YYY1234567890123",
+          "FR14 2004 1010 0505 0001 3",
+          "FR7630006000011234567890189@",
+          "FR7630006000011234567890189😅",
+          "FR763000600001123456!!🤨7890189@",
+          "IT60X0542811101000000123456",
+        ],
+      });
+    });
+
+    it("should validate BIC codes", () => {
+      test({
+        validator: "isBIC",
+        valid: [
+          "SBICKEN1345",
+          "SBICKEN1",
+          "SBICKENY",
+          "SBICKEN1YYP",
+          "SBICXKN1YYP",
+        ],
+        invalid: [
+          "SBIC23NXXX",
+          "S23CKENXXXX",
+          "SBICKENXX",
+          "SBICKENXX9",
+          "SBICKEN13458",
+          "SBICKEN",
+          "SBICXK",
+        ],
+      });
+    });
+
+    it("should validate that integer strings are divisible by a number", () => {
+      test({
+        validator: "isDivisibleBy",
+        args: [2],
+        valid: ["2", "4", "100", "1000"],
+        invalid: ["1", "2.5", "101", "foo", "", "2020-01-06T14:31:00.135Z"],
+      });
+    });
+
+    it("should validate luhn numbers", () => {
+      test({
+        validator: "isLuhnNumber",
+        valid: [
+          "0",
+          "5421",
+          "01234567897",
+          "0123456789012345678906",
+          "0123456789012345678901234567891",
+          "123456789012345678906",
+          "375556917985515",
+          "36050234196908",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4929 7226 5379 7141",
+        ],
+        invalid: [
+          "",
+          "1",
+          "5422",
+          "foo",
+          "prefix6234917882863855",
+          "623491788middle2863855",
+          "6234917882863855suffix",
+        ],
+      });
+    });
+
+    it("should validate credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        valid: [
+          "375556917985515",
+          "36050234196908",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4929 7226 5379 7141",
+          "5398228707871527",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "6765780016990268",
+          "4716989580001715211",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+        invalid: [
+          "foo",
+          "foo",
+          "5398228707871528",
+          "2718760626256571",
+          "2721465526338453",
+          "2220175103860763",
+          "375556917985515999999993",
+          "899999996234917882863855",
+          "prefix6234917882863855",
+          "623491788middle2863855",
+          "6234917882863855suffix",
+          "4716989580001715213",
+        ],
+      });
+    });
+
+    it("should validate credit cards without a proper provider", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "Plorf" }],
+        error: [
+          "foo",
+          // valid cc #
+          "375556917985515",
+          "4716-2210-5188-5662",
+          "375556917985515999999993",
+          "6234917882863855suffix",
+        ],
+      });
+    });
+
+    it("should validate AmEx provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "AmEx" }],
+        valid: ["375556917985515"],
+        invalid: [
+          "foo",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "36050234196908",
+          "375556917985515999999993",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+          "5398228707871527",
+          "6234917882863855suffix",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+      });
+    });
+
+    it("should validate Diners Club provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "DinersClub" }],
+        valid: ["36050234196908"],
+        invalid: [
+          "foo",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "375556917985515",
+          "375556917985515999999993",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+          "5398228707871527",
+          "6234917882863855suffix",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+      });
+    });
+
+    it("should validate Discover provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "Discover" }],
+        valid: ["6011111111111117", "6011000990139424"],
+        invalid: [
+          "foo",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "36050234196908",
+          "375556917985515",
+          "375556917985515999999993",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+          "5398228707871527",
+          "6234917882863855suffix",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+      });
+    });
+
+    it("should validate JCB provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "JCB" }],
+        valid: ["3530111333300000", "3566002020360505"],
+        invalid: [
+          "foo",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "36050234196908",
+          "375556917985515",
+          "375556917985515999999993",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+          "5398228707871527",
+          "6234917882863855suffix",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+      });
+    });
+
+    it("should validate Mastercard provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "Mastercard" }],
+        valid: [
+          "2222155765072228",
+          "2225855203075256",
+          "2718760626256570",
+          "2720428011723762",
+          "5398228707871527",
+        ],
+        invalid: [
+          "foo",
+          "36050234196908",
+          "375556917985515",
+          "375556917985515999999993",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+          "6234917882863855suffix",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+      });
+    });
+
+    it("should validate Union Pay provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "UnionPay" }],
+        valid: [
+          "6226050967750613",
+          "6234917882863855",
+          "6234698580215388",
+          "6246281879460688",
+          "6263892624162870",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+        invalid: [
+          "foo",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "36050234196908",
+          "375556917985515",
+          "375556917985515999999993",
+          "4716461583322103",
+          "4716-2210-5188-5662",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+          "5398228707871527",
+          "6234917882863855suffix",
+        ],
+      });
+    });
+
+    it("should validate Visa provided credit cards", () => {
+      test({
+        validator: "isCreditCard",
+        args: [{ provider: "Visa" }],
+        valid: [
+          "4716-2210-5188-5662",
+          "4716461583322103",
+          "4716989580001715211",
+          "4929 7226 5379 7141",
+        ],
+        invalid: [
+          "foo",
+          "2222155765072228",
+          "2225855203075256",
+          "2720428011723762",
+          "2718760626256570",
+          "36050234196908",
+          "375556917985515",
+          "375556917985515999999993",
+          "5398228707871527",
+          "6234917882863855suffix",
+          "6283875070985593",
+          "6263892624162870",
+          "6234917882863855",
+          "6234698580215388",
+          "6226050967750613",
+          "6246281879460688",
+          "6283875070985593",
+          "6765780016990268",
+          "8171999927660000",
+          "8171999900000000021",
+        ],
+      });
+    });
+
+    it("should validate identity cards", () => {
+      const fixtures = [
+        {
+          locale: "PK",
+          valid: [
+            "45504-4185771-3",
+            "39915-6182971-9",
+            "21143-6182971-2",
+            "34543-2323471-1",
+            "72345-2345678-7",
+            "63456-8765432-8",
+            "55672-1234567-5",
+            "21234-9876543-6",
+          ],
+          invalid: [
+            "08000-1234567-5",
+            "74321-87654321-1",
+            "51234-98765-2",
+            "00000-0000000-0",
+            "88888-88888888-0",
+            "99999-9999999-9",
+            "11111",
+          ],
+        },
+        {
+          locale: "zh-HK",
+          valid: [
+            "OV290326[A]",
+            "Q803337[0]",
+            "Z0977986",
+            "W520128(7)",
+            "A494866[4]",
+            "A494866(4)",
+            "Z867821A",
+            "ag293013(9)",
+            "k348609(5)",
+          ],
+          invalid: [
+            "A1234567890",
+            "98765432",
+            "O962472(9)",
+            "M4578601",
+            "X731324[8]",
+            "C503134(5)",
+            "RH265886(3)",
+          ],
+        },
+        {
+          locale: "LK",
+          valid: [
+            "722222222v",
+            "722222222V",
+            "993151225x",
+            "993151225X",
+            "188888388x",
+            "935632124V",
+            "199931512253",
+            "200023125632",
+          ],
+          invalid: [
+            "023125648V",
+            "023345621v",
+            "021354211X",
+            "055321231x",
+            "02135465462",
+            "199931512253X",
+          ],
+        },
+        {
+          locale: "PL",
+          valid: [
+            "99012229019",
+            "09210215408",
+            "20313034701",
+            "86051575214",
+            "77334586883",
+            "54007481320",
+            "06566860643",
+            "77552478861",
+          ],
+          invalid: [
+            "aa",
+            "5",
+            "195",
+            "",
+            " ",
+            "12345678901",
+            "99212229019",
+            "09210215402",
+            "20313534701",
+            "86241579214",
+          ],
+        },
+        {
+          locale: "ES",
+          valid: [
+            "99999999R",
+            "12345678Z",
+            "01234567L",
+            "01234567l",
+            "X1234567l",
+            "x1234567l",
+            "X1234567L",
+            "Y1234567X",
+            "Z1234567R",
+          ],
+          invalid: [
+            "123456789",
+            "12345678A",
+            "12345 678Z",
+            "12345678-Z",
+            "1234*6789",
+            "1234*678Z",
+            "12345678!",
+            "1234567L",
+            "A1234567L",
+            "X1234567A",
+            "Y1234567B",
+            "Z1234567C",
+          ],
+        },
+        {
+          locale: "FI",
+          valid: [
+            "131052-308T", // People born in 1900s
+            "131052A308T", // People born in 2000s
+            "131052+308T", // People born in 1800s
+            "131052-313Y",
+          ],
+          invalid: ["131052308T", "131052-308T ", "131052-308A"],
+        },
+        {
+          locale: "IN",
+          valid: ["298448863364", "2984 4886 3364"],
+          invalid: [
+            "99999999R",
+            "12345678Z",
+            "01234567L",
+            "01234567l",
+            "X1234567l",
+            "x1234567l",
+            "X1234567L",
+          ],
+        },
+        {
+          locale: "IR",
+          valid: [
+            "0499370899",
+            "0790419904",
+            "0084575948",
+            "0963695398",
+            "0684159414",
+            "0067749828",
+            "0650451252",
+            "1583250689",
+            "4032152314",
+            "0076229645",
+            "4271467685",
+            "0200203241",
+          ],
+          invalid: [
+            "1260293040",
+            "0000000001",
+            "1999999999",
+            "9999999991",
+            "AAAAAAAAAA",
+            "0684159415",
+          ],
+        },
+        {
+          locale: "IT",
+          valid: ["CR43675TM", "CA79382RA"],
+          invalid: ["CA00000AA", "CB2342TG", "CS123456A", "C1236EC"],
+        },
+        {
+          locale: "NO",
+          valid: [
+            "09053426694",
+            "26028338723",
+            "08031470790",
+            "12051539514",
+            "02077448074",
+            "14035638319",
+            "13031379673",
+            "29126214926",
+          ],
+          invalid: ["09053426699", "00000000000", "26028338724", "92031470790"],
+        },
+        {
+          locale: "TH",
+          valid: ["1101230000001", "1101230000060"],
+          invalid: [
+            "abc",
+            "1101230",
+            "11012300000011",
+            "aaaaaaaaaaaaa",
+            "110123abcd001",
+            "1101230000007",
+            "0101123450000",
+            "0101123450004",
+            "9101123450008",
+          ],
+        },
+        {
+          locale: "he-IL",
+          valid: [
+            "219472156",
+            "219486610",
+            "219488962",
+            "219566726",
+            "219640216",
+            "219645041",
+            "334795465",
+            "335211686",
+            "335240479",
+            "335472171",
+            "336999842",
+            "337090443",
+          ],
+          invalid: [
+            "123456789",
+            "12345678A",
+            "12345 678Z",
+            "12345678-Z",
+            "1234*6789",
+            "1234*678Z",
+            "12345678!",
+            "1234567L",
+            "A1234567L",
+            "X1234567A",
+            "Y1234567B",
+            "Z1234567C",
+            "219772156",
+            "219487710",
+            "334705465",
+            "336000842",
+          ],
+        },
+        {
+          locale: "ar-LY",
+          valid: [
+            "119803455876",
+            "120024679875",
+            "219624876201",
+            "220103480657",
+          ],
+          invalid: [
+            "987654320123",
+            "123-456-7890",
+            "012345678912",
+            "1234567890",
+            "AFJBHUYTREWR",
+            "C4V6B1X0M5T6",
+            "9876543210123",
+          ],
+        },
+        {
+          locale: "ar-TN",
+          valid: [
+            "09958092",
+            "09151092",
+            "65126506",
+            "79378815",
+            "58994407",
+            "73089789",
+            "73260311",
+          ],
+          invalid: [
+            "123456789546",
+            "123456789",
+            "023456789",
+            "12345678A",
+            "12345",
+            "1234578A",
+            "123 578A",
+            "12345 678Z",
+            "12345678-Z",
+            "1234*6789",
+            "1234*678Z",
+            "GE9800as98",
+            "X231071922",
+            "1234*678Z",
+            "12345678!",
+          ],
+        },
+        {
+          locale: "zh-CN",
+          valid: [
+            "235407195106112745",
+            "210203197503102721",
+            "520323197806058856",
+            "110101491001001",
+          ],
+          invalid: [
+            "160323197806058856",
+            "010203197503102721",
+            "520323297806058856",
+            "520323197802318856",
+            "235407195106112742",
+            "010101491001001",
+            "110101491041001",
+            "160101491001001",
+            "110101940231001",
+            "xx1234567",
+            "135407195106112742",
+            "123456789546",
+            "123456789",
+            "023456789",
+            "12345678A",
+            "12345",
+            "1234578A",
+            "123 578A",
+            "12345 678Z",
+            "12345678-Z",
+            "1234*6789",
+            "1234*678Z",
+            "GE9800as98",
+            "X231071922",
+            "1234*678Z",
+            "12345678!",
+            "235407207006112742",
+          ],
+        },
+        {
+          locale: "zh-TW",
+          valid: [
+            "B176944193",
+            "K101189797",
+            "F112866121",
+            "A219758834",
+            "A244144802",
+            "A146047171",
+            "Q170219004",
+            "Z277018381",
+            "X231071923",
+          ],
+          invalid: [
+            "123456789",
+            "A185034995",
+            "X431071923",
+            "GE9800as98",
+            "X231071922",
+            "1234*678Z",
+            "12345678!",
+            "1234567L",
+            "A1234567L",
+            "X1234567A",
+            "Y1234567B",
+            "Z1234567C",
+            "219772156",
+            "219487710",
+            "334705465",
+            "336000842",
+          ],
+        },
+      ];
+
+      let allValid = [];
+
+      // Test fixtures
+      fixtures.forEach((fixture) => {
+        if (fixture.valid) allValid = allValid.concat(fixture.valid);
+        test({
+          validator: "isIdentityCard",
+          valid: fixture.valid,
+          invalid: fixture.invalid,
+          args: [fixture.locale],
+        });
+      });
+
+      // Test generics
+      test({
+        validator: "isIdentityCard",
+        valid: [...allValid],
+        invalid: ["foo"],
+        args: ["any"],
+      });
+    });
+
+    it("should error on invalid locale", () => {
+      test({
+        validator: "isIdentityCard",
+        args: ["is-NOT"],
+        error: ["99999999R", "12345678Z"],
+      });
+    });
+
+    it("should validate ISINs", () => {
+      test({
+        validator: "isISIN",
+        valid: [
+          "AU0000XVGZA3",
+          "DE000BAY0017",
+          "BE0003796134",
+          "SG1G55870362",
+          "GB0001411924",
+          "DE000WCH8881",
+          "PLLWBGD00016",
+          "US0378331005",
+        ],
+        invalid: ["DE000BAY0018", "PLLWBGD00019", "foo", "5398228707871528"],
+      });
+    });
+
+    it("should validate EANs", () => {
+      test({
+        validator: "isEAN",
+        valid: [
+          "9421023610112",
+          "1234567890128",
+          "4012345678901",
+          "9771234567003",
+          "9783161484100",
+          "73513537",
+          "00012345600012",
+          "10012345678902",
+          "20012345678909",
+        ],
+        invalid: ["5901234123451", "079777681629", "0705632085948"],
+      });
+    });
+
+    it("should validate ISSNs", () => {
+      test({
+        validator: "isISSN",
+        valid: [
+          "0378-5955",
+          "0000-0000",
+          "2434-561X",
+          "2434-561x",
+          "01896016",
+          "20905076",
+        ],
+        invalid: [
+          "0378-5954",
+          "0000-0001",
+          "0378-123",
+          "037-1234",
+          "0",
+          "2434-561c",
+          "1684-5370",
+          "19960791",
+          "",
+        ],
+      });
+      test({
+        validator: "isISSN",
+        args: [{ case_sensitive: true }],
+        valid: ["2434-561X", "2434561X", "0378-5955", "03785955"],
+        invalid: ["2434-561x", "2434561x"],
+      });
+      test({
+        validator: "isISSN",
+        args: [{ require_hyphen: true }],
+        valid: ["2434-561X", "2434-561x", "0378-5955"],
+        invalid: ["2434561X", "2434561x", "03785955"],
+      });
+      test({
+        validator: "isISSN",
+        args: [{ case_sensitive: true, require_hyphen: true }],
+        valid: ["2434-561X", "0378-5955"],
+        invalid: ["2434-561x", "2434561X", "2434561x", "03785955"],
+      });
+    });
+
+    it("should validate JSON", () => {
+      test({
+        validator: "isJSON",
+        valid: ['{ "key": "value" }', "{}"],
+        invalid: [
+          '{ key: "value" }',
+          "{ 'key': 'value' }",
+          "null",
+          "1234",
+          '"nope"',
+        ],
+      });
+    });
+
+    it("should validate JSON with primitives", () => {
+      test({
+        validator: "isJSON",
+        args: [{ allow_primitives: true }],
+        valid: ['{ "key": "value" }', "{}", "null", "false", "true"],
+        invalid: [
+          '{ key: "value" }',
+          "{ 'key': 'value' }",
+          '{ "key": value }',
+          "1234",
+          '"nope"',
+        ],
+      });
+    });
+
+    it("should validate multibyte strings", () => {
+      test({
+        validator: "isMultibyte",
+        valid: [
+          "ひらがな・カタカナ、.漢字",
+          "あいうえお foobar",
+          "test@example.com",
+          "1234abcDExyz",
+          "カタカナ",
+          "中文",
+        ],
+        invalid: ["abc", "abc123", '<>@" *.'],
+      });
+    });
+
+    it("should validate ascii strings", () => {
+      test({
+        validator: "isAscii",
+        valid: ["foobar", "0987654321", "[email protected]", "1234abcDEF"],
+        invalid: ["foobar", "xyz098", "123456", "カタカナ"],
+      });
+    });
+
+    it("should validate full-width strings", () => {
+      test({
+        validator: "isFullWidth",
+        valid: [
+          "ひらがな・カタカナ、.漢字",
+          "3ー0 a@com",
+          "Fカタカナ゙ᆲ",
+          "Good=Parts",
+        ],
+        invalid: ["abc", "abc123", '!"#$%&()<>/+=-_? ~^|.,@`{}[]'],
+      });
+    });
+
+    it("should validate half-width strings", () => {
+      test({
+        validator: "isHalfWidth",
+        valid: [
+          '!"#$%&()<>/+=-_? ~^|.,@`{}[]',
+          "l-btn_02--active",
+          "abc123い",
+          "カタカナ゙ᆲ←",
+        ],
+        invalid: ["あいうえお", "0011"],
+      });
+    });
+
+    it("should validate variable-width strings", () => {
+      test({
+        validator: "isVariableWidth",
+        valid: [
+          "ひらがなカタカナ漢字ABCDE",
+          "3ー0123",
+          "Fカタカナ゙ᆲ",
+          "Good=Parts",
+        ],
+        invalid: [
+          "abc",
+          "abc123",
+          '!"#$%&()<>/+=-_? ~^|.,@`{}[]',
+          "ひらがな・カタカナ、.漢字",
+          "123456",
+          "カタカナ゙ᆲ",
+        ],
+      });
+    });
+
+    it("should validate surrogate pair strings", () => {
+      test({
+        validator: "isSurrogatePair",
+        valid: ["𠮷野𠮷", "𩸽", "ABC千𥧄1-2-3"],
+        invalid: ["吉野竈", "鮪", "ABC1-2-3"],
+      });
+    });
+
+    it("should validate Semantic Versioning Specification (SemVer) strings", () => {
+      test({
+        validator: "isSemVer",
+        valid: [
+          "0.0.4",
+          "1.2.3",
+          "10.20.30",
+          "1.1.2-prerelease+meta",
+          "1.1.2+meta",
+          "1.1.2+meta-valid",
+          "1.0.0-alpha",
+          "1.0.0-beta",
+          "1.0.0-alpha.beta",
+          "1.0.0-alpha.beta.1",
+          "1.0.0-alpha.1",
+          "1.0.0-alpha0.valid",
+          "1.0.0-alpha.0valid",
+          "1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay",
+          "1.0.0-rc.1+build.1",
+          "2.0.0-rc.1+build.123",
+          "1.2.3-beta",
+          "10.2.3-DEV-SNAPSHOT",
+          "1.2.3-SNAPSHOT-123",
+          "1.0.0",
+          "2.0.0",
+          "1.1.7",
+          "2.0.0+build.1848",
+          "2.0.1-alpha.1227",
+          "1.0.0-alpha+beta",
+          "1.2.3----RC-SNAPSHOT.12.9.1--.12+788",
+          "1.2.3----R-S.12.9.1--.12+meta",
+          "1.2.3----RC-SNAPSHOT.12.9.1--.12",
+          "1.0.0+0.build.1-rc.10000aaa-kk-0.1",
+          "99999999999999999999999.999999999999999999.99999999999999999",
+          "1.0.0-0A.is.legal",
+        ],
+        invalid: [
+          "-invalid+invalid",
+          "-invalid.01",
+          "alpha",
+          "alpha.beta",
+          "alpha.beta.1",
+          "alpha.1",
+          "alpha+beta",
+          "alpha_beta",
+          "alpha.",
+          "alpha..",
+          "beta",
+          "1.0.0-alpha_beta",
+          "-alpha.",
+          "1.0.0-alpha..",
+          "1.0.0-alpha..1",
+          "1.0.0-alpha...1",
+          "1.0.0-alpha....1",
+          "1.0.0-alpha.....1",
+          "1.0.0-alpha......1",
+          "1.0.0-alpha.......1",
+          "01.1.1",
+          "1.01.1",
+          "1.1.01",
+          "1.2",
+          "1.2.3.DEV",
+          "1.2-SNAPSHOT",
+          "1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788",
+          "1.2-RC-SNAPSHOT",
+          "-1.0.3-gamma+b7718",
+          "+justmeta",
+          "9.8.7+meta+meta",
+          "9.8.7-whatever+meta+meta",
+          "99999999999999999999999.999999999999999999.99999999999999999-",
+          "---RC-SNAPSHOT.12.09.1--------------------------------..12",
+        ],
+      });
+    });
+
+    it("should validate base32 strings", () => {
+      test({
+        validator: "isBase32",
+        valid: [
+          "ZG======",
+          "JBSQ====",
+          "JBSWY===",
+          "JBSWY3A=",
+          "JBSWY3DP",
+          "JBSWY3DPEA======",
+          "K5SWYY3PNVSSA5DPEBXG6ZA=",
+          "K5SWYY3PNVSSA5DPEBXG6===",
+        ],
+        invalid: [
+          "12345",
+          "",
+          "JBSWY3DPtesting123",
+          "ZG=====",
+          "Z======",
+          "Zm=8JBSWY3DP",
+          "=m9vYg==",
+          "Zm9vYm/y====",
+        ],
+      });
+    });
+
+    it("should validate base32 strings with crockford alternative", () => {
+      test({
+        validator: "isBase32",
+        args: [{ crockford: true }],
+        valid: ["91JPRV3F41BPYWKCCGGG", "60", "64", "B5QQA833C5Q20S3F41MQ8"],
+        invalid: [
+          "91JPRV3F41BUPYWKCCGGG",
+          "B5QQA833C5Q20S3F41MQ8L",
+          "60I",
+          "B5QQA833OULIC5Q20S3F41MQ8",
+        ],
+      });
+    });
+
+    it("should validate base58 strings", () => {
+      test({
+        validator: "isBase58",
+        valid: [
+          "BukQL",
+          "3KMUV89zab",
+          "91GHkLMNtyo98",
+          "YyjKm3H",
+          "Mkhss145TRFg",
+          "7678765677",
+          "abcodpq",
+          "AAVHJKLPY",
+        ],
+        invalid: [
+          "0OPLJH",
+          "IMKLP23",
+          "KLMOmk986",
+          "LL1l1985hG",
+          "*MP9K",
+          "Zm=8JBSWY3DP",
+          ")()(=9292929MKL",
+        ],
+      });
+    });
+
+    it("should validate hex-encoded MongoDB ObjectId", () => {
+      test({
+        validator: "isMongoId",
+        valid: ["507f1f77bcf86cd799439011"],
+        invalid: [
+          "507f1f77bcf86cd7994390",
+          "507f1f77bcf86cd79943901z",
+          "",
+          "507f1f77bcf86cd799439011 ",
+        ],
+      });
+    });
+
+    it("should validate mobile phone number", () => {
+      let fixtures = [
+        {
+          locale: "am-AM",
+          valid: [
+            "+37433123456",
+            "+37441123456",
+            "+37443123456",
+            "+37444123456",
+            "+37455123456",
+            "+37477123456",
+            "+37488123456",
+            "+37491123456",
+            "+37493123456",
+            "+37494123456",
+            "+37495123456",
+            "+37496123456",
+            "+37498123456",
+            "+37499123456",
+            "055123456",
+            "37455123456",
+          ],
+          invalid: [
+            "12345",
+            "+37403498855",
+            "+37416498123",
+            "05614988556",
+            "",
+            "37456789000",
+            "37486789000",
+            "+37431312345",
+            "+37430312345",
+            "+37460123456",
+            "+37410324123",
+            "+37422298765",
+            "+37431276521",
+            "022698763",
+            "+37492123456",
+          ],
+        },
+        {
+          locale: "ar-AE",
+          valid: [
+            "+971502674453",
+            "+971521247658",
+            "+971541255684",
+            "+971555454458",
+            "+971561498855",
+            "+971585215778",
+            "971585215778",
+            "0585215778",
+            "585215778",
+          ],
+          invalid: [
+            "12345",
+            "+971511498855",
+            "+9715614988556",
+            "+9745614988556",
+            "",
+            "+9639626626262",
+            "+963332210972",
+            "0114152198",
+            "962796477263",
+          ],
+        },
+        {
+          locale: "ar-BH",
+          valid: [
+            "+97335078110",
+            "+97339534385",
+            "+97366331055",
+            "+97333146000",
+            "97335078110",
+            "35078110",
+            "66331055",
+          ],
+          invalid: [
+            "12345",
+            "+973350781101",
+            "+97379534385",
+            "+973035078110",
+            "",
+            "+9639626626262",
+            "+963332210972",
+            "0114152198",
+            "962796477263",
+            "035078110",
+            "16331055",
+            "hello",
+            "+9733507811a",
+          ],
+        },
+        {
+          locale: "ar-EG",
+          valid: [
+            "+201004513789",
+            "+201111453489",
+            "+201221204610",
+            "+201144621154",
+            "+201200124304",
+            "+201011201564",
+            "+201124679001",
+            "+201064790156",
+            "+201274652177",
+            "+201280134679",
+            "+201090124576",
+            "+201583728900",
+            "201599495596",
+            "201090124576",
+            "01090124576",
+            "01538920744",
+            "1593075993",
+            "1090124576",
+          ],
+          invalid: [
+            "+221004513789",
+            "+201404513789",
+            "12345",
+            "",
+            "+9639626626262",
+            "+963332210972",
+            "0114152198",
+            "962796477263",
+          ],
+        },
+        {
+          locale: "ar-JO",
+          valid: [
+            "0796477263",
+            "0777866254",
+            "0786725261",
+            "+962796477263",
+            "+962777866254",
+            "+962786725261",
+            "962796477263",
+            "962777866254",
+            "962786725261",
+          ],
+          invalid: [
+            "00962786725261",
+            "00962796477263",
+            "12345",
+            "",
+            "+9639626626262",
+            "+963332210972",
+            "0114152198",
+          ],
+        },
+        {
+          locale: "ar-KW",
+          valid: [
+            "96550000000",
+            "96560000000",
+            "96590000000",
+            "96541000000",
+            "+96550000000",
+            "+96550000220",
+            "+96551111220",
+            "+96541000000",
+          ],
+          invalid: [
+            "+96570000220",
+            "00962786725261",
+            "00962796477263",
+            "12345",
+            "",
+            "+9639626626262",
+            "+963332210972",
+            "0114152198",
+            "+96540000000",
+          ],
+        },
+        {
+          locale: "ar-LB",
+          valid: [
+            "+96171234568",
+            "+9613123456",
+            "3456123",
+            "3123456",
+            "81978468",
+            "77675798",
+          ],
+          invalid: [
+            "+961712345688888",
+            "00912220000",
+            "7767579888",
+            "+0921110000",
+            "+3123456888",
+            "021222200000",
+            "213333444444",
+            "",
+            "+212234",
+            "+21",
+            "02122333",
+          ],
+        },
+        {
+          locale: "ar-LY",
+          valid: [
+            "912220000",
+            "0923330000",
+            "218945550000",
+            "+218958880000",
+            "212220000",
+            "0212220000",
+            "+218212220000",
+          ],
+          invalid: [
+            "9122220000",
+            "00912220000",
+            "09211110000",
+            "+0921110000",
+            "+2180921110000",
+            "021222200000",
+            "213333444444",
+            "",
+            "+212234",
+            "+21",
+            "02122333",
+          ],
+        },
+        {
+          locale: "ar-MA",
+          valid: [
+            "0522714782",
+            "0690851123",
+            "0708186135",
+            "+212522714782",
+            "+212690851123",
+            "+212708186135",
+            "00212522714782",
+            "00212690851123",
+            "00212708186135",
+          ],
+          invalid: [
+            "522714782",
+            "690851123",
+            "708186135",
+            "212522714782",
+            "212690851123",
+            "212708186135",
+            "0212522714782",
+            "0212690851123",
+            "0212708186135",
+            "",
+            "12345",
+            "0922714782",
+            "+212190851123",
+            "00212408186135",
+          ],
+        },
+        {
+          locale: "dz-BT",
+          valid: [
+            "+97517374354",
+            "+97517454971",
+            "77324646",
+            "016329712",
+            "97517265559",
+          ],
+          invalid: ["", "9898347255", "+96326626262", "963372", "0114152198"],
+        },
+        {
+          locale: "ar-OM",
+          valid: [
+            "+96891212121",
+            "+96871212121",
+            "0096899999999",
+            "93112211",
+            "99099009",
+          ],
+          invalid: [
+            "+96890212121",
+            "0096890999999",
+            "0090999999",
+            "+9689021212",
+            "",
+            "+212234",
+            "+21",
+            "02122333",
+          ],
+        },
+        {
+          locale: "ar-PS",
+          valid: ["+970563459876", "970592334218", "0566372345", "0598273583"],
+          invalid: [
+            "+9759029487",
+            "97059123456789",
+            "598372348",
+            "97058aaaafjd",
+            "",
+            "05609123484",
+            "+97059",
+            "+970",
+            "97056",
+          ],
+        },
+        {
+          locale: "ar-SY",
+          valid: [
+            "0944549710",
+            "+963944549710",
+            "956654379",
+            "0944549710",
+            "0962655597",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "+9639626626262",
+            "+963332210972",
+            "0114152198",
+          ],
+        },
+        {
+          locale: "ar-SA",
+          valid: [
+            "0556578654",
+            "+966556578654",
+            "966556578654",
+            "596578654",
+            "572655597",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "+9665626626262",
+            "+96633221097",
+            "0114152198",
+          ],
+        },
+        {
+          locale: "ar-SD",
+          valid: ["0128652312", "+249919425113", "249123212345", "0993212345"],
+          invalid: [
+            "12345",
+            "",
+            "+249972662622",
+            "+24946266262",
+            "+24933221097",
+            "0614152198",
+            "096554",
+          ],
+        },
+        {
+          locale: "ar-TN",
+          valid: ["23456789", "+21623456789", "21623456789"],
+          invalid: [
+            "12345",
+            "75200123",
+            "+216512345678",
+            "13520459",
+            "85479520",
+          ],
+        },
+        {
+          locale: "bg-BG",
+          valid: ["+359897123456", "+359898888888", "0897123123"],
+          invalid: [
+            "",
+            "0898123",
+            "+359212555666",
+            "18001234567",
+            "12125559999",
+          ],
+        },
+        {
+          locale: "bn-BD",
+          valid: [
+            "+8801794626846",
+            "01399098893",
+            "8801671163269",
+            "01717112029",
+            "8801898765432",
+            "+8801312345678",
+            "01494676946",
+          ],
+          invalid: [
+            "",
+            "0174626346",
+            "017943563469",
+            "18001234567",
+            "0131234567",
+          ],
+        },
+        {
+          locale: "bs-BA",
+          valid: [
+            "060123456",
+            "061123456",
+            "062123456",
+            "063123456",
+            "0641234567",
+            "065123456",
+            "066123456",
+            "+38760123456",
+            "+38761123456",
+            "+38762123456",
+            "+38763123456",
+            "+387641234567",
+            "+38765123456",
+            "+38766123456",
+            "0038760123456",
+            "0038761123456",
+            "0038762123456",
+            "0038763123456",
+            "00387641234567",
+            "0038765123456",
+            "0038766123456",
+          ],
+          invalid: [
+            "0601234567",
+            "0611234567",
+            "06212345",
+            "06312345",
+            "064123456",
+            "0651234567",
+            "06612345",
+            "+3866123456",
+            "+3856123456",
+            "00038760123456",
+            "038761123456",
+          ],
+        },
+        {
+          locale: "cs-CZ",
+          valid: [
+            "+420 123 456 789",
+            "+420 123456789",
+            "+420123456789",
+            "123 456 789",
+            "123456789",
+          ],
+          invalid: [
+            "",
+            "+42012345678",
+            "+421 123 456 789",
+            "+420 023456789",
+            "+4201234567892",
+          ],
+        },
+        {
+          locale: "sk-SK",
+          valid: [
+            "+421 123 456 789",
+            "+421 123456789",
+            "+421123456789",
+            "123 456 789",
+            "123456789",
+          ],
+          invalid: [
+            "",
+            "+42112345678",
+            "+422 123 456 789",
+            "+421 023456789",
+            "+4211234567892",
+          ],
+        },
+        {
+          locale: "de-DE",
+          valid: [
+            "+4915123456789",
+            "015123456789",
+            "015123456789",
+            "015623456789",
+            "015623456789",
+            "01601234567",
+            "016012345678",
+            "01621234567",
+            "01631234567",
+            "01701234567",
+            "017612345678",
+          ],
+          invalid: [
+            "+4930405044550",
+            "34412345678",
+            "14412345678",
+            "16212345678",
+            "1761234567",
+            "16412345678",
+            "17012345678",
+            "+4912345678910",
+            "+49015123456789",
+            "015345678910",
+            "015412345678",
+          ],
+        },
+        {
+          locale: "de-AT",
+          valid: [
+            "+436761234567",
+            "06761234567",
+            "00436123456789",
+            "+436123456789",
+            "01999",
+            "+4372876",
+            "06434908989562345",
+          ],
+          invalid: ["167612345678", "1234", "064349089895623459"],
+        },
+        {
+          locale: "hu-HU",
+          valid: ["06301234567", "+36201234567", "06701234567"],
+          invalid: ["1234", "06211234567", "+3620123456"],
+        },
+        {
+          locale: "mz-MZ",
+          valid: [
+            "+258849229754",
+            "258849229754",
+            "849229754",
+            "829229754",
+            "839229754",
+            "869229754",
+            "859229754",
+            "869229754",
+            "879229754",
+            "+258829229754",
+            "+258839229754",
+            "+258869229754",
+            "+258859229754",
+            "+258869229754",
+            "+258879229754",
+            "258829229754",
+            "258839229754",
+            "258869229754",
+            "258859229754",
+            "258869229754",
+            "258879229754",
+          ],
+          invalid: [
+            "+248849229754",
+            "158849229754",
+            "249229754",
+            "819229754",
+            "899229754",
+            "889229754",
+            "89229754",
+            "8619229754",
+            "87922975411",
+            "257829229754",
+            "+255839229754",
+            "+2258869229754",
+            "+1258859229754",
+            "+2588692297541",
+            "+2588792519754",
+            "25882922975411",
+          ],
+        },
+        {
+          locale: "pt-BR",
+          valid: [
+            "+55 12 996551215",
+            "+55 15 97661234",
+            "+55 (12) 996551215",
+            "+55 (15) 97661234",
+            "55 (17) 96332-2155",
+            "55 (17) 6332-2155",
+            "55 15 976612345",
+            "55 15 75661234",
+            "+5512984567890",
+            "+551283456789",
+            "5512984567890",
+            "551283456789",
+            "015994569878",
+            "01593456987",
+            "022995678947",
+            "02299567894",
+            "(22)99567894",
+            "(22)9956-7894",
+            "(22) 99567894",
+            "(22) 9956-7894",
+            "(22)999567894",
+            "(22)99956-7894",
+            "(22) 999567894",
+            "(22) 99956-7894",
+            "(11) 94123-4567",
+            "(11) 91431-4567",
+            "+55 (11) 91431-4567",
+            "+55 11 91431-4567",
+            "+551191431-4567",
+            "5511914314567",
+            "5511912345678",
+          ],
+          invalid: [
+            "0819876543",
+            "+55 15 7566123",
+            "+017 123456789",
+            "5501599623874",
+            "+55012962308",
+            "+55 015 1234-3214",
+            "+55 11 90431-4567",
+            "+55 (11) 90431-4567",
+            "+551190431-4567",
+            "5511904314567",
+            "5511902345678",
+            "(11) 90431-4567",
+          ],
+        },
+        {
+          locale: "zh-CN",
+          valid: [
+            "13523333233",
+            "13838389438",
+            "14899230918",
+            "14999230918",
+            "15323456787",
+            "15052052020",
+            "16237108167",
+            "008616238234822",
+            "+8616238234822",
+            "16565600001",
+            "17269427292",
+            "17469427292",
+            "18199617480",
+            "19151751717",
+            "19651751717",
+            "+8613238234822",
+            "+8613487234567",
+            "+8617823492338",
+            "+8617823492338",
+            "+8616637108167",
+            "+8616637108167",
+            "+8616712341234",
+            "+8619912341234",
+            "+8619812341234",
+            "+8619712341234",
+            "+8619612341234",
+            "+8619512341234",
+            "+8619312341234",
+            "+8619212341234",
+            "+8619112341234",
+            "+8617269427292",
+            "008618812341234",
+            "008618812341234",
+            "008617269427292",
+            // Reserve number segments in the future.
+            "92138389438",
+            "+8692138389438",
+            "008692138389438",
+            "98199649964",
+            "+8698099649964",
+            "008698099649964",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "12038389438",
+            "12838389438",
+            "013838389438",
+            "+86-13838389438",
+            "+08613811211114",
+            "+008613811211114",
+            "08613811211114",
+            "0086-13811211114",
+            "0086-138-1121-1114",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "010-38238383",
+          ],
+        },
+        {
+          locale: "zh-TW",
+          valid: [
+            "0987123456",
+            "+886987123456",
+            "886987123456",
+            "+886-987123456",
+            "886-987123456",
+          ],
+          invalid: ["12345", "", "Vml2YW11cyBmZXJtZtesting123", "0-987123456"],
+        },
+        {
+          locale: "en-LS",
+          valid: [
+            "+26622123456",
+            "+26628123456",
+            "+26657123456",
+            "+26658123456",
+            "+26659123456",
+            "+26627123456",
+            "+26652123456",
+          ],
+          invalid: [
+            "+26612345678",
+            "",
+            "2664512-21",
+            "+2662212345678",
+            "someString",
+          ],
+        },
+        {
+          locale: "en-BM",
+          valid: ["+14417974653", "14413986653", "4415370973", "+14415005489"],
+          invalid: [
+            "85763287",
+            "+14412020436",
+            "+14412236546",
+            "+14418245567",
+            "+14416546789",
+            "44087635627",
+            "+4418970973",
+            "",
+            "+1441897465",
+            "+1441897465 additional invalid string part",
+          ],
+        },
+        {
+          locale: "en-BS",
+          valid: [
+            "+12421231234",
+            "2421231234",
+            "+1-2421231234",
+            "+1-242-123-1234",
+            "(242)-123-1234",
+            "+1 (242)-123-1234",
+            "242 123-1234",
+            "(242) 123 1234",
+          ],
+          invalid: [
+            "85763287",
+            "+1 242 12 12 12 12",
+            "+1424123123",
+            "+14418245567",
+            "+14416546789",
+            "not a number",
+            "",
+          ],
+        },
+        {
+          locale: "en-ZA",
+          valid: ["0821231234", "+27821231234", "27821231234"],
+          invalid: [
+            "082123",
+            "08212312345",
+            "21821231234",
+            "+21821231234",
+            "+0821231234",
+          ],
+        },
+        {
+          locale: "en-AU",
+          valid: ["61404111222", "+61411222333", "0417123456"],
+          invalid: [
+            "082123",
+            "08212312345",
+            "21821231234",
+            "+21821231234",
+            "+0821231234",
+            "04123456789",
+          ],
+        },
+        {
+          locale: "es-BO",
+          valid: [
+            "+59175553635",
+            "+59162223685",
+            "+59179783890",
+            "+59160081890",
+            "79783890",
+            "60081890",
+          ],
+          invalid: [
+            "082123",
+            "08212312345",
+            "21821231234",
+            "+21821231234",
+            "+59199783890",
+          ],
+        },
+        {
+          locale: "en-GG",
+          valid: [
+            "+441481123456",
+            "+441481789123",
+            "441481123456",
+            "441481789123",
+          ],
+          invalid: ["999", "+441481123456789", "+447123456789"],
+        },
+        {
+          locale: "en-GH",
+          valid: [
+            "0202345671",
+            "0502345671",
+            "0242345671",
+            "0542345671",
+            "0532345671",
+            "0272345671",
+            "0572345671",
+            "0262345671",
+            "0562345671",
+            "0232345671",
+            "0282345671",
+            "+233202345671",
+            "+233502345671",
+            "+233242345671",
+            "+233542345671",
+            "+233532345671",
+            "+233272345671",
+            "+233572345671",
+            "+233262345671",
+            "+233562345671",
+            "+233232345671",
+            "+233282345671",
+            "+233592349493",
+            "0550298219",
+          ],
+          invalid: ["082123", "232345671", "0292345671", "+233292345671"],
+        },
+        {
+          locale: "en-GY",
+          valid: ["+5926121234", "06121234", "06726381", "+5926726381"],
+          invalid: [
+            "5926121234",
+            "6121234",
+            "+592 6121234",
+            "05926121234",
+            "+592-6121234",
+          ],
+        },
+        {
+          locale: "en-HK",
+          valid: [
+            "91234567",
+            "9123-4567",
+            "61234567",
+            "51234567",
+            "+85291234567",
+            "+852-91234567",
+            "+852-9123-4567",
+            "+852 9123 4567",
+            "9123 4567",
+            "852-91234567",
+          ],
+          invalid: ["999", "+852-912345678", "123456789", "+852-1234-56789"],
+        },
+        {
+          locale: "en-MO",
+          valid: [
+            "61234567",
+            "+85361234567",
+            "+853-61234567",
+            "+853-6123-4567",
+            "+853 6123 4567",
+            "6123 4567",
+            "853-61234567",
+          ],
+          invalid: [
+            "999",
+            "12345678",
+            "612345678",
+            "+853-12345678",
+            "+853-22345678",
+            "+853-82345678",
+            "+853-612345678",
+            "+853-1234-5678",
+            "+853 1234 5678",
+            "+853-6123-45678",
+          ],
+        },
+        {
+          locale: "en-IE",
+          valid: [
+            "+353871234567",
+            "353831234567",
+            "353851234567",
+            "353861234567",
+            "353871234567",
+            "353881234567",
+            "353891234567",
+            "0871234567",
+            "0851234567",
+          ],
+          invalid: [
+            "999",
+            "+353341234567",
+            "+33589484858",
+            "353841234567",
+            "353811234567",
+          ],
+        },
+        {
+          locale: "en-JM",
+          valid: ["+8761021234", "8761211234", "8763511274", "+8764511274"],
+          invalid: [
+            "999",
+            "+876102123422",
+            "+8861021234",
+            "8761021212213",
+            "876102123",
+          ],
+        },
+        {
+          locale: "en-KE",
+          valid: [
+            "+254728590432",
+            "+254733875610",
+            "254728590234",
+            "0733346543",
+            "0700459022",
+            "0110934567",
+            "+254110456794",
+            "254198452389",
+          ],
+          invalid: ["999", "+25489032", "123456789", "+254800723845"],
+        },
+        {
+          locale: "fr-CF",
+          valid: [
+            "+23670850000",
+            "+23675038756",
+            "+23677859002",
+            "+23672854202",
+            "+23621854052",
+            "+23622854072",
+            "72234650",
+            "70045902",
+            "77934567",
+            "21456794",
+            "22452389",
+          ],
+          invalid: [
+            "+23689032",
+            "123456789",
+            "+236723845987",
+            "022452389",
+            "+236772345678",
+            "+236700456794",
+          ],
+        },
+        {
+          locale: "en-KI",
+          valid: ["+68673140000", "68673059999", "+68663000000", "68663019999"],
+          invalid: [
+            "+68653000000",
+            "68664019999",
+            "+68619019999",
+            "686123456789",
+            "+686733445",
+          ],
+        },
+        {
+          locale: "en-MT",
+          valid: ["+35699000000", "+35679000000", "99000000"],
+          invalid: ["356", "+35699000", "+35610000000"],
+        },
+        {
+          locale: "en-PH",
+          valid: [
+            "+639275149120",
+            "+639275142327",
+            "+639003002023",
+            "09275149116",
+            "09194877624",
+          ],
+          invalid: [
+            "12112-13-345",
+            "12345678901",
+            "sx23YW11cyBmZxxXJt123123",
+            "010-38238383",
+            "966684123123-2590",
+          ],
+        },
+        {
+          locale: "en-UG",
+          valid: [
+            "+256728590432",
+            "+256733875610",
+            "256728590234",
+            "0773346543",
+            "0700459022",
+          ],
+          invalid: [
+            "999",
+            "+254728590432",
+            "+25489032",
+            "123456789",
+            "+254800723845",
+          ],
+        },
+        {
+          locale: "en-RW",
+          valid: [
+            "+250728590432",
+            "+250733875610",
+            "250738590234",
+            "0753346543",
+            "0780459022",
+          ],
+          invalid: [
+            "999",
+            "+254728590432",
+            "+25089032",
+            "123456789",
+            "+250800723845",
+          ],
+        },
+        {
+          locale: "en-TZ",
+          valid: [
+            "+255728590432",
+            "+255733875610",
+            "255628590234",
+            "0673346543",
+            "0600459022",
+          ],
+          invalid: [
+            "999",
+            "+254728590432",
+            "+25589032",
+            "123456789",
+            "+255800723845",
+          ],
+        },
+        {
+          locale: "en-MW",
+          valid: [
+            "+265994563785",
+            "+265111785436",
+            "+265318596857",
+            "0320008744",
+            "01256258",
+            "0882541896",
+            "+265984563214",
+          ],
+          invalid: [
+            "58563",
+            "+2658256258",
+            "0896328741",
+            "0708574896",
+            "+26570857489635",
+          ],
+        },
+        {
+          locale: "es-PE",
+          valid: [
+            "+51912232764",
+            "+51923464567",
+            "+51968267382",
+            "+51908792973",
+            "974980472",
+            "908792973",
+            "+51974980472",
+          ],
+          invalid: [
+            "999",
+            "+51812232764",
+            "+5181223276499",
+            "+25589032",
+            "123456789",
+          ],
+        },
+        {
+          locale: "fr-FR",
+          valid: [
+            "0612457898",
+            "+33612457898",
+            "33612457898",
+            "0712457898",
+            "+33712457898",
+            "33712457898",
+          ],
+          invalid: [
+            "061245789",
+            "06124578980",
+            "0112457898",
+            "0212457898",
+            "0312457898",
+            "0412457898",
+            "0512457898",
+            "0812457898",
+            "0912457898",
+            "+34612457898",
+            "+336124578980",
+            "+3361245789",
+          ],
+        },
+        {
+          locale: "fr-BF",
+          valid: [
+            "+22661245789",
+            "+22665903092",
+            "+22672457898",
+            "+22673572346",
+            "061245789",
+            "071245783",
+          ],
+          invalid: [
+            "0612457892",
+            "06124578980",
+            "0112457898",
+            "0212457898",
+            "0312457898",
+            "0412457898",
+            "0512457898",
+            "0812457898",
+            "0912457898",
+            "+22762457898",
+            "+226724578980",
+            "+22634523",
+          ],
+        },
+        {
+          locale: "fr-BJ",
+          valid: [
+            "+22920215789",
+            "+22920293092",
+            "+22921307898",
+            "+22921736346",
+            "+22922416346",
+            "+22923836346",
+          ],
+          invalid: [
+            "0612457892",
+            "01122921737346",
+            "+22762457898",
+            "+226724578980",
+            "+22634523",
+          ],
+        },
+        {
+          locale: "fr-CA",
+          valid: ["19876543210", "8005552222", "+15673628910"],
+          invalid: [
+            "564785",
+            "0123456789",
+            "1437439210",
+            "+10345672645",
+            "11435213543",
+          ],
+        },
+        {
+          locale: "fr-CD",
+          valid: [
+            "+243818590432",
+            "+243893875610",
+            "243978590234",
+            "0813346543",
+            "0820459022",
+            "+243902590221",
+          ],
+          invalid: [
+            "243",
+            "+254818590432",
+            "+24389032",
+            "123456789",
+            "+243700723845",
+          ],
+        },
+        {
+          locale: "fr-GF",
+          valid: [
+            "0612457898",
+            "+594612457898",
+            "594612457898",
+            "0712457898",
+            "+594712457898",
+            "594712457898",
+          ],
+          invalid: [
+            "061245789",
+            "06124578980",
+            "0112457898",
+            "0212457898",
+            "0312457898",
+            "0412457898",
+            "0512457898",
+            "0812457898",
+            "0912457898",
+            "+54612457898",
+            "+5946124578980",
+            "+59461245789",
+          ],
+        },
+        {
+          locale: "fr-GP",
+          valid: [
+            "0612457898",
+            "+590612457898",
+            "590612457898",
+            "0712457898",
+            "+590712457898",
+            "590712457898",
+          ],
+          invalid: [
+            "061245789",
+            "06124578980",
+            "0112457898",
+            "0212457898",
+            "0312457898",
+            "0412457898",
+            "0512457898",
+            "0812457898",
+            "0912457898",
+            "+594612457898",
+            "+5906124578980",
+            "+59061245789",
+          ],
+        },
+        {
+          locale: "fr-MQ",
+          valid: [
+            "0612457898",
+            "+596612457898",
+            "596612457898",
+            "0712457898",
+            "+596712457898",
+            "596712457898",
+          ],
+          invalid: [
+            "061245789",
+            "06124578980",
+            "0112457898",
+            "0212457898",
+            "0312457898",
+            "0412457898",
+            "0512457898",
+            "0812457898",
+            "0912457898",
+            "+594612457898",
+            "+5966124578980",
+            "+59661245789",
+          ],
+        },
+        {
+          locale: "fr-RE",
+          valid: [
+            "0612457898",
+            "+262612457898",
+            "262612457898",
+            "0712457898",
+            "+262712457898",
+            "262712457898",
+          ],
+          invalid: [
+            "061245789",
+            "06124578980",
+            "0112457898",
+            "0212457898",
+            "0312457898",
+            "0412457898",
+            "0512457898",
+            "0812457898",
+            "0912457898",
+            "+264612457898",
+            "+2626124578980",
+            "+26261245789",
+          ],
+        },
+        {
+          locale: "fr-PF",
+          valid: [
+            "87123456",
+            "88123456",
+            "89123456",
+            "+68987123456",
+            "+68988123456",
+            "+68989123456",
+            "68987123456",
+            "68988123456",
+            "68989123456",
+          ],
+          invalid: [
+            "7123456",
+            "86123456",
+            "87 12 34 56",
+            "definitely not a number",
+            "01+68988123456",
+            "6898912345",
+          ],
+        },
+        {
+          locale: "fr-WF",
+          valid: [
+            "+681408500",
+            "+681499387",
+            "+681728590",
+            "+681808542",
+            "+681828540",
+            "+681832014",
+            "408500",
+            "499387",
+            "728590",
+            "808542",
+            "828540",
+            "832014",
+          ],
+          invalid: [
+            "+68189032",
+            "123456789",
+            "+681723845987",
+            "022452389",
+            "+681772345678",
+            "+681700456794",
+          ],
+        },
+        {
+          locale: "ka-GE",
+          valid: [
+            "+995500011111",
+            "+995515352134",
+            "+995798526662",
+            "798526662",
+            "500011119",
+            "798526662",
+            "+995799766525",
+          ],
+          invalid: [
+            "+99550001111",
+            "+9957997665250",
+            "+9959997665251",
+            "+995780011111",
+            "20000000000",
+            "68129485729",
+            "6589394827",
+            "298RI89572",
+          ],
+        },
+        {
+          locale: "el-GR",
+          valid: [
+            "+306944848966",
+            "306944848966",
+            "06904567890",
+            "6944848966",
+            "6904567890",
+            "6914567890",
+            "6934567890",
+            "6944567890",
+            "6954567890",
+            "6974567890",
+            "6984567890",
+            "6994567890",
+            "6854567890",
+            "6864567890",
+            "6874567890",
+            "6884567890",
+            "6894567890",
+          ],
+          invalid: [
+            "2102323234",
+            "+302646041461",
+            "120000000",
+            "20000000000",
+            "68129485729",
+            "6589394827",
+            "298RI89572",
+            "6924567890",
+            "6964567890",
+            "6844567890",
+            "690456789",
+            "00690456789",
+            "not a number",
+          ],
+        },
+        {
+          locale: "el-CY",
+          valid: [
+            "96546247",
+            "96978927",
+            "+35799837145",
+            "+35799646792",
+            "96056927",
+            "99629593",
+            "99849980",
+            "3599701619",
+            "+3599148725",
+            "96537247",
+            "3596676533",
+            "+35795123455",
+            "+35797012204",
+            "35799123456",
+            "+35794123456",
+            "+35796123456",
+          ],
+          invalid: [
+            "",
+            "somechars",
+            "9697892",
+            "998499803",
+            "33799837145",
+            "+3799646792",
+            "93056927",
+          ],
+        },
+        {
+          locale: "en-GB",
+          valid: ["447789345856", "+447861235675", "07888814488"],
+          invalid: [
+            "67699567",
+            "0773894868",
+            "077389f8688",
+            "+07888814488",
+            "0152456999",
+            "442073456754",
+            "+443003434751",
+            "05073456754",
+            "08001123123",
+            "07043425232",
+            "01273884231",
+            "03332654034",
+          ],
+        },
+        {
+          locale: "en-SG",
+          valid: [
+            "32891278",
+            "87654321",
+            "98765432",
+            "+6587654321",
+            "+6598765432",
+            "+6565241234",
+          ],
+          invalid: [
+            "332891231",
+            "987654321",
+            "876543219",
+            "8765432",
+            "9876543",
+            "12345678",
+            "+98765432",
+            "+9876543212",
+            "+15673628910",
+            "19876543210",
+            "8005552222",
+          ],
+        },
+        {
+          locale: "en-US",
+          valid: [
+            "19876543210",
+            "8005552222",
+            "+15673628910",
+            "+1(567)3628910",
+            "+1(567)362-8910",
+            "+1(567) 362-8910",
+            "1(567)362-8910",
+            "1(567)362 8910",
+            "223-456-7890",
+          ],
+          invalid: [
+            "564785",
+            "0123456789",
+            "1437439210",
+            "+10345672645",
+            "11435213543",
+            "1(067)362-8910",
+            "1(167)362-8910",
+            "+2(267)362-8910",
+            "+3365520145",
+          ],
+        },
+        {
+          locale: "en-CA",
+          valid: ["19876543210", "8005552222", "+15673628910"],
+          invalid: [
+            "564785",
+            "0123456789",
+            "1437439210",
+            "+10345672645",
+            "11435213543",
+          ],
+        },
+        {
+          locale: "en-ZM",
+          valid: [
+            "0956684590",
+            "0966684590",
+            "0976684590",
+            "+260956684590",
+            "+260966684590",
+            "+260976684590",
+            "260976684590",
+            "+260779493521",
+            "+260760010936",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "010-38238383",
+            "966684590",
+            "760010936",
+          ],
+        },
+        {
+          locale: ["en-ZW"],
+          valid: [
+            "+263561890123",
+            "+263715558041",
+            "+263775551112",
+            "+263775551695",
+            "+263715556633",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+2631234567890",
+            "+2641234567",
+            "+263981234",
+            "4736338855",
+            "66338855",
+          ],
+        },
+        {
+          locale: ["en-NA"],
+          valid: [
+            "+26466189012",
+            "+26461555804",
+            "+26461434221",
+            "+26487555169",
+            "+26481555663",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+2641234567890",
+            "+2641234567",
+            "+2648143422",
+            "+264981234",
+            "4736338855",
+            "66338855",
+          ],
+        },
+        {
+          locale: "ru-RU",
+          valid: ["+79676338855", "79676338855", "89676338855", "9676338855"],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "010-38238383",
+            "+9676338855",
+            "19676338855",
+            "6676338855",
+            "+99676338855",
+          ],
+        },
+        {
+          locale: "si-LK",
+          valid: [
+            "+94766661206",
+            "94713114340",
+            "0786642116",
+            "078 7642116",
+            "078-7642116",
+            "0749994567",
+          ],
+          invalid: [
+            "9912349956789",
+            "12345",
+            "1678123456",
+            "0731234567",
+            "0797878674",
+          ],
+        },
+        {
+          locale: "sr-RS",
+          valid: [
+            "0640133338",
+            "063333133",
+            "0668888878",
+            "+381645678912",
+            "+381611314000",
+            "0655885010",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "010-38238383",
+            "+9676338855",
+            "19676338855",
+            "6676338855",
+            "+99676338855",
+          ],
+        },
+        {
+          locale: "en-NZ",
+          valid: ["+6427987035", "642240512347", "0293981646", "029968425"],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+642956696123566",
+            "+02119620856",
+            "+9676338855",
+            "19676338855",
+            "6676338855",
+            "+99676338855",
+          ],
+        },
+        {
+          locale: "en-MU",
+          valid: ["+23012341234", "12341234", "012341234"],
+          invalid: [
+            "41234",
+            "",
+            "+230",
+            "+2301",
+            "+23012",
+            "+230123",
+            "+2301234",
+            "+23012341",
+            "+230123412",
+            "+2301234123",
+            "+230123412341",
+            "+2301234123412",
+            "+23012341234123",
+          ],
+        },
+        {
+          locale: ["nb-NO", "nn-NO"], // for multiple locales
+          valid: [
+            "+4796338855",
+            "+4746338855",
+            "4796338855",
+            "4746338855",
+            "46338855",
+            "96338855",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+4676338855",
+            "19676338855",
+            "+4726338855",
+            "4736338855",
+            "66338855",
+          ],
+        },
+        {
+          locale: ["ne-NP"],
+          valid: [
+            "+9779817385479",
+            "+9779717385478",
+            "+9779862002615",
+            "+9779853660020",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+97796123456789",
+            "+9771234567",
+            "+977981234",
+            "4736338855",
+            "66338855",
+          ],
+        },
+        {
+          locale: "vi-VN",
+          valid: [
+            "0336012403",
+            "+84586012403",
+            "84981577798",
+            "0708001240",
+            "84813601243",
+            "0523803765",
+            "0863803732",
+            "0883805866",
+            "0892405867",
+            "+84888696413",
+            "0878123456",
+            "84781234567",
+            "0553803765",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "010-38238383",
+            "260976684590",
+            "01678912345",
+            "+841698765432",
+            "841626543219",
+            "0533803765",
+            "08712345678",
+            "+0321234567",
+          ],
+        },
+        {
+          locale: "es-AR",
+          valid: [
+            "5491143214321",
+            "+5491143214321",
+            "+5492414321432",
+            "5498418432143",
+          ],
+          invalid: [
+            "1143214321",
+            "91143214321",
+            "+91143214321",
+            "549841004321432",
+            "549 11 43214321",
+            "549111543214321",
+            "5714003425432",
+            "549114a214321",
+            "54 9 11 4321-4321",
+          ],
+        },
+        {
+          locale: "es-CO",
+          valid: [
+            "+573003321235",
+            "573003321235",
+            "3003321235",
+            "3213321235",
+            "3103321235",
+            "3243321235",
+            "573011140876",
+          ],
+          invalid: [
+            "1234",
+            "+57443875615",
+            "57309875615",
+            "57109834567",
+            "5792434567",
+            "5702345689",
+            "5714003425432",
+            "5703013347567",
+            "069834567",
+            "969834567",
+            "579871235",
+            "574321235",
+            "5784321235",
+            "5784321235",
+            "9821235",
+            "0698345",
+            "3321235",
+          ],
+        },
+        {
+          locale: "es-CL",
+          valid: ["+56733875615", "56928590234", "0928590294", "0208590294"],
+          invalid: [
+            "1234",
+            "+5633875615",
+            "563875615",
+            "56109834567",
+            "56069834567",
+          ],
+        },
+        {
+          locale: "es-EC",
+          valid: [
+            "+593987654321",
+            "593987654321",
+            "0987654321",
+            "027332615",
+            "+59323456789",
+          ],
+          invalid: [
+            "03321321",
+            "+593387561",
+            "59312345677",
+            "02344635",
+            "593123456789",
+            "081234567",
+            "+593912345678",
+            "+593902345678",
+            "+593287654321",
+            "593287654321",
+          ],
+        },
+        {
+          locale: "es-CR",
+          valid: [
+            "+50688888888",
+            "+50665408090",
+            "+50640895069",
+            "25789563",
+            "85789563",
+          ],
+          invalid: [
+            "+5081",
+            "+5067777777",
+            "+50188888888",
+            "+50e987643254",
+            "+506e4t4",
+            "-50688888888",
+            "50688888888",
+            "12345678",
+            "98765432",
+            "01234567",
+          ],
+        },
+        {
+          locale: "es-CU",
+          valid: ["+5351234567", "005353216547", "51234567", "53214567"],
+          invalid: [
+            "1234",
+            "+5341234567",
+            "0041234567",
+            "41234567",
+            "11234567",
+            "21234567",
+            "31234567",
+            "60303456",
+            "71234567",
+            "81234567",
+            "91234567",
+            "+5343216547",
+            "+5332165498",
+            "+53121234567",
+            "",
+            "abc",
+            "+535123457",
+            "56043029304",
+          ],
+        },
+        {
+          locale: "es-DO",
+          valid: [
+            "+18096622563",
+            "+18295614488",
+            "+18495259567",
+            "8492283478",
+            "8092324576",
+            "8292387713",
+          ],
+          invalid: [
+            "+18091",
+            "+1849777777",
+            "-18296643245",
+            "+18086643245",
+            "+18396643245",
+            "8196643245",
+            "+38492283478",
+            "6492283478",
+            "8192283478",
+          ],
+        },
+        {
+          locale: "es-HN",
+          valid: [
+            "+50495551876",
+            "+50488908787",
+            "+50493456789",
+            "+50489234567",
+            "+50488987896",
+            "+50497567389",
+            "+50427367389",
+            "+50422357389",
+            "+50431257389",
+            "+50430157389",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+34683456543",
+            "65478932",
+            "+50298787654",
+            "+504989874",
+          ],
+        },
+        {
+          locale: "es-ES",
+          valid: [
+            "+34654789321",
+            "654789321",
+            "+34714789321",
+            "714789321",
+            "+34744789321",
+            "744789321",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+3465478932",
+            "65478932",
+            "+346547893210",
+            "6547893210",
+            "+3470478932",
+            "7047893210",
+            "+34854789321",
+            "7547893219",
+          ],
+        },
+        {
+          locale: "es-MX",
+          valid: [
+            "+52019654789321",
+            "+52199654789321",
+            "+5201965478932",
+            "+5219654789321",
+            "52019654789321",
+            "52199654789321",
+            "5201965478932",
+            "5219654789321",
+            "87654789321",
+            "8654789321",
+            "0187654789321",
+            "18654789321",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+3465478932",
+            "65478932",
+            "+346547893210",
+            "+34704789321",
+            "704789321",
+            "+34754789321",
+          ],
+        },
+        {
+          locale: "es-NI",
+          valid: [
+            "+5051234567",
+            "+50512345678",
+            "5051234567",
+            "50512345678",
+            "+50555555555",
+          ],
+          invalid: [
+            "1234",
+            "",
+            "1234567",
+            "12345678",
+            "+12345678",
+            "+505123456789",
+            "+50612345678",
+            "+50712345678",
+            "-50512345678",
+          ],
+        },
+        {
+          locale: "es-PA",
+          valid: ["+5076784565", "+5074321557", "5073331112", "+50723431212"],
+          invalid: [
+            "+50755555",
+            "+207123456",
+            "2001236542",
+            "+507987643254",
+            "+507jjjghtf",
+          ],
+        },
+        {
+          locale: "es-PY",
+          valid: [
+            "+595991372649",
+            "+595992847352",
+            "+595993847593",
+            "+595994857473",
+            "+595995348532",
+            "+595996435231",
+            "+595981847362",
+            "+595982435452",
+            "+595983948502",
+            "+595984342351",
+            "+595985403481",
+            "+595986384012",
+            "+595971435231",
+            "+595972103924",
+            "+595973438542",
+            "+595974425864",
+            "+595975425843",
+            "+595976342546",
+            "+595961435234",
+            "+595963425043",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "65478932",
+            "+59599384712",
+            "+5959938471234",
+            "+595547893218",
+            "+591993546843",
+          ],
+        },
+        {
+          locale: "es-SV",
+          valid: [
+            "62136634",
+            "50361366631",
+            "+50361366634",
+            "+50361367217",
+            "+50361367460",
+            "+50371367632",
+            "+50371367767",
+            "+50371368314",
+          ],
+          invalid: [
+            "+5032136663",
+            "21346663",
+            "+50321366663",
+            "12345",
+            "El salvador",
+            "this should fail",
+            "+5032222",
+            "+503 1111 1111",
+            "00 +503 1234 5678",
+          ],
+        },
+        {
+          locale: "es-UY",
+          valid: ["+59899123456", "099123456", "+59894654321", "091111111"],
+          invalid: [
+            "54321",
+            "montevideo",
+            "",
+            "+598099123456",
+            "090883338",
+            "099 999 999",
+          ],
+        },
+        {
+          locale: "es-VE",
+          valid: ["+582125457765", "+582125458053", "+584125458053"],
+          invalid: ["+585129934395", "+58212993439", ""],
+        },
+        {
+          locale: "et-EE",
+          valid: [
+            "+372 512 34 567",
+            "372 512 34 567",
+            "+37251234567",
+            "51234567",
+            "81234567",
+            "+372842345678",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "NotANumber",
+            "+333 51234567",
+            "61234567",
+            "+51234567",
+            "+372 539 57 4",
+            "+372 900 1234",
+            "12345678",
+          ],
+        },
+        {
+          locale: "pl-PL",
+          valid: [
+            "+48512689767",
+            "+48 56 376 87 47",
+            "56 566 78 46",
+            "657562855",
+            "+48657562855",
+            "+48 887472765",
+            "+48 56 6572724",
+            "+48 67 621 5461",
+            "48 67 621 5461",
+            "+48 45 621 5461",
+          ],
+          invalid: [
+            "+48  67 621 5461",
+            "+55657562855",
+            "3454535",
+            "teststring",
+            "",
+            "1800-88-8687",
+            "+6019-5830837",
+            "357562855",
+            "+48 44 621 5461",
+          ],
+        },
+        {
+          locale: "fa-IR",
+          valid: [
+            "+989123456789",
+            "989223456789",
+            "09323456789",
+            "09021456789",
+            "+98-990-345-6789",
+            "+98 938 345 6789",
+            "0938 345 6789",
+          ],
+          invalid: [
+            "",
+            "+989623456789",
+            "+981123456789",
+            "01234567890",
+            "09423456789",
+            "09823456789",
+            "9123456789",
+            "091234567890",
+            "0912345678",
+            "+98 912 3456 6789",
+            "0912 345 678",
+          ],
+        },
+        {
+          locale: "fi-FI",
+          valid: [
+            "+358505557171",
+            "0455571",
+            "0505557171",
+            "358505557171",
+            "04412345",
+            "0457 123 45 67",
+            "+358457 123 45 67",
+            "+358 50 555 7171",
+            "0501234",
+            "+358501234",
+            "050 1234",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "045557",
+            "045555717112312332423423421",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "010-38238383",
+            "+3-585-0555-7171",
+            "+9676338855",
+            "19676338855",
+            "6676338855",
+            "+99676338855",
+            "044123",
+            "019123456789012345678901",
+          ],
+        },
+        {
+          locale: "fj-FJ",
+          valid: [
+            "+6799898679",
+            "6793788679",
+            "+679 989 8679",
+            "679 989 8679",
+            "679 3456799",
+            "679908 8909",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "04555792",
+            "902w99900030900000000099",
+            "8uiuiuhhyy&GUU88d",
+            "010-38238383",
+            "19676338855",
+            "679 9 89 8679",
+            "6793 45679",
+          ],
+        },
+        {
+          locale: "ms-MY",
+          valid: [
+            "+60128228789",
+            "+60195830837",
+            "+6019-5830837",
+            "+6019-5830837",
+            "+6010-4357675",
+            "+60172012370",
+            "0128737867",
+            "0172012370",
+            "01468987837",
+            "01112347345",
+            "016-2838768",
+            "016 2838768",
+          ],
+          invalid: [
+            "12345",
+            "601238788657",
+            "088387675",
+            "16-2838768",
+            "032551433",
+            "6088-387888",
+            "088-261987",
+            "1800-88-8687",
+            "088-320000",
+            "+01112353576",
+            "+0111419752",
+          ],
+        },
+        {
+          locale: "fr-CM",
+          valid: [
+            "+237677936141",
+            "237623456789",
+            "+237698124842",
+            "237693029202",
+          ],
+          invalid: [
+            "NotANumber",
+            "+(703)-572-2920",
+            "+237 623 45 67 890",
+            "+2379981247429",
+          ],
+        },
+        {
+          locale: "ko-KR",
+          valid: [
+            "+82-010-1234-5678",
+            "+82-10-1234-5678",
+            "82-010-1234-5678",
+            "82-10-1234-5678",
+            "+82 10 1234 5678",
+            "010-123-5678",
+            "10-1234-5678",
+            "+82 10 1234 5678",
+            "011 1234 5678",
+            "+820112345678",
+            "01012345678",
+            "+82 016 1234 5678",
+            "82 19 1234 5678",
+            "+82 010 12345678",
+          ],
+          invalid: [
+            "abcdefghi",
+            "+82 10 1234 567",
+            "+82 10o 1234 1234",
+            "+82 101 1234 5678",
+            "+82 10 12 5678",
+            "+011 7766 1234",
+            "011_7766_1234",
+            "+820 11 7766 1234",
+          ],
+        },
+        {
+          locale: "ky-KG",
+          valid: [
+            "+996553033300",
+            "+996 222 123456",
+            "+996 500 987654",
+            "+996 555 111222",
+            "+996 700 333444",
+            "+996 770 555666",
+            "+996 880 777888",
+            "+996 990 999000",
+            "+996 995 555666",
+            "+996 996 555666",
+            "+996 997 555666",
+            "+996 998 555666",
+          ],
+          invalid: [
+            "+996 201 123456",
+            "+996 312 123456",
+            "+996 3960 12345",
+            "+996 3961 12345",
+            "+996 3962 12345",
+            "+996 3963 12345",
+            "+996 3964 12345",
+            "+996 3965 12345",
+            "+996 3966 12345",
+            "+996 3967 12345",
+            "+996 3968 12345",
+            "+996 511 123456",
+            "+996 522 123456",
+            "+996 561 123456",
+            "+996 571 123456",
+            "+996 624 123456",
+            "+996 623 123456",
+            "+996 622 123456",
+            "+996 609 123456",
+            "+996 100 12345",
+            "+996 100 1234567",
+            "996 100 123456",
+            "0 100 123456",
+            "0 100 123abc",
+          ],
+        },
+        {
+          locale: "ja-JP",
+          valid: [
+            "09012345678",
+            "08012345678",
+            "07012345678",
+            "06012345678",
+            "090 1234 5678",
+            "+8190-1234-5678",
+            "+81 (0)90-1234-5678",
+            "+819012345678",
+            "+81-(0)90-1234-5678",
+            "+81 90 1234 5678",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "045555717112312332423423421",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+3-585-0555-7171",
+            "0 1234 5689",
+            "16 1234 5689",
+            "03_1234_5689",
+            "0312345678",
+            "0721234567",
+            "06 1234 5678",
+            "072 123 4567",
+            "0729 12 3456",
+            "07296 1 2345",
+            "072961 2345",
+            "03-1234-5678",
+            "+81312345678",
+            "+816-1234-5678",
+            "+81 090 1234 5678",
+            "+8109012345678",
+            "+81-090-1234-5678",
+            "90 1234 5678",
+          ],
+        },
+        {
+          locale: "ir-IR",
+          valid: [
+            "09023818688",
+            "09123809999",
+            "+989023818688",
+            "+989103923523",
+          ],
+          invalid: [
+            "19023818688",
+            "323254",
+            "+903232323257",
+            "++3567868",
+            "0902381888832",
+          ],
+        },
+        {
+          locale: "it-IT",
+          valid: [
+            "370 3175423",
+            "333202925",
+            "+39 310 7688449",
+            "+39 3339847632",
+          ],
+          invalid: ["011 7387545", "12345", "+45 345 6782395"],
+        },
+        {
+          locale: "fr-BE",
+          valid: [
+            "0470123456",
+            "+32470123456",
+            "32470123456",
+            "0421234567",
+            "+32421234567",
+            "32421234567",
+          ],
+          invalid: [
+            "12345",
+            "+3212345",
+            "3212345",
+            "04701234567",
+            "+3204701234567",
+            "3204701234567",
+            "0212345678",
+            "+320212345678",
+            "320212345678",
+            "021234567",
+            "+3221234567",
+            "3221234567",
+          ],
+        },
+        {
+          locale: "nl-BE",
+          valid: [
+            "0470123456",
+            "+32470123456",
+            "32470123456",
+            "0421234567",
+            "+32421234567",
+            "32421234567",
+          ],
+          invalid: [
+            "12345",
+            "+3212345",
+            "3212345",
+            "04701234567",
+            "+3204701234567",
+            "3204701234567",
+            "0212345678",
+            "+320212345678",
+            "320212345678",
+            "021234567",
+            "+3221234567",
+            "3221234567",
+          ],
+        },
+        {
+          locale: "nl-NL",
+          valid: [
+            "0670123456",
+            "0612345678",
+            "31612345678",
+            "31670123456",
+            "+31612345678",
+            "+31670123456",
+            "+31(0)612345678",
+            "0031612345678",
+            "0031(0)612345678",
+          ],
+          invalid: [
+            "12345",
+            "+3112345",
+            "3112345",
+            "06701234567",
+            "012345678",
+            "+3104701234567",
+            "3104701234567",
+            "0212345678",
+            "021234567",
+            "+3121234567",
+            "3121234567",
+            "+310212345678",
+            "310212345678",
+          ],
+        },
+        {
+          locale: "nl-AW",
+          valid: [
+            "2975612345",
+            "2976412345",
+            "+2975612345",
+            "+2975912345",
+            "+2976412345",
+            "+2977312345",
+            "+2977412345",
+            "+2979912345",
+          ],
+          invalid: [
+            "12345",
+            "+2972345",
+            "2972345",
+            "06701234567",
+            "012345678",
+            "+2974701234567",
+            "2974701234567",
+            "0297345678",
+            "029734567",
+            "+2971234567",
+            "2971234567",
+            "+297212345678",
+            "297212345678",
+            "number",
+          ],
+        },
+        {
+          locale: "ro-MD",
+          valid: [
+            "+37360375781",
+            "+37361945673",
+            "+37362387563",
+            "+37368447788",
+            "+37369000101",
+            "+37367568910",
+            "+37376758294",
+            "+37378457892",
+            "+37379067436",
+            "37362387563",
+            "37368447788",
+            "37369000101",
+            "37367568910",
+          ],
+          invalid: [
+            "",
+            "+37363373381",
+            "+37364310581",
+            "+37365578199",
+            "+37371088636",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "123456",
+            "740123456",
+            "+40640123456",
+            "+40210123456",
+          ],
+        },
+        {
+          locale: "ro-RO",
+          valid: [
+            "+40740123456",
+            "+40 740123456",
+            "+40740 123 456",
+            "+40740.123.456",
+            "+40740-123-456",
+            "40740123456",
+            "40 740123456",
+            "40740 123 456",
+            "40740.123.456",
+            "40740-123-456",
+            "0740123456",
+            "0740/123456",
+            "0740 123 456",
+            "0740.123.456",
+            "0740-123-456",
+          ],
+          invalid: [
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "123456",
+            "740123456",
+            "+40640123456",
+            "+40210123456",
+            "+0765351689",
+            "+0711419752",
+          ],
+        },
+        {
+          locale: "id-ID",
+          valid: [
+            "0811 778 998",
+            "0811 7785 9983",
+            "0812 7784 9984",
+            "0813 7782 9982",
+            "0821 1234 1234",
+            "0822 1234 1234",
+            "0823 1234 1234",
+            "0852 1234 6764",
+            "0853 1234 6764",
+            "0851 1234 6764",
+            "0814 7782 9982",
+            "0815 7782 9982",
+            "0816 7782 9982",
+            "0855 7782 9982",
+            "0856 7782 9982",
+            "0857 7782 9982",
+            "0858 7782 9982",
+            "0817 7785 9983",
+            "0818 7784 9984",
+            "0819 7782 9982",
+            "0859 1234 1234",
+            "0877 1234 1234",
+            "0878 1234 1234",
+            "0895 7785 9983",
+            "0896 7784 9984",
+            "0897 7782 9982",
+            "0898 1234 1234",
+            "0899 1234 1234",
+            "0881 7785 9983",
+            "0882 7784 9984",
+            "0883 7782 9982",
+            "0884 1234 1234",
+            "0886 1234 1234",
+            "0887 1234 1234",
+            "0888 7785 9983",
+            "0889 7784 9984",
+            "0828 7784 9984",
+            "0838 7784 9984",
+            "0831 7784 9984",
+            "0832 7784 9984",
+            "0833 7784 9984",
+            "089931236181900",
+            "62811 778 998",
+            "62811778998",
+            "628993123618190",
+            "62898 740123456",
+            "62899 7401 2346",
+            "+62811 778 998",
+            "+62811778998",
+            "+62812 9650 3508",
+            "08197231819",
+            "085361008008",
+            "+62811787391",
+          ],
+          invalid: [
+            "0899312361819001",
+            "0217123456",
+            "622178878890",
+            "6221 740123456",
+            "0341 8123456",
+            "0778 89800910",
+            "0741 123456",
+            "+6221740123456",
+            "+65740 123 456",
+            "",
+            "ASDFGJKLmZXJtZtesting123",
+            "123456",
+            "740123456",
+            "+65640123456",
+            "+64210123456",
+          ],
+        },
+        {
+          locale: "lt-LT",
+          valid: ["+37051234567", "851234567"],
+          invalid: [
+            "+65740 123 456",
+            "",
+            "ASDFGJKLmZXJtZtesting123",
+            "123456",
+            "740123456",
+            "+65640123456",
+            "+64210123456",
+          ],
+        },
+        {
+          locale: "uk-UA",
+          valid: [
+            "+380501234567",
+            "+380631234567",
+            "+380661234567",
+            "+380671234567",
+            "+380681234567",
+            "+380731234567",
+            "+380751234567",
+            "+380771234567",
+            "+380911234567",
+            "+380921234567",
+            "+380931234567",
+            "+380941234567",
+            "+380951234567",
+            "+380961234567",
+            "+380971234567",
+            "+380981234567",
+            "+380991234567",
+            "380501234567",
+            "380631234567",
+            "380661234567",
+            "380671234567",
+            "380681234567",
+            "380731234567",
+            "380751234567",
+            "380771234567",
+            "380911234567",
+            "380921234567",
+            "380931234567",
+            "380941234567",
+            "380951234567",
+            "380961234567",
+            "380971234567",
+            "380981234567",
+            "380991234567",
+            "0501234567",
+            "0631234567",
+            "0661234567",
+            "0671234567",
+            "0681234567",
+            "0731234567",
+            "0751234567",
+            "0771234567",
+            "0911234567",
+            "0921234567",
+            "0931234567",
+            "0941234567",
+            "0951234567",
+            "0961234567",
+            "0971234567",
+            "0981234567",
+            "0991234567",
+          ],
+          invalid: [
+            "+30982345679",
+            "+380321234567",
+            "+380441234567",
+            "982345679",
+            "80982345679",
+            "+380 98 234 5679",
+            "+380-98-234-5679",
+            "+380 (98) 234-56-79",
+            "",
+            "ASDFGJKLmZXJtZtesting123",
+            "123456",
+            "740123456",
+          ],
+        },
+        {
+          locale: "uz-UZ",
+          valid: [
+            "+998664835244",
+            "998664835244",
+            "664835244",
+            "+998957124555",
+            "998957124555",
+            "957124555",
+          ],
+          invalid: [
+            "+998644835244",
+            "998644835244",
+            "644835244",
+            "+99664835244",
+            "ASDFGJKLmZXJtZtesting123",
+            "123456789",
+            "870123456",
+            "",
+            "+998",
+            "998",
+          ],
+        },
+        {
+          locale: "da-DK",
+          valid: [
+            "12345678",
+            "12 34 56 78",
+            "45 12345678",
+            "4512345678",
+            "45 12 34 56 78",
+            "+45 12 34 56 78",
+          ],
+          invalid: [
+            "",
+            "+45010203",
+            "ASDFGJKLmZXJtZtesting123",
+            "123456",
+            "12 34 56",
+            "123 123 12",
+          ],
+        },
+        {
+          locale: "sv-SE",
+          valid: [
+            "+46701234567",
+            "46701234567",
+            "0721234567",
+            "073-1234567",
+            "0761-234567",
+            "079-123 45 67",
+          ],
+          invalid: [
+            "12345",
+            "+4670123456",
+            "+46301234567",
+            "+0731234567",
+            "0731234 56",
+            "+7312345678",
+            "",
+          ],
+        },
+        {
+          locale: "fo-FO",
+          valid: [
+            "123456",
+            "12 34 56",
+            "298 123456",
+            "298123456",
+            "298 12 34 56",
+            "+298 12 34 56",
+          ],
+          invalid: [
+            "",
+            "+4501020304",
+            "ASDFGJKLmZXJtZtesting123",
+            "12345678",
+            "12 34 56 78",
+          ],
+        },
+        {
+          locale: "kl-GL",
+          valid: [
+            "123456",
+            "12 34 56",
+            "299 123456",
+            "299123456",
+            "299 12 34 56",
+            "+299 12 34 56",
+          ],
+          invalid: [
+            "",
+            "+4501020304",
+            "ASDFGJKLmZXJtZtesting123",
+            "12345678",
+            "12 34 56 78",
+          ],
+        },
+        {
+          locale: "kk-KZ",
+          valid: ["+77254716212", "77254716212", "87254716212", "7254716212"],
+          invalid: [
+            "12345",
+            "",
+            "ASDFGJKLmZXJtZtesting123",
+            "010-38238383",
+            "+9676338855",
+            "19676338855",
+            "6676338855",
+            "+99676338855",
+          ],
+        },
+        {
+          locale: "be-BY",
+          valid: [
+            "+375241234567",
+            "+375251234567",
+            "+375291234567",
+            "+375331234567",
+            "+375441234567",
+            "375331234567",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "ASDFGJKLmZXJtZtesting123",
+            "010-38238383",
+            "+9676338855",
+            "19676338855",
+            "6676338855",
+            "+99676338855",
+          ],
+        },
+        {
+          locale: "th-TH",
+          valid: ["0912345678", "+66912345678", "66912345678"],
+          invalid: ["99123456789", "12345", "67812345623", "081234567891"],
+        },
+        {
+          locale: "tk-TM",
+          valid: [
+            "+99312495154",
+            "99312130136",
+            "+99312918407",
+            "99312183399",
+            "812391717",
+          ],
+          invalid: ["12345", "+99412495154", "99412495154", "998900066506"],
+        },
+        {
+          locale: "en-SL",
+          valid: ["+23274560591", "23274560591", "074560591"],
+          invalid: [
+            "0745605912",
+            "12345",
+            "232745605917",
+            "0797878674",
+            "23274560591 ",
+          ],
+        },
+        {
+          locale: "en-BW",
+          valid: [
+            "+26772868545",
+            "+26776368790",
+            "+26774560512",
+            "26774560591",
+            "26778560512",
+            "74560512",
+            "76710284",
+          ],
+          invalid: [
+            "0799375902",
+            "12345",
+            "+2670745605448",
+            "2670745605482",
+            "+26779685451",
+            "+26770685451",
+            "267074560",
+            "2670ab5608",
+            "+267074560",
+            "70560512",
+            "79710284",
+          ],
+        },
+        {
+          locale: "az-AZ",
+          valid: [
+            "+994707007070",
+            "0707007070",
+            "+994502111111",
+            "0505436743",
+            "0554328772",
+            "0104328772",
+            "0993301022",
+            "+994776007139",
+            "+994106007139",
+          ],
+          invalid: [
+            "wrong-number",
+            "",
+            "994707007070",
+            "++9945005050",
+            "556007070",
+            "1234566",
+            "+994778008080a",
+          ],
+        },
+        {
+          locale: "de-LU",
+          valid: ["601123456", "+352601123456"],
+          invalid: [
+            "NaN",
+            "791234",
+            "+352791234",
+            "26791234",
+            "+35226791234",
+            "+112039812",
+            "+352703123456",
+            "1234",
+          ],
+        },
+        {
+          locale: "it-SM",
+          valid: [
+            "612345",
+            "05496123456",
+            "+37861234567",
+            "+390549612345678",
+            "+37805496123456789",
+          ],
+          invalid: [
+            "61234567890",
+            "6123",
+            "1234567",
+            "+49123456",
+            "NotANumber",
+          ],
+        },
+        {
+          locale: "so-SO",
+          valid: [
+            "+252601234567",
+            "+252650101010",
+            "+252794567120",
+            "252650647388",
+            "252751234567",
+            "0601234567",
+            "0609876543",
+          ],
+          invalid: [
+            "",
+            "not a number",
+            "+2526012345678",
+            "25260123456",
+            "+252705555555",
+            "+0601234567",
+            "06945454545",
+          ],
+        },
+        {
+          locale: "sq-AL",
+          valid: [
+            "0621234567",
+            "0661234567",
+            "0671234567",
+            "0681234567",
+            "0691234567",
+            "+355621234567",
+            "+355651234567",
+            "+355661234567",
+            "+355671234567",
+            "+355681234567",
+            "+355691234567",
+          ],
+          invalid: [
+            "67123456",
+            "06712345",
+            "067123456",
+            "06712345678",
+            "0571234567",
+            "+3556712345",
+            "+35565123456",
+            "+35157123456",
+            "NotANumber",
+          ],
+        },
+        {
+          locale: "ca-AD",
+          valid: ["+376312345", "312345"],
+          invalid: ["31234", "31234567", "512345", "NotANumber"],
+        },
+        {
+          locale: "pt-AO",
+          valid: ["+244911123432", "911123432", "244911123432"],
+          invalid: [
+            "+2449111234321",
+            "+244811123432",
+            "31234",
+            "31234567",
+            "512345",
+            "NotANumber",
+          ],
+        },
+        {
+          locale: "lv-LV",
+          valid: ["+37121234567", "37121234567"],
+          invalid: [
+            "+37201234567",
+            "+3754321",
+            "3712123456",
+            "+371212345678",
+            "NotANumber",
+          ],
+        },
+        {
+          locale: "mg-MG",
+          valid: [
+            "+261204269174",
+            "261204269174",
+            "0204269174",
+            "0209269174",
+            "0374269174",
+            "4269174",
+          ],
+          invalid: [
+            "0261204269174",
+            "+261 20 4 269174",
+            "+261 20 4269174",
+            "020 4269174",
+            "204269174",
+            "0404269174",
+            "NotANumber",
+          ],
+        },
+        {
+          locale: "mn-MN",
+          valid: [
+            "+97699112222",
+            "97696112222",
+            "97695112222",
+            "01197691112222",
+            "0097688112222",
+            "+97677112222",
+            "+97694112222",
+            "+97681112222",
+          ],
+          invalid: [
+            "+97888112222",
+            "+97977112222",
+            "+97094112222",
+            "+97281112222",
+            "02297681112222",
+          ],
+        },
+        {
+          locale: "my-MM",
+          valid: [
+            "+959750202595",
+            "09750202595",
+            "9750202595",
+            "+959260000966",
+            "09256000323",
+            "09276000323",
+            "09426000323",
+            "09456000323",
+            "09761234567",
+            "09791234567",
+            "09961234567",
+            "09771234567",
+            "09660000234",
+          ],
+          invalid: [
+            "59750202595",
+            "+9597502025",
+            "08943234524",
+            "09950000966",
+            "959240000966",
+            "09246000323",
+            "09466000323",
+            "09951234567",
+            "09801234567",
+            "09650000234",
+          ],
+        },
+        {
+          locale: "en-PG",
+          valid: [
+            "+67570123456",
+            "67570123456",
+            "+67571123456",
+            "+67572123456",
+            "+67573123456",
+            "+67574123456",
+            "+67575123456",
+            "+67576123456",
+            "+67577123456",
+            "+67578123456",
+            "+67579123456",
+            "+67581123456",
+            "+67588123456",
+          ],
+          invalid: [
+            "",
+            "not a number",
+            "12345",
+            "+675123456789",
+            "+67580123456",
+            "+67569123456",
+            "+67582123456",
+            "+6757012345",
+          ],
+        },
+        {
+          locale: "en-AG",
+          valid: [
+            "12687151234",
+            "+12687151234",
+            "+12684641234",
+            "12684641234",
+            "+12687211234",
+            "+12687302468",
+            "+12687642456",
+            "+12687763333",
+          ],
+          invalid: [
+            "2687151234",
+            "+12687773333",
+            "+126846412333",
+            "+12684641",
+            "+12687123456",
+            "+12687633456",
+          ],
+        },
+        {
+          locale: "en-AI",
+          valid: [
+            "+12642351234",
+            "12642351234",
+            "+12644612222",
+            "+12645366326",
+            "+12645376326",
+            "+12647246326",
+            "+12647726326",
+          ],
+          invalid: [
+            "",
+            "not a number",
+            "+22642351234",
+            "+12902351234",
+            "+12642331234",
+            "+1264235",
+            "22642353456",
+            "+12352643456",
+          ],
+        },
+        {
+          locale: "en-KN",
+          valid: [
+            "+18694699040",
+            "18694699040",
+            "+18697652917",
+            "18697652917",
+            "18694658472",
+            "+18696622969",
+            "+18694882224",
+          ],
+          invalid: [
+            "",
+            "+18694238545",
+            "+1 8694882224",
+            "8694658472",
+            "+186946990",
+            "+1869469904",
+            "1869469904",
+          ],
+        },
+        {
+          locale: "en-PK",
+          valid: [
+            "+923412877421",
+            "+923001234567",
+            "00923001234567",
+            "923001234567",
+            "03001234567",
+          ],
+          invalid: [
+            "+3001234567",
+            "+933001234567",
+            "+924001234567",
+            "+92300123456720",
+            "030012345672",
+            "30012345673",
+            "0030012345673",
+            "3001234567",
+          ],
+        },
+        {
+          locale: ["tg-TJ"],
+          valid: [
+            "+992553388551",
+            "+992553322551",
+            "992553388551",
+            "992553322551",
+          ],
+          invalid: [
+            "12345",
+            "",
+            "Vml2YW11cyBmZXJtZtesting123",
+            "+995563388559",
+            "+9955633559",
+            "19676338855",
+            "+992263388505",
+            "9923633885",
+            "99255363885",
+            "66338855",
+          ],
+        },
+        {
+          locale: "dv-MV",
+          valid: [
+            "+9609112345",
+            "+9609958973",
+            "+9607258963",
+            "+9607958463",
+            "9609112345",
+            "9609958973",
+            "9607212963",
+            "9607986963",
+            "9112345",
+            "9958973",
+            "7258963",
+            "7958963",
+          ],
+          invalid: [
+            "+96059234567",
+            "+96045789",
+            "7812463784",
+            "NotANumber",
+            "+9607112345",
+            "+9609012345",
+            "+609012345",
+            "+96071123456",
+            "3412345",
+            "9603412345",
+          ],
+        },
+        {
+          locale: "ar-YE",
+          valid: ["737198225", "733111355", "+967700990270"],
+          invalid: [
+            "+5032136663",
+            "21346663",
+            "+50321366663",
+            "12345",
+            "Yemen",
+            "this should fail",
+            "+5032222",
+            "+503 1111 1111",
+            "00 +503 1234 5678",
+          ],
+        },
+        {
+          locale: "ar-EH",
+          valid: [
+            "+212-5288-12312",
+            "+212-5288 12312",
+            "+212 5288 12312",
+            "212528912312",
+            "+212528912312",
+            "+212528812312",
+          ],
+          invalid: [
+            "212528812312123",
+            "+212-5290-12312",
+            "++212528812312",
+            "12345",
+            "Wester Sahara",
+            "this should fail",
+            "212  5288---12312",
+            "+503 1111 1111",
+            "00 +503 1234 5678",
+          ],
+        },
+        {
+          locale: "fa-AF",
+          valid: ["0511231231", "+93511231231", "+93281234567"],
+          invalid: [
+            "212528812312123",
+            "+212-5290-12312",
+            "++212528812312",
+            "12345",
+            "Afghanistan",
+            "this should fail",
+            "212  5288---12312",
+            "+503 1111 1111",
+            "00 +503 1234 5678",
+          ],
+        },
+        {
+          locale: "en-SS",
+          valid: [
+            "+211928530422",
+            "+211913384561",
+            "+211972879174",
+            "+211952379334",
+            "0923346543",
+            "0950459022",
+            "0970934567",
+            "211979841238",
+            "211929843238",
+            "211959840238",
+          ],
+          invalid: [
+            "911",
+            "+211999",
+            "123456789909",
+            "South Sudan",
+            "21195 840 238",
+            "+211981234567",
+            "+211931234567",
+            "+211901234567",
+            "+211991234567",
+          ],
+        },
+        {
+          locale: "es-GT",
+          valid: [
+            "+50221234567",
+            "+50277654321",
+            "50226753421",
+            "50272332468",
+            "50278984455",
+            "+50273472492",
+            "71234567",
+            "21132398",
+          ],
+          invalid: [
+            "44",
+            "+5022712345678",
+            "1234567899",
+            "502712345678",
+            "This should fail",
+            "5021931234567",
+            "+50281234567",
+          ],
+        },
+        {
+          locale: "mk-MK",
+          valid: [
+            "+38923234567",
+            "38931234567",
+            "022123456",
+            "22234567",
+            "71234567",
+            "31234567",
+            "+38923091500",
+            "80091234",
+            "81123456",
+            "54123456",
+          ],
+          invalid: [
+            "38912345678",
+            "+389123456789",
+            "21234567",
+            "123456789",
+            "+3891234567",
+            "700012345",
+            "510123456",
+            "This should fail",
+            "+389123456",
+            "389123456",
+            "80912345",
+          ],
+        },
+      ];
+
+      let allValid = [];
+
+      fixtures.forEach((fixture) => {
+        // to be used later on for validating 'any' locale
+        if (fixture.valid) allValid = allValid.concat(fixture.valid);
+
+        if (Array.isArray(fixture.locale)) {
+          test({
+            validator: "isMobilePhone",
+            valid: fixture.valid,
+            invalid: fixture.invalid,
+            args: [fixture.locale],
+          });
+        } else {
+          test({
+            validator: "isMobilePhone",
+            valid: fixture.valid,
+            invalid: fixture.invalid,
+            args: [fixture.locale],
+          });
+        }
+      });
+
+      test({
+        validator: "isMobilePhone",
+        valid: allValid.slice(0, 20),
+        invalid: [
+          "",
+          "asdf",
+          "1",
+          "ASDFGJKLmZXJtZtesting123",
+          "Vml2YW11cyBmZXJtZtesting123",
+        ],
+        args: ["any"],
+      });
+
+      // strict mode
+      test({
+        validator: "isMobilePhone",
+        valid: ["+254728530234", "+299 12 34 56", "+94766660206"],
+        invalid: [
+          "254728530234",
+          "0728530234",
+          "+728530234",
+          "766667206",
+          "0766670206",
+        ],
+        args: ["any", { strictMode: true }],
+      });
+
+      // falsey locale defaults to 'any'
+      test({
+        validator: "isMobilePhone",
+        valid: allValid.slice(0, 20),
+        invalid: [
+          "",
+          "asdf",
+          "1",
+          "ASDFGJKLmZXJtZtesting123",
+          "Vml2YW11cyBmZXJtZtesting123",
+        ],
+        args: [],
+      });
+    });
+
+    // de-CH, fr-CH, it-CH
+    test({
+      validator: "isMobilePhone",
+      valid: [
+        "+41751112233",
+        "+41761112233",
+        "+41771112233",
+        "+41781112233",
+        "+41791112233",
+        "+411122112211",
+      ],
+      invalid: ["+41041112233"],
+      args: [],
+    });
+
+    it("should error on invalid locale", () => {
+      test({
+        validator: "isMobilePhone",
+        args: [{ locale: ["is-NOT"] }],
+        error: ["+123456789", "012345"],
+      });
+    });
+
+    it("should validate currency", () => {
+      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)
+      test({
+        validator: "isCurrency",
+        valid: [
+          "-$10,123.45",
+          "$10,123.45",
+          "$10123.45",
+          "10,123.45",
+          "10123.45",
+          "10,123",
+          "1,123,456",
+          "1123456",
+          "1.39",
+          ".03",
+          "0.10",
+          "$0.10",
+          "-$0.01",
+          "-$.99",
+          "$100,234,567.89",
+          "$10,123",
+          "10,123",
+          "-10123",
+        ],
+        invalid: [
+          "1.234",
+          "$1.1",
+          "$ 32.50",
+          "500$",
+          ".0001",
+          "$.001",
+          "$0.001",
+          "12,34.56",
+          "123456,123,123456",
+          "123,4",
+          ",123",
+          "$-,123",
+          "$",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "- $",
+        ],
+      });
+
+      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            allow_decimal: false,
+          },
+        ],
+        valid: [
+          "-$10,123",
+          "$10,123",
+          "$10123",
+          "10,123",
+          "10123",
+          "10,123",
+          "1,123,456",
+          "1123456",
+          "1",
+          "0",
+          "$0",
+          "-$0",
+          "$100,234,567",
+          "$10,123",
+          "10,123",
+          "-10123",
+        ],
+        invalid: [
+          "-$10,123.45",
+          "$10,123.45",
+          "$10123.45",
+          "10,123.45",
+          "10123.45",
+          "1.39",
+          ".03",
+          "0.10",
+          "$0.10",
+          "-$0.01",
+          "-$.99",
+          "$100,234,567.89",
+          "1.234",
+          "$1.1",
+          "$ 32.50",
+          ".0001",
+          "$.001",
+          "$0.001",
+          "12,34.56",
+          "123,4",
+          ",123",
+          "$-,123",
+          "$",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "- $",
+        ],
+      });
+
+      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            require_decimal: true,
+          },
+        ],
+        valid: [
+          "-$10,123.45",
+          "$10,123.45",
+          "$10123.45",
+          "10,123.45",
+          "10123.45",
+          "10,123.00",
+          "1.39",
+          ".03",
+          "0.10",
+          "$0.10",
+          "-$0.01",
+          "-$.99",
+          "$100,234,567.89",
+        ],
+        invalid: [
+          "$10,123",
+          "10,123",
+          "-10123",
+          "1,123,456",
+          "1123456",
+          "1.234",
+          "$1.1",
+          "$ 32.50",
+          "500$",
+          ".0001",
+          "$.001",
+          "$0.001",
+          "12,34.56",
+          "123456,123,123456",
+          "123,4",
+          ",123",
+          "$-,123",
+          "$",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "- $",
+        ],
+      });
+
+      // -$##,###.## (en-US, en-CA, en-AU, en-NZ, en-HK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            digits_after_decimal: [1, 3],
+          },
+        ],
+        valid: [
+          "-$10,123.4",
+          "$10,123.454",
+          "$10123.452",
+          "10,123.453",
+          "10123.450",
+          "10,123",
+          "1,123,456",
+          "1123456",
+          "1.3",
+          ".030",
+          "0.100",
+          "$0.1",
+          "-$0.0",
+          "-$.9",
+          "$100,234,567.893",
+          "$10,123",
+          "10,123.123",
+          "-10123.1",
+        ],
+        invalid: [
+          "1.23",
+          "$1.13322",
+          "$ 32.50",
+          "500$",
+          ".0001",
+          "$.01",
+          "$0.01",
+          "12,34.56",
+          "123456,123,123456",
+          "123,4",
+          ",123",
+          "$-,123",
+          "$",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "- $",
+        ],
+      });
+
+      // -$##,###.## with $ required (en-US, en-CA, en-AU, en-NZ, en-HK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            require_symbol: true,
+          },
+        ],
+        valid: [
+          "-$10,123.45",
+          "$10,123.45",
+          "$10123.45",
+          "$10,123.45",
+          "$10,123",
+          "$1,123,456",
+          "$1123456",
+          "$1.39",
+          "$.03",
+          "$0.10",
+          "$0.10",
+          "-$0.01",
+          "-$.99",
+          "$100,234,567.89",
+          "$10,123",
+          "-$10123",
+        ],
+        invalid: [
+          "1.234",
+          "$1.234",
+          "1.1",
+          "$1.1",
+          "$ 32.50",
+          " 32.50",
+          "500",
+          "10,123,456",
+          ".0001",
+          "$.001",
+          "$0.001",
+          "1,234.56",
+          "123456,123,123456",
+          "$123456,123,123456",
+          "123.4",
+          "$123.4",
+          ",123",
+          "$,123",
+          "$-,123",
+          "$",
+          ".",
+          "$.",
+          ",",
+          "$,",
+          "00",
+          "$00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "$ ",
+          "- $",
+        ],
+      });
+
+      // ¥-##,###.## (zh-CN)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "¥",
+            negative_sign_before_digits: true,
+          },
+        ],
+        valid: [
+          "123,456.78",
+          "-123,456.78",
+          "¥6,954,231",
+          "¥-6,954,231",
+          "¥10.03",
+          "¥-10.03",
+          "10.03",
+          "1.39",
+          ".03",
+          "0.10",
+          "¥-10567.01",
+          "¥0.01",
+          "¥1,234,567.89",
+          "¥10,123",
+          "¥-10,123",
+          "¥-10,123.45",
+          "10,123",
+          "10123",
+          "¥-100",
+        ],
+        invalid: [
+          "1.234",
+          "¥1.1",
+          "5,00",
+          ".0001",
+          "¥.001",
+          "¥0.001",
+          "12,34.56",
+          "123456,123,123456",
+          "123 456",
+          ",123",
+          "¥-,123",
+          "",
+          " ",
+          "¥",
+          "¥-",
+          "¥-,.",
+          "-",
+          "- ¥",
+          "-¥",
+        ],
+      });
+
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            negative_sign_after_digits: true,
+          },
+        ],
+        valid: [
+          "$10,123.45-",
+          "$10,123.45",
+          "$10123.45",
+          "10,123.45",
+          "10123.45",
+          "10,123",
+          "1,123,456",
+          "1123456",
+          "1.39",
+          ".03",
+          "0.10",
+          "$0.10",
+          "$0.01-",
+          "$.99-",
+          "$100,234,567.89",
+          "$10,123",
+          "10,123",
+          "10123-",
+        ],
+        invalid: [
+          "-123",
+          "1.234",
+          "$1.1",
+          "$ 32.50",
+          "500$",
+          ".0001",
+          "$.001",
+          "$0.001",
+          "12,34.56",
+          "123456,123,123456",
+          "123,4",
+          ",123",
+          "$-,123",
+          "$",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "- $",
+        ],
+      });
+
+      // ¥##,###.## with no negatives (zh-CN)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "¥",
+            allow_negatives: false,
+          },
+        ],
+        valid: [
+          "123,456.78",
+          "¥6,954,231",
+          "¥10.03",
+          "10.03",
+          "1.39",
+          ".03",
+          "0.10",
+          "¥0.01",
+          "¥1,234,567.89",
+          "¥10,123",
+          "10,123",
+          "10123",
+          "¥100",
+        ],
+        invalid: [
+          "1.234",
+          "-123,456.78",
+          "¥-6,954,231",
+          "¥-10.03",
+          "¥-10567.01",
+          "¥1.1",
+          "¥-10,123",
+          "¥-10,123.45",
+          "5,00",
+          "¥-100",
+          ".0001",
+          "¥.001",
+          "¥-.001",
+          "¥0.001",
+          "12,34.56",
+          "123456,123,123456",
+          "123 456",
+          ",123",
+          "¥-,123",
+          "",
+          " ",
+          "¥",
+          "¥-",
+          "¥-,.",
+          "-",
+          "- ¥",
+          "-¥",
+        ],
+      });
+
+      // R ## ###,## and R-10 123,25 (el-ZA)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "R",
+            negative_sign_before_digits: true,
+            thousands_separator: " ",
+            decimal_separator: ",",
+            allow_negative_sign_placeholder: true,
+          },
+        ],
+        valid: [
+          "123 456,78",
+          "-10 123",
+          "R-10 123",
+          "R 6 954 231",
+          "R10,03",
+          "10,03",
+          "1,39",
+          ",03",
+          "0,10",
+          "R10567,01",
+          "R0,01",
+          "R1 234 567,89",
+          "R10 123",
+          "R 10 123",
+          "R 10123",
+          "R-10123",
+          "10 123",
+          "10123",
+        ],
+        invalid: [
+          "1,234",
+          "R -10123",
+          "R- 10123",
+          "R,1",
+          ",0001",
+          "R,001",
+          "R0,001",
+          "12 34,56",
+          "123456 123 123456",
+          " 123",
+          "- 123",
+          "123 ",
+          "",
+          " ",
+          "R",
+          "R- .1",
+          "R-",
+          "-",
+          "-R 10123",
+          "R00",
+          "R -",
+          "-R",
+        ],
+      });
+
+      // -€ ##.###,## (it-IT)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "€",
+            thousands_separator: ".",
+            decimal_separator: ",",
+            allow_space_after_symbol: true,
+          },
+        ],
+        valid: [
+          "123.456,78",
+          "-123.456,78",
+          "€6.954.231",
+          "-€6.954.231",
+          "€ 896.954.231",
+          "-€ 896.954.231",
+          "16.954.231",
+          "-16.954.231",
+          "€10,03",
+          "-€10,03",
+          "10,03",
+          "-10,03",
+          "-1,39",
+          ",03",
+          "0,10",
+          "-€10567,01",
+          "-€ 10567,01",
+          "€ 0,01",
+          "€1.234.567,89",
+          "€10.123",
+          "10.123",
+          "-€10.123",
+          "€ 10.123",
+          "€10.123",
+          "€ 10123",
+          "10.123",
+          "-10123",
+        ],
+        invalid: [
+          "1,234",
+          "€ 1,1",
+          "50#,50",
+          "123,@€ ",
+          "€€500",
+          ",0001",
+          "€ ,001",
+          "€0,001",
+          "12.34,56",
+          "123456.123.123456",
+          "€123€",
+          "",
+          " ",
+          "€",
+          " €",
+          "€ ",
+          "€€",
+          " 123",
+          "- 123",
+          ".123",
+          "-€.123",
+          "123 ",
+          "€-",
+          "- €",
+          "€ - ",
+          "-",
+          "- ",
+          "-€",
+        ],
+      });
+
+      // -##.###,## € (el-GR)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "€",
+            thousands_separator: ".",
+            symbol_after_digits: true,
+            decimal_separator: ",",
+            allow_space_after_digits: true,
+          },
+        ],
+        valid: [
+          "123.456,78",
+          "-123.456,78",
+          "6.954.231 €",
+          "-6.954.231 €",
+          "896.954.231",
+          "-896.954.231",
+          "16.954.231",
+          "-16.954.231",
+          "10,03€",
+          "-10,03€",
+          "10,03",
+          "-10,03",
+          "1,39",
+          ",03",
+          "-,03",
+          "-,03 €",
+          "-,03€",
+          "0,10",
+          "10567,01€",
+          "0,01 €",
+          "1.234.567,89€",
+          "10.123€",
+          "10.123",
+          "10.123€",
+          "10.123 €",
+          "10123 €",
+          "10.123",
+          "10123",
+        ],
+        invalid: [
+          "1,234",
+          "1,1 €",
+          ",0001",
+          ",001 €",
+          "0,001€",
+          "12.34,56",
+          "123456.123.123456",
+          "€123€",
+          "",
+          " ",
+          "€",
+          " €",
+          "€ ",
+          " 123",
+          "- 123",
+          ".123",
+          "-.123€",
+          "-.123 €",
+          "123 ",
+          "-€",
+          "- €",
+          "-",
+          "- ",
+        ],
+      });
+
+      // kr. -##.###,## (da-DK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "kr.",
+            negative_sign_before_digits: true,
+            thousands_separator: ".",
+            decimal_separator: ",",
+            allow_space_after_symbol: true,
+          },
+        ],
+        valid: [
+          "123.456,78",
+          "-10.123",
+          "kr. -10.123",
+          "kr.-10.123",
+          "kr. 6.954.231",
+          "kr.10,03",
+          "kr. -10,03",
+          "10,03",
+          "1,39",
+          ",03",
+          "0,10",
+          "kr. 10567,01",
+          "kr. 0,01",
+          "kr. 1.234.567,89",
+          "kr. -1.234.567,89",
+          "10.123",
+          "kr. 10.123",
+          "kr.10.123",
+          "10123",
+          "10.123",
+          "kr.-10123",
+        ],
+        invalid: [
+          "1,234",
+          "kr.  -10123",
+          "kr.,1",
+          ",0001",
+          "kr. ,001",
+          "kr.0,001",
+          "12.34,56",
+          "123456.123.123456",
+          ".123",
+          "kr.-.123",
+          "kr. -.123",
+          "- 123",
+          "123 ",
+          "",
+          " ",
+          "kr.",
+          " kr.",
+          "kr. ",
+          "kr.-",
+          "kr. -",
+          "kr. - ",
+          " - ",
+          "-",
+          "- kr.",
+          "-kr.",
+        ],
+      });
+
+      // kr. ##.###,## with no negatives (da-DK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "kr.",
+            allow_negatives: false,
+            negative_sign_before_digits: true,
+            thousands_separator: ".",
+            decimal_separator: ",",
+            allow_space_after_symbol: true,
+          },
+        ],
+        valid: [
+          "123.456,78",
+          "10.123",
+          "kr. 10.123",
+          "kr.10.123",
+          "kr. 6.954.231",
+          "kr.10,03",
+          "kr. 10,03",
+          "10,03",
+          "1,39",
+          ",03",
+          "0,10",
+          "kr. 10567,01",
+          "kr. 0,01",
+          "kr. 1.234.567,89",
+          "kr.1.234.567,89",
+          "10.123",
+          "kr. 10.123",
+          "kr.10.123",
+          "10123",
+          "10.123",
+          "kr.10123",
+        ],
+        invalid: [
+          "1,234",
+          "-10.123",
+          "kr. -10.123",
+          "kr. -1.234.567,89",
+          "kr.-10123",
+          "kr.  -10123",
+          "kr.-10.123",
+          "kr. -10,03",
+          "kr.,1",
+          ",0001",
+          "kr. ,001",
+          "kr.0,001",
+          "12.34,56",
+          "123456.123.123456",
+          ".123",
+          "kr.-.123",
+          "kr. -.123",
+          "- 123",
+          "123 ",
+          "",
+          " ",
+          "kr.",
+          " kr.",
+          "kr. ",
+          "kr.-",
+          "kr. -",
+          "kr. - ",
+          " - ",
+          "-",
+          "- kr.",
+          "-kr.",
+        ],
+      });
+
+      // ($##,###.##) (en-US, en-HK)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            parens_for_negatives: true,
+          },
+        ],
+        valid: [
+          "1,234",
+          "(1,234)",
+          "($6,954,231)",
+          "$10.03",
+          "(10.03)",
+          "($10.03)",
+          "1.39",
+          ".03",
+          "(.03)",
+          "($.03)",
+          "0.10",
+          "$10567.01",
+          "($0.01)",
+          "$1,234,567.89",
+          "$10,123",
+          "(10,123)",
+          "10123",
+        ],
+        invalid: [
+          "1.234",
+          "($1.1)",
+          "-$1.10",
+          "$ 32.50",
+          "500$",
+          ".0001",
+          "$.001",
+          "($0.001)",
+          "12,34.56",
+          "123456,123,123456",
+          "( 123)",
+          ",123",
+          "$-,123",
+          "",
+          " ",
+          "  ",
+          "   ",
+          "$",
+          "$ ",
+          " $",
+          " 123",
+          "(123) ",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$ - ",
+          "$- ",
+          " - ",
+          "-",
+          "- $",
+          "-$",
+          "()",
+          "( )",
+          "(  -)",
+          "(  - )",
+          "(  -  )",
+          "(-)",
+          "(-$)",
+        ],
+      });
+      // $##,###.## with no negatives (en-US, en-CA, en-AU, en-HK)
+      test({
+        validator: "isCurrency",
+        args: [{ allow_negatives: false }],
+        valid: [
+          "$10,123.45",
+          "$10123.45",
+          "10,123.45",
+          "10123.45",
+          "10,123",
+          "1,123,456",
+          "1123456",
+          "1.39",
+          ".03",
+          "0.10",
+          "$0.10",
+          "$100,234,567.89",
+          "$10,123",
+          "10,123",
+        ],
+        invalid: [
+          "1.234",
+          "-1.234",
+          "-10123",
+          "-$0.01",
+          "-$.99",
+          "$1.1",
+          "-$1.1",
+          "$ 32.50",
+          "500$",
+          ".0001",
+          "$.001",
+          "$0.001",
+          "12,34.56",
+          "123456,123,123456",
+          "-123456,123,123456",
+          "123,4",
+          ",123",
+          "$-,123",
+          "$",
+          ".",
+          ",",
+          "00",
+          "$-",
+          "$-,.",
+          "-",
+          "-$",
+          "",
+          "- $",
+          "-$10,123.45",
+        ],
+      });
+
+      //  R$ ##,###.## (pt_BR)
+      test({
+        validator: "isCurrency",
+        args: [
+          {
+            symbol: "R$",
+            require_symbol: true,
+            allow_space_after_symbol: true,
+            symbol_after_digits: false,
+            thousands_separator: ".",
+            decimal_separator: ",",
+          },
+        ],
+        valid: ["R$ 1.400,00", "R$ 400,00"],
+        invalid: ["$ 1.400,00", "$R 1.400,00"],
+      });
+    });
+
+    it("should validate Ethereum addresses", () => {
+      test({
+        validator: "isEthereumAddress",
+        valid: [
+          "0x0000000000000000000000000000000000000001",
+          "0x683E07492fBDfDA84457C16546ac3f433BFaa128",
+          "0x88dA6B6a8D3590e88E0FcadD5CEC56A7C9478319",
+          "0x8a718a84ee7B1621E63E680371e0C03C417cCaF6",
+          "0xFCb5AFB808b5679b4911230Aa41FfCD0cd335b42",
+        ],
+        invalid: [
+          "0xGHIJK05pwm37asdf5555QWERZCXV2345AoEuIdHt",
+          "0xFCb5AFB808b5679b4911230Aa41FfCD0cd335b422222",
+          "0xFCb5AFB808b5679b4911230Aa41FfCD0cd33",
+          "0b0110100001100101011011000110110001101111",
+          "683E07492fBDfDA84457C16546ac3f433BFaa128",
+          "1C6o5CDkLxjsVpnLSuqRs1UBFozXLEwYvU",
+        ],
+      });
+    });
+
+    it("should validate Bitcoin addresses", () => {
+      test({
+        validator: "isBtcAddress",
+        valid: [
+          "1MUz4VMYui5qY1mxUiG8BQ1Luv6tqkvaiL",
+          "mucFNhKMYoBQYUAEsrFVscQ1YaFQPekBpg",
+          "3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy",
+          "2NFUBBRcTJbYc1D4HSCbJhKZp6YCV4PQFpQ",
+          "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",
+          "14qViLJfdGaP4EeHnDyJbEGQysnCpwk3gd",
+          "35bSzXvRKLpHsHMrzb82f617cV4Srnt7hS",
+          "17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhemt",
+          "bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4",
+          "tb1qxhkl607frtvjsy9nlyeg03lf6fsq947pl2pe82",
+          "bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297",
+          "tb1pzpelffrdh9ptpaqnurwx30dlewqv57rcxfeetp86hsssk30p4cws38tr9y",
+        ],
+        invalid: [
+          "3J98t1WpEZ73CNmQviecrnyiWrnqh0WNL0",
+          "3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLo",
+          "3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLI",
+          "3J98t1WpEZ73CNmQviecrnyiWrnqh0WNLl",
+          "4J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy",
+          "0x56F0B8A998425c53c75C4A303D4eF987533c5597",
+          "pp8skudq3x5hzw8ew7vzsw8tn4k8wxsqsv0lt0mf3g",
+          "17VZNX1SN5NlKa8UQFxwQbFeFc3iqRYhem",
+          "BC1QW508D6QEJXTDG4Y5R3ZARVAYR0C5XW7KV8F3T4",
+          "bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3291",
+          "bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329b",
+          "bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329i",
+          "bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg329o",
+          "BC1P5D7RJQ7G6RDK2YHZKS9SMLAQTEDR4DEKQ08GE8ZTWAC72SFR9RUSXG3297",
+          "TB1PZPELFFRDH9PTPAQNURWX30DLEWQV57RCXFEETP86HSSSK30P4CWS38TR9Y",
+        ],
+      });
+    });
+
+    it("should validate booleans", () => {
+      test({
+        validator: "isBoolean",
+        valid: ["true", "false", "0", "1"],
+        invalid: ["1.0", "0.0", "true ", "False", "True", "yes"],
+      });
+    });
+
+    it("should validate booleans with option loose set to true", () => {
+      test({
+        validator: "isBoolean",
+        args: [{ loose: true }],
+        valid: [
+          "true",
+          "True",
+          "TRUE",
+          "false",
+          "False",
+          "FALSE",
+          "0",
+          "1",
+          "yes",
+          "Yes",
+          "YES",
+          "no",
+          "No",
+          "NO",
+        ],
+        invalid: ["1.0", "0.0", "true ", " false"],
+      });
+    });
+
+    it("should validate ISO 639-1 language codes", () => {
+      test({
+        validator: "isISO6391",
+        valid: ["ay", "az", "ba", "be", "bg"],
+        invalid: ["aj", "al", "pe", "pf", "abc", "123", ""],
+      });
+    });
+
+    const validISO8601 = [
+      "2009-12T12:34",
+      "2009",
+      "2009-05-19",
+      "2009-05-19",
+      "20090519",
+      "2009123",
+      "2009-05",
+      "2009-123",
+      "2009-222",
+      "2009-001",
+      "2009-W01-1",
+      "2009-W51-1",
+      "2009-W511",
+      "2009-W33",
+      "2009W511",
+      "2009-05-19",
+      "2009-05-19 00:00",
+      "2009-05-19 14",
+      "2009-05-19 14:31",
+      "2009-05-19 14:39:22",
+      "2009-05-19T14:39Z",
+      "2009-W21-2",
+      "2009-W21-2T01:22",
+      "2009-139",
+      "2009-05-19 14:39:22-06:00",
+      "2009-05-19 14:39:22+0600",
+      "2009-05-19 14:39:22-01",
+      "20090621T0545Z",
+      "2007-04-06T00:00",
+      "2007-04-05T24:00",
+      "2010-02-18T16:23:48.5",
+      "2010-02-18T16:23:48,444",
+      "2010-02-18T16:23:48,3-06:00",
+      "2010-02-18T16:23.4",
+      "2010-02-18T16:23,25",
+      "2010-02-18T16:23.33+0600",
+      "2010-02-18T16.23334444",
+      "2010-02-18T16,2283",
+      "2009-05-19 143922.500",
+      "2009-05-19 1439,55",
+      "2009-10-10",
+      "2020-366",
+      "2000-366",
+    ];
+
+    const invalidISO8601 = [
+      "200905",
+      "2009367",
+      "2009-",
+      "2007-04-05T24:50",
+      "2009-000",
+      "2009-M511",
+      "2009M511",
+      "2009-05-19T14a39r",
+      "2009-05-19T14:3924",
+      "2009-0519",
+      "2009-05-1914:39",
+      "2009-05-19 14:",
+      "2009-05-19r14:39",
+      "2009-05-19 14a39a22",
+      "200912-01",
+      "2009-05-19 14:39:22+06a00",
+      "2009-05-19 146922.500",
+      "2010-02-18T16.5:23.35:48",
+      "2010-02-18T16:23.35:48",
+      "2010-02-18T16:23.35:48.45",
+      "2009-05-19 14.5.44",
+      "2010-02-18T16:23.33.600",
+      "2010-02-18T16,25:23:48,444",
+      "2010-13-1",
+      "nonsense2021-01-01T00:00:00Z",
+      "2021-01-01T00:00:00Znonsense",
+    ];
+
+    it("should validate ISO 8601 dates", () => {
+      // from http://www.pelagodesign.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/
+      test({
+        validator: "isISO8601",
+        valid: validISO8601,
+        invalid: invalidISO8601,
+      });
+    });
+
+    it("should validate ISO 8601 dates, with strict = true (regression)", () => {
+      test({
+        validator: "isISO8601",
+        args: [{ strict: true }],
+        valid: validISO8601,
+        invalid: invalidISO8601,
+      });
+    });
+
+    it("should validate ISO 8601 dates, with strict = true", () => {
+      test({
+        validator: "isISO8601",
+        args: [{ strict: true }],
+        valid: ["2000-02-29", "2009-123", "2009-222", "2020-366", "2400-366"],
+        invalid: ["2010-02-30", "2009-02-29", "2009-366", "2019-02-31"],
+      });
+    });
+
+    it("should validate ISO 8601 dates, with strictSeparator = true", () => {
+      test({
+        validator: "isISO8601",
+        args: [{ strictSeparator: true }],
+        valid: [
+          "2009-12T12:34",
+          "2009",
+          "2009-05-19",
+          "2009-05-19",
+          "20090519",
+          "2009123",
+          "2009-05",
+          "2009-123",
+          "2009-222",
+          "2009-001",
+          "2009-W01-1",
+          "2009-W51-1",
+          "2009-W511",
+          "2009-W33",
+          "2009W511",
+          "2009-05-19",
+          "2009-05-19T14:39Z",
+          "2009-W21-2",
+          "2009-W21-2T01:22",
+          "2009-139",
+          "20090621T0545Z",
+          "2007-04-06T00:00",
+          "2007-04-05T24:00",
+          "2010-02-18T16:23:48.5",
+          "2010-02-18T16:23:48,444",
+          "2010-02-18T16:23:48,3-06:00",
+          "2010-02-18T16:23.4",
+          "2010-02-18T16:23,25",
+          "2010-02-18T16:23.33+0600",
+          "2010-02-18T16.23334444",
+          "2010-02-18T16,2283",
+          "2009-10-10",
+          "2020-366",
+          "2000-366",
+        ],
+        invalid: [
+          "200905",
+          "2009367",
+          "2009-",
+          "2007-04-05T24:50",
+          "2009-000",
+          "2009-M511",
+          "2009M511",
+          "2009-05-19T14a39r",
+          "2009-05-19T14:3924",
+          "2009-0519",
+          "2009-05-1914:39",
+          "2009-05-19 14:",
+          "2009-05-19r14:39",
+          "2009-05-19 14a39a22",
+          "200912-01",
+          "2009-05-19 14:39:22+06a00",
+          "2009-05-19 146922.500",
+          "2010-02-18T16.5:23.35:48",
+          "2010-02-18T16:23.35:48",
+          "2010-02-18T16:23.35:48.45",
+          "2009-05-19 14.5.44",
+          "2010-02-18T16:23.33.600",
+          "2010-02-18T16,25:23:48,444",
+          "2010-13-1",
+          "2009-05-19 00:00",
+          // Previously valid cases
+          "2009-05-19 14",
+          "2009-05-19 14:31",
+          "2009-05-19 14:39:22",
+          "2009-05-19 14:39:22-06:00",
+          "2009-05-19 14:39:22+0600",
+          "2009-05-19 14:39:22-01",
+        ],
+      });
+    });
+
+    it("should validate ISO 8601 dates, with strict = true and strictSeparator = true (regression)", () => {
+      test({
+        validator: "isISO8601",
+        args: [{ strict: true, strictSeparator: true }],
+        valid: ["2000-02-29", "2009-123", "2009-222", "2020-366", "2400-366"],
+        invalid: [
+          "2010-02-30",
+          "2009-02-29",
+          "2009-366",
+          "2019-02-31",
+          "2009-05-19 14",
+          "2009-05-19 14:31",
+          "2009-05-19 14:39:22",
+          "2009-05-19 14:39:22-06:00",
+          "2009-05-19 14:39:22+0600",
+          "2009-05-19 14:39:22-01",
+        ],
+      });
+    });
+
+    it("should validate ISO 15924 script codes", () => {
+      test({
+        validator: "isISO15924",
+        valid: ["Adlm", "Bass", "Copt", "Dsrt", "Egyd", "Latn", "Zzzz"],
+        invalid: ["", "arab", "zzzz", "Qaby", "Lati"],
+      });
+    });
+
+    it("should validate RFC 3339 dates", () => {
+      test({
+        validator: "isRFC3339",
+        valid: [
+          "2009-05-19 14:39:22-06:00",
+          "2009-05-19 14:39:22+06:00",
+          "2009-05-19 14:39:22Z",
+          "2009-05-19T14:39:22-06:00",
+          "2009-05-19T14:39:22Z",
+          "2010-02-18T16:23:48.3-06:00",
+          "2010-02-18t16:23:33+06:00",
+          "2010-02-18t16:23:33+06:00",
+          "2010-02-18t16:12:23.23334444z",
+          "2010-02-18T16:23:55.2283Z",
+          "2009-05-19 14:39:22.500Z",
+          "2009-05-19 14:39:55Z",
+          "2009-05-31 14:39:55Z",
+          "2009-05-31 14:53:60Z",
+          "2010-02-18t00:23:23.33+06:00",
+          "2010-02-18t00:23:32.33+00:00",
+          "2010-02-18t00:23:32.33+23:00",
+        ],
+        invalid: [
+          "2010-02-18t00:23:32.33+24:00",
+          "2009-05-31 14:60:55Z",
+          "2010-02-18t24:23.33+0600",
+          "2009-05-00 1439,55Z",
+          "2009-13-19 14:39:22-06:00",
+          "2009-05-00 14:39:22+0600",
+          "2009-00-1 14:39:22Z",
+          "2009-05-19T14:39:22",
+          "nonsense2021-01-01T00:00:00Z",
+          "2021-01-01T00:00:00Znonsense",
+        ],
+      });
+    });
+
+    it("should validate ISO 3166-1 alpha 2 country codes", () => {
+      // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
+      test({
+        validator: "isISO31661Alpha2",
+        valid: [
+          "FR",
+          "fR",
+          "GB",
+          "PT",
+          "CM",
+          "JP",
+          "PM",
+          "ZW",
+          "MM",
+          "cc",
+          "GG",
+        ],
+        invalid: ["", "FRA", "AA", "PI", "RP", "WV", "WL", "UK", "ZZ"],
+      });
+    });
+
+    it("should validate ISO 3166-1 alpha 3 country codes", () => {
+      // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3
+      test({
+        validator: "isISO31661Alpha3",
+        valid: ["ABW", "HND", "KHM", "RWA"],
+        invalid: ["", "FR", "fR", "GB", "PT", "CM", "JP", "PM", "ZW"],
+      });
+    });
+
+    it("should validate ISO 3166-1 numeric country codes", () => {
+      // from https://en.wikipedia.org/wiki/ISO_3166-1_numeric
+      test({
+        validator: "isISO31661Numeric",
+        valid: [
+          "076",
+          "208",
+          "276",
+          "348",
+          "380",
+          "410",
+          "440",
+          "528",
+          "554",
+          "826",
+        ],
+        invalid: [
+          "",
+          "NL",
+          "NLD",
+          "002",
+          "197",
+          "249",
+          "569",
+          "810",
+          "900",
+          "999",
+        ],
+      });
+    });
+
+    it("should validate ISO 4217 corrency codes", () => {
+      // from https://en.wikipedia.org/wiki/ISO_4217
+      test({
+        validator: "isISO4217",
+        valid: [
+          "AED",
+          "aed",
+          "AUD",
+          "CUP",
+          "EUR",
+          "GBP",
+          "LYD",
+          "MYR",
+          "SGD",
+          "SLE",
+          "USD",
+          "VED",
+          "SLE",
+        ],
+        invalid: [
+          "",
+          "$",
+          "US",
+          "us",
+          "AAA",
+          "aaa",
+          "RWA",
+          "EURO",
+          "euro",
+          "HRK",
+          "CUC",
+        ],
+      });
+    });
+
+    it("should validate whitelisted characters", () => {
+      test({
+        validator: "isWhitelisted",
+        args: ["abcdefghijklmnopqrstuvwxyz-"],
+        valid: ["foo", "foobar", "baz-foo"],
+        invalid: ["foo bar", "fo.bar", "türkçe"],
+      });
+    });
+
+    it("should error on non-string input", () => {
+      test({
+        validator: "isEmpty",
+        error: [undefined, null, [], NaN],
+      });
+    });
+
+    it("should validate dataURI", () => {
+      /* eslint-disable max-len */
+      test({
+        validator: "isDataURI",
+        valid: [
+          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC",
+          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC",
+          "data:application/media_control+xml;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC",
+          "   data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAFVBMVEXk5OTn5+ft7e319fX29vb5+fn///++GUmVAAAALUlEQVQIHWNICnYLZnALTgpmMGYIFWYIZTA2ZFAzTTFlSDFVMwVyQhmAwsYMAKDaBy0axX/iAAAAAElFTkSuQmCC   ",
+          "data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%3E%3Crect%20fill%3D%22%2300B1FF%22%20width%3D%22100%22%20height%3D%22100%22%2F%3E%3C%2Fsvg%3E",
+          "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIj48cmVjdCBmaWxsPSIjMDBCMUZGIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPjwvc3ZnPg==",
+          " data:,Hello%2C%20World!",
+          " data:,Hello World!",
+          " data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D",
+          " data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E",
+          "data:,A%20brief%20note",
+          "data:text/html;charset=US-ASCII,%3Ch1%3EHello!%3C%2Fh1%3E",
+          "data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,dGVzdC5kb2N4",
+        ],
+        invalid: [
+          "dataxbase64",
+          "data:HelloWorld",
+          "data:,A%20brief%20invalid%20[note",
+          "file:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D",
+          "data:text/html;charset=,%3Ch1%3EHello!%3C%2Fh1%3E",
+          "data:text/html;charset,%3Ch1%3EHello!%3C%2Fh1%3E",
+          "data:base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC",
+          "",
+          "http://wikipedia.org",
+          "base64",
+          "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC",
+        ],
+      });
+      /* eslint-enable max-len */
+    });
+
+    it("should validate magnetURI", () => {
+      /* eslint-disable max-len */
+      test({
+        validator: "isMagnetURI",
+        valid: [
+          "magnet:?xt.1=urn:sha1:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456&xt.2=urn:sha1:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456",
+          "magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=helloword2000&tr=udp://helloworld:1337/announce",
+          "magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=foo",
+          "magnet:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234&dn=&tr=&nonexisting=hello world",
+          "magnet:?xt=urn:md5:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456",
+          "magnet:?xt=urn:tree:tiger:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456",
+          "magnet:?xt=urn:ed2k:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magnet:?tr=udp://helloworld:1337/announce&xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magnet:?xt=urn:btmh:1220caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e",
+        ],
+        invalid: [
+          ":?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magneta:?xt=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magnet:?xt=uarn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magnet:?xt=urn:btihz",
+          "magnet::?xt=urn:btih:UHWY2892JNEJ2GTEYOMDNU67E8ICGICYE92JDUGH",
+          "magnet:?xt:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+          "magnet:?xt:urn:nonexisting:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magnet:?xt.2=urn:btih:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234",
+          "magnet:?xt=urn:ed2k:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678901234567890123456789ABCD",
+          "magnet:?xt=urn:btmh:1120caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e",
+          "magnet:?ttxt=urn:btmh:1220caf1e1c30e81cb361b9ee167c4aa64228a7fa4fa9f6105232b28ad099f3a302e",
+        ],
+      });
+      /* eslint-enable max-len */
+    });
+
+    it("should validate LatLong", () => {
+      test({
+        validator: "isLatLong",
+        valid: [
+          "(-17.738223, 85.605469)",
+          "(-12.3456789, +12.3456789)",
+          "(-60.978437, -0.175781)",
+          "(77.719772, -37.529297)",
+          "(7.264394, 165.058594)",
+          "0.955766, -19.863281",
+          "(31.269161,164.355469)",
+          "+12.3456789, -12.3456789",
+          "-15.379543, -137.285156",
+          "(11.770570, -162.949219)",
+          "-55.034319, 113.027344",
+          "58.025555, 36.738281",
+          "55.720923,-28.652344",
+          "-90.00000,-180.00000",
+          "(-71, -146)",
+          "(-71.616864, -146.616864)",
+          "-0.55, +0.22",
+          "90, 180",
+          "+90, -180",
+          "-90,+180",
+          "90,180",
+          "0, 0",
+        ],
+        invalid: [
+          "(020.000000, 010.000000000)",
+          "89.9999999989, 360.0000000",
+          "90.1000000, 180.000000",
+          "+90.000000, -180.00001",
+          "090.0000, 0180.0000",
+          "126, -158",
+          "(-126.400010, -158.400010)",
+          "-95, -96",
+          "-95.738043, -96.738043",
+          "137, -148",
+          "(-137.5942, -148.5942)",
+          "(-120, -203)",
+          "(-119, -196)",
+          "+119.821728, -196.821728",
+          "(-110, -223)",
+          "-110.369532, 223.369532",
+          "(-120.969949, +203.969949)",
+          "-116, -126",
+          "-116.894222, -126.894222",
+          "-112, -160",
+          "-112.96381, -160.96381",
+          "-90., -180.",
+          "+90.1, -180.1",
+          "(-17.738223, 85.605469",
+          "0.955766, -19.863281)",
+          "+,-",
+          "(,)",
+          ",",
+          " ",
+        ],
+      });
+
+      test({
+        validator: "isLatLong",
+        args: [
+          {
+            checkDMS: true,
+          },
+        ],
+        valid: [
+          "40° 26′ 46″ N, 79° 58′ 56″ W",
+          "40° 26′ 46″ S, 79° 58′ 56″ E",
+          "90° 0′ 0″ S, 180° 0′ 0″ E",
+          "40° 26′ 45.9996″ N, 79° 58′ 55.2″ E",
+          "40° 26′ 46″ n, 79° 58′ 56″ w",
+          "40°26′46″s, 79°58′56″e",
+          "11° 0′ 0.005″ S, 180° 0′ 0″ E",
+          "40°26′45.9996″N, 79°58′55.2″E",
+        ],
+        invalid: [
+          "100° 26′ 46″ N, 79° 70′ 56″ W",
+          "40° 89′ 46″ S, 79° 58′ 100″ E",
+          "40° 26.445′ 45″ N, 79° 58′ 55.2″ E",
+          "40° 46″ N, 79° 58′ 56″ W",
+        ],
+      });
+    });
+
+    it("should validate postal code", () => {
+      const fixtures = [
+        {
+          locale: "AU",
+          valid: ["4000", "2620", "3000", "2017", "0800"],
+        },
+        {
+          locale: "BD",
+          valid: [
+            "1000",
+            "1200",
+            "1300",
+            "1400",
+            "1500",
+            "2000",
+            "3000",
+            "4000",
+            "5000",
+            "6000",
+            "7000",
+            "8000",
+            "9000",
+            "9400",
+            "9499",
+          ],
+          invalid: [
+            "0999",
+            "9500",
+            "10000",
+            "12345",
+            "123",
+            "123456",
+            "abcd",
+            "123a",
+            "a123",
+            "12 34",
+            "12-34",
+          ],
+        },
+        {
+          locale: "BY",
+          valid: ["225320", "211120", "247710", "231960"],
+          invalid: ["test 225320", "211120 test", "317543", "267946"],
+        },
+        {
+          locale: "CA",
+          valid: [
+            "L4T 0A5",
+            "G1A-0A2",
+            "A1A 1A1",
+            "X0A-0H0",
+            "V5K 0A1",
+            "A1C 3S4",
+            "A1C3S4",
+            "a1c 3s4",
+            "V9A 7N2",
+            "B3K 5X5",
+            "K8N 5W6",
+            "K1A 0B1",
+            "B1Z 0B9",
+          ],
+          invalid: [
+            "        ",
+            "invalid value",
+            "a1a1a",
+            "A1A  1A1",
+            "K1A 0D1",
+            "W1A 0B1",
+            "Z1A 0B1",
+          ],
+        },
+        {
+          locale: "CO",
+          valid: ["050034", "110221", "441029", "910001"],
+          invalid: ["11001", "000000", "109999", "329999"],
+        },
+        {
+          locale: "ES",
+          valid: ["01001", "52999", "27880"],
+          invalid: ["123", "1234", "53000", "052999", "0123", "abcde"],
+        },
+        {
+          locale: "JP",
+          valid: ["135-0000", "874-8577", "669-1161", "470-0156", "672-8031"],
+        },
+        {
+          locale: "GR",
+          valid: ["022 93", "29934", "90293", "299 42", "94944"],
+        },
+        {
+          locale: "GB",
+          valid: [
+            "TW8 9GS",
+            "BS98 1TL",
+            "DE99 3GG",
+            "DE55 4SW",
+            "DH98 1BT",
+            "DH99 1NS",
+            "GIR0aa",
+            "SA99",
+            "W1N 4DJ",
+            "AA9A 9AA",
+            "AA99 9AA",
+            "BS98 1TL",
+            "DE993GG",
+          ],
+        },
+        {
+          locale: "FR",
+          valid: ["75008", "44522", "38499", "39940", "01000"],
+          invalid: ["44 522", "38 499", "96000", "98025"],
+        },
+        {
+          locale: "ID",
+          valid: ["10210", "40181", "55161", "60233"],
+        },
+        {
+          locale: "IE",
+          valid: ["A65 TF12", "A6W U9U9"],
+          invalid: [
+            "123",
+            "75690HG",
+            "AW5  TF12",
+            "AW5 TF12",
+            "756  90HG",
+            "A65T F12",
+            "O62 O1O2",
+          ],
+        },
+        {
+          locale: "IN",
+          valid: ["364240", "360005"],
+          invalid: [
+            "123",
+            "012345",
+            "011111",
+            "101123",
+            "291123",
+            "351123",
+            "541123",
+            "551123",
+            "651123",
+            "661123",
+            "861123",
+            "871123",
+            "881123",
+            "891123",
+          ],
+        },
+        {
+          locale: "IL",
+          valid: [
+            "10200",
+            "10292",
+            "10300",
+            "10329",
+            "3885500",
+            "4290500",
+            "4286000",
+            "7080000",
+          ],
+          invalid: [
+            "123",
+            "012345",
+            "011111",
+            "101123",
+            "291123",
+            "351123",
+            "541123",
+            "551123",
+            "651123",
+            "661123",
+            "861123",
+            "871123",
+            "881123",
+            "891123",
+          ],
+        },
+        {
+          locale: "BG",
+          valid: ["1000"],
+        },
+        {
+          locale: "IR",
+          valid: ["4351666456", "5614736867"],
+          invalid: [
+            "43516 6456",
+            "123443516 6456",
+            "891123",
+            "test 4351666456",
+            "4351666456 test",
+            "test 4351666456 test",
+          ],
+        },
+        {
+          locale: "CZ",
+          valid: ["20134", "392 90", "39919", "938 29", "39949"],
+        },
+        {
+          locale: "NL",
+          valid: ["1012 SZ", "3432FE", "1118 BH", "3950IO", "3997 GH"],
+          invalid: ["1234", "0603 JV", "5194SA", "9164 SD", "1841SS"],
+        },
+        {
+          locale: "NP",
+          valid: ["10811", "32600", "56806", "977"],
+          invalid: ["11977", "asds", "13 32", "-977", "97765"],
+        },
+        {
+          locale: "PL",
+          valid: [
+            "47-260",
+            "12-930",
+            "78-399",
+            "39-490",
+            "38-483",
+            "05-800",
+            "54-060",
+          ],
+        },
+        {
+          locale: "TW",
+          valid: ["360", "90312", "399", "935", "38842", "546023"],
+        },
+        {
+          locale: "LI",
+          valid: ["9485", "9497", "9491", "9489", "9496"],
+        },
+        {
+          locale: "PT",
+          valid: ["4829-489", "0294-348", "8156-392"],
+        },
+        {
+          locale: "SE",
+          valid: ["12994", "284 39", "39556", "489 39", "499 49"],
+        },
+        {
+          locale: "AD",
+          valid: [
+            "AD100",
+            "AD200",
+            "AD300",
+            "AD400",
+            "AD500",
+            "AD600",
+            "AD700",
+          ],
+        },
+        {
+          locale: "UA",
+          valid: ["65000", "65080", "01000", "51901", "51909", "49125"],
+        },
+        {
+          locale: "BR",
+          valid: [
+            "39100-000",
+            "22040-020",
+            "39400-152",
+            "39100000",
+            "22040020",
+            "39400152",
+          ],
+          invalid: [
+            "79800A12",
+            "13165-00",
+            "38175-abc",
+            "81470-2763",
+            "78908",
+            "13010|111",
+          ],
+        },
+        {
+          locale: "NZ",
+          valid: ["7843", "3581", "0449", "0984", "4144"],
+        },
+        {
+          locale: "PK",
+          valid: ["25000", "44000", "54810", "74200"],
+          invalid: ["5400", "540000", "NY540", "540CA", "540-0"],
+        },
+        {
+          locale: "MG",
+          valid: ["101", "303", "407", "512"],
+        },
+        {
+          locale: "MT",
+          valid: ["VLT2345", "VLT 2345", "ATD1234", "MSK8723"],
+        },
+        {
+          locale: "MY",
+          valid: ["56000", "12000", "79502"],
+        },
+        {
+          locale: "PR",
+          valid: ["00979", "00631", "00786", "00987"],
+        },
+        {
+          locale: "AZ",
+          valid: ["AZ0100", "AZ0121", "AZ3500"],
+          invalid: ["", " AZ0100", "AZ100", "AZ34340", "EN2020", "AY3030"],
+        },
+        {
+          locale: "DO",
+          valid: ["12345"],
+          invalid: ["A1234", "123", "123456"],
+        },
+        {
+          locale: "HT",
+          valid: ["HT1234"],
+          invalid: ["HT123", "HT12345", "AA1234"],
+        },
+        {
+          locale: "TH",
+          valid: ["10250", "72170", "12140"],
+          invalid: ["T1025", "T72170", "12140TH"],
+        },
+        {
+          locale: "SG",
+          valid: ["308215", "546080"],
+        },
+        {
+          locale: "CN",
+          valid: ["150237", "100000"],
+          invalid: ["141234", "386789", "ab1234"],
+        },
+        {
+          locale: "KR",
+          valid: ["17008", "339012"],
+          invalid: ["1412347", "ab1234"],
+        },
+        {
+          locale: "LK",
+          valid: ["11500", "22200", "10370", "43000"],
+          invalid: ["1234", "789389", "982"],
+        },
+        {
+          locale: "BA",
+          valid: ["76300", "71000", "75412", "76100", "88202", "88313"],
+          invalid: ["1234", "789389", "98212", "11000"],
+        },
+      ];
+
+      let allValid = [];
+
+      // Test fixtures
+      fixtures.forEach((fixture) => {
+        if (fixture.valid) allValid = allValid.concat(fixture.valid);
+        test({
+          validator: "isPostalCode",
+          valid: fixture.valid,
+          invalid: fixture.invalid,
+          args: [fixture.locale],
+        });
+      });
+
+      // Test generics
+      test({
+        validator: "isPostalCode",
+        valid: [
+          ...allValid,
+          "1234",
+          "6900",
+          "1292",
+          "9400",
+          "27616",
+          "90210",
+          "10001",
+          "21201",
+          "33142",
+          "060623",
+          "123456",
+          "293940",
+          "002920",
+        ],
+        invalid: [
+          "asdf",
+          "1",
+          "ASDFGJKLmZXJtZtesting123",
+          "Vml2YW11cyBmZXJtZtesting123",
+          "48380480343",
+          "29923-329393-2324",
+          "4294924224",
+          "13",
+        ],
+        args: ["any"],
+      });
+    });
+
+    it("should error on invalid locale", () => {
+      test({
+        validator: "isPostalCode",
+        args: ["is-NOT"],
+        error: ["293940", "1234"],
+      });
+    });
+
+    it("should validate MIME types", () => {
+      test({
+        validator: "isMimeType",
+        valid: [
+          "application/json",
+          "application/xhtml+xml",
+          "audio/mp4",
+          "image/bmp",
+          "font/woff2",
+          "message/http",
+          "model/vnd.gtw",
+          "application/media_control+xml",
+          "multipart/form-data",
+          "multipart/form-data; boundary=something",
+          "multipart/form-data; charset=utf-8; boundary=something",
+          "multipart/form-data; boundary=something; charset=utf-8",
+          'multipart/form-data; boundary=something; charset="utf-8"',
+          'multipart/form-data; boundary="something"; charset=utf-8',
+          'multipart/form-data; boundary="something"; charset="utf-8"',
+          "text/css",
+          "text/plain; charset=utf8",
+          'Text/HTML;Charset="utf-8"',
+          "text/html;charset=UTF-8",
+          "Text/html;charset=UTF-8",
+          "text/html; charset=us-ascii",
+          "text/html; charset=us-ascii (Plain text)",
+          'text/html; charset="us-ascii"',
+          "video/mp4",
+        ],
+        invalid: [
+          "",
+          " ",
+          "/",
+          "f/b",
+          "application",
+          "application\\json",
+          "application/json/text",
+          "application/json; charset=utf-8",
+          "audio/mp4; charset=utf-8",
+          "image/bmp; charset=utf-8",
+          "font/woff2; charset=utf-8",
+          "message/http; charset=utf-8",
+          "model/vnd.gtw; charset=utf-8",
+          "video/mp4; charset=utf-8",
+        ],
+      });
+    });
+
+    it("should validate ISO6346 shipping containerID", () => {
+      test({
+        validator: "isISO6346",
+        valid: [
+          "HLXU2008419",
+          "TGHU7599330",
+          "ECMU4657496",
+          "MEDU6246078",
+          "YMLU2809976",
+          "MRKU0046221",
+          "EMCU3811879",
+          "OOLU8643084",
+          "HJCU1922713",
+          "QJRZ123456",
+        ],
+        invalid: [
+          "OOLU1922713",
+          "HJCU1922413",
+          "FCUI985619",
+          "ECMJ4657496",
+          "TBJA7176445",
+          "AFFU5962593",
+        ],
+      });
+    });
+    it("should validate ISO6346 shipping containerID", () => {
+      test({
+        validator: "isFreightContainerID",
+        valid: [
+          "HLXU2008419",
+          "TGHU7599330",
+          "ECMU4657496",
+          "MEDU6246078",
+          "YMLU2809976",
+          "MRKU0046221",
+          "EMCU3811879",
+          "OOLU8643084",
+          "HJCU1922713",
+          "QJRZ123456",
+        ],
+        invalid: [
+          "OOLU1922713",
+          "HJCU1922413",
+          "FCUI985619",
+          "ECMJ4657496",
+          "TBJA7176445",
+          "AFFU5962593",
+        ],
+      });
+    });
+
+    it("should validate ISO6346 shipping container IDs with checksum digit 10 represented as 0", () => {
+      test({
+        validator: "isISO6346",
+        valid: [
+          "APZU3789870",
+          "TEMU1002030",
+          "DFSU1704420",
+          "CMAU2221480",
+          "SEGU5060260",
+          "FCIU8939320",
+          "TRHU3495670",
+          "MEDU3871410",
+          "CMAU2184010",
+          "TCLU2265970",
+        ],
+        invalid: [
+          "APZU3789871", // Incorrect check digit
+          "TEMU1002031",
+          "DFSU1704421",
+          "CMAU2221481",
+          "SEGU5060261",
+        ],
+      });
+    });
+    it("should validate ISO6346 shipping container IDs with checksum digit 10 represented as 0", () => {
+      test({
+        validator: "isFreightContainerID",
+        valid: [
+          "APZU3789870",
+          "TEMU1002030",
+          "DFSU1704420",
+          "CMAU2221480",
+          "SEGU5060260",
+          "FCIU8939320",
+          "TRHU3495670",
+          "MEDU3871410",
+          "CMAU2184010",
+          "TCLU2265970",
+        ],
+        invalid: [
+          "APZU3789871", // Incorrect check digit
+          "TEMU1002031",
+          "DFSU1704421",
+          "CMAU2221481",
+          "SEGU5060261",
+        ],
+      });
+    });
+
+    // EU-UK valid numbers sourced from https://ec.europa.eu/taxation_customs/tin/specs/FS-TIN%20Algorithms-Public.docx or constructed by @tplessas.
+    it("should validate taxID", () => {
+      test({
+        validator: "isTaxID",
+        args: ["bg-BG"],
+        valid: [
+          "7501010010",
+          "0101010012",
+          "0111010010",
+          "7521010014",
+          "7541010019",
+        ],
+        invalid: [
+          "750101001",
+          "75010100101",
+          "75-01010/01 0",
+          "7521320010",
+          "7501010019",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["cs-CZ"],
+        valid: [
+          "530121999",
+          "530121/999",
+          "530121/9990",
+          "5301219990",
+          "1602295134",
+          "5451219994",
+          "0424175466",
+          "0532175468",
+          "7159079940",
+        ],
+        invalid: [
+          "53-0121 999",
+          "530121000",
+          "960121999",
+          "0124175466",
+          "0472301754",
+          "1975116400",
+          "7159079945",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["de-AT"],
+        valid: ["931736581", "93-173/6581", "93--173/6581"],
+        invalid: ["999999999", "93 173 6581", "93-173/65811", "93-173/658"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["de-DE"],
+        valid: [
+          "26954371827",
+          "86095742719",
+          "65929970489",
+          "79608434120",
+          "659/299/7048/9",
+        ],
+        invalid: [
+          "26954371828",
+          "86095752719",
+          "8609575271",
+          "860957527190",
+          "65299970489",
+          "65999970489",
+          "6592997048-9",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["dk-DK"],
+        valid: [
+          "010111-1113",
+          "0101110117",
+          "2110084008",
+          "2110489008",
+          "2110595002",
+          "2110197007",
+          "0101110117",
+          "0101110230",
+        ],
+        invalid: [
+          "010111/1113",
+          "010111111",
+          "01011111133",
+          "2110485008",
+          "2902034000",
+          "0101110630",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["el-CY"],
+        valid: ["00123123T", "99652156X"],
+        invalid: [
+          "99652156A",
+          "00124123T",
+          "00123123",
+          "001123123T",
+          "00 12-3123/T",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["el-GR"],
+        valid: ["758426713", "032792320", "054100004"],
+        invalid: [
+          "054100005",
+          "05410000",
+          "0541000055",
+          "05 4100005",
+          "05-410/0005",
+          "658426713",
+          "558426713",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["en-CA"],
+        valid: [
+          "000000000",
+          "521719666",
+          "469317481",
+          "120217450",
+          "480534858",
+          "325268597",
+          "336475660",
+          "744797853",
+          "130692544",
+          "046454286",
+        ],
+        invalid: [
+          "        ",
+          "any value",
+          "012345678",
+          "111111111",
+          "999999999",
+          "657449110",
+          "74 47 978 53",
+          "744 797 853",
+          "744-797-853",
+          "981062432",
+          "267500713",
+          "2675o0713",
+          "70597312",
+          "7058973122",
+          "069437151",
+          "046454281",
+          "146452286",
+          "30x92544",
+          "30692544",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["en-GB"],
+        valid: ["1234567890", "AA123456A", "AA123456 "],
+        invalid: [
+          "GB123456A",
+          "123456789",
+          "12345678901",
+          "NK123456A",
+          "TN123456A",
+          "ZZ123456A",
+          "GB123456Z",
+          "DM123456A",
+          "AO123456A",
+          "GB-123456A",
+          "GB 123456 A",
+          "GB123456  ",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["en-IE"],
+        valid: ["1234567T", "1234567TW", "1234577W", "1234577WW", "1234577IA"],
+        invalid: ["1234567", "1234577WWW", "1234577A", "1234577JA"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["en-US"],
+        valid: [
+          "01-1234567",
+          "01 1234567",
+          "011234567",
+          "10-1234567",
+          "02-1234567",
+          "67-1234567",
+          "15-1234567",
+          "31-1234567",
+          "99-1234567",
+        ],
+        invalid: [
+          "0-11234567",
+          "01#1234567",
+          "01  1234567",
+          "01 1234 567",
+          "07-1234567",
+          "28-1234567",
+          "96-1234567",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["es-AR"],
+        valid: [
+          "20271633638",
+          "23274986069",
+          "27333234519",
+          "30678561165",
+          "33693450239",
+          "30534868460",
+          "23111111129",
+          "34557619099",
+        ],
+        invalid: [
+          "20-27163363-8",
+          "20.27163363.8",
+          "33693450231",
+          "69345023",
+          "693450233123123",
+          "3369ew50231",
+          "34557619095",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["es-ES"],
+        valid: [
+          "00054237A",
+          "54237A",
+          "X1234567L",
+          "Z1234567R",
+          "M2812345C",
+          "Y2812345B",
+        ],
+        invalid: ["M2812345CR", "A2812345C", "0/005 423-7A", "00054237U"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["et-EE"],
+        valid: ["10001010080", "46304280206", "37102250382", "32708101201"],
+        invalid: [
+          "46304280205",
+          "61002293333",
+          "4-6304 28/0206",
+          "4630428020",
+          "463042802066",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["fi-FI"],
+        valid: ["131052-308T", "131002+308W", "131019A3089"],
+        invalid: [
+          "131052308T",
+          "131052-308TT",
+          "131052S308T",
+          "13 1052-308/T",
+          "290219A1111",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["fr-BE"],
+        valid: ["00012511119"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["fr-FR"],
+        valid: ["30 23 217 600 053", "3023217600053"],
+        invalid: [
+          "30 2 3 217 600 053",
+          "3 023217-600/053",
+          "3023217600052",
+          "3023217500053",
+          "30232176000534",
+          "302321760005",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["nl-BE"],
+        valid: ["00012511148", "00/0125-11148", "00000011115"],
+        invalid: [
+          "00 01 2511148",
+          "01022911148",
+          "00013211148",
+          "0001251114",
+          "000125111480",
+          "00012511149",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["fr-LU"],
+        valid: ["1893120105732"],
+        invalid: [
+          "189312010573",
+          "18931201057322",
+          "1893 12-01057/32",
+          "1893120105742",
+          "1893120105733",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["lb-LU"],
+        invalid: ["2016023005732"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["hr-HR"],
+        valid: ["94577403194"],
+        invalid: [
+          "94 57-7403/194",
+          "9457740319",
+          "945774031945",
+          "94577403197",
+          "94587403194",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["hu-HU"],
+        valid: ["8071592153"],
+        invalid: [
+          "80 71-592/153",
+          "80715921534",
+          "807159215",
+          "8071592152",
+          "8071582153",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["lt-LT"],
+        valid: ["33309240064"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["it-IT"],
+        valid: ["DMLPRY77D15H501F", "AXXFAXTTD41H501D"],
+        invalid: [
+          "DML PRY/77D15H501-F",
+          "DMLPRY77D15H501",
+          "DMLPRY77D15H501FF",
+          "AAPPRY77D15H501F",
+          "DMLAXA77D15H501F",
+          "AXXFAX90A01Z001F",
+          "DMLPRY77B29H501F",
+          "AXXFAX3TD41H501E",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["lv-LV"],
+        valid: ["01011012344", "32579461005", "01019902341", "325794-61005"],
+        invalid: ["010110123444", "0101101234", "01001612345", "290217-22343"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["mt-MT"],
+        valid: ["1234567A", "882345608", "34581M", "199Z"],
+        invalid: [
+          "812345608",
+          "88234560",
+          "8823456088",
+          "11234567A",
+          "12/34-567 A",
+          "88 23-456/08",
+          "1234560A",
+          "0000000M",
+          "3200100G",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["nl-NL"],
+        valid: ["174559434"],
+        invalid: ["17455943", "1745594344", "17 455-94/34"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["pl-PL"],
+        valid: [
+          "2234567895",
+          "02070803628",
+          "02870803622",
+          "02670803626",
+          "01510813623",
+        ],
+        invalid: [
+          "020708036285",
+          "223456789",
+          "22 345-678/95",
+          "02 070-8036/28",
+          "2234567855",
+          "02223013623",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["pt-BR"],
+        valid: [
+          "35161990910",
+          "74407265027",
+          "05423994000172",
+          "11867044000130",
+        ],
+        invalid: [
+          "ABCDEFGH",
+          "170.691.440-72",
+          "11494282142",
+          "74405265037",
+          "11111111111",
+          "48469799384",
+          "94.592.973/0001-82",
+          "28592361000192",
+          "11111111111111",
+          "111111111111112",
+          "61938188550993",
+          "82168365502729",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["pt-PT"],
+        valid: ["299999998", "299992020"],
+        invalid: ["2999999988", "29999999", "29 999-999/8"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["ro-RO"],
+        valid: [
+          "8001011234563",
+          "9000123456789",
+          "1001011234560",
+          "3001011234564",
+          "5001011234568",
+        ],
+        invalid: [
+          "5001011234569",
+          "500 1011-234/568",
+          "500101123456",
+          "50010112345688",
+          "5001011504568",
+          "8000230234563",
+          "6000230234563",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["sk-SK"],
+        valid: [
+          "530121999",
+          "536221/999",
+          "031121999",
+          "520229999",
+          "1234567890",
+        ],
+        invalid: [
+          "53012199999",
+          "990101999",
+          "530121000",
+          "53012199",
+          "53-0121 999",
+          "535229999",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["sl-SI"],
+        valid: ["15012557", "15012590"],
+        invalid: ["150125577", "1501255", "15 01-255/7"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["sv-SE"],
+        valid: [
+          "640823-3234",
+          "640883-3231",
+          "6408833231",
+          "19640823-3233",
+          "196408233233",
+          "19640883-3230",
+          "200228+5266",
+          "20180101-5581",
+        ],
+        invalid: [
+          "640823+3234",
+          "160230-3231",
+          "160260-3231",
+          "160260-323",
+          "160260323",
+          "640823+323",
+          "640823323",
+          "640823+32344",
+          "64082332344",
+          "19640823-32333",
+          "1964082332333",
+        ],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["uk-UA"],
+        valid: ["3006321856", "3003102490", "2164212906"],
+        invalid: ["2565975632", "256597563287", "КС00123456", "2896235845"],
+      });
+      test({
+        validator: "isTaxID",
+        valid: ["01-1234567"],
+      });
+      test({
+        validator: "isTaxID",
+        args: ["is-NOT"],
+        error: [
+          "01-1234567",
+          "01 1234567",
+          "011234567",
+          "0-11234567",
+          "01#1234567",
+          "01  1234567",
+          "01 1234 567",
+          "07-1234567",
+          "28-1234567",
+          "96-1234567",
+        ],
+      });
+    });
+
+    it("should validate slug", () => {
+      test({
+        validator: "isSlug",
+        valid: [
+          "foo",
+          "foo-bar",
+          "foo_bar",
+          "foo-bar-foo",
+          "foo-bar_foo",
+          "foo-bar_foo*75-b4r-**_foo",
+          "foo-bar_foo*75-b4r-**_foo-&&",
+        ],
+        invalid: [
+          "not-----------slug",
+          "@#_$@",
+          "-not-slug",
+          "not-slug-",
+          "_not-slug",
+          "not-slug_",
+          "not slug",
+        ],
+      });
+    });
+
+    it("should validate strong passwords", () => {
+      test({
+        validator: "isStrongPassword",
+        args: [
+          {
+            minLength: 8,
+            minLowercase: 1,
+            minUppercase: 1,
+            minNumbers: 1,
+            minSymbols: 1,
+          },
+        ],
+        valid: [
+          '%2%k{7BsL"M%Kd6e',
+          "EXAMPLE of very long_password123!",
+          "mxH_+2vs&54_+H3P",
+          "+&DxJ=X7-4L8jRCD",
+          "etV*p%Nr6w&H%FeF",
+          "£3.ndSau_7",
+          "VaLIDWith\\Symb0l",
+        ],
+        invalid: [
+          "",
+          "password",
+          "hunter2",
+          "hello world",
+          "passw0rd",
+          "password!",
+          "PASSWORD!",
+        ],
+      });
+    });
+
+    it("should validate date", () => {
+      test({
+        validator: "isDate",
+        valid: [
+          new Date(),
+          new Date(2014, 2, 15),
+          new Date("2014-03-15"),
+          "2020/02/29",
+          "2020-02-19",
+        ],
+        invalid: [
+          "",
+          "15072002",
+          null,
+          undefined,
+          { year: 2002, month: 7, day: 15 },
+          42,
+          {
+            toString() {
+              return "[object Date]";
+            },
+          }, // faking
+          "2020-02-30", // invalid date
+          "2019-02-29", // non-leap year
+          "2020-04-31", // invalid date
+          "2020/03-15", // mixed delimiter
+          "-2020-04-19",
+          "-2023/05/24",
+          "abc-2023/05/24",
+          "2024",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01-",
+          "2024-05-01-abc",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: ["DD/MM/YYYY"], // old format for backward compatibility
+        valid: ["15-07-2002", "15/07/2002"],
+        invalid: [
+          "15/7/2002",
+          "15-7-2002",
+          "15/7/02",
+          "15-7-02",
+          "15-07/2002",
+          "2024",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01-",
+          "2024-05-01-abc",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+          "15/",
+          "15/07",
+          "15/07/",
+          "15/07/2024/",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ format: "DD/MM/YYYY" }],
+        valid: ["15-07-2002", "15/07/2002"],
+        invalid: [
+          "15/7/2002",
+          "15-7-2002",
+          "15/7/02",
+          "15-7-02",
+          "15-07/2002",
+          "2024",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01-",
+          "2024-05-01-abc",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+          "15/",
+          "15/07",
+          "15/07/",
+          "15/07/2024/",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ format: "DD/MM/YY" }],
+        valid: ["15-07-02", "15/07/02"],
+        invalid: [
+          "15/7/2002",
+          "15-7-2002",
+          "15/07-02",
+          "30/04/--",
+          "2024",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01-",
+          "2024-05-01-abc",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+          "15/",
+          "15/07",
+          "15/07/",
+          "15/07/2024/",
+          "15/07/24/",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ format: "D/M/YY" }],
+        valid: ["5-7-02", "5/7/02"],
+        invalid: [
+          "5/07/02",
+          "15/7/02",
+          "15-7-02",
+          "5/7-02",
+          "3/4/aa",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+          "15/",
+          "15/07",
+          "15/07/",
+          "15/07/2024/",
+          "15/07/24/",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ format: "DD/MM/YYYY", strictMode: true }],
+        valid: ["15/07/2002"],
+        invalid: [
+          "15-07-2002",
+          "15/7/2002",
+          "15-7-2002",
+          "15/7/02",
+          "15-7-02",
+          "15-07/2002",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+          "15/",
+          "15/07",
+          "15/07/",
+          "15/07/2024/",
+          "15/07/24/",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ strictMode: true }],
+        valid: ["2020/01/15", "2014/02/15", "2014/03/15", "2020/02/29"],
+        invalid: [
+          "2014-02-15",
+          "2020-02-29",
+          "15-07/2002",
+          new Date(),
+          new Date(2014, 2, 15),
+          new Date("2014-03-15"),
+          "-2020-04-19",
+          "-2023/05/24",
+          "abc-2023/05/24",
+          "2024",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01-",
+          "2024-05-01-abc",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ delimiters: ["/", " "] }],
+        valid: [
+          new Date(),
+          new Date(2014, 2, 15),
+          new Date("2014-03-15"),
+          "2020/02/29",
+          "2020 02 29",
+        ],
+        invalid: [
+          "2020-02-29",
+          "",
+          "15072002",
+          null,
+          undefined,
+          { year: 2002, month: 7, day: 15 },
+          42,
+          {
+            toString() {
+              return "[object Date]";
+            },
+          },
+          "2020/02/30",
+          "2019/02/29",
+          "2020/04/31",
+          "2020/03-15",
+          "-2020-04-19",
+          "-2023/05/24",
+          "abc-2023/05/24",
+          "2024",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01-",
+          "2024-05-01-abc",
+          "2024/",
+          "2024/05",
+          "2024/05/",
+          "2024/05/01/",
+          "2024/05/01/abc",
+          "2024 05 01 abc",
+        ],
+      });
+      test({
+        validator: "isDate",
+        args: [{ format: "MM.DD.YYYY", delimiters: ["."], strictMode: true }],
+        valid: ["01.15.2020", "02.15.2014", "03.15.2014", "02.29.2020"],
+        invalid: [
+          "2014-02-15",
+          "2020-02-29",
+          "15-07/2002",
+          new Date(),
+          new Date(2014, 2, 15),
+          new Date("2014-03-15"),
+          "29.02.2020",
+          "02.29.2020.20",
+          "2024-",
+          "2024-05",
+          "2024-05-",
+          "2024-05-01",
+          "-2020-04-19",
+          "-2023/05/24",
+          "abc-2023/05/24",
+          "04.05.2024.",
+          "04.05.2024.abc",
+          "abc.04.05.2024",
+        ],
+      });
+    });
+    it("should validate time", () => {
+      test({
+        validator: "isTime",
+        valid: ["00:00", "23:59", "9:00"],
+        invalid: [
+          "",
+          null,
+          undefined,
+          0,
+          "07:00 PM",
+          "23",
+          "00:60",
+          "00:",
+          "01:0 ",
+          "001:01",
+        ],
+      });
+      test({
+        validator: "isTime",
+        args: [{ hourFormat: "hour24", mode: "withSeconds" }],
+        valid: ["23:59:59", "00:00:00", "9:50:01"],
+        invalid: [
+          "",
+          null,
+          undefined,
+          23,
+          "01:00:01 PM",
+          "13:00:",
+          "00",
+          "26",
+          "00;01",
+          "0 :09",
+          "59:59:59",
+          "24:00:00",
+          "00:59:60",
+          "99:99:99",
+          "009:50:01",
+        ],
+      });
+      test({
+        validator: "isTime",
+        args: [{ hourFormat: "hour24", mode: "withOptionalSeconds" }],
+        valid: ["23:59:59", "00:00:00", "9:50:01", "00:00", "23:59", "9:00"],
+        invalid: [
+          "",
+          null,
+          undefined,
+          23,
+          "01:00:01 PM",
+          "13:00:",
+          "00",
+          "26",
+          "00;01",
+          "0 :09",
+          "59:59:59",
+          "24:00:00",
+          "00:59:60",
+          "99:99:99",
+          "009:50:01",
+        ],
+      });
+      test({
+        validator: "isTime",
+        args: [{ hourFormat: "hour12" }],
+        valid: ["12:59 PM", "12:59 AM", "01:00 PM", "01:00 AM", "7:00 AM"],
+        invalid: [
+          "",
+          null,
+          undefined,
+          0,
+          "12:59 MM",
+          "12:59 MA",
+          "12:59 PA",
+          "12:59 A M",
+          "13:00 PM",
+          "23",
+          "00:60",
+          "00:",
+          "9:00",
+          "01:0 ",
+          "001:01",
+          "12:59:00 PM",
+          "12:59:00 A M",
+          "12:59:00 ",
+        ],
+      });
+      test({
+        validator: "isTime",
+        args: [{ hourFormat: "hour12", mode: "withSeconds" }],
+        valid: ["12:59:59 PM", "2:34:45 AM", "7:00:00 AM"],
+        invalid: [
+          "",
+          null,
+          undefined,
+          23,
+          "01:00: 1 PM",
+          "13:00:",
+          "13:00:00 PM",
+          "00",
+          "26",
+          "00;01",
+          "0 :09",
+          "59:59:59",
+          "24:00:00",
+          "00:59:60",
+          "99:99:99",
+          "9:50:01",
+          "009:50:01",
+        ],
+      });
+      test({
+        validator: "isTime",
+        args: [{ hourFormat: "hour12", mode: "withOptionalSeconds" }],
+        valid: [
+          "12:59:59 PM",
+          "2:34:45 AM",
+          "7:00:00 AM",
+          "12:59 PM",
+          "12:59 AM",
+          "01:00 PM",
+          "01:00 AM",
+          "7:00 AM",
+        ],
+        invalid: [
+          "",
+          null,
+          undefined,
+          23,
+          "01:00: 1 PM",
+          "13:00:",
+          "00",
+          "26",
+          "00;01",
+          "0 :09",
+          "59:59:59",
+          "24:00:00",
+          "00:59:60",
+          "99:99:99",
+          "9:50:01",
+          "009:50:01",
+        ],
+      });
+    });
+    it("should be valid license plate", () => {
+      test({
+        validator: "isLicensePlate",
+        args: ["es-AR"],
+        valid: ["AB 123 CD", "AB123CD", "ABC 123", "ABC123"],
+        invalid: [
+          "",
+          "notalicenseplate",
+          "AB-123-CD",
+          "ABC-123",
+          "AABC 123",
+          "AB CDE FG",
+          "ABC DEF",
+          "12 ABC 34",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["pt-PT"],
+        valid: [
+          "AA-12-34",
+          "12-AA-34",
+          "12-34-AA",
+          "AA-12-AA",
+          "AA·12·34",
+          "12·AB·34",
+          "12·34·AB",
+          "AB·34·AB",
+          "AA 12 34",
+          "12 AA 34",
+          "12 34 AA",
+          "AB 12 CD",
+          "AA1234",
+          "12AA34",
+          "1234AA",
+          "AB12CD",
+        ],
+        invalid: [
+          "",
+          "notalicenseplate",
+          "AA-AA-00",
+          "00-AA-AA",
+          "AA-AA-AA",
+          "00-00-00",
+          "AA·AA·00",
+          "00·AA·AA",
+          "AA·AA·AA",
+          "00·00·00",
+          "AA AA 00",
+          "00 AA AA",
+          "AA AA AA",
+          "00 00 00",
+          "A1-B2-C3",
+          "1A-2B-3C",
+          "ABC-1-EF",
+          "AB-C1D-EF",
+          "AB-C1-DEF",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["de-LI"],
+        valid: ["FL 1", "FL 99999", "FL 1337"],
+        invalid: ["", "FL 999999", "AB 12345", "FL -1"],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["de-DE"],
+        valid: [
+          "M A 1",
+          "M A 12",
+          "M A 123",
+          "M A 1234",
+          "M AB 1",
+          "M AB 12",
+          "M AB 123",
+          "M AB 1234",
+          "FS A 1",
+          "FS A 12",
+          "FS A 123",
+          "FS A 1234",
+          "FS AB 1",
+          "FS AB 12",
+          "FS AB 123",
+          "FS AB 1234",
+          "FSAB1234",
+          "FS-AB-1234",
+          "FS AB 1234 H",
+          "FS AB 1234 E",
+          "FSAB1234E",
+          "FS-AB-1234-E",
+          "FS AB-1234-E",
+          "FSAB1234 E",
+          "FS AB1234E",
+          "LRO AB 123",
+          "LRO-AB-123-E",
+          "LRO-AB-123E",
+          "LRO-AB-123 E",
+          "LRO-AB-123-H",
+          "LRO-AB-123H",
+          "LRO-AB-123 H",
+        ],
+        invalid: [
+          "YY AB 123",
+          "PAF AB 1234",
+          "M ABC 123",
+          "M AB 12345",
+          "FS AB 1234 A",
+          "LRO-AB-1234",
+          "HRO ABC 123",
+          "HRO ABC 1234",
+          "LDK-AB-1234-E",
+          "ÖHR FA 123D",
+          "MZG-AB-123X",
+          "OBG-ABD-123",
+          "PAF-AB2-123",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["fi-FI"],
+        valid: [
+          "ABC-123",
+          "ABC 123",
+          "ABC123",
+          "A100",
+          "A 100",
+          "A-100",
+          "C10001",
+          "C 10001",
+          "C-10001",
+          "123-ABC",
+          "123 ABC",
+          "123ABC",
+          "123-A",
+          "123 A",
+          "123A",
+          "199AA",
+          "199 AA",
+          "199-AA",
+        ],
+        invalid: [
+          " ",
+          "A-1",
+          "A1A-100",
+          "1-A-2",
+          "C1234567",
+          "A B C 1 2 3",
+          "abc-123",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["sq-AL"],
+        valid: ["AA 000 AA", "ZZ 999 ZZ"],
+        invalid: ["", "AA 0 A", "AAA 00 AAA"],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["cs-CZ"],
+        valid: [
+          "ALA4011",
+          "4A23000",
+          "DICTAT0R",
+          "VETERAN",
+          "AZKVIZ8",
+          "2A45876",
+          "DIC-TAT0R",
+        ],
+        invalid: [
+          "",
+          "invalidlicenseplate",
+          "LN5758898",
+          "X-|$|-X",
+          "AE0F-OP4",
+          "GO0MER",
+          "2AAAAAAAA",
+          "FS AB 1234 E",
+          "GB999 9999 00",
+        ],
+      });
+
+      test({
+        validator: "isLicensePlate",
+        args: ["pt-BR"],
+        valid: [
+          "ABC1234",
+          "ABC 1234",
+          "ABC-1234",
+          "ABC1D23",
+          "ABC1K23",
+          "ABC1Z23",
+          "ABC 1D23",
+          "ABC-1D23",
+        ],
+        invalid: ["", "AA 0 A", "AAA 00 AAA", "ABCD123", "AB12345", "AB123DC"],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["hu-HU"],
+        valid: [
+          "AAB-001",
+          "AVC-987",
+          "KOC-124",
+          "JCM-871",
+          "AWQ-777",
+          "BPO-001",
+          "BPI-002",
+          "UCO-342",
+          "UDO-385",
+          "XAO-987",
+          "AAI-789",
+          "ABI-789",
+          "ACI-789",
+          "AAO-789",
+          "ABO-789",
+          "ACO-789",
+          "YAA-123",
+          "XAA-123",
+          "WAA-258",
+          "XZZ-784",
+          "M123456",
+          "CK 12-34",
+          "DT 12-34",
+          "CD 12-34",
+          "HC 12-34",
+          "HB 12-34",
+          "HK 12-34",
+          "MA 12-34",
+          "OT 12-34",
+          "RR 17-87",
+          "CD 124-348",
+          "C-C 2021",
+          "C-X 2458",
+          "X-A 7842",
+          "E-72345",
+          "Z-07458",
+          "S ACF 83",
+          "SP 04-68",
+        ],
+        invalid: [
+          "AAA-547",
+          "aab-001",
+          "AAB 001",
+          "AB34",
+          "789-LKJ",
+          "BBO-987",
+          "BBI-987",
+          "BWQ-777",
+          "BQW-987",
+          "BAI-789",
+          "BBI-789",
+          "BCI-789",
+          "BAO-789",
+          "BBO-789",
+          "BCO-789",
+          "ADI-789",
+          "ADO-789",
+          "KOC-1234",
+          "M1234567",
+          "W-12345",
+          "S BCF 83",
+          "X-D 1234",
+          "C-D 1234",
+          "HU 12-34",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["any"],
+        valid: ["FL 1", "FS AB 123"],
+        invalid: ["", "FL 999999", "FS AB 1234 A"],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["asdfasdf"],
+        error: ["FL 1", "FS AB 123", "FL 999999", "FS AB 1234 A"],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["sv-SE"],
+        valid: [
+          "ABC 123",
+          "ABC 12A",
+          "ABC123",
+          "ABC12A",
+          "A WORD",
+          "WORD",
+          "ÅSNA",
+          "EN VARG",
+          "CERISE",
+          "AA",
+          "ABCDEFG",
+          "ÅÄÖ",
+          "ÅÄÖ ÅÄÖ",
+        ],
+        invalid: [
+          "",
+          "    ",
+          "IQV 123",
+          "IQV123",
+          "ABI 12Q",
+          "ÅÄÖ 123",
+          "ÅÄÖ 12A",
+          "AB1 A23",
+          "AB1 12A",
+          "lower",
+          "abc 123",
+          "abc 12A",
+          "abc 12a",
+          "AbC 12a",
+          "WORDLONGERTHANSEVENCHARACTERS",
+          "A",
+          "ABC-123",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["en-IN"],
+        valid: [
+          "MH 04 AD 0001",
+          "HR26DQ0001",
+          "WB-04-ZU-2001",
+          "KL 18 X 5800",
+          "DL 4 CAF 4856",
+          "KA-41CE-5289",
+          "GJ 04-AD 5822",
+        ],
+        invalid: [
+          "mh04ad0045",
+          "invalidlicenseplate",
+          "4578",
+          "",
+          "GJ054GH4785",
+        ],
+      });
+      test({
+        validator: "isLicensePlate",
+        args: ["en-SG"],
+        valid: ["SGX 1234 A", "SGX-1234-A", "SGB1234Z"],
+        invalid: ["sg1234a", "invalidlicenseplate", "4578", "", "GJ054GH4785"],
+      });
+    });
+    it("should validate VAT numbers", () => {
+      test({
+        validator: "isVAT",
+        args: ["AT"],
+        valid: ["ATU12345678", "U12345678"],
+        invalid: ["AT 12345678", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["BE"],
+        valid: ["BE1234567890", "1234567890"],
+        invalid: ["BE 1234567890", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["BG"],
+        valid: ["BG1234567890", "1234567890", "BG123456789", "123456789"],
+        invalid: ["BG 1234567890", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["HR"],
+        valid: ["HR12345678901", "12345678901"],
+        invalid: ["HR 12345678901", "1234567890"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CY"],
+        valid: ["CY123456789", "123456789"],
+        invalid: ["CY 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CZ"],
+        valid: [
+          "CZ1234567890",
+          "CZ123456789",
+          "CZ12345678",
+          "1234567890",
+          "123456789",
+          "12345678",
+        ],
+        invalid: ["CZ 123456789", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["DK"],
+        valid: ["DK12345678", "12345678"],
+        invalid: ["DK 12345678", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["EE"],
+        valid: ["EE123456789", "123456789"],
+        invalid: ["EE 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["FI"],
+        valid: ["FI12345678", "12345678"],
+        invalid: ["FI 12345678", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["FR"],
+        valid: ["FRAA123456789", "AA123456789"],
+        invalid: ["FR AA123456789", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["DE"],
+        valid: ["DE123456789", "123456789"],
+        invalid: ["DE 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["EL"],
+        valid: ["EL123456789", "123456789"],
+        invalid: ["EL 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["HU"],
+        valid: ["HU12345678", "12345678"],
+        invalid: ["HU 12345678", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["IE"],
+        valid: ["IE1234567AW", "1234567AW"],
+        invalid: ["IE 1234567", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["IT"],
+        valid: ["IT12345678910", "12345678910"],
+        invalid: [
+          "IT12345678 910",
+          "IT 123456789101",
+          "IT123456789101",
+          "GB12345678910",
+          "IT123456789",
+        ],
+      });
+      test({
+        validator: "isVAT",
+        args: ["LV"],
+        valid: ["LV12345678901", "12345678901"],
+        invalid: ["LV 12345678901", "1234567890"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["LT"],
+        valid: [
+          "LT123456789012",
+          "123456789012",
+          "LT12345678901",
+          "12345678901",
+          "LT1234567890",
+          "1234567890",
+          "LT123456789",
+          "123456789",
+        ],
+        invalid: ["LT 123456789012", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["LU"],
+        valid: ["LU12345678", "12345678"],
+        invalid: ["LU 12345678", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["MT"],
+        valid: ["MT12345678", "12345678"],
+        invalid: ["MT 12345678", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["NL"],
+        valid: ["NL123456789B10", "123456789B10"],
+        invalid: [
+          "NL12345678 910",
+          "NL 123456789101",
+          "NL123456789B1",
+          "GB12345678910",
+          "NL123456789",
+        ],
+      });
+      test({
+        validator: "isVAT",
+        args: ["PL"],
+        valid: [
+          "PL1234567890",
+          "1234567890",
+          "PL123-456-78-90",
+          "123-456-78-90",
+          "PL123-45-67-890",
+          "123-45-67-890",
+        ],
+        invalid: ["PL 1234567890", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["PT"],
+        valid: ["PT123456789", "123456789"],
+        invalid: ["PT 123456789", "000000001"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["RO"],
+        valid: ["RO1234567890", "1234567890", "RO12", "12"],
+        invalid: ["RO 12", "1"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["SK"],
+        valid: ["SK1234567890", "1234567890"],
+        invalid: ["SK 1234567890", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["SI"],
+        valid: ["SI12345678", "12345678"],
+        invalid: ["SI 12345678", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["ES"],
+        valid: ["ESA1234567A", "A1234567A"],
+        invalid: ["ES 1234567A", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["SE"],
+        valid: ["SE123456789012", "123456789012"],
+        invalid: ["SE 123456789012", "12345678901"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["AL"],
+        valid: ["AL123456789A", "123456789A"],
+        invalid: ["AL 123456789A", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["MK"],
+        valid: ["MK1234567890123", "1234567890123"],
+        invalid: ["MK 1234567890123", "123456789012"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["AU"],
+        valid: [
+          "AU53004085616",
+          "53004085616",
+          "AU65613309809",
+          "65613309809",
+          "AU34118972998",
+          "34118972998",
+        ],
+        invalid: [
+          "AU65613309808",
+          "65613309808",
+          "AU55613309809",
+          "55613309809",
+          "AU65613319809",
+          "65613319809",
+          "AU34117972998",
+          "34117972998",
+          "AU12345678901",
+          "12345678901",
+          "AU 12345678901",
+          "1234567890",
+        ],
+      });
+      test({
+        validator: "isVAT",
+        args: ["BY"],
+        valid: ["УНП 123456789", "123456789"],
+        invalid: ["BY 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CA"],
+        valid: ["CA123456789", "123456789"],
+        invalid: ["CA 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["IS"],
+        valid: ["IS123456", "12345"],
+        invalid: ["IS 12345", "1234"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["IN"],
+        valid: ["IN123456789012345", "123456789012345"],
+        invalid: ["IN 123456789012345", "12345678901234"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["ID"],
+        valid: [
+          "ID123456789012345",
+          "123456789012345",
+          "ID12.345.678.9-012.345",
+          "12.345.678.9-012.345",
+        ],
+        invalid: ["ID 123456789012345", "12345678901234"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["IL"],
+        valid: ["IL123456789", "123456789"],
+        invalid: ["IL 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["KZ"],
+        valid: ["KZ123456789012", "123456789012"],
+        invalid: ["KZ 123456789012", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["NZ"],
+        valid: ["NZ123456789", "123456789"],
+        invalid: ["NZ 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["NG"],
+        valid: [
+          "NG123456789012",
+          "123456789012",
+          "NG12345678-9012",
+          "12345678-9012",
+        ],
+        invalid: ["NG 123456789012", "12345678901"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["NO"],
+        valid: ["NO123456789MVA", "123456789MVA"],
+        invalid: ["NO 123456789MVA", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["PH"],
+        valid: [
+          "PH123456789012",
+          "123456789012",
+          "PH123 456 789 012",
+          "123 456 789 012",
+        ],
+        invalid: ["PH 123456789012", "12345678901"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["RU"],
+        valid: ["RU1234567890", "1234567890", "RU123456789012", "123456789012"],
+        invalid: ["RU 123456789012", "12345678901"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["SM"],
+        valid: ["SM12345", "12345"],
+        invalid: ["SM 12345", "1234"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["SA"],
+        valid: ["SA123456789012345", "123456789012345"],
+        invalid: ["SA 123456789012345", "12345678901234"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["RS"],
+        valid: ["RS123456789", "123456789"],
+        invalid: ["RS 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CH"],
+        valid: [
+          // strictly valid
+          "CHE-116.281.710 MWST",
+          "CHE-116.281.710 IVA",
+          "CHE-116.281.710 TVA",
+          // loosely valid presentation variants
+          "CHE 116 281 710 IVA", // all separators are spaces
+          "CHE-191.398.369MWST", // no space before suffix
+          "CHE-116281710 MWST", // no number separators
+          "CHE-116281710MWST", // no number separators and no space before suffix
+          "CHE105854263MWST", // no separators
+          "CHE-116.285.524", // no suffix (vat abbreviation)
+          "CHE116281710", // no suffix and separators
+          "116.281.710 TVA", // no prefix (CHE, ISO-3166-1 Alpha-3)
+          "116281710MWST", // no prefix and separators
+          "100.218.485", // no prefix and suffix
+          "123456788", // no prefix, separators and suffix
+        ],
+        invalid: [
+          "CH-116.281.710 MWST", // invalid prefix (should be CHE)
+          "CHE-116.281 MWST", // invalid number of digits (should be 9)
+          "CHE-123.456.789 MWST", // invalid last digit (should match the calculated check-number 8)
+          "CHE-123.356.780 MWST", // invalid check-number (there are no swiss UIDs with the calculated check number 10)
+          "CH-116.281.710 VAT", // invalid suffix (should be MWST, IVA or TVA)
+          "CHE-116/281/710 IVA", // invalid number separators (should be all dots or all spaces)
+        ],
+      });
+      test({
+        validator: "isVAT",
+        args: ["TR"],
+        valid: ["TR1234567890", "1234567890"],
+        invalid: ["TR 1234567890", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["UA"],
+        valid: ["UA123456789012", "123456789012"],
+        invalid: ["UA 123456789012", "12345678901"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["GB"],
+        valid: [
+          "GB999 9999 00",
+          "GB999 9999 96",
+          "GB999999999 999",
+          "GBGD000",
+          "GBGD499",
+          "GBHA500",
+          "GBHA999",
+        ],
+        invalid: [
+          "GB999999900",
+          "GB999999996",
+          "GB999 9999 97",
+          "GB999999999999",
+          "GB999999999 9999",
+          "GB9999999999 999",
+          "GBGD 000",
+          "GBGD 499",
+          "GBHA 500",
+          "GBHA 999",
+          "GBGD500",
+          "GBGD999",
+          "GBHA000",
+          "GBHA499",
+        ],
+      });
+      test({
+        validator: "isVAT",
+        args: ["UZ"],
+        valid: ["UZ123456789", "123456789"],
+        invalid: ["UZ 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["AR"],
+        valid: ["AR12345678901", "12345678901"],
+        invalid: ["AR 12345678901", "1234567890"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["BO"],
+        valid: ["BO1234567", "1234567"],
+        invalid: ["BO 1234567", "123456"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["BR"],
+        valid: [
+          "BR12.345.678/9012-34",
+          "12.345.678/9012-34",
+          "BR123.456.789-01",
+          "123.456.789-01",
+        ],
+        invalid: ["BR 12.345.678/9012-34", "12345678901234"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CL"],
+        valid: ["CL12345678-9", "12345678-9"],
+        invalid: ["CL 12345678-9", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CO"],
+        valid: ["CO1234567890", "1234567890"],
+        invalid: ["CO 1234567890", "123456789"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["CR"],
+        valid: ["CR123456789012", "123456789012", "CR123456789", "123456789"],
+        invalid: ["CR 123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["EC"],
+        valid: ["EC1234567890123", "1234567890123"],
+        invalid: ["EC 1234567890123", "123456789012"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["SV"],
+        valid: ["SV1234-567890-123-1", "1234-567890-123-1"],
+        invalid: ["SV 1234-567890-123-1", "1234567890123"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["GT"],
+        valid: ["GT1234567-8", "1234567-8"],
+        invalid: ["GT 1234567-8", "1234567"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["HN"],
+        valid: ["HN"],
+        invalid: ["HN "],
+      });
+      test({
+        validator: "isVAT",
+        args: ["MX"],
+        valid: [
+          "MXABCD123456EFG",
+          "ABCD123456EFG",
+          "MXABC123456DEF",
+          "ABC123456DEF",
+        ],
+        invalid: ["MX ABC123456EFG", "123456"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["NI"],
+        valid: ["NI123-456789-0123A", "123-456789-0123A"],
+        invalid: ["NI 123-456789-0123A", "1234567890123"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["PA"],
+        valid: ["PA"],
+        invalid: ["PA "],
+      });
+      test({
+        validator: "isVAT",
+        args: ["PY"],
+        valid: ["PY12345678-9", "12345678-9", "PY123456-7", "123456-7"],
+        invalid: ["PY 123456-7", "123456"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["PE"],
+        valid: ["PE12345678901", "12345678901"],
+        invalid: ["PE 12345678901", "1234567890"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["DO"],
+        valid: [
+          "DO12345678901",
+          "12345678901",
+          "DO123-4567890-1",
+          "123-4567890-1",
+          "DO123456789",
+          "123456789",
+          "DO1-23-45678-9",
+          "1-23-45678-9",
+        ],
+        invalid: ["DO 12345678901", "1234567890"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["UY"],
+        valid: ["UY123456789012", "123456789012"],
+        invalid: ["UY 123456789012", "12345678901"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["VE"],
+        valid: [
+          "VEJ-123456789",
+          "J-123456789",
+          "VEJ-12345678-9",
+          "J-12345678-9",
+        ],
+        invalid: ["VE J-123456789", "12345678"],
+      });
+      test({
+        validator: "isVAT",
+        args: ["invalidCountryCode"],
+        error: ["GB999 9999 00"],
+      });
+    });
+    it("should validate mailto URI", () => {
+      test({
+        validator: "isMailtoURI",
+        valid: [
+          "mailto:?subject=something&[email protected]",
+          "mailto:?subject=something&[email protected],[email protected],",
+          "mailto:?subject=something&[email protected]",
+          "mailto:?subject=something&[email protected],[email protected]",
+          "mailto:[email protected],[email protected]",
+          "mailto:[email protected],[email protected]",
+          "mailto:[email protected]",
+          "mailto:[email protected]",
+          "mailto:?subject=something&body=something else",
+          "mailto:?subject=something&body=something else&[email protected],[email protected]",
+          "mailto:?subject=something&body=something else&[email protected],[email protected]",
+          "mailto:?subject=something&body=something else&[email protected]&[email protected],[email protected]",
+          "mailto:[email protected]",
+          "mailto:[email protected]?",
+          "mailto:[email protected]?subject=something",
+          "mailto:[email protected]?subject=something&[email protected]",
+          "mailto:[email protected]?subject=something&[email protected],[email protected],",
+          "mailto:[email protected]?subject=something&[email protected]",
+          "mailto:[email protected]?subject=something&[email protected],[email protected]",
+          "mailto:[email protected][email protected],[email protected]",
+          "mailto:[email protected][email protected],[email protected]",
+          "mailto:[email protected][email protected]",
+          "mailto:[email protected][email protected]&",
+          "mailto:[email protected]?subject=something&body=something else",
+          "mailto:[email protected]?subject=something&body=something else&[email protected],[email protected]",
+          "mailto:[email protected]?subject=something&body=something else&[email protected],[email protected]",
+          "mailto:[email protected]?subject=something&body=something else&[email protected]&[email protected],[email protected]",
+          "mailto:",
+        ],
+        invalid: [
+          "",
+          "something",
+          "[email protected]",
+          "mailto:?subject=okay&subject=444",
+          "mailto:?subject=something&wrong=888",
+          "mailto:somename@gmail.com",
+          "mailto:[email protected]?cc=somename@gmail.com",
+          "mailto:[email protected]?bcc=somename@gmail.com",
+          "mailto:[email protected]?bcc=somename@gmail.com&bcc",
+          "mailto:[email protected]?subject=anything&body=nothing&cc=&bcc=&key=",
+          "mailto:[email protected]?cc=somename",
+          "mailto:somename",
+          "mailto:[email protected]?subject=something&body=something else&[email protected]&[email protected],[email protected]&",
+          "mailto:?subject=something&body=something else&[email protected]&[email protected],[email protected]&",
+        ],
+      });
+    });
+  });
+
+  describe("isAfter", () => {
+    it("should validate dates against a start date", () => {
+      test({
+        validator: "isAfter",
+        args: [{ comparisonDate: "2011-08-03" }],
+        valid: ["2011-08-04", new Date(2011, 8, 10).toString()],
+        invalid: ["2010-07-02", "2011-08-03", new Date(0).toString(), "foo"],
+      });
+
+      test({
+        validator: "isAfter",
+        valid: ["2100-08-04", new Date(Date.now() + 86400000).toString()],
+        invalid: ["2010-07-02", new Date(0).toString()],
+      });
+
+      test({
+        validator: "isAfter",
+        args: [{ comparisonDate: "2011-08-03" }],
+        valid: ["2015-09-17"],
+        invalid: ["invalid date"],
+      });
+
+      test({
+        validator: "isAfter",
+        args: [{ comparisonDate: "invalid date" }],
+        invalid: ["invalid date", "2015-09-17"],
+      });
+      test({
+        validator: "isAfter",
+        args: [], // will fall back to the current date
+        valid: ["2100-08-04", new Date(Date.now() + 86400000).toString()],
+      });
+      test({
+        validator: "isAfter",
+        args: [undefined], // will fall back to the current date
+        valid: ["2100-08-04", new Date(Date.now() + 86400000).toString()],
+      });
+      test({
+        validator: "isAfter",
+        args: [{ comparisonDate: undefined }], // will fall back to the current date
+        valid: ["2100-08-04", new Date(Date.now() + 86400000).toString()],
+      });
+    });
+
+    describe("(legacy syntax)", () => {
+      it("should validate dates against a start date", () => {
+        test({
+          validator: "isAfter",
+          args: ["2011-08-03"],
+          valid: ["2011-08-04", new Date(2011, 8, 10).toString()],
+          invalid: ["2010-07-02", "2011-08-03", new Date(0).toString(), "foo"],
+        });
+
+        test({
+          validator: "isAfter",
+          valid: ["2100-08-04", new Date(Date.now() + 86400000).toString()],
+          invalid: ["2010-07-02", new Date(0).toString()],
+        });
+
+        test({
+          validator: "isAfter",
+          args: ["2011-08-03"],
+          valid: ["2015-09-17"],
+          invalid: ["invalid date"],
+        });
+
+        test({
+          validator: "isAfter",
+          args: ["invalid date"],
+          invalid: ["invalid date", "2015-09-17"],
+        });
+      });
+    });
+  });
+
+  describe("isBase64", () => {
+    it("should validate base64 strings with default options", () => {
+      test({
+        validator: "isBase64",
+        valid: [
+          "",
+          "Zg==",
+          "Zm8=",
+          "Zm9v",
+          "Zm9vYg==",
+          "Zm9vYmE=",
+          "Zm9vYmFy",
+          "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4=",
+          "Vml2YW11cyBmZXJtZW50dW0gc2VtcGVyIHBvcnRhLg==",
+          "U3VzcGVuZGlzc2UgbGVjdHVzIGxlbw==",
+          "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuMPNS1Ufof9EW/M98FNw" +
+            "UAKrwflsqVxaxQjBQnHQmiI7Vac40t8x7pIb8gLGV6wL7sBTJiPovJ0V7y7oc0Ye" +
+            "rhKh0Rm4skP2z/jHwwZICgGzBvA0rH8xlhUiTvcwDCJ0kc+fh35hNt8srZQM4619" +
+            "FTgB66Xmp4EtVyhpQV+t02g6NzK72oZI0vnAvqhpkxLeLiMCyrI416wHm5Tkukhx" +
+            "QmcL2a6hNOyu0ixX/x2kSFXApEnVrJ+/IxGyfyw8kf4N2IZpW5nEP847lpfj0SZZ" +
+            "Fwrd1mnfnDbYohX2zRptLy2ZUn06Qo9pkG5ntvFEPo9bfZeULtjYzIl6K8gJ2uGZ" +
+            "HQIDAQAB",
+        ],
+        invalid: [
+          "12345",
+          "Vml2YW11cyBmZXJtZtesting123",
+          "Zg=",
+          "Z===",
+          "Zm=8",
+          "=m9vYg==",
+          "Zm9vYmFy====",
+        ],
+      });
+
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: true }],
+        valid: [
+          "",
+          "bGFkaWVzIGFuZCBnZW50bGVtZW4sIHdlIGFyZSBmbG9hdGluZyBpbiBzcGFjZQ",
+          "1234",
+          "bXVtLW5ldmVyLXByb3Vk",
+          "PDw_Pz8-Pg",
+          "VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw",
+        ],
+        invalid: [
+          " AA",
+          "\tAA",
+          "\rAA",
+          "\nAA",
+          "This+isa/bad+base64Url==",
+          "0K3RgtC+INC30LDQutC+0LTQuNGA0L7QstCw0L3QvdCw0Y8g0YHRgtGA0L7QutCw",
+        ],
+        error: [null, undefined, {}, [], 42],
+      });
+
+      // for (let i = 0, str = '', encoded; i < 1000; i++) {
+      //   str += String.fromCharCode(Math.random() * 26 | 97); // eslint-disable-line no-bitwise
+      //   encoded = Buffer.from(str).toString('base64');
+      //   if (!validatorjs.isBase64(encoded)) {
+      //     let msg = format('validator.isBase64() failed with "%s"', encoded);
+      //     throw new Error(msg);
+      //   }
+      // }
+    });
+
+    it("should validate standard Base64 with padding", () => {
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: false, padding: true }],
+        valid: [
+          "",
+          "TWFu",
+          "TWE=",
+          "TQ==",
+          "SGVsbG8=",
+          "U29mdHdhcmU=",
+          "YW55IGNhcm5hbCBwbGVhc3VyZS4=",
+        ],
+        invalid: [
+          "TWF",
+          "TWE===",
+          "SGVsbG8@",
+          "SGVsbG8===",
+          "SGVsb G8=",
+          "====",
+        ],
+      });
+    });
+
+    it("should validate standard Base64 without padding", () => {
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: false, padding: false }],
+        valid: [
+          "",
+          "TWFu",
+          "TWE",
+          "TQ",
+          "SGVsbG8",
+          "U29mdHdhcmU",
+          "YW55IGNhcm5hbCBwbGVhc3VyZS4",
+        ],
+        invalid: [
+          "TWE=",
+          "TQ===",
+          "SGVsbG8@",
+          "SGVsbG8===",
+          "SGVsb G8",
+          "====",
+        ],
+      });
+    });
+
+    it("should validate Base64url with padding", () => {
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: true, padding: true }],
+        valid: [
+          "",
+          "SGVsbG8=",
+          "U29mdHdhcmU=",
+          "YW55IGNhcm5hbCBwbGVhc3VyZS4=",
+          "SGVsbG8-",
+          "SGVsbG8_",
+        ],
+        invalid: ["SGVsbG8===", "SGVsbG8@", "SGVsb G8=", "===="],
+      });
+    });
+
+    it("should validate Base64url without padding", () => {
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: true, padding: false }],
+        valid: [
+          "",
+          "SGVsbG8",
+          "U29mdHdhcmU",
+          "YW55IGNhcm5hbCBwbGVhc3VyZS4",
+          "SGVsbG8-",
+          "SGVsbG8_",
+        ],
+        invalid: ["SGVsbG8=", "SGVsbG8===", "SGVsbG8@", "SGVsb G8", "===="],
+      });
+    });
+
+    it("should handle mixed cases correctly", () => {
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: false, padding: true }],
+        valid: ["", "TWFu", "TWE=", "TQ=="],
+        invalid: ["TWE", "TQ=", "TQ==="],
+      });
+
+      test({
+        validator: "isBase64",
+        args: [{ urlSafe: true, padding: false }],
+        valid: ["", "SGVsbG8", "SGVsbG8-", "SGVsbG8_"],
+        invalid: ["SGVsbG8=", "SGVsbG8@", "SGVsb G8"],
+      });
+    });
+  });
+
+  describe("isBefore", () => {
+    describe("should validate dates a given end date", () => {
+      describe("new syntax", () => {
+        test({
+          validator: "isBefore",
+          args: [{ comparisonDate: "08/04/2011" }],
+          valid: ["2010-07-02", "2010-08-04", new Date(0).toString()],
+          invalid: ["08/04/2011", new Date(2011, 9, 10).toString()],
+        });
+        test({
+          validator: "isBefore",
+          args: [{ comparisonDate: new Date(2011, 7, 4).toString() }],
+          valid: ["2010-07-02", "2010-08-04", new Date(0).toString()],
+          invalid: ["08/04/2011", new Date(2011, 9, 10).toString()],
+        });
+        test({
+          validator: "isBefore",
+          args: [{ comparisonDate: "2011-08-03" }],
+          valid: ["1999-12-31"],
+          invalid: ["invalid date"],
+        });
+        test({
+          validator: "isBefore",
+          args: [{ comparisonDate: "invalid date" }],
+          invalid: ["invalid date", "1999-12-31"],
+        });
+      });
+
+      describe("legacy syntax", () => {
+        test({
+          validator: "isBefore",
+          args: ["08/04/2011"],
+          valid: ["2010-07-02", "2010-08-04", new Date(0).toString()],
+          invalid: ["08/04/2011", new Date(2011, 9, 10).toString()],
+        });
+        test({
+          validator: "isBefore",
+          args: [new Date(2011, 7, 4).toString()],
+          valid: ["2010-07-02", "2010-08-04", new Date(0).toString()],
+          invalid: ["08/04/2011", new Date(2011, 9, 10).toString()],
+        });
+        test({
+          validator: "isBefore",
+          args: ["2011-08-03"],
+          valid: ["1999-12-31"],
+          invalid: ["invalid date"],
+        });
+        test({
+          validator: "isBefore",
+          args: ["invalid date"],
+          invalid: ["invalid date", "1999-12-31"],
+        });
+      });
+    });
+
+    describe("should validate dates a default end date", () => {
+      describe("new syntax", () => {
+        test({
+          validator: "isBefore",
+          valid: [
+            "2000-08-04",
+            new Date(0).toString(),
+            new Date(Date.now() - 86400000).toString(),
+          ],
+          invalid: ["2100-07-02", new Date(2217, 10, 10).toString()],
+        });
+        test({
+          validator: "isBefore",
+          args: undefined, // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+        test({
+          validator: "isBefore",
+          args: [], // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+        test({
+          validator: "isBefore",
+          args: [undefined], // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+        test({
+          validator: "isBefore",
+          args: [{ comparisonDate: undefined }], // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+      });
+
+      describe("legacy syntax", () => {
+        test({
+          validator: "isBefore",
+          valid: [
+            "2000-08-04",
+            new Date(0).toString(),
+            new Date(Date.now() - 86400000).toString(),
+          ],
+          invalid: ["2100-07-02", new Date(2217, 10, 10).toString()],
+        });
+        test({
+          validator: "isBefore",
+          args: undefined, // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+        test({
+          validator: "isBefore",
+          args: [], // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+        test({
+          validator: "isBefore",
+          args: [undefined], // will fall back to the current date
+          valid: ["1999-06-07"],
+        });
+      });
+    });
+  });
+
+  describe("isFQDN", () => {
+    it("should validate domain names.", () => {
+      test({
+        validator: "isFQDN",
+        args: [],
+        valid: ["google.com"],
+        invalid: ["google.l33t"],
+      });
+      test({
+        validator: "isFQDN",
+        args: [{ allow_numeric_tld: true }],
+        valid: ["google.com", "google.l33t"],
+        invalid: [],
+      });
+    });
+  });
+
+  describe("isIP", () => {
+    it("should validate IP addresses", () => {
+      test({
+        validator: "isIP",
+        valid: [
+          "127.0.0.1",
+          "0.0.0.0",
+          "255.255.255.255",
+          "1.2.3.4",
+          "::1",
+          "2001:db8:0000:1:1:1:1:1",
+          "2001:db8:3:4::192.0.2.33",
+          "2001:41d0:2:a141::1",
+          "::ffff:127.0.0.1",
+          "::0000",
+          "0000::",
+          "1::",
+          "1111:1:1:1:1:1:1:1",
+          "fe80::a6db:30ff:fe98:e946",
+          "::",
+          "::8",
+          "::ffff:127.0.0.1",
+          "::ffff:255.255.255.255",
+          "::ffff:0:255.255.255.255",
+          "::2:3:4:5:6:7:8",
+          "::255.255.255.255",
+          "0:0:0:0:0:ffff:127.0.0.1",
+          "1:2:3:4:5:6:7::",
+          "1:2:3:4:5:6::8",
+          "1::7:8",
+          "1:2:3:4:5::7:8",
+          "1:2:3:4:5::8",
+          "1::6:7:8",
+          "1:2:3:4::6:7:8",
+          "1:2:3:4::8",
+          "1::5:6:7:8",
+          "1:2:3::5:6:7:8",
+          "1:2:3::8",
+          "1::4:5:6:7:8",
+          "1:2::4:5:6:7:8",
+          "1:2::8",
+          "1::3:4:5:6:7:8",
+          "1::8",
+          "fe80::7:8%eth0",
+          "fe80::7:8%1",
+          "64:ff9b::192.0.2.33",
+          "0:0:0:0:0:0:10.0.0.1",
+        ],
+        invalid: [
+          "abc",
+          "256.0.0.0",
+          "0.0.0.256",
+          "26.0.0.256",
+          "0200.200.200.200",
+          "200.0200.200.200",
+          "200.200.0200.200",
+          "200.200.200.0200",
+          "::banana",
+          "banana::",
+          "::1banana",
+          "::1::",
+          "1:",
+          ":1",
+          ":1:1:1::2",
+          "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1",
+          "::11111",
+          "11111:1:1:1:1:1:1:1",
+          "2001:db8:0000:1:1:1:1::1",
+          "0:0:0:0:0:0:ffff:127.0.0.1",
+          "0:0:0:0:ffff:127.0.0.1",
+          "BC:e4d5:c:e7b9::%40i0nccymtl9cwfKo.5vaeXLSGRMe:EDh2qs5wkhnPws5xQKqafjfAMm6wGFCJ.bVFsZfb",
+          "1dC:0DF8:62D:3AC::%KTatXocjaFVioS0RTNQl4mA.V151o0RSy.JIu-D-D8.d3171ZWsSJ7PK4YjkJCRN0F",
+        ],
+      });
+
+      test({
+        validator: "isIP",
+        args: [{ version: "invalid version" }],
+        valid: [],
+        invalid: ["127.0.0.1", "0.0.0.0", "255.255.255.255", "1.2.3.4"],
+      });
+
+      test({
+        validator: "isIP",
+        args: [{ version: null }],
+        valid: ["127.0.0.1", "0.0.0.0", "255.255.255.255", "1.2.3.4"],
+      });
+
+      test({
+        validator: "isIP",
+        args: [{ version: undefined }],
+        valid: ["127.0.0.1", "0.0.0.0", "255.255.255.255", "1.2.3.4"],
+      });
+
+      test({
+        validator: "isIP",
+        args: [{ version: 4 }],
+        valid: [
+          "127.0.0.1",
+          "0.0.0.0",
+          "255.255.255.255",
+          "1.2.3.4",
+          "255.0.0.1",
+          "0.0.1.1",
+        ],
+        invalid: [
+          "::1",
+          "2001:db8:0000:1:1:1:1:1",
+          "::ffff:127.0.0.1",
+          "137.132.10.01",
+          "0.256.0.256",
+          "255.256.255.256",
+        ],
+      });
+
+      test({
+        validator: "isIP",
+        args: [{ version: 6 }],
+        valid: [
+          "::1",
+          "2001:db8:0000:1:1:1:1:1",
+          "::ffff:127.0.0.1",
+          "fe80::1234%1",
+          "ff08::9abc%10",
+          "ff08::9abc%interface10",
+          "ff02::5678%pvc1.3",
+        ],
+        invalid: [
+          "127.0.0.1",
+          "0.0.0.0",
+          "255.255.255.255",
+          "1.2.3.4",
+          "::ffff:287.0.0.1",
+          "%",
+          "fe80::1234%",
+          "fe80::1234%1%3%4",
+          "fe80%fe80%",
+        ],
+      });
+
+      test({
+        validator: "isIP",
+        args: [{ version: 10 }],
+        valid: [],
+        invalid: [
+          "127.0.0.1",
+          "0.0.0.0",
+          "255.255.255.255",
+          "1.2.3.4",
+          "::1",
+          "2001:db8:0000:1:1:1:1:1",
+        ],
+      });
+    });
+
+    describe("legacy syntax", () => {
+      it("should validate IP addresses", () => {
+        test({
+          validator: "isIP",
+          valid: [
+            "127.0.0.1",
+            "0.0.0.0",
+            "255.255.255.255",
+            "1.2.3.4",
+            "::1",
+            "2001:db8:0000:1:1:1:1:1",
+            "2001:db8:3:4::192.0.2.33",
+            "2001:41d0:2:a141::1",
+            "::ffff:127.0.0.1",
+            "::0000",
+            "0000::",
+            "1::",
+            "1111:1:1:1:1:1:1:1",
+            "fe80::a6db:30ff:fe98:e946",
+            "::",
+            "::8",
+            "::ffff:127.0.0.1",
+            "::ffff:255.255.255.255",
+            "::ffff:0:255.255.255.255",
+            "::2:3:4:5:6:7:8",
+            "::255.255.255.255",
+            "0:0:0:0:0:ffff:127.0.0.1",
+            "1:2:3:4:5:6:7::",
+            "1:2:3:4:5:6::8",
+            "1::7:8",
+            "1:2:3:4:5::7:8",
+            "1:2:3:4:5::8",
+            "1::6:7:8",
+            "1:2:3:4::6:7:8",
+            "1:2:3:4::8",
+            "1::5:6:7:8",
+            "1:2:3::5:6:7:8",
+            "1:2:3::8",
+            "1::4:5:6:7:8",
+            "1:2::4:5:6:7:8",
+            "1:2::8",
+            "1::3:4:5:6:7:8",
+            "1::8",
+            "fe80::7:8%eth0",
+            "fe80::7:8%1",
+            "64:ff9b::192.0.2.33",
+            "0:0:0:0:0:0:10.0.0.1",
+          ],
+          invalid: [
+            "abc",
+            "256.0.0.0",
+            "0.0.0.256",
+            "26.0.0.256",
+            "0200.200.200.200",
+            "200.0200.200.200",
+            "200.200.0200.200",
+            "200.200.200.0200",
+            "::banana",
+            "banana::",
+            "::1banana",
+            "::1::",
+            "1:",
+            ":1",
+            ":1:1:1::2",
+            "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1",
+            "::11111",
+            "11111:1:1:1:1:1:1:1",
+            "2001:db8:0000:1:1:1:1::1",
+            "0:0:0:0:0:0:ffff:127.0.0.1",
+            "0:0:0:0:ffff:127.0.0.1",
+          ],
+        });
+        test({
+          validator: "isIP",
+          args: [4],
+          valid: [
+            "127.0.0.1",
+            "0.0.0.0",
+            "255.255.255.255",
+            "1.2.3.4",
+            "255.0.0.1",
+            "0.0.1.1",
+          ],
+          invalid: [
+            "::1",
+            "2001:db8:0000:1:1:1:1:1",
+            "::ffff:127.0.0.1",
+            "137.132.10.01",
+            "0.256.0.256",
+            "255.256.255.256",
+          ],
+        });
+        test({
+          validator: "isIP",
+          args: [6],
+          valid: [
+            "::1",
+            "2001:db8:0000:1:1:1:1:1",
+            "::ffff:127.0.0.1",
+            "fe80::1234%1",
+            "ff08::9abc%10",
+            "ff08::9abc%interface10",
+            "ff02::5678%pvc1.3",
+          ],
+          invalid: [
+            "127.0.0.1",
+            "0.0.0.0",
+            "255.255.255.255",
+            "1.2.3.4",
+            "::ffff:287.0.0.1",
+            "%",
+            "fe80::1234%",
+            "fe80::1234%1%3%4",
+            "fe80%fe80%",
+          ],
+        });
+        test({
+          validator: "isIP",
+          args: [10],
+          valid: [],
+          invalid: [
+            "127.0.0.1",
+            "0.0.0.0",
+            "255.255.255.255",
+            "1.2.3.4",
+            "::1",
+            "2001:db8:0000:1:1:1:1:1",
+          ],
+        });
+      });
+    });
+  });
+  describe("isISBN", () => {
+    it("should validate ISBNs", () => {
+      test({
+        validator: "isISBN",
+        args: [{ version: 10 }],
+        valid: [
+          "3836221195",
+          "3-8362-2119-5",
+          "3 8362 2119 5",
+          "1617290858",
+          "1-61729-085-8",
+          "1 61729 085-8",
+          "0007269706",
+          "0-00-726970-6",
+          "0 00 726970 6",
+          "3423214120",
+          "3-423-21412-0",
+          "3 423 21412 0",
+          "340101319X",
+          "3-401-01319-X",
+          "3 401 01319 X",
+        ],
+        invalid: [
+          "3423214121",
+          "3-423-21412-1",
+          "3 423 21412 1",
+          "978-3836221191",
+          "9783836221191",
+          "123456789a",
+          "foo",
+          "",
+        ],
+      });
+      test({
+        validator: "isISBN",
+        args: [{ version: 13 }],
+        valid: [
+          "9783836221191",
+          "978-3-8362-2119-1",
+          "978 3 8362 2119 1",
+          "9783401013190",
+          "978-3401013190",
+          "978 3401013190",
+          "9784873113685",
+          "978-4-87311-368-5",
+          "978 4 87311 368 5",
+        ],
+        invalid: [
+          "9783836221190",
+          "978-3-8362-2119-0",
+          "978 3 8362 2119 0",
+          "3836221195",
+          "3-8362-2119-5",
+          "3 8362 2119 5",
+          "01234567890ab",
+          "foo",
+          "",
+        ],
+      });
+      test({
+        validator: "isISBN",
+        valid: ["340101319X", "9784873113685"],
+        invalid: ["3423214121", "9783836221190"],
+      });
+      test({
+        validator: "isISBN",
+        args: [{ version: "foo" }],
+        invalid: ["340101319X", "9784873113685"],
+      });
+    });
+
+    describe("(legacy syntax)", () => {
+      it("should validate ISBNs", () => {
+        test({
+          validator: "isISBN",
+          args: [10],
+          valid: [
+            "3836221195",
+            "3-8362-2119-5",
+            "3 8362 2119 5",
+            "1617290858",
+            "1-61729-085-8",
+            "1 61729 085-8",
+            "0007269706",
+            "0-00-726970-6",
+            "0 00 726970 6",
+            "3423214120",
+            "3-423-21412-0",
+            "3 423 21412 0",
+            "340101319X",
+            "3-401-01319-X",
+            "3 401 01319 X",
+          ],
+          invalid: [
+            "3423214121",
+            "3-423-21412-1",
+            "3 423 21412 1",
+            "978-3836221191",
+            "9783836221191",
+            "123456789a",
+            "foo",
+            "",
+          ],
+        });
+        test({
+          validator: "isISBN",
+          args: [13],
+          valid: [
+            "9783836221191",
+            "978-3-8362-2119-1",
+            "978 3 8362 2119 1",
+            "9783401013190",
+            "978-3401013190",
+            "978 3401013190",
+            "9784873113685",
+            "978-4-87311-368-5",
+            "978 4 87311 368 5",
+          ],
+          invalid: [
+            "9783836221190",
+            "978-3-8362-2119-0",
+            "978 3 8362 2119 0",
+            "3836221195",
+            "3-8362-2119-5",
+            "3 8362 2119 5",
+            "01234567890ab",
+            "foo",
+            "",
+          ],
+        });
+        test({
+          validator: "isISBN",
+          valid: ["340101319X", "9784873113685"],
+          invalid: ["3423214121", "9783836221190"],
+        });
+        test({
+          validator: "isISBN",
+          args: ["foo"],
+          invalid: ["340101319X", "9784873113685"],
+        });
+      });
+    });
+  });
+
+  return assertionCount;
+}
diff --git a/validatorjs/webpack.config.mjs b/validatorjs/webpack.config.mjs
new file mode 100644
index 0000000..ffd0459
--- /dev/null
+++ b/validatorjs/webpack.config.mjs
@@ -0,0 +1,35 @@
+import path from "path";
+import { fileURLToPath } from "url";
+import UnicodeEscapePlugin from "@dapplets/unicode-escape-webpack-plugin";
+
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+
+function config({ filename, minify }) {
+  return {
+    entry: "./src/test.mjs",
+    mode: "production",
+    devtool: "source-map",
+    target: "web",
+    output: {
+      path: path.resolve(__dirname, "dist"),
+      filename: filename,
+      library: {
+        name: "ValidatorJSBenchmark",
+        type: "globalThis",
+      },
+      libraryTarget: "assign",
+      chunkFormat: "commonjs",
+    },
+    plugins: [ new UnicodeEscapePlugin() ],
+    optimization: {
+      minimize: minify,
+    },
+  };
+}
+
+export default [
+  config({ filename: "bundle.es6.min.js", minify: true }),
+  config({ filename: "bundle.es6.js", minify: false }),
+];