├── .babelrc ├── .eslintrc.json ├── .github └── workflows │ └── linters.yml ├── .gitignore ├── .hintrc ├── .stylelintrc.json ├── LICENSE ├── README.md ├── babel.config.json ├── dist ├── assets │ └── img │ │ ├── icons8-menu-rounded-24.png │ │ ├── icons8-multiply-24.png │ │ └── user.png ├── index.bundle.js ├── index.bundle.js.LICENSE.txt ├── index.css ├── index.html └── runtime.bundle.js ├── murple_logo.png ├── package-lock.json ├── package.json ├── src ├── Test │ ├── test_comments.test.js │ ├── test_item_count.test.js │ └── test_reservations.test.js ├── assets │ └── img │ │ ├── comment.png │ │ ├── home.png │ │ ├── icons8-menu-rounded-24.png │ │ ├── icons8-multiply-24.png │ │ ├── reservation.png │ │ └── user.png ├── index.html ├── index.js ├── modules │ ├── apiUrls.js │ ├── commentCounter.js │ ├── displayItems.js │ ├── domSelector.js │ ├── itemCounter.js │ ├── popupComment.js │ ├── popupReservation.js │ └── reservationCounter.js └── style.css └── webpack.config.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "test": { 4 | "plugins": ["@babel/plugin-transform-modules-commonjs"] 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es6": true, 5 | "jest": true 6 | }, 7 | "parser": "babel-eslint", 8 | "parserOptions": { 9 | "ecmaVersion": 2018, 10 | "sourceType": "module" 11 | }, 12 | "extends": ["airbnb-base"], 13 | "rules": { 14 | "no-shadow": "off", 15 | "no-param-reassign": "off", 16 | "eol-last": "off", 17 | "import/extensions": [ 1, { 18 | "js": "always", "json": "always" 19 | }] 20 | }, 21 | "ignorePatterns": [ 22 | "dist/", 23 | "build/" 24 | ] 25 | } -------------------------------------------------------------------------------- /.github/workflows/linters.yml: -------------------------------------------------------------------------------- 1 | name: Linters 2 | 3 | on: pull_request 4 | 5 | env: 6 | FORCE_COLOR: 1 7 | 8 | jobs: 9 | lighthouse: 10 | name: Lighthouse 11 | runs-on: ubuntu-22.04 12 | steps: 13 | - uses: actions/checkout@v2 14 | - uses: actions/setup-node@v1 15 | with: 16 | node-version: "12.x" 17 | - name: Setup Lighthouse 18 | run: npm install -g @lhci/cli@0.7.x 19 | - name: Lighthouse Report 20 | run: lhci autorun --upload.target=temporary-public-storage --collect.staticDistDir=. 21 | webhint: 22 | name: Webhint 23 | runs-on: ubuntu-22.04 24 | steps: 25 | - uses: actions/checkout@v2 26 | - uses: actions/setup-node@v1 27 | with: 28 | node-version: "12.x" 29 | - name: Setup Webhint 30 | run: | 31 | npm install --save-dev hint@7.x 32 | [ -f .hintrc ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css-js/.hintrc 33 | - name: Webhint Report 34 | run: npx hint . 35 | stylelint: 36 | name: Stylelint 37 | runs-on: ubuntu-22.04 38 | steps: 39 | - uses: actions/checkout@v2 40 | - uses: actions/setup-node@v1 41 | with: 42 | node-version: "12.x" 43 | - name: Setup Stylelint 44 | run: | 45 | npm install --save-dev stylelint@13.x stylelint-scss@3.x stylelint-config-standard@21.x stylelint-csstree-validator@1.x 46 | [ -f .stylelintrc.json ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css-js/.stylelintrc.json 47 | - name: Stylelint Report 48 | run: npx stylelint "**/*.{css,scss}" 49 | eslint: 50 | name: ESLint 51 | runs-on: ubuntu-22.04 52 | steps: 53 | - uses: actions/checkout@v2 54 | - uses: actions/setup-node@v1 55 | with: 56 | node-version: "12.x" 57 | - name: Setup ESLint 58 | run: | 59 | npm install --save-dev eslint@7.x eslint-config-airbnb-base@14.x eslint-plugin-import@2.x babel-eslint@10.x 60 | [ -f .eslintrc.json ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css-js/.eslintrc.json 61 | - name: ESLint Report 62 | run: npx eslint . 63 | nodechecker: 64 | name: node_modules checker 65 | runs-on: ubuntu-22.04 66 | steps: 67 | - uses: actions/checkout@v2 68 | - name: Check node_modules existence 69 | run: | 70 | if [ -d "node_modules/" ]; then echo -e "\e[1;31mThe node_modules/ folder was pushed to the repo. Please remove it from the GitHub repository and try again."; echo -e "\e[1;32mYou can set up a .gitignore file with this folder included on it to prevent this from happening in the future." && exit 1; fi -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | coverage/ -------------------------------------------------------------------------------- /.hintrc: -------------------------------------------------------------------------------- 1 | { 2 | "connector": { 3 | "name": "local", 4 | "options": { 5 | "pattern": ["**", "!.git/**", "!node_modules/**"] 6 | } 7 | }, 8 | "extends": ["development"], 9 | "formatters": ["stylish"], 10 | "hints": [ 11 | "button-type", 12 | "disown-opener", 13 | "html-checker", 14 | "meta-charset-utf-8", 15 | "meta-viewport", 16 | "no-inline-styles:error" 17 | ] 18 | } -------------------------------------------------------------------------------- /.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["stylelint-config-standard"], 3 | "plugins": ["stylelint-scss", "stylelint-csstree-validator"], 4 | "rules": { 5 | "at-rule-no-unknown": [ 6 | true, 7 | { 8 | "ignoreAtRules": ["tailwind", "apply", "variants", "responsive", "screen"] 9 | } 10 | ], 11 | "scss/at-rule-no-unknown": [ 12 | true, 13 | { 14 | "ignoreAtRules": ["tailwind", "apply", "variants", "responsive", "screen"] 15 | } 16 | ], 17 | "csstree/validator": true 18 | }, 19 | "ignoreFiles": ["build/**", "dist/**", "**/reset*.css", "**/bootstrap*.css", "**/*.js", "**/*.jsx"] 20 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Abu Raihan, Salwa Ballouti, Lugard Agu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |
").concat(t.comment,"
\n").concat(t.comment,"
\nNo Data Found
';case 21:case"end":return t.stop()}var p,m,h}),t)})));return function(){return t.apply(this,arguments)}}();r.addEventListener("click",(function(){a.classList.toggle("display-flex")})),o.addEventListener("click",(function(){a.classList.remove("display-flex")})),i.forEach((function(t){t.addEventListener("click",(function(){a.classList.remove("display-flex")}))})),window.onload=function(){Y()}}},t=>{t(t.s=963)}]); 3 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,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aUJBQWlCLFNBQVMsV0FDakN2RCxFQUFZd0QsVUFBVUMsT0FBTyxlQUMvQixJQUVBM0QsRUFBZTRDLFNBQVEsU0FBQ0MsR0FDdEJBLEVBQUtZLGlCQUFpQixTQUFTLFdBQzdCdkQsRUFBWXdELFVBQVVDLE9BQU8sZUFDL0IsR0FDRixJQUdBK0UsT0FBT0MsT0FBUyxXQUNkQyxHQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vanMtY2Fwc3RvbmUvLi9zcmMvbW9kdWxlcy9kb21TZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9qcy1jYXBzdG9uZS8uL3NyYy9tb2R1bGVzL2FwaVVybHMuanMiLCJ3ZWJwYWNrOi8vanMtY2Fwc3RvbmUvLi9zcmMvbW9kdWxlcy9jb21tZW50Q291bnRlci5qcyIsIndlYnBhY2s6Ly9qcy1jYXBzdG9uZS8uL3NyYy9tb2R1bGVzL3BvcHVwQ29tbWVudC5qcyIsIndlYnBhY2s6Ly9qcy1jYXBzdG9uZS8uL3NyYy9tb2R1bGVzL3Jlc2VydmF0aW9uQ291bnRlci5qcyIsIndlYnBhY2s6Ly9qcy1jYXBzdG9uZS8uL3NyYy9tb2R1bGVzL3BvcHVwUmVzZXJ2YXRpb24uanMiLCJ3ZWJwYWNrOi8vanMtY2Fwc3RvbmUvLi9zcmMvbW9kdWxlcy9kaXNwbGF5SXRlbXMuanMiLCJ3ZWJwYWNrOi8vanMtY2Fwc3RvbmUvLi9zcmMvbW9kdWxlcy9pdGVtQ291bnRlci5qcyIsIndlYnBhY2s6Ly9qcy1jYXBzdG9uZS8uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgbWVudUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2JpbGUtbWVudScpO1xuZXhwb3J0IGNvbnN0IGNsb3NlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nyb3NzLW1lbnUnKTtcbmV4cG9ydCBjb25zdCBtb2JpbGVOYXZsaW5rcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICcubW9iaWxlLW5hdi1ncm91cCAubmF2LWxpbmsnLFxuKTtcbmV4cG9ydCBjb25zdCBtb2JOYXZHcm91cCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tb2JpbGUtbmF2LWdyb3VwJyk7XG5leHBvcnQgY29uc3QgbW9kYWxDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucG9wdXAtbW9kYWwnKTtcbmV4cG9ydCBjb25zdCBsaXN0SXRlbXNDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2hvdy1ncm91cCcpO1xuZXhwb3J0IGNvbnN0IGl0ZW1Db3VudENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb3VudF9pdGVtJyk7XG4iLCJleHBvcnQgY29uc3QgQkFTRV9VUkwgPSAnaHR0cHM6Ly91cy1jZW50cmFsMS1pbnZvbHZlbWVudC1hcGkuY2xvdWRmdW5jdGlvbnMubmV0L2NhcHN0b25lQXBpL2FwcHMvWTFPY2wyazVMb0pkVkVoSGlhNU8nO1xuZXhwb3J0IGNvbnN0IE1PVklFX0FQSSA9ICdodHRwczovL2FwaS50dm1hemUuY29tL3NlYXNvbnMvMS9lcGlzb2Rlcyc7XG4iLCJjb25zdCBjb21tZW50Q291bnRlciA9IChjb3VudENvbnRhaW5lciwgY29tbWVudENvbnRhaW5lcikgPT4ge1xuICBjb25zdCBjb3VudCA9IGNvbW1lbnRDb250YWluZXIuY2hpbGRFbGVtZW50Q291bnQ7XG4gIGNvdW50Q29udGFpbmVyLmlubmVyVGV4dCA9IGAoJHtjb3VudH0pYDtcbiAgcmV0dXJuIGNvdW50O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWVudENvdW50ZXI7XG4iLCJpbXBvcnQgeyBCQVNFX1VSTCB9IGZyb20gJy4vYXBpVXJscy5qcyc7XG5pbXBvcnQgY29tbWVudENvdW50ZXIgZnJvbSAnLi9jb21tZW50Q291bnRlci5qcyc7XG5pbXBvcnQgeyBtb2RhbENvbnRhaW5lciB9IGZyb20gJy4vZG9tU2VsZWN0b3IuanMnO1xuXG5jb25zdCBjcmVhdGVOZXdDb21tZW50ID0gYXN5bmMgKHVybCwgZGF0YSwgY29tbWVudHNDb250YWluZXIsIEZvcm0pID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2sgJiYgcmVzcG9uc2Uuc3RhdHVzICE9PSAyMDEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBmZXRjaENvbVVybCA9IGAke0JBU0VfVVJMfS9jb21tZW50cz9pdGVtX2lkPSR7ZGF0YS5pdGVtX2lkfWA7XG5cbiAgY29uc3QgY29tbWVudFJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZmV0Y2hDb21VcmwpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbW1lbnRSZXNwb25zZS5qc29uKCk7XG5cbiAgLy8gbWFudXB1bGF0ZSB0aGUgZG9tXG4gIGNvbnN0IGNvbW1lbnRUaXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNvbW1lbnRUaXRlLmNsYXNzTmFtZSA9ICdjb21tZW50LXRpdGxlJztcbiAgY29uc3QgY29tbWVudEhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2gzJyk7XG4gIGNvbW1lbnRIZWFkZXIuY2xhc3NOYW1lID0gJ2NvbW1lbnQtaGVhZGVyJztcbiAgY29tbWVudEhlYWRlci5pbm5lckhUTUwgPSAnQ29tbWVudHMnO1xuICBjb25zdCBjb21tZW50Q291bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gIGNvbW1lbnRDb3VudC5pZCA9ICdzaG93X2NvbW1lbnRfY291bnQnO1xuICBjb21tZW50Q291bnQuaW5uZXJUZXh0ID0gMDtcblxuICBjb21tZW50VGl0ZS5hcHBlbmQoY29tbWVudEhlYWRlciwgY29tbWVudENvdW50KTtcblxuICBjb25zdCBjb21tZW50R3JvdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO1xuICBjb21tZW50R3JvdXAuY2xhc3NOYW1lID0gJ2NvbW1lbnQtZ291cCc7XG5cbiAgbGV0IGNvbW1lbnRJdGVtcyA9ICcnO1xuXG4gIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgIHJlc3VsdC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb21tZW50SXRlbXMgKz0gYDxsaSBjbGFzcz0nY29tbWVudC1pdGVtJz5cbiAgICAgIDxkaXYgY2xhc3M9J3VzZXItaW5mbyc+XG4gICAgICAgIDxkaXYgY2xhc3M9J3VzZXItYXZhdGFyJz5cbiAgICAgICAgICA8aW1nIHNyYz0nLi9hc3NldHMvaW1nL3VzZXIucG5nJyBhbHQ9JyR7aXRlbS51c2VybmFtZX0nLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxoNCBjbGFzcz0ndXNlci1uYW1lJz4ke2l0ZW0udXNlcm5hbWV9PC9oND5cbiAgICAgICAgPHNwYW4gY2xhc3M9J3N1Ym1pdC1kYXRlJz4ke2l0ZW0uY3JlYXRpb25fZGF0ZX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIGNsYXNzPSd1c2VyLWRhdGEnPiR7aXRlbS5jb21tZW50fTwvcD5cbiAgICA8L2xpPmA7XG4gICAgfSk7XG4gIH1cblxuICBjb21tZW50R3JvdXAuaW5uZXJIVE1MID0gY29tbWVudEl0ZW1zOyAvLyBhcHBlbmQgY29tbWVudCBsaXN0XG4gIGNvbW1lbnRzQ29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xuXG4gIGNvbW1lbnRDb3VudGVyKGNvbW1lbnRDb3VudCwgY29tbWVudEdyb3VwKTtcblxuICBjb21tZW50c0NvbnRhaW5lci5hcHBlbmQoY29tbWVudFRpdGUsIGNvbW1lbnRHcm91cCk7XG5cbiAgRm9ybS5lbGVtZW50cy5uYW1lLnZhbHVlID0gJyc7XG4gIEZvcm0uZWxlbWVudHMuaW5zaWdodC52YWx1ZSA9ICcnO1xufTtcblxuY29uc3QgcmVuZGVyID0gKGRhdGEpID0+IHtcbiAgLy8gbW9kYWwgY2FyZFxuICBjb25zdCBtb2RhbENhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbW9kYWxDYXJkLmNsYXNzTmFtZSA9ICdtb2RhbC1jYXJkJztcblxuICAvLyBidXR0b25cbiAgY29uc3QgYnRuQ3Jvc3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgYnRuQ3Jvc3MuY2xhc3NOYW1lID0gJ2J0bi1jcm9zcyc7XG4gIGJ0bkNyb3NzLmlubmVySFRNTCA9ICc8aW1nIHNyYz1cIi4vYXNzZXRzL2ltZy9pY29uczgtbXVsdGlwbHktMjQucG5nXCIgYWx0PVwiWFwiIC8+JztcbiAgYnRuQ3Jvc3MuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgbW9kYWxDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpO1xuICB9KTtcblxuICAvLyBjYXJkIGltZ1xuICBjb25zdCBjYXJkSW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNhcmRJbWcuY2xhc3NOYW1lID0gJ2NhcmQtaW1nJztcbiAgY2FyZEltZy5pbm5lckhUTUwgPSBgPGltZ1xuICBzcmM9XCIke2RhdGEuaW1hZ2Uub3JpZ2luYWx9XCJcbiAgYWx0PVwiJHtkYXRhLm5hbWV9XCJcbi8+YDtcblxuICAvLyBjYXJkIHRpdGxlXG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDInKTtcbiAgdGl0bGUuY2xhc3NOYW1lID0gJ2NhcmQtdGl0bGUnO1xuICB0aXRsZS5pbm5lclRleHQgPSBkYXRhLm5hbWU7XG4gIC8vIGNhcmQgZGVzXG4gIGNvbnN0IGRlcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkZXMuY2xhc3NOYW1lID0gJ2NhcmQtZGVzJztcbiAgZGVzLmlubmVySFRNTCA9IGRhdGEuc3VtbWFyeTtcblxuICAvLyBjYXJkIHNwZWMgZ3JvdXBcbiAgY29uc3QgY2FyZFNwZWMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgY2FyZFNwZWMuY2xhc3NOYW1lID0gJ2NhcmQtc3BlYy1ncm91cCc7XG4gIGNhcmRTcGVjLmlubmVySFRNTCA9IGA8dWwgY2xhc3M9XCJjYXJkLXNwZWNcIj5cbiAgPGxpIGNsYXNzPVwic3BlYy1pdGVtXCI+U2Vhc29uOiAke2RhdGEuc2Vhc29ufTwvbGk+XG4gIDxsaSBjbGFzcz1cInNwZWMtaXRlbVwiPkR1cmF0aW9uOiAke2RhdGEucnVudGltZX08L2xpPlxuPC91bD5cbjx1bCBjbGFzcz1cImNhcmQtc3BlY1wiPlxuICA8bGkgY2xhc3M9XCJzcGVjLWl0ZW1cIj5haXJkYXRlOiAke2RhdGEuYWlyZGF0ZX08L2xpPlxuICA8bGkgY2xhc3M9XCJzcGVjLWl0ZW1cIj5SYXRpbmc6ICR7ZGF0YS5yYXRpbmcuYXZlcmFnZX08L2xpPlxuPC91bD5gO1xuXG4gIGNvbnN0IGNvbW1lbnRTZWN0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNvbW1lbnRTZWN0aW9uLmNsYXNzTmFtZSA9ICdjb21tZW50LXNlY3Rpb24nO1xuXG4gIGNvbnN0IGNvbW1lbnRUaXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNvbW1lbnRUaXRlLmNsYXNzTmFtZSA9ICdjb21tZW50LXRpdGxlJztcbiAgY29uc3QgY29tbWVudEhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2gzJyk7XG4gIGNvbW1lbnRIZWFkZXIuY2xhc3NOYW1lID0gJ2NvbW1lbnQtaGVhZGVyJztcbiAgY29tbWVudEhlYWRlci5pbm5lckhUTUwgPSAnQ29tbWVudHMnO1xuICBjb25zdCBjb21tZW50Q291bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gIGNvbW1lbnRDb3VudC5pZCA9ICdzaG93X2NvbW1lbnRfY291bnQnO1xuICBjb21tZW50Q291bnQuaW5uZXJUZXh0ID0gMDtcblxuICBjb21tZW50VGl0ZS5hcHBlbmQoY29tbWVudEhlYWRlciwgY29tbWVudENvdW50KTtcblxuICBjb25zdCBjb21tZW50R3JvdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO1xuICBjb21tZW50R3JvdXAuY2xhc3NOYW1lID0gJ2NvbW1lbnQtZ291cCc7XG5cbiAgbGV0IGNvbW1lbnRJdGVtcyA9ICcnO1xuXG4gIGlmIChkYXRhLmNvbW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhLmNvbW1lbnRzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbW1lbnRJdGVtcyArPSBgPGxpIGNsYXNzPSdjb21tZW50LWl0ZW0nPlxuICAgICAgICA8ZGl2IGNsYXNzPSd1c2VyLWluZm8nPlxuICAgICAgICAgIDxkaXYgY2xhc3M9J3VzZXItYXZhdGFyJz5cbiAgICAgICAgICAgIDxpbWcgc3JjPScuL2Fzc2V0cy9pbWcvdXNlci5wbmcnIGFsdD0nJHtpdGVtLnVzZXJuYW1lfScvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxoNCBjbGFzcz0ndXNlci1uYW1lJz4ke2l0ZW0udXNlcm5hbWV9PC9oND5cbiAgICAgICAgICA8c3BhbiBjbGFzcz0nc3VibWl0LWRhdGUnPiR7aXRlbS5jcmVhdGlvbl9kYXRlfTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwIGNsYXNzPSd1c2VyLWRhdGEnPiR7aXRlbS5jb21tZW50fTwvcD5cbiAgICAgIDwvbGk+YDtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbW1lbnRHcm91cC5pbm5lckhUTUwgPSBjb21tZW50SXRlbXM7IC8vIGFwcGVuZCBjb21tZW50IGxpc3RcblxuICBjb21tZW50Q291bnRlcihjb21tZW50Q291bnQsIGNvbW1lbnRHcm91cCk7XG5cbiAgY29tbWVudFNlY3Rpb24uYXBwZW5kKGNvbW1lbnRUaXRlLCBjb21tZW50R3JvdXApO1xuXG4gIC8vIEFkZCBjb21tZW50XG4gIGNvbnN0IGNvbW1lbnRGb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNvbW1lbnRGb3JtLmNsYXNzTmFtZSA9ICdjb21tZW50LWZvcm0nO1xuICBjb25zdCBhZGRDb21tZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDMnKTtcbiAgYWRkQ29tbWVudC5jbGFzc05hbWUgPSAnY29tbWVudC10aXRsZSc7XG4gIGFkZENvbW1lbnQuaW5uZXJUZXh0ID0gJ0FkZCBhIGNvbW1lbnQnO1xuICBjb25zdCBGb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xuICBGb3JtLmlubmVySFRNTCA9IGBcbjxpbnB1dCB0eXBlPVwidGV4dFwiICBuYW1lPVwibmFtZVwiIGlkPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwiWW91ciBuYW1lXCIgbWF4bGVuZ3RoPVwiMTBcIiByZXF1aXJlZD5cbjx0ZXh0YXJlYSBpZD1cImluc2lnaHRcIiBuYW1lPVwiaW5zaWdodFwiIHBsYWNlaG9sZGVyPVwiWW91ciBpbnNpZ2h0c1wiPjwvdGV4dGFyZWE+XG48YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBpZD1cInN1Ym1pdEJ0blwiPlN1Ym1pdDwvYnV0dG9uPmA7XG5cbiAgY29tbWVudEZvcm0uYXBwZW5kKGFkZENvbW1lbnQsIEZvcm0pO1xuXG4gIEZvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgYXN5bmMgKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgbmFtZSA9IEZvcm0uZWxlbWVudHMubmFtZS52YWx1ZTtcbiAgICBjb25zdCBpbnNpZ2h0ID0gRm9ybS5lbGVtZW50cy5pbnNpZ2h0LnZhbHVlO1xuICAgIGNvbnN0IGNvbW1lbnREYXRhID0ge1xuICAgICAgaXRlbV9pZDogZGF0YS5pZCxcbiAgICAgIHVzZXJuYW1lOiBuYW1lLFxuICAgICAgY29tbWVudDogaW5zaWdodCxcbiAgICB9O1xuICAgIGNvbnN0IHVybCA9IGAke0JBU0VfVVJMfS9jb21tZW50c2A7XG4gICAgY3JlYXRlTmV3Q29tbWVudCh1cmwsIGNvbW1lbnREYXRhLCBjb21tZW50U2VjdGlvbiwgRm9ybSk7XG4gIH0pO1xuICAvLyBhcHBlbmQgY2hpbGQgZWxlbWVudHMgaW4gY2FyZE1vZGFsXG4gIG1vZGFsQ2FyZC5hcHBlbmQoXG4gICAgYnRuQ3Jvc3MsXG4gICAgY2FyZEltZyxcbiAgICB0aXRsZSxcbiAgICBkZXMsXG4gICAgY2FyZFNwZWMsXG4gICAgY29tbWVudFNlY3Rpb24sXG4gICAgY29tbWVudEZvcm0sXG4gICk7XG5cbiAgbW9kYWxDb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gIG1vZGFsQ29udGFpbmVyLmFwcGVuZChtb2RhbENhcmQpOyAvLyBhcHBlbmQgY2FyZE1vZGFsXG59O1xuXG5jb25zdCBmZXRjaFNpbmdsZVNob3dDb21tZW50ID0gYXN5bmMgKGUpID0+IHtcbiAgbW9kYWxDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnc2hvdycpO1xuICBjb25zdCB7IGlkIH0gPSBlLnRhcmdldC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIGNvbnN0IHVybCA9IGBodHRwczovL2FwaS50dm1hemUuY29tL2VwaXNvZGVzLyR7aWR9YDtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgY29uc3QgY29tbWVudFJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7QkFTRV9VUkx9L2NvbW1lbnRzP2l0ZW1faWQ9JHtpZH1gKTtcblxuICBsZXQgZmlsdGVyUmVzdWx0ID0geyAuLi5yZXN1bHQgfTtcblxuICBjb25zdCBjb21tZW50UmVzdWx0ID0gYXdhaXQgY29tbWVudFJlc3BvbnNlLmpzb24oKTtcbiAgaWYgKGNvbW1lbnRSZXN1bHQgJiYgIWNvbW1lbnRSZXN1bHQuZXJyb3IpIHtcbiAgICBmaWx0ZXJSZXN1bHQgPSB7IC4uLmZpbHRlclJlc3VsdCwgY29tbWVudHM6IGNvbW1lbnRSZXN1bHQgfTtcbiAgfSBlbHNlIHtcbiAgICBmaWx0ZXJSZXN1bHQgPSB7IC4uLmZpbHRlclJlc3VsdCwgY29tbWVudHM6IFtdIH07XG4gIH1cblxuICByZW5kZXIoZmlsdGVyUmVzdWx0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZldGNoU2luZ2xlU2hvd0NvbW1lbnQ7XG4iLCJjb25zdCByZXNlcnZhdGlvbkNvdW50ZXIgPSAoY291bnRDb250YWluZXIsIHJlc2VydmF0aW9uQ29udGFpbmVyKSA9PiB7XG4gIGNvbnN0IGNvdW50ID0gcmVzZXJ2YXRpb25Db250YWluZXIuY2hpbGRFbGVtZW50Q291bnQ7XG4gIGNvdW50Q29udGFpbmVyLmlubmVyVGV4dCA9IGAoJHtjb3VudH0pYDtcbiAgcmV0dXJuIGNvdW50O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVzZXJ2YXRpb25Db3VudGVyO1xuIiwiaW1wb3J0IHsgQkFTRV9VUkwgfSBmcm9tICcuL2FwaVVybHMuanMnO1xuaW1wb3J0IHsgbW9kYWxDb250YWluZXIgfSBmcm9tICcuL2RvbVNlbGVjdG9yLmpzJztcbmltcG9ydCByZXNlcnZhdGlvbkNvdW50ZXIgZnJvbSAnLi9yZXNlcnZhdGlvbkNvdW50ZXIuanMnO1xuXG5jb25zdCBjcmVhdGVOZXdSZXNlcnZhdGlvbiA9IGFzeW5jICh1cmwsIGRhdGEsIHJlc2VydmF0aW9uQ29udGFpbmVyLCBGb3JtKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rICYmIHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZmV0Y2hDb21VcmwgPSBgJHtCQVNFX1VSTH0vcmVzZXJ2YXRpb25zP2l0ZW1faWQ9JHtkYXRhLml0ZW1faWR9YDtcblxuICBjb25zdCByZXNlcnZhdGlvblJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZmV0Y2hDb21VcmwpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc2VydmF0aW9uUmVzcG9uc2UuanNvbigpO1xuXG4gIC8vIG1hbnVwdWxhdGUgdGhlIGRvbVxuICBjb25zdCByZXNlcnZhdGlvbkhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2gzJyk7XG4gIHJlc2VydmF0aW9uSGVhZGVyLmNsYXNzTmFtZSA9ICdyZXNlcnZhdGlvbi10aXRsZSc7XG4gIHJlc2VydmF0aW9uSGVhZGVyLmlubmVySFRNTCA9IFwiUmVzZXJ2YXRpb25zIDxzcGFuIGlkPSdzaG93X2NvbW1lbnRfY291bnQnPigwKTwvc3Bhbj5cIjtcblxuICBjb25zdCByZXNlcnZhdGlvbkdyb3VwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndWwnKTtcbiAgcmVzZXJ2YXRpb25Hcm91cC5jbGFzc05hbWUgPSAncmVzZXJ2YXRpb24tZ3JvdXAnO1xuXG4gIGxldCByZXNlcnZhdGlvbkl0ZW1zID0gJyc7XG5cbiAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgcmVzdWx0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHJlc2VydmF0aW9uSXRlbXMgKz0gYDxsaSBjbGFzcz0ncmVzZXJ2YXRpb24taXRlbSc+XG4gICAgICA8ZGl2IGNsYXNzPSd1c2VyLWluZm8nPlxuICAgICAgICA8ZGl2IGNsYXNzPSd1c2VyLWF2YXRhcic+XG4gICAgICAgICAgPGltZyBzcmM9Jy4vYXNzZXRzL2ltZy91c2VyLnBuZycgYWx0PScke2l0ZW0udXNlcm5hbWV9Jy8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aDQgY2xhc3M9J3VzZXItbmFtZSc+JHtpdGVtLnVzZXJuYW1lfTwvaDQ+XG4gICAgICAgIDxzcGFuIGNsYXNzPSdzdWJtaXQtZGF0ZSc+JHtpdGVtLmRhdGVfc3RhcnR9IC0gJHtpdGVtLmRhdGVfZW5kfTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+YDtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2VydmF0aW9uR3JvdXAuaW5uZXJIVE1MID0gcmVzZXJ2YXRpb25JdGVtczsgLy8gYXBwZW5kIHJlc2VydmF0aW9uIGxpc3RcbiAgcmVzZXJ2YXRpb25Db250YWluZXIuaW5uZXJIVE1MID0gJyc7XG5cbiAgcmVzZXJ2YXRpb25Db3VudGVyKHJlc2VydmF0aW9uSGVhZGVyLmNoaWxkcmVuWzBdLCByZXNlcnZhdGlvbkdyb3VwKTtcblxuICByZXNlcnZhdGlvbkNvbnRhaW5lci5hcHBlbmQocmVzZXJ2YXRpb25IZWFkZXIsIHJlc2VydmF0aW9uR3JvdXApO1xuXG4gIEZvcm0uZWxlbWVudHMubmFtZS52YWx1ZSA9ICcnO1xuICBGb3JtLmVsZW1lbnRzLnN0YXJ0X2RhdGUudmFsdWUgPSAnJztcbiAgRm9ybS5lbGVtZW50cy5lbmRfZGF0ZS52YWx1ZSA9ICcnO1xufTtcblxuY29uc3QgcmVuZGVyID0gKGRhdGEpID0+IHtcbiAgLy8gbW9kYWwgY2FyZFxuICBjb25zdCBtb2RhbENhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbW9kYWxDYXJkLmNsYXNzTmFtZSA9ICdtb2RhbC1jYXJkJztcblxuICAvLyBidXR0b25cbiAgY29uc3QgYnRuQ3Jvc3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgYnRuQ3Jvc3MuY2xhc3NOYW1lID0gJ2J0bi1jcm9zcyc7XG4gIGJ0bkNyb3NzLmlubmVySFRNTCA9ICc8aW1nIHNyYz1cIi4vYXNzZXRzL2ltZy9pY29uczgtbXVsdGlwbHktMjQucG5nXCIgYWx0PVwiWFwiIC8+JztcbiAgYnRuQ3Jvc3MuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgbW9kYWxDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpO1xuICB9KTtcblxuICAvLyBjYXJkIGltZ1xuICBjb25zdCBjYXJkSW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNhcmRJbWcuY2xhc3NOYW1lID0gJ2NhcmQtaW1nJztcbiAgY2FyZEltZy5pbm5lckhUTUwgPSBgPGltZ1xuICBzcmM9XCIke2RhdGEuaW1hZ2Uub3JpZ2luYWx9XCJcbiAgYWx0PVwiJHtkYXRhLm5hbWV9XCJcbi8+YDtcblxuICAvLyBjYXJkIHRpdGxlXG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDInKTtcbiAgdGl0bGUuY2xhc3NOYW1lID0gJ2NhcmQtdGl0bGUnO1xuICB0aXRsZS5pbm5lclRleHQgPSBkYXRhLm5hbWU7XG5cbiAgLy8gY2FyZCBkZXNcbiAgY29uc3QgZGVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGRlcy5jbGFzc05hbWUgPSAnY2FyZC1kZXMnO1xuICBkZXMuaW5uZXJIVE1MID0gZGF0YS5zdW1tYXJ5O1xuXG4gIC8vIGNhcmQgc3BlYyBncm91cFxuICBjb25zdCBjYXJkU3BlYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBjYXJkU3BlYy5jbGFzc05hbWUgPSAnY2FyZC1zcGVjLWdyb3VwJztcbiAgY2FyZFNwZWMuaW5uZXJIVE1MID0gYDx1bCBjbGFzcz1cImNhcmQtc3BlY1wiPlxuICA8bGkgY2xhc3M9XCJzcGVjLWl0ZW1cIj5TZWFzb246ICR7ZGF0YS5zZWFzb259PC9saT5cbiAgPGxpIGNsYXNzPVwic3BlYy1pdGVtXCI+RHVyYXRpb246ICR7ZGF0YS5ydW50aW1lfTwvbGk+XG48L3VsPlxuPHVsIGNsYXNzPVwiY2FyZC1zcGVjXCI+XG4gIDxsaSBjbGFzcz1cInNwZWMtaXRlbVwiPmFpcmRhdGU6ICR7ZGF0YS5haXJkYXRlfTwvbGk+XG4gIDxsaSBjbGFzcz1cInNwZWMtaXRlbVwiPlJhdGluZzogJHtkYXRhLnJhdGluZy5hdmVyYWdlfTwvbGk+XG48L3VsPmA7XG5cbiAgY29uc3QgcmVzZXJ2YXRpb25TZWN0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHJlc2VydmF0aW9uU2VjdGlvbi5jbGFzc05hbWUgPSAncmVzZXJ2YXRpb24tc2VjdGlvbic7XG5cbiAgY29uc3QgcmVzZXJ2YXRpb25IZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMycpO1xuICByZXNlcnZhdGlvbkhlYWRlci5jbGFzc05hbWUgPSAncmVzZXJ2YXRpb24tdGl0bGUnO1xuICByZXNlcnZhdGlvbkhlYWRlci5pbm5lckhUTUwgPSBcIlJlc2VydmF0aW9ucyA8c3BhbiBpZD0nc2hvd19jb21tZW50X2NvdW50Jz4oMCk8L3NwYW4+XCI7XG5cbiAgY29uc3QgcmVzZXJ2YXRpb25Hcm91cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7XG4gIHJlc2VydmF0aW9uR3JvdXAuY2xhc3NOYW1lID0gJ3Jlc2VydmF0aW9uLWdyb3VwJztcblxuICBsZXQgcmVzZXJ2YXRpb25JdGVtcyA9ICcnO1xuXG4gIGlmIChkYXRhLnJlc2VydmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgZGF0YS5yZXNlcnZhdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgcmVzZXJ2YXRpb25JdGVtcyArPSBgPGxpIGNsYXNzPSdyZXNlcnZhdGlvbi1pdGVtJz5cbiAgICAgIDxkaXYgY2xhc3M9J3VzZXItaW5mbyc+XG4gICAgICAgIDxkaXYgY2xhc3M9J3VzZXItYXZhdGFyJz5cbiAgICAgICAgICA8aW1nIHNyYz0nLi9hc3NldHMvaW1nL3VzZXIucG5nJyBhbHQ9JyR7aXRlbS51c2VybmFtZX0nLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxoNCBjbGFzcz0ndXNlci1uYW1lJz4ke2l0ZW0udXNlcm5hbWV9PC9oND5cbiAgICAgICAgPHNwYW4gY2xhc3M9J3N1Ym1pdC1kYXRlJz4ke2l0ZW0uZGF0ZV9zdGFydH0gLSAke2l0ZW0uZGF0ZV9lbmR9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9saT5gO1xuICAgIH0pO1xuICB9XG5cbiAgcmVzZXJ2YXRpb25Hcm91cC5pbm5lckhUTUwgPSByZXNlcnZhdGlvbkl0ZW1zOyAvLyBhcHBlbmQgcmVzZXJ2YXRpb24gbGlzdFxuXG4gIHJlc2VydmF0aW9uQ291bnRlcihyZXNlcnZhdGlvbkhlYWRlci5jaGlsZHJlblswXSwgcmVzZXJ2YXRpb25Hcm91cCk7XG5cbiAgcmVzZXJ2YXRpb25TZWN0aW9uLmFwcGVuZChyZXNlcnZhdGlvbkhlYWRlciwgcmVzZXJ2YXRpb25Hcm91cCk7XG5cbiAgLy8gQWRkIGNvbW1lbnRcbiAgY29uc3QgcmVzZXJ2YXRpb25Gb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHJlc2VydmF0aW9uRm9ybS5jbGFzc05hbWUgPSAncmVzZXJ2YXRpb24tZm9ybSc7XG4gIGNvbnN0IGFkZFJlc2VydmF0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDMnKTtcbiAgYWRkUmVzZXJ2YXRpb24uY2xhc3NOYW1lID0gJ3Jlc2VydmF0aW9uLXRpdGxlJztcbiAgYWRkUmVzZXJ2YXRpb24uaW5uZXJUZXh0ID0gJ0FkZCBhIFJlc2VydmF0aW9uJztcbiAgY29uc3QgRm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgRm9ybS5pbm5lckhUTUwgPSBgXG4gIDxpbnB1dCB0eXBlPVwidGV4dFwiICBuYW1lPVwibmFtZVwiIGlkPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwiWW91ciBuYW1lXCIgbWF4bGVuZ3RoPVwiMTBcIiByZXF1aXJlZD5cbiAgPGxhYmVsIGZvcj0nc3RhcnRfZGF0ZSc+QWRkIHlvdXIgc3RhcnQgZGF0ZSBiZWxvdzwvbGFiZWw+XG4gIDxpbnB1dCB0eXBlPVwiZGF0ZVwiICBuYW1lPVwic3RhcnRfZGF0ZVwiIGlkPVwic3RhcnRfZGF0ZVwiIHBsYWNlaG9sZGVyPVwiQWRkIHlvdXIgc3RhcnQgZGF0ZSBoZXJlLlwiIHJlcXVpcmVkPlxuICA8bGFiZWwgZm9yPSdlbmRfZGF0ZSc+QWRkIHlvdXIgZW5kIGRhdGUgYmVsb3c8L2xhYmVsPlxuICA8aW5wdXQgdHlwZT1cImRhdGVcIiAgbmFtZT1cImVuZF9kYXRlXCIgaWQ9XCJlbmRfZGF0ZVwiIHBsYWNlaG9sZGVyPVwiQWRkIHlvdXIgZW5kIGRhdGUgaGVyZS5cIiByZXF1aXJlZD5cbiAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgaWQ9XCJzdWJtaXRCdG5cIj5SZXNlcnZlPC9idXR0b24+YDtcblxuICByZXNlcnZhdGlvbkZvcm0uYXBwZW5kKGFkZFJlc2VydmF0aW9uLCBGb3JtKTtcblxuICBGb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGFzeW5jIChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IG5hbWUgPSBGb3JtLmVsZW1lbnRzLm5hbWUudmFsdWU7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gRm9ybS5lbGVtZW50cy5zdGFydF9kYXRlLnZhbHVlO1xuICAgIGNvbnN0IGVuZERhdGUgPSBGb3JtLmVsZW1lbnRzLmVuZF9kYXRlLnZhbHVlO1xuICAgIGNvbnN0IHJlc2VydmVEYXRhID0ge1xuICAgICAgaXRlbV9pZDogZGF0YS5pZCxcbiAgICAgIHVzZXJuYW1lOiBuYW1lLFxuICAgICAgZGF0ZV9zdGFydDogc3RhcnREYXRlLFxuICAgICAgZGF0ZV9lbmQ6IGVuZERhdGUsXG4gICAgfTtcbiAgICBjb25zdCB1cmwgPSBgJHtCQVNFX1VSTH0vcmVzZXJ2YXRpb25zL2A7XG4gICAgY3JlYXRlTmV3UmVzZXJ2YXRpb24odXJsLCByZXNlcnZlRGF0YSwgcmVzZXJ2YXRpb25TZWN0aW9uLCBGb3JtKTtcbiAgfSk7XG5cbiAgLy8gYXBwZW5kIGNoaWxkIGVsZW1lbnRzIGluIGNhcmRNb2RhbFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICBtb2RhbENhcmQuYXBwZW5kKFxuICAgIGJ0bkNyb3NzLFxuICAgIGNhcmRJbWcsXG4gICAgdGl0bGUsXG4gICAgZGVzLFxuICAgIGNhcmRTcGVjLFxuICAgIHJlc2VydmF0aW9uU2VjdGlvbixcbiAgICByZXNlcnZhdGlvbkZvcm0sXG4gICk7XG5cbiAgbW9kYWxDb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gIG1vZGFsQ29udGFpbmVyLmFwcGVuZChtb2RhbENhcmQpOyAvLyBhcHBlbmQgY2FyZE1vZGFsXG59O1xuXG5jb25zdCBmZXRjaFNpbmdsZVNob3cgPSBhc3luYyAoZSkgPT4ge1xuICBtb2RhbENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG4gIGNvbnN0IHsgaWQgfSA9IGUudGFyZ2V0LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgY29uc3QgdXJsID0gYGh0dHBzOi8vYXBpLnR2bWF6ZS5jb20vZXBpc29kZXMvJHtpZH1gO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICBjb25zdCByZXNlcnZhdGlvblJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgYCR7QkFTRV9VUkx9L3Jlc2VydmF0aW9ucz9pdGVtX2lkPSR7aWR9YCxcbiAgKTtcblxuICBsZXQgZmlsdGVyUmVzdWx0ID0geyAuLi5yZXN1bHQgfTtcblxuICBjb25zdCByZXNlcnZhdGlvblJlc3VsdCA9IGF3YWl0IHJlc2VydmF0aW9uUmVzcG9uc2UuanNvbigpO1xuICBpZiAocmVzZXJ2YXRpb25SZXN1bHQgJiYgIXJlc2VydmF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgZmlsdGVyUmVzdWx0ID0geyAuLi5maWx0ZXJSZXN1bHQsIHJlc2VydmF0aW9uczogcmVzZXJ2YXRpb25SZXN1bHQgfTtcbiAgfSBlbHNlIHtcbiAgICBmaWx0ZXJSZXN1bHQgPSB7IC4uLmZpbHRlclJlc3VsdCwgcmVzZXJ2YXRpb25zOiBbXSB9O1xuICB9XG5cbiAgcmVuZGVyKGZpbHRlclJlc3VsdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmZXRjaFNpbmdsZVNob3c7XG4iLCJpbXBvcnQgeyBpdGVtQ291bnRDb250YWluZXIsIGxpc3RJdGVtc0NvbnRhaW5lciB9IGZyb20gJy4vZG9tU2VsZWN0b3IuanMnO1xuaW1wb3J0IGZldGNoU2luZ2xlU2hvd0NvbW1lbnQgZnJvbSAnLi9wb3B1cENvbW1lbnQuanMnO1xuaW1wb3J0IGZldGNoU2luZ2xlU2hvdyBmcm9tICcuL3BvcHVwUmVzZXJ2YXRpb24uanMnO1xuaW1wb3J0IHsgQkFTRV9VUkwsIE1PVklFX0FQSSB9IGZyb20gJy4vYXBpVXJscy5qcyc7XG5pbXBvcnQgaXRlbUNvdW50ZXIgZnJvbSAnLi9pdGVtQ291bnRlci5qcyc7XG5cbi8vIGNyZWF0ZU5ldyBsaWtlXG5jb25zdCBjcmVhdGVOZXdMaWtlID0gYXN5bmMgKGlkLCBsaWtlQ291bnQsIGJ0bkxpa2UpID0+IHtcbiAgYnRuTGlrZS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJycpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke0JBU0VfVVJMfS9saWtlc2AsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBpdGVtX2lkOiBpZCB9KSxcbiAgfSk7XG5cbiAgaWYgKCFyZXNwb25zZS5vayAmJiByZXNwb25zZS5zdGF0dXMgIT09IDIwMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlTGlrZXMgPSBhd2FpdCBmZXRjaChgJHtCQVNFX1VSTH0vbGlrZXNgKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2VMaWtlcy5qc29uKCk7XG4gIGNvbnN0IGxpa2VEYXRhID0gcmVzdWx0LmZpbmQoKGl0ZW0pID0+IGl0ZW0uaXRlbV9pZCA9PT0gaWQpO1xuICBpZiAobGlrZURhdGEpIHtcbiAgICBsaWtlQ291bnQuaW5uZXJUZXh0ID0gbGlrZURhdGEubGlrZXMgPiAxID8gYCR7bGlrZURhdGEubGlrZXN9IGxpa2VzYCA6IGAke2xpa2VEYXRhLmxpa2VzfSBsaWtlYDtcbiAgICBidG5MaWtlLmlubmVySFRNTCA9IGA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJpc28tODg1OS0xXCI/PlxuICAgIDwhLS0gVXBsb2FkZWQgdG86IFNWRyBSZXBvLCB3d3cuc3ZncmVwby5jb20sIEdlbmVyYXRvcjogU1ZHIFJlcG8gTWl4ZXIgVG9vbHMgLS0+XG4gICAgPHN2ZyBmaWxsPVwiI2ZmN2IwMFwiIGhlaWdodD1cIjIycHhcIiB3aWR0aD1cIjIycHhcIiB2ZXJzaW9uPVwiMS4xXCIgaWQ9XCJMYXllcl8xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIFxuICAgICAgIHZpZXdCb3g9XCIwIDAgNDU1IDQ1NVwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+XG4gICAgPHBhdGggZD1cIk0zMjYuNjMyLDEwLjM0NmMtMzguNzMzLDAtNzQuOTkxLDE3LjUzNy05OS4xMzIsNDYuOTJjLTI0LjE0MS0yOS4zODMtNjAuMzk5LTQ2LjkyLTk5LjEzMi00Ni45MlxuICAgICAgQzU3LjU4NiwxMC4zNDYsMCw2Ny45MzEsMCwxMzguNzE0YzAsNTUuNDI2LDMzLjA0OSwxMTkuNTM1LDk4LjIzLDE5MC41NDZjNTAuMTYyLDU0LjY0OSwxMDQuNzI5LDk2Ljk2LDEyMC4yNTcsMTA4LjYyNmw5LjAxLDYuNzY5XG4gICAgICBsOS4wMDktNi43NjhjMTUuNTMtMTEuNjY3LDcwLjA5OS01My45NzksMTIwLjI2LTEwOC42MjVDNDIxLjk1LDI1OC4yNTEsNDU1LDE5NC4xNDEsNDU1LDEzOC43MTRcbiAgICAgIEM0NTUsNjcuOTMxLDM5Ny40MTQsMTAuMzQ2LDMyNi42MzIsMTAuMzQ2elwiLz5cbiAgICA8L3N2Zz5gO1xuICB9XG59O1xuXG4vLyByZW5kZXIgdGhlIGl0ZW0gbGlzdFxuY29uc3QgcmVuZGVyID0gKGRhdGEpID0+IHtcbiAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xuICAgIGxpc3RJdGVtc0NvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcblxuICAgIGRhdGEuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgICBpdGVtLmlkID0gaS5pZDtcbiAgICAgIGl0ZW0uY2xhc3NOYW1lID0gJ3Nob3ctaXRlbSc7XG5cbiAgICAgIC8vIGNyZWF0ZSBzaG8gSW1nIGVsZW1lbnRcbiAgICAgIGNvbnN0IHNob3dJbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHNob3dJbWcuY2xhc3NOYW1lID0gJ3Nob3ctaXRlbS1pbWcnO1xuICAgICAgc2hvd0ltZy5pbm5lckhUTUwgPSBgPGltZyBzcmM9JyR7aS5pbWFnZS5vcmlnaW5hbH0nPmA7XG5cbiAgICAgIC8vIGNyZWF0ZSBzaG93IGluZm9cbiAgICAgIGNvbnN0IHNob3dJbmZvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBzaG93SW5mby5jbGFzc05hbWUgPSAnc2hvdy1pbmZvJztcblxuICAgICAgLy8gY3JlYXRlIHRpbGUgZm9yIHNob3cgaW5mb1xuICAgICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMycpO1xuICAgICAgdGl0bGUuY2xhc3NOYW1lID0gJ3Nob3ctdGl0bGUnO1xuICAgICAgdGl0bGUuaW5uZXJUZXh0ID0gaS5uYW1lO1xuXG4gICAgICAvLyBsaWtlIGFjdGlvblxuICAgICAgY29uc3Qgc2hvd0xpa2VBY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHNob3dMaWtlQWN0aW9uLmNsYXNzTmFtZSA9ICdzaHdvLWxpa2UtYWN0aW9uJztcblxuICAgICAgLy8gbGlrZSBidXR0b25cbiAgICAgIGNvbnN0IGJ0bkxpa2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgIGJ0bkxpa2UuY2xhc3NOYW1lID0gJ2J0bi1saWtlJztcbiAgICAgIGJ0bkxpa2UuaW5uZXJIVE1MID0gYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cImlzby04ODU5LTFcIj8+XG4gICAgICA8IS0tIFVwbG9hZGVkIHRvOiBTVkcgUmVwbywgd3d3LnN2Z3JlcG8uY29tLCBHZW5lcmF0b3I6IFNWRyBSZXBvIE1peGVyIFRvb2xzIC0tPlxuICAgICAgPHN2ZyBmaWxsPVwiI2ZmN2IwMFwiIGhlaWdodD1cIjIycHhcIiB3aWR0aD1cIjIycHhcIiB2ZXJzaW9uPVwiMS4xXCIgaWQ9XCJMYXllcl8xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIFxuICAgICAgICAgdmlld0JveD1cIjAgMCA0NTUgNDU1XCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIj5cbiAgICAgIDxwYXRoIGQ9XCJNMzI2LjYzMiwxMC4zNDZjLTM4LjczMywwLTc0Ljk5MSwxNy41MzctOTkuMTMyLDQ2LjkyYy0yNC4xNDEtMjkuMzg0LTYwLjM5OC00Ni45Mi05OS4xMzItNDYuOTJcbiAgICAgICAgQzU3LjU4NiwxMC4zNDYsMCw2Ny45MzEsMCwxMzguNzE0YzAsNTUuNDI2LDMzLjA1LDExOS41MzUsOTguMjMsMTkwLjU0NmM1MC4xNjEsNTQuNjQ3LDEwNC43MjgsOTYuOTU5LDEyMC4yNTcsMTA4LjYyNmw5LjAxLDYuNzY5XG4gICAgICAgIGw5LjAxLTYuNzY4YzE1LjUyOS0xMS42NjcsNzAuMDk4LTUzLjk3OCwxMjAuMjYtMTA4LjYyNUM0MjEuOTQ5LDI1OC4yNTEsNDU1LDE5NC4xNDEsNDU1LDEzOC43MTRcbiAgICAgICAgQzQ1NSw2Ny45MzEsMzk3LjQxNCwxMC4zNDYsMzI2LjYzMiwxMC4zNDZ6IE0zMzQuNjY2LDMwOC45NzRjLTQxLjI1OSw0NC45NDgtODUuNjQ4LDgxLjI4My0xMDcuMTY5LDk4LjAyOVxuICAgICAgICBjLTIxLjUyLTE2Ljc0Ni02NS45MDctNTMuMDgyLTEwNy4xNjYtOTguMDNDNjEuMjM2LDI0NC41OTIsMzAsMTg1LjcxNywzMCwxMzguNzE0YzAtNTQuMjQsNDQuMTI4LTk4LjM2OCw5OC4zNjgtOTguMzY4XG4gICAgICAgIGMzNS42OTQsMCw2OC42NTIsMTkuNDU0LDg2LjAxMyw1MC43NzFsMTMuMTE5LDIzLjY2NmwxMy4xMTktMjMuNjY2YzE3LjM2LTMxLjMxNiw1MC4zMTgtNTAuNzcxLDg2LjAxMy01MC43NzFcbiAgICAgICAgYzU0LjI0LDAsOTguMzY4LDQ0LjEyNyw5OC4zNjgsOTguMzY4QzQyNSwxODUuNzE5LDM5My43NjMsMjQ0LjU5NCwzMzQuNjY2LDMwOC45NzR6XCIvPlxuICAgICAgPC9zdmc+YDtcblxuICAgICAgLy8gbGlrZSBjb3VudFxuICAgICAgY29uc3QgbGlrZUNvdW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgaWYgKGkubGlrZXMgPiAxKSB7XG4gICAgICAgIGxpa2VDb3VudC5pbm5lclRleHQgPSBgJHtpLmxpa2VzfSBsaWtlc2A7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaWtlQ291bnQuaW5uZXJIVE1MID0gYCR7aS5saWtlc30gbGlrZWA7XG4gICAgICB9XG5cbiAgICAgIC8vIGJ0biBsaWtlIGV2ZW50IHRvIGNyZWF0ZSBuZXcgbGlrZVxuICAgICAgYnRuTGlrZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgY3JlYXRlTmV3TGlrZShpLmlkLCBsaWtlQ291bnQsIGJ0bkxpa2UpO1xuICAgICAgfSk7XG5cbiAgICAgIHNob3dMaWtlQWN0aW9uLmFwcGVuZChidG5MaWtlLCBsaWtlQ291bnQpOyAvLyBhcHBlbmQgbGlrZSBhY3Rpb25zIGNoaWxkIGVsZW1lbnQuXG5cbiAgICAgIHNob3dJbmZvLmFwcGVuZCh0aXRsZSwgc2hvd0xpa2VBY3Rpb24pOyAvLyBhcHBlbmQgaW4gc2hvd0luZm9cblxuICAgICAgLy8gc2hvdyBhY3Rpb25cbiAgICAgIGNvbnN0IHNob3dBY3Rpb25zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBzaG93QWN0aW9ucy5jbGFzc05hbWUgPSAnc2hvdy1hY3Rpb25zJztcblxuICAgICAgLy8gY3JlYXRlIGNoaWxkIGJ0blxuICAgICAgY29uc3QgY29tbWVudEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgY29tbWVudEJ0bi5jbGFzc05hbWUgPSAnYnRuLWFjdGlvbiBidG4tY29tbWVudCc7XG4gICAgICBjb21tZW50QnRuLmlubmVyVGV4dCA9ICdDb21tZW50cyc7XG4gICAgICBjb21tZW50QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICAgICAgZmV0Y2hTaW5nbGVTaG93Q29tbWVudChlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNlcnZhdGlvbkJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgcmVzZXJ2YXRpb25CdG4uY2xhc3NOYW1lID0gJ2J0bi1hY3Rpb24gYnRuLXJlc2VydmF0aW9uJztcbiAgICAgIHJlc2VydmF0aW9uQnRuLmlubmVyVGV4dCA9ICdSZXNlcnZhdGlvbnMnO1xuICAgICAgcmVzZXJ2YXRpb25CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICBmZXRjaFNpbmdsZVNob3coZSk7XG4gICAgICB9KTtcblxuICAgICAgc2hvd0FjdGlvbnMuYXBwZW5kKGNvbW1lbnRCdG4sIHJlc2VydmF0aW9uQnRuKTsgLy8gYXBwZW5kIGNoaWxkIGFjdGlvbiBidXR0b25zIGluIHNob3dBY3Rpb25zXG5cbiAgICAgIGl0ZW0uYXBwZW5kKHNob3dJbWcsIHNob3dJbmZvLCBzaG93QWN0aW9ucyk7IC8vIGFwcGVuZCBjbGlsZCBhbGwgdGhlIGVsZW1lbnRzIGluIGl0ZW0uXG5cbiAgICAgIGxpc3RJdGVtc0NvbnRhaW5lci5hcHBlbmRDaGlsZChpdGVtKTtcbiAgICB9KTtcbiAgICBpdGVtQ291bnRlcihpdGVtQ291bnRDb250YWluZXIsIGxpc3RJdGVtc0NvbnRhaW5lcik7XG4gIH0gZWxzZSB7XG4gICAgbGlzdEl0ZW1zQ29udGFpbmVyLmlubmVySFRNTCA9ICc8cCBjbGFzcz1cIm5vLWRhdGFcIj5ObyBEYXRhIEZvdW5kPC9wPic7XG4gIH1cbn07XG5cbmNvbnN0IGZldGNoVHZTaG93cyA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChNT1ZJRV9BUEkpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgLy8gY2FsbCB0aGUgSW52b2xtZW50IGFwaSB0byBnZXQgbGlrZXNcbiAgY29uc3QgcmVzcG9uc2VJbnZvbHZlbWVudCA9IGF3YWl0IGZldGNoKGAke0JBU0VfVVJMfS9saWtlcy9gKTtcbiAgY29uc3QgbGlrZXNSZXN1bHQgPSBhd2FpdCByZXNwb25zZUludm9sdmVtZW50Lmpzb24oKTtcblxuICAvLyBmaWx0ZXIgQXJyYXkgdGhhdHMgaGF2ZSBMaWtlc1xuICBjb25zdCBmaWx0ZXJBcnJXaXRoTGlrZXMgPSBbXTtcbiAgcmVzdWx0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBsaWtlc1Jlc3VsdC5mb3JFYWNoKChsaWtlSXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0uaWQgPT09IGxpa2VJdGVtLml0ZW1faWQpIHtcbiAgICAgICAgZmlsdGVyQXJyV2l0aExpa2VzLnB1c2goeyAuLi5pdGVtLCBsaWtlczogbGlrZUl0ZW0ubGlrZXMgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGZpbHRlciBBcnJheSB0aGF0cyBoYXZlIG5vdCBsaWtlc1xuICBsZXQgZmlsdGVyV2l0aG91dExpa2VzID0gW107XG4gIGZpbHRlcldpdGhvdXRMaWtlcyA9IHJlc3VsdC5maWx0ZXIoXG4gICAgKGVsKSA9PiAhZmlsdGVyQXJyV2l0aExpa2VzLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQuaWQgPT09IGVsLmlkKSxcbiAgKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgLy8gbW9kaWZ5IHRoZSBmaWx0ZXJXaXRob3V0IGFycmF5IGxpa2VzIGNvdW50IDA7XG4gIGNvbnN0IG1vZGlmaXlGaWx0ZXJXaXRob3V0TGlrZXMgPSBbXTtcbiAgZmlsdGVyV2l0aG91dExpa2VzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBtb2RpZml5RmlsdGVyV2l0aG91dExpa2VzLnB1c2goeyAuLi5pdGVtLCBsaWtlczogMCB9KTtcbiAgfSk7XG5cbiAgLy8gam9pbiBhbmQgc29ydCB0aGUgYXJyYXlzXG4gIGNvbnN0IGpvaW5BcnIgPSBtb2RpZml5RmlsdGVyV2l0aG91dExpa2VzLmNvbmNhdChmaWx0ZXJBcnJXaXRoTGlrZXMpO1xuICBqb2luQXJyLnNvcnQoKGEsIGIpID0+IGEuaWQgLSBiLmlkKTtcblxuICAvLyBjYWxsIHJlbmRlciBmdW5jdGlvbiB0byBkaXNwbGF5IHRoZSBpdGVtIGxpc3RcbiAgcmVuZGVyKGpvaW5BcnIpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZmV0Y2hUdlNob3dzO1xuIiwiY29uc3QgaXRlbUNvdW50ZXIgPSAoY291bnRDb250YWluZXIsIGl0ZW1Db250YWluZXIpID0+IHtcbiAgY29uc3QgY291bnQgPSBpdGVtQ29udGFpbmVyLmNoaWxkRWxlbWVudENvdW50O1xuICBjb3VudENvbnRhaW5lci5pbm5lclRleHQgPSBgKCR7Y291bnR9KWA7XG4gIHJldHVybiBjb3VudDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGl0ZW1Db3VudGVyO1xuIiwiLy8gaW1wb3J0IHN0YXRpYyBmaWxlc1xuaW1wb3J0ICcuL3N0eWxlLmNzcyc7XG5pbXBvcnQgJy4vYXNzZXRzL2ltZy9pY29uczgtbWVudS1yb3VuZGVkLTI0LnBuZyc7XG5pbXBvcnQgJy4vYXNzZXRzL2ltZy9pY29uczgtbXVsdGlwbHktMjQucG5nJztcbmltcG9ydCAnLi9hc3NldHMvaW1nL3VzZXIucG5nJztcblxuaW1wb3J0IGZldGNoVHZTaG93IGZyb20gJy4vbW9kdWxlcy9kaXNwbGF5SXRlbXMuanMnO1xuaW1wb3J0IHtcbiAgY2xvc2VCdG4sXG4gIG1lbnVCdG4sXG4gIG1vYk5hdkdyb3VwLFxuICBtb2JpbGVOYXZsaW5rcyxcbn0gZnJvbSAnLi9tb2R1bGVzL2RvbVNlbGVjdG9yLmpzJztcblxuLy8gdG9nZ2xlIHRoZSBtZW51XG5tZW51QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICBtb2JOYXZHcm91cC5jbGFzc0xpc3QudG9nZ2xlKCdkaXNwbGF5LWZsZXgnKTtcbn0pO1xuXG5jbG9zZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgbW9iTmF2R3JvdXAuY2xhc3NMaXN0LnJlbW92ZSgnZGlzcGxheS1mbGV4Jyk7XG59KTtcblxubW9iaWxlTmF2bGlua3MuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIG1vYk5hdkdyb3VwLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc3BsYXktZmxleCcpO1xuICB9KTtcbn0pO1xuXG4vLyBsb2FkIHRoZSBpdGVtIGxpc3Qgb24gdGhlIGZseS5cbndpbmRvdy5vbmxvYWQgPSAoKSA9PiB7XG4gIGZldGNoVHZTaG93KCk7XG59O1xuIl0sIm5hbWVzIjpbIm1lbnVCdG4iLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiY2xvc2VCdG4iLCJtb2JpbGVOYXZsaW5rcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJtb2JOYXZHcm91cCIsInF1ZXJ5U2VsZWN0b3IiLCJtb2RhbENvbnRhaW5lciIsImxpc3RJdGVtc0NvbnRhaW5lciIsIml0ZW1Db3VudENvbnRhaW5lciIsIkJBU0VfVVJMIiwiY291bnRDb250YWluZXIiLCJjb21tZW50Q29udGFpbmVyIiwiY291bnQiLCJjaGlsZEVsZW1lbnRDb3VudCIsImlubmVyVGV4dCIsImkiLCJjcmVhdGVOZXdDb21tZW50IiwidXJsIiwiZGF0YSIsImNvbW1lbnRzQ29udGFpbmVyIiwiRm9ybSIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzcG9uc2UiLCJvayIsInN0YXR1cyIsImZldGNoQ29tVXJsIiwiaXRlbV9pZCIsImNvbW1lbnRSZXNwb25zZSIsImpzb24iLCJyZXN1bHQiLCJjb21tZW50VGl0ZSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjb21tZW50SGVhZGVyIiwiaW5uZXJIVE1MIiwiY29tbWVudENvdW50IiwiaWQiLCJhcHBlbmQiLCJjb21tZW50R3JvdXAiLCJjb21tZW50SXRlbXMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiaXRlbSIsInVzZXJuYW1lIiwiY3JlYXRpb25fZGF0ZSIsImNvbW1lbnQiLCJjb21tZW50Q291bnRlciIsImVsZW1lbnRzIiwibmFtZSIsInZhbHVlIiwiaW5zaWdodCIsInJlbmRlciIsIm1vZGFsQ2FyZCIsImJ0bkNyb3NzIiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsYXNzTGlzdCIsInJlbW92ZSIsImNhcmRJbWciLCJpbWFnZSIsIm9yaWdpbmFsIiwidGl0bGUiLCJkZXMiLCJzdW1tYXJ5IiwiY2FyZFNwZWMiLCJzZWFzb24iLCJydW50aW1lIiwiYWlyZGF0ZSIsInJhdGluZyIsImF2ZXJhZ2UiLCJjb21tZW50U2VjdGlvbiIsImNvbW1lbnRzIiwiY29tbWVudEZvcm0iLCJhZGRDb21tZW50IiwiZSIsInByZXZlbnREZWZhdWx0IiwiY29tbWVudERhdGEiLCJhZGQiLCJ0YXJnZXQiLCJwYXJlbnRFbGVtZW50IiwiZmlsdGVyUmVzdWx0IiwiY29tbWVudFJlc3VsdCIsImVycm9yIiwicmVzZXJ2YXRpb25Db250YWluZXIiLCJjcmVhdGVOZXdSZXNlcnZhdGlvbiIsInJlc2VydmF0aW9uUmVzcG9uc2UiLCJyZXNlcnZhdGlvbkhlYWRlciIsInJlc2VydmF0aW9uR3JvdXAiLCJyZXNlcnZhdGlvbkl0ZW1zIiwiZGF0ZV9zdGFydCIsImRhdGVfZW5kIiwicmVzZXJ2YXRpb25Db3VudGVyIiwiY2hpbGRyZW4iLCJzdGFydF9kYXRlIiwiZW5kX2RhdGUiLCJyZXNlcnZhdGlvblNlY3Rpb24iLCJyZXNlcnZhdGlvbnMiLCJyZXNlcnZhdGlvbkZvcm0iLCJhZGRSZXNlcnZhdGlvbiIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJyZXNlcnZlRGF0YSIsInJlc2VydmF0aW9uUmVzdWx0IiwiY3JlYXRlTmV3TGlrZSIsImxpa2VDb3VudCIsImJ0bkxpa2UiLCJzZXRBdHRyaWJ1dGUiLCJyZXNwb25zZUxpa2VzIiwibGlrZURhdGEiLCJmaW5kIiwibGlrZXMiLCJyZXNwb25zZUludm9sdmVtZW50IiwibGlrZXNSZXN1bHQiLCJmaWx0ZXJBcnJXaXRoTGlrZXMiLCJsaWtlSXRlbSIsInB1c2giLCJmaWx0ZXJXaXRob3V0TGlrZXMiLCJmaWx0ZXIiLCJlbCIsImVsZW1lbnQiLCJtb2RpZml5RmlsdGVyV2l0aG91dExpa2VzIiwiam9pbkFyciIsImNvbmNhdCIsInNvcnQiLCJhIiwiYiIsInNob3dJbWciLCJzaG93SW5mbyIsInNob3dMaWtlQWN0aW9uIiwic2hvd0FjdGlvbnMiLCJjb21tZW50QnRuIiwiZmV0Y2hTaW5nbGVTaG93Q29tbWVudCIsInJlc2VydmF0aW9uQnRuIiwiZmV0Y2hTaW5nbGVTaG93IiwiYXBwZW5kQ2hpbGQiLCJ0b2dnbGUiLCJ3aW5kb3ciLCJvbmxvYWQiLCJmZXRjaFR2U2hvdyJdLCJzb3VyY2VSb290IjoiIn0= -------------------------------------------------------------------------------- /dist/index.bundle.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ 2 | -------------------------------------------------------------------------------- /dist/index.css: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | } 4 | 5 | html, 6 | body { 7 | font-family: sans-serif; 8 | padding: 0; 9 | margin: 0; 10 | background: #0d1117; 11 | color: #fff; 12 | } 13 | 14 | a { 15 | text-decoration: none; 16 | } 17 | 18 | .display-flex { 19 | display: flex !important; 20 | } 21 | 22 | .display-none { 23 | display: none !important; 24 | } 25 | 26 | .header { 27 | padding: 3%; 28 | height: 70px; 29 | display: flex; 30 | justify-content: center; 31 | align-items: center; 32 | background: #161b22; 33 | } 34 | 35 | .logo { 36 | font-size: 1.6rem; 37 | font-weight: bold; 38 | color: #ff7b00; 39 | } 40 | 41 | .nav-menu { 42 | display: block; 43 | background: transparent; 44 | border: 1px solid #333; 45 | padding: 3px 5px; 46 | align-self: center; 47 | } 48 | 49 | .nav-menu:active { 50 | background: #333; 51 | } 52 | 53 | .navbar { 54 | display: flex; 55 | width: 100%; 56 | max-width: 1000px; 57 | justify-content: space-between; 58 | align-items: center; 59 | } 60 | 61 | .mobile-nav-group { 62 | display: none; 63 | position: fixed; 64 | left: 0; 65 | right: 0; 66 | bottom: 0; 67 | top: 0; 68 | list-style: none; 69 | flex-direction: column; 70 | margin: 0; 71 | padding: 50px 0; 72 | gap: 20px; 73 | background: #161b22; 74 | } 75 | 76 | .desktop-nav-group { 77 | display: none; 78 | } 79 | 80 | .nav-link { 81 | color: #fff; 82 | color: #ff7b00; 83 | padding: 8px 10px; 84 | text-decoration: none; 85 | transition: all 0.2s ease-in-out; 86 | } 87 | 88 | .mobile-nav-group .nav-link { 89 | display: block; 90 | padding: 15px 20px; 91 | margin-bottom: 5px; 92 | background: #0d1117; 93 | } 94 | 95 | .nav-link:hover { 96 | color: #fff; 97 | background: #ff7b00; 98 | } 99 | 100 | .footer { 101 | left: 0; 102 | right: 0; 103 | bottom: 0; 104 | z-index: 10; 105 | position: relative; 106 | text-align: center; 107 | padding: 20px 25px; 108 | background: #161b22; 109 | border-top: 1px solid #333; 110 | } 111 | 112 | /* Main content css start form here */ 113 | .main-container { 114 | display: flex; 115 | margin: 70px 0; 116 | flex-direction: column; 117 | } 118 | 119 | .tv-shows { 120 | display: flex; 121 | flex-direction: column; 122 | align-items: center; 123 | } 124 | 125 | .show-title { 126 | text-align: center; 127 | } 128 | 129 | .show-group { 130 | display: flex; 131 | list-style: none; 132 | flex-direction: column; 133 | margin: 0; 134 | padding: 0; 135 | align-items: center; 136 | justify-content: center; 137 | width: 100%; 138 | max-width: 1000px; 139 | gap: 20px; 140 | } 141 | 142 | .show-item { 143 | padding: 20px; 144 | background: #161b22; 145 | border: 1px solid #333; 146 | } 147 | 148 | .show-item-img { 149 | display: block; 150 | max-width: 100%; 151 | } 152 | 153 | .show-item-img img { 154 | max-width: 100%; 155 | } 156 | 157 | .show-info { 158 | display: flex; 159 | align-items: center; 160 | justify-content: space-between; 161 | } 162 | 163 | .btn-like { 164 | background: transparent; 165 | border: none; 166 | color: #fff; 167 | margin-left: 10px; 168 | cursor: pointer; 169 | transition: all 0.2s ease-in-out; 170 | } 171 | 172 | .btn-like:active { 173 | transform: translateY(-2px); 174 | } 175 | 176 | .btn-like img { 177 | width: 22px; 178 | max-width: 100%; 179 | filter: invert(54%) sepia(62%) saturate(3447%) hue-rotate(0deg) brightness(102%) contrast(103%); 180 | } 181 | 182 | .btn-like:disabled { 183 | cursor: not-allowed; 184 | } 185 | 186 | .show-actions { 187 | display: flex; 188 | flex-direction: column; 189 | gap: 15px; 190 | } 191 | 192 | .btn-action { 193 | padding: 10px 15px; 194 | background: #ff7b00; 195 | color: #fff; 196 | border: none; 197 | } 198 | 199 | .btn-action:active { 200 | transform: translateY(-2px); 201 | } 202 | 203 | /* Article modal css styles will start from here */ 204 | .popup-modal { 205 | display: none; 206 | width: 100%; 207 | height: 100%; 208 | position: fixed; 209 | z-index: 2000; 210 | left: 0; 211 | top: 0; 212 | bottom: 0; 213 | backdrop-filter: blur(7px); 214 | -webkit-backdrop-filter: blur(10px); 215 | background: rgba(8, 19, 43, 0.4); 216 | box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37); 217 | justify-content: center; 218 | } 219 | 220 | .modal-card { 221 | border-radius: 20px; 222 | display: flex; 223 | flex-direction: column; 224 | background: #161b22; 225 | width: 100%; 226 | height: 100%; 227 | overflow: scroll; 228 | gap: 10px; 229 | padding: 24px; 230 | max-width: 1156px; 231 | margin: 25px 15px; 232 | position: relative; 233 | color: #fff; 234 | } 235 | 236 | .btn-cross { 237 | background: transparent; 238 | border: none; 239 | position: absolute; 240 | right: 10px; 241 | top: 10px; 242 | } 243 | 244 | .btn-cross:active { 245 | transform: translateY(-2px); 246 | } 247 | 248 | .card-img { 249 | display: flex; 250 | justify-content: center; 251 | align-items: center; 252 | margin-top: 15px; 253 | } 254 | 255 | .card-img img { 256 | max-width: 100%; 257 | } 258 | 259 | .card-title { 260 | text-align: center; 261 | font-size: 2rem; 262 | font-weight: normal; 263 | } 264 | 265 | .card-spec-group { 266 | display: flex; 267 | flex-direction: column; 268 | align-items: center; 269 | border: 1px solid #333; 270 | } 271 | 272 | .card-spec { 273 | display: flex; 274 | list-style: none; 275 | justify-content: space-between; 276 | margin: 0; 277 | padding: 0; 278 | width: 100%; 279 | flex-wrap: wrap; 280 | align-items: center; 281 | margin-bottom: 25px; 282 | max-width: 600px; 283 | } 284 | 285 | .spec-item { 286 | padding: 15px; 287 | text-align: justify; 288 | } 289 | 290 | .show { 291 | display: flex; 292 | } 293 | 294 | .comment-section { 295 | display: flex; 296 | flex-direction: column; 297 | align-items: center; 298 | } 299 | 300 | .comment-title { 301 | display: flex; 302 | align-items: center; 303 | text-align: center; 304 | margin: 10px 0; 305 | font-weight: normal; 306 | } 307 | 308 | .comment-header { 309 | margin-right: 10px; 310 | } 311 | 312 | #show_comment_count { 313 | font-size: 1.2rem; 314 | } 315 | 316 | .comment-goup { 317 | width: 100%; 318 | max-width: 600px; 319 | display: flex; 320 | align-items: center; 321 | flex-direction: column; 322 | list-style: none; 323 | padding: 0; 324 | margin: 0; 325 | gap: 15px; 326 | } 327 | 328 | .comment-item { 329 | width: 100%; 330 | margin: 5px; 331 | border: 1px solid #333; 332 | } 333 | 334 | .user-info { 335 | background: #0d1117; 336 | display: flex; 337 | align-items: center; 338 | border-bottom: 1px solid #333; 339 | padding: 0 15px; 340 | } 341 | 342 | .user-avatar { 343 | margin-right: 10px; 344 | } 345 | 346 | .user-name { 347 | margin-right: 10px; 348 | } 349 | 350 | .submit-date { 351 | margin-left: auto; 352 | } 353 | 354 | .user-data { 355 | padding: 15px; 356 | } 357 | 358 | .comment-form { 359 | width: 100%; 360 | display: flex; 361 | flex-direction: column; 362 | align-items: center; 363 | margin-bottom: 20px; 364 | } 365 | 366 | form { 367 | width: 100%; 368 | max-width: 600px; 369 | display: flex; 370 | flex-direction: column; 371 | gap: 15px; 372 | } 373 | 374 | input, 375 | #submitBtn { 376 | border: 2px solid #333; 377 | text-align: justify; 378 | border-radius: 5px; 379 | font-size: 1.2rem; 380 | color: #fff; 381 | background: #010409; 382 | padding: 8px 15px; 383 | /* stylelint-disable-next-line */ 384 | color-scheme: dark; 385 | } 386 | 387 | #submitBtn { 388 | width: fit-content; 389 | padding: 10px 20px; 390 | background: #ff7b00; 391 | color: #fff; 392 | border: none; 393 | } 394 | 395 | textarea { 396 | resize: none; 397 | height: 100px; 398 | padding: 10px 20px; 399 | border: 2px solid #333; 400 | border-radius: 5px; 401 | font-size: 1.2rem; 402 | background: #010409; 403 | color: #fff; 404 | } 405 | 406 | button { 407 | cursor: pointer; 408 | } 409 | 410 | .reservation-section { 411 | display: flex; 412 | flex-direction: column; 413 | align-items: center; 414 | } 415 | 416 | .reservation-title { 417 | text-align: center; 418 | margin: 10px 0; 419 | font-weight: normal; 420 | } 421 | 422 | .reservation-group { 423 | width: 100%; 424 | max-width: 600px; 425 | display: flex; 426 | align-items: center; 427 | flex-direction: column; 428 | list-style: none; 429 | padding: 0; 430 | margin: 0; 431 | gap: 15px; 432 | } 433 | 434 | .reservation-item { 435 | width: 100%; 436 | margin: 5px; 437 | border: 1px solid #333; 438 | } 439 | 440 | .reservation-form { 441 | width: 100%; 442 | display: flex; 443 | flex-direction: column; 444 | align-items: center; 445 | margin-bottom: 25px; 446 | } 447 | 448 | @media screen and (min-width: 768px) { 449 | .mobile-nav-group { 450 | display: none; 451 | } 452 | 453 | .desktop-nav-group { 454 | display: flex; 455 | list-style: none; 456 | gap: 10px; 457 | } 458 | 459 | .nav-menu { 460 | display: none; 461 | } 462 | 463 | /* Main content css start from here */ 464 | .show-group { 465 | flex-direction: row; 466 | flex-wrap: wrap; 467 | } 468 | 469 | .show-item { 470 | width: 31%; 471 | } 472 | 473 | /* popup modal css */ 474 | .card-des { 475 | padding: 0 5%; 476 | } 477 | } 478 | 479 | 480 | /*# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFXO0VBQ1gsV0FBVztFQUNYLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLFdBQVc7RUFDWCxhQUFhO0VBQ2Isc0JBQXNCO0VBQ3RCLG1CQUFtQjtFQUNuQixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRTtJQUNFLGFBQWE7RUFDZjs7RUFFQTtJQUNFLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsU0FBUztFQUNYOztFQUVBO0lBQ0UsYUFBYTtFQUNmOztFQUVBLHFDQUFxQztFQUNyQztJQUNFLG1CQUFtQjtJQUNuQixlQUFlO0VBQ2pCOztFQUVBO0lBQ0UsVUFBVTtFQUNaOztFQUVBLG9CQUFvQjtFQUNwQjtJQUNFLGFBQWE7RUFDZjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vanMtY2Fwc3RvbmUvLi9zcmMvc3R5bGUuY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIioge1xyXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbn1cclxuXHJcbmh0bWwsXHJcbmJvZHkge1xyXG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xyXG4gIHBhZGRpbmc6IDA7XHJcbiAgbWFyZ2luOiAwO1xyXG4gIGJhY2tncm91bmQ6ICMwZDExMTc7XHJcbiAgY29sb3I6ICNmZmY7XHJcbn1cclxuXHJcbmEge1xyXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG5cclxuLmRpc3BsYXktZmxleCB7XHJcbiAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4uZGlzcGxheS1ub25lIHtcclxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbi5oZWFkZXIge1xyXG4gIHBhZGRpbmc6IDMlO1xyXG4gIGhlaWdodDogNzBweDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgYmFja2dyb3VuZDogIzE2MWIyMjtcclxufVxyXG5cclxuLmxvZ28ge1xyXG4gIGZvbnQtc2l6ZTogMS42cmVtO1xyXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gIGNvbG9yOiAjZmY3YjAwO1xyXG59XHJcblxyXG4ubmF2LW1lbnUge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7XHJcbiAgcGFkZGluZzogM3B4IDVweDtcclxuICBhbGlnbi1zZWxmOiBjZW50ZXI7XHJcbn1cclxuXHJcbi5uYXYtbWVudTphY3RpdmUge1xyXG4gIGJhY2tncm91bmQ6ICMzMzM7XHJcbn1cclxuXHJcbi5uYXZiYXIge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgbWF4LXdpZHRoOiAxMDAwcHg7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbn1cclxuXHJcbi5tb2JpbGUtbmF2LWdyb3VwIHtcclxuICBkaXNwbGF5OiBub25lO1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICBsZWZ0OiAwO1xyXG4gIHJpZ2h0OiAwO1xyXG4gIGJvdHRvbTogMDtcclxuICB0b3A6IDA7XHJcbiAgbGlzdC1zdHlsZTogbm9uZTtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIG1hcmdpbjogMDtcclxuICBwYWRkaW5nOiA1MHB4IDA7XHJcbiAgZ2FwOiAyMHB4O1xyXG4gIGJhY2tncm91bmQ6ICMxNjFiMjI7XHJcbn1cclxuXHJcbi5kZXNrdG9wLW5hdi1ncm91cCB7XHJcbiAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLm5hdi1saW5rIHtcclxuICBjb2xvcjogI2ZmZjtcclxuICBjb2xvcjogI2ZmN2IwMDtcclxuICBwYWRkaW5nOiA4cHggMTBweDtcclxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XHJcbn1cclxuXHJcbi5tb2JpbGUtbmF2LWdyb3VwIC5uYXYtbGluayB7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbiAgcGFkZGluZzogMTVweCAyMHB4O1xyXG4gIG1hcmdpbi1ib3R0b206IDVweDtcclxuICBiYWNrZ3JvdW5kOiAjMGQxMTE3O1xyXG59XHJcblxyXG4ubmF2LWxpbms6aG92ZXIge1xyXG4gIGNvbG9yOiAjZmZmO1xyXG4gIGJhY2tncm91bmQ6ICNmZjdiMDA7XHJcbn1cclxuXHJcbi5mb290ZXIge1xyXG4gIGxlZnQ6IDA7XHJcbiAgcmlnaHQ6IDA7XHJcbiAgYm90dG9tOiAwO1xyXG4gIHotaW5kZXg6IDEwO1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgcGFkZGluZzogMjBweCAyNXB4O1xyXG4gIGJhY2tncm91bmQ6ICMxNjFiMjI7XHJcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMzMzM7XHJcbn1cclxuXHJcbi8qIE1haW4gY29udGVudCBjc3Mgc3RhcnQgZm9ybSBoZXJlICovXHJcbi5tYWluLWNvbnRhaW5lciB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBtYXJnaW46IDcwcHggMDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG59XHJcblxyXG4udHYtc2hvd3Mge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG59XHJcblxyXG4uc2hvdy10aXRsZSB7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcblxyXG4uc2hvdy1ncm91cCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBsaXN0LXN0eWxlOiBub25lO1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgbWFyZ2luOiAwO1xyXG4gIHBhZGRpbmc6IDA7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICB3aWR0aDogMTAwJTtcclxuICBtYXgtd2lkdGg6IDEwMDBweDtcclxuICBnYXA6IDIwcHg7XHJcbn1cclxuXHJcbi5zaG93LWl0ZW0ge1xyXG4gIHBhZGRpbmc6IDIwcHg7XHJcbiAgYmFja2dyb3VuZDogIzE2MWIyMjtcclxuICBib3JkZXI6IDFweCBzb2xpZCAjMzMzO1xyXG59XHJcblxyXG4uc2hvdy1pdGVtLWltZyB7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbiAgbWF4LXdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4uc2hvdy1pdGVtLWltZyBpbWcge1xyXG4gIG1heC13aWR0aDogMTAwJTtcclxufVxyXG5cclxuLnNob3ctaW5mbyB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxufVxyXG5cclxuLmJ0bi1saWtlIHtcclxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICBib3JkZXI6IG5vbmU7XHJcbiAgY29sb3I6ICNmZmY7XHJcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XHJcbiAgY3Vyc29yOiBwb2ludGVyO1xyXG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xyXG59XHJcblxyXG4uYnRuLWxpa2U6YWN0aXZlIHtcclxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XHJcbn1cclxuXHJcbi5idG4tbGlrZSBpbWcge1xyXG4gIHdpZHRoOiAyMnB4O1xyXG4gIG1heC13aWR0aDogMTAwJTtcclxuICBmaWx0ZXI6IGludmVydCg1NCUpIHNlcGlhKDYyJSkgc2F0dXJhdGUoMzQ0NyUpIGh1ZS1yb3RhdGUoMGRlZykgYnJpZ2h0bmVzcygxMDIlKSBjb250cmFzdCgxMDMlKTtcclxufVxyXG5cclxuLmJ0bi1saWtlOmRpc2FibGVkIHtcclxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xyXG59XHJcblxyXG4uc2hvdy1hY3Rpb25zIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgZ2FwOiAxNXB4O1xyXG59XHJcblxyXG4uYnRuLWFjdGlvbiB7XHJcbiAgcGFkZGluZzogMTBweCAxNXB4O1xyXG4gIGJhY2tncm91bmQ6ICNmZjdiMDA7XHJcbiAgY29sb3I6ICNmZmY7XHJcbiAgYm9yZGVyOiBub25lO1xyXG59XHJcblxyXG4uYnRuLWFjdGlvbjphY3RpdmUge1xyXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcclxufVxyXG5cclxuLyogQXJ0aWNsZSBtb2RhbCBjc3Mgc3R5bGVzIHdpbGwgc3RhcnQgZnJvbSBoZXJlICovXHJcbi5wb3B1cC1tb2RhbCB7XHJcbiAgZGlzcGxheTogbm9uZTtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHotaW5kZXg6IDIwMDA7XHJcbiAgbGVmdDogMDtcclxuICB0b3A6IDA7XHJcbiAgYm90dG9tOiAwO1xyXG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cig3cHgpO1xyXG4gIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xyXG4gIGJhY2tncm91bmQ6IHJnYmEoOCwgMTksIDQzLCAwLjQpO1xyXG4gIGJveC1zaGFkb3c6IDAgOHB4IDMycHggMCByZ2JhKDMxLCAzOCwgMTM1LCAwLjM3KTtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxufVxyXG5cclxuLm1vZGFsLWNhcmQge1xyXG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGJhY2tncm91bmQ6ICMxNjFiMjI7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIG92ZXJmbG93OiBzY3JvbGw7XHJcbiAgZ2FwOiAxMHB4O1xyXG4gIHBhZGRpbmc6IDI0cHg7XHJcbiAgbWF4LXdpZHRoOiAxMTU2cHg7XHJcbiAgbWFyZ2luOiAyNXB4IDE1cHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIGNvbG9yOiAjZmZmO1xyXG59XHJcblxyXG4uYnRuLWNyb3NzIHtcclxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICBib3JkZXI6IG5vbmU7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHJpZ2h0OiAxMHB4O1xyXG4gIHRvcDogMTBweDtcclxufVxyXG5cclxuLmJ0bi1jcm9zczphY3RpdmUge1xyXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcclxufVxyXG5cclxuLmNhcmQtaW1nIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgbWFyZ2luLXRvcDogMTVweDtcclxufVxyXG5cclxuLmNhcmQtaW1nIGltZyB7XHJcbiAgbWF4LXdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4uY2FyZC10aXRsZSB7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIGZvbnQtc2l6ZTogMnJlbTtcclxuICBmb250LXdlaWdodDogbm9ybWFsO1xyXG59XHJcblxyXG4uY2FyZC1zcGVjLWdyb3VwIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBib3JkZXI6IDFweCBzb2xpZCAjMzMzO1xyXG59XHJcblxyXG4uY2FyZC1zcGVjIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIG1hcmdpbjogMDtcclxuICBwYWRkaW5nOiAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGZsZXgtd3JhcDogd3JhcDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIG1hcmdpbi1ib3R0b206IDI1cHg7XHJcbiAgbWF4LXdpZHRoOiA2MDBweDtcclxufVxyXG5cclxuLnNwZWMtaXRlbSB7XHJcbiAgcGFkZGluZzogMTVweDtcclxuICB0ZXh0LWFsaWduOiBqdXN0aWZ5O1xyXG59XHJcblxyXG4uc2hvdyB7XHJcbiAgZGlzcGxheTogZmxleDtcclxufVxyXG5cclxuLmNvbW1lbnQtc2VjdGlvbiB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbn1cclxuXHJcbi5jb21tZW50LXRpdGxlIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIG1hcmdpbjogMTBweCAwO1xyXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbn1cclxuXHJcbi5jb21tZW50LWhlYWRlciB7XHJcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xyXG59XHJcblxyXG4jc2hvd19jb21tZW50X2NvdW50IHtcclxuICBmb250LXNpemU6IDEuMnJlbTtcclxufVxyXG5cclxuLmNvbW1lbnQtZ291cCB7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgbWF4LXdpZHRoOiA2MDBweDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBsaXN0LXN0eWxlOiBub25lO1xyXG4gIHBhZGRpbmc6IDA7XHJcbiAgbWFyZ2luOiAwO1xyXG4gIGdhcDogMTVweDtcclxufVxyXG5cclxuLmNvbW1lbnQtaXRlbSB7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgbWFyZ2luOiA1cHg7XHJcbiAgYm9yZGVyOiAxcHggc29saWQgIzMzMztcclxufVxyXG5cclxuLnVzZXItaW5mbyB7XHJcbiAgYmFja2dyb3VuZDogIzBkMTExNztcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7XHJcbiAgcGFkZGluZzogMCAxNXB4O1xyXG59XHJcblxyXG4udXNlci1hdmF0YXIge1xyXG4gIG1hcmdpbi1yaWdodDogMTBweDtcclxufVxyXG5cclxuLnVzZXItbmFtZSB7XHJcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xyXG59XHJcblxyXG4uc3VibWl0LWRhdGUge1xyXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xyXG59XHJcblxyXG4udXNlci1kYXRhIHtcclxuICBwYWRkaW5nOiAxNXB4O1xyXG59XHJcblxyXG4uY29tbWVudC1mb3JtIHtcclxuICB3aWR0aDogMTAwJTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xyXG59XHJcblxyXG5mb3JtIHtcclxuICB3aWR0aDogMTAwJTtcclxuICBtYXgtd2lkdGg6IDYwMHB4O1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBnYXA6IDE1cHg7XHJcbn1cclxuXHJcbmlucHV0LFxyXG4jc3VibWl0QnRuIHtcclxuICBib3JkZXI6IDJweCBzb2xpZCAjMzMzO1xyXG4gIHRleHQtYWxpZ246IGp1c3RpZnk7XHJcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xyXG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xyXG4gIGNvbG9yOiAjZmZmO1xyXG4gIGJhY2tncm91bmQ6ICMwMTA0MDk7XHJcbiAgcGFkZGluZzogOHB4IDE1cHg7XHJcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lICovXHJcbiAgY29sb3Itc2NoZW1lOiBkYXJrO1xyXG59XHJcblxyXG4jc3VibWl0QnRuIHtcclxuICB3aWR0aDogZml0LWNvbnRlbnQ7XHJcbiAgcGFkZGluZzogMTBweCAyMHB4O1xyXG4gIGJhY2tncm91bmQ6ICNmZjdiMDA7XHJcbiAgY29sb3I6ICNmZmY7XHJcbiAgYm9yZGVyOiBub25lO1xyXG59XHJcblxyXG50ZXh0YXJlYSB7XHJcbiAgcmVzaXplOiBub25lO1xyXG4gIGhlaWdodDogMTAwcHg7XHJcbiAgcGFkZGluZzogMTBweCAyMHB4O1xyXG4gIGJvcmRlcjogMnB4IHNvbGlkICMzMzM7XHJcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xyXG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xyXG4gIGJhY2tncm91bmQ6ICMwMTA0MDk7XHJcbiAgY29sb3I6ICNmZmY7XHJcbn1cclxuXHJcbmJ1dHRvbiB7XHJcbiAgY3Vyc29yOiBwb2ludGVyO1xyXG59XHJcblxyXG4ucmVzZXJ2YXRpb24tc2VjdGlvbiB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbn1cclxuXHJcbi5yZXNlcnZhdGlvbi10aXRsZSB7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIG1hcmdpbjogMTBweCAwO1xyXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbn1cclxuXHJcbi5yZXNlcnZhdGlvbi1ncm91cCB7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgbWF4LXdpZHRoOiA2MDBweDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBsaXN0LXN0eWxlOiBub25lO1xyXG4gIHBhZGRpbmc6IDA7XHJcbiAgbWFyZ2luOiAwO1xyXG4gIGdhcDogMTVweDtcclxufVxyXG5cclxuLnJlc2VydmF0aW9uLWl0ZW0ge1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIG1hcmdpbjogNXB4O1xyXG4gIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7XHJcbn1cclxuXHJcbi5yZXNlcnZhdGlvbi1mb3JtIHtcclxuICB3aWR0aDogMTAwJTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xyXG59XHJcblxyXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xyXG4gIC5tb2JpbGUtbmF2LWdyb3VwIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgfVxyXG5cclxuICAuZGVza3RvcC1uYXYtZ3JvdXAge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XHJcbiAgICBnYXA6IDEwcHg7XHJcbiAgfVxyXG5cclxuICAubmF2LW1lbnUge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICB9XHJcblxyXG4gIC8qIE1haW4gY29udGVudCBjc3Mgc3RhcnQgZnJvbSBoZXJlICovXHJcbiAgLnNob3ctZ3JvdXAge1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgIGZsZXgtd3JhcDogd3JhcDtcclxuICB9XHJcblxyXG4gIC5zaG93LWl0ZW0ge1xyXG4gICAgd2lkdGg6IDMxJTtcclxuICB9XHJcblxyXG4gIC8qIHBvcHVwIG1vZGFsIGNzcyAqL1xyXG4gIC5jYXJkLWRlcyB7XHJcbiAgICBwYWRkaW5nOiAwIDUlO1xyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=*/ -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 |No Data Found
'; 128 | } 129 | }; 130 | 131 | const fetchTvShows = async () => { 132 | const response = await fetch(MOVIE_API); 133 | const result = await response.json(); 134 | 135 | // call the Involment api to get likes 136 | const responseInvolvement = await fetch(`${BASE_URL}/likes/`); 137 | const likesResult = await responseInvolvement.json(); 138 | 139 | // Distribute likes with correct array. 140 | let joinArr = []; 141 | if (!(likesResult.length <= 0)) { 142 | joinArr = result.map((movieItem) => { 143 | let likes = 0; 144 | const findLikes = likesResult.find((likeItem) => likeItem.item_id === movieItem.id); 145 | if (findLikes) { 146 | likes = findLikes.likes; 147 | } 148 | return { ...movieItem, likes }; 149 | }); 150 | } 151 | 152 | // call render function to display the item list 153 | render(joinArr); 154 | }; 155 | 156 | export default fetchTvShows; 157 | -------------------------------------------------------------------------------- /src/modules/domSelector.js: -------------------------------------------------------------------------------- 1 | export const menuBtn = document.getElementById('mobile-menu'); 2 | export const closeBtn = document.getElementById('cross-menu'); 3 | export const mobileNavlinks = document.querySelectorAll( 4 | '.mobile-nav-group .nav-link', 5 | ); 6 | export const mobNavGroup = document.querySelector('.mobile-nav-group'); 7 | export const modalContainer = document.querySelector('.popup-modal'); 8 | export const listItemsContainer = document.querySelector('.show-group'); 9 | export const itemCountContainer = document.getElementById('count_item'); 10 | -------------------------------------------------------------------------------- /src/modules/itemCounter.js: -------------------------------------------------------------------------------- 1 | const itemCounter = (countContainer, itemContainer) => { 2 | const count = itemContainer.childElementCount; 3 | countContainer.innerText = `(${count})`; 4 | return count; 5 | }; 6 | 7 | export default itemCounter; 8 | -------------------------------------------------------------------------------- /src/modules/popupComment.js: -------------------------------------------------------------------------------- 1 | import { BASE_URL } from './apiUrls.js'; 2 | import commentCounter from './commentCounter.js'; 3 | import { modalContainer } from './domSelector.js'; 4 | 5 | const createNewComment = async (url, data, commentsContainer, Form) => { 6 | const response = await fetch(url, { 7 | method: 'POST', 8 | headers: { 9 | 'Content-Type': 'application/json', 10 | }, 11 | body: JSON.stringify(data), 12 | }); 13 | 14 | if (!response.ok && response.status !== 201) { 15 | return; 16 | } 17 | 18 | const fetchComUrl = `${BASE_URL}/comments?item_id=${data.item_id}`; 19 | 20 | const commentResponse = await fetch(fetchComUrl); 21 | 22 | const result = await commentResponse.json(); 23 | 24 | // manupulate the dom 25 | const commentTite = document.createElement('div'); 26 | commentTite.className = 'comment-title'; 27 | const commentHeader = document.createElement('h3'); 28 | commentHeader.className = 'comment-header'; 29 | commentHeader.innerHTML = 'Comments'; 30 | const commentCount = document.createElement('p'); 31 | commentCount.id = 'show_comment_count'; 32 | commentCount.innerText = 0; 33 | 34 | commentTite.append(commentHeader, commentCount); 35 | 36 | const commentGroup = document.createElement('ul'); 37 | commentGroup.className = 'comment-goup'; 38 | 39 | let commentItems = ''; 40 | 41 | if (result.length > 0) { 42 | result.forEach((item) => { 43 | commentItems += `${item.comment}
52 |${item.comment}
139 |