diff --git a/.eslintrc.json b/.eslintrc.json index 4d54b63c..8bb9f41f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -6,7 +6,8 @@ "sourceType": "module" }, "plugins": [ - "@typescript-eslint" + "@typescript-eslint", + "unused-imports" ], "rules": { "@typescript-eslint/naming-convention": "warn", @@ -14,6 +15,8 @@ "curly": "warn", "eqeqeq": "warn", "no-throw-literal": "warn", - "semi": "off" + "semi": "off", + "no-unused-vars": "error", + "unused-imports/no-unused-imports": "error" } } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1040943a..612f1343 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,26 +4,24 @@ name: CI on: - push: - branches: [ master ] - pull_request: - branches: [ master ] + push: + branches: [master] + pull_request: + branches: [master] jobs: - build: - - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [14.x] - steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - run: npm ci - - run: npm run compile - - run: npm run lint + build: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [14.x] + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm ci + - run: npm run compile + - run: npm run lint diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index da4533a2..91bc9bbe 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -9,63 +9,63 @@ # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # -name: "CodeQL" +name: 'CodeQL' on: - push: - branches: [ master ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ master ] - schedule: - - cron: '20 12 * * 3' + push: + branches: [master] + pull_request: + # The branches below must be a subset of the branches above + branches: [master] + schedule: + - cron: '20 12 * * 3' jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write - strategy: - fail-fast: false - matrix: - language: [ 'javascript' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] - # Learn more: - # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed + strategy: + fail-fast: false + matrix: + language: ['javascript'] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] + # Learn more: + # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed - steps: - - name: Checkout repository - uses: actions/checkout@v2 + steps: + - name: Checkout repository + uses: actions/checkout@v2 - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 - # ℹī¸ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl + # ℹī¸ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl - # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language + # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language - #- run: | - # make bootstrap - # make release + #- run: | + # make bootstrap + # make release - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.prettierignore b/.prettierignore index 61b1c6d7..5a881259 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,4 +5,8 @@ LICENSE .gitignore tsconfig.json tsconfig.extension.json -.eslintrc.json \ No newline at end of file +.eslintrc.json +out +media +.vscode +tsconfig.panel.json \ No newline at end of file diff --git a/media/main-bundle.js b/media/main-bundle.js index a6b7107b..7e0f7990 100644 --- a/media/main-bundle.js +++ b/media/main-bundle.js @@ -299,12 +299,6 @@ function addPetToPanel(petType, basePetUri, petColor, petSize, left, bottom, flo startAnimations(collisionElement, newPet); return new pets_1.PetElement(petSpriteElement, collisionElement, newPet, petColor, petType); } -function removePetFromPanel(pet) { - pet.collision.removeEventListener('mouseover', handleMouseOver); - document.getElementById('petsContainer').removeChild(pet.collision); - pet.collision.remove(); - pet.remove(); -} function saveState() { var state = new states_1.PetPanelState(); state.petStates = new Array(); @@ -543,7 +537,7 @@ class PetCollection { this._pets = []; } locate(name) { - return this._pets.find((collection, value, obj) => { + return this._pets.find((collection) => { return collection.pet.name() === name; }); } @@ -1718,4 +1712,4 @@ exports.JumpDownLeftState = JumpDownLeftState; /******/ /******/ })() ; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wZXRBcHAvLi9zcmMvY29tbW9uL25hbWVzLnRzIiwid2VicGFjazovL3BldEFwcC8uL3NyYy9wYW5lbC9tYWluLnRzIiwid2VicGFjazovL3BldEFwcC8uL3NyYy9wYW5lbC9wZXRzLnRzIiwid2VicGFjazovL3BldEFwcC8uL3NyYy9wYW5lbC9zdGF0ZXMudHMiLCJ3ZWJwYWNrOi8vcGV0QXBwL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BldEFwcC93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFhLGlCQUFTLEdBQXdCLElBQUksR0FBRyxDQUFpQjtJQUNsRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDZCxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDVixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDWCxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDWCxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUM7SUFDZixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUM7SUFDZixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFD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d0JBQW1CLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1FBSTVDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDMUMsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDO0lBQ3JDLENBQUM7Q0FDSjtBQWxCRCw4Q0FrQkM7Ozs7Ozs7VUM1V0Q7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7OztVQ3RCQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJtYWluLWJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBQRVRfTkFNRVM6IE1hcDxudW1iZXIsIHN0cmluZz4gPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPihbXHJcbiAgICBbMSwgJ0JlbGxhJ10sXHJcbiAgICBbMiwgJ0NoYXJsaWUnXSxcclxuICAgIFszLCAnTWF4J10sXHJcbiAgICBbNCwgJ01vbGx5J10sXHJcbiAgICBbNSwgJ0NvY28nXSxcclxuICAgIFs2LCAnQnVkZHknXSxcclxuICAgIFs3LCAnUnVieSddLFxyXG4gICAgWzgsICdPc2NhciddLFxyXG4gICAgWzksICdMdWN5J10sXHJcbiAgICBbMTAsICdCYWlsZXknXSxcclxuICAgIFsxMSwgJ01pbG8nXSxcclxuICAgIFsxMiwgJ0RhaXN5J10sXHJcbiAgICBbMTMsICdBcmNoaWUnXSxcclxuICAgIFsxNCwgJ09sbGllJ10sXHJcbiAgICBbMTUsICdSb3NpZSddLFxyXG4gICAgWzE2LCAnTG9sYSddLFxyXG4gICAgWzE3LCAnRnJhbmtpZSddLFxyXG4gICAgWzE4LCAnVG9ieSddLFxyXG4gICAgWzE5LCAnUm94eSddLFxyXG4gICAgWzIwLCAnUG9wcHknXSxcclxuICAgIFsyMSwgJ0x1bmEnXSxcclxuICAgIFsyMiwgJ0phY2snXSxcclxuICAgIFsyMywgJ01pbGxpZSddLFxyXG4gICAgWzI0LCAnVGVkZHknXSxcclxuICAgIFsyNSwgJ0hhcnJ5J10sXHJcbiAgICBbMjYsICdDb29wZXInXSxcclxuICAgIFsyNywgJ0JlYXInXSxcclxuICAgIFsyOCwgJ1JvY2t5J10sXHJcbiAgICBbMjksICdBbGZpZSddLFxyXG4gICAgWzMwLCAnSHVnbyddLFxyXG4gICAgWzMxLCAnQm9ubmllJ10sXHJcbiAgICBbMzIsICdQZXBwZXInXSxcclxuICAgIFszMywgJ0xpbHknXSxcclxuICAgIFszNCwgJ1RpbGx5J10sXHJcbiAgICBbMzUsICdMZW8nXSxcclxuICAgIFszNiwgJ01hZ2dpZSddLFxyXG4gICAgWzM3LCAnR2VvcmdlJ10sXHJcbiAgICBbMzgsICdNaWEnXSxcclxuICAgIFszOSwgJ01hcmxleSddLFxyXG4gICAgWzQwLCAnSGFybGV5J10sXHJcbiAgICBbNDEsICdDaGxvZSddLFxyXG4gICAgWzQyLCAnTHVsdSddLFxyXG4gICAgWzQzLCAnTWlzc3knXSxcclxuICAgIFs0NCwgJ0phc3BlciddLFxyXG4gICAgWzQ1LCAnQmlsbHknXSxcclxuICAgIFs0NiwgJ05hbGEnXSxcclxuICAgIFs0NywgJ01vbnR5J10sXHJcbiAgICBbNDgsICdaaWdneSddLFxyXG4gICAgWzQ5LCAnV2luc3RvbiddLFxyXG4gICAgWzUwLCAnWmV1cyddLFxyXG4gICAgWzUxLCAnWm9lJ10sXHJcbiAgICBbNTIsICdTdGVsbGEnXSxcclxuICAgIFs1MywgJ1Nhc2hhJ10sXHJcbiAgICBbNTQsICdSdXN0eSddLFxyXG4gICAgWzU1LCAnR3VzJ10sXHJcbiAgICBbNTYsICdCYXh0ZXInXSxcclxuICAgIFs1NywgJ0RleHRlciddLFxyXG4gICAgWzU4LCAnRGllc2VsJ10sXHJcbiAgICBbNTksICdXaWxsb3cnXSxcclxuICAgIFs2MCwgJ0Jhcm5leSddLFxyXG4gICAgWzYxLCAnQnJ1bm8nXSxcclxuICAgIFs2MiwgJ1Blbm55J10sXHJcbiAgICBbNjMsICdIb25leSddLFxyXG4gICAgWzY0LCAnTWlsbHknXSxcclxuICAgIFs2NSwgJ011cnBoeSddLFxyXG4gICAgWzY2LCAnU2ltYmEnXSxcclxuICAgIFs2NywgJ0hvbGx5J10sXHJcbiAgICBbNjgsICdCZW5qaSddLFxyXG4gICAgWzY5LCAnSGVucnknXSxcclxuICAgIFs3MCwgJ0xpbGx5J10sXHJcbiAgICBbNzEsICdQaXBwYSddLFxyXG4gICAgWzcyLCAnU2hhZG93J10sXHJcbiAgICBbNzMsICdTYW0nXSxcclxuICAgIFs3NCwgJ0J1c3RlciddLFxyXG4gICAgWzc1LCAnTHVja3knXSxcclxuICAgIFs3NiwgJ0VsbGllJ10sXHJcbiAgICBbNzcsICdEdWtlJ10sXHJcbiAgICBbNzgsICdKZXNzaWUnXSxcclxuICAgIFs3OSwgJ0Nvb2tpZSddLFxyXG4gICAgWzgwLCAnSGFydmV5J10sXHJcbiAgICBbODEsICdCcnVjZSddLFxyXG4gICAgWzgyLCAnSmF4J10sXHJcbiAgICBbODMsICdSZXgnXSxcclxuICAgIFs4NCwgJ0xvdWllJ10sXHJcbiAgICBbODUsICdCZW50bGV5J10sXHJcbiAgICBbODYsICdKZXQnXSxcclxuICAgIFs4NywgJ0JhbmpvJ10sXHJcbiAgICBbODgsICdCZWF1J10sXHJcbiAgICBbODksICdFbGxhJ10sXHJcbiAgICBbOTAsICdSYWxwaCddLFxyXG4gICAgWzkxLCAnTG9raSddLFxyXG4gICAgWzkyLCAnTGV4aSddLFxyXG4gICAgWzkzLCAnQ2hlc3RlciddLFxyXG4gICAgWzk0LCAnU29waGllJ10sXHJcbiAgICBbOTUsICdDaGlsbGknXSxcclxuICAgIFs5NiwgJ0JpbGxpZSddLFxyXG4gICAgWzk3LCAnTG91aXMnXSxcclxuICAgIFs5OCwgJ1Njb3V0J10sXHJcbiAgICBbOTksICdDaGFybGllJ10sXHJcbiAgICBbMTAwLCAnQ2xlbyddLFxyXG4gICAgWzEwMSwgJ1B1cmZlY3QnXSxcclxuICAgIFsxMDIsICdTcG90J10sXHJcbiAgICBbMTAzLCAnSGFycnknXSxcclxuICAgIFsxMDQsICdCb2x0J10sXHJcbl0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IENBVF9OQU1FUyA9IFBFVF9OQU1FUztcclxuXHJcbmV4cG9ydCBjb25zdCBET0dfTkFNRVMgPSBQRVRfTkFNRVM7XHJcblxyXG5leHBvcnQgY29uc3QgQ1JBQl9OQU1FUzogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KFtcclxuICAgIFsxLCAnRmVycmlzJ10sXHJcbiAgICBbMiwgJ1BpbmNoeSddLFxyXG4gICAgWzMsICdHcmFiYnknXSxcclxuICAgIFs0LCAnQmlnIFJlZCddLFxyXG4gICAgWzUsICdDcmFiYnknXSxcclxuICAgIFs2LCAnQnVkZHknXSxcclxuICAgIFs3LCAnUnVieSBSZWQnXSxcclxuICAgIFs4LCAnT3NjYXInXSxcclxuICAgIFs5LCAnTHVjeSddLFxyXG4gICAgWzEwLCAnQmFpbGV5J10sXHJcbl0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IENMSVBQWV9OQU1FUzogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KFtcclxuICAgIFsxLCAnQ2xpcHB5J10sXHJcbiAgICBbMiwgJ0thcmwgS2xhbW1lciddLFxyXG4gICAgWzMsICdDbGlwcHkgSnIuJ10sXHJcbiAgICBbNCwgJ01vbGx5J10sXHJcbiAgICBbNSwgJ0NvY28nXSxcclxuICAgIFs2LCAnQnVkZHknXSxcclxuICAgIFs3LCAnUnVieSddLFxyXG4gICAgWzgsICdPc2NhciddLFxyXG4gICAgWzksICdMdWN5J10sXHJcbiAgICBbMTAsICdCYWlsZXknXSxcclxuXSk7XHJcblxyXG5leHBvcnQgY29uc3QgVE9UT1JPX05BTUVTOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oW1xyXG4gICAgWzEsICdUb3Rvcm8nXSxcclxuICAgIFsyLCAn44OI44OI44OtJ10sXHJcbiAgICBbMywgJ01heCddLFxyXG4gICAgWzQsICdNb2xseSddLFxyXG4gICAgWzUsICdDb2NvJ10sXHJcbiAgICBbNiwgJ0J1ZGR5J10sXHJcbiAgICBbNywgJ1J1YnknXSxcclxuICAgIFs4LCAnT3NjYXInXSxcclxuICAgIFs5LCAnTHVjeSddLFxyXG4gICAgWzEwLCAnQmFpbGV5J10sXHJcbl0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNOQUtFX05BTUVTOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oW1xyXG4gICAgWzEsICdTbmVha3knXSxcclxuICAgIFsyLCAnTXIgU2xpcHBlcnknXSxcclxuICAgIFszLCAnTWF4J10sXHJcbiAgICBbNCwgJ01vbGx5J10sXHJcbiAgICBbNSwgJ0NvY28nXSxcclxuICAgIFs2LCAnQnVkZHknXSxcclxuICAgIFs3LCAnUnVieSddLFxyXG4gICAgWzgsICdPc2NhciddLFxyXG4gICAgWzksICdMdWN5J10sXHJcbiAgICBbMTAsICdCYWlsZXknXSxcclxuXSk7XHJcblxyXG5leHBvcnQgY29uc3QgRFVDS19OQU1FUzogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KFtcclxuICAgIFsxLCAnUXVhY2t5J10sXHJcbiAgICBbMiwgJ0Zsb2F0eSddLFxyXG4gICAgWzMsICdEdWNrJ10sXHJcbiAgICBbNCwgJ01vbGx5J10sXHJcbiAgICBbNSwgJ1N1bnNoaW5lJ10sXHJcbiAgICBbNiwgJ0J1ZGR5J10sXHJcbiAgICBbNywgJ0NoaXJweSddLFxyXG4gICAgWzgsICdPc2NhciddLFxyXG4gICAgWzksICdMdWN5J10sXHJcbiAgICBbMTAsICdCYWlsZXknXSxcclxuXSk7XHJcblxyXG5leHBvcnQgY29uc3QgWkFQUFlfTkFNRVM6IE1hcDxudW1iZXIsIHN0cmluZz4gPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPihbXHJcbiAgICBbMSwgJ1phcHB5J10sXHJcbiAgICBbMiwgJ1ppcHB5J10sXHJcbiAgICBbMywgJ1phcHB5IEpyLiddLFxyXG4gICAgWzQsICdab3BweSddLFxyXG4gICAgWzUsICdadXBweSddLFxyXG4gICAgWzYsICdaZXBweSddLFxyXG4gICAgWzcsICdCaWcgWiddLFxyXG4gICAgWzgsICdMaXR0bGUgeiddLFxyXG4gICAgWzksICdUaGUgRmxhc2gnXSxcclxuICAgIFsxMCwgJ1Rob3InXSxcclxuXSk7XHJcblxyXG5leHBvcnQgY29uc3QgUk9DS1lfTkFNRVM6IE1hcDxudW1iZXIsIHN0cmluZz4gPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPihbXHJcbiAgICBbMSwgJ1JvY2t5J10sXHJcbiAgICBbMiwgJ1RoZSBSb2NrJ10sXHJcbiAgICBbMywgJ1F1YXJ0enknXSxcclxuICAgIFs0LCAnUm9ja3kgSSddLFxyXG4gICAgWzUsICdSb2NreSBJSSddLFxyXG4gICAgWzYsICdSb2NreSBJSUknXSxcclxuICAgIFs3LCAnUGViYmxlcyBTci4nXSxcclxuICAgIFs4LCAnQmlnIEdyYW5pdGUnXSxcclxuICAgIFs5LCAnQm91bGRlciddLFxyXG4gICAgWzEwLCAnUm9ja2VmZWxsZXInXSxcclxuXSk7XHJcbiIsIi8vIFRoaXMgc2NyaXB0IHdpbGwgYmUgcnVuIHdpdGhpbiB0aGUgd2VidmlldyBpdHNlbGZcclxuaW1wb3J0IHtcclxuICAgIFBldFNpemUsXHJcbiAgICBQZXRDb2xvcixcclxuICAgIFBldFR5cGUsXHJcbiAgICBUaGVtZSxcclxuICAgIENvbG9yVGhlbWVLaW5kLFxyXG4gICAgV2Vidmlld01lc3NhZ2UsXHJcbn0gZnJvbSAnLi4vY29tbW9uL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICAgIGNyZWF0ZVBldCxcclxuICAgIElQZXRUeXBlLFxyXG4gICAgSW52YWxpZFBldEV4Y2VwdGlvbixcclxuICAgIFBldENvbGxlY3Rpb24sXHJcbiAgICBQZXRFbGVtZW50LFxyXG4gICAgSVBldENvbGxlY3Rpb24sXHJcbn0gZnJvbSAnLi9wZXRzJztcclxuaW1wb3J0IHtcclxuICAgIEJhbGxTdGF0ZSxcclxuICAgIENoYXNlRnJpZW5kU3RhdGUsXHJcbiAgICBQZXRFbGVtZW50U3RhdGUsXHJcbiAgICBQZXRJbnN0YW5jZVN0YXRlLFxyXG4gICAgUGV0UGFuZWxTdGF0ZSxcclxuICAgIFN0YXRlcyxcclxufSBmcm9tICcuL3N0YXRlcyc7XHJcblxyXG4vKiBUaGlzIGlzIGhvdyB0aGUgVlMgQ29kZSBBUEkgY2FuIGJlIGludm9rZWQgZnJvbSB0aGUgcGFuZWwgKi9cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gICAgaW50ZXJmYWNlIFZzY29kZVN0YXRlQXBpIHtcclxuICAgICAgICBnZXRTdGF0ZSgpOiBQZXRQYW5lbFN0YXRlOyAvLyBBUEkgaXMgYWN0dWFsbHkgQW55LCBidXQgd2Ugd2FudCBpdCB0byBiZSB0eXBlZC5cclxuICAgICAgICBzZXRTdGF0ZShzdGF0ZTogUGV0UGFuZWxTdGF0ZSk6IHZvaWQ7XHJcbiAgICAgICAgcG9zdE1lc3NhZ2UobWVzc2FnZTogV2Vidmlld01lc3NhZ2UpOiB2b2lkO1xyXG4gICAgfVxyXG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICAgICAgYWNxdWlyZVZzQ29kZUFwaSgpOiBWc2NvZGVTdGF0ZUFwaTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgdnNjb2RlID0gd2luZG93LmFjcXVpcmVWc0NvZGVBcGkoKTtcclxuXHJcbmV4cG9ydCB2YXIgYWxsUGV0czogSVBldENvbGxlY3Rpb24gPSBuZXcgUGV0Q29sbGVjdGlvbigpO1xyXG52YXIgcGV0Q291bnRlcjogbnVtYmVyO1xyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXRlQmFsbFJhZGl1cyhzaXplOiBQZXRTaXplKTogbnVtYmVyIHtcclxuICAgIGlmIChzaXplID09PSBQZXRTaXplLm5hbm8pIHtcclxuICAgICAgICByZXR1cm4gMjtcclxuICAgIH0gZWxzZSBpZiAoc2l6ZSA9PT0gUGV0U2l6ZS5tZWRpdW0pIHtcclxuICAgICAgICByZXR1cm4gNDtcclxuICAgIH0gZWxzZSBpZiAoc2l6ZSA9PT0gUGV0U2l6ZS5sYXJnZSkge1xyXG4gICAgICAgIHJldHVybiA4O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gMTsgLy8gU2hydWdcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXRlRmxvb3Ioc2l6ZTogUGV0U2l6ZSwgdGhlbWU6IFRoZW1lKTogbnVtYmVyIHtcclxuICAgIHN3aXRjaCAodGhlbWUpIHtcclxuICAgICAgICBjYXNlIFRoZW1lLmZvcmVzdDpcclxuICAgICAgICAgICAgc3dpdGNoIChzaXplKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFBldFNpemUubWVkaXVtOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA0MDtcclxuICAgICAgICAgICAgICAgIGNhc2UgUGV0U2l6ZS5sYXJnZTpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gNjU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFBldFNpemUubmFubzpcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBUaGVtZS5jYXN0bGU6XHJcbiAgICAgICAgICAgIHN3aXRjaCAoc2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBQZXRTaXplLm1lZGl1bTpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gODA7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFBldFNpemUubGFyZ2U6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEyMDtcclxuICAgICAgICAgICAgICAgIGNhc2UgUGV0U2l6ZS5uYW5vOlxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDU7XHJcbiAgICAgICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVNb3VzZU92ZXIoZTogTW91c2VFdmVudCkge1xyXG4gICAgdmFyIGVsID0gZS5jdXJyZW50VGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgYWxsUGV0cy5wZXRzKCkuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmNvbGxpc2lvbiA9PT0gZWwpIHtcclxuICAgICAgICAgICAgaWYgKCFlbGVtZW50LnBldC5jYW5Td2lwZSgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxlbWVudC5wZXQuc3dpcGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3RhcnRBbmltYXRpb25zKGNvbGxpc2lvbjogSFRNTERpdkVsZW1lbnQsIHBldDogSVBldFR5cGUpIHtcclxuICAgIGNvbGxpc2lvbi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBoYW5kbGVNb3VzZU92ZXIpO1xyXG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIHZhciB1cGRhdGVzID0gYWxsUGV0cy5zZWVrTmV3RnJpZW5kcygpO1xyXG4gICAgICAgIHVwZGF0ZXMuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xyXG4gICAgICAgICAgICB2c2NvZGUucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgICAgdGV4dDogbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICdpbmZvJyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcGV0Lm5leHRGcmFtZSgpO1xyXG4gICAgICAgIHNhdmVTdGF0ZSgpO1xyXG4gICAgfSwgMTAwKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkUGV0VG9QYW5lbChcclxuICAgIHBldFR5cGU6IFBldFR5cGUsXHJcbiAgICBiYXNlUGV0VXJpOiBzdHJpbmcsXHJcbiAgICBwZXRDb2xvcjogUGV0Q29sb3IsXHJcbiAgICBwZXRTaXplOiBQZXRTaXplLFxyXG4gICAgbGVmdDogbnVtYmVyLFxyXG4gICAgYm90dG9tOiBudW1iZXIsXHJcbiAgICBmbG9vcjogbnVtYmVyLFxyXG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxyXG4pOiBQZXRFbGVtZW50IHtcclxuICAgIHZhciBwZXRTcHJpdGVFbGVtZW50OiBIVE1MSW1hZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICBwZXRTcHJpdGVFbGVtZW50LmNsYXNzTmFtZSA9ICdwZXQnO1xyXG4gICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwZXRzQ29udGFpbmVyJykgYXMgSFRNTERpdkVsZW1lbnQpLmFwcGVuZENoaWxkKFxyXG4gICAgICAgIHBldFNwcml0ZUVsZW1lbnQsXHJcbiAgICApO1xyXG5cclxuICAgIHZhciBjb2xsaXNpb25FbGVtZW50OiBIVE1MRGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgY29sbGlzaW9uRWxlbWVudC5jbGFzc05hbWUgPSAnY29sbGlzaW9uJztcclxuICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGV0c0NvbnRhaW5lcicpIGFzIEhUTUxEaXZFbGVtZW50KS5hcHBlbmRDaGlsZChcclxuICAgICAgICBjb2xsaXNpb25FbGVtZW50LFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCByb290ID0gYmFzZVBldFVyaSArICcvJyArIHBldFR5cGUgKyAnLycgKyBwZXRDb2xvcjtcclxuICAgIGNvbnNvbGUubG9nKCdDcmVhdGluZyBuZXcgcGV0IDogJywgcGV0VHlwZSwgcm9vdCk7XHJcbiAgICB2YXIgbmV3UGV0ID0gY3JlYXRlUGV0KFxyXG4gICAgICAgIHBldFR5cGUsXHJcbiAgICAgICAgcGV0U3ByaXRlRWxlbWVudCxcclxuICAgICAgICBjb2xsaXNpb25FbGVtZW50LFxyXG4gICAgICAgIHBldFNpemUsXHJcbiAgICAgICAgbGVmdCxcclxuICAgICAgICBib3R0b20sXHJcbiAgICAgICAgcm9vdCxcclxuICAgICAgICBmbG9vcixcclxuICAgICAgICBuYW1lLFxyXG4gICAgKTtcclxuICAgIHBldENvdW50ZXIrKztcclxuICAgIHN0YXJ0QW5pbWF0aW9ucyhjb2xsaXNpb25FbGVtZW50LCBuZXdQZXQpO1xyXG4gICAgcmV0dXJuIG5ldyBQZXRFbGVtZW50KFxyXG4gICAgICAgIHBldFNwcml0ZUVsZW1lbnQsXHJcbiAgICAgICAgY29sbGlzaW9uRWxlbWVudCxcclxuICAgICAgICBuZXdQZXQsXHJcbiAgICAgICAgcGV0Q29sb3IsXHJcbiAgICAgICAgcGV0VHlwZSxcclxuICAgICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZVBldEZyb21QYW5lbChwZXQ6IFBldEVsZW1lbnQpOiBhbnkge1xyXG4gICAgcGV0LmNvbGxpc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBoYW5kbGVNb3VzZU92ZXIpO1xyXG4gICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwZXRzQ29udGFpbmVyJykgYXMgSFRNTERpdkVsZW1lbnQpLnJlbW92ZUNoaWxkKFxyXG4gICAgICAgIHBldC5jb2xsaXNpb24sXHJcbiAgICApO1xyXG4gICAgcGV0LmNvbGxpc2lvbi5yZW1vdmUoKTtcclxuICAgIHBldC5yZW1vdmUoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVTdGF0ZSgpIHtcclxuICAgIHZhciBzdGF0ZSA9IG5ldyBQZXRQYW5lbFN0YXRlKCk7XHJcbiAgICBzdGF0ZS5wZXRTdGF0ZXMgPSBuZXcgQXJyYXkoKTtcclxuXHJcbiAgICBhbGxQZXRzLnBldHMoKS5mb3JFYWNoKChwZXRJdGVtKSA9PiB7XHJcbiAgICAgICAgc3RhdGUucGV0U3RhdGVzIS5wdXNoKHtcclxuICAgICAgICAgICAgcGV0TmFtZTogcGV0SXRlbS5wZXQubmFtZSgpLFxyXG4gICAgICAgICAgICBwZXRDb2xvcjogcGV0SXRlbS5jb2xvcixcclxuICAgICAgICAgICAgcGV0VHlwZTogcGV0SXRlbS50eXBlLFxyXG4gICAgICAgICAgICBwZXRTdGF0ZTogcGV0SXRlbS5wZXQuZ2V0U3RhdGUoKSxcclxuICAgICAgICAgICAgcGV0RnJpZW5kOiBwZXRJdGVtLnBldC5mcmllbmQoKVxyXG4gICAgICAgICAgICAgICAgPyBwZXRJdGVtLnBldC5mcmllbmQoKS5uYW1lKClcclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBlbExlZnQ6IHBldEl0ZW0uZWwuc3R5bGUubGVmdCxcclxuICAgICAgICAgICAgZWxCb3R0b206IHBldEl0ZW0uZWwuc3R5bGUuYm90dG9tLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBzdGF0ZS5wZXRDb3VudGVyID0gcGV0Q291bnRlcjtcclxuICAgIHZzY29kZS5zZXRTdGF0ZShzdGF0ZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlY292ZXJTdGF0ZShiYXNlUGV0VXJpOiBzdHJpbmcsIHBldFNpemU6IFBldFNpemUsIGZsb29yOiBudW1iZXIpIHtcclxuICAgIHZhciBzdGF0ZSA9IHZzY29kZS5nZXRTdGF0ZSgpO1xyXG5cclxuICAgIGlmIChzdGF0ZS5wZXRDb3VudGVyID09PSB1bmRlZmluZWQgfHwgaXNOYU4oc3RhdGUucGV0Q291bnRlcikpIHtcclxuICAgICAgICBwZXRDb3VudGVyID0gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGV0Q291bnRlciA9IHN0YXRlLnBldENvdW50ZXIhO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByZWNvdmVyeU1hcDogTWFwPElQZXRUeXBlLCBQZXRFbGVtZW50U3RhdGU+ID0gbmV3IE1hcCgpO1xyXG4gICAgc3RhdGUucGV0U3RhdGVzIS5mb3JFYWNoKChwKSA9PiB7XHJcbiAgICAgICAgLy8gRml4ZXMgYSBidWcgcmVsYXRlZCB0byBkdWNrIGFuaW1hdGlvbnNcclxuICAgICAgICBpZiAoKHAucGV0VHlwZSBhcyBzdHJpbmcpID09PSAncnViYmVyIGR1Y2snKSB7XHJcbiAgICAgICAgICAgIChwLnBldFR5cGUgYXMgc3RyaW5nKSA9ICdydWJiZXItZHVjayc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgbmV3UGV0ID0gYWRkUGV0VG9QYW5lbChcclxuICAgICAgICAgICAgICAgIHAucGV0VHlwZSEsXHJcbiAgICAgICAgICAgICAgICBiYXNlUGV0VXJpLFxyXG4gICAgICAgICAgICAgICAgcC5wZXRDb2xvciEsXHJcbiAgICAgICAgICAgICAgICBwZXRTaXplLFxyXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQocC5lbExlZnQhKSxcclxuICAgICAgICAgICAgICAgIHBhcnNlSW50KHAuZWxCb3R0b20hKSxcclxuICAgICAgICAgICAgICAgIGZsb29yLFxyXG4gICAgICAgICAgICAgICAgcC5wZXROYW1lLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBhbGxQZXRzLnB1c2gobmV3UGV0KTtcclxuICAgICAgICAgICAgcmVjb3ZlcnlNYXAuc2V0KG5ld1BldC5wZXQsIHApO1xyXG4gICAgICAgIH0gY2F0Y2ggKEludmFsaWRQZXRFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAnU3RhdGUgaGFkIGludmFsaWQgcGV0ICgnICsgcC5wZXRUeXBlICsgJyksIGRpc2NhcmRpbmcuJyxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJlY292ZXJ5TWFwLmZvckVhY2goKHN0YXRlLCBwZXQpID0+IHtcclxuICAgICAgICAvLyBSZWNvdmVyIHByZXZpb3VzIHN0YXRlLlxyXG4gICAgICAgIHBldC5yZWNvdmVyU3RhdGUoc3RhdGUucGV0U3RhdGUhKTtcclxuXHJcbiAgICAgICAgLy8gUmVzb2x2ZSBmcmllbmQgcmVsYXRpb25zaGlwc1xyXG4gICAgICAgIHZhciBmcmllbmQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKHN0YXRlLnBldEZyaWVuZCkge1xyXG4gICAgICAgICAgICBmcmllbmQgPSBhbGxQZXRzLmxvY2F0ZShzdGF0ZS5wZXRGcmllbmQpO1xyXG4gICAgICAgICAgICBpZiAoZnJpZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBwZXQucmVjb3ZlckZyaWVuZChmcmllbmQucGV0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByYW5kb21TdGFydFBvc2l0aW9uKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKHdpbmRvdy5pbm5lcldpZHRoICogMC43KSk7XHJcbn1cclxuXHJcbmxldCBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcclxuXHJcbmZ1bmN0aW9uIGluaXRDYW52YXMoKSB7XHJcbiAgICBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGV0Q2FudmFzJykgYXMgSFRNTENhbnZhc0VsZW1lbnQ7XHJcbiAgICBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XHJcbiAgICBjdHguY2FudmFzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICBjdHguY2FudmFzLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxufVxyXG5cclxuLy8gSXQgY2Fubm90IGFjY2VzcyB0aGUgbWFpbiBWUyBDb2RlIEFQSXMgZGlyZWN0bHkuXHJcbmV4cG9ydCBmdW5jdGlvbiBwZXRQYW5lbEFwcChcclxuICAgIGJhc2VQZXRVcmk6IHN0cmluZyxcclxuICAgIHRoZW1lOiBUaGVtZSxcclxuICAgIHRoZW1lS2luZDogQ29sb3JUaGVtZUtpbmQsXHJcbiAgICBwZXRDb2xvcjogUGV0Q29sb3IsXHJcbiAgICBwZXRTaXplOiBQZXRTaXplLFxyXG4gICAgcGV0VHlwZTogUGV0VHlwZSxcclxuKSB7XHJcbiAgICBjb25zdCBiYWxsUmFkaXVzOiBudW1iZXIgPSBjYWxjdWxhdGVCYWxsUmFkaXVzKHBldFNpemUpO1xyXG4gICAgdmFyIGZsb29yID0gMDtcclxuICAgIC8vIEFwcGx5IFRoZW1lIGJhY2tncm91bmRzXHJcbiAgICBpZiAodGhlbWUgIT09IFRoZW1lLm5vbmUpIHtcclxuICAgICAgICB2YXIgX3RoZW1lS2luZCA9ICcnO1xyXG4gICAgICAgIHN3aXRjaCAodGhlbWVLaW5kKSB7XHJcbiAgICAgICAgICAgIGNhc2UgQ29sb3JUaGVtZUtpbmQuZGFyazpcclxuICAgICAgICAgICAgICAgIF90aGVtZUtpbmQgPSAnZGFyayc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDb2xvclRoZW1lS2luZC5saWdodDpcclxuICAgICAgICAgICAgICAgIF90aGVtZUtpbmQgPSAnbGlnaHQnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQ29sb3JUaGVtZUtpbmQuaGlnaENvbnRyYXN0OlxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgX3RoZW1lS2luZCA9ICdsaWdodCc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybCgnJHtiYXNlUGV0VXJpfS9iYWNrZ3JvdW5kcy8ke3RoZW1lfS9iYWNrZ3JvdW5kLSR7X3RoZW1lS2luZH0tJHtwZXRTaXplfS5wbmcnKWA7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICAgICAgICdmb3JlZ3JvdW5kJyxcclxuICAgICAgICApIS5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKCcke2Jhc2VQZXRVcml9L2JhY2tncm91bmRzLyR7dGhlbWV9L2ZvcmVncm91bmQtJHtfdGhlbWVLaW5kfS0ke3BldFNpemV9LnBuZycpYDtcclxuXHJcbiAgICAgICAgZmxvb3IgPSBjYWxjdWxhdGVGbG9vcihwZXRTaXplLCB0aGVtZSk7IC8vIFRoZW1lcyBoYXZlIHBldHMgYXQgYSBzcGVjaWZpZWQgaGVpZ2h0IGZyb20gdGhlIGdyb3VuZFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICcnO1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JlZ3JvdW5kJykhLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vLyBCb3VuY2luZyBiYWxsIGNvbXBvbmVudHMsIGNyZWRpdCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjk5ODIzNDNcclxuICAgIGNvbnN0IGdyYXZpdHk6IG51bWJlciA9IDAuMixcclxuICAgICAgICBkYW1waW5nOiBudW1iZXIgPSAwLjksXHJcbiAgICAgICAgdHJhY3Rpb246IG51bWJlciA9IDAuODtcclxuICAgIHZhciBiYWxsU3RhdGU6IEJhbGxTdGF0ZTtcclxuXHJcbiAgICBmdW5jdGlvbiByZXNldEJhbGwoKSB7XHJcbiAgICAgICAgY2FudmFzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIGJhbGxTdGF0ZSA9IG5ldyBCYWxsU3RhdGUoMTAwLCAxMDAsIDIsIDUpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRocm93QmFsbCgpIHtcclxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XHJcbiAgICAgICAgaWYgKCFiYWxsU3RhdGUucGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aHJvd0JhbGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhbGxTdGF0ZS5jeCArIGJhbGxSYWRpdXMgPj0gY2FudmFzLndpZHRoKSB7XHJcbiAgICAgICAgICAgIGJhbGxTdGF0ZS52eCA9IC1iYWxsU3RhdGUudnggKiBkYW1waW5nO1xyXG4gICAgICAgICAgICBiYWxsU3RhdGUuY3ggPSBjYW52YXMud2lkdGggLSBiYWxsUmFkaXVzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYmFsbFN0YXRlLmN4IC0gYmFsbFJhZGl1cyA8PSAwKSB7XHJcbiAgICAgICAgICAgIGJhbGxTdGF0ZS52eCA9IC1iYWxsU3RhdGUudnggKiBkYW1waW5nO1xyXG4gICAgICAgICAgICBiYWxsU3RhdGUuY3ggPSBiYWxsUmFkaXVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYmFsbFN0YXRlLmN5ICsgYmFsbFJhZGl1cyArIGZsb29yID49IGNhbnZhcy5oZWlnaHQpIHtcclxuICAgICAgICAgICAgYmFsbFN0YXRlLnZ5ID0gLWJhbGxTdGF0ZS52eSAqIGRhbXBpbmc7XHJcbiAgICAgICAgICAgIGJhbGxTdGF0ZS5jeSA9IGNhbnZhcy5oZWlnaHQgLSBiYWxsUmFkaXVzIC0gZmxvb3I7XHJcbiAgICAgICAgICAgIC8vIHRyYWN0aW9uIGhlcmVcclxuICAgICAgICAgICAgYmFsbFN0YXRlLnZ4ICo9IHRyYWN0aW9uO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYmFsbFN0YXRlLmN5IC0gYmFsbFJhZGl1cyA8PSAwKSB7XHJcbiAgICAgICAgICAgIGJhbGxTdGF0ZS52eSA9IC1iYWxsU3RhdGUudnkgKiBkYW1waW5nO1xyXG4gICAgICAgICAgICBiYWxsU3RhdGUuY3kgPSBiYWxsUmFkaXVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYmFsbFN0YXRlLnZ5ICs9IGdyYXZpdHk7XHJcblxyXG4gICAgICAgIGJhbGxTdGF0ZS5jeCArPSBiYWxsU3RhdGUudng7XHJcbiAgICAgICAgYmFsbFN0YXRlLmN5ICs9IGJhbGxTdGF0ZS52eTtcclxuXHJcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIGN0eC5hcmMoYmFsbFN0YXRlLmN4LCBiYWxsU3RhdGUuY3ksIGJhbGxSYWRpdXMsIDAsIDIgKiBNYXRoLlBJLCBmYWxzZSk7XHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMmVkODUxJztcclxuICAgICAgICBjdHguZmlsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdTdGFydGluZyBwZXQgc2Vzc2lvbicsIHBldENvbG9yLCBiYXNlUGV0VXJpLCBwZXRUeXBlKTtcclxuICAgIC8vIE5ldyBzZXNzaW9uXHJcbiAgICB2YXIgc3RhdGUgPSB2c2NvZGUuZ2V0U3RhdGUoKTtcclxuICAgIGlmICghc3RhdGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnTm8gc3RhdGUsIHN0YXJ0aW5nIGEgbmV3IHNlc3Npb24uJyk7XHJcbiAgICAgICAgcGV0Q291bnRlciA9IDE7XHJcbiAgICAgICAgYWxsUGV0cy5wdXNoKFxyXG4gICAgICAgICAgICBhZGRQZXRUb1BhbmVsKFxyXG4gICAgICAgICAgICAgICAgcGV0VHlwZSxcclxuICAgICAgICAgICAgICAgIGJhc2VQZXRVcmksXHJcbiAgICAgICAgICAgICAgICBwZXRDb2xvcixcclxuICAgICAgICAgICAgICAgIHBldFNpemUsXHJcbiAgICAgICAgICAgICAgICByYW5kb21TdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICAgICAgICBmbG9vcixcclxuICAgICAgICAgICAgICAgIGZsb29yLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgc2F2ZVN0YXRlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdSZWNvdmVyaW5nIHN0YXRlIC0gJywgc3RhdGUpO1xyXG4gICAgICAgIHJlY292ZXJTdGF0ZShiYXNlUGV0VXJpLCBwZXRTaXplLCBmbG9vcik7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdENhbnZhcygpO1xyXG5cclxuICAgIC8vIEhhbmRsZSBtZXNzYWdlcyBzZW50IGZyb20gdGhlIGV4dGVuc2lvbiB0byB0aGUgd2Vidmlld1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoZXZlbnQpOiB2b2lkID0+IHtcclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXZlbnQuZGF0YTsgLy8gVGhlIGpzb24gZGF0YSB0aGF0IHRoZSBleHRlbnNpb24gc2VudFxyXG4gICAgICAgIHN3aXRjaCAobWVzc2FnZS5jb21tYW5kKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3Rocm93LWJhbGwnOlxyXG4gICAgICAgICAgICAgICAgcmVzZXRCYWxsKCk7XHJcbiAgICAgICAgICAgICAgICB0aHJvd0JhbGwoKTtcclxuICAgICAgICAgICAgICAgIGFsbFBldHMucGV0cygpLmZvckVhY2goKHBldEVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBldEVsLnBldC5jYW5DaGFzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBldEVsLnBldC5jaGFzZShiYWxsU3RhdGUsIGNhbnZhcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc3Bhd24tcGV0JzpcclxuICAgICAgICAgICAgICAgIGFsbFBldHMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBhZGRQZXRUb1BhbmVsKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VQZXRVcmksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBldFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbVN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmxvb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsb29yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBzYXZlU3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkZWxldGUtcGV0JzpcclxuICAgICAgICAgICAgICAgIHZhciBwZXQgPSBhbGxQZXRzLmxvY2F0ZShtZXNzYWdlLmlkKTtcclxuICAgICAgICAgICAgICAgIGlmIChwZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBwZXQucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2F2ZVN0YXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncmVzZXQtcGV0JzpcclxuICAgICAgICAgICAgICAgIGFsbFBldHMucGV0cygpLmZvckVhY2goKHBldCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBldC5lbC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICBwZXQuY29sbGlzaW9uLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBhbGxQZXRzLnJlc2V0KCk7XHJcbiAgICAgICAgICAgICAgICBhbGxQZXRzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgYWRkUGV0VG9QYW5lbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGV0VHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVBldFVyaSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGV0Q29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBldFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbVN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmxvb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsb29yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBwZXRDb3VudGVyID0gMTtcclxuICAgICAgICAgICAgICAgIHNhdmVTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhdXNlLXBldCc6XHJcbiAgICAgICAgICAgICAgICBwZXRDb3VudGVyID0gMTtcclxuICAgICAgICAgICAgICAgIHNhdmVTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGZ1bmN0aW9uICgpIHtcclxuICAgIGluaXRDYW52YXMoKTtcclxufSk7XHJcbiIsImltcG9ydCB7IFBldENvbG9yLCBQZXRTaXplLCBQZXRTcGVlZCwgUGV0VHlwZSB9IGZyb20gJy4uL2NvbW1vbi90eXBlcyc7XHJcbmltcG9ydCB7IElTZXF1ZW5jZVRyZWUgfSBmcm9tICcuL3NlcXVlbmNlcyc7XHJcbmltcG9ydCB7XHJcbiAgICBJU3RhdGUsXHJcbiAgICBTdGF0ZXMsXHJcbiAgICByZXNvbHZlU3RhdGUsXHJcbiAgICBIb3Jpem9udGFsRGlyZWN0aW9uLFxyXG4gICAgQ2hhc2VTdGF0ZSxcclxuICAgIEJhbGxTdGF0ZSxcclxuICAgIEZyYW1lUmVzdWx0LFxyXG4gICAgUGV0SW5zdGFuY2VTdGF0ZSxcclxuICAgIGlzU3RhdGVBYm92ZUdyb3VuZCxcclxufSBmcm9tICcuL3N0YXRlcyc7XHJcbmltcG9ydCB7XHJcbiAgICBDQVRfTkFNRVMsXHJcbiAgICBET0dfTkFNRVMsXHJcbiAgICBDUkFCX05BTUVTLFxyXG4gICAgU05BS0VfTkFNRVMsXHJcbiAgICBDTElQUFlfTkFNRVMsXHJcbiAgICBUT1RPUk9fTkFNRVMsXHJcbiAgICBEVUNLX05BTUVTLFxyXG4gICAgWkFQUFlfTkFNRVMsXHJcbiAgICBST0NLWV9OQU1FUyxcclxufSBmcm9tICcuLi9jb21tb24vbmFtZXMnO1xyXG5pbXBvcnQgeyBQZXRTcGVjaWZpY2F0aW9uIH0gZnJvbSAnLi4vZXh0ZW5zaW9uL2V4dGVuc2lvbic7XHJcblxyXG5leHBvcnQgY2xhc3MgSW52YWxpZFN0YXRlRXhjZXB0aW9uIHt9XHJcblxyXG5leHBvcnQgY2xhc3MgUGV0RWxlbWVudCB7XHJcbiAgICBlbDogSFRNTEltYWdlRWxlbWVudDtcclxuICAgIGNvbGxpc2lvbjogSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBwZXQ6IElQZXRUeXBlO1xyXG4gICAgY29sb3I6IFBldENvbG9yO1xyXG4gICAgdHlwZTogUGV0VHlwZTtcclxuICAgIHJlbW92ZSgpIHtcclxuICAgICAgICB0aGlzLmVsLnJlbW92ZSgpO1xyXG4gICAgICAgIHRoaXMuY29sbGlzaW9uLnJlbW92ZSgpO1xyXG4gICAgICAgIHRoaXMuY29sb3IgPSBQZXRDb2xvci5udWxsO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IFBldFR5cGUubnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBlbDogSFRNTEltYWdlRWxlbWVudCxcclxuICAgICAgICBjb2xsaXNpb246IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgIHBldDogSVBldFR5cGUsXHJcbiAgICAgICAgY29sb3I6IFBldENvbG9yLFxyXG4gICAgICAgIHR5cGU6IFBldFR5cGUsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmVsID0gZWw7XHJcbiAgICAgICAgdGhpcy5jb2xsaXNpb24gPSBjb2xsaXNpb247XHJcbiAgICAgICAgdGhpcy5wZXQgPSBwZXQ7XHJcbiAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBldENvbGxlY3Rpb24ge1xyXG4gICAgcGV0cygpOiBBcnJheTxQZXRFbGVtZW50PjtcclxuICAgIHB1c2gocGV0OiBQZXRFbGVtZW50KTogdm9pZDtcclxuICAgIHJlc2V0KCk6IHZvaWQ7XHJcbiAgICBzZWVrTmV3RnJpZW5kcygpOiBzdHJpbmdbXTtcclxuICAgIGxvY2F0ZShuYW1lOiBzdHJpbmcpOiBQZXRFbGVtZW50IHwgdW5kZWZpbmVkO1xyXG4gICAgcmVtb3ZlKG5hbWU6IHN0cmluZyk6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQZXRDb2xsZWN0aW9uIGltcGxlbWVudHMgSVBldENvbGxlY3Rpb24ge1xyXG4gICAgX3BldHM6IEFycmF5PFBldEVsZW1lbnQ+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuX3BldHMgPSBuZXcgQXJyYXkoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGV0cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcGV0cztcclxuICAgIH1cclxuXHJcbiAgICBwdXNoKHBldDogUGV0RWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMuX3BldHMucHVzaChwZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMuX3BldHMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBsb2NhdGUobmFtZTogc3RyaW5nKTogUGV0RWxlbWVudCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BldHMuZmluZCgoY29sbGVjdGlvbiwgdmFsdWUsIG9iaikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5wZXQubmFtZSgpID09PSBuYW1lO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcGV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcGV0c1tpXS5wZXQubmFtZSgpID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wZXRzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wZXRzLmZvckVhY2goKHBldCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGV0LnBldC5uYW1lKCkgPT09IG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHBldC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlZWtOZXdGcmllbmRzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICBpZiAodGhpcy5fcGV0cy5sZW5ndGggPD0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfSAvLyBZb3UgY2FuJ3QgYmUgZnJpZW5kcyB3aXRoIHlvdXJzZWxmLlxyXG4gICAgICAgIHZhciBtZXNzYWdlcyA9IG5ldyBBcnJheTxzdHJpbmc+KDApO1xyXG4gICAgICAgIHRoaXMuX3BldHMuZm9yRWFjaCgocGV0SW5Db2xsZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwZXRJbkNvbGxlY3Rpb24ucGV0Lmhhc0ZyaWVuZCgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gLy8gSSBhbHJlYWR5IGhhdmUgYSBmcmllbmQhXHJcbiAgICAgICAgICAgIHRoaXMuX3BldHMuZm9yRWFjaCgocG90ZW50aWFsRnJpZW5kKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocG90ZW50aWFsRnJpZW5kLnBldC5oYXNGcmllbmQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gLy8gQWxyZWFkeSBoYXMgYSBmcmllbmQuIHNvcnJ5LlxyXG4gICAgICAgICAgICAgICAgaWYgKCFwb3RlbnRpYWxGcmllbmQucGV0LmNhbkNoYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9IC8vIFBldCBpcyBidXN5IGRvaW5nIHNvbWV0aGluZyBlbHNlLlxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbEZyaWVuZC5wZXQubGVmdCgpID4gcGV0SW5Db2xsZWN0aW9uLnBldC5sZWZ0KCkgJiZcclxuICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxGcmllbmQucGV0LmxlZnQoKSA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBldEluQ29sbGVjdGlvbi5wZXQubGVmdCgpICsgcGV0SW5Db2xsZWN0aW9uLnBldC53aWR0aCgpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBmb3VuZCBhIHBvc3NpYmxlIG5ldyBmcmllbmQuLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXRJbkNvbGxlY3Rpb24ucGV0Lm5hbWUoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJyB3YW50cyB0byBiZSBmcmllbmRzIHdpdGggJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFsRnJpZW5kLnBldC5uYW1lKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcuJyxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGV0SW5Db2xsZWN0aW9uLnBldC5tYWtlRnJpZW5kc1dpdGgocG90ZW50aWFsRnJpZW5kLnBldClcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3BldEluQ29sbGVjdGlvbi5wZXQubmFtZSgpfSAoJHtwZXRJbkNvbGxlY3Rpb24ucGV0LmVtb2ppKCl9KTogSSdtIG5vdyBmcmllbmRzIOKdpO+4jyB3aXRoICR7cG90ZW50aWFsRnJpZW5kLnBldC5uYW1lKCl9ICgke3BvdGVudGlhbEZyaWVuZC5wZXQuZW1vamkoKX0pYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBtZXNzYWdlcztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGV0VHlwZSB7XHJcbiAgICBuZXh0RnJhbWUoKTogdm9pZDtcclxuXHJcbiAgICAvLyBTcGVjaWFsIG1ldGhvZHMgZm9yIGFjdGlvbnNcclxuICAgIGNhblN3aXBlKCk6IGJvb2xlYW47XHJcbiAgICBjYW5DaGFzZSgpOiBib29sZWFuO1xyXG4gICAgc3dpcGUoKTogdm9pZDtcclxuICAgIGNoYXNlKGJhbGxTdGF0ZTogQmFsbFN0YXRlLCBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KTogdm9pZDtcclxuICAgIHNwZWVkKCk6IG51bWJlcjtcclxuICAgIGlzTW92aW5nKCk6IGJvb2xlYW47XHJcblxyXG4gICAgLy8gU3RhdGUgQVBJXHJcbiAgICBnZXRTdGF0ZSgpOiBQZXRJbnN0YW5jZVN0YXRlO1xyXG4gICAgcmVjb3ZlclN0YXRlKHN0YXRlOiBQZXRJbnN0YW5jZVN0YXRlKTogdm9pZDtcclxuICAgIHJlY292ZXJGcmllbmQoZnJpZW5kOiBJUGV0VHlwZSk6IHZvaWQ7XHJcblxyXG4gICAgLy8gUG9zaXRpb25pbmdcclxuICAgIGJvdHRvbSgpOiBudW1iZXI7XHJcbiAgICBsZWZ0KCk6IG51bWJlcjtcclxuICAgIHBvc2l0aW9uQm90dG9tKGJvdHRvbTogbnVtYmVyKTogdm9pZDtcclxuICAgIHBvc2l0aW9uTGVmdChsZWZ0OiBudW1iZXIpOiB2b2lkO1xyXG4gICAgd2lkdGgoKTogbnVtYmVyO1xyXG4gICAgZmxvb3IoKTogbnVtYmVyO1xyXG5cclxuICAgIC8vIEZyaWVuZHMgQVBJXHJcbiAgICBuYW1lKCk6IHN0cmluZztcclxuICAgIGVtb2ppKCk6IHN0cmluZztcclxuICAgIGhhc0ZyaWVuZCgpOiBib29sZWFuO1xyXG4gICAgZnJpZW5kKCk6IElQZXRUeXBlO1xyXG4gICAgbWFrZUZyaWVuZHNXaXRoKGZyaWVuZDogSVBldFR5cGUpOiBib29sZWFuO1xyXG4gICAgaXNQbGF5aW5nKCk6IGJvb2xlYW47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGF0ZVNwcml0ZVdpZHRoKHNpemU6IFBldFNpemUpOiBudW1iZXIge1xyXG4gICAgaWYgKHNpemUgPT09IFBldFNpemUubmFubykge1xyXG4gICAgICAgIHJldHVybiAzMDtcclxuICAgIH0gZWxzZSBpZiAoc2l6ZSA9PT0gUGV0U2l6ZS5tZWRpdW0pIHtcclxuICAgICAgICByZXR1cm4gNTU7XHJcbiAgICB9IGVsc2UgaWYgKHNpemUgPT09IFBldFNpemUubGFyZ2UpIHtcclxuICAgICAgICByZXR1cm4gMTEwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gMzA7IC8vIFNocnVnXHJcbiAgICB9XHJcbn1cclxuXHJcbmFic3RyYWN0IGNsYXNzIEJhc2VQZXRUeXBlIGltcGxlbWVudHMgSVBldFR5cGUge1xyXG4gICAgbGFiZWw6IHN0cmluZyA9ICdiYXNlJztcclxuICAgIHN0YXRpYyBjb3VudDogbnVtYmVyID0gMDtcclxuICAgIHNlcXVlbmNlOiBJU2VxdWVuY2VUcmVlID0ge1xyXG4gICAgICAgIHN0YXJ0aW5nU3RhdGU6IFN0YXRlcy5zaXRJZGxlLFxyXG4gICAgICAgIHNlcXVlbmNlU3RhdGVzOiBbXSxcclxuICAgIH07XHJcbiAgICBjdXJyZW50U3RhdGU6IElTdGF0ZTtcclxuICAgIGN1cnJlbnRTdGF0ZUVudW06IFN0YXRlcztcclxuICAgIGhvbGRTdGF0ZTogSVN0YXRlIHwgdW5kZWZpbmVkO1xyXG4gICAgaG9sZFN0YXRlRW51bTogU3RhdGVzIHwgdW5kZWZpbmVkO1xyXG4gICAgcHJpdmF0ZSBlbDogSFRNTEltYWdlRWxlbWVudDtcclxuICAgIHByaXZhdGUgY29sbGlzaW9uOiBIVE1MRGl2RWxlbWVudDtcclxuICAgIHByaXZhdGUgX2xlZnQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgX2JvdHRvbTogbnVtYmVyO1xyXG4gICAgcGV0Um9vdDogc3RyaW5nO1xyXG4gICAgX2Zsb29yOiBudW1iZXI7XHJcbiAgICBfZnJpZW5kOiBJUGV0VHlwZSB8IHVuZGVmaW5lZDtcclxuICAgIHByaXZhdGUgX25hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgX3NwZWVkOiBudW1iZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgc3ByaXRlRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCxcclxuICAgICAgICBjb2xsaXNpb25FbGVtZW50OiBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICBzaXplOiBQZXRTaXplLFxyXG4gICAgICAgIGxlZnQ6IG51bWJlcixcclxuICAgICAgICBib3R0b206IG51bWJlcixcclxuICAgICAgICBwZXRSb290OiBzdHJpbmcsXHJcbiAgICAgICAgZmxvb3I6IG51bWJlcixcclxuICAgICAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgc3BlZWQ6IG51bWJlcixcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuZWwgPSBzcHJpdGVFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuY29sbGlzaW9uID0gY29sbGlzaW9uRWxlbWVudDtcclxuICAgICAgICB0aGlzLnBldFJvb3QgPSBwZXRSb290O1xyXG4gICAgICAgIHRoaXMuX2Zsb29yID0gZmxvb3I7XHJcbiAgICAgICAgdGhpcy5fbGVmdCA9IGxlZnQ7XHJcbiAgICAgICAgdGhpcy5fYm90dG9tID0gYm90dG9tO1xyXG4gICAgICAgIHRoaXMuaW5pdFNwcml0ZShzaXplLCBsZWZ0LCBib3R0b20pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlRW51bSA9IHRoaXMuc2VxdWVuY2Uuc3RhcnRpbmdTdGF0ZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHJlc29sdmVTdGF0ZSh0aGlzLmN1cnJlbnRTdGF0ZUVudW0sIHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLl9zcGVlZCA9IHNwZWVkO1xyXG5cclxuICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIHN0YXRpYyBjb3VudCBvZiB0aGUgUGV0IGNsYXNzIHRoYXQgdGhlIGNvbnN0cnVjdG9yIGJlbG9uZ3MgdG9cclxuICAgICAgICAodGhpcy5jb25zdHJ1Y3RvciBhcyBhbnkpLmNvdW50ICs9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFNwcml0ZShwZXRTaXplOiBQZXRTaXplLCBsZWZ0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XHJcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5ib3R0b20gPSBgJHtib3R0b219cHhgO1xyXG4gICAgICAgIHRoaXMuZWwuc3R5bGUud2lkdGggPSAnYXV0byc7XHJcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XHJcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5tYXhXaWR0aCA9IGAke2NhbGN1bGF0ZVNwcml0ZVdpZHRoKHBldFNpemUpfXB4YDtcclxuICAgICAgICB0aGlzLmVsLnN0eWxlLm1heEhlaWdodCA9IGAke2NhbGN1bGF0ZVNwcml0ZVdpZHRoKHBldFNpemUpfXB4YDtcclxuICAgICAgICB0aGlzLmNvbGxpc2lvbi5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XHJcbiAgICAgICAgdGhpcy5jb2xsaXNpb24uc3R5bGUuYm90dG9tID0gYCR7Ym90dG9tfXB4YDtcclxuICAgICAgICB0aGlzLmNvbGxpc2lvbi5zdHlsZS53aWR0aCA9IGAke2NhbGN1bGF0ZVNwcml0ZVdpZHRoKHBldFNpemUpfXB4YDtcclxuICAgICAgICB0aGlzLmNvbGxpc2lvbi5zdHlsZS5oZWlnaHQgPSBgJHtjYWxjdWxhdGVTcHJpdGVXaWR0aChwZXRTaXplKX1weGA7XHJcbiAgICB9XHJcblxyXG4gICAgbGVmdCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sZWZ0O1xyXG4gICAgfVxyXG5cclxuICAgIGJvdHRvbSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ib3R0b207XHJcbiAgICB9XHJcblxyXG4gICAgcG9zaXRpb25Cb3R0b20oYm90dG9tOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9ib3R0b20gPSBib3R0b207XHJcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5ib3R0b20gPSBgJHt0aGlzLl9ib3R0b219cHhgO1xyXG4gICAgICAgIHRoaXMuZWwuc3R5bGUuYm90dG9tID0gYCR7dGhpcy5fYm90dG9tfXB4YDtcclxuICAgICAgICB0aGlzLmNvbGxpc2lvbi5zdHlsZS5sZWZ0ID0gYCR7dGhpcy5fbGVmdH1weGA7XHJcbiAgICAgICAgdGhpcy5jb2xsaXNpb24uc3R5bGUuYm90dG9tID0gYCR7dGhpcy5fYm90dG9tfXB4YDtcclxuICAgIH1cclxuXHJcbiAgICBwb3NpdGlvbkxlZnQobGVmdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbGVmdCA9IGxlZnQ7XHJcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5sZWZ0ID0gYCR7dGhpcy5fbGVmdH1weGA7XHJcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5sZWZ0ID0gYCR7dGhpcy5fbGVmdH1weGA7XHJcbiAgICAgICAgdGhpcy5jb2xsaXNpb24uc3R5bGUubGVmdCA9IGAke3RoaXMuX2xlZnR9cHhgO1xyXG4gICAgICAgIHRoaXMuY29sbGlzaW9uLnN0eWxlLmJvdHRvbSA9IGAke3RoaXMuX2JvdHRvbX1weGA7XHJcbiAgICB9XHJcblxyXG4gICAgd2lkdGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbC53aWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBmbG9vcigpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mbG9vcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0ZSgpOiBQZXRJbnN0YW5jZVN0YXRlIHtcclxuICAgICAgICByZXR1cm4geyBjdXJyZW50U3RhdGVFbnVtOiB0aGlzLmN1cnJlbnRTdGF0ZUVudW0gfTtcclxuICAgIH1cclxuXHJcbiAgICBzcGVlZCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zcGVlZDtcclxuICAgIH1cclxuXHJcbiAgICBpc01vdmluZygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3BlZWQgIT09IFBldFNwZWVkLnN0aWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJlY292ZXJGcmllbmQoZnJpZW5kOiBJUGV0VHlwZSkge1xyXG4gICAgICAgIC8vIFJlY292ZXIgZnJpZW5kcy4uXHJcbiAgICAgICAgdGhpcy5fZnJpZW5kID0gZnJpZW5kO1xyXG4gICAgfVxyXG5cclxuICAgIHJlY292ZXJTdGF0ZShzdGF0ZTogUGV0SW5zdGFuY2VTdGF0ZSkge1xyXG4gICAgICAgIC8vIFRPRE8gOiBSZXNvbHZlIGEgYnVnIHdoZXJlIGlmIGl0IHdhcyBzd2lwaW5nIGJlZm9yZSwgaXQgd291bGQgZmFpbFxyXG4gICAgICAgIC8vIGJlY2F1c2UgaG9sZFN0YXRlIGlzIG5vIGxvbmdlciB2YWxpZC5cclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZUVudW0gPSBzdGF0ZS5jdXJyZW50U3RhdGVFbnVtITtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHJlc29sdmVTdGF0ZSh0aGlzLmN1cnJlbnRTdGF0ZUVudW0sIHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAoIWlzU3RhdGVBYm92ZUdyb3VuZCh0aGlzLmN1cnJlbnRTdGF0ZUVudW0pKSB7XHJcbiAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBib3R0b20gb2YgdGhlIHNwcml0ZSB0byB0aGUgZmxvb3IgYXMgdGhlIHRoZW1lXHJcbiAgICAgICAgICAgIC8vIGhhcyBsaWtlbHkgY2hhbmdlZC5cclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkJvdHRvbSh0aGlzLmZsb29yKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjYW5Td2lwZSgpIHtcclxuICAgICAgICByZXR1cm4gIWlzU3RhdGVBYm92ZUdyb3VuZCh0aGlzLmN1cnJlbnRTdGF0ZUVudW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbkNoYXNlKCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICFpc1N0YXRlQWJvdmVHcm91bmQodGhpcy5jdXJyZW50U3RhdGVFbnVtKSAmJlxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZUVudW0gIT09IFN0YXRlcy5jaGFzZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzTW92aW5nKClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXBlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGF0ZUVudW0gPT09IFN0YXRlcy5zd2lwZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaG9sZFN0YXRlID0gdGhpcy5jdXJyZW50U3RhdGU7XHJcbiAgICAgICAgdGhpcy5ob2xkU3RhdGVFbnVtID0gdGhpcy5jdXJyZW50U3RhdGVFbnVtO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlRW51bSA9IFN0YXRlcy5zd2lwZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHJlc29sdmVTdGF0ZSh0aGlzLmN1cnJlbnRTdGF0ZUVudW0sIHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYXNlKGJhbGxTdGF0ZTogQmFsbFN0YXRlLCBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGVFbnVtID0gU3RhdGVzLmNoYXNlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gbmV3IENoYXNlU3RhdGUodGhpcywgYmFsbFN0YXRlLCBjYW52YXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGZhY2VMZWZ0KCkge1xyXG4gICAgICAgIHRoaXMuZWwuc3R5bGUudHJhbnNmb3JtID0gJ3NjYWxlWCgtMSknO1xyXG4gICAgfVxyXG5cclxuICAgIGZhY2VSaWdodCgpIHtcclxuICAgICAgICB0aGlzLmVsLnN0eWxlLnRyYW5zZm9ybSA9ICdzY2FsZVgoMSknO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEFuaW1hdGlvbihmYWNlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5lbC5zcmMuZW5kc1dpdGgoYF8ke2ZhY2V9XzhmcHMuZ2lmYCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVsLnNyYyA9IGAke3RoaXMucGV0Um9vdH1fJHtmYWNlfV84ZnBzLmdpZmA7XHJcbiAgICB9XHJcblxyXG4gICAgY2hvb3NlTmV4dFN0YXRlKGZyb21TdGF0ZTogU3RhdGVzKTogU3RhdGVzIHtcclxuICAgICAgICAvLyBXb3JrIG91dCBuZXh0IHN0YXRlXHJcbiAgICAgICAgdmFyIHBvc3NpYmxlTmV4dFN0YXRlczogU3RhdGVzW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNlcXVlbmNlLnNlcXVlbmNlU3RhdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcXVlbmNlLnNlcXVlbmNlU3RhdGVzW2ldLnN0YXRlID09PSBmcm9tU3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlcyA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXF1ZW5jZS5zZXF1ZW5jZVN0YXRlc1tpXS5wb3NzaWJsZU5leHRTdGF0ZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwb3NzaWJsZU5leHRTdGF0ZXMpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTdGF0ZUV4Y2VwdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByYW5kb21seSBjaG9vc2UgdGhlIG5leHQgc3RhdGVcclxuICAgICAgICBjb25zdCBpZHggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBwb3NzaWJsZU5leHRTdGF0ZXMubGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gcG9zc2libGVOZXh0U3RhdGVzW2lkeF07XHJcbiAgICB9XHJcblxyXG4gICAgbmV4dEZyYW1lKCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuaG9yaXpvbnRhbERpcmVjdGlvbiA9PT0gSG9yaXpvbnRhbERpcmVjdGlvbi5sZWZ0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmFjZUxlZnQoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5ob3Jpem9udGFsRGlyZWN0aW9uID09PSBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmFjZVJpZ2h0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0QW5pbWF0aW9uKHRoaXMuY3VycmVudFN0YXRlLnNwcml0ZUxhYmVsKTtcclxuXHJcbiAgICAgICAgLy8gV2hhdCdzIG15IGJ1ZGR5IGRvaW5nP1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5oYXNGcmllbmQoKSAmJlxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZUVudW0gIT09IFN0YXRlcy5jaGFzZUZyaWVuZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzTW92aW5nKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmllbmQoKS5pc1BsYXlpbmcoKSAmJlxyXG4gICAgICAgICAgICAgICAgIWlzU3RhdGVBYm92ZUdyb3VuZCh0aGlzLmN1cnJlbnRTdGF0ZUVudW0pXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPSByZXNvbHZlU3RhdGUoU3RhdGVzLmNoYXNlRnJpZW5kLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlRW51bSA9IFN0YXRlcy5jaGFzZUZyaWVuZDtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZyYW1lUmVzdWx0ID0gdGhpcy5jdXJyZW50U3RhdGUubmV4dEZyYW1lKCk7XHJcbiAgICAgICAgaWYgKGZyYW1lUmVzdWx0ID09PSBGcmFtZVJlc3VsdC5zdGF0ZUNvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgIC8vIElmIHJlY292ZXJpbmcgZnJvbSBzd2lwZS4uXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhvbGRTdGF0ZSAmJiB0aGlzLmhvbGRTdGF0ZUVudW0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gdGhpcy5ob2xkU3RhdGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZUVudW0gPSB0aGlzLmhvbGRTdGF0ZUVudW07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvbGRTdGF0ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG9sZFN0YXRlRW51bSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHRoaXMuY2hvb3NlTmV4dFN0YXRlKHRoaXMuY3VycmVudFN0YXRlRW51bSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gcmVzb2x2ZVN0YXRlKG5leHRTdGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlRW51bSA9IG5leHRTdGF0ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGZyYW1lUmVzdWx0ID09PSBGcmFtZVJlc3VsdC5zdGF0ZUNhbmNlbCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RhdGVFbnVtID09PSBTdGF0ZXMuY2hhc2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSB0aGlzLmNob29zZU5leHRTdGF0ZShTdGF0ZXMuaWRsZVdpdGhCYWxsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gcmVzb2x2ZVN0YXRlKG5leHRTdGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZUVudW0gPSBuZXh0U3RhdGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50U3RhdGVFbnVtID09PSBTdGF0ZXMuY2hhc2VGcmllbmQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSB0aGlzLmNob29zZU5leHRTdGF0ZShTdGF0ZXMuaWRsZVdpdGhCYWxsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gcmVzb2x2ZVN0YXRlKG5leHRTdGF0ZSwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZUVudW0gPSBuZXh0U3RhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFzRnJpZW5kKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mcmllbmQgIT09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBmcmllbmQoKTogSVBldFR5cGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mcmllbmQhO1xyXG4gICAgfVxyXG5cclxuICAgIG5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlRnJpZW5kc1dpdGgoZnJpZW5kOiBJUGV0VHlwZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHRoaXMuX2ZyaWVuZCA9IGZyaWVuZDtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm5hbWUoKSwgXCI6IEknbSBub3cgZnJpZW5kcyDinaTvuI8gd2l0aCBcIiwgZnJpZW5kLm5hbWUoKSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNQbGF5aW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuaXNNb3ZpbmcoKSAmJlxyXG4gICAgICAgICAgICAodGhpcy5jdXJyZW50U3RhdGVFbnVtID09PSBTdGF0ZXMucnVuUmlnaHQgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlRW51bSA9PT0gU3RhdGVzLnJ1bkxlZnQpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBlbW9qaSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAn8J+Qtic7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUb3Rvcm8gZXh0ZW5kcyBCYXNlUGV0VHlwZSB7XHJcbiAgICBsYWJlbCA9ICd0b3Rvcm8nO1xyXG4gICAgc2VxdWVuY2UgPSB7XHJcbiAgICAgICAgc3RhcnRpbmdTdGF0ZTogU3RhdGVzLnNpdElkbGUsXHJcbiAgICAgICAgc2VxdWVuY2VTdGF0ZXM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5zaXRJZGxlLFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtSaWdodCwgU3RhdGVzLmxpZV0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMubGllLFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtSaWdodCwgU3RhdGVzLndhbGtMZWZ0XSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrUmlnaHQsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa0xlZnQsIFN0YXRlcy5zaXRJZGxlXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrTGVmdCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1xyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5zaXRJZGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5jbGltYldhbGxMZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5zaXRJZGxlLFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5jbGltYldhbGxMZWZ0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGxIYW5nTGVmdF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMud2FsbEhhbmdMZWZ0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLmp1bXBEb3duTGVmdF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuanVtcERvd25MZWZ0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLmxhbmRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmxhbmQsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMuc2l0SWRsZSxcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa1JpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5saWUsXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmNoYXNlLFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLmlkbGVXaXRoQmFsbF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuaWRsZVdpdGhCYWxsLFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtSaWdodCwgU3RhdGVzLndhbGtMZWZ0XSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdLFxyXG4gICAgfTtcclxuICAgIGVtb2ppKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICfwn5C+JztcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgQ2F0IGV4dGVuZHMgQmFzZVBldFR5cGUge1xyXG4gICAgbGFiZWwgPSAnY2F0JztcclxuICAgIHNlcXVlbmNlID0ge1xyXG4gICAgICAgIHN0YXJ0aW5nU3RhdGU6IFN0YXRlcy5zaXRJZGxlLFxyXG4gICAgICAgIHNlcXVlbmNlU3RhdGVzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy53YWxrUmlnaHQsIFN0YXRlcy5ydW5SaWdodF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMud2Fsa1JpZ2h0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtMZWZ0LCBTdGF0ZXMucnVuTGVmdF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuUmlnaHQsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa0xlZnQsIFN0YXRlcy5ydW5MZWZ0XSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrTGVmdCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1xyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5zaXRJZGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5jbGltYldhbGxMZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy53YWxrUmlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1blJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5ydW5MZWZ0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnNpdElkbGUsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLmNsaW1iV2FsbExlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuUmlnaHQsXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmNsaW1iV2FsbExlZnQsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2FsbEhhbmdMZWZ0XSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxsSGFuZ0xlZnQsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMuanVtcERvd25MZWZ0XSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5qdW1wRG93bkxlZnQsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMubGFuZF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMubGFuZCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1xyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5zaXRJZGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy53YWxrUmlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1blJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5jaGFzZSxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy5pZGxlV2l0aEJhbGxdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmlkbGVXaXRoQmFsbCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1xyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy53YWxrUmlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtMZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5MZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5SaWdodCxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXSxcclxuICAgIH07XHJcbiAgICBlbW9qaSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAn8J+QsSc7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEb2cgZXh0ZW5kcyBCYXNlUGV0VHlwZSB7XHJcbiAgICBsYWJlbCA9ICdkb2cnO1xyXG4gICAgc2VxdWVuY2UgPSB7XHJcbiAgICAgICAgc3RhcnRpbmdTdGF0ZTogU3RhdGVzLnNpdElkbGUsXHJcbiAgICAgICAgc2VxdWVuY2VTdGF0ZXM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5zaXRJZGxlLFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuUmlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLmxpZSxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMubGllLFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtSaWdodCwgU3RhdGVzLnJ1blJpZ2h0XSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrUmlnaHQsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa0xlZnQsIFN0YXRlcy5ydW5MZWZ0XSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5ydW5SaWdodCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy53YWxrTGVmdCwgU3RhdGVzLnJ1bkxlZnRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLndhbGtMZWZ0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnNpdElkbGUsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLmxpZSxcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa1JpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5SaWdodCxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuTGVmdCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1xyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5zaXRJZGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5saWUsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuUmlnaHQsXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmNoYXNlLFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLmlkbGVXaXRoQmFsbF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuaWRsZVdpdGhCYWxsLFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa0xlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1bkxlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1blJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdLFxyXG4gICAgfTtcclxuICAgIGVtb2ppKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICfwn5C2JztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNuYWtlIGV4dGVuZHMgQmFzZVBldFR5cGUge1xyXG4gICAgbGFiZWwgPSAnc25ha2UnO1xyXG4gICAgc2VxdWVuY2UgPSB7XHJcbiAgICAgICAgc3RhcnRpbmdTdGF0ZTogU3RhdGVzLnNpdElkbGUsXHJcbiAgICAgICAgc2VxdWVuY2VTdGF0ZXM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5zaXRJZGxlLFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtSaWdodCwgU3RhdGVzLnJ1blJpZ2h0XSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrUmlnaHQsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa0xlZnQsIFN0YXRlcy5ydW5MZWZ0XSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5ydW5SaWdodCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy53YWxrTGVmdCwgU3RhdGVzLnJ1bkxlZnRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLndhbGtMZWZ0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnNpdElkbGUsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuUmlnaHQsXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnJ1bkxlZnQsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMuc2l0SWRsZSxcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa1JpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5SaWdodCxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuY2hhc2UsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMuaWRsZVdpdGhCYWxsXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5pZGxlV2l0aEJhbGwsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa1JpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy53YWxrTGVmdCxcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuTGVmdCxcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuUmlnaHQsXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICB9O1xyXG4gICAgZW1vamkoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gJ/CfkI0nO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2xpcHB5IGV4dGVuZHMgQmFzZVBldFR5cGUge1xyXG4gICAgbGFiZWwgPSAnY2xpcHB5JztcclxuICAgIHNlcXVlbmNlID0ge1xyXG4gICAgICAgIHN0YXJ0aW5nU3RhdGU6IFN0YXRlcy5zaXRJZGxlLFxyXG4gICAgICAgIHNlcXVlbmNlU3RhdGVzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy53YWxrUmlnaHQsIFN0YXRlcy5ydW5SaWdodF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMud2Fsa1JpZ2h0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtMZWZ0LCBTdGF0ZXMucnVuTGVmdF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuUmlnaHQsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa0xlZnQsIFN0YXRlcy5ydW5MZWZ0XSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrTGVmdCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy5zaXRJZGxlXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5ydW5MZWZ0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLnNpdElkbGVdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmNoYXNlLFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLmlkbGVXaXRoQmFsbF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuaWRsZVdpdGhCYWxsLFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa0xlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1bkxlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1blJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdLFxyXG4gICAgfTtcclxuICAgIGVtb2ppKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICfwn5OOJztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJ1YmJlckR1Y2sgZXh0ZW5kcyBCYXNlUGV0VHlwZSB7XHJcbiAgICBsYWJlbCA9ICdydWJiZXItZHVjayc7XHJcbiAgICBzZXF1ZW5jZSA9IHtcclxuICAgICAgICBzdGFydGluZ1N0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcclxuICAgICAgICBzZXF1ZW5jZVN0YXRlczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnNpdElkbGUsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa1JpZ2h0LCBTdGF0ZXMucnVuUmlnaHRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLndhbGtSaWdodCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy53YWxrTGVmdCwgU3RhdGVzLnJ1bkxlZnRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnJ1blJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtMZWZ0LCBTdGF0ZXMucnVuTGVmdF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMud2Fsa0xlZnQsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMuc2l0SWRsZV0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuTGVmdCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy5zaXRJZGxlXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5jaGFzZSxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy5pZGxlV2l0aEJhbGxdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmlkbGVXaXRoQmFsbCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1xyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy53YWxrUmlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtMZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5MZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5SaWdodCxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXSxcclxuICAgIH07XHJcbiAgICBlbW9qaSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAn8J+QpSc7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDcmFiIGV4dGVuZHMgQmFzZVBldFR5cGUge1xyXG4gICAgbGFiZWwgPSAnY3JhYic7XHJcbiAgICBzZXF1ZW5jZSA9IHtcclxuICAgICAgICBzdGFydGluZ1N0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcclxuICAgICAgICBzZXF1ZW5jZVN0YXRlczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnNpdElkbGUsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa1JpZ2h0LCBTdGF0ZXMucnVuUmlnaHRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLndhbGtSaWdodCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy53YWxrTGVmdCwgU3RhdGVzLnJ1bkxlZnRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnJ1blJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtMZWZ0LCBTdGF0ZXMucnVuTGVmdF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMud2Fsa0xlZnQsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMuc2l0SWRsZV0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuTGVmdCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy5zaXRJZGxlXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5jaGFzZSxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy5pZGxlV2l0aEJhbGxdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmlkbGVXaXRoQmFsbCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1xyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy53YWxrUmlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtMZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5MZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5SaWdodCxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXSxcclxuICAgIH07XHJcbiAgICBlbW9qaSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAn8J+mgCc7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBaYXBweSBleHRlbmRzIEJhc2VQZXRUeXBlIHtcclxuICAgIGxhYmVsID0gJ3phcHB5JztcclxuICAgIHNlcXVlbmNlID0ge1xyXG4gICAgICAgIHN0YXJ0aW5nU3RhdGU6IFN0YXRlcy5zaXRJZGxlLFxyXG4gICAgICAgIHNlcXVlbmNlU3RhdGVzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy53YWxrUmlnaHQsIFN0YXRlcy5ydW5SaWdodF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMud2Fsa1JpZ2h0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtMZWZ0LCBTdGF0ZXMucnVuTGVmdF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuUmlnaHQsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa0xlZnQsIFN0YXRlcy5ydW5MZWZ0XSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrTGVmdCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy5zaXRJZGxlXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5ydW5MZWZ0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLnNpdElkbGVdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmNoYXNlLFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLmlkbGVXaXRoQmFsbF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuaWRsZVdpdGhCYWxsLFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa0xlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1bkxlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1blJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdLFxyXG4gICAgfTtcclxuICAgIGVtb2ppKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICfimqEnO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUm9ja3kgZXh0ZW5kcyBCYXNlUGV0VHlwZSB7XHJcbiAgICBsYWJlbCA9ICdyb2NreSc7XHJcbiAgICBzZXF1ZW5jZSA9IHtcclxuICAgICAgICBzdGFydGluZ1N0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcclxuICAgICAgICBzZXF1ZW5jZVN0YXRlczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnNpdElkbGUsXHJcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa1JpZ2h0LCBTdGF0ZXMucnVuUmlnaHRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLndhbGtSaWdodCxcclxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy5zaXRJZGxlLCBTdGF0ZXMucnVuUmlnaHRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnJ1blJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLnNpdElkbGUsIFN0YXRlcy53YWxrUmlnaHRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICB9O1xyXG4gICAgZW1vamkoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gJ/Cfko4nO1xyXG4gICAgfVxyXG4gICAgY2FuQ2hhc2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSW52YWxpZFBldEV4Y2VwdGlvbiB7fVxyXG5cclxuZnVuY3Rpb24gZ2V0UGV0TmFtZShcclxuICAgIGNvbGxlY3Rpb246IE1hcDxudW1iZXIsIHN0cmluZz4sXHJcbiAgICBsYWJlbDogc3RyaW5nLFxyXG4gICAgY291bnQ6IG51bWJlcixcclxuKTogc3RyaW5nIHtcclxuICAgIGlmIChjb2xsZWN0aW9uLmhhcyhjb3VudCkpIHtcclxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5nZXQoY291bnQpITtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGxhYmVsICsgY291bnQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQZXQoXHJcbiAgICBwZXRUeXBlOiBzdHJpbmcsXHJcbiAgICBlbDogSFRNTEltYWdlRWxlbWVudCxcclxuICAgIGNvbGxpc2lvbjogSFRNTERpdkVsZW1lbnQsXHJcbiAgICBzaXplOiBQZXRTaXplLFxyXG4gICAgbGVmdDogbnVtYmVyLFxyXG4gICAgYm90dG9tOiBudW1iZXIsXHJcbiAgICBwZXRSb290OiBzdHJpbmcsXHJcbiAgICBmbG9vcjogbnVtYmVyLFxyXG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxyXG4pOiBJUGV0VHlwZSB7XHJcbiAgICBpZiAocGV0VHlwZSA9PT0gJ3RvdG9ybycpIHtcclxuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSBnZXRQZXROYW1lKFRPVE9ST19OQU1FUywgUGV0VHlwZS50b3Rvcm8sIFRvdG9yby5jb3VudCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFRvdG9ybyhcclxuICAgICAgICAgICAgZWwsXHJcbiAgICAgICAgICAgIGNvbGxpc2lvbixcclxuICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICAgICAgbGVmdCxcclxuICAgICAgICAgICAgYm90dG9tLFxyXG4gICAgICAgICAgICBwZXRSb290LFxyXG4gICAgICAgICAgICBmbG9vcixcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgUGV0U3BlZWQubm9ybWFsLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAocGV0VHlwZSA9PT0gJ2NhdCcpIHtcclxuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSBnZXRQZXROYW1lKFxyXG4gICAgICAgICAgICAgICAgQ0FUX05BTUVTLFxyXG4gICAgICAgICAgICAgICAgUGV0VHlwZS5jYXQsXHJcbiAgICAgICAgICAgICAgICBDYXQuY291bnQgKyBEb2cuY291bnQgKyAxLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gLy8gQ2F0IGFuZCBkb2cgc2hhcmUgdGhlIHNhbWUgbmFtZSBsaXN0XHJcbiAgICAgICAgcmV0dXJuIG5ldyBDYXQoXHJcbiAgICAgICAgICAgIGVsLFxyXG4gICAgICAgICAgICBjb2xsaXNpb24sXHJcbiAgICAgICAgICAgIHNpemUsXHJcbiAgICAgICAgICAgIGxlZnQsXHJcbiAgICAgICAgICAgIGJvdHRvbSxcclxuICAgICAgICAgICAgcGV0Um9vdCxcclxuICAgICAgICAgICAgZmxvb3IsXHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgIFBldFNwZWVkLm5vcm1hbCxcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChwZXRUeXBlID09PSAnZG9nJykge1xyXG4gICAgICAgIGlmIChuYW1lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgbmFtZSA9IGdldFBldE5hbWUoXHJcbiAgICAgICAgICAgICAgICBET0dfTkFNRVMsXHJcbiAgICAgICAgICAgICAgICBQZXRUeXBlLmRvZyxcclxuICAgICAgICAgICAgICAgIERvZy5jb3VudCArIENhdC5jb3VudCArIDEsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSAvLyBDYXQgYW5kIGRvZyBzaGFyZSB0aGUgc2FtZSBuYW1lIGxpc3RcclxuICAgICAgICByZXR1cm4gbmV3IERvZyhcclxuICAgICAgICAgICAgZWwsXHJcbiAgICAgICAgICAgIGNvbGxpc2lvbixcclxuICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICAgICAgbGVmdCxcclxuICAgICAgICAgICAgYm90dG9tLFxyXG4gICAgICAgICAgICBwZXRSb290LFxyXG4gICAgICAgICAgICBmbG9vcixcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgUGV0U3BlZWQubm9ybWFsLFxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHBldFR5cGUgPT09ICdzbmFrZScpIHtcclxuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSBnZXRQZXROYW1lKFNOQUtFX05BTUVTLCBQZXRUeXBlLnNuYWtlLCBTbmFrZS5jb3VudCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFNuYWtlKFxyXG4gICAgICAgICAgICBlbCxcclxuICAgICAgICAgICAgY29sbGlzaW9uLFxyXG4gICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICAgICBsZWZ0LFxyXG4gICAgICAgICAgICBib3R0b20sXHJcbiAgICAgICAgICAgIHBldFJvb3QsXHJcbiAgICAgICAgICAgIGZsb29yLFxyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICBQZXRTcGVlZC52ZXJ5U2xvdyxcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChwZXRUeXBlID09PSAnY2xpcHB5Jykge1xyXG4gICAgICAgIGlmIChuYW1lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgbmFtZSA9IGdldFBldE5hbWUoQ0xJUFBZX05BTUVTLCBQZXRUeXBlLmNsaXBweSwgQ2xpcHB5LmNvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgQ2xpcHB5KFxyXG4gICAgICAgICAgICBlbCxcclxuICAgICAgICAgICAgY29sbGlzaW9uLFxyXG4gICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICAgICBsZWZ0LFxyXG4gICAgICAgICAgICBib3R0b20sXHJcbiAgICAgICAgICAgIHBldFJvb3QsXHJcbiAgICAgICAgICAgIGZsb29yLFxyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICBQZXRTcGVlZC5zbG93LFxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHBldFR5cGUgPT09ICdjcmFiJykge1xyXG4gICAgICAgIGlmIChuYW1lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgbmFtZSA9IGdldFBldE5hbWUoQ1JBQl9OQU1FUywgUGV0VHlwZS5jcmFiLCBDcmFiLmNvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgQ3JhYihcclxuICAgICAgICAgICAgZWwsXHJcbiAgICAgICAgICAgIGNvbGxpc2lvbixcclxuICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICAgICAgbGVmdCxcclxuICAgICAgICAgICAgYm90dG9tLFxyXG4gICAgICAgICAgICBwZXRSb290LFxyXG4gICAgICAgICAgICBmbG9vcixcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgUGV0U3BlZWQuc2xvdyxcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChwZXRUeXBlID09PSAncnViYmVyLWR1Y2snKSB7XHJcbiAgICAgICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBuYW1lID0gZ2V0UGV0TmFtZShcclxuICAgICAgICAgICAgICAgIERVQ0tfTkFNRVMsXHJcbiAgICAgICAgICAgICAgICBQZXRUeXBlLnJ1YmJlcmR1Y2ssXHJcbiAgICAgICAgICAgICAgICBSdWJiZXJEdWNrLmNvdW50ICsgMSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSdWJiZXJEdWNrKFxyXG4gICAgICAgICAgICBlbCxcclxuICAgICAgICAgICAgY29sbGlzaW9uLFxyXG4gICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICAgICBsZWZ0LFxyXG4gICAgICAgICAgICBib3R0b20sXHJcbiAgICAgICAgICAgIHBldFJvb3QsXHJcbiAgICAgICAgICAgIGZsb29yLFxyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICBQZXRTcGVlZC5mYXN0LFxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHBldFR5cGUgPT09ICd6YXBweScpIHtcclxuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSBnZXRQZXROYW1lKFpBUFBZX05BTUVTLCBQZXRUeXBlLnphcHB5LCBaYXBweS5jb3VudCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFphcHB5KFxyXG4gICAgICAgICAgICBlbCxcclxuICAgICAgICAgICAgY29sbGlzaW9uLFxyXG4gICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICAgICBsZWZ0LFxyXG4gICAgICAgICAgICBib3R0b20sXHJcbiAgICAgICAgICAgIHBldFJvb3QsXHJcbiAgICAgICAgICAgIGZsb29yLFxyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICBQZXRTcGVlZC52ZXJ5RmFzdCxcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChwZXRUeXBlID09PSAncm9ja3knKSB7XHJcbiAgICAgICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBuYW1lID0gZ2V0UGV0TmFtZShST0NLWV9OQU1FUywgUGV0VHlwZS5yb2NreSwgUm9ja3kuY291bnQgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSb2NreShcclxuICAgICAgICAgICAgZWwsXHJcbiAgICAgICAgICAgIGNvbGxpc2lvbixcclxuICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICAgICAgbGVmdCxcclxuICAgICAgICAgICAgYm90dG9tLFxyXG4gICAgICAgICAgICBwZXRSb290LFxyXG4gICAgICAgICAgICBmbG9vcixcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgUGV0U3BlZWQuc3RpbGwsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBJbnZhbGlkUGV0RXhjZXB0aW9uKCk7XHJcbn1cclxuIiwiaW1wb3J0IHsgUGV0Q29sb3IsIFBldFR5cGUgfSBmcm9tICcuLi9jb21tb24vdHlwZXMnO1xyXG5pbXBvcnQgeyBJUGV0VHlwZSB9IGZyb20gJy4vcGV0cyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGV0SW5zdGFuY2VTdGF0ZSB7XHJcbiAgICBjdXJyZW50U3RhdGVFbnVtOiBTdGF0ZXMgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQZXRFbGVtZW50U3RhdGUge1xyXG4gICAgcGV0U3RhdGU6IFBldEluc3RhbmNlU3RhdGUgfCB1bmRlZmluZWQ7XHJcbiAgICBwZXRUeXBlOiBQZXRUeXBlIHwgdW5kZWZpbmVkO1xyXG4gICAgcGV0Q29sb3I6IFBldENvbG9yIHwgdW5kZWZpbmVkO1xyXG4gICAgZWxMZWZ0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBlbEJvdHRvbTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgcGV0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgcGV0RnJpZW5kOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQZXRQYW5lbFN0YXRlIHtcclxuICAgIHBldFN0YXRlczogQXJyYXk8UGV0RWxlbWVudFN0YXRlPiB8IHVuZGVmaW5lZDtcclxuICAgIHBldENvdW50ZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gSG9yaXpvbnRhbERpcmVjdGlvbiB7XHJcbiAgICBsZWZ0LFxyXG4gICAgcmlnaHQsXHJcbiAgICBuYXR1cmFsLCAvLyBObyBjaGFuZ2UgdG8gY3VycmVudCBkaXJlY3Rpb25cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gU3RhdGVzIHtcclxuICAgIHNpdElkbGUgPSAnc2l0LWlkbGUnLFxyXG4gICAgd2Fsa1JpZ2h0ID0gJ3dhbGstcmlnaHQnLFxyXG4gICAgd2Fsa0xlZnQgPSAnd2Fsay1sZWZ0JyxcclxuICAgIHJ1blJpZ2h0ID0gJ3J1bi1yaWdodCcsXHJcbiAgICBydW5MZWZ0ID0gJ3J1bi1sZWZ0JyxcclxuICAgIGxpZSA9ICdsaWUnLFxyXG4gICAgd2FsbEhhbmdMZWZ0ID0gJ3dhbGwtaGFuZy1sZWZ0JyxcclxuICAgIGNsaW1iV2FsbExlZnQgPSAnY2xpbWItd2FsbC1sZWZ0JyxcclxuICAgIGp1bXBEb3duTGVmdCA9ICdqdW1wLWRvd24tbGVmdCcsXHJcbiAgICBsYW5kID0gJ2xhbmQnLFxyXG4gICAgc3dpcGUgPSAnc3dpcGUnLFxyXG4gICAgaWRsZVdpdGhCYWxsID0gJ2lkbGUtd2l0aC1iYWxsJyxcclxuICAgIGNoYXNlID0gJ2NoYXNlJyxcclxuICAgIGNoYXNlRnJpZW5kID0gJ2NoYXNlLWZyaWVuZCcsXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEZyYW1lUmVzdWx0IHtcclxuICAgIHN0YXRlQ29udGludWUsXHJcbiAgICBzdGF0ZUNvbXBsZXRlLFxyXG4gICAgLy8gU3BlY2lhbCBzdGF0ZXNcclxuICAgIHN0YXRlQ2FuY2VsLFxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQmFsbFN0YXRlIHtcclxuICAgIGN4OiBudW1iZXI7XHJcbiAgICBjeTogbnVtYmVyO1xyXG4gICAgdng6IG51bWJlcjtcclxuICAgIHZ5OiBudW1iZXI7XHJcbiAgICBwYXVzZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoY3g6IG51bWJlciwgY3k6IG51bWJlciwgdng6IG51bWJlciwgdnk6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuY3ggPSBjeDtcclxuICAgICAgICB0aGlzLmN5ID0gY3k7XHJcbiAgICAgICAgdGhpcy52eCA9IHZ4O1xyXG4gICAgICAgIHRoaXMudnkgPSB2eTtcclxuICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNTdGF0ZUFib3ZlR3JvdW5kKHN0YXRlOiBTdGF0ZXMpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgc3RhdGUgPT09IFN0YXRlcy5jbGltYldhbGxMZWZ0IHx8XHJcbiAgICAgICAgc3RhdGUgPT09IFN0YXRlcy5qdW1wRG93bkxlZnQgfHxcclxuICAgICAgICBzdGF0ZSA9PT0gU3RhdGVzLmxhbmQgfHxcclxuICAgICAgICBzdGF0ZSA9PT0gU3RhdGVzLndhbGxIYW5nTGVmdFxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTdGF0ZShzdGF0ZTogc3RyaW5nLCBwZXQ6IElQZXRUeXBlKTogSVN0YXRlIHtcclxuICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICBjYXNlIFN0YXRlcy5zaXRJZGxlOlxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFNpdElkbGVTdGF0ZShwZXQpO1xyXG4gICAgICAgIGNhc2UgU3RhdGVzLndhbGtSaWdodDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBXYWxrUmlnaHRTdGF0ZShwZXQpO1xyXG4gICAgICAgIGNhc2UgU3RhdGVzLndhbGtMZWZ0OlxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFdhbGtMZWZ0U3RhdGUocGV0KTtcclxuICAgICAgICBjYXNlIFN0YXRlcy5ydW5SaWdodDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW5SaWdodFN0YXRlKHBldCk7XHJcbiAgICAgICAgY2FzZSBTdGF0ZXMucnVuTGVmdDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW5MZWZ0U3RhdGUocGV0KTtcclxuICAgICAgICBjYXNlIFN0YXRlcy5saWU6XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgTGllU3RhdGUocGV0KTtcclxuICAgICAgICBjYXNlIFN0YXRlcy53YWxsSGFuZ0xlZnQ6XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgV2FsbEhhbmdMZWZ0U3RhdGUocGV0KTtcclxuICAgICAgICBjYXNlIFN0YXRlcy5jbGltYldhbGxMZWZ0OlxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENsaW1iV2FsbExlZnRTdGF0ZShwZXQpO1xyXG4gICAgICAgIGNhc2UgU3RhdGVzLmp1bXBEb3duTGVmdDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBKdW1wRG93bkxlZnRTdGF0ZShwZXQpO1xyXG4gICAgICAgIGNhc2UgU3RhdGVzLmxhbmQ6XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgTGFuZFN0YXRlKHBldCk7XHJcbiAgICAgICAgY2FzZSBTdGF0ZXMuc3dpcGU6XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3dpcGVTdGF0ZShwZXQpO1xyXG4gICAgICAgIGNhc2UgU3RhdGVzLmlkbGVXaXRoQmFsbDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJZGxlV2l0aEJhbGxTdGF0ZShwZXQpO1xyXG4gICAgICAgIGNhc2UgU3RhdGVzLmNoYXNlRnJpZW5kOlxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENoYXNlRnJpZW5kU3RhdGUocGV0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgU2l0SWRsZVN0YXRlKHBldCk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVN0YXRlIHtcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbiAgICBzcHJpdGVMYWJlbDogc3RyaW5nO1xyXG4gICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbERpcmVjdGlvbjtcclxuICAgIHBldDogSVBldFR5cGU7XHJcbiAgICBuZXh0RnJhbWUoKTogRnJhbWVSZXN1bHQ7XHJcbn1cclxuXHJcbmNsYXNzIEFic3RyYWN0U3RhdGljU3RhdGUgaW1wbGVtZW50cyBJU3RhdGUge1xyXG4gICAgbGFiZWwgPSBTdGF0ZXMuc2l0SWRsZTtcclxuICAgIGlkbGVDb3VudGVyOiBudW1iZXI7XHJcbiAgICBzcHJpdGVMYWJlbCA9ICdpZGxlJztcclxuICAgIGhvbGRUaW1lID0gNTA7XHJcbiAgICBwZXQ6IElQZXRUeXBlO1xyXG5cclxuICAgIGhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGV0OiBJUGV0VHlwZSkge1xyXG4gICAgICAgIHRoaXMuaWRsZUNvdW50ZXIgPSAwO1xyXG4gICAgICAgIHRoaXMucGV0ID0gcGV0O1xyXG4gICAgfVxyXG5cclxuICAgIG5leHRGcmFtZSgpOiBGcmFtZVJlc3VsdCB7XHJcbiAgICAgICAgdGhpcy5pZGxlQ291bnRlcisrO1xyXG4gICAgICAgIGlmICh0aGlzLmlkbGVDb3VudGVyID4gdGhpcy5ob2xkVGltZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gRnJhbWVSZXN1bHQuc3RhdGVDb21wbGV0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEZyYW1lUmVzdWx0LnN0YXRlQ29udGludWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTaXRJZGxlU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdFN0YXRpY1N0YXRlIHtcclxuICAgIGxhYmVsID0gU3RhdGVzLnNpdElkbGU7XHJcbiAgICBzcHJpdGVMYWJlbCA9ICdpZGxlJztcclxuICAgIGhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xyXG4gICAgaG9sZFRpbWUgPSA1MDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpZVN0YXRlIGV4dGVuZHMgQWJzdHJhY3RTdGF0aWNTdGF0ZSB7XHJcbiAgICBsYWJlbCA9IFN0YXRlcy5saWU7XHJcbiAgICBzcHJpdGVMYWJlbCA9ICdsaWUnO1xyXG4gICAgaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ucmlnaHQ7XHJcbiAgICBob2xkVGltZSA9IDUwO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV2FsbEhhbmdMZWZ0U3RhdGUgZXh0ZW5kcyBBYnN0cmFjdFN0YXRpY1N0YXRlIHtcclxuICAgIGxhYmVsID0gU3RhdGVzLndhbGxIYW5nTGVmdDtcclxuICAgIHNwcml0ZUxhYmVsID0gJ3dhbGxncmFiJztcclxuICAgIGhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnQ7XHJcbiAgICBob2xkVGltZSA9IDUwO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGFuZFN0YXRlIGV4dGVuZHMgQWJzdHJhY3RTdGF0aWNTdGF0ZSB7XHJcbiAgICBsYWJlbCA9IFN0YXRlcy5sYW5kO1xyXG4gICAgc3ByaXRlTGFiZWwgPSAnbGFuZCc7XHJcbiAgICBob3Jpem9udGFsRGlyZWN0aW9uID0gSG9yaXpvbnRhbERpcmVjdGlvbi5sZWZ0O1xyXG4gICAgaG9sZFRpbWUgPSAxMDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN3aXBlU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdFN0YXRpY1N0YXRlIHtcclxuICAgIGxhYmVsID0gU3RhdGVzLnN3aXBlO1xyXG4gICAgc3ByaXRlTGFiZWwgPSAnc3dpcGUnO1xyXG4gICAgaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ubmF0dXJhbDtcclxuICAgIGhvbGRUaW1lID0gMTU7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZGxlV2l0aEJhbGxTdGF0ZSBleHRlbmRzIEFic3RyYWN0U3RhdGljU3RhdGUge1xyXG4gICAgbGFiZWwgPSBTdGF0ZXMuaWRsZVdpdGhCYWxsO1xyXG4gICAgc3ByaXRlTGFiZWwgPSAnd2l0aF9iYWxsJztcclxuICAgIGhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnQ7XHJcbiAgICBob2xkVGltZSA9IDMwO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV2Fsa1JpZ2h0U3RhdGUgaW1wbGVtZW50cyBJU3RhdGUge1xyXG4gICAgbGFiZWwgPSBTdGF0ZXMud2Fsa1JpZ2h0O1xyXG4gICAgcGV0OiBJUGV0VHlwZTtcclxuICAgIHNwcml0ZUxhYmVsID0gJ3dhbGsnO1xyXG4gICAgaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ucmlnaHQ7XHJcbiAgICBsZWZ0Qm91bmRhcnk6IG51bWJlcjtcclxuICAgIHNwZWVkTXVsdGlwbGllciA9IDE7XHJcbiAgICBpZGxlQ291bnRlcjogbnVtYmVyO1xyXG4gICAgaG9sZFRpbWUgPSA2MDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwZXQ6IElQZXRUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5sZWZ0Qm91bmRhcnkgPSBNYXRoLmZsb29yKHdpbmRvdy5pbm5lcldpZHRoICogMC45NSk7XHJcbiAgICAgICAgdGhpcy5wZXQgPSBwZXQ7XHJcbiAgICAgICAgdGhpcy5pZGxlQ291bnRlciA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgbmV4dEZyYW1lKCk6IEZyYW1lUmVzdWx0IHtcclxuICAgICAgICB0aGlzLmlkbGVDb3VudGVyKys7XHJcbiAgICAgICAgdGhpcy5wZXQucG9zaXRpb25MZWZ0KFxyXG4gICAgICAgICAgICB0aGlzLnBldC5sZWZ0KCkgKyB0aGlzLnBldC5zcGVlZCgpICogdGhpcy5zcGVlZE11bHRpcGxpZXIsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucGV0LmlzTW92aW5nKCkgJiZcclxuICAgICAgICAgICAgdGhpcy5wZXQubGVmdCgpID49IHRoaXMubGVmdEJvdW5kYXJ5IC0gdGhpcy5wZXQud2lkdGgoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gRnJhbWVSZXN1bHQuc3RhdGVDb21wbGV0ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnBldC5pc01vdmluZygpICYmIHRoaXMuaWRsZUNvdW50ZXIgPiB0aGlzLmhvbGRUaW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBGcmFtZVJlc3VsdC5zdGF0ZUNvbXBsZXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gRnJhbWVSZXN1bHQuc3RhdGVDb250aW51ZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFdhbGtMZWZ0U3RhdGUgaW1wbGVtZW50cyBJU3RhdGUge1xyXG4gICAgbGFiZWwgPSBTdGF0ZXMud2Fsa0xlZnQ7XHJcbiAgICBzcHJpdGVMYWJlbCA9ICd3YWxrJztcclxuICAgIGhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnQ7XHJcbiAgICBwZXQ6IElQZXRUeXBlO1xyXG4gICAgc3BlZWRNdWx0aXBsaWVyID0gMTtcclxuICAgIGlkbGVDb3VudGVyOiBudW1iZXI7XHJcbiAgICBob2xkVGltZSA9IDYwO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBldDogSVBldFR5cGUpIHtcclxuICAgICAgICB0aGlzLnBldCA9IHBldDtcclxuICAgICAgICB0aGlzLmlkbGVDb3VudGVyID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBuZXh0RnJhbWUoKTogRnJhbWVSZXN1bHQge1xyXG4gICAgICAgIHRoaXMucGV0LnBvc2l0aW9uTGVmdChcclxuICAgICAgICAgICAgdGhpcy5wZXQubGVmdCgpIC0gdGhpcy5wZXQuc3BlZWQoKSAqIHRoaXMuc3BlZWRNdWx0aXBsaWVyLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHRoaXMucGV0LmlzTW92aW5nKCkgJiYgdGhpcy5wZXQubGVmdCgpIDw9IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIEZyYW1lUmVzdWx0LnN0YXRlQ29tcGxldGU7XHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5wZXQuaXNNb3ZpbmcoKSAmJiB0aGlzLmlkbGVDb3VudGVyID4gdGhpcy5ob2xkVGltZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gRnJhbWVSZXN1bHQuc3RhdGVDb21wbGV0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEZyYW1lUmVzdWx0LnN0YXRlQ29udGludWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSdW5SaWdodFN0YXRlIGV4dGVuZHMgV2Fsa1JpZ2h0U3RhdGUge1xyXG4gICAgbGFiZWwgPSBTdGF0ZXMucnVuUmlnaHQ7XHJcbiAgICBzcHJpdGVMYWJlbCA9ICd3YWxrX2Zhc3QnO1xyXG4gICAgc3BlZWRNdWx0aXBsaWVyID0gMS42O1xyXG4gICAgaG9sZFRpbWUgPSAxMzA7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSdW5MZWZ0U3RhdGUgZXh0ZW5kcyBXYWxrTGVmdFN0YXRlIHtcclxuICAgIGxhYmVsID0gU3RhdGVzLnJ1bkxlZnQ7XHJcbiAgICBzcHJpdGVMYWJlbCA9ICd3YWxrX2Zhc3QnO1xyXG4gICAgc3BlZWRNdWx0aXBsaWVyID0gMS42O1xyXG4gICAgaG9sZFRpbWUgPSAxMzA7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFzZVN0YXRlIGltcGxlbWVudHMgSVN0YXRlIHtcclxuICAgIGxhYmVsID0gU3RhdGVzLmNoYXNlO1xyXG4gICAgc3ByaXRlTGFiZWwgPSAncnVuJztcclxuICAgIGhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnQ7XHJcbiAgICBiYWxsU3RhdGU6IEJhbGxTdGF0ZTtcclxuICAgIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XHJcbiAgICBwZXQ6IElQZXRUeXBlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHBldDogSVBldFR5cGUsXHJcbiAgICAgICAgYmFsbFN0YXRlOiBCYWxsU3RhdGUsXHJcbiAgICAgICAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMucGV0ID0gcGV0O1xyXG4gICAgICAgIHRoaXMuYmFsbFN0YXRlID0gYmFsbFN0YXRlO1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xyXG4gICAgfVxyXG5cclxuICAgIG5leHRGcmFtZSgpOiBGcmFtZVJlc3VsdCB7XHJcbiAgICAgICAgaWYgKHRoaXMuYmFsbFN0YXRlLnBhdXNlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gRnJhbWVSZXN1bHQuc3RhdGVDYW5jZWw7IC8vIEJhbGwgaXMgYWxyZWFkeSBjYXVnaHRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucGV0LmxlZnQoKSA+IHRoaXMuYmFsbFN0YXRlLmN4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ubGVmdDtcclxuICAgICAgICAgICAgdGhpcy5wZXQucG9zaXRpb25MZWZ0KHRoaXMucGV0LmxlZnQoKSAtIHRoaXMucGV0LnNwZWVkKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ucmlnaHQ7XHJcbiAgICAgICAgICAgIHRoaXMucGV0LnBvc2l0aW9uTGVmdCh0aGlzLnBldC5sZWZ0KCkgKyB0aGlzLnBldC5zcGVlZCgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0IC0gdGhpcy5iYWxsU3RhdGUuY3kgPFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXQud2lkdGgoKSArIHRoaXMucGV0LmZsb29yKCkgJiZcclxuICAgICAgICAgICAgdGhpcy5iYWxsU3RhdGUuY3ggPCB0aGlzLnBldC5sZWZ0KCkgJiZcclxuICAgICAgICAgICAgdGhpcy5wZXQubGVmdCgpIDwgdGhpcy5iYWxsU3RhdGUuY3ggKyAxNVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICAvLyBoaWRlIGJhbGxcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5iYWxsU3RhdGUucGF1c2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIEZyYW1lUmVzdWx0LnN0YXRlQ29tcGxldGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBGcmFtZVJlc3VsdC5zdGF0ZUNvbnRpbnVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhc2VGcmllbmRTdGF0ZSBpbXBsZW1lbnRzIElTdGF0ZSB7XHJcbiAgICBsYWJlbCA9IFN0YXRlcy5jaGFzZUZyaWVuZDtcclxuICAgIHNwcml0ZUxhYmVsID0gJ3J1bic7XHJcbiAgICBob3Jpem9udGFsRGlyZWN0aW9uID0gSG9yaXpvbnRhbERpcmVjdGlvbi5sZWZ0O1xyXG4gICAgcGV0OiBJUGV0VHlwZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwZXQ6IElQZXRUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5wZXQgPSBwZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgbmV4dEZyYW1lKCk6IEZyYW1lUmVzdWx0IHtcclxuICAgICAgICBpZiAoIXRoaXMucGV0LmZyaWVuZCgpLmlzUGxheWluZygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBGcmFtZVJlc3VsdC5zdGF0ZUNhbmNlbDsgLy8gRnJpZW5kIGlzIG5vIGxvbmdlciBwbGF5aW5nLlxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wZXQubGVmdCgpID4gdGhpcy5wZXQuZnJpZW5kKCkubGVmdCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ubGVmdDtcclxuICAgICAgICAgICAgdGhpcy5wZXQucG9zaXRpb25MZWZ0KHRoaXMucGV0LmxlZnQoKSAtIHRoaXMucGV0LnNwZWVkKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ucmlnaHQ7XHJcbiAgICAgICAgICAgIHRoaXMucGV0LnBvc2l0aW9uTGVmdCh0aGlzLnBldC5sZWZ0KCkgKyB0aGlzLnBldC5zcGVlZCgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBGcmFtZVJlc3VsdC5zdGF0ZUNvbnRpbnVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2xpbWJXYWxsTGVmdFN0YXRlIGltcGxlbWVudHMgSVN0YXRlIHtcclxuICAgIGxhYmVsID0gU3RhdGVzLmNsaW1iV2FsbExlZnQ7XHJcbiAgICBzcHJpdGVMYWJlbCA9ICd3YWxsY2xpbWInO1xyXG4gICAgaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ubGVmdDtcclxuICAgIHBldDogSVBldFR5cGU7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGV0OiBJUGV0VHlwZSkge1xyXG4gICAgICAgIHRoaXMucGV0ID0gcGV0O1xyXG4gICAgfVxyXG5cclxuICAgIG5leHRGcmFtZSgpOiBGcmFtZVJlc3VsdCB7XHJcbiAgICAgICAgdGhpcy5wZXQucG9zaXRpb25Cb3R0b20odGhpcy5wZXQuYm90dG9tKCkgKyAxKTtcclxuICAgICAgICBpZiAodGhpcy5wZXQuYm90dG9tKCkgPj0gMTAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBGcmFtZVJlc3VsdC5zdGF0ZUNvbXBsZXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gRnJhbWVSZXN1bHQuc3RhdGVDb250aW51ZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEp1bXBEb3duTGVmdFN0YXRlIGltcGxlbWVudHMgSVN0YXRlIHtcclxuICAgIGxhYmVsID0gU3RhdGVzLmp1bXBEb3duTGVmdDtcclxuICAgIHNwcml0ZUxhYmVsID0gJ2ZhbGxfZnJvbV9ncmFiJztcclxuICAgIGhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xyXG4gICAgcGV0OiBJUGV0VHlwZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwZXQ6IElQZXRUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5wZXQgPSBwZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgbmV4dEZyYW1lKCk6IEZyYW1lUmVzdWx0IHtcclxuICAgICAgICB0aGlzLnBldC5wb3NpdGlvbkJvdHRvbSh0aGlzLnBldC5ib3R0b20oKSAtIDUpO1xyXG4gICAgICAgIGlmICh0aGlzLnBldC5ib3R0b20oKSA8PSB0aGlzLnBldC5mbG9vcigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGV0LnBvc2l0aW9uQm90dG9tKHRoaXMucGV0LmZsb29yKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gRnJhbWVSZXN1bHQuc3RhdGVDb21wbGV0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEZyYW1lUmVzdWx0LnN0YXRlQ29udGludWU7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL3BhbmVsL21haW4udHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wZXRBcHAvLi9zcmMvY29tbW9uL25hbWVzLnRzIiwid2VicGFjazovL3BldEFwcC8uL3NyYy9wYW5lbC9tYWluLnRzIiwid2VicGFjazovL3BldEFwcC8uL3NyYy9wYW5lbC9wZXRzLnRzIiwid2VicGFjazovL3BldEFwcC8uL3NyYy9wYW5lbC9zdGF0ZXMudHMiLCJ3ZWJwYWNrOi8vcGV0QXBwL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BldEFwcC93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFhLGlCQUFTLEdBQXdCLElBQUksR0FBRyxDQUFpQjtJQUNsRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDZCxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDVixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDWCxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDWCxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUM7SUFDZixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUM7SUFDZixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUM7SUFDZixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWixDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUM7SUFDZixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUM7SUFDZixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUM7SUFDYixDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUM7SUFDaEIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO0lBQ2IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDO0lBQ2QsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO0NBQ2hCLENBQUMsQ0FBQztBQUVVLGlCQUFTLEdBQUcsaUJBQVMsQ0FBQztBQUV0QixpQkFBUyxHQUFHLGlCQUFTLENBQUM7QUFFdEIsa0JBQVUsR0FBd0IsSUFBSSxHQUFHLENBQWlCO0lBQ25FLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUNiLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUNiLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUNiLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztJQUNkLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUNiLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNaLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQztJQUNmLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNaLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNYLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQztDQUNqQixDQUFDLENBQUM7QUFFVSxvQkFBWSxHQUF3QixJQUFJLEdBQUcsQ0FBaUI7SUFDckUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ2IsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQztJQUNqQixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDWCxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDWCxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDWCxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUM7Q0FDakIsQ0FBQyxDQUFDO0FBRVUsb0JBQVksR0FBd0IsSUFBSSxHQUFHLENBQWlCO0lBQ3JFLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUNiLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNWLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNWLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNaLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNYLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNaLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNYLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNaLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNYLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQztDQUNqQixDQUFDLENBQUM7QUFFVSxtQkFBVyxHQUF3QixJQUFJLEdBQUcsQ0FBaUI7SUFDcEUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ2IsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNWLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNaLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNYLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNaLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNYLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNaLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNYLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQztDQUNqQixDQUFDLENBQUM7QUFFVSxrQkFBVSxHQUF3QixJQUFJLEdBQUcsQ0FBaUI7SUFDbkUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ2IsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ2IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ1gsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ1osQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDO0lBQ2YsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ1osQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ2IsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ1osQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ1gsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDO0NBQ2pCLENBQUMsQ0FBQztBQUVVLG1CQUFXLEdBQXdCLElBQUksR0FBRyxDQUFpQjtJQUNwRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDaEIsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ1osQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ1osQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ1osQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ1osQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDO0lBQ2YsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDO0lBQ2hCLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQztDQUNmLENBQUMsQ0FBQztBQUVVLG1CQUFXLEdBQXdCLElBQUksR0FBRyxDQUFpQjtJQUNwRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDWixDQUFDLENBQUMsRUFBRSxVQUFVLENBQUM7SUFDZixDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDZCxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDZCxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUM7SUFDZixDQUFDLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDaEIsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQztJQUNsQixDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUM7Q0FDdEIsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQy9MSCx3RUFNZ0I7QUFDaEIsOEVBQXFFO0FBY3JFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBRTlCLGVBQU8sR0FBbUIsSUFBSSxvQkFBYSxFQUFFLENBQUM7QUFDekQsSUFBSSxVQUFrQixDQUFDO0FBRXZCLFNBQVMsbUJBQW1CLENBQUMsSUFBYTtJQUN0QyxJQUFJLElBQUksc0JBQWlCLEVBQUU7UUFDdkIsT0FBTyxDQUFDLENBQUM7S0FDWjtTQUFNLElBQUksSUFBSSwwQkFBbUIsRUFBRTtRQUNoQyxPQUFPLENBQUMsQ0FBQztLQUNaO1NBQU0sSUFBSSxJQUFJLHdCQUFrQixFQUFFO1FBQy9CLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7U0FBTTtRQUNILE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUTtLQUNyQjtBQUNMLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxJQUFhLEVBQUUsS0FBWTtJQUMvQyxRQUFRLEtBQUssRUFBRTtRQUNYO1lBQ0ksUUFBUSxJQUFJLEVBQUU7Z0JBQ1Y7b0JBQ0ksT0FBTyxFQUFFLENBQUM7Z0JBQ2Q7b0JBQ0ksT0FBTyxFQUFFLENBQUM7Z0JBQ2QsdUJBQWtCO2dCQUNsQjtvQkFDSSxPQUFPLEVBQUUsQ0FBQzthQUNqQjtRQUNMO1lBQ0ksUUFBUSxJQUFJLEVBQUU7Z0JBQ1Y7b0JBQ0ksT0FBTyxFQUFFLENBQUM7Z0JBQ2Q7b0JBQ0ksT0FBTyxHQUFHLENBQUM7Z0JBQ2YsdUJBQWtCO2dCQUNsQjtvQkFDSSxPQUFPLEVBQUUsQ0FBQzthQUNqQjtLQUNSO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsQ0FBYTtJQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsYUFBK0IsQ0FBQztJQUMzQyxlQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDL0IsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDekIsT0FBTzthQUNWO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN2QjtJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLFNBQXlCLEVBQUUsR0FBYTtJQUM3RCxTQUFTLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3pELFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLE9BQU8sR0FBRyxlQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3hCLE1BQU0sQ0FBQyxXQUFXLENBQUM7Z0JBQ2YsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsT0FBTyxFQUFFLE1BQU07YUFDbEIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDaEIsU0FBUyxFQUFFLENBQUM7SUFDaEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1osQ0FBQztBQUVELFNBQVMsYUFBYSxDQUNsQixPQUFnQixFQUNoQixVQUFrQixFQUNsQixRQUFrQixFQUNsQixPQUFnQixFQUNoQixJQUFZLEVBQ1osTUFBYyxFQUNkLEtBQWEsRUFDYixJQUF3QjtJQUV4QixJQUFJLGdCQUFnQixHQUFxQixRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZFLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQW9CLENBQUMsV0FBVyxDQUNwRSxnQkFBZ0IsQ0FDbkIsQ0FBQztJQUVGLElBQUksZ0JBQWdCLEdBQW1CLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckUsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztJQUN4QyxRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBb0IsQ0FBQyxXQUFXLENBQ3BFLGdCQUFnQixDQUNuQixDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxPQUFPLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztJQUN6RCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRCxJQUFJLE1BQU0sR0FBRyxnQkFBUyxDQUNsQixPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsSUFBSSxFQUNKLE1BQU0sRUFDTixJQUFJLEVBQ0osS0FBSyxFQUNMLElBQUksQ0FDUCxDQUFDO0lBQ0YsVUFBVSxFQUFFLENBQUM7SUFDYixlQUFlLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUMsT0FBTyxJQUFJLGlCQUFVLENBQ2pCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLFFBQVEsRUFDUixPQUFPLENBQ1YsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFnQixTQUFTO0lBQ3JCLElBQUksS0FBSyxHQUFHLElBQUksc0JBQWEsRUFBRSxDQUFDO0lBQ2hDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUU5QixlQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDL0IsS0FBSyxDQUFDLFNBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQzNCLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSztZQUN2QixPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDckIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ2hDLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDM0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFO2dCQUM3QixDQUFDLENBQUMsU0FBUztZQUNmLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQzdCLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNO1NBQ3BDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0gsS0FBSyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDOUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBbkJELDhCQW1CQztBQUVELFNBQVMsWUFBWSxDQUFDLFVBQWtCLEVBQUUsT0FBZ0IsRUFBRSxLQUFhO0lBQ3JFLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUU5QixJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDM0QsVUFBVSxHQUFHLENBQUMsQ0FBQztLQUNsQjtTQUFNO1FBQ0gsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFXLENBQUM7S0FDbEM7SUFFRCxJQUFJLFdBQVcsR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM1RCxLQUFLLENBQUMsU0FBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzNCLHlDQUF5QztRQUN6QyxJQUFLLENBQUMsQ0FBQyxPQUFrQixLQUFLLGFBQWEsRUFBRTtZQUN4QyxDQUFDLENBQUMsT0FBa0IsR0FBRyxhQUFhLENBQUM7U0FDekM7UUFFRCxJQUFJO1lBQ0EsSUFBSSxNQUFNLEdBQUcsYUFBYSxDQUN0QixDQUFDLENBQUMsT0FBUSxFQUNWLFVBQVUsRUFDVixDQUFDLENBQUMsUUFBUyxFQUNYLE9BQU8sRUFDUCxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU8sQ0FBQyxFQUNuQixRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVMsQ0FBQyxFQUNyQixLQUFLLEVBQ0wsQ0FBQyxDQUFDLE9BQU8sQ0FDWixDQUFDO1lBQ0YsZUFBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQixXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbEM7UUFBQyxPQUFPLG1CQUFtQixFQUFFO1lBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQ1AseUJBQXlCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FDM0QsQ0FBQztTQUNMO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQy9CLDBCQUEwQjtRQUMxQixHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFTLENBQUMsQ0FBQztRQUVsQywrQkFBK0I7UUFDL0IsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ3ZCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUNqQixNQUFNLEdBQUcsZUFBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekMsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDakM7U0FDSjtJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELFNBQVMsbUJBQW1CO0lBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELElBQUksTUFBeUIsRUFBRSxHQUE2QixDQUFDO0FBRTdELFNBQVMsVUFBVTtJQUNmLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBc0IsQ0FBQztJQUNuRSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQTZCLENBQUM7SUFDMUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUNyQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQzNDLENBQUM7QUFFRCxtREFBbUQ7QUFDbkQsU0FBZ0IsV0FBVyxDQUN2QixVQUFrQixFQUNsQixLQUFZLEVBQ1osU0FBeUIsRUFDekIsUUFBa0IsRUFDbEIsT0FBZ0IsRUFDaEIsT0FBZ0I7SUFFaEIsTUFBTSxVQUFVLEdBQVcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsMEJBQTBCO0lBQzFCLElBQUksS0FBSyxzQkFBZSxFQUFFO1FBQ3RCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixRQUFRLFNBQVMsRUFBRTtZQUNmO2dCQUNJLFVBQVUsR0FBRyxNQUFNLENBQUM7Z0JBQ3BCLE1BQU07WUFDVjtnQkFDSSxVQUFVLEdBQUcsT0FBTyxDQUFDO2dCQUNyQixNQUFNO1lBQ1YsMEJBQWlDO1lBQ2pDO2dCQUNJLFVBQVUsR0FBRyxPQUFPLENBQUM7Z0JBQ3JCLE1BQU07U0FDYjtRQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxRQUFRLFVBQVUsZ0JBQWdCLEtBQUssZUFBZSxVQUFVLElBQUksT0FBTyxRQUFRLENBQUM7UUFDMUgsUUFBUSxDQUFDLGNBQWMsQ0FDbkIsWUFBWSxDQUNkLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxRQUFRLFVBQVUsZ0JBQWdCLEtBQUssZUFBZSxVQUFVLElBQUksT0FBTyxRQUFRLENBQUM7UUFFL0csS0FBSyxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyx5REFBeUQ7S0FDcEc7U0FBTTtRQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDekMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztLQUNyRTtJQUVELHlFQUF5RTtJQUN6RSxNQUFNLE9BQU8sR0FBVyxHQUFHLEVBQ3ZCLE9BQU8sR0FBVyxHQUFHLEVBQ3JCLFFBQVEsR0FBVyxHQUFHLENBQUM7SUFDM0IsSUFBSSxTQUFvQixDQUFDO0lBRXpCLFNBQVMsU0FBUztRQUNkLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUMvQixTQUFTLEdBQUcsSUFBSSxrQkFBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxTQUFTLFNBQVM7UUFDZCxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDbkIscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDcEM7UUFFRCxJQUFJLFNBQVMsQ0FBQyxFQUFFLEdBQUcsVUFBVSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDM0MsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDO1lBQ3ZDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7U0FDNUM7YUFBTSxJQUFJLFNBQVMsQ0FBQyxFQUFFLEdBQUcsVUFBVSxJQUFJLENBQUMsRUFBRTtZQUN2QyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUM7WUFDdkMsU0FBUyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUM7U0FDN0I7UUFDRCxJQUFJLFNBQVMsQ0FBQyxFQUFFLEdBQUcsVUFBVSxHQUFHLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ3BELFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztZQUN2QyxTQUFTLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNsRCxnQkFBZ0I7WUFDaEIsU0FBUyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUM7U0FDNUI7YUFBTSxJQUFJLFNBQVMsQ0FBQyxFQUFFLEdBQUcsVUFBVSxJQUFJLENBQUMsRUFBRTtZQUN2QyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUM7WUFDdkMsU0FBUyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUM7U0FDN0I7UUFFRCxTQUFTLENBQUMsRUFBRSxJQUFJLE9BQU8sQ0FBQztRQUV4QixTQUFTLENBQUMsRUFBRSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDN0IsU0FBUyxDQUFDLEVBQUUsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDO1FBRTdCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoQixHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkUsY0FBYztJQUNkLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ2pELFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixlQUFPLENBQUMsSUFBSSxDQUNSLGFBQWEsQ0FDVCxPQUFPLEVBQ1AsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLEVBQ1AsbUJBQW1CLEVBQUUsRUFDckIsS0FBSyxFQUNMLEtBQUssRUFDTCxTQUFTLENBQ1osQ0FDSixDQUFDO1FBQ0YsU0FBUyxFQUFFLENBQUM7S0FDZjtTQUFNO1FBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxQyxZQUFZLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztLQUM1QztJQUVELFVBQVUsRUFBRSxDQUFDO0lBRWIseURBQXlEO0lBQ3pELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQVEsRUFBRTtRQUMvQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsd0NBQXdDO1FBQ3BFLFFBQVEsT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUNyQixLQUFLLFlBQVk7Z0JBQ2IsU0FBUyxFQUFFLENBQUM7Z0JBQ1osU0FBUyxFQUFFLENBQUM7Z0JBQ1osZUFBTyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUM3QixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7d0JBQ3RCLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztxQkFDdEM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUNWLEtBQUssV0FBVztnQkFDWixlQUFPLENBQUMsSUFBSSxDQUNSLGFBQWEsQ0FDVCxPQUFPLENBQUMsSUFBSSxFQUNaLFVBQVUsRUFDVixPQUFPLENBQUMsS0FBSyxFQUNiLE9BQU8sRUFDUCxtQkFBbUIsRUFBRSxFQUNyQixLQUFLLEVBQ0wsS0FBSyxFQUNMLFNBQVMsQ0FDWixDQUNKLENBQUM7Z0JBQ0YsU0FBUyxFQUFFLENBQUM7Z0JBQ1osTUFBTTtZQUNWLEtBQUssWUFBWTtnQkFDYixJQUFJLEdBQUcsR0FBRyxlQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsSUFBSSxHQUFHLEVBQUU7b0JBQ0wsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNiLFNBQVMsRUFBRSxDQUFDO2lCQUNmO2dCQUNELE1BQU07WUFDVixLQUFLLFdBQVc7Z0JBQ1osZUFBTyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUMzQixHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNoQixHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMzQixDQUFDLENBQUMsQ0FBQztnQkFDSCxlQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hCLGVBQU8sQ0FBQyxJQUFJLENBQ1IsYUFBYSxDQUNULE9BQU8sRUFDUCxVQUFVLEVBQ1YsUUFBUSxFQUNSLE9BQU8sRUFDUCxtQkFBbUIsRUFBRSxFQUNyQixLQUFLLEVBQ0wsS0FBSyxFQUNMLFNBQVMsQ0FDWixDQUNKLENBQUM7Z0JBQ0YsVUFBVSxHQUFHLENBQUMsQ0FBQztnQkFDZixTQUFTLEVBQUUsQ0FBQztnQkFDWixNQUFNO1lBQ1YsS0FBSyxXQUFXO2dCQUNaLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsU0FBUyxFQUFFLENBQUM7Z0JBQ1osTUFBTTtTQUNiO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBMUtELGtDQTBLQztBQUNELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUU7SUFDOUIsVUFBVSxFQUFFLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FDbFpILDhFQVVrQjtBQUNsQixvRkFVeUI7QUFFekIsTUFBYSxxQkFBcUI7Q0FBRztBQUFyQyxzREFBcUM7QUFFckMsTUFBYSxVQUFVO0lBYW5CLFlBQ0ksRUFBb0IsRUFDcEIsU0FBeUIsRUFDekIsR0FBYSxFQUNiLEtBQWUsRUFDZixJQUFhO1FBRWIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFuQkQsTUFBTTtRQUNGLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxvQkFBZ0IsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxvQkFBZSxDQUFDO0lBQzdCLENBQUM7Q0FlSjtBQTFCRCxnQ0EwQkM7QUFXRCxNQUFhLGFBQWE7SUFHdEI7UUFDSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJO1FBQ0EsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBZTtRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBWTtRQUNmLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNsQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFZO1FBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDM0I7U0FDSjtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDekIsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ2hCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3hCLE9BQU8sRUFBRSxDQUFDO1NBQ2IsQ0FBQyxzQ0FBc0M7UUFDeEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUNuQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ2pDLE9BQU87YUFDVixDQUFDLDJCQUEyQjtZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO2dCQUNuQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUU7b0JBQ2pDLE9BQU87aUJBQ1YsQ0FBQywrQkFBK0I7Z0JBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUNqQyxPQUFPO2lCQUNWLENBQUMsb0NBQW9DO2dCQUN0QyxJQUNJLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZELGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO3dCQUN0QixlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQzlEO29CQUNFLG1DQUFtQztvQkFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FDUCxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUMxQiw0QkFBNEIsRUFDNUIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFDMUIsR0FBRyxDQUNOLENBQUM7b0JBQ0YsSUFDSSxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQzFEO3dCQUNFLFFBQVEsQ0FBQyxJQUFJLENBQ1QsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLDhCQUE4QixlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FDM0osQ0FBQztxQkFDTDtpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUE5RUQsc0NBOEVDO0FBbUNELFNBQVMsb0JBQW9CLENBQUMsSUFBYTtJQUN2QyxJQUFJLElBQUksc0JBQWlCLEVBQUU7UUFDdkIsT0FBTyxFQUFFLENBQUM7S0FDYjtTQUFNLElBQUksSUFBSSwwQkFBbUIsRUFBRTtRQUNoQyxPQUFPLEVBQUUsQ0FBQztLQUNiO1NBQU0sSUFBSSxJQUFJLHdCQUFrQixFQUFFO1FBQy9CLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7U0FBTTtRQUNILE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUTtLQUN0QjtBQUNMLENBQUM7QUFFRCxNQUFlLFdBQVc7SUFxQnRCLFlBQ0ksYUFBK0IsRUFDL0IsZ0JBQWdDLEVBQ2hDLElBQWEsRUFDYixJQUFZLEVBQ1osTUFBYyxFQUNkLE9BQWUsRUFDZixLQUFhLEVBQ2IsSUFBWSxFQUNaLEtBQWE7UUE3QmpCLFVBQUssR0FBVyxNQUFNLENBQUM7UUFFdkIsYUFBUSxHQUFrQjtZQUN0QixhQUFhLDBCQUFnQjtZQUM3QixjQUFjLEVBQUUsRUFBRTtTQUNyQixDQUFDO1FBMEJFLElBQUksQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUNwRCxJQUFJLENBQUMsWUFBWSxHQUFHLHFCQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBRXBCLDhFQUE4RTtRQUM3RSxJQUFJLENBQUMsV0FBbUIsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBZ0IsRUFBRSxJQUFZLEVBQUUsTUFBYztRQUNyRCxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQztRQUNyQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUM5RCxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQy9ELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDO1FBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDbEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBSTtRQUNBLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTTtRQUNGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDO1FBQzNDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDO0lBQ3RELENBQUM7SUFFRCxZQUFZLENBQUMsSUFBWTtRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUM7SUFDdEQsQ0FBQztJQUVELEtBQUs7UUFDRCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxRQUFRO1FBQ0osT0FBTyxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxLQUFLO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsTUFBTSxrQkFBbUIsQ0FBQztJQUMxQyxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWdCO1FBQzFCLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQXVCO1FBQ2hDLHFFQUFxRTtRQUNyRSx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBaUIsQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLHFCQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQywyQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUM1QywyREFBMkQ7WUFDM0Qsc0JBQXNCO1lBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDckM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNKLE9BQU8sQ0FBQywyQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsUUFBUTtRQUNKLE9BQU8sQ0FDSCxDQUFDLDJCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUMxQyxJQUFJLENBQUMsZ0JBQWdCLHdCQUFpQjtZQUN0QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQ2xCLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSztRQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQix3QkFBaUIsRUFBRTtZQUN4QyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixzQkFBZSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcscUJBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFvQixFQUFFLE1BQXlCO1FBQ2pELElBQUksQ0FBQyxnQkFBZ0Isc0JBQWUsQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksbUJBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQztJQUMzQyxDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUM7SUFDMUMsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3JCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsRUFBRTtZQUMzQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxXQUFXLENBQUM7SUFDckQsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUFpQjtRQUM3QixzQkFBc0I7UUFDdEIsSUFBSSxrQkFBa0IsR0FBeUIsU0FBUyxDQUFDO1FBQ3pELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO2dCQUNyRCxrQkFBa0I7b0JBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7YUFDMUQ7U0FDSjtRQUNELElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUNyQixNQUFNLElBQUkscUJBQXFCLEVBQUUsQ0FBQztTQUNyQztRQUNELGlDQUFpQztRQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRSxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFDSSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixLQUFLLDRCQUFtQixDQUFDLElBQUksRUFDcEU7WUFDRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDbkI7YUFBTSxJQUNILElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEtBQUssNEJBQW1CLENBQUMsS0FBSyxFQUNyRTtZQUNFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNwQjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVqRCx5QkFBeUI7UUFDekIsSUFDSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxnQkFBZ0IscUNBQXVCO1lBQzVDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFDakI7WUFDRSxJQUNJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3pCLENBQUMsMkJBQWtCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQzVDO2dCQUNFLElBQUksQ0FBQyxZQUFZLEdBQUcscUJBQVksbUNBQXFCLElBQUksQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsZ0JBQWdCLG1DQUFxQixDQUFDO2dCQUMzQyxPQUFPO2FBQ1Y7U0FDSjtRQUVELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDaEQsSUFBSSxXQUFXLEtBQUssb0JBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDM0MsNkJBQTZCO1lBQzdCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7Z0JBQy9CLE9BQU87YUFDVjtZQUVELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1NBQ3JDO2FBQU0sSUFBSSxXQUFXLEtBQUssb0JBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDaEQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLHdCQUFpQixFQUFFO2dCQUN4QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxxQ0FBcUIsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQzthQUNyQztpQkFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IscUNBQXVCLEVBQUU7Z0JBQ3JELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLHFDQUFxQixDQUFDO2dCQUMxRCxJQUFJLENBQUMsWUFBWSxHQUFHLHFCQUFZLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO2FBQ3JDO1NBQ0o7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUM7SUFDdEMsQ0FBQztJQUVELE1BQU07UUFDRixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUk7UUFDQSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFnQjtRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sQ0FDSCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLCtCQUFvQjtnQkFDdEMsSUFBSSxDQUFDLGdCQUFnQiw2QkFBbUIsQ0FBQyxDQUNoRCxDQUFDO0lBQ04sQ0FBQztJQUVELEtBQUs7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOztBQXhRTSxpQkFBSyxHQUFXLENBQUMsQ0FBQztBQTJRN0IsTUFBYSxNQUFPLFNBQVEsV0FBVztJQUF2Qzs7UUFDSSxVQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ2pCLGFBQVEsR0FBRztZQUNQLGFBQWEsMEJBQWdCO1lBQzdCLGNBQWMsRUFBRTtnQkFDWjtvQkFDSSxLQUFLLDBCQUFnQjtvQkFDckIsa0JBQWtCLEVBQUUsK0NBQThCO2lCQUNyRDtnQkFDRDtvQkFDSSxLQUFLLGlCQUFZO29CQUNqQixrQkFBa0IsRUFBRSwwREFBbUM7aUJBQzFEO2dCQUNEO29CQUNJLEtBQUssOEJBQWtCO29CQUN2QixrQkFBa0IsRUFBRSxzREFBaUM7aUJBQ3hEO2dCQUNEO29CQUNJLEtBQUssNEJBQWlCO29CQUN0QixrQkFBa0IsRUFBRTs7OztxQkFJbkI7aUJBQ0o7Z0JBQ0Q7b0JBQ0ksS0FBSyx1Q0FBc0I7b0JBQzNCLGtCQUFrQixFQUFFLHFDQUFxQjtpQkFDNUM7Z0JBQ0Q7b0JBQ0ksS0FBSyxxQ0FBcUI7b0JBQzFCLGtCQUFrQixFQUFFLHFDQUFxQjtpQkFDNUM7Z0JBQ0Q7b0JBQ0ksS0FBSyxxQ0FBcUI7b0JBQzFCLGtCQUFrQixFQUFFLG1CQUFhO2lCQUNwQztnQkFDRDtvQkFDSSxLQUFLLG1CQUFhO29CQUNsQixrQkFBa0IsRUFBRTs7OztxQkFJbkI7aUJBQ0o7Z0JBQ0Q7b0JBQ0ksS0FBSyxxQkFBYztvQkFDbkIsa0JBQWtCLEVBQUUscUNBQXFCO2lCQUM1QztnQkFDRDtvQkFDSSxLQUFLLHFDQUFxQjtvQkFDMUIsa0JBQWtCLEVBQUUsMERBQW1DO2lCQUMxRDthQUNKO1NBQ0osQ0FBQztJQUlOLENBQUM7SUFIRyxLQUFLO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBMURELHdCQTBEQztBQUNELE1BQWEsR0FBSSxTQUFRLFdBQVc7SUFBcEM7O1FBQ0ksVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLGFBQVEsR0FBRztZQUNQLGFBQWEsMEJBQWdCO1lBQzdCLGNBQWMsRUFBRTtnQkFDWjtvQkFDSSxLQUFLLDBCQUFnQjtvQkFDckIsa0JBQWtCLEVBQUUsMERBQW1DO2lCQUMxRDtnQkFDRDtvQkFDSSxLQUFLLDhCQUFrQjtvQkFDdkIsa0JBQWtCLEVBQUUsc0RBQWlDO2lCQUN4RDtnQkFDRDtvQkFDSSxLQUFLLDRCQUFpQjtvQkFDdEIsa0JBQWtCLEVBQUUsc0RBQWlDO2lCQUN4RDtnQkFDRDtvQkFDSSxLQUFLLDRCQUFpQjtvQkFDdEIsa0JBQWtCLEVBQUU7Ozs7O3FCQUtuQjtpQkFDSjtnQkFDRDtvQkFDSSxLQUFLLDBCQUFnQjtvQkFDckIsa0JBQWtCLEVBQUU7Ozs7O3FCQUtuQjtpQkFDSjtnQkFDRDtvQkFDSSxLQUFLLHVDQUFzQjtvQkFDM0Isa0JBQWtCLEVBQUUscUNBQXFCO2lCQUM1QztnQkFDRDtvQkFDSSxLQUFLLHFDQUFxQjtvQkFDMUIsa0JBQWtCLEVBQUUscUNBQXFCO2lCQUM1QztnQkFDRDtvQkFDSSxLQUFLLHFDQUFxQjtvQkFDMUIsa0JBQWtCLEVBQUUsbUJBQWE7aUJBQ3BDO2dCQUNEO29CQUNJLEtBQUssbUJBQWE7b0JBQ2xCLGtCQUFrQixFQUFFOzs7O3FCQUluQjtpQkFDSjtnQkFDRDtvQkFDSSxLQUFLLHFCQUFjO29CQUNuQixrQkFBa0IsRUFBRSxxQ0FBcUI7aUJBQzVDO2dCQUNEO29CQUNJLEtBQUsscUNBQXFCO29CQUMxQixrQkFBa0IsRUFBRTs7Ozs7cUJBS25CO2lCQUNKO2FBQ0o7U0FDSixDQUFDO0lBSU4sQ0FBQztJQUhHLEtBQUs7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUF6RUQsa0JBeUVDO0FBRUQsTUFBYSxHQUFJLFNBQVEsV0FBVztJQUFwQzs7UUFDSSxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2QsYUFBUSxHQUFHO1lBQ1AsYUFBYSwwQkFBZ0I7WUFDN0IsY0FBYyxFQUFFO2dCQUNaO29CQUNJLEtBQUssMEJBQWdCO29CQUNyQixrQkFBa0IsRUFBRTs7OztxQkFJbkI7aUJBQ0o7Z0JBQ0Q7b0JBQ0ksS0FBSyxpQkFBWTtvQkFDakIsa0JBQWtCLEVBQUUsMERBQW1DO2lCQUMxRDtnQkFDRDtvQkFDSSxLQUFLLDhCQUFrQjtvQkFDdkIsa0JBQWtCLEVBQUUsc0RBQWlDO2lCQUN4RDtnQkFDRDtvQkFDSSxLQUFLLDRCQUFpQjtvQkFDdEIsa0JBQWtCLEVBQUUsc0RBQWlDO2lCQUN4RDtnQkFDRDtvQkFDSSxLQUFLLDRCQUFpQjtvQkFDdEIsa0JBQWtCLEVBQUU7Ozs7O3FCQUtuQjtpQkFDSjtnQkFDRDtvQkFDSSxLQUFLLDBCQUFnQjtvQkFDckIsa0JBQWtCLEVBQUU7Ozs7O3FCQUtuQjtpQkFDSjtnQkFDRDtvQkFDSSxLQUFLLHFCQUFjO29CQUNuQixrQkFBa0IsRUFBRSxxQ0FBcUI7aUJBQzVDO2dCQUNEO29CQUNJLEtBQUsscUNBQXFCO29CQUMxQixrQkFBa0IsRUFBRTs7Ozs7cUJBS25CO2lCQUNKO2FBQ0o7U0FDSixDQUFDO0lBSU4sQ0FBQztJQUhHLEtBQUs7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUE3REQsa0JBNkRDO0FBRUQsTUFBYSxLQUFNLFNBQVEsV0FBVztJQUF0Qzs7UUFDSSxVQUFLLEdBQUcsT0FBTyxDQUFDO1FBQ2hCLGFBQVEsR0FBRztZQUNQLGFBQWEsMEJBQWdCO1lBQzdCLGNBQWMsRUFBRTtnQkFDWjtvQkFDSSxLQUFLLDBCQUFnQjtvQkFDckIsa0JBQWtCLEVBQUUsMERBQW1DO2lCQUMxRDtnQkFDRDtvQkFDSSxLQUFLLDhCQUFrQjtvQkFDdkIsa0JBQWtCLEVBQUUsc0RBQWlDO2lCQUN4RDtnQkFDRDtvQkFDSSxLQUFLLDRCQUFpQjtvQkFDdEIsa0JBQWtCLEVBQUUsc0RBQWlDO2lCQUN4RDtnQkFDRDtvQkFDSSxLQUFLLDRCQUFpQjtvQkFDdEIsa0JBQWtCLEVBQUU7Ozs7cUJBSW5CO2lCQUNKO2dCQUNEO29CQUNJLEtBQUssMEJBQWdCO29CQUNyQixrQkFBa0IsRUFBRTs7OztxQkFJbkI7aUJBQ0o7Z0JBQ0Q7b0JBQ0ksS0FBSyxxQkFBYztvQkFDbkIsa0JBQWtCLEVBQUUscUNBQXFCO2lCQUM1QztnQkFDRDtvQkFDSSxLQUFLLHFDQUFxQjtvQkFDMUIsa0JBQWtCLEVBQUU7Ozs7O3FCQUtuQjtpQkFDSjthQUNKO1NBQ0osQ0FBQztJQUlOLENBQUM7SUFIRyxLQUFLO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBbkRELHNCQW1EQztBQUVELE1BQWEsTUFBTyxTQUFRLFdBQVc7SUFBdkM7O1FBQ0ksVUFBSyxHQUFHLFFBQVEsQ0FBQztRQUNqQixhQUFRLEdBQUc7WUFDUCxhQUFhLDBCQUFnQjtZQUM3QixjQUFjLEVBQUU7Z0JBQ1o7b0JBQ0ksS0FBSywwQkFBZ0I7b0JBQ3JCLGtCQUFrQixFQUFFLDBEQUFtQztpQkFDMUQ7Z0JBQ0Q7b0JBQ0ksS0FBSyw4QkFBa0I7b0JBQ3ZCLGtCQUFrQixFQUFFLHNEQUFpQztpQkFDeEQ7Z0JBQ0Q7b0JBQ0ksS0FBSyw0QkFBaUI7b0JBQ3RCLGtCQUFrQixFQUFFLHNEQUFpQztpQkFDeEQ7Z0JBQ0Q7b0JBQ0ksS0FBSyw0QkFBaUI7b0JBQ3RCLGtCQUFrQixFQUFFLDBCQUFnQjtpQkFDdkM7Z0JBQ0Q7b0JBQ0ksS0FBSywwQkFBZ0I7b0JBQ3JCLGtCQUFrQixFQUFFLDBCQUFnQjtpQkFDdkM7Z0JBQ0Q7b0JBQ0ksS0FBSyxxQkFBYztvQkFDbkIsa0JBQWtCLEVBQUUscUNBQXFCO2lCQUM1QztnQkFDRDtvQkFDSSxLQUFLLHFDQUFxQjtvQkFDMUIsa0JBQWtCLEVBQUU7Ozs7O3FCQUtuQjtpQkFDSjthQUNKO1NBQ0osQ0FBQztJQUlOLENBQUM7SUFIRyxLQUFLO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBM0NELHdCQTJDQztBQUVELE1BQWEsVUFBVyxTQUFRLFdBQVc7SUFBM0M7O1FBQ0ksVUFBSyxHQUFHLGFBQWEsQ0FBQztRQUN0QixhQUFRLEdBQUc7WUFDUCxhQUFhLDBCQUFnQjtZQUM3QixjQUFjLEVBQUU7Z0JBQ1o7b0JBQ0ksS0FBSywwQkFBZ0I7b0JBQ3JCLGtCQUFrQixFQUFFLDBEQUFtQztpQkFDMUQ7Z0JBQ0Q7b0JBQ0ksS0FBSyw4QkFBa0I7b0JBQ3ZCLGtCQUFrQixFQUFFLHNEQUFpQztpQkFDeEQ7Z0JBQ0Q7b0JBQ0ksS0FBSyw0QkFBaUI7b0JBQ3RCLGtCQUFrQixFQUFFLHNEQUFpQztpQkFDeEQ7Z0JBQ0Q7b0JBQ0ksS0FBSyw0QkFBaUI7b0JBQ3RCLGtCQUFrQixFQUFFLDBCQUFnQjtpQkFDdkM7Z0JBQ0Q7b0JBQ0ksS0FBSywwQkFBZ0I7b0JBQ3JCLGtCQUFrQixFQUFFLDBCQUFnQjtpQkFDdkM7Z0JBQ0Q7b0JBQ0ksS0FBSyxxQkFBYztvQkFDbkIsa0JBQWtCLEVBQUUscUNBQXFCO2lCQUM1QztnQkFDRDtvQkFDSSxLQUFLLHFDQUFxQjtvQkFDMUIsa0JBQWtCLEVBQUU7Ozs7O3FCQUtuQjtpQkFDSjthQUNKO1NBQ0osQ0FBQztJQUlOLENBQUM7SUFIRyxLQUFLO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBM0NELGdDQTJDQztBQUVELE1BQWEsSUFBSyxTQUFRLFdBQVc7SUFBckM7O1FBQ0ksVUFBSyxHQUFHLE1BQU0sQ0FBQztRQUNmLGFBQVEsR0FBRztZQUNQLGFBQWEsMEJBQWdCO1lBQzdCLGNBQWMsRUFBRTtnQkFDWjtvQkFDSSxLQUFLLDBCQUFnQjtvQkFDckIsa0JBQWtCLEVBQUUsMERBQW1DO2lCQUMxRDtnQkFDRDtvQkFDSSxLQUFLLDhCQUFrQjtvQkFDdkIsa0JBQWtCLEVBQUUsc0RBQWlDO2lCQUN4RDtnQkFDRDtvQkFDSSxLQUFLLDRCQUFpQjtvQkFDdEIsa0JBQWtCLEVBQUUsc0RBQWlDO2lCQUN4RDtnQkFDRDtvQkFDSSxLQUFLLDRCQUFpQjtvQkFDdEIsa0JBQWtCLEVBQUUsMEJBQWdCO2lCQUN2QztnQkFDRDtvQkFDSSxLQUFLLDBCQUFnQjtvQkFDckIsa0JBQWtCLEVBQUUsMEJBQWdCO2lCQUN2QztnQkFDRDtvQkFDSSxLQUFLLHFCQUFjO29CQUNuQixrQkFBa0IsRUFBRSxxQ0FBcUI7aUJBQzVDO2dCQUNEO29CQUNJLEtBQUsscUNBQXFCO29CQUMxQixrQkFBa0IsRUFBRTs7Ozs7cUJBS25CO2lCQUNKO2FBQ0o7U0FDSixDQUFDO0lBSU4sQ0FBQztJQUhHLEtBQUs7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUEzQ0Qsb0JBMkNDO0FBRUQsTUFBYSxLQUFNLFNBQVEsV0FBVztJQUF0Qzs7UUFDSSxVQUFLLEdBQUcsT0FBTyxDQUFDO1FBQ2hCLGFBQVEsR0FBRztZQUNQLGFBQWEsMEJBQWdCO1lBQzdCLGNBQWMsRUFBRTtnQkFDWjtvQkFDSSxLQUFLLDBCQUFnQjtvQkFDckIsa0JBQWtCLEVBQUUsMERBQW1DO2lCQUMxRDtnQkFDRDtvQkFDSSxLQUFLLDhCQUFrQjtvQkFDdkIsa0JBQWtCLEVBQUUsc0RBQWlDO2lCQUN4RDtnQkFDRDtvQkFDSSxLQUFLLDRCQUFpQjtvQkFDdEIsa0JBQWtCLEVBQUUsc0RBQWlDO2lCQUN4RDtnQkFDRDtvQkFDSSxLQUFLLDRCQUFpQjtvQkFDdEIsa0JBQWtCLEVBQUUsMEJBQWdCO2lCQUN2QztnQkFDRDtvQkFDSSxLQUFLLDBCQUFnQjtvQkFDckIsa0JBQWtCLEVBQUUsMEJBQWdCO2lCQUN2QztnQkFDRDtvQkFDSSxLQUFLLHFCQUFjO29CQUNuQixrQkFBa0IsRUFBRSxxQ0FBcUI7aUJBQzVDO2dCQUNEO29CQUNJLEtBQUsscUNBQXFCO29CQUMxQixrQkFBa0IsRUFBRTs7Ozs7cUJBS25CO2lCQUNKO2FBQ0o7U0FDSixDQUFDO0lBSU4sQ0FBQztJQUhHLEtBQUs7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSjtBQTNDRCxzQkEyQ0M7QUFFRCxNQUFhLEtBQU0sU0FBUSxXQUFXO0lBQXRDOztRQUNJLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEIsYUFBUSxHQUFHO1lBQ1AsYUFBYSwwQkFBZ0I7WUFDN0IsY0FBYyxFQUFFO2dCQUNaO29CQUNJLEtBQUssMEJBQWdCO29CQUNyQixrQkFBa0IsRUFBRSwwREFBbUM7aUJBQzFEO2dCQUNEO29CQUNJLEtBQUssOEJBQWtCO29CQUN2QixrQkFBa0IsRUFBRSxzREFBaUM7aUJBQ3hEO2dCQUNEO29CQUNJLEtBQUssNEJBQWlCO29CQUN0QixrQkFBa0IsRUFBRSx3REFBa0M7aUJBQ3pEO2FBQ0o7U0FDSixDQUFDO0lBT04sQ0FBQztJQU5HLEtBQUs7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsUUFBUTtRQUNKLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSjtBQXpCRCxzQkF5QkM7QUFFRCxNQUFhLG1CQUFtQjtDQUFHO0FBQW5DLGtEQUFtQztBQUVuQyxTQUFTLFVBQVUsQ0FDZixVQUErQixFQUMvQixLQUFhLEVBQ2IsS0FBYTtJQUViLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN2QixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUM7S0FDakM7U0FBTTtRQUNILE9BQU8sS0FBSyxHQUFHLEtBQUssQ0FBQztLQUN4QjtBQUNMLENBQUM7QUFFRCxTQUFnQixTQUFTLENBQ3JCLE9BQWUsRUFDZixFQUFvQixFQUNwQixTQUF5QixFQUN6QixJQUFhLEVBQ2IsSUFBWSxFQUNaLE1BQWMsRUFDZCxPQUFlLEVBQ2YsS0FBYSxFQUNiLElBQXdCO0lBRXhCLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRTtRQUN0QixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDcEIsSUFBSSxHQUFHLFVBQVUsQ0FBQyxvQkFBWSx5QkFBa0IsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNyRTtRQUNELE9BQU8sSUFBSSxNQUFNLENBQ2IsRUFBRSxFQUNGLFNBQVMsRUFDVCxJQUFJLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFDTixPQUFPLEVBQ1AsS0FBSyxFQUNMLElBQUksaUJBRVAsQ0FBQztLQUNMO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxFQUFFO1FBQ25CLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUNwQixJQUFJLEdBQUcsVUFBVSxDQUNiLGlCQUFTLG1CQUVULEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQzVCLENBQUM7U0FDTCxDQUFDLHVDQUF1QztRQUN6QyxPQUFPLElBQUksR0FBRyxDQUNWLEVBQUUsRUFDRixTQUFTLEVBQ1QsSUFBSSxFQUNKLElBQUksRUFDSixNQUFNLEVBQ04sT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLGlCQUVQLENBQUM7S0FDTDtTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssRUFBRTtRQUMxQixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDcEIsSUFBSSxHQUFHLFVBQVUsQ0FDYixpQkFBUyxtQkFFVCxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUM1QixDQUFDO1NBQ0wsQ0FBQyx1Q0FBdUM7UUFDekMsT0FBTyxJQUFJLEdBQUcsQ0FDVixFQUFFLEVBQ0YsU0FBUyxFQUNULElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFDUCxLQUFLLEVBQ0wsSUFBSSxpQkFFUCxDQUFDO0tBQ0w7U0FBTSxJQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUU7UUFDNUIsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3BCLElBQUksR0FBRyxVQUFVLENBQUMsbUJBQVcsdUJBQWlCLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDbEU7UUFDRCxPQUFPLElBQUksS0FBSyxDQUNaLEVBQUUsRUFDRixTQUFTLEVBQ1QsSUFBSSxFQUNKLElBQUksRUFDSixNQUFNLEVBQ04sT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLG1CQUVQLENBQUM7S0FDTDtTQUFNLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRTtRQUM3QixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDcEIsSUFBSSxHQUFHLFVBQVUsQ0FBQyxvQkFBWSx5QkFBa0IsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNyRTtRQUNELE9BQU8sSUFBSSxNQUFNLENBQ2IsRUFBRSxFQUNGLFNBQVMsRUFDVCxJQUFJLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFDTixPQUFPLEVBQ1AsS0FBSyxFQUNMLElBQUksZUFFUCxDQUFDO0tBQ0w7U0FBTSxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7UUFDM0IsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3BCLElBQUksR0FBRyxVQUFVLENBQUMsa0JBQVUscUJBQWdCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDL0Q7UUFDRCxPQUFPLElBQUksSUFBSSxDQUNYLEVBQUUsRUFDRixTQUFTLEVBQ1QsSUFBSSxFQUNKLElBQUksRUFDSixNQUFNLEVBQ04sT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLGVBRVAsQ0FBQztLQUNMO1NBQU0sSUFBSSxPQUFPLEtBQUssYUFBYSxFQUFFO1FBQ2xDLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUNwQixJQUFJLEdBQUcsVUFBVSxDQUNiLGtCQUFVLGtDQUVWLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUN2QixDQUFDO1NBQ0w7UUFDRCxPQUFPLElBQUksVUFBVSxDQUNqQixFQUFFLEVBQ0YsU0FBUyxFQUNULElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFDUCxLQUFLLEVBQ0wsSUFBSSxlQUVQLENBQUM7S0FDTDtTQUFNLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtRQUM1QixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDcEIsSUFBSSxHQUFHLFVBQVUsQ0FBQyxtQkFBVyx1QkFBaUIsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNsRTtRQUNELE9BQU8sSUFBSSxLQUFLLENBQ1osRUFBRSxFQUNGLFNBQVMsRUFDVCxJQUFJLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFDTixPQUFPLEVBQ1AsS0FBSyxFQUNMLElBQUksbUJBRVAsQ0FBQztLQUNMO1NBQU0sSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO1FBQzVCLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUNwQixJQUFJLEdBQUcsVUFBVSxDQUFDLG1CQUFXLHVCQUFpQixLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsT0FBTyxJQUFJLEtBQUssQ0FDWixFQUFFLEVBQ0YsU0FBUyxFQUNULElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFDUCxLQUFLLEVBQ0wsSUFBSSxnQkFFUCxDQUFDO0tBQ0w7SUFDRCxNQUFNLElBQUksbUJBQW1CLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBaktELDhCQWlLQzs7Ozs7Ozs7Ozs7Ozs7QUMvakNELE1BQWEsZ0JBQWdCO0NBRTVCO0FBRkQsNENBRUM7QUFFRCxNQUFhLGVBQWU7Q0FRM0I7QUFSRCwwQ0FRQztBQUVELE1BQWEsYUFBYTtDQUd6QjtBQUhELHNDQUdDO0FBRUQsSUFBWSxtQkFJWDtBQUpELFdBQVksbUJBQW1CO0lBQzNCLDZEQUFJO0lBQ0osK0RBQUs7SUFDTCxtRUFBTztBQUNYLENBQUMsRUFKVyxtQkFBbUIsR0FBbkIsMkJBQW1CLEtBQW5CLDJCQUFtQixRQUk5QjtBQW1CRCxJQUFZLFdBS1g7QUFMRCxXQUFZLFdBQVc7SUFDbkIsK0RBQWE7SUFDYiwrREFBYTtJQUNiLGlCQUFpQjtJQUNqQiwyREFBVztBQUNmLENBQUMsRUFMVyxXQUFXLEdBQVgsbUJBQVcsS0FBWCxtQkFBVyxRQUt0QjtBQUVELE1BQWEsU0FBUztJQU9sQixZQUFZLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVU7UUFDdEQsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0NBQ0o7QUFkRCw4QkFjQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLEtBQWE7SUFDNUMsT0FBTyxDQUNILEtBQUssMENBQXlCO1FBQzlCLEtBQUssd0NBQXdCO1FBQzdCLEtBQUssc0JBQWdCO1FBQ3JCLEtBQUssd0NBQXdCLENBQ2hDLENBQUM7QUFDTixDQUFDO0FBUEQsZ0RBT0M7QUFFRCxTQUFnQixZQUFZLENBQUMsS0FBYSxFQUFFLEdBQWE7SUFDckQsUUFBUSxLQUFLLEVBQUU7UUFDWDtZQUNJLE9BQU8sSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakM7WUFDSSxPQUFPLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DO1lBQ0ksT0FBTyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQztZQUNJLE9BQU8sSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEM7WUFDSSxPQUFPLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDO1lBQ0ksT0FBTyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QjtZQUNJLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QztZQUNJLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QztZQUNJLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QztZQUNJLE9BQU8sSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUI7WUFDSSxPQUFPLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CO1lBQ0ksT0FBTyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDO1lBQ0ksT0FBTyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3hDO0lBQ0QsT0FBTyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBOUJELG9DQThCQztBQVVELE1BQU0sbUJBQW1CO0lBU3JCLFlBQVksR0FBYTtRQVJ6QixVQUFLLDRCQUFrQjtRQUV2QixnQkFBVyxHQUFHLE1BQU0sQ0FBQztRQUNyQixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBR2Qsd0JBQW1CLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1FBRzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xDLE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQztTQUNwQztRQUNELE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0NBQ0o7QUFFRCxNQUFhLFlBQWEsU0FBUSxtQkFBbUI7SUFBckQ7O1FBQ0ksVUFBSyw0QkFBa0I7UUFDdkIsZ0JBQVcsR0FBRyxNQUFNLENBQUM7UUFDckIsd0JBQW1CLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1FBQ2hELGFBQVEsR0FBRyxFQUFFLENBQUM7SUFDbEIsQ0FBQztDQUFBO0FBTEQsb0NBS0M7QUFFRCxNQUFhLFFBQVMsU0FBUSxtQkFBbUI7SUFBakQ7O1FBQ0ksVUFBSyxtQkFBYztRQUNuQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQix3QkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7UUFDaEQsYUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0NBQUE7QUFMRCw0QkFLQztBQUVELE1BQWEsaUJBQWtCLFNBQVEsbUJBQW1CO0lBQTFEOztRQUNJLFVBQUssdUNBQXVCO1FBQzVCLGdCQUFXLEdBQUcsVUFBVSxDQUFDO1FBQ3pCLHdCQUFtQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztRQUMvQyxhQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLENBQUM7Q0FBQTtBQUxELDhDQUtDO0FBRUQsTUFBYSxTQUFVLFNBQVEsbUJBQW1CO0lBQWxEOztRQUNJLFVBQUsscUJBQWU7UUFDcEIsZ0JBQVcsR0FBRyxNQUFNLENBQUM7UUFDckIsd0JBQW1CLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1FBQy9DLGFBQVEsR0FBRyxFQUFFLENBQUM7SUFDbEIsQ0FBQztDQUFBO0FBTEQsOEJBS0M7QUFFRCxNQUFhLFVBQVcsU0FBUSxtQkFBbUI7SUFBbkQ7O1FBQ0ksVUFBSyx1QkFBZ0I7UUFDckIsZ0JBQVcsR0FBRyxPQUFPLENBQUM7UUFDdEIsd0JBQW1CLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDO1FBQ2xELGFBQVEsR0FBRyxFQUFFLENBQUM7SUFDbEIsQ0FBQztDQUFBO0FBTEQsZ0NBS0M7QUFFRCxNQUFhLGlCQUFrQixTQUFRLG1CQUFtQjtJQUExRDs7UUFDSSxVQUFLLHVDQUF1QjtRQUM1QixnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQUMxQix3QkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7UUFDL0MsYUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0NBQUE7QUFMRCw4Q0FLQztBQUVELE1BQWEsY0FBYztJQVV2QixZQUFZLEdBQWE7UUFUekIsVUFBSyxnQ0FBb0I7UUFFekIsZ0JBQVcsR0FBRyxNQUFNLENBQUM7UUFDckIsd0JBQW1CLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1FBRWhELG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBRXBCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFHVixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDNUQsQ0FBQztRQUNGLElBQ0ksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7WUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQ3pEO1lBQ0UsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDO1NBQ3BDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pFLE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQztTQUNwQztRQUNELE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0NBQ0o7QUEvQkQsd0NBK0JDO0FBRUQsTUFBYSxhQUFhO0lBU3RCLFlBQVksR0FBYTtRQVJ6QixVQUFLLDhCQUFtQjtRQUN4QixnQkFBVyxHQUFHLE1BQU0sQ0FBQztRQUNyQix3QkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7UUFFL0Msb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFFcEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUdWLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQzVELENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDN0MsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDO1NBQ3BDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pFLE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQztTQUNwQztRQUNELE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0NBQ0o7QUF6QkQsc0NBeUJDO0FBRUQsTUFBYSxhQUFjLFNBQVEsY0FBYztJQUFqRDs7UUFDSSxVQUFLLDhCQUFtQjtRQUN4QixnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQUMxQixvQkFBZSxHQUFHLEdBQUcsQ0FBQztRQUN0QixhQUFRLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7Q0FBQTtBQUxELHNDQUtDO0FBRUQsTUFBYSxZQUFhLFNBQVEsYUFBYTtJQUEvQzs7UUFDSSxVQUFLLDRCQUFrQjtRQUN2QixnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQUMxQixvQkFBZSxHQUFHLEdBQUcsQ0FBQztRQUN0QixhQUFRLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7Q0FBQTtBQUxELG9DQUtDO0FBRUQsTUFBYSxVQUFVO0lBUW5CLFlBQ0ksR0FBYSxFQUNiLFNBQW9CLEVBQ3BCLE1BQXlCO1FBVjdCLFVBQUssdUJBQWdCO1FBQ3JCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLHdCQUFtQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztRQVUzQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUN2QixPQUFPLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyx5QkFBeUI7U0FDNUQ7UUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztZQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUM3RDthQUFNO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQztZQUNyRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUM3RDtRQUVELElBQ0ksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQzFDO1lBQ0UsWUFBWTtZQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQzdCLE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQztTQUNwQztRQUNELE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0NBQ0o7QUEzQ0QsZ0NBMkNDO0FBRUQsTUFBYSxnQkFBZ0I7SUFNekIsWUFBWSxHQUFhO1FBTHpCLFVBQUssb0NBQXNCO1FBQzNCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLHdCQUFtQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztRQUkzQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2hDLE9BQU8sV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLCtCQUErQjtTQUNsRTtRQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7WUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDN0Q7YUFBTTtZQUNILElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7WUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDN0Q7UUFFRCxPQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUM7SUFDckMsQ0FBQztDQUNKO0FBeEJELDRDQXdCQztBQUVELE1BQWEsa0JBQWtCO0lBTTNCLFlBQVksR0FBYTtRQUx6QixVQUFLLHlDQUF3QjtRQUM3QixnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQUMxQix3QkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7UUFJM0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDMUIsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDO0lBQ3JDLENBQUM7Q0FDSjtBQWpCRCxnREFpQkM7QUFFRCxNQUFhLGlCQUFpQjtJQU0xQixZQUFZLEdBQWE7UUFMekIsVUFBSyx1Q0FBdUI7UUFDNUIsZ0JBQVcsR0FBRyxnQkFBZ0IsQ0FBQztRQUMvQix3QkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7UUFJNUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMxQyxPQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUM7U0FDcEM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUM7SUFDckMsQ0FBQztDQUNKO0FBbEJELDhDQWtCQzs7Ozs7OztVQzVXRDtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7O1VDdEJBO1VBQ0E7VUFDQTtVQUNBIiwiZmlsZSI6Im1haW4tYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFBFVF9OQU1FUzogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KFtcbiAgICBbMSwgJ0JlbGxhJ10sXG4gICAgWzIsICdDaGFybGllJ10sXG4gICAgWzMsICdNYXgnXSxcbiAgICBbNCwgJ01vbGx5J10sXG4gICAgWzUsICdDb2NvJ10sXG4gICAgWzYsICdCdWRkeSddLFxuICAgIFs3LCAnUnVieSddLFxuICAgIFs4LCAnT3NjYXInXSxcbiAgICBbOSwgJ0x1Y3knXSxcbiAgICBbMTAsICdCYWlsZXknXSxcbiAgICBbMTEsICdNaWxvJ10sXG4gICAgWzEyLCAnRGFpc3knXSxcbiAgICBbMTMsICdBcmNoaWUnXSxcbiAgICBbMTQsICdPbGxpZSddLFxuICAgIFsxNSwgJ1Jvc2llJ10sXG4gICAgWzE2LCAnTG9sYSddLFxuICAgIFsxNywgJ0ZyYW5raWUnXSxcbiAgICBbMTgsICdUb2J5J10sXG4gICAgWzE5LCAnUm94eSddLFxuICAgIFsyMCwgJ1BvcHB5J10sXG4gICAgWzIxLCAnTHVuYSddLFxuICAgIFsyMiwgJ0phY2snXSxcbiAgICBbMjMsICdNaWxsaWUnXSxcbiAgICBbMjQsICdUZWRkeSddLFxuICAgIFsyNSwgJ0hhcnJ5J10sXG4gICAgWzI2LCAnQ29vcGVyJ10sXG4gICAgWzI3LCAnQmVhciddLFxuICAgIFsyOCwgJ1JvY2t5J10sXG4gICAgWzI5LCAnQWxmaWUnXSxcbiAgICBbMzAsICdIdWdvJ10sXG4gICAgWzMxLCAnQm9ubmllJ10sXG4gICAgWzMyLCAnUGVwcGVyJ10sXG4gICAgWzMzLCAnTGlseSddLFxuICAgIFszNCwgJ1RpbGx5J10sXG4gICAgWzM1LCAnTGVvJ10sXG4gICAgWzM2LCAnTWFnZ2llJ10sXG4gICAgWzM3LCAnR2VvcmdlJ10sXG4gICAgWzM4LCAnTWlhJ10sXG4gICAgWzM5LCAnTWFybGV5J10sXG4gICAgWzQwLCAnSGFybGV5J10sXG4gICAgWzQxLCAnQ2hsb2UnXSxcbiAgICBbNDIsICdMdWx1J10sXG4gICAgWzQzLCAnTWlzc3knXSxcbiAgICBbNDQsICdKYXNwZXInXSxcbiAgICBbNDUsICdCaWxseSddLFxuICAgIFs0NiwgJ05hbGEnXSxcbiAgICBbNDcsICdNb250eSddLFxuICAgIFs0OCwgJ1ppZ2d5J10sXG4gICAgWzQ5LCAnV2luc3RvbiddLFxuICAgIFs1MCwgJ1pldXMnXSxcbiAgICBbNTEsICdab2UnXSxcbiAgICBbNTIsICdTdGVsbGEnXSxcbiAgICBbNTMsICdTYXNoYSddLFxuICAgIFs1NCwgJ1J1c3R5J10sXG4gICAgWzU1LCAnR3VzJ10sXG4gICAgWzU2LCAnQmF4dGVyJ10sXG4gICAgWzU3LCAnRGV4dGVyJ10sXG4gICAgWzU4LCAnRGllc2VsJ10sXG4gICAgWzU5LCAnV2lsbG93J10sXG4gICAgWzYwLCAnQmFybmV5J10sXG4gICAgWzYxLCAnQnJ1bm8nXSxcbiAgICBbNjIsICdQZW5ueSddLFxuICAgIFs2MywgJ0hvbmV5J10sXG4gICAgWzY0LCAnTWlsbHknXSxcbiAgICBbNjUsICdNdXJwaHknXSxcbiAgICBbNjYsICdTaW1iYSddLFxuICAgIFs2NywgJ0hvbGx5J10sXG4gICAgWzY4LCAnQmVuamknXSxcbiAgICBbNjksICdIZW5yeSddLFxuICAgIFs3MCwgJ0xpbGx5J10sXG4gICAgWzcxLCAnUGlwcGEnXSxcbiAgICBbNzIsICdTaGFkb3cnXSxcbiAgICBbNzMsICdTYW0nXSxcbiAgICBbNzQsICdCdXN0ZXInXSxcbiAgICBbNzUsICdMdWNreSddLFxuICAgIFs3NiwgJ0VsbGllJ10sXG4gICAgWzc3LCAnRHVrZSddLFxuICAgIFs3OCwgJ0plc3NpZSddLFxuICAgIFs3OSwgJ0Nvb2tpZSddLFxuICAgIFs4MCwgJ0hhcnZleSddLFxuICAgIFs4MSwgJ0JydWNlJ10sXG4gICAgWzgyLCAnSmF4J10sXG4gICAgWzgzLCAnUmV4J10sXG4gICAgWzg0LCAnTG91aWUnXSxcbiAgICBbODUsICdCZW50bGV5J10sXG4gICAgWzg2LCAnSmV0J10sXG4gICAgWzg3LCAnQmFuam8nXSxcbiAgICBbODgsICdCZWF1J10sXG4gICAgWzg5LCAnRWxsYSddLFxuICAgIFs5MCwgJ1JhbHBoJ10sXG4gICAgWzkxLCAnTG9raSddLFxuICAgIFs5MiwgJ0xleGknXSxcbiAgICBbOTMsICdDaGVzdGVyJ10sXG4gICAgWzk0LCAnU29waGllJ10sXG4gICAgWzk1LCAnQ2hpbGxpJ10sXG4gICAgWzk2LCAnQmlsbGllJ10sXG4gICAgWzk3LCAnTG91aXMnXSxcbiAgICBbOTgsICdTY291dCddLFxuICAgIFs5OSwgJ0NoYXJsaWUnXSxcbiAgICBbMTAwLCAnQ2xlbyddLFxuICAgIFsxMDEsICdQdXJmZWN0J10sXG4gICAgWzEwMiwgJ1Nwb3QnXSxcbiAgICBbMTAzLCAnSGFycnknXSxcbiAgICBbMTA0LCAnQm9sdCddLFxuXSk7XG5cbmV4cG9ydCBjb25zdCBDQVRfTkFNRVMgPSBQRVRfTkFNRVM7XG5cbmV4cG9ydCBjb25zdCBET0dfTkFNRVMgPSBQRVRfTkFNRVM7XG5cbmV4cG9ydCBjb25zdCBDUkFCX05BTUVTOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oW1xuICAgIFsxLCAnRmVycmlzJ10sXG4gICAgWzIsICdQaW5jaHknXSxcbiAgICBbMywgJ0dyYWJieSddLFxuICAgIFs0LCAnQmlnIFJlZCddLFxuICAgIFs1LCAnQ3JhYmJ5J10sXG4gICAgWzYsICdCdWRkeSddLFxuICAgIFs3LCAnUnVieSBSZWQnXSxcbiAgICBbOCwgJ09zY2FyJ10sXG4gICAgWzksICdMdWN5J10sXG4gICAgWzEwLCAnQmFpbGV5J10sXG5dKTtcblxuZXhwb3J0IGNvbnN0IENMSVBQWV9OQU1FUzogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KFtcbiAgICBbMSwgJ0NsaXBweSddLFxuICAgIFsyLCAnS2FybCBLbGFtbWVyJ10sXG4gICAgWzMsICdDbGlwcHkgSnIuJ10sXG4gICAgWzQsICdNb2xseSddLFxuICAgIFs1LCAnQ29jbyddLFxuICAgIFs2LCAnQnVkZHknXSxcbiAgICBbNywgJ1J1YnknXSxcbiAgICBbOCwgJ09zY2FyJ10sXG4gICAgWzksICdMdWN5J10sXG4gICAgWzEwLCAnQmFpbGV5J10sXG5dKTtcblxuZXhwb3J0IGNvbnN0IFRPVE9ST19OQU1FUzogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KFtcbiAgICBbMSwgJ1RvdG9ybyddLFxuICAgIFsyLCAn44OI44OI44OtJ10sXG4gICAgWzMsICdNYXgnXSxcbiAgICBbNCwgJ01vbGx5J10sXG4gICAgWzUsICdDb2NvJ10sXG4gICAgWzYsICdCdWRkeSddLFxuICAgIFs3LCAnUnVieSddLFxuICAgIFs4LCAnT3NjYXInXSxcbiAgICBbOSwgJ0x1Y3knXSxcbiAgICBbMTAsICdCYWlsZXknXSxcbl0pO1xuXG5leHBvcnQgY29uc3QgU05BS0VfTkFNRVM6IE1hcDxudW1iZXIsIHN0cmluZz4gPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPihbXG4gICAgWzEsICdTbmVha3knXSxcbiAgICBbMiwgJ01yIFNsaXBwZXJ5J10sXG4gICAgWzMsICdNYXgnXSxcbiAgICBbNCwgJ01vbGx5J10sXG4gICAgWzUsICdDb2NvJ10sXG4gICAgWzYsICdCdWRkeSddLFxuICAgIFs3LCAnUnVieSddLFxuICAgIFs4LCAnT3NjYXInXSxcbiAgICBbOSwgJ0x1Y3knXSxcbiAgICBbMTAsICdCYWlsZXknXSxcbl0pO1xuXG5leHBvcnQgY29uc3QgRFVDS19OQU1FUzogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KFtcbiAgICBbMSwgJ1F1YWNreSddLFxuICAgIFsyLCAnRmxvYXR5J10sXG4gICAgWzMsICdEdWNrJ10sXG4gICAgWzQsICdNb2xseSddLFxuICAgIFs1LCAnU3Vuc2hpbmUnXSxcbiAgICBbNiwgJ0J1ZGR5J10sXG4gICAgWzcsICdDaGlycHknXSxcbiAgICBbOCwgJ09zY2FyJ10sXG4gICAgWzksICdMdWN5J10sXG4gICAgWzEwLCAnQmFpbGV5J10sXG5dKTtcblxuZXhwb3J0IGNvbnN0IFpBUFBZX05BTUVTOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oW1xuICAgIFsxLCAnWmFwcHknXSxcbiAgICBbMiwgJ1ppcHB5J10sXG4gICAgWzMsICdaYXBweSBKci4nXSxcbiAgICBbNCwgJ1pvcHB5J10sXG4gICAgWzUsICdadXBweSddLFxuICAgIFs2LCAnWmVwcHknXSxcbiAgICBbNywgJ0JpZyBaJ10sXG4gICAgWzgsICdMaXR0bGUgeiddLFxuICAgIFs5LCAnVGhlIEZsYXNoJ10sXG4gICAgWzEwLCAnVGhvciddLFxuXSk7XG5cbmV4cG9ydCBjb25zdCBST0NLWV9OQU1FUzogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KFtcbiAgICBbMSwgJ1JvY2t5J10sXG4gICAgWzIsICdUaGUgUm9jayddLFxuICAgIFszLCAnUXVhcnR6eSddLFxuICAgIFs0LCAnUm9ja3kgSSddLFxuICAgIFs1LCAnUm9ja3kgSUknXSxcbiAgICBbNiwgJ1JvY2t5IElJSSddLFxuICAgIFs3LCAnUGViYmxlcyBTci4nXSxcbiAgICBbOCwgJ0JpZyBHcmFuaXRlJ10sXG4gICAgWzksICdCb3VsZGVyJ10sXG4gICAgWzEwLCAnUm9ja2VmZWxsZXInXSxcbl0pO1xuIiwiLy8gVGhpcyBzY3JpcHQgd2lsbCBiZSBydW4gd2l0aGluIHRoZSB3ZWJ2aWV3IGl0c2VsZlxuaW1wb3J0IHtcbiAgICBQZXRTaXplLFxuICAgIFBldENvbG9yLFxuICAgIFBldFR5cGUsXG4gICAgVGhlbWUsXG4gICAgQ29sb3JUaGVtZUtpbmQsXG4gICAgV2Vidmlld01lc3NhZ2UsXG59IGZyb20gJy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQge1xuICAgIGNyZWF0ZVBldCxcbiAgICBJUGV0VHlwZSxcbiAgICBQZXRDb2xsZWN0aW9uLFxuICAgIFBldEVsZW1lbnQsXG4gICAgSVBldENvbGxlY3Rpb24sXG59IGZyb20gJy4vcGV0cyc7XG5pbXBvcnQgeyBCYWxsU3RhdGUsIFBldEVsZW1lbnRTdGF0ZSwgUGV0UGFuZWxTdGF0ZSB9IGZyb20gJy4vc3RhdGVzJztcblxuLyogVGhpcyBpcyBob3cgdGhlIFZTIENvZGUgQVBJIGNhbiBiZSBpbnZva2VkIGZyb20gdGhlIHBhbmVsICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFZzY29kZVN0YXRlQXBpIHtcbiAgICAgICAgZ2V0U3RhdGUoKTogUGV0UGFuZWxTdGF0ZTsgLy8gQVBJIGlzIGFjdHVhbGx5IEFueSwgYnV0IHdlIHdhbnQgaXQgdG8gYmUgdHlwZWQuXG4gICAgICAgIHNldFN0YXRlKHN0YXRlOiBQZXRQYW5lbFN0YXRlKTogdm9pZDtcbiAgICAgICAgcG9zdE1lc3NhZ2UobWVzc2FnZTogV2Vidmlld01lc3NhZ2UpOiB2b2lkO1xuICAgIH1cbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgYWNxdWlyZVZzQ29kZUFwaSgpOiBWc2NvZGVTdGF0ZUFwaTtcbiAgICB9XG59XG5cbmNvbnN0IHZzY29kZSA9IHdpbmRvdy5hY3F1aXJlVnNDb2RlQXBpKCk7XG5cbmV4cG9ydCB2YXIgYWxsUGV0czogSVBldENvbGxlY3Rpb24gPSBuZXcgUGV0Q29sbGVjdGlvbigpO1xudmFyIHBldENvdW50ZXI6IG51bWJlcjtcblxuZnVuY3Rpb24gY2FsY3VsYXRlQmFsbFJhZGl1cyhzaXplOiBQZXRTaXplKTogbnVtYmVyIHtcbiAgICBpZiAoc2l6ZSA9PT0gUGV0U2l6ZS5uYW5vKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH0gZWxzZSBpZiAoc2l6ZSA9PT0gUGV0U2l6ZS5tZWRpdW0pIHtcbiAgICAgICAgcmV0dXJuIDQ7XG4gICAgfSBlbHNlIGlmIChzaXplID09PSBQZXRTaXplLmxhcmdlKSB7XG4gICAgICAgIHJldHVybiA4O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAxOyAvLyBTaHJ1Z1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlRmxvb3Ioc2l6ZTogUGV0U2l6ZSwgdGhlbWU6IFRoZW1lKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoZW1lKSB7XG4gICAgICAgIGNhc2UgVGhlbWUuZm9yZXN0OlxuICAgICAgICAgICAgc3dpdGNoIChzaXplKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBQZXRTaXplLm1lZGl1bTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQwO1xuICAgICAgICAgICAgICAgIGNhc2UgUGV0U2l6ZS5sYXJnZTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDY1O1xuICAgICAgICAgICAgICAgIGNhc2UgUGV0U2l6ZS5uYW5vOlxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAyMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBUaGVtZS5jYXN0bGU6XG4gICAgICAgICAgICBzd2l0Y2ggKHNpemUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFBldFNpemUubWVkaXVtOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gODA7XG4gICAgICAgICAgICAgICAgY2FzZSBQZXRTaXplLmxhcmdlOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTIwO1xuICAgICAgICAgICAgICAgIGNhc2UgUGV0U2l6ZS5uYW5vOlxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA0NTtcbiAgICAgICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZU1vdXNlT3ZlcihlOiBNb3VzZUV2ZW50KSB7XG4gICAgdmFyIGVsID0gZS5jdXJyZW50VGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgIGFsbFBldHMucGV0cygpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQuY29sbGlzaW9uID09PSBlbCkge1xuICAgICAgICAgICAgaWYgKCFlbGVtZW50LnBldC5jYW5Td2lwZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudC5wZXQuc3dpcGUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBzdGFydEFuaW1hdGlvbnMoY29sbGlzaW9uOiBIVE1MRGl2RWxlbWVudCwgcGV0OiBJUGV0VHlwZSkge1xuICAgIGNvbGxpc2lvbi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBoYW5kbGVNb3VzZU92ZXIpO1xuICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgdmFyIHVwZGF0ZXMgPSBhbGxQZXRzLnNlZWtOZXdGcmllbmRzKCk7XG4gICAgICAgIHVwZGF0ZXMuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgdnNjb2RlLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBtZXNzYWdlLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICdpbmZvJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcGV0Lm5leHRGcmFtZSgpO1xuICAgICAgICBzYXZlU3RhdGUoKTtcbiAgICB9LCAxMDApO1xufVxuXG5mdW5jdGlvbiBhZGRQZXRUb1BhbmVsKFxuICAgIHBldFR5cGU6IFBldFR5cGUsXG4gICAgYmFzZVBldFVyaTogc3RyaW5nLFxuICAgIHBldENvbG9yOiBQZXRDb2xvcixcbiAgICBwZXRTaXplOiBQZXRTaXplLFxuICAgIGxlZnQ6IG51bWJlcixcbiAgICBib3R0b206IG51bWJlcixcbiAgICBmbG9vcjogbnVtYmVyLFxuICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IFBldEVsZW1lbnQge1xuICAgIHZhciBwZXRTcHJpdGVFbGVtZW50OiBIVE1MSW1hZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgcGV0U3ByaXRlRWxlbWVudC5jbGFzc05hbWUgPSAncGV0JztcbiAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BldHNDb250YWluZXInKSBhcyBIVE1MRGl2RWxlbWVudCkuYXBwZW5kQ2hpbGQoXG4gICAgICAgIHBldFNwcml0ZUVsZW1lbnQsXG4gICAgKTtcblxuICAgIHZhciBjb2xsaXNpb25FbGVtZW50OiBIVE1MRGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbGxpc2lvbkVsZW1lbnQuY2xhc3NOYW1lID0gJ2NvbGxpc2lvbic7XG4gICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwZXRzQ29udGFpbmVyJykgYXMgSFRNTERpdkVsZW1lbnQpLmFwcGVuZENoaWxkKFxuICAgICAgICBjb2xsaXNpb25FbGVtZW50LFxuICAgICk7XG5cbiAgICBjb25zdCByb290ID0gYmFzZVBldFVyaSArICcvJyArIHBldFR5cGUgKyAnLycgKyBwZXRDb2xvcjtcbiAgICBjb25zb2xlLmxvZygnQ3JlYXRpbmcgbmV3IHBldCA6ICcsIHBldFR5cGUsIHJvb3QpO1xuICAgIHZhciBuZXdQZXQgPSBjcmVhdGVQZXQoXG4gICAgICAgIHBldFR5cGUsXG4gICAgICAgIHBldFNwcml0ZUVsZW1lbnQsXG4gICAgICAgIGNvbGxpc2lvbkVsZW1lbnQsXG4gICAgICAgIHBldFNpemUsXG4gICAgICAgIGxlZnQsXG4gICAgICAgIGJvdHRvbSxcbiAgICAgICAgcm9vdCxcbiAgICAgICAgZmxvb3IsXG4gICAgICAgIG5hbWUsXG4gICAgKTtcbiAgICBwZXRDb3VudGVyKys7XG4gICAgc3RhcnRBbmltYXRpb25zKGNvbGxpc2lvbkVsZW1lbnQsIG5ld1BldCk7XG4gICAgcmV0dXJuIG5ldyBQZXRFbGVtZW50KFxuICAgICAgICBwZXRTcHJpdGVFbGVtZW50LFxuICAgICAgICBjb2xsaXNpb25FbGVtZW50LFxuICAgICAgICBuZXdQZXQsXG4gICAgICAgIHBldENvbG9yLFxuICAgICAgICBwZXRUeXBlLFxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlU3RhdGUoKSB7XG4gICAgdmFyIHN0YXRlID0gbmV3IFBldFBhbmVsU3RhdGUoKTtcbiAgICBzdGF0ZS5wZXRTdGF0ZXMgPSBuZXcgQXJyYXkoKTtcblxuICAgIGFsbFBldHMucGV0cygpLmZvckVhY2goKHBldEl0ZW0pID0+IHtcbiAgICAgICAgc3RhdGUucGV0U3RhdGVzIS5wdXNoKHtcbiAgICAgICAgICAgIHBldE5hbWU6IHBldEl0ZW0ucGV0Lm5hbWUoKSxcbiAgICAgICAgICAgIHBldENvbG9yOiBwZXRJdGVtLmNvbG9yLFxuICAgICAgICAgICAgcGV0VHlwZTogcGV0SXRlbS50eXBlLFxuICAgICAgICAgICAgcGV0U3RhdGU6IHBldEl0ZW0ucGV0LmdldFN0YXRlKCksXG4gICAgICAgICAgICBwZXRGcmllbmQ6IHBldEl0ZW0ucGV0LmZyaWVuZCgpXG4gICAgICAgICAgICAgICAgPyBwZXRJdGVtLnBldC5mcmllbmQoKS5uYW1lKClcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVsTGVmdDogcGV0SXRlbS5lbC5zdHlsZS5sZWZ0LFxuICAgICAgICAgICAgZWxCb3R0b206IHBldEl0ZW0uZWwuc3R5bGUuYm90dG9tLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBzdGF0ZS5wZXRDb3VudGVyID0gcGV0Q291bnRlcjtcbiAgICB2c2NvZGUuc2V0U3RhdGUoc3RhdGUpO1xufVxuXG5mdW5jdGlvbiByZWNvdmVyU3RhdGUoYmFzZVBldFVyaTogc3RyaW5nLCBwZXRTaXplOiBQZXRTaXplLCBmbG9vcjogbnVtYmVyKSB7XG4gICAgdmFyIHN0YXRlID0gdnNjb2RlLmdldFN0YXRlKCk7XG5cbiAgICBpZiAoc3RhdGUucGV0Q291bnRlciA9PT0gdW5kZWZpbmVkIHx8IGlzTmFOKHN0YXRlLnBldENvdW50ZXIpKSB7XG4gICAgICAgIHBldENvdW50ZXIgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBldENvdW50ZXIgPSBzdGF0ZS5wZXRDb3VudGVyITtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3ZlcnlNYXA6IE1hcDxJUGV0VHlwZSwgUGV0RWxlbWVudFN0YXRlPiA9IG5ldyBNYXAoKTtcbiAgICBzdGF0ZS5wZXRTdGF0ZXMhLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgLy8gRml4ZXMgYSBidWcgcmVsYXRlZCB0byBkdWNrIGFuaW1hdGlvbnNcbiAgICAgICAgaWYgKChwLnBldFR5cGUgYXMgc3RyaW5nKSA9PT0gJ3J1YmJlciBkdWNrJykge1xuICAgICAgICAgICAgKHAucGV0VHlwZSBhcyBzdHJpbmcpID0gJ3J1YmJlci1kdWNrJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgbmV3UGV0ID0gYWRkUGV0VG9QYW5lbChcbiAgICAgICAgICAgICAgICBwLnBldFR5cGUhLFxuICAgICAgICAgICAgICAgIGJhc2VQZXRVcmksXG4gICAgICAgICAgICAgICAgcC5wZXRDb2xvciEsXG4gICAgICAgICAgICAgICAgcGV0U2l6ZSxcbiAgICAgICAgICAgICAgICBwYXJzZUludChwLmVsTGVmdCEpLFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KHAuZWxCb3R0b20hKSxcbiAgICAgICAgICAgICAgICBmbG9vcixcbiAgICAgICAgICAgICAgICBwLnBldE5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYWxsUGV0cy5wdXNoKG5ld1BldCk7XG4gICAgICAgICAgICByZWNvdmVyeU1hcC5zZXQobmV3UGV0LnBldCwgcCk7XG4gICAgICAgIH0gY2F0Y2ggKEludmFsaWRQZXRFeGNlcHRpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICdTdGF0ZSBoYWQgaW52YWxpZCBwZXQgKCcgKyBwLnBldFR5cGUgKyAnKSwgZGlzY2FyZGluZy4nLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJlY292ZXJ5TWFwLmZvckVhY2goKHN0YXRlLCBwZXQpID0+IHtcbiAgICAgICAgLy8gUmVjb3ZlciBwcmV2aW91cyBzdGF0ZS5cbiAgICAgICAgcGV0LnJlY292ZXJTdGF0ZShzdGF0ZS5wZXRTdGF0ZSEpO1xuXG4gICAgICAgIC8vIFJlc29sdmUgZnJpZW5kIHJlbGF0aW9uc2hpcHNcbiAgICAgICAgdmFyIGZyaWVuZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHN0YXRlLnBldEZyaWVuZCkge1xuICAgICAgICAgICAgZnJpZW5kID0gYWxsUGV0cy5sb2NhdGUoc3RhdGUucGV0RnJpZW5kKTtcbiAgICAgICAgICAgIGlmIChmcmllbmQpIHtcbiAgICAgICAgICAgICAgICBwZXQucmVjb3ZlckZyaWVuZChmcmllbmQucGV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiByYW5kb21TdGFydFBvc2l0aW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICh3aW5kb3cuaW5uZXJXaWR0aCAqIDAuNykpO1xufVxuXG5sZXQgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG5cbmZ1bmN0aW9uIGluaXRDYW52YXMoKSB7XG4gICAgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BldENhbnZhcycpIGFzIEhUTUxDYW52YXNFbGVtZW50O1xuICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICBjdHguY2FudmFzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgY3R4LmNhbnZhcy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG59XG5cbi8vIEl0IGNhbm5vdCBhY2Nlc3MgdGhlIG1haW4gVlMgQ29kZSBBUElzIGRpcmVjdGx5LlxuZXhwb3J0IGZ1bmN0aW9uIHBldFBhbmVsQXBwKFxuICAgIGJhc2VQZXRVcmk6IHN0cmluZyxcbiAgICB0aGVtZTogVGhlbWUsXG4gICAgdGhlbWVLaW5kOiBDb2xvclRoZW1lS2luZCxcbiAgICBwZXRDb2xvcjogUGV0Q29sb3IsXG4gICAgcGV0U2l6ZTogUGV0U2l6ZSxcbiAgICBwZXRUeXBlOiBQZXRUeXBlLFxuKSB7XG4gICAgY29uc3QgYmFsbFJhZGl1czogbnVtYmVyID0gY2FsY3VsYXRlQmFsbFJhZGl1cyhwZXRTaXplKTtcbiAgICB2YXIgZmxvb3IgPSAwO1xuICAgIC8vIEFwcGx5IFRoZW1lIGJhY2tncm91bmRzXG4gICAgaWYgKHRoZW1lICE9PSBUaGVtZS5ub25lKSB7XG4gICAgICAgIHZhciBfdGhlbWVLaW5kID0gJyc7XG4gICAgICAgIHN3aXRjaCAodGhlbWVLaW5kKSB7XG4gICAgICAgICAgICBjYXNlIENvbG9yVGhlbWVLaW5kLmRhcms6XG4gICAgICAgICAgICAgICAgX3RoZW1lS2luZCA9ICdkYXJrJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sb3JUaGVtZUtpbmQubGlnaHQ6XG4gICAgICAgICAgICAgICAgX3RoZW1lS2luZCA9ICdsaWdodCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbG9yVGhlbWVLaW5kLmhpZ2hDb250cmFzdDpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgX3RoZW1lS2luZCA9ICdsaWdodCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJyR7YmFzZVBldFVyaX0vYmFja2dyb3VuZHMvJHt0aGVtZX0vYmFja2dyb3VuZC0ke190aGVtZUtpbmR9LSR7cGV0U2l6ZX0ucG5nJylgO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgICAgICdmb3JlZ3JvdW5kJyxcbiAgICAgICAgKSEuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybCgnJHtiYXNlUGV0VXJpfS9iYWNrZ3JvdW5kcy8ke3RoZW1lfS9mb3JlZ3JvdW5kLSR7X3RoZW1lS2luZH0tJHtwZXRTaXplfS5wbmcnKWA7XG5cbiAgICAgICAgZmxvb3IgPSBjYWxjdWxhdGVGbG9vcihwZXRTaXplLCB0aGVtZSk7IC8vIFRoZW1lcyBoYXZlIHBldHMgYXQgYSBzcGVjaWZpZWQgaGVpZ2h0IGZyb20gdGhlIGdyb3VuZFxuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gJyc7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JlZ3JvdW5kJykhLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICcnO1xuICAgIH1cblxuICAgIC8vLyBCb3VuY2luZyBiYWxsIGNvbXBvbmVudHMsIGNyZWRpdCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjk5ODIzNDNcbiAgICBjb25zdCBncmF2aXR5OiBudW1iZXIgPSAwLjIsXG4gICAgICAgIGRhbXBpbmc6IG51bWJlciA9IDAuOSxcbiAgICAgICAgdHJhY3Rpb246IG51bWJlciA9IDAuODtcbiAgICB2YXIgYmFsbFN0YXRlOiBCYWxsU3RhdGU7XG5cbiAgICBmdW5jdGlvbiByZXNldEJhbGwoKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgYmFsbFN0YXRlID0gbmV3IEJhbGxTdGF0ZSgxMDAsIDEwMCwgMiwgNSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGhyb3dCYWxsKCkge1xuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgIGlmICghYmFsbFN0YXRlLnBhdXNlZCkge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRocm93QmFsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmFsbFN0YXRlLmN4ICsgYmFsbFJhZGl1cyA+PSBjYW52YXMud2lkdGgpIHtcbiAgICAgICAgICAgIGJhbGxTdGF0ZS52eCA9IC1iYWxsU3RhdGUudnggKiBkYW1waW5nO1xuICAgICAgICAgICAgYmFsbFN0YXRlLmN4ID0gY2FudmFzLndpZHRoIC0gYmFsbFJhZGl1cztcbiAgICAgICAgfSBlbHNlIGlmIChiYWxsU3RhdGUuY3ggLSBiYWxsUmFkaXVzIDw9IDApIHtcbiAgICAgICAgICAgIGJhbGxTdGF0ZS52eCA9IC1iYWxsU3RhdGUudnggKiBkYW1waW5nO1xuICAgICAgICAgICAgYmFsbFN0YXRlLmN4ID0gYmFsbFJhZGl1cztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmFsbFN0YXRlLmN5ICsgYmFsbFJhZGl1cyArIGZsb29yID49IGNhbnZhcy5oZWlnaHQpIHtcbiAgICAgICAgICAgIGJhbGxTdGF0ZS52eSA9IC1iYWxsU3RhdGUudnkgKiBkYW1waW5nO1xuICAgICAgICAgICAgYmFsbFN0YXRlLmN5ID0gY2FudmFzLmhlaWdodCAtIGJhbGxSYWRpdXMgLSBmbG9vcjtcbiAgICAgICAgICAgIC8vIHRyYWN0aW9uIGhlcmVcbiAgICAgICAgICAgIGJhbGxTdGF0ZS52eCAqPSB0cmFjdGlvbjtcbiAgICAgICAgfSBlbHNlIGlmIChiYWxsU3RhdGUuY3kgLSBiYWxsUmFkaXVzIDw9IDApIHtcbiAgICAgICAgICAgIGJhbGxTdGF0ZS52eSA9IC1iYWxsU3RhdGUudnkgKiBkYW1waW5nO1xuICAgICAgICAgICAgYmFsbFN0YXRlLmN5ID0gYmFsbFJhZGl1cztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhbGxTdGF0ZS52eSArPSBncmF2aXR5O1xuXG4gICAgICAgIGJhbGxTdGF0ZS5jeCArPSBiYWxsU3RhdGUudng7XG4gICAgICAgIGJhbGxTdGF0ZS5jeSArPSBiYWxsU3RhdGUudnk7XG5cbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHguYXJjKGJhbGxTdGF0ZS5jeCwgYmFsbFN0YXRlLmN5LCBiYWxsUmFkaXVzLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpO1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gJyMyZWQ4NTEnO1xuICAgICAgICBjdHguZmlsbCgpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdTdGFydGluZyBwZXQgc2Vzc2lvbicsIHBldENvbG9yLCBiYXNlUGV0VXJpLCBwZXRUeXBlKTtcbiAgICAvLyBOZXcgc2Vzc2lvblxuICAgIHZhciBzdGF0ZSA9IHZzY29kZS5nZXRTdGF0ZSgpO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ05vIHN0YXRlLCBzdGFydGluZyBhIG5ldyBzZXNzaW9uLicpO1xuICAgICAgICBwZXRDb3VudGVyID0gMTtcbiAgICAgICAgYWxsUGV0cy5wdXNoKFxuICAgICAgICAgICAgYWRkUGV0VG9QYW5lbChcbiAgICAgICAgICAgICAgICBwZXRUeXBlLFxuICAgICAgICAgICAgICAgIGJhc2VQZXRVcmksXG4gICAgICAgICAgICAgICAgcGV0Q29sb3IsXG4gICAgICAgICAgICAgICAgcGV0U2l6ZSxcbiAgICAgICAgICAgICAgICByYW5kb21TdGFydFBvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgZmxvb3IsXG4gICAgICAgICAgICAgICAgZmxvb3IsXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgc2F2ZVN0YXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1JlY292ZXJpbmcgc3RhdGUgLSAnLCBzdGF0ZSk7XG4gICAgICAgIHJlY292ZXJTdGF0ZShiYXNlUGV0VXJpLCBwZXRTaXplLCBmbG9vcik7XG4gICAgfVxuXG4gICAgaW5pdENhbnZhcygpO1xuXG4gICAgLy8gSGFuZGxlIG1lc3NhZ2VzIHNlbnQgZnJvbSB0aGUgZXh0ZW5zaW9uIHRvIHRoZSB3ZWJ2aWV3XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoZXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGV2ZW50LmRhdGE7IC8vIFRoZSBqc29uIGRhdGEgdGhhdCB0aGUgZXh0ZW5zaW9uIHNlbnRcbiAgICAgICAgc3dpdGNoIChtZXNzYWdlLmNvbW1hbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ3Rocm93LWJhbGwnOlxuICAgICAgICAgICAgICAgIHJlc2V0QmFsbCgpO1xuICAgICAgICAgICAgICAgIHRocm93QmFsbCgpO1xuICAgICAgICAgICAgICAgIGFsbFBldHMucGV0cygpLmZvckVhY2goKHBldEVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZXRFbC5wZXQuY2FuQ2hhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGV0RWwucGV0LmNoYXNlKGJhbGxTdGF0ZSwgY2FudmFzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3Bhd24tcGV0JzpcbiAgICAgICAgICAgICAgICBhbGxQZXRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGFkZFBldFRvUGFuZWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlUGV0VXJpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBldFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5kb21TdGFydFBvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBmbG9vcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsb29yLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgc2F2ZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkZWxldGUtcGV0JzpcbiAgICAgICAgICAgICAgICB2YXIgcGV0ID0gYWxsUGV0cy5sb2NhdGUobWVzc2FnZS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHBldCkge1xuICAgICAgICAgICAgICAgICAgICBwZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIHNhdmVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Jlc2V0LXBldCc6XG4gICAgICAgICAgICAgICAgYWxsUGV0cy5wZXRzKCkuZm9yRWFjaCgocGV0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBldC5lbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcGV0LmNvbGxpc2lvbi5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhbGxQZXRzLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgYWxsUGV0cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBhZGRQZXRUb1BhbmVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGV0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VQZXRVcmksXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBldFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5kb21TdGFydFBvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBmbG9vcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsb29yLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGV0Q291bnRlciA9IDE7XG4gICAgICAgICAgICAgICAgc2F2ZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwYXVzZS1wZXQnOlxuICAgICAgICAgICAgICAgIHBldENvdW50ZXIgPSAxO1xuICAgICAgICAgICAgICAgIHNhdmVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSk7XG59XG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZnVuY3Rpb24gKCkge1xuICAgIGluaXRDYW52YXMoKTtcbn0pO1xuIiwiaW1wb3J0IHsgUGV0Q29sb3IsIFBldFNpemUsIFBldFNwZWVkLCBQZXRUeXBlIH0gZnJvbSAnLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IElTZXF1ZW5jZVRyZWUgfSBmcm9tICcuL3NlcXVlbmNlcyc7XG5pbXBvcnQge1xuICAgIElTdGF0ZSxcbiAgICBTdGF0ZXMsXG4gICAgcmVzb2x2ZVN0YXRlLFxuICAgIEhvcml6b250YWxEaXJlY3Rpb24sXG4gICAgQ2hhc2VTdGF0ZSxcbiAgICBCYWxsU3RhdGUsXG4gICAgRnJhbWVSZXN1bHQsXG4gICAgUGV0SW5zdGFuY2VTdGF0ZSxcbiAgICBpc1N0YXRlQWJvdmVHcm91bmQsXG59IGZyb20gJy4vc3RhdGVzJztcbmltcG9ydCB7XG4gICAgQ0FUX05BTUVTLFxuICAgIERPR19OQU1FUyxcbiAgICBDUkFCX05BTUVTLFxuICAgIFNOQUtFX05BTUVTLFxuICAgIENMSVBQWV9OQU1FUyxcbiAgICBUT1RPUk9fTkFNRVMsXG4gICAgRFVDS19OQU1FUyxcbiAgICBaQVBQWV9OQU1FUyxcbiAgICBST0NLWV9OQU1FUyxcbn0gZnJvbSAnLi4vY29tbW9uL25hbWVzJztcblxuZXhwb3J0IGNsYXNzIEludmFsaWRTdGF0ZUV4Y2VwdGlvbiB7fVxuXG5leHBvcnQgY2xhc3MgUGV0RWxlbWVudCB7XG4gICAgZWw6IEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgY29sbGlzaW9uOiBIVE1MRGl2RWxlbWVudDtcbiAgICBwZXQ6IElQZXRUeXBlO1xuICAgIGNvbG9yOiBQZXRDb2xvcjtcbiAgICB0eXBlOiBQZXRUeXBlO1xuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5lbC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5jb2xsaXNpb24ucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuY29sb3IgPSBQZXRDb2xvci5udWxsO1xuICAgICAgICB0aGlzLnR5cGUgPSBQZXRUeXBlLm51bGw7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGVsOiBIVE1MSW1hZ2VFbGVtZW50LFxuICAgICAgICBjb2xsaXNpb246IEhUTUxEaXZFbGVtZW50LFxuICAgICAgICBwZXQ6IElQZXRUeXBlLFxuICAgICAgICBjb2xvcjogUGV0Q29sb3IsXG4gICAgICAgIHR5cGU6IFBldFR5cGUsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZWwgPSBlbDtcbiAgICAgICAgdGhpcy5jb2xsaXNpb24gPSBjb2xsaXNpb247XG4gICAgICAgIHRoaXMucGV0ID0gcGV0O1xuICAgICAgICB0aGlzLmNvbG9yID0gY29sb3I7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQZXRDb2xsZWN0aW9uIHtcbiAgICBwZXRzKCk6IEFycmF5PFBldEVsZW1lbnQ+O1xuICAgIHB1c2gocGV0OiBQZXRFbGVtZW50KTogdm9pZDtcbiAgICByZXNldCgpOiB2b2lkO1xuICAgIHNlZWtOZXdGcmllbmRzKCk6IHN0cmluZ1tdO1xuICAgIGxvY2F0ZShuYW1lOiBzdHJpbmcpOiBQZXRFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgIHJlbW92ZShuYW1lOiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgUGV0Q29sbGVjdGlvbiBpbXBsZW1lbnRzIElQZXRDb2xsZWN0aW9uIHtcbiAgICBfcGV0czogQXJyYXk8UGV0RWxlbWVudD47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fcGV0cyA9IG5ldyBBcnJheSgwKTtcbiAgICB9XG5cbiAgICBwZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGV0cztcbiAgICB9XG5cbiAgICBwdXNoKHBldDogUGV0RWxlbWVudCkge1xuICAgICAgICB0aGlzLl9wZXRzLnB1c2gocGV0KTtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fcGV0cyA9IFtdO1xuICAgIH1cblxuICAgIGxvY2F0ZShuYW1lOiBzdHJpbmcpOiBQZXRFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BldHMuZmluZCgoY29sbGVjdGlvbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24ucGV0Lm5hbWUoKSA9PT0gbmFtZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcGV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BldHNbaV0ucGV0Lm5hbWUoKSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BldHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BldHMuZm9yRWFjaCgocGV0KSA9PiB7XG4gICAgICAgICAgICBpZiAocGV0LnBldC5uYW1lKCkgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICBwZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNlZWtOZXdGcmllbmRzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKHRoaXMuX3BldHMubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSAvLyBZb3UgY2FuJ3QgYmUgZnJpZW5kcyB3aXRoIHlvdXJzZWxmLlxuICAgICAgICB2YXIgbWVzc2FnZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigwKTtcbiAgICAgICAgdGhpcy5fcGV0cy5mb3JFYWNoKChwZXRJbkNvbGxlY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChwZXRJbkNvbGxlY3Rpb24ucGV0Lmhhc0ZyaWVuZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSAvLyBJIGFscmVhZHkgaGF2ZSBhIGZyaWVuZCFcbiAgICAgICAgICAgIHRoaXMuX3BldHMuZm9yRWFjaCgocG90ZW50aWFsRnJpZW5kKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBvdGVudGlhbEZyaWVuZC5wZXQuaGFzRnJpZW5kKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gLy8gQWxyZWFkeSBoYXMgYSBmcmllbmQuIHNvcnJ5LlxuICAgICAgICAgICAgICAgIGlmICghcG90ZW50aWFsRnJpZW5kLnBldC5jYW5DaGFzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IC8vIFBldCBpcyBidXN5IGRvaW5nIHNvbWV0aGluZyBlbHNlLlxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFsRnJpZW5kLnBldC5sZWZ0KCkgPiBwZXRJbkNvbGxlY3Rpb24ucGV0LmxlZnQoKSAmJlxuICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxGcmllbmQucGV0LmxlZnQoKSA8XG4gICAgICAgICAgICAgICAgICAgICAgICBwZXRJbkNvbGxlY3Rpb24ucGV0LmxlZnQoKSArIHBldEluQ29sbGVjdGlvbi5wZXQud2lkdGgoKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBmb3VuZCBhIHBvc3NpYmxlIG5ldyBmcmllbmQuLlxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHBldEluQ29sbGVjdGlvbi5wZXQubmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJyB3YW50cyB0byBiZSBmcmllbmRzIHdpdGggJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbEZyaWVuZC5wZXQubmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJy4nLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXRJbkNvbGxlY3Rpb24ucGV0Lm1ha2VGcmllbmRzV2l0aChwb3RlbnRpYWxGcmllbmQucGV0KVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cGV0SW5Db2xsZWN0aW9uLnBldC5uYW1lKCl9ICgke3BldEluQ29sbGVjdGlvbi5wZXQuZW1vamkoKX0pOiBJJ20gbm93IGZyaWVuZHMg4p2k77iPIHdpdGggJHtwb3RlbnRpYWxGcmllbmQucGV0Lm5hbWUoKX0gKCR7cG90ZW50aWFsRnJpZW5kLnBldC5lbW9qaSgpfSlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGV0VHlwZSB7XG4gICAgbmV4dEZyYW1lKCk6IHZvaWQ7XG5cbiAgICAvLyBTcGVjaWFsIG1ldGhvZHMgZm9yIGFjdGlvbnNcbiAgICBjYW5Td2lwZSgpOiBib29sZWFuO1xuICAgIGNhbkNoYXNlKCk6IGJvb2xlYW47XG4gICAgc3dpcGUoKTogdm9pZDtcbiAgICBjaGFzZShiYWxsU3RhdGU6IEJhbGxTdGF0ZSwgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCk6IHZvaWQ7XG4gICAgc3BlZWQoKTogbnVtYmVyO1xuICAgIGlzTW92aW5nKCk6IGJvb2xlYW47XG5cbiAgICAvLyBTdGF0ZSBBUElcbiAgICBnZXRTdGF0ZSgpOiBQZXRJbnN0YW5jZVN0YXRlO1xuICAgIHJlY292ZXJTdGF0ZShzdGF0ZTogUGV0SW5zdGFuY2VTdGF0ZSk6IHZvaWQ7XG4gICAgcmVjb3ZlckZyaWVuZChmcmllbmQ6IElQZXRUeXBlKTogdm9pZDtcblxuICAgIC8vIFBvc2l0aW9uaW5nXG4gICAgYm90dG9tKCk6IG51bWJlcjtcbiAgICBsZWZ0KCk6IG51bWJlcjtcbiAgICBwb3NpdGlvbkJvdHRvbShib3R0b206IG51bWJlcik6IHZvaWQ7XG4gICAgcG9zaXRpb25MZWZ0KGxlZnQ6IG51bWJlcik6IHZvaWQ7XG4gICAgd2lkdGgoKTogbnVtYmVyO1xuICAgIGZsb29yKCk6IG51bWJlcjtcblxuICAgIC8vIEZyaWVuZHMgQVBJXG4gICAgbmFtZSgpOiBzdHJpbmc7XG4gICAgZW1vamkoKTogc3RyaW5nO1xuICAgIGhhc0ZyaWVuZCgpOiBib29sZWFuO1xuICAgIGZyaWVuZCgpOiBJUGV0VHlwZTtcbiAgICBtYWtlRnJpZW5kc1dpdGgoZnJpZW5kOiBJUGV0VHlwZSk6IGJvb2xlYW47XG4gICAgaXNQbGF5aW5nKCk6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVNwcml0ZVdpZHRoKHNpemU6IFBldFNpemUpOiBudW1iZXIge1xuICAgIGlmIChzaXplID09PSBQZXRTaXplLm5hbm8pIHtcbiAgICAgICAgcmV0dXJuIDMwO1xuICAgIH0gZWxzZSBpZiAoc2l6ZSA9PT0gUGV0U2l6ZS5tZWRpdW0pIHtcbiAgICAgICAgcmV0dXJuIDU1O1xuICAgIH0gZWxzZSBpZiAoc2l6ZSA9PT0gUGV0U2l6ZS5sYXJnZSkge1xuICAgICAgICByZXR1cm4gMTEwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAzMDsgLy8gU2hydWdcbiAgICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIEJhc2VQZXRUeXBlIGltcGxlbWVudHMgSVBldFR5cGUge1xuICAgIGxhYmVsOiBzdHJpbmcgPSAnYmFzZSc7XG4gICAgc3RhdGljIGNvdW50OiBudW1iZXIgPSAwO1xuICAgIHNlcXVlbmNlOiBJU2VxdWVuY2VUcmVlID0ge1xuICAgICAgICBzdGFydGluZ1N0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcbiAgICAgICAgc2VxdWVuY2VTdGF0ZXM6IFtdLFxuICAgIH07XG4gICAgY3VycmVudFN0YXRlOiBJU3RhdGU7XG4gICAgY3VycmVudFN0YXRlRW51bTogU3RhdGVzO1xuICAgIGhvbGRTdGF0ZTogSVN0YXRlIHwgdW5kZWZpbmVkO1xuICAgIGhvbGRTdGF0ZUVudW06IFN0YXRlcyB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIGVsOiBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIHByaXZhdGUgY29sbGlzaW9uOiBIVE1MRGl2RWxlbWVudDtcbiAgICBwcml2YXRlIF9sZWZ0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfYm90dG9tOiBudW1iZXI7XG4gICAgcGV0Um9vdDogc3RyaW5nO1xuICAgIF9mbG9vcjogbnVtYmVyO1xuICAgIF9mcmllbmQ6IElQZXRUeXBlIHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgX25hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIF9zcGVlZDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHNwcml0ZUVsZW1lbnQ6IEhUTUxJbWFnZUVsZW1lbnQsXG4gICAgICAgIGNvbGxpc2lvbkVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50LFxuICAgICAgICBzaXplOiBQZXRTaXplLFxuICAgICAgICBsZWZ0OiBudW1iZXIsXG4gICAgICAgIGJvdHRvbTogbnVtYmVyLFxuICAgICAgICBwZXRSb290OiBzdHJpbmcsXG4gICAgICAgIGZsb29yOiBudW1iZXIsXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgc3BlZWQ6IG51bWJlcixcbiAgICApIHtcbiAgICAgICAgdGhpcy5lbCA9IHNwcml0ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uID0gY29sbGlzaW9uRWxlbWVudDtcbiAgICAgICAgdGhpcy5wZXRSb290ID0gcGV0Um9vdDtcbiAgICAgICAgdGhpcy5fZmxvb3IgPSBmbG9vcjtcbiAgICAgICAgdGhpcy5fbGVmdCA9IGxlZnQ7XG4gICAgICAgIHRoaXMuX2JvdHRvbSA9IGJvdHRvbTtcbiAgICAgICAgdGhpcy5pbml0U3ByaXRlKHNpemUsIGxlZnQsIGJvdHRvbSk7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlRW51bSA9IHRoaXMuc2VxdWVuY2Uuc3RhcnRpbmdTdGF0ZTtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPSByZXNvbHZlU3RhdGUodGhpcy5jdXJyZW50U3RhdGVFbnVtLCB0aGlzKTtcblxuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5fc3BlZWQgPSBzcGVlZDtcblxuICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIHN0YXRpYyBjb3VudCBvZiB0aGUgUGV0IGNsYXNzIHRoYXQgdGhlIGNvbnN0cnVjdG9yIGJlbG9uZ3MgdG9cbiAgICAgICAgKHRoaXMuY29uc3RydWN0b3IgYXMgYW55KS5jb3VudCArPSAxO1xuICAgIH1cblxuICAgIGluaXRTcHJpdGUocGV0U2l6ZTogUGV0U2l6ZSwgbGVmdDogbnVtYmVyLCBib3R0b206IG51bWJlcikge1xuICAgICAgICB0aGlzLmVsLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YDtcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5ib3R0b20gPSBgJHtib3R0b219cHhgO1xuICAgICAgICB0aGlzLmVsLnN0eWxlLndpZHRoID0gJ2F1dG8nO1xuICAgICAgICB0aGlzLmVsLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5tYXhXaWR0aCA9IGAke2NhbGN1bGF0ZVNwcml0ZVdpZHRoKHBldFNpemUpfXB4YDtcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtjYWxjdWxhdGVTcHJpdGVXaWR0aChwZXRTaXplKX1weGA7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YDtcbiAgICAgICAgdGhpcy5jb2xsaXNpb24uc3R5bGUuYm90dG9tID0gYCR7Ym90dG9tfXB4YDtcbiAgICAgICAgdGhpcy5jb2xsaXNpb24uc3R5bGUud2lkdGggPSBgJHtjYWxjdWxhdGVTcHJpdGVXaWR0aChwZXRTaXplKX1weGA7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uLnN0eWxlLmhlaWdodCA9IGAke2NhbGN1bGF0ZVNwcml0ZVdpZHRoKHBldFNpemUpfXB4YDtcbiAgICB9XG5cbiAgICBsZWZ0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWZ0O1xuICAgIH1cblxuICAgIGJvdHRvbSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm90dG9tO1xuICAgIH1cblxuICAgIHBvc2l0aW9uQm90dG9tKGJvdHRvbTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2JvdHRvbSA9IGJvdHRvbTtcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5ib3R0b20gPSBgJHt0aGlzLl9ib3R0b219cHhgO1xuICAgICAgICB0aGlzLmVsLnN0eWxlLmJvdHRvbSA9IGAke3RoaXMuX2JvdHRvbX1weGA7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uLnN0eWxlLmxlZnQgPSBgJHt0aGlzLl9sZWZ0fXB4YDtcbiAgICAgICAgdGhpcy5jb2xsaXNpb24uc3R5bGUuYm90dG9tID0gYCR7dGhpcy5fYm90dG9tfXB4YDtcbiAgICB9XG5cbiAgICBwb3NpdGlvbkxlZnQobGVmdDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xlZnQgPSBsZWZ0O1xuICAgICAgICB0aGlzLmVsLnN0eWxlLmxlZnQgPSBgJHt0aGlzLl9sZWZ0fXB4YDtcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5sZWZ0ID0gYCR7dGhpcy5fbGVmdH1weGA7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uLnN0eWxlLmxlZnQgPSBgJHt0aGlzLl9sZWZ0fXB4YDtcbiAgICAgICAgdGhpcy5jb2xsaXNpb24uc3R5bGUuYm90dG9tID0gYCR7dGhpcy5fYm90dG9tfXB4YDtcbiAgICB9XG5cbiAgICB3aWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5lbC53aWR0aDtcbiAgICB9XG5cbiAgICBmbG9vcigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmxvb3I7XG4gICAgfVxuXG4gICAgZ2V0U3RhdGUoKTogUGV0SW5zdGFuY2VTdGF0ZSB7XG4gICAgICAgIHJldHVybiB7IGN1cnJlbnRTdGF0ZUVudW06IHRoaXMuY3VycmVudFN0YXRlRW51bSB9O1xuICAgIH1cblxuICAgIHNwZWVkKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGVlZDtcbiAgICB9XG5cbiAgICBpc01vdmluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwZWVkICE9PSBQZXRTcGVlZC5zdGlsbDtcbiAgICB9XG5cbiAgICByZWNvdmVyRnJpZW5kKGZyaWVuZDogSVBldFR5cGUpIHtcbiAgICAgICAgLy8gUmVjb3ZlciBmcmllbmRzLi5cbiAgICAgICAgdGhpcy5fZnJpZW5kID0gZnJpZW5kO1xuICAgIH1cblxuICAgIHJlY292ZXJTdGF0ZShzdGF0ZTogUGV0SW5zdGFuY2VTdGF0ZSkge1xuICAgICAgICAvLyBUT0RPIDogUmVzb2x2ZSBhIGJ1ZyB3aGVyZSBpZiBpdCB3YXMgc3dpcGluZyBiZWZvcmUsIGl0IHdvdWxkIGZhaWxcbiAgICAgICAgLy8gYmVjYXVzZSBob2xkU3RhdGUgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZUVudW0gPSBzdGF0ZS5jdXJyZW50U3RhdGVFbnVtITtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPSByZXNvbHZlU3RhdGUodGhpcy5jdXJyZW50U3RhdGVFbnVtLCB0aGlzKTtcblxuICAgICAgICBpZiAoIWlzU3RhdGVBYm92ZUdyb3VuZCh0aGlzLmN1cnJlbnRTdGF0ZUVudW0pKSB7XG4gICAgICAgICAgICAvLyBSZXNldCB0aGUgYm90dG9tIG9mIHRoZSBzcHJpdGUgdG8gdGhlIGZsb29yIGFzIHRoZSB0aGVtZVxuICAgICAgICAgICAgLy8gaGFzIGxpa2VseSBjaGFuZ2VkLlxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkJvdHRvbSh0aGlzLmZsb29yKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FuU3dpcGUoKSB7XG4gICAgICAgIHJldHVybiAhaXNTdGF0ZUFib3ZlR3JvdW5kKHRoaXMuY3VycmVudFN0YXRlRW51bSk7XG4gICAgfVxuXG4gICAgY2FuQ2hhc2UoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhaXNTdGF0ZUFib3ZlR3JvdW5kKHRoaXMuY3VycmVudFN0YXRlRW51bSkgJiZcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlRW51bSAhPT0gU3RhdGVzLmNoYXNlICYmXG4gICAgICAgICAgICB0aGlzLmlzTW92aW5nKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzd2lwZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YXRlRW51bSA9PT0gU3RhdGVzLnN3aXBlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ob2xkU3RhdGUgPSB0aGlzLmN1cnJlbnRTdGF0ZTtcbiAgICAgICAgdGhpcy5ob2xkU3RhdGVFbnVtID0gdGhpcy5jdXJyZW50U3RhdGVFbnVtO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZUVudW0gPSBTdGF0ZXMuc3dpcGU7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gcmVzb2x2ZVN0YXRlKHRoaXMuY3VycmVudFN0YXRlRW51bSwgdGhpcyk7XG4gICAgfVxuXG4gICAgY2hhc2UoYmFsbFN0YXRlOiBCYWxsU3RhdGUsIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGVFbnVtID0gU3RhdGVzLmNoYXNlO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IG5ldyBDaGFzZVN0YXRlKHRoaXMsIGJhbGxTdGF0ZSwgY2FudmFzKTtcbiAgICB9XG5cbiAgICBmYWNlTGVmdCgpIHtcbiAgICAgICAgdGhpcy5lbC5zdHlsZS50cmFuc2Zvcm0gPSAnc2NhbGVYKC0xKSc7XG4gICAgfVxuXG4gICAgZmFjZVJpZ2h0KCkge1xuICAgICAgICB0aGlzLmVsLnN0eWxlLnRyYW5zZm9ybSA9ICdzY2FsZVgoMSknO1xuICAgIH1cblxuICAgIHNldEFuaW1hdGlvbihmYWNlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZWwuc3JjLmVuZHNXaXRoKGBfJHtmYWNlfV84ZnBzLmdpZmApKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbC5zcmMgPSBgJHt0aGlzLnBldFJvb3R9XyR7ZmFjZX1fOGZwcy5naWZgO1xuICAgIH1cblxuICAgIGNob29zZU5leHRTdGF0ZShmcm9tU3RhdGU6IFN0YXRlcyk6IFN0YXRlcyB7XG4gICAgICAgIC8vIFdvcmsgb3V0IG5leHQgc3RhdGVcbiAgICAgICAgdmFyIHBvc3NpYmxlTmV4dFN0YXRlczogU3RhdGVzW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zZXF1ZW5jZS5zZXF1ZW5jZVN0YXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VxdWVuY2Uuc2VxdWVuY2VTdGF0ZXNbaV0uc3RhdGUgPT09IGZyb21TdGF0ZSkge1xuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlcyA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VxdWVuY2Uuc2VxdWVuY2VTdGF0ZXNbaV0ucG9zc2libGVOZXh0U3RhdGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghcG9zc2libGVOZXh0U3RhdGVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN0YXRlRXhjZXB0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmFuZG9tbHkgY2hvb3NlIHRoZSBuZXh0IHN0YXRlXG4gICAgICAgIGNvbnN0IGlkeCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHBvc3NpYmxlTmV4dFN0YXRlcy5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gcG9zc2libGVOZXh0U3RhdGVzW2lkeF07XG4gICAgfVxuXG4gICAgbmV4dEZyYW1lKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5ob3Jpem9udGFsRGlyZWN0aW9uID09PSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmZhY2VMZWZ0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5ob3Jpem9udGFsRGlyZWN0aW9uID09PSBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0XG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5mYWNlUmlnaHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEFuaW1hdGlvbih0aGlzLmN1cnJlbnRTdGF0ZS5zcHJpdGVMYWJlbCk7XG5cbiAgICAgICAgLy8gV2hhdCdzIG15IGJ1ZGR5IGRvaW5nP1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmhhc0ZyaWVuZCgpICYmXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZUVudW0gIT09IFN0YXRlcy5jaGFzZUZyaWVuZCAmJlxuICAgICAgICAgICAgdGhpcy5pc01vdmluZygpXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuZnJpZW5kKCkuaXNQbGF5aW5nKCkgJiZcbiAgICAgICAgICAgICAgICAhaXNTdGF0ZUFib3ZlR3JvdW5kKHRoaXMuY3VycmVudFN0YXRlRW51bSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gcmVzb2x2ZVN0YXRlKFN0YXRlcy5jaGFzZUZyaWVuZCwgdGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGVFbnVtID0gU3RhdGVzLmNoYXNlRnJpZW5kO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZVJlc3VsdCA9IHRoaXMuY3VycmVudFN0YXRlLm5leHRGcmFtZSgpO1xuICAgICAgICBpZiAoZnJhbWVSZXN1bHQgPT09IEZyYW1lUmVzdWx0LnN0YXRlQ29tcGxldGUpIHtcbiAgICAgICAgICAgIC8vIElmIHJlY292ZXJpbmcgZnJvbSBzd2lwZS4uXG4gICAgICAgICAgICBpZiAodGhpcy5ob2xkU3RhdGUgJiYgdGhpcy5ob2xkU3RhdGVFbnVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPSB0aGlzLmhvbGRTdGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZUVudW0gPSB0aGlzLmhvbGRTdGF0ZUVudW07XG4gICAgICAgICAgICAgICAgdGhpcy5ob2xkU3RhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5ob2xkU3RhdGVFbnVtID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHRoaXMuY2hvb3NlTmV4dFN0YXRlKHRoaXMuY3VycmVudFN0YXRlRW51bSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHJlc29sdmVTdGF0ZShuZXh0U3RhdGUsIHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGVFbnVtID0gbmV4dFN0YXRlO1xuICAgICAgICB9IGVsc2UgaWYgKGZyYW1lUmVzdWx0ID09PSBGcmFtZVJlc3VsdC5zdGF0ZUNhbmNlbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YXRlRW51bSA9PT0gU3RhdGVzLmNoYXNlKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHRoaXMuY2hvb3NlTmV4dFN0YXRlKFN0YXRlcy5pZGxlV2l0aEJhbGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gcmVzb2x2ZVN0YXRlKG5leHRTdGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGVFbnVtID0gbmV4dFN0YXRlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRTdGF0ZUVudW0gPT09IFN0YXRlcy5jaGFzZUZyaWVuZCkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSB0aGlzLmNob29zZU5leHRTdGF0ZShTdGF0ZXMuaWRsZVdpdGhCYWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHJlc29sdmVTdGF0ZShuZXh0U3RhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlRW51bSA9IG5leHRTdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0ZyaWVuZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZyaWVuZCAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZyaWVuZCgpOiBJUGV0VHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mcmllbmQhO1xuICAgIH1cblxuICAgIG5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgfVxuXG4gICAgbWFrZUZyaWVuZHNXaXRoKGZyaWVuZDogSVBldFR5cGUpOiBib29sZWFuIHtcbiAgICAgICAgdGhpcy5fZnJpZW5kID0gZnJpZW5kO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm5hbWUoKSwgXCI6IEknbSBub3cgZnJpZW5kcyDinaTvuI8gd2l0aCBcIiwgZnJpZW5kLm5hbWUoKSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlzUGxheWluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuaXNNb3ZpbmcoKSAmJlxuICAgICAgICAgICAgKHRoaXMuY3VycmVudFN0YXRlRW51bSA9PT0gU3RhdGVzLnJ1blJpZ2h0IHx8XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGVFbnVtID09PSBTdGF0ZXMucnVuTGVmdClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBlbW9qaSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJ/CfkLYnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRvdG9ybyBleHRlbmRzIEJhc2VQZXRUeXBlIHtcbiAgICBsYWJlbCA9ICd0b3Rvcm8nO1xuICAgIHNlcXVlbmNlID0ge1xuICAgICAgICBzdGFydGluZ1N0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcbiAgICAgICAgc2VxdWVuY2VTdGF0ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnNpdElkbGUsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtSaWdodCwgU3RhdGVzLmxpZV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMubGllLFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy53YWxrUmlnaHQsIFN0YXRlcy53YWxrTGVmdF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMud2Fsa1JpZ2h0LFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy53YWxrTGVmdCwgU3RhdGVzLnNpdElkbGVdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLndhbGtMZWZ0LFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1xuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMuc2l0SWRsZSxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLmNsaW1iV2FsbExlZnQsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5zaXRJZGxlLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuY2xpbWJXYWxsTGVmdCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2FsbEhhbmdMZWZ0XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxsSGFuZ0xlZnQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLmp1bXBEb3duTGVmdF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuanVtcERvd25MZWZ0LFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy5sYW5kXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5sYW5kLFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1xuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMuc2l0SWRsZSxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLmxpZSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmNoYXNlLFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy5pZGxlV2l0aEJhbGxdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmlkbGVXaXRoQmFsbCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa1JpZ2h0LCBTdGF0ZXMud2Fsa0xlZnRdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICB9O1xuICAgIGVtb2ppKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAn8J+Qvic7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIENhdCBleHRlbmRzIEJhc2VQZXRUeXBlIHtcbiAgICBsYWJlbCA9ICdjYXQnO1xuICAgIHNlcXVlbmNlID0ge1xuICAgICAgICBzdGFydGluZ1N0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcbiAgICAgICAgc2VxdWVuY2VTdGF0ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnNpdElkbGUsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtSaWdodCwgU3RhdGVzLnJ1blJpZ2h0XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrUmlnaHQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtMZWZ0LCBTdGF0ZXMucnVuTGVmdF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuUmlnaHQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtMZWZ0LCBTdGF0ZXMucnVuTGVmdF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMud2Fsa0xlZnQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5zaXRJZGxlLFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMuY2xpbWJXYWxsTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1blJpZ2h0LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuTGVmdCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnNpdElkbGUsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5jbGltYldhbGxMZWZ0LFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa1JpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuUmlnaHQsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5jbGltYldhbGxMZWZ0LFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy53YWxsSGFuZ0xlZnRdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLndhbGxIYW5nTGVmdCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMuanVtcERvd25MZWZ0XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5qdW1wRG93bkxlZnQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLmxhbmRdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmxhbmQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5zaXRJZGxlLFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa1JpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuUmlnaHQsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5jaGFzZSxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMuaWRsZVdpdGhCYWxsXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5pZGxlV2l0aEJhbGwsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy53YWxrUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy53YWxrTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1bkxlZnQsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5SaWdodCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICB9O1xuICAgIGVtb2ppKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAn8J+QsSc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG9nIGV4dGVuZHMgQmFzZVBldFR5cGUge1xuICAgIGxhYmVsID0gJ2RvZyc7XG4gICAgc2VxdWVuY2UgPSB7XG4gICAgICAgIHN0YXJ0aW5nU3RhdGU6IFN0YXRlcy5zaXRJZGxlLFxuICAgICAgICBzZXF1ZW5jZVN0YXRlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1blJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMubGllLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMubGllLFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy53YWxrUmlnaHQsIFN0YXRlcy5ydW5SaWdodF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMud2Fsa1JpZ2h0LFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy53YWxrTGVmdCwgU3RhdGVzLnJ1bkxlZnRdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnJ1blJpZ2h0LFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy53YWxrTGVmdCwgU3RhdGVzLnJ1bkxlZnRdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLndhbGtMZWZ0LFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1xuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMuc2l0SWRsZSxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLmxpZSxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1blJpZ2h0LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuTGVmdCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnNpdElkbGUsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5saWUsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy53YWxrUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5SaWdodCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmNoYXNlLFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy5pZGxlV2l0aEJhbGxdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmlkbGVXaXRoQmFsbCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtMZWZ0LFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1blJpZ2h0LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgIH07XG4gICAgZW1vamkoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICfwn5C2JztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTbmFrZSBleHRlbmRzIEJhc2VQZXRUeXBlIHtcbiAgICBsYWJlbCA9ICdzbmFrZSc7XG4gICAgc2VxdWVuY2UgPSB7XG4gICAgICAgIHN0YXJ0aW5nU3RhdGU6IFN0YXRlcy5zaXRJZGxlLFxuICAgICAgICBzZXF1ZW5jZVN0YXRlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa1JpZ2h0LCBTdGF0ZXMucnVuUmlnaHRdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLndhbGtSaWdodCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa0xlZnQsIFN0YXRlcy5ydW5MZWZ0XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5ydW5SaWdodCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa0xlZnQsIFN0YXRlcy5ydW5MZWZ0XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrTGVmdCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnNpdElkbGUsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy53YWxrUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5SaWdodCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnJ1bkxlZnQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5zaXRJZGxlLFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa1JpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuUmlnaHQsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5jaGFzZSxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMuaWRsZVdpdGhCYWxsXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5pZGxlV2l0aEJhbGwsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy53YWxrUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy53YWxrTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1bkxlZnQsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5SaWdodCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICB9O1xuICAgIGVtb2ppKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAn8J+QjSc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xpcHB5IGV4dGVuZHMgQmFzZVBldFR5cGUge1xuICAgIGxhYmVsID0gJ2NsaXBweSc7XG4gICAgc2VxdWVuY2UgPSB7XG4gICAgICAgIHN0YXJ0aW5nU3RhdGU6IFN0YXRlcy5zaXRJZGxlLFxuICAgICAgICBzZXF1ZW5jZVN0YXRlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa1JpZ2h0LCBTdGF0ZXMucnVuUmlnaHRdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLndhbGtSaWdodCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa0xlZnQsIFN0YXRlcy5ydW5MZWZ0XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5ydW5SaWdodCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa0xlZnQsIFN0YXRlcy5ydW5MZWZ0XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrTGVmdCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMuc2l0SWRsZV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuTGVmdCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMuc2l0SWRsZV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuY2hhc2UsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLmlkbGVXaXRoQmFsbF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuaWRsZVdpdGhCYWxsLFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1xuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa1JpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa0xlZnQsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuUmlnaHQsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgfTtcbiAgICBlbW9qaSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJ/Cfk44nO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1YmJlckR1Y2sgZXh0ZW5kcyBCYXNlUGV0VHlwZSB7XG4gICAgbGFiZWwgPSAncnViYmVyLWR1Y2snO1xuICAgIHNlcXVlbmNlID0ge1xuICAgICAgICBzdGFydGluZ1N0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcbiAgICAgICAgc2VxdWVuY2VTdGF0ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnNpdElkbGUsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtSaWdodCwgU3RhdGVzLnJ1blJpZ2h0XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrUmlnaHQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtMZWZ0LCBTdGF0ZXMucnVuTGVmdF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuUmlnaHQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtMZWZ0LCBTdGF0ZXMucnVuTGVmdF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMud2Fsa0xlZnQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLnNpdElkbGVdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnJ1bkxlZnQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLnNpdElkbGVdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmNoYXNlLFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy5pZGxlV2l0aEJhbGxdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmlkbGVXaXRoQmFsbCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtMZWZ0LFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1blJpZ2h0LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgIH07XG4gICAgZW1vamkoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICfwn5ClJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmFiIGV4dGVuZHMgQmFzZVBldFR5cGUge1xuICAgIGxhYmVsID0gJ2NyYWInO1xuICAgIHNlcXVlbmNlID0ge1xuICAgICAgICBzdGFydGluZ1N0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcbiAgICAgICAgc2VxdWVuY2VTdGF0ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnNpdElkbGUsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtSaWdodCwgU3RhdGVzLnJ1blJpZ2h0XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrUmlnaHQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtMZWZ0LCBTdGF0ZXMucnVuTGVmdF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuUmlnaHQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtMZWZ0LCBTdGF0ZXMucnVuTGVmdF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMud2Fsa0xlZnQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLnNpdElkbGVdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnJ1bkxlZnQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLnNpdElkbGVdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmNoYXNlLFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1N0YXRlcy5pZGxlV2l0aEJhbGxdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLmlkbGVXaXRoQmFsbCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLndhbGtMZWZ0LFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVzLnJ1blJpZ2h0LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgIH07XG4gICAgZW1vamkoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICfwn6aAJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBaYXBweSBleHRlbmRzIEJhc2VQZXRUeXBlIHtcbiAgICBsYWJlbCA9ICd6YXBweSc7XG4gICAgc2VxdWVuY2UgPSB7XG4gICAgICAgIHN0YXJ0aW5nU3RhdGU6IFN0YXRlcy5zaXRJZGxlLFxuICAgICAgICBzZXF1ZW5jZVN0YXRlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa1JpZ2h0LCBTdGF0ZXMucnVuUmlnaHRdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLndhbGtSaWdodCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa0xlZnQsIFN0YXRlcy5ydW5MZWZ0XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy5ydW5SaWdodCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMud2Fsa0xlZnQsIFN0YXRlcy5ydW5MZWZ0XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrTGVmdCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMuc2l0SWRsZV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuTGVmdCxcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU5leHRTdGF0ZXM6IFtTdGF0ZXMuc2l0SWRsZV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuY2hhc2UsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLmlkbGVXaXRoQmFsbF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMuaWRsZVdpdGhCYWxsLFxuICAgICAgICAgICAgICAgIHBvc3NpYmxlTmV4dFN0YXRlczogW1xuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa1JpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMud2Fsa0xlZnQsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlcy5ydW5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICBTdGF0ZXMucnVuUmlnaHQsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgfTtcbiAgICBlbW9qaSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJ+KaoSc7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUm9ja3kgZXh0ZW5kcyBCYXNlUGV0VHlwZSB7XG4gICAgbGFiZWwgPSAncm9ja3knO1xuICAgIHNlcXVlbmNlID0ge1xuICAgICAgICBzdGFydGluZ1N0YXRlOiBTdGF0ZXMuc2l0SWRsZSxcbiAgICAgICAgc2VxdWVuY2VTdGF0ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogU3RhdGVzLnNpdElkbGUsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLndhbGtSaWdodCwgU3RhdGVzLnJ1blJpZ2h0XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IFN0YXRlcy53YWxrUmlnaHQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLnNpdElkbGUsIFN0YXRlcy5ydW5SaWdodF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBTdGF0ZXMucnVuUmlnaHQsXG4gICAgICAgICAgICAgICAgcG9zc2libGVOZXh0U3RhdGVzOiBbU3RhdGVzLnNpdElkbGUsIFN0YXRlcy53YWxrUmlnaHRdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICB9O1xuICAgIGVtb2ppKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAn8J+Sjic7XG4gICAgfVxuICAgIGNhbkNoYXNlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFBldEV4Y2VwdGlvbiB7fVxuXG5mdW5jdGlvbiBnZXRQZXROYW1lKFxuICAgIGNvbGxlY3Rpb246IE1hcDxudW1iZXIsIHN0cmluZz4sXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBjb3VudDogbnVtYmVyLFxuKTogc3RyaW5nIHtcbiAgICBpZiAoY29sbGVjdGlvbi5oYXMoY291bnQpKSB7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uLmdldChjb3VudCkhO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsYWJlbCArIGNvdW50O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBldChcbiAgICBwZXRUeXBlOiBzdHJpbmcsXG4gICAgZWw6IEhUTUxJbWFnZUVsZW1lbnQsXG4gICAgY29sbGlzaW9uOiBIVE1MRGl2RWxlbWVudCxcbiAgICBzaXplOiBQZXRTaXplLFxuICAgIGxlZnQ6IG51bWJlcixcbiAgICBib3R0b206IG51bWJlcixcbiAgICBwZXRSb290OiBzdHJpbmcsXG4gICAgZmxvb3I6IG51bWJlcixcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBJUGV0VHlwZSB7XG4gICAgaWYgKHBldFR5cGUgPT09ICd0b3Rvcm8nKSB7XG4gICAgICAgIGlmIChuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5hbWUgPSBnZXRQZXROYW1lKFRPVE9ST19OQU1FUywgUGV0VHlwZS50b3Rvcm8sIFRvdG9yby5jb3VudCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVG90b3JvKFxuICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICBjb2xsaXNpb24sXG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgIHBldFJvb3QsXG4gICAgICAgICAgICBmbG9vcixcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBQZXRTcGVlZC5ub3JtYWwsXG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmIChwZXRUeXBlID09PSAnY2F0Jykge1xuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuYW1lID0gZ2V0UGV0TmFtZShcbiAgICAgICAgICAgICAgICBDQVRfTkFNRVMsXG4gICAgICAgICAgICAgICAgUGV0VHlwZS5jYXQsXG4gICAgICAgICAgICAgICAgQ2F0LmNvdW50ICsgRG9nLmNvdW50ICsgMSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gLy8gQ2F0IGFuZCBkb2cgc2hhcmUgdGhlIHNhbWUgbmFtZSBsaXN0XG4gICAgICAgIHJldHVybiBuZXcgQ2F0KFxuICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICBjb2xsaXNpb24sXG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgIHBldFJvb3QsXG4gICAgICAgICAgICBmbG9vcixcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBQZXRTcGVlZC5ub3JtYWwsXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChwZXRUeXBlID09PSAnZG9nJykge1xuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuYW1lID0gZ2V0UGV0TmFtZShcbiAgICAgICAgICAgICAgICBET0dfTkFNRVMsXG4gICAgICAgICAgICAgICAgUGV0VHlwZS5kb2csXG4gICAgICAgICAgICAgICAgRG9nLmNvdW50ICsgQ2F0LmNvdW50ICsgMSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gLy8gQ2F0IGFuZCBkb2cgc2hhcmUgdGhlIHNhbWUgbmFtZSBsaXN0XG4gICAgICAgIHJldHVybiBuZXcgRG9nKFxuICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICBjb2xsaXNpb24sXG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgIHBldFJvb3QsXG4gICAgICAgICAgICBmbG9vcixcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBQZXRTcGVlZC5ub3JtYWwsXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChwZXRUeXBlID09PSAnc25ha2UnKSB7XG4gICAgICAgIGlmIChuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5hbWUgPSBnZXRQZXROYW1lKFNOQUtFX05BTUVTLCBQZXRUeXBlLnNuYWtlLCBTbmFrZS5jb3VudCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgU25ha2UoXG4gICAgICAgICAgICBlbCxcbiAgICAgICAgICAgIGNvbGxpc2lvbixcbiAgICAgICAgICAgIHNpemUsXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgcGV0Um9vdCxcbiAgICAgICAgICAgIGZsb29yLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIFBldFNwZWVkLnZlcnlTbG93LFxuICAgICAgICApO1xuICAgIH0gZWxzZSBpZiAocGV0VHlwZSA9PT0gJ2NsaXBweScpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbmFtZSA9IGdldFBldE5hbWUoQ0xJUFBZX05BTUVTLCBQZXRUeXBlLmNsaXBweSwgQ2xpcHB5LmNvdW50ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDbGlwcHkoXG4gICAgICAgICAgICBlbCxcbiAgICAgICAgICAgIGNvbGxpc2lvbixcbiAgICAgICAgICAgIHNpemUsXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgcGV0Um9vdCxcbiAgICAgICAgICAgIGZsb29yLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIFBldFNwZWVkLnNsb3csXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChwZXRUeXBlID09PSAnY3JhYicpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbmFtZSA9IGdldFBldE5hbWUoQ1JBQl9OQU1FUywgUGV0VHlwZS5jcmFiLCBDcmFiLmNvdW50ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDcmFiKFxuICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICBjb2xsaXNpb24sXG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgIHBldFJvb3QsXG4gICAgICAgICAgICBmbG9vcixcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBQZXRTcGVlZC5zbG93LFxuICAgICAgICApO1xuICAgIH0gZWxzZSBpZiAocGV0VHlwZSA9PT0gJ3J1YmJlci1kdWNrJykge1xuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuYW1lID0gZ2V0UGV0TmFtZShcbiAgICAgICAgICAgICAgICBEVUNLX05BTUVTLFxuICAgICAgICAgICAgICAgIFBldFR5cGUucnViYmVyZHVjayxcbiAgICAgICAgICAgICAgICBSdWJiZXJEdWNrLmNvdW50ICsgMSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBSdWJiZXJEdWNrKFxuICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICBjb2xsaXNpb24sXG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgIHBldFJvb3QsXG4gICAgICAgICAgICBmbG9vcixcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBQZXRTcGVlZC5mYXN0LFxuICAgICAgICApO1xuICAgIH0gZWxzZSBpZiAocGV0VHlwZSA9PT0gJ3phcHB5Jykge1xuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuYW1lID0gZ2V0UGV0TmFtZShaQVBQWV9OQU1FUywgUGV0VHlwZS56YXBweSwgWmFwcHkuY291bnQgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFphcHB5KFxuICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICBjb2xsaXNpb24sXG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgIHBldFJvb3QsXG4gICAgICAgICAgICBmbG9vcixcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBQZXRTcGVlZC52ZXJ5RmFzdCxcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHBldFR5cGUgPT09ICdyb2NreScpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbmFtZSA9IGdldFBldE5hbWUoUk9DS1lfTkFNRVMsIFBldFR5cGUucm9ja3ksIFJvY2t5LmNvdW50ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBSb2NreShcbiAgICAgICAgICAgIGVsLFxuICAgICAgICAgICAgY29sbGlzaW9uLFxuICAgICAgICAgICAgc2l6ZSxcbiAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICBwZXRSb290LFxuICAgICAgICAgICAgZmxvb3IsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgUGV0U3BlZWQuc3RpbGwsXG4gICAgICAgICk7XG4gICAgfVxuICAgIHRocm93IG5ldyBJbnZhbGlkUGV0RXhjZXB0aW9uKCk7XG59XG4iLCJpbXBvcnQgeyBQZXRDb2xvciwgUGV0VHlwZSB9IGZyb20gJy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBJUGV0VHlwZSB9IGZyb20gJy4vcGV0cyc7XG5cbmV4cG9ydCBjbGFzcyBQZXRJbnN0YW5jZVN0YXRlIHtcbiAgICBjdXJyZW50U3RhdGVFbnVtOiBTdGF0ZXMgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBQZXRFbGVtZW50U3RhdGUge1xuICAgIHBldFN0YXRlOiBQZXRJbnN0YW5jZVN0YXRlIHwgdW5kZWZpbmVkO1xuICAgIHBldFR5cGU6IFBldFR5cGUgfCB1bmRlZmluZWQ7XG4gICAgcGV0Q29sb3I6IFBldENvbG9yIHwgdW5kZWZpbmVkO1xuICAgIGVsTGVmdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGVsQm90dG9tOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGV0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBldEZyaWVuZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgUGV0UGFuZWxTdGF0ZSB7XG4gICAgcGV0U3RhdGVzOiBBcnJheTxQZXRFbGVtZW50U3RhdGU+IHwgdW5kZWZpbmVkO1xuICAgIHBldENvdW50ZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gSG9yaXpvbnRhbERpcmVjdGlvbiB7XG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICBuYXR1cmFsLCAvLyBObyBjaGFuZ2UgdG8gY3VycmVudCBkaXJlY3Rpb25cbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gU3RhdGVzIHtcbiAgICBzaXRJZGxlID0gJ3NpdC1pZGxlJyxcbiAgICB3YWxrUmlnaHQgPSAnd2Fsay1yaWdodCcsXG4gICAgd2Fsa0xlZnQgPSAnd2Fsay1sZWZ0JyxcbiAgICBydW5SaWdodCA9ICdydW4tcmlnaHQnLFxuICAgIHJ1bkxlZnQgPSAncnVuLWxlZnQnLFxuICAgIGxpZSA9ICdsaWUnLFxuICAgIHdhbGxIYW5nTGVmdCA9ICd3YWxsLWhhbmctbGVmdCcsXG4gICAgY2xpbWJXYWxsTGVmdCA9ICdjbGltYi13YWxsLWxlZnQnLFxuICAgIGp1bXBEb3duTGVmdCA9ICdqdW1wLWRvd24tbGVmdCcsXG4gICAgbGFuZCA9ICdsYW5kJyxcbiAgICBzd2lwZSA9ICdzd2lwZScsXG4gICAgaWRsZVdpdGhCYWxsID0gJ2lkbGUtd2l0aC1iYWxsJyxcbiAgICBjaGFzZSA9ICdjaGFzZScsXG4gICAgY2hhc2VGcmllbmQgPSAnY2hhc2UtZnJpZW5kJyxcbn1cblxuZXhwb3J0IGVudW0gRnJhbWVSZXN1bHQge1xuICAgIHN0YXRlQ29udGludWUsXG4gICAgc3RhdGVDb21wbGV0ZSxcbiAgICAvLyBTcGVjaWFsIHN0YXRlc1xuICAgIHN0YXRlQ2FuY2VsLFxufVxuXG5leHBvcnQgY2xhc3MgQmFsbFN0YXRlIHtcbiAgICBjeDogbnVtYmVyO1xuICAgIGN5OiBudW1iZXI7XG4gICAgdng6IG51bWJlcjtcbiAgICB2eTogbnVtYmVyO1xuICAgIHBhdXNlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGN4OiBudW1iZXIsIGN5OiBudW1iZXIsIHZ4OiBudW1iZXIsIHZ5OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5jeCA9IGN4O1xuICAgICAgICB0aGlzLmN5ID0gY3k7XG4gICAgICAgIHRoaXMudnggPSB2eDtcbiAgICAgICAgdGhpcy52eSA9IHZ5O1xuICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RhdGVBYm92ZUdyb3VuZChzdGF0ZTogU3RhdGVzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgc3RhdGUgPT09IFN0YXRlcy5jbGltYldhbGxMZWZ0IHx8XG4gICAgICAgIHN0YXRlID09PSBTdGF0ZXMuanVtcERvd25MZWZ0IHx8XG4gICAgICAgIHN0YXRlID09PSBTdGF0ZXMubGFuZCB8fFxuICAgICAgICBzdGF0ZSA9PT0gU3RhdGVzLndhbGxIYW5nTGVmdFxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3RhdGUoc3RhdGU6IHN0cmluZywgcGV0OiBJUGV0VHlwZSk6IElTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICBjYXNlIFN0YXRlcy5zaXRJZGxlOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTaXRJZGxlU3RhdGUocGV0KTtcbiAgICAgICAgY2FzZSBTdGF0ZXMud2Fsa1JpZ2h0OlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBXYWxrUmlnaHRTdGF0ZShwZXQpO1xuICAgICAgICBjYXNlIFN0YXRlcy53YWxrTGVmdDpcbiAgICAgICAgICAgIHJldHVybiBuZXcgV2Fsa0xlZnRTdGF0ZShwZXQpO1xuICAgICAgICBjYXNlIFN0YXRlcy5ydW5SaWdodDpcbiAgICAgICAgICAgIHJldHVybiBuZXcgUnVuUmlnaHRTdGF0ZShwZXQpO1xuICAgICAgICBjYXNlIFN0YXRlcy5ydW5MZWZ0OlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW5MZWZ0U3RhdGUocGV0KTtcbiAgICAgICAgY2FzZSBTdGF0ZXMubGllOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBMaWVTdGF0ZShwZXQpO1xuICAgICAgICBjYXNlIFN0YXRlcy53YWxsSGFuZ0xlZnQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFdhbGxIYW5nTGVmdFN0YXRlKHBldCk7XG4gICAgICAgIGNhc2UgU3RhdGVzLmNsaW1iV2FsbExlZnQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IENsaW1iV2FsbExlZnRTdGF0ZShwZXQpO1xuICAgICAgICBjYXNlIFN0YXRlcy5qdW1wRG93bkxlZnQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEp1bXBEb3duTGVmdFN0YXRlKHBldCk7XG4gICAgICAgIGNhc2UgU3RhdGVzLmxhbmQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IExhbmRTdGF0ZShwZXQpO1xuICAgICAgICBjYXNlIFN0YXRlcy5zd2lwZTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3dpcGVTdGF0ZShwZXQpO1xuICAgICAgICBjYXNlIFN0YXRlcy5pZGxlV2l0aEJhbGw6XG4gICAgICAgICAgICByZXR1cm4gbmV3IElkbGVXaXRoQmFsbFN0YXRlKHBldCk7XG4gICAgICAgIGNhc2UgU3RhdGVzLmNoYXNlRnJpZW5kOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGFzZUZyaWVuZFN0YXRlKHBldCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU2l0SWRsZVN0YXRlKHBldCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0YXRlIHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHNwcml0ZUxhYmVsOiBzdHJpbmc7XG4gICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbERpcmVjdGlvbjtcbiAgICBwZXQ6IElQZXRUeXBlO1xuICAgIG5leHRGcmFtZSgpOiBGcmFtZVJlc3VsdDtcbn1cblxuY2xhc3MgQWJzdHJhY3RTdGF0aWNTdGF0ZSBpbXBsZW1lbnRzIElTdGF0ZSB7XG4gICAgbGFiZWwgPSBTdGF0ZXMuc2l0SWRsZTtcbiAgICBpZGxlQ291bnRlcjogbnVtYmVyO1xuICAgIHNwcml0ZUxhYmVsID0gJ2lkbGUnO1xuICAgIGhvbGRUaW1lID0gNTA7XG4gICAgcGV0OiBJUGV0VHlwZTtcblxuICAgIGhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihwZXQ6IElQZXRUeXBlKSB7XG4gICAgICAgIHRoaXMuaWRsZUNvdW50ZXIgPSAwO1xuICAgICAgICB0aGlzLnBldCA9IHBldDtcbiAgICB9XG5cbiAgICBuZXh0RnJhbWUoKTogRnJhbWVSZXN1bHQge1xuICAgICAgICB0aGlzLmlkbGVDb3VudGVyKys7XG4gICAgICAgIGlmICh0aGlzLmlkbGVDb3VudGVyID4gdGhpcy5ob2xkVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIEZyYW1lUmVzdWx0LnN0YXRlQ29tcGxldGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEZyYW1lUmVzdWx0LnN0YXRlQ29udGludWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2l0SWRsZVN0YXRlIGV4dGVuZHMgQWJzdHJhY3RTdGF0aWNTdGF0ZSB7XG4gICAgbGFiZWwgPSBTdGF0ZXMuc2l0SWRsZTtcbiAgICBzcHJpdGVMYWJlbCA9ICdpZGxlJztcbiAgICBob3Jpem9udGFsRGlyZWN0aW9uID0gSG9yaXpvbnRhbERpcmVjdGlvbi5yaWdodDtcbiAgICBob2xkVGltZSA9IDUwO1xufVxuXG5leHBvcnQgY2xhc3MgTGllU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdFN0YXRpY1N0YXRlIHtcbiAgICBsYWJlbCA9IFN0YXRlcy5saWU7XG4gICAgc3ByaXRlTGFiZWwgPSAnbGllJztcbiAgICBob3Jpem9udGFsRGlyZWN0aW9uID0gSG9yaXpvbnRhbERpcmVjdGlvbi5yaWdodDtcbiAgICBob2xkVGltZSA9IDUwO1xufVxuXG5leHBvcnQgY2xhc3MgV2FsbEhhbmdMZWZ0U3RhdGUgZXh0ZW5kcyBBYnN0cmFjdFN0YXRpY1N0YXRlIHtcbiAgICBsYWJlbCA9IFN0YXRlcy53YWxsSGFuZ0xlZnQ7XG4gICAgc3ByaXRlTGFiZWwgPSAnd2FsbGdyYWInO1xuICAgIGhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnQ7XG4gICAgaG9sZFRpbWUgPSA1MDtcbn1cblxuZXhwb3J0IGNsYXNzIExhbmRTdGF0ZSBleHRlbmRzIEFic3RyYWN0U3RhdGljU3RhdGUge1xuICAgIGxhYmVsID0gU3RhdGVzLmxhbmQ7XG4gICAgc3ByaXRlTGFiZWwgPSAnbGFuZCc7XG4gICAgaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ubGVmdDtcbiAgICBob2xkVGltZSA9IDEwO1xufVxuXG5leHBvcnQgY2xhc3MgU3dpcGVTdGF0ZSBleHRlbmRzIEFic3RyYWN0U3RhdGljU3RhdGUge1xuICAgIGxhYmVsID0gU3RhdGVzLnN3aXBlO1xuICAgIHNwcml0ZUxhYmVsID0gJ3N3aXBlJztcbiAgICBob3Jpem9udGFsRGlyZWN0aW9uID0gSG9yaXpvbnRhbERpcmVjdGlvbi5uYXR1cmFsO1xuICAgIGhvbGRUaW1lID0gMTU7XG59XG5cbmV4cG9ydCBjbGFzcyBJZGxlV2l0aEJhbGxTdGF0ZSBleHRlbmRzIEFic3RyYWN0U3RhdGljU3RhdGUge1xuICAgIGxhYmVsID0gU3RhdGVzLmlkbGVXaXRoQmFsbDtcbiAgICBzcHJpdGVMYWJlbCA9ICd3aXRoX2JhbGwnO1xuICAgIGhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnQ7XG4gICAgaG9sZFRpbWUgPSAzMDtcbn1cblxuZXhwb3J0IGNsYXNzIFdhbGtSaWdodFN0YXRlIGltcGxlbWVudHMgSVN0YXRlIHtcbiAgICBsYWJlbCA9IFN0YXRlcy53YWxrUmlnaHQ7XG4gICAgcGV0OiBJUGV0VHlwZTtcbiAgICBzcHJpdGVMYWJlbCA9ICd3YWxrJztcbiAgICBob3Jpem9udGFsRGlyZWN0aW9uID0gSG9yaXpvbnRhbERpcmVjdGlvbi5yaWdodDtcbiAgICBsZWZ0Qm91bmRhcnk6IG51bWJlcjtcbiAgICBzcGVlZE11bHRpcGxpZXIgPSAxO1xuICAgIGlkbGVDb3VudGVyOiBudW1iZXI7XG4gICAgaG9sZFRpbWUgPSA2MDtcblxuICAgIGNvbnN0cnVjdG9yKHBldDogSVBldFR5cGUpIHtcbiAgICAgICAgdGhpcy5sZWZ0Qm91bmRhcnkgPSBNYXRoLmZsb29yKHdpbmRvdy5pbm5lcldpZHRoICogMC45NSk7XG4gICAgICAgIHRoaXMucGV0ID0gcGV0O1xuICAgICAgICB0aGlzLmlkbGVDb3VudGVyID0gMDtcbiAgICB9XG5cbiAgICBuZXh0RnJhbWUoKTogRnJhbWVSZXN1bHQge1xuICAgICAgICB0aGlzLmlkbGVDb3VudGVyKys7XG4gICAgICAgIHRoaXMucGV0LnBvc2l0aW9uTGVmdChcbiAgICAgICAgICAgIHRoaXMucGV0LmxlZnQoKSArIHRoaXMucGV0LnNwZWVkKCkgKiB0aGlzLnNwZWVkTXVsdGlwbGllcixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wZXQuaXNNb3ZpbmcoKSAmJlxuICAgICAgICAgICAgdGhpcy5wZXQubGVmdCgpID49IHRoaXMubGVmdEJvdW5kYXJ5IC0gdGhpcy5wZXQud2lkdGgoKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBGcmFtZVJlc3VsdC5zdGF0ZUNvbXBsZXRlO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnBldC5pc01vdmluZygpICYmIHRoaXMuaWRsZUNvdW50ZXIgPiB0aGlzLmhvbGRUaW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gRnJhbWVSZXN1bHQuc3RhdGVDb21wbGV0ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRnJhbWVSZXN1bHQuc3RhdGVDb250aW51ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXYWxrTGVmdFN0YXRlIGltcGxlbWVudHMgSVN0YXRlIHtcbiAgICBsYWJlbCA9IFN0YXRlcy53YWxrTGVmdDtcbiAgICBzcHJpdGVMYWJlbCA9ICd3YWxrJztcbiAgICBob3Jpem9udGFsRGlyZWN0aW9uID0gSG9yaXpvbnRhbERpcmVjdGlvbi5sZWZ0O1xuICAgIHBldDogSVBldFR5cGU7XG4gICAgc3BlZWRNdWx0aXBsaWVyID0gMTtcbiAgICBpZGxlQ291bnRlcjogbnVtYmVyO1xuICAgIGhvbGRUaW1lID0gNjA7XG5cbiAgICBjb25zdHJ1Y3RvcihwZXQ6IElQZXRUeXBlKSB7XG4gICAgICAgIHRoaXMucGV0ID0gcGV0O1xuICAgICAgICB0aGlzLmlkbGVDb3VudGVyID0gMDtcbiAgICB9XG5cbiAgICBuZXh0RnJhbWUoKTogRnJhbWVSZXN1bHQge1xuICAgICAgICB0aGlzLnBldC5wb3NpdGlvbkxlZnQoXG4gICAgICAgICAgICB0aGlzLnBldC5sZWZ0KCkgLSB0aGlzLnBldC5zcGVlZCgpICogdGhpcy5zcGVlZE11bHRpcGxpZXIsXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLnBldC5pc01vdmluZygpICYmIHRoaXMucGV0LmxlZnQoKSA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gRnJhbWVSZXN1bHQuc3RhdGVDb21wbGV0ZTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5wZXQuaXNNb3ZpbmcoKSAmJiB0aGlzLmlkbGVDb3VudGVyID4gdGhpcy5ob2xkVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIEZyYW1lUmVzdWx0LnN0YXRlQ29tcGxldGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEZyYW1lUmVzdWx0LnN0YXRlQ29udGludWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUnVuUmlnaHRTdGF0ZSBleHRlbmRzIFdhbGtSaWdodFN0YXRlIHtcbiAgICBsYWJlbCA9IFN0YXRlcy5ydW5SaWdodDtcbiAgICBzcHJpdGVMYWJlbCA9ICd3YWxrX2Zhc3QnO1xuICAgIHNwZWVkTXVsdGlwbGllciA9IDEuNjtcbiAgICBob2xkVGltZSA9IDEzMDtcbn1cblxuZXhwb3J0IGNsYXNzIFJ1bkxlZnRTdGF0ZSBleHRlbmRzIFdhbGtMZWZ0U3RhdGUge1xuICAgIGxhYmVsID0gU3RhdGVzLnJ1bkxlZnQ7XG4gICAgc3ByaXRlTGFiZWwgPSAnd2Fsa19mYXN0JztcbiAgICBzcGVlZE11bHRpcGxpZXIgPSAxLjY7XG4gICAgaG9sZFRpbWUgPSAxMzA7XG59XG5cbmV4cG9ydCBjbGFzcyBDaGFzZVN0YXRlIGltcGxlbWVudHMgSVN0YXRlIHtcbiAgICBsYWJlbCA9IFN0YXRlcy5jaGFzZTtcbiAgICBzcHJpdGVMYWJlbCA9ICdydW4nO1xuICAgIGhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnQ7XG4gICAgYmFsbFN0YXRlOiBCYWxsU3RhdGU7XG4gICAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgICBwZXQ6IElQZXRUeXBlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHBldDogSVBldFR5cGUsXG4gICAgICAgIGJhbGxTdGF0ZTogQmFsbFN0YXRlLFxuICAgICAgICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LFxuICAgICkge1xuICAgICAgICB0aGlzLnBldCA9IHBldDtcbiAgICAgICAgdGhpcy5iYWxsU3RhdGUgPSBiYWxsU3RhdGU7XG4gICAgICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuICAgIH1cblxuICAgIG5leHRGcmFtZSgpOiBGcmFtZVJlc3VsdCB7XG4gICAgICAgIGlmICh0aGlzLmJhbGxTdGF0ZS5wYXVzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBGcmFtZVJlc3VsdC5zdGF0ZUNhbmNlbDsgLy8gQmFsbCBpcyBhbHJlYWR5IGNhdWdodFxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBldC5sZWZ0KCkgPiB0aGlzLmJhbGxTdGF0ZS5jeCkge1xuICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsRGlyZWN0aW9uID0gSG9yaXpvbnRhbERpcmVjdGlvbi5sZWZ0O1xuICAgICAgICAgICAgdGhpcy5wZXQucG9zaXRpb25MZWZ0KHRoaXMucGV0LmxlZnQoKSAtIHRoaXMucGV0LnNwZWVkKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsRGlyZWN0aW9uID0gSG9yaXpvbnRhbERpcmVjdGlvbi5yaWdodDtcbiAgICAgICAgICAgIHRoaXMucGV0LnBvc2l0aW9uTGVmdCh0aGlzLnBldC5sZWZ0KCkgKyB0aGlzLnBldC5zcGVlZCgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCAtIHRoaXMuYmFsbFN0YXRlLmN5IDxcbiAgICAgICAgICAgICAgICB0aGlzLnBldC53aWR0aCgpICsgdGhpcy5wZXQuZmxvb3IoKSAmJlxuICAgICAgICAgICAgdGhpcy5iYWxsU3RhdGUuY3ggPCB0aGlzLnBldC5sZWZ0KCkgJiZcbiAgICAgICAgICAgIHRoaXMucGV0LmxlZnQoKSA8IHRoaXMuYmFsbFN0YXRlLmN4ICsgMTVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBoaWRlIGJhbGxcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB0aGlzLmJhbGxTdGF0ZS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIEZyYW1lUmVzdWx0LnN0YXRlQ29tcGxldGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEZyYW1lUmVzdWx0LnN0YXRlQ29udGludWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hhc2VGcmllbmRTdGF0ZSBpbXBsZW1lbnRzIElTdGF0ZSB7XG4gICAgbGFiZWwgPSBTdGF0ZXMuY2hhc2VGcmllbmQ7XG4gICAgc3ByaXRlTGFiZWwgPSAncnVuJztcbiAgICBob3Jpem9udGFsRGlyZWN0aW9uID0gSG9yaXpvbnRhbERpcmVjdGlvbi5sZWZ0O1xuICAgIHBldDogSVBldFR5cGU7XG5cbiAgICBjb25zdHJ1Y3RvcihwZXQ6IElQZXRUeXBlKSB7XG4gICAgICAgIHRoaXMucGV0ID0gcGV0O1xuICAgIH1cblxuICAgIG5leHRGcmFtZSgpOiBGcmFtZVJlc3VsdCB7XG4gICAgICAgIGlmICghdGhpcy5wZXQuZnJpZW5kKCkuaXNQbGF5aW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBGcmFtZVJlc3VsdC5zdGF0ZUNhbmNlbDsgLy8gRnJpZW5kIGlzIG5vIGxvbmdlciBwbGF5aW5nLlxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBldC5sZWZ0KCkgPiB0aGlzLnBldC5mcmllbmQoKS5sZWZ0KCkpIHtcbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ubGVmdDtcbiAgICAgICAgICAgIHRoaXMucGV0LnBvc2l0aW9uTGVmdCh0aGlzLnBldC5sZWZ0KCkgLSB0aGlzLnBldC5zcGVlZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ucmlnaHQ7XG4gICAgICAgICAgICB0aGlzLnBldC5wb3NpdGlvbkxlZnQodGhpcy5wZXQubGVmdCgpICsgdGhpcy5wZXQuc3BlZWQoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRnJhbWVSZXN1bHQuc3RhdGVDb250aW51ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDbGltYldhbGxMZWZ0U3RhdGUgaW1wbGVtZW50cyBJU3RhdGUge1xuICAgIGxhYmVsID0gU3RhdGVzLmNsaW1iV2FsbExlZnQ7XG4gICAgc3ByaXRlTGFiZWwgPSAnd2FsbGNsaW1iJztcbiAgICBob3Jpem9udGFsRGlyZWN0aW9uID0gSG9yaXpvbnRhbERpcmVjdGlvbi5sZWZ0O1xuICAgIHBldDogSVBldFR5cGU7XG5cbiAgICBjb25zdHJ1Y3RvcihwZXQ6IElQZXRUeXBlKSB7XG4gICAgICAgIHRoaXMucGV0ID0gcGV0O1xuICAgIH1cblxuICAgIG5leHRGcmFtZSgpOiBGcmFtZVJlc3VsdCB7XG4gICAgICAgIHRoaXMucGV0LnBvc2l0aW9uQm90dG9tKHRoaXMucGV0LmJvdHRvbSgpICsgMSk7XG4gICAgICAgIGlmICh0aGlzLnBldC5ib3R0b20oKSA+PSAxMDApIHtcbiAgICAgICAgICAgIHJldHVybiBGcmFtZVJlc3VsdC5zdGF0ZUNvbXBsZXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBGcmFtZVJlc3VsdC5zdGF0ZUNvbnRpbnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEp1bXBEb3duTGVmdFN0YXRlIGltcGxlbWVudHMgSVN0YXRlIHtcbiAgICBsYWJlbCA9IFN0YXRlcy5qdW1wRG93bkxlZnQ7XG4gICAgc3ByaXRlTGFiZWwgPSAnZmFsbF9mcm9tX2dyYWInO1xuICAgIGhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICAgIHBldDogSVBldFR5cGU7XG5cbiAgICBjb25zdHJ1Y3RvcihwZXQ6IElQZXRUeXBlKSB7XG4gICAgICAgIHRoaXMucGV0ID0gcGV0O1xuICAgIH1cblxuICAgIG5leHRGcmFtZSgpOiBGcmFtZVJlc3VsdCB7XG4gICAgICAgIHRoaXMucGV0LnBvc2l0aW9uQm90dG9tKHRoaXMucGV0LmJvdHRvbSgpIC0gNSk7XG4gICAgICAgIGlmICh0aGlzLnBldC5ib3R0b20oKSA8PSB0aGlzLnBldC5mbG9vcigpKSB7XG4gICAgICAgICAgICB0aGlzLnBldC5wb3NpdGlvbkJvdHRvbSh0aGlzLnBldC5mbG9vcigpKTtcbiAgICAgICAgICAgIHJldHVybiBGcmFtZVJlc3VsdC5zdGF0ZUNvbXBsZXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBGcmFtZVJlc3VsdC5zdGF0ZUNvbnRpbnVlO1xuICAgIH1cbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9wYW5lbC9tYWluLnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a846b844..e8dbe97a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,10 +16,13 @@ "@typescript-eslint/eslint-plugin": "^4.1.1", "@typescript-eslint/parser": "^4.1.1", "eslint": "^7.9.0", + "eslint-plugin-unused-imports": "^2.0.0", "glob": "^7.1.6", "mocha": "^8.1.3", + "prettier": "^2.6.2", "ts-loader": "^8.0.18", "typescript": "^4.0.2", + "typescript-eslint": "^0.0.1-alpha.0", "vscode-test": "^1.4.0", "webpack": "^5.26.0", "webpack-cli": "^4.5.0" @@ -38,20 +41,38 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/highlight": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", - "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/chalk": { @@ -68,6 +89,21 @@ "node": ">=4" } }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", @@ -78,19 +114,18 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", - "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.20", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, @@ -107,6 +142,26 @@ "node": ">= 4" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", @@ -575,9 +630,9 @@ "dev": true }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -587,9 +642,9 @@ } }, "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -651,15 +706,18 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { @@ -676,13 +734,10 @@ } }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/array-union": { "version": "2.1.0", @@ -888,39 +943,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chalk/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/chalk/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -1001,18 +1023,21 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/colorette": { @@ -1226,29 +1251,32 @@ } }, "node_modules/eslint": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", - "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.3.0", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^6.0.0", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -1256,7 +1284,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -1265,7 +1293,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -1279,6 +1307,36 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-plugin-unused-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz", + "integrity": "sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==", + "dev": true, + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "eslint": "^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -1325,6 +1383,35 @@ "node": ">=10" } }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint/node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -1334,6 +1421,18 @@ "node": ">= 4" } }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", @@ -1348,6 +1447,18 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/espree/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", @@ -1699,12 +1810,12 @@ "dev": true }, "node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -1815,9 +1926,9 @@ } }, "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, "engines": { "node": ">= 4" @@ -1932,9 +2043,9 @@ } }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" @@ -2057,6 +2168,15 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/js-yaml/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -2162,6 +2282,18 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "node_modules/log-symbols": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", @@ -2270,9 +2402,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "node_modules/mkdirp": { @@ -2331,12 +2463,6 @@ "url": "https://opencollective.com/mochajs" } }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2673,6 +2799,21 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -2778,9 +2919,9 @@ } }, "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "engines": { "node": ">=8" @@ -3031,39 +3172,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -3111,26 +3219,26 @@ "dev": true }, "node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" @@ -3170,24 +3278,25 @@ } }, "node_modules/table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, "dependencies": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=10.0.0" } }, "node_modules/table/node_modules/ajv": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz", - "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -3346,12 +3455,15 @@ } }, "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/typescript": { @@ -3367,6 +3479,12 @@ "node": ">=4.2.0" } }, + "node_modules/typescript-eslint": { + "version": "0.0.1-alpha.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-0.0.1-alpha.0.tgz", + "integrity": "sha512-1hNKM37dAWML/2ltRXupOq2uqcdRQyDFphl+341NTPXFLLLiDhErXx8VtaSLh3xP7SyHZdcCgpt9boYYVb3fQg==", + "dev": true + }, "node_modules/unzipper": { "version": "0.10.11", "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", @@ -3563,18 +3681,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz", - "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/webpack/node_modules/enhanced-resolve": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", @@ -3622,9 +3728,9 @@ } }, "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, "engines": { "node": ">=4" @@ -3702,39 +3808,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -3822,22 +3895,31 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/highlight": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", - "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3848,6 +3930,21 @@ "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true } } }, @@ -3858,19 +3955,18 @@ "dev": true }, "@eslint/eslintrc": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", - "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.20", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, @@ -3883,6 +3979,23 @@ } } }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@nodelib/fs.scandir": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", @@ -4252,15 +4365,15 @@ "dev": true }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, @@ -4305,12 +4418,12 @@ "dev": true }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "anymatch": { @@ -4324,13 +4437,10 @@ } }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "array-union": { "version": "2.1.0", @@ -4477,30 +4587,6 @@ "supports-color": "^7.1.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4566,18 +4652,18 @@ } }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "colorette": { @@ -4741,29 +4827,32 @@ "dev": true }, "eslint": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", - "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.3.0", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^6.0.0", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -4771,7 +4860,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -4780,19 +4869,58 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } } } }, + "eslint-plugin-unused-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz", + "integrity": "sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==", + "dev": true, + "requires": { + "eslint-rule-composer": "^0.3.0" + } + }, + "eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -4837,6 +4965,12 @@ "eslint-visitor-keys": "^1.3.0" }, "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", @@ -5107,12 +5241,12 @@ "dev": true }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "globby": { @@ -5190,9 +5324,9 @@ "dev": true }, "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "import-fresh": { @@ -5274,9 +5408,9 @@ "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -5369,6 +5503,17 @@ "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + } } }, "json-parse-better-errors": { @@ -5452,6 +5597,18 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "log-symbols": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", @@ -5533,9 +5690,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mkdirp": { @@ -5580,12 +5737,6 @@ "yargs-unparser": "2.0.0" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -5830,6 +5981,12 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prettier": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "dev": true + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -5911,9 +6068,9 @@ } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "require-directory": { @@ -6071,32 +6228,6 @@ "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } } }, "source-list-map": { @@ -6145,23 +6276,23 @@ } }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-final-newline": { @@ -6186,21 +6317,22 @@ } }, "table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "dependencies": { "ajv": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz", - "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -6315,9 +6447,9 @@ } }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "typescript": { @@ -6326,6 +6458,12 @@ "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", "dev": true }, + "typescript-eslint": { + "version": "0.0.1-alpha.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-0.0.1-alpha.0.tgz", + "integrity": "sha512-1hNKM37dAWML/2ltRXupOq2uqcdRQyDFphl+341NTPXFLLLiDhErXx8VtaSLh3xP7SyHZdcCgpt9boYYVb3fQg==", + "dev": true + }, "unzipper": { "version": "0.10.11", "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", @@ -6418,12 +6556,6 @@ "webpack-sources": "^2.1.1" }, "dependencies": { - "acorn": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz", - "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==", - "dev": true - }, "enhanced-resolve": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", @@ -6511,9 +6643,9 @@ }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "is-fullwidth-code-point": { @@ -6570,32 +6702,6 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } } }, "wrappy": { diff --git a/package.json b/package.json index 5376a177..17ddd9a7 100644 --- a/package.json +++ b/package.json @@ -174,7 +174,8 @@ "compile": "npm run compile:panel && npm run compile:extension", "watch": "tsc -watch -p ./tsconfig.extension.json", "pretest": "npm run compile && npm run lint", - "lint": "eslint src --ext ts", + "lint": "eslint src --ext ts && prettier --check .", + "lint:fix": "eslint src --ext ts --fix && prettier --write .", "test": "node ./out/extension/test/runTest.js" }, "devDependencies": { @@ -185,10 +186,13 @@ "@typescript-eslint/eslint-plugin": "^4.1.1", "@typescript-eslint/parser": "^4.1.1", "eslint": "^7.9.0", + "eslint-plugin-unused-imports": "^2.0.0", "glob": "^7.1.6", "mocha": "^8.1.3", + "prettier": "^2.6.2", "ts-loader": "^8.0.18", "typescript": "^4.0.2", + "typescript-eslint": "^0.0.1-alpha.0", "vscode-test": "^1.4.0", "webpack": "^5.26.0", "webpack-cli": "^4.5.0" diff --git a/src/extension/extension.ts b/src/extension/extension.ts index 7147b2f8..5f8de34d 100644 --- a/src/extension/extension.ts +++ b/src/extension/extension.ts @@ -320,9 +320,9 @@ export function activate(context: vscode.ExtensionContext) { getConfiguredSize(), ); if ( - spec.type == null || - spec.color == null || - spec.size == null + spec.type === null || + spec.color === null || + spec.size === null ) { return vscode.window.showErrorMessage( 'Cancelled Spawning Pet', @@ -452,10 +452,7 @@ export function activate(context: vscode.ExtensionContext) { if (vscode.window.registerWebviewPanelSerializer) { // Make sure we register a serializer in activation event vscode.window.registerWebviewPanelSerializer(PetPanel.viewType, { - async deserializeWebviewPanel( - webviewPanel: vscode.WebviewPanel, - state: any, - ) { + async deserializeWebviewPanel(webviewPanel: vscode.WebviewPanel) { // Reset the webview options so we use latest uri for `localResourceRoots`. webviewPanel.webview.options = getWebviewOptions( context.extensionUri, @@ -817,7 +814,7 @@ class PetPanel extends PetWebviewContainer { // Update the content based on view changes this._panel.onDidChangeViewState( - (e) => { + () => { this.update(); }, null, @@ -862,11 +859,7 @@ class PetWebviewViewProvider extends PetWebviewContainer { private _webviewView?: vscode.WebviewView; - resolveWebviewView( - webviewView: vscode.WebviewView, - context: vscode.WebviewViewResolveContext, - token: vscode.CancellationToken, - ): void | Thenable { + resolveWebviewView(webviewView: vscode.WebviewView): void | Thenable { this._webviewView = webviewView; webviewView.webview.options = getWebviewOptions(this._extensionUri); diff --git a/src/extension/test/runTest.js b/src/extension/test/runTest.js index 8fb45daa..e1fb6b9c 100644 --- a/src/extension/test/runTest.js +++ b/src/extension/test/runTest.js @@ -1,43 +1,147 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; +'use strict'; +var __awaiter = + (this && this.__awaiter) || + function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator['throw'](value)); + } catch (e) { + reject(e); + } } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; + function step(result) { + result.done + ? resolve(result.value) + : adopt(result.value).then(fulfilled, rejected); + } + step( + (generator = generator.apply(thisArg, _arguments || [])).next(), + ); + }); + }; +var __generator = + (this && this.__generator) || + function (thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) throw t[1]; + return t[1]; + }, + trys: [], + ops: [], + }, + f, + y, + t, + g; + return ( + (g = { next: verb(0), throw: verb(1), return: verb(2) }), + typeof Symbol === 'function' && + (g[Symbol.iterator] = function () { + return this; + }), + g + ); + function verb(n) { + return function (v) { + return step([n, v]); + }; + } + function step(op) { + if (f) throw new TypeError('Generator is already executing.'); + while (_) + try { + if ( + ((f = 1), + y && + (t = + op[0] & 2 + ? y['return'] + : op[0] + ? y['throw'] || + ((t = y['return']) && t.call(y), 0) + : y.next) && + !(t = t.call(y, op[1])).done) + ) + return t; + if (((y = 0), t)) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: + case 1: + t = op; + break; + case 4: + _.label++; + return { value: op[1], done: false }; + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + default: + if ( + !((t = _.trys), + (t = t.length > 0 && t[t.length - 1])) && + (op[0] === 6 || op[0] === 2) + ) { + _ = 0; + continue; + } + if ( + op[0] === 3 && + (!t || (op[1] > t[0] && op[1] < t[3])) + ) { + _.label = op[1]; + break; + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + if (t[2]) _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + if (op[0] & 5) throw op[1]; + return { value: op[0] ? op[1] : void 0, done: true }; + } + }; exports.__esModule = true; -var path = require("path"); -var vscode_test_1 = require("vscode-test"); +var path = require('path'); +var vscode_test_1 = require('vscode-test'); function main() { return __awaiter(this, void 0, void 0, function () { var extensionDevelopmentPath, extensionTestsPath, err_1; @@ -45,10 +149,22 @@ function main() { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); - extensionDevelopmentPath = path.resolve(__dirname, '../../'); - extensionTestsPath = path.resolve(__dirname, './suite/index'); + extensionDevelopmentPath = path.resolve( + __dirname, + '../../', + ); + extensionTestsPath = path.resolve( + __dirname, + './suite/index', + ); // Download VS Code, unzip it and run the integration test - return [4 /*yield*/, vscode_test_1.runTests({ extensionDevelopmentPath: extensionDevelopmentPath, extensionTestsPath: extensionTestsPath })]; + return [ + 4 /*yield*/, + vscode_test_1.runTests({ + extensionDevelopmentPath: extensionDevelopmentPath, + extensionTestsPath: extensionTestsPath, + }), + ]; case 1: // Download VS Code, unzip it and run the integration test _a.sent(); @@ -58,7 +174,8 @@ function main() { console.error('Failed to run tests'); process.exit(1); return [3 /*break*/, 3]; - case 3: return [2 /*return*/]; + case 3: + return [2 /*return*/]; } }); }); diff --git a/src/extension/test/suite/extension.test.js b/src/extension/test/suite/extension.test.js index 2523e7d4..f8192f8f 100644 --- a/src/extension/test/suite/extension.test.js +++ b/src/extension/test/suite/extension.test.js @@ -1,9 +1,9 @@ -"use strict"; +'use strict'; exports.__esModule = true; -var assert = require("assert"); +var assert = require('assert'); // You can import and use all API from the 'vscode' module // as well as import your extension to test it -var vscode = require("vscode"); +var vscode = require('vscode'); // import * as myExtension from '../../extension'; suite('Extension Test Suite', function () { vscode.window.showInformationMessage('Start all tests.'); diff --git a/src/extension/test/suite/index.js b/src/extension/test/suite/index.js index f29f446c..374e88b0 100644 --- a/src/extension/test/suite/index.js +++ b/src/extension/test/suite/index.js @@ -1,14 +1,14 @@ -"use strict"; +'use strict'; exports.__esModule = true; exports.run = void 0; -var path = require("path"); -var Mocha = require("mocha"); -var glob = require("glob"); +var path = require('path'); +var Mocha = require('mocha'); +var glob = require('glob'); function run() { // Create the mocha test var mocha = new Mocha({ ui: 'tdd', - color: true + color: true, }); var testsRoot = path.resolve(__dirname, '..'); return new Promise(function (c, e) { @@ -17,19 +17,19 @@ function run() { return e(err); } // Add files to the test suite - files.forEach(function (f) { return mocha.addFile(path.resolve(testsRoot, f)); }); + files.forEach(function (f) { + return mocha.addFile(path.resolve(testsRoot, f)); + }); try { // Run the mocha test mocha.run(function (failures) { if (failures > 0) { - e(new Error(failures + " tests failed.")); - } - else { + e(new Error(failures + ' tests failed.')); + } else { c(); } }); - } - catch (err) { + } catch (err) { console.error(err); e(err); } diff --git a/src/panel/main.ts b/src/panel/main.ts index 453a5cba..2f6f615f 100644 --- a/src/panel/main.ts +++ b/src/panel/main.ts @@ -10,19 +10,11 @@ import { import { createPet, IPetType, - InvalidPetException, PetCollection, PetElement, IPetCollection, } from './pets'; -import { - BallState, - ChaseFriendState, - PetElementState, - PetInstanceState, - PetPanelState, - States, -} from './states'; +import { BallState, PetElementState, PetPanelState } from './states'; /* This is how the VS Code API can be invoked from the panel */ declare global { @@ -152,15 +144,6 @@ function addPetToPanel( ); } -function removePetFromPanel(pet: PetElement): any { - pet.collision.removeEventListener('mouseover', handleMouseOver); - (document.getElementById('petsContainer') as HTMLDivElement).removeChild( - pet.collision, - ); - pet.collision.remove(); - pet.remove(); -} - export function saveState() { var state = new PetPanelState(); state.petStates = new Array(); diff --git a/src/panel/pets.ts b/src/panel/pets.ts index d8a41092..76ae5082 100644 --- a/src/panel/pets.ts +++ b/src/panel/pets.ts @@ -22,7 +22,6 @@ import { ZAPPY_NAMES, ROCKY_NAMES, } from '../common/names'; -import { PetSpecification } from '../extension/extension'; export class InvalidStateException {} @@ -83,7 +82,7 @@ export class PetCollection implements IPetCollection { } locate(name: string): PetElement | undefined { - return this._pets.find((collection, value, obj) => { + return this._pets.find((collection) => { return collection.pet.name() === name; }); }