From 609997498239dcaebcc659c9e7c7cf447d969088 Mon Sep 17 00:00:00 2001 From: Geocld Date: Mon, 7 Oct 2024 00:15:32 +0800 Subject: [PATCH] fix: xcloud & login --- app/background.js | 56 +++++++++++++++++++++++------- app/preload.js | 2 +- main/helpers/titlemanager.ts | 42 ++++++++++++++-------- main/xal/xal.ts | 22 ++++++++++-- package.json | 2 +- renderer/components/ActionBar.tsx | 2 +- renderer/components/TitleModal.tsx | 3 +- renderer/pages/[locale]/stream.tsx | 4 +++ renderer/pages/[locale]/xcloud.tsx | 1 + 9 files changed, 101 insertions(+), 33 deletions(-) diff --git a/app/background.js b/app/background.js index 9e58f16..5e83c01 100644 --- a/app/background.js +++ b/app/background.js @@ -970,17 +970,21 @@ class TitleManager { getGamePassProducts(titles) { return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_9___default())((resolve, reject) => { const productIdQueue = []; + const v2TitleMap = {}; if (!_babel_runtime_corejs3_core_js_stable_array_is_array__WEBPACK_IMPORTED_MODULE_10___default()(titles)) { resolve([]); } _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_8___default()(titles).call(titles, title => { if (title.details && title.details.productId) { productIdQueue.push(title.details.productId); + v2TitleMap[title.details.productId] = title; } }); + + // Get officialTitles this.getOfficialTitles().then(officialTitles => { const mergeProductIds = [...new (_babel_runtime_corejs3_core_js_stable_set__WEBPACK_IMPORTED_MODULE_11___default())([...productIdQueue, ...officialTitles])]; - this._http.post('catalog.gamepass.com', '/v3/products?market=US&language=en-US&hydration=RemoteHighSapphire0', { + this._http.post('catalog.gamepass.com', '/v3/products?market=US&language=en-US&hydration=RemoteLowJade0', { // RemoteLowJade0 'Products': mergeProductIds }, { @@ -988,15 +992,25 @@ class TitleManager { 'calling-app-name': 'Xbox Cloud Gaming Web', 'calling-app-version': '24.17.63' }).then(result => { - const products = result.Products; - const mergedTitles = []; - for (const key in products) { - mergedTitles.push(_objectSpread({ - productId: key - }, products[key])); + if (result && result.Products) { + const products = result.Products; + const mergedTitles = []; + for (const key in products) { + if (v2TitleMap[key]) { + mergedTitles.push(_objectSpread(_objectSpread({ + productId: key + }, products[key]), v2TitleMap[key])); + } else { + mergedTitles.push(_objectSpread({ + productId: key + }, products[key])); + } + } + _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_12___default()(mergedTitles).call(mergedTitles, (a, b) => a.ProductTitle.localeCompare(b.ProductTitle)); + resolve(mergedTitles); + } else { + resolve([]); } - _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_12___default()(mergedTitles).call(mergedTitles, (a, b) => a.ProductTitle.localeCompare(b.ProductTitle)); - resolve(mergedTitles); }).catch(e => { console.log('getGamePassProducts error:', e); reject(e); @@ -3062,6 +3076,22 @@ class Xal { getRandomState(bytes = 64) { return crypto__WEBPACK_IMPORTED_MODULE_16___default().randomBytes(bytes).toString('base64url'); } + getDeviceTokenHack() { + console.log('getDeviceTokenHack...'); + return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default())((resolve, reject) => { + this.getDeviceToken().then(deviceToken => { + console.log('getDeviceToken success:', deviceToken); + resolve(deviceToken); + }).catch(error => { + if (error.statuscode == 400) { + console.log('device token get error, retry...'); + return this.getDeviceTokenHack().then(resolve).catch(reject); + } else { + reject(error); + } + }); + }); + } getDeviceToken() { console.log('getDeviceToken...'); return new (_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_10___default())((resolve, reject) => { @@ -3345,7 +3375,7 @@ class Xal { if (curUserToken === undefined) throw new Error('User token is missing. Please authenticate first'); try { const userToken = await this.refreshUserToken(curUserToken); - const deviceToken = await this.getDeviceToken(); + const deviceToken = await this.getDeviceTokenHack(); const sisuToken = await this.doSisuAuthorization(userToken, deviceToken); tokenStore.setUserToken(userToken); tokenStore.setSisuToken(sisuToken); @@ -3395,7 +3425,7 @@ class Xal { }; } async getRedirectUri() { - const deviceToken = await this.getDeviceToken(); + const deviceToken = await this.getDeviceTokenHack(); const codeChallange = await this.getCodeChallange(); const state = this.getRandomState(); const sisuAuth = await this.doSisuAuthentication(deviceToken, codeChallange, state); @@ -15826,7 +15856,7 @@ module.exports = path.URL; /***/ ((module) => { "use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"private":true,"name":"xstreaming","description":"xstreaming","version":"1.0.2","author":"Geocld ","main":"app/background.js","scripts":{"dev":"DEBUG=xstreaming:authenticationV2 nextron","build":"nextron build","lint":"eslint . --ext .ts && eslint renderer/ --ext .tsx","lint:fix":"eslint . --ext .ts --fix && eslint renderer/ --ext .tsx --fix","postinstall":"electron-builder install-app-deps","publish":"electron-builder -p onTag","flatpak-build":"nextron build --no-pack && electron-builder --dir"},"dependencies":{"@nextui-org/react":"^2.4.6","axios":"^1.7.7","compare-versions":"^6.1.0","debounce":"^2.1.1","debug":"^4.3.4","electron-serve":"^1.3.0","electron-store":"^8.0.1","express":"^4.18.3","express-http-proxy":"^2.0.0","express-ws":"^5.0.2","framer-motion":"^11.5.4","github-url-to-object":"^4.0.6","i18next":"23.14.0","ip-address":"^9.0.5","jose":"^5.1.0","moment":"^2.30.1","next-i18next":"^15.3.1","next-themes":"^0.3.0","react-i18next":"^15.0.1","react-query":"^3.39.3","semver":"^7.6.3","uplot":"^1.6.30","uuid-1345":"^1.0.2","xbox-webapi":"^1.4.1","xstreaming-player":"^0.2.1","xvfb-maybe":"^0.2.1"},"devDependencies":{"@babel/core":"^7.24.4","@fortawesome/fontawesome-free":"^6.5.1","@next/eslint-plugin-next":"^14.2.2","@types/node":"^20.12.7","@types/react":"^18.2.47","@typescript-eslint/eslint-plugin":"^8.6.0","@typescript-eslint/parser":"^8.6.0","autoprefixer":"^10.4.20","babel-loader":"^9.1.3","electron":"28","electron-builder":"^24.13.3","eslint":"^8.57.0","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-react-refresh":"^0.4.12","next":"^13.5.6","nextron":"^8.13.0","node-loader":"^2.0.0","postcss":"^8.4.45","react":"^18.1.0","react-dom":"^18.1.0","sass":"^1.78.0","tailwindcss":"^3.4.10","typescript":"^5.3.3"},"packageManager":"yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"}'); +module.exports = /*#__PURE__*/JSON.parse('{"private":true,"name":"xstreaming","description":"xstreaming","version":"1.0.3","author":"Geocld ","main":"app/background.js","scripts":{"dev":"DEBUG=xstreaming:authenticationV2 nextron","build":"nextron build","lint":"eslint . --ext .ts && eslint renderer/ --ext .tsx","lint:fix":"eslint . --ext .ts --fix && eslint renderer/ --ext .tsx --fix","postinstall":"electron-builder install-app-deps","publish":"electron-builder -p onTag","flatpak-build":"nextron build --no-pack && electron-builder --dir"},"dependencies":{"@nextui-org/react":"^2.4.6","axios":"^1.7.7","compare-versions":"^6.1.0","debounce":"^2.1.1","debug":"^4.3.4","electron-serve":"^1.3.0","electron-store":"^8.0.1","express":"^4.18.3","express-http-proxy":"^2.0.0","express-ws":"^5.0.2","framer-motion":"^11.5.4","github-url-to-object":"^4.0.6","i18next":"23.14.0","ip-address":"^9.0.5","jose":"^5.1.0","moment":"^2.30.1","next-i18next":"^15.3.1","next-themes":"^0.3.0","react-i18next":"^15.0.1","react-query":"^3.39.3","semver":"^7.6.3","uplot":"^1.6.30","uuid-1345":"^1.0.2","xbox-webapi":"^1.4.1","xstreaming-player":"^0.2.1","xvfb-maybe":"^0.2.1"},"devDependencies":{"@babel/core":"^7.24.4","@fortawesome/fontawesome-free":"^6.5.1","@next/eslint-plugin-next":"^14.2.2","@types/node":"^20.12.7","@types/react":"^18.2.47","@typescript-eslint/eslint-plugin":"^8.6.0","@typescript-eslint/parser":"^8.6.0","autoprefixer":"^10.4.20","babel-loader":"^9.1.3","electron":"28","electron-builder":"^24.13.3","eslint":"^8.57.0","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-react-refresh":"^0.4.12","next":"^13.5.6","nextron":"^8.13.0","node-loader":"^2.0.0","postcss":"^8.4.45","react":"^18.1.0","react-dom":"^18.1.0","sass":"^1.78.0","tailwindcss":"^3.4.10","typescript":"^5.3.3"},"packageManager":"yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"}'); /***/ }) @@ -16177,4 +16207,4 @@ new Application(); /******/ })() ; }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsNkJBQTZCO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDJCQUEyQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FB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LElBQUksR0FBRzZQLE9BQU8sQ0FBQ2EsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUk7TUFDcEMsSUFBSSxDQUFDak8sV0FBVyxDQUFDelgsT0FBTyxDQUFDLG9CQUFvQmdWLElBQUksSUFBSXhELE1BQU0sT0FBTyxDQUFDOztNQUVuRTtNQUNBO01BQ0E7TUFDQTtJQUNGO0VBQ0Y7RUFJQXFWLGFBQWFBLENBQUEsRUFBRztJQUNkLElBQUksQ0FBQ0MsVUFBVSxHQUFHLElBQUkzakIsb0RBQWEsQ0FBQztNQUNsQ3RELEtBQUssRUFBRSxHQUFHO01BQ1ZDLE1BQU0sRUFBRTtJQUNWLENBQUMsQ0FBQzs7SUFFRjtJQUNBLElBQUksQ0FBQ2duQixVQUFVLENBQUM5bUIsT0FBTyxDQUFDLGNBQWMsQ0FBQzs7SUFFdkM7SUFDQSxJQUFJLENBQUM4bUIsVUFBVSxDQUFDN08sV0FBVyxDQUFDOE8sWUFBWSxDQUFDLENBQUM7RUFDNUM7RUFFQS9QLElBQUlBLENBQUEsRUFBRztJQUNMc04sMENBQVcsQ0FBQ3ROLElBQUksQ0FBQyxDQUFDO0VBQ3BCO0VBRUFDLE9BQU9BLENBQUEsRUFBRztJQUNSLElBQUksQ0FBQ0QsSUFBSSxDQUFDLENBQUM7SUFDWHNOLDBDQUFXLENBQUMwQyxRQUFRLENBQUMsQ0FBQztFQUN4QjtBQUNGO0FBRUEsSUFBSXRDLFdBQVcsQ0FBQyxDQUFDLEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly94c3RyZWFtaW5nL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9hdXRoZW50aWNhdGlvbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL2FjaGl2ZW1lbnRtYW5hZ2VyLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvY3JlYXRlLXdpbmRvdy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL2h0dHAudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaGVscGVycy9pbmRleC50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3N0cmVhbW1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaGVscGVycy90aXRsZW1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaGVscGVycy90b2tlbnN0b3JlLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvdXBkYXRlci50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3hib3hXb3JrZXIudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaGVscGVycy94Y2xvdWRhcGkudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaXBjLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2lwYy9hcHAudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaXBjL2Jhc2UudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaXBjL2NvbnNvbGVzLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2lwYy9zZXR0aW5ncy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9pcGMvc3RyZWFtaW5nLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2lwYy94Y2xvdWQudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL2luZGV4LnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9saWIvaHR0cC50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL3Rva2VuLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9saWIvdG9rZW5zL2RldmljZXRva2VuLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9saWIvdG9rZW5zL21zYWx0b2tlbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL3Rva2Vucy9zaXN1dG9rZW4udHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL2xpYi90b2tlbnMvc3RyZWFtaW5ndG9rZW4udHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL2xpYi90b2tlbnMvdXNlcnRva2VuLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9saWIvdG9rZW5zL3hzdHN0b2tlbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvdG9rZW5zdG9yZS50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwveGFsLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9yZW5kZXJlci9jb250ZXh0L3VzZXJDb250ZXh0LmRlZmF1bHRzLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImNyeXB0b1wiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImVsZWN0cm9uXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiZnNcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJodHRwc1wiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcIm5vZGU6cGF0aFwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiYXhpb3NcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcImNvbXBhcmUtdmVyc2lvbnNcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcImRlYnVnXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJlbGVjdHJvbi1zZXJ2ZVwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiZWxlY3Ryb24tc3RvcmVcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcImdpdGh1Yi11cmwtdG8tb2JqZWN0XCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJpcC1hZGRyZXNzXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJqb3NlXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJ1dWlkLTEzNDVcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcInhib3gtd2ViYXBpXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9kYXRlL25vdy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NvbWUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2pzb24vc3RyaW5naWZ5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvYXNzaWduLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc2V0LWltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc2V0LXRpbWVvdXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3NldC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvdXJsLXNlYXJjaC1wYXJhbXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3VybC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy90b1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy90b1Byb3BlcnR5S2V5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwva2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvbWUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2RhdGUvbm93LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb21lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9qc29uL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvYXNzaWduLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9wcm9taXNlL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3NldC9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zdHJpbmcvdmlydHVhbC9pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zdHJpbmcvdmlydHVhbC90cmltLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9zeW1ib2wvaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1zZXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NhbGxlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtZmYtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtaWUtb3ItZWRnZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtaW9zLXBlYmJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtaW9zLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1ub2RlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy13ZWJvcy13ZWJraXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LXdlYmtpdC12ZXJzaW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mcmVlemluZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3Nvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2h0bWwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9taWNyb3Rhc2suanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25vdC1hLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3duLWtleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BhdGguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BlcmZvcm0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcXVldWUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2FmZS1nZXQtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtY2xvbmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtaGVscGVycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1pcy1zdWJzZXQtb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1pcy1zdXBlcnNldC1vZi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc2l6ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC11bmlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy1wdW55Y29kZS10by1hc2NpaS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLXJlcGVhdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZm9yY2VkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdGFzay5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VybC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29tZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmRhdGUudG8tanNvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXRoLnRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC1zZXR0bGVkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFueS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY2F0Y2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmFjZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmVqZWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS53aXRoLXJlc29sdmVycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3QudG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5kaWZmZXJlbmNlLnYyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LmludGVyc2VjdGlvbi52Mi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LmlzLXN1YnNldC1vZi52Mi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52Mi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52Mi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC51bmlvbi52Mi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5mb3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmtleS1mb3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnJlcGxhY2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc3BsaXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmN1c3RvbS1tYXRjaGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1hdGNoZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLWtleS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmNsZWFyLWltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtaW1tZWRpYXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC1pbnRlcnZhbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtdGltZW91dC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi50aW1lcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuZGVsZXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmhhcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5zaXplLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC5jYW4tcGFyc2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwucGFyc2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2RhdGUvbm93LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uva2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29tZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvanNvbi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9wcm9taXNlL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtaW1tZWRpYXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0L2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvdXJsLXNlYXJjaC1wYXJhbXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3VybC9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS93ZWIvdXJsLXNlYXJjaC1wYXJhbXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvd2ViL3VybC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9hcHBsaWNhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJlbGVjdHJvbi1zZXJ2ZVwiKSwgcmVxdWlyZShcImVsZWN0cm9uLXN0b3JlXCIpLCByZXF1aXJlKFwiZGVidWdcIiksIHJlcXVpcmUoXCJpcC1hZGRyZXNzXCIpLCByZXF1aXJlKFwiYXhpb3NcIiksIHJlcXVpcmUoXCJjb21wYXJlLXZlcnNpb25zXCIpLCByZXF1aXJlKFwiZ2l0aHViLXVybC10by1vYmplY3RcIiksIHJlcXVpcmUoXCJqb3NlXCIpLCByZXF1aXJlKFwidXVpZC0xMzQ1XCIpLCByZXF1aXJlKFwieGJveC13ZWJhcGlcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wiZWxlY3Ryb24tc2VydmVcIiwgXCJlbGVjdHJvbi1zdG9yZVwiLCBcImRlYnVnXCIsIFwiaXAtYWRkcmVzc1wiLCBcImF4aW9zXCIsIFwiY29tcGFyZS12ZXJzaW9uc1wiLCBcImdpdGh1Yi11cmwtdG8tb2JqZWN0XCIsIFwiam9zZVwiLCBcInV1aWQtMTM0NVwiLCBcInhib3gtd2ViYXBpXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSB7XG5cdFx0dmFyIGEgPSB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBmYWN0b3J5KHJlcXVpcmUoXCJlbGVjdHJvbi1zZXJ2ZVwiKSwgcmVxdWlyZShcImVsZWN0cm9uLXN0b3JlXCIpLCByZXF1aXJlKFwiZGVidWdcIiksIHJlcXVpcmUoXCJpcC1hZGRyZXNzXCIpLCByZXF1aXJlKFwiYXhpb3NcIiksIHJlcXVpcmUoXCJjb21wYXJlLXZlcnNpb25zXCIpLCByZXF1aXJlKFwiZ2l0aHViLXVybC10by1vYmplY3RcIiksIHJlcXVpcmUoXCJqb3NlXCIpLCByZXF1aXJlKFwidXVpZC0xMzQ1XCIpLCByZXF1aXJlKFwieGJveC13ZWJhcGlcIikpIDogZmFjdG9yeShyb290W1wiZWxlY3Ryb24tc2VydmVcIl0sIHJvb3RbXCJlbGVjdHJvbi1zdG9yZVwiXSwgcm9vdFtcImRlYnVnXCJdLCByb290W1wiaXAtYWRkcmVzc1wiXSwgcm9vdFtcImF4aW9zXCJdLCByb290W1wiY29tcGFyZS12ZXJzaW9uc1wiXSwgcm9vdFtcImdpdGh1Yi11cmwtdG8tb2JqZWN0XCJdLCByb290W1wiam9zZVwiXSwgcm9vdFtcInV1aWQtMTM0NVwiXSwgcm9vdFtcInhib3gtd2ViYXBpXCJdKTtcblx0XHRmb3IodmFyIGkgaW4gYSkgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyA/IGV4cG9ydHMgOiByb290KVtpXSA9IGFbaV07XG5cdH1cbn0pKGdsb2JhbCwgKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfZWxlY3Ryb25fc2VydmVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9lbGVjdHJvbl9zdG9yZV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2RlYnVnX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfaXBfYWRkcmVzc19fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2F4aW9zX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfY29tcGFyZV92ZXJzaW9uc19fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2dpdGh1Yl91cmxfdG9fb2JqZWN0X18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfam9zZV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3V1aWRfMTM0NV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3hib3hfd2ViYXBpX18pID0+IHtcbnJldHVybiAiLCJpbXBvcnQgeyBzZXNzaW9uLCBkaWFsb2cgfSBmcm9tICdlbGVjdHJvbidcbmltcG9ydCB7IGNyZWF0ZVdpbmRvdyB9IGZyb20gJy4vaGVscGVycydcbmltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuL2FwcGxpY2F0aW9uJ1xuaW1wb3J0IHsgWGFsLCBUb2tlblN0b3JlIH0gZnJvbSAnLi94YWwnXG5pbXBvcnQgQXV0aFRva2VuU3RvcmUgZnJvbSAnLi9oZWxwZXJzL3Rva2Vuc3RvcmUnXG5pbXBvcnQgeyBkZWZhdWx0U2V0dGluZ3MgfSBmcm9tICcuLi9yZW5kZXJlci9jb250ZXh0L3VzZXJDb250ZXh0LmRlZmF1bHRzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBdXRoZW50aWNhdGlvbiB7XG4gICAgX2FwcGxpY2F0aW9uOkFwcGxpY2F0aW9uXG5cbiAgICBfdG9rZW5TdG9yZTpBdXRoVG9rZW5TdG9yZVxuICAgIF94YWw6WGFsXG4gICAgXG4gICAgX2F1dGhXaW5kb3dcbiAgICBfYXV0aENhbGxiYWNrXG5cbiAgICBfaXNBdXRoZW50aWNhdGluZzpib29sZWFuID0gZmFsc2VcbiAgICBfaXNBdXRoZW50aWNhdGVkOmJvb2xlYW4gPSBmYWxzZVxuICAgIF9hcHBMZXZlbDpudW1iZXIgPSAwXG5cbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbjpBcHBsaWNhdGlvbil7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gYXBwbGljYXRpb25cbiAgICAgICAgdGhpcy5fdG9rZW5TdG9yZSA9IG5ldyBBdXRoVG9rZW5TdG9yZSgpXG4gICAgICAgIHRoaXMuX3Rva2VuU3RvcmUubG9hZCgpXG4gICAgICAgIHRoaXMuX3hhbCA9IG5ldyBYYWwodGhpcy5fdG9rZW5TdG9yZSlcbiAgICB9XG5cbiAgICBjaGVja0F1dGhlbnRpY2F0aW9uKCl7XG4gICAgICAgIHRoaXMuX2lzQXV0aGVudGljYXRpbmcgPSB0cnVlXG4gICAgICAgIHRoaXMuX2lzQXV0aGVudGljYXRlZCA9IGZhbHNlXG5cbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tjaGVja0F1dGhlbnRpY2F0aW9uKCldIFN0YXJ0aW5nIHRva2VuIGNoZWNrLi4uJylcbiAgICAgICAgaWYodGhpcy5fdG9rZW5TdG9yZS5oYXNWYWxpZEF1dGhUb2tlbnMoKSl7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW2NoZWNrQXV0aGVudGljYXRpb24oKV0gVG9rZW5zIGFyZSB2YWxpZC4nKVxuICAgICAgICAgICAgdGhpcy5zdGFydFNpbGVudEZsb3coKVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZih0aGlzLl90b2tlblN0b3JlLmdldFVzZXJUb2tlbigpICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSB1c2VyIHRva2VuLCBsZXRzIHRyeSB0byByZWZyZXNoIGl0LlxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbY2hlY2tBdXRoZW50aWNhdGlvbigpXSBUb2tlbnMgYXJlIGV4cGlyZWQgYnV0IHdlIGhhdmUgYSB1c2VyIHRva2VuLiBMZXRzIHRyeSB0byByZWZyZXNoIHRoZSB0b2tlbnMuJylcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U2lsZW50RmxvdygpXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW2NoZWNrQXV0aGVudGljYXRpb24oKV0gTm8gdG9rZW5zIGFyZSBwcmVzZW50LicpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGFydFNpbGVudEZsb3coKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFNpbGVudEZsb3coKV0gU3RhcnRpbmcgc2lsZW50IGZsb3cuLi4nKVxuICAgICAgICB0aGlzLl9pc0F1dGhlbnRpY2F0aW5nID0gdHJ1ZVxuICAgICAgICB0aGlzLl94YWwucmVmcmVzaFRva2Vucyh0aGlzLl90b2tlblN0b3JlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRTaWxlbnRGbG93KCldIFRva2VucyBoYXZlIGJlZW4gcmVmcmVzaGVkJylcblxuICAgICAgICAgICAgdGhpcy5nZXRTdHJlYW1pbmdUb2tlbih0aGlzLl90b2tlblN0b3JlKS50aGVuKChzdHJlYW1pbmdUb2tlbnMpID0+IHtcbiAgICAgICAgICAgICAgICBpZihzdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4gIT09IG51bGwpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0U2lsZW50RmxvdygpXSBSZXRyaWV2ZWQgYm90aCB4SG9tZSBhbmQgeENsb3VkIHRva2VucycpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcExldmVsID0gMlxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRTaWxlbnRGbG93KCldIFJldHJpZXZlZCB4SG9tZSB0b2tlbiBvbmx5JylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwTGV2ZWwgPSAxXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5feGFsLmdldFdlYlRva2VuKHRoaXMuX3Rva2VuU3RvcmUpLnRoZW4oKHdlYlRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsIF9fZmlsZW5hbWUrJ1tzdGFydFNpbGVudEZsb3coKV0gV2ViIHRva2VuIHJlY2VpdmVkJylcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmF1dGhlbnRpY2F0aW9uQ29tcGxldGVkKHN0cmVhbWluZ1Rva2Vucywgd2ViVG9rZW4pXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgX19maWxlbmFtZSsnW3N0YXJ0U2lsZW50RmxvdygpXSBGYWlsZWQgdG8gcmV0cmlldmUgd2ViIHRva2VuczonLCBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nLnNob3dNZXNzYWdlQm94KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdFcnJvcjogRmFpbGVkIHRvIHJldHJpZXZlIHdlYiB0b2tlbnM6JysgSlNPTi5zdHJpbmdpZnkoZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFNpbGVudEZsb3coKV0gRmFpbGVkIHRvIHJldHJpZXZlIHN0cmVhbWluZyB0b2tlbnM6JywgZXJyKVxuICAgICAgICAgICAgICAgIGRpYWxvZy5zaG93TWVzc2FnZUJveCh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdFcnJvcjogRmFpbGVkIHRvIHJldHJpZXZlIHN0cmVhbWluZyB0b2tlbnM6JysgSlNPTi5zdHJpbmdpZnkoZXJyKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0U2lsZW50RmxvdygpXSBFcnJvciByZWZyZXNoaW5nIHRva2VuczonLCBlcnIpXG4gICAgICAgICAgICBkaWFsb2cuc2hvd01lc3NhZ2VCb3goe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdbc3RhcnRTaWxlbnRGbG93KCldIEVycm9yIHJlZnJlc2hpbmcgdG9rZW5zOicgKyBKU09OLnN0cmluZ2lmeShlcnIpLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdGhpcy5fdG9rZW5TdG9yZS5jbGVhcigpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc3RhcnRBdXRoZmxvdygpe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0QXV0aGZsb3coKV0gU3RhcnRpbmcgYXV0aGVudGljYXRpb24gZmxvdycpXG4gICAgICAgIFxuICAgICAgICB0aGlzLl94YWwuZ2V0UmVkaXJlY3RVcmkoKS50aGVuKChyZWRpcmVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcGVuQXV0aFdpbmRvdyhyZWRpcmVjdC5zaXN1QXV0aC5Nc2FPYXV0aFJlZGlyZWN0KVxuXG4gICAgICAgICAgICB0aGlzLl9hdXRoQ2FsbGJhY2sgPSAocmVkaXJlY3RVcmkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0F1dGhlbnRpY2F0aW5nID0gdHJ1ZVxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRBdXRoRmxvdygpXSBHb3QgcmVkaXJlY3QgVVJJOicsIHJlZGlyZWN0VXJpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3hhbC5hdXRoZW50aWNhdGVVc2VyKHRoaXMuX3Rva2VuU3RvcmUsIHJlZGlyZWN0LCByZWRpcmVjdFVyaSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRBdXRoRmxvdygpXSBBdXRoZW50aWNhdGVkIHVzZXI6JywgcmVzdWx0KVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRTaWxlbnRGbG93KClcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydEF1dGhGbG93KCldIEVycm9yIGF1dGhlbnRpY2F0aW5nIHVzZXI6JywgZXJyKVxuICAgICAgICAgICAgICAgICAgICBkaWFsb2cuc2hvd0Vycm9yQm94KCdFcnJvcicsICdFcnJvciBhdXRoZW50aWNhdGluZyB1c2VyLiBFcnJvciBkZXRhaWxzOiAnK0pTT04uc3RyaW5naWZ5KGVycikpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydEF1dGhGbG93KCldIEVycm9yIGdldHRpbmcgcmVkaXJlY3QgVVJJOicsIGVycilcbiAgICAgICAgICAgIGRpYWxvZy5zaG93RXJyb3JCb3goJ0Vycm9yJywgJ0Vycm9yIGdldHRpbmcgcmVkaXJlY3QgVVJJLiBFcnJvciBkZXRhaWxzOiAnK0pTT04uc3RyaW5naWZ5KGVycikpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc3RhcnRXZWJ2aWV3SG9va3MoKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFdlYnZpZXdIb29rcygpXSBTdGFydGluZyB3ZWJ2aWV3IGhvb2tzJylcblxuICAgICAgICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uLndlYlJlcXVlc3Qub25IZWFkZXJzUmVjZWl2ZWQoe1xuICAgICAgICAgICAgdXJsczogW1xuICAgICAgICAgICAgICAgICdodHRwczovL2xvZ2luLmxpdmUuY29tL29hdXRoMjBfYXV0aG9yaXplLnNyZj8qJyxcbiAgICAgICAgICAgICAgICAnaHR0cHM6Ly9sb2dpbi5saXZlLmNvbS9wcHNlY3VyZS9wb3N0LnNyZj8qJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sIChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuXG4gICAgICAgICAgICBpZihkZXRhaWxzLnJlc3BvbnNlSGVhZGVycy5Mb2NhdGlvbiAhPT0gdW5kZWZpbmVkICYmIGRldGFpbHMucmVzcG9uc2VIZWFkZXJzLkxvY2F0aW9uWzBdLmluY2x1ZGVzKHRoaXMuX3hhbC5fYXBwLlJlZGlyZWN0VXJpKSl7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFdlYnZpZXdIb29rcygpXSBHb3QgcmVkaXJlY3QgVVJJIGZyb20gT0FVVEg6JywgZGV0YWlscy5yZXNwb25zZUhlYWRlcnMuTG9jYXRpb25bMF0pXG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aFdpbmRvdy5jbG9zZSgpXG5cbiAgICAgICAgICAgICAgICBpZih0aGlzLl9hdXRoQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhDYWxsYmFjayhkZXRhaWxzLnJlc3BvbnNlSGVhZGVycy5Mb2NhdGlvblswXSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0V2Vidmlld0hvb2tzKCldIEF1dGhlbnRpY2F0aW9uIENhbGxiYWNrIGlzIG5vdCBkZWZpbmVkOicsIHRoaXMuX2F1dGhDYWxsYmFjaylcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nLnNob3dFcnJvckJveCgnRXJyb3InLCAnQXV0aGVudGljYXRpb24gQ2FsbGJhY2sgaXMgbm90IGRlZmluZWQuIEVycm9yIGRldGFpbHM6ICcrSlNPTi5zdHJpbmdpZnkodGhpcy5fYXV0aENhbGxiYWNrKSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogdHJ1ZSB9KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhkZXRhaWxzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIG9wZW5BdXRoV2luZG93KHVybCl7XG4gICAgICAgIGNvbnN0IGF1dGhXaW5kb3cgPSBjcmVhdGVXaW5kb3coJ2F1dGgnLCB7XG4gICAgICAgICAgICB3aWR0aDogNTAwLFxuICAgICAgICAgICAgaGVpZ2h0OiA2MDAsXG4gICAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uJyxcbiAgICAgICAgfSlcbiAgICAgICAgXG4gICAgICAgIGF1dGhXaW5kb3cubG9hZFVSTCh1cmwpXG4gICAgICAgIHRoaXMuX2F1dGhXaW5kb3cgPSBhdXRoV2luZG93XG5cbiAgICAgICAgdGhpcy5fYXV0aFdpbmRvdy5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW29wZW5BdXRoV2luZG93KCldIENsb3NlZCBhdXRoIHdpbmRvdycpXG4gICAgICAgICAgICAvLyBAVE9ETzogV2hhdCB0byBkbz9cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBhc3luYyBnZXRTdHJlYW1pbmdUb2tlbih0b2tlblN0b3JlOlRva2VuU3RvcmUpe1xuICAgICAgICBjb25zb2xlLmxvZygnZ2V0U3RyZWFtaW5nVG9rZW4nKVxuICAgICAgICBjb25zdCBzaXN1VG9rZW4gPSB0b2tlblN0b3JlLmdldFNpc3VUb2tlbigpXG4gICAgICAgIGlmKHNpc3VUb2tlbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaXN1IHRva2VuIGlzIG1pc3NpbmcuIFBsZWFzZSBhdXRoZW50aWNhdGUgZmlyc3QnKVxuXG4gICAgICAgIGNvbnN0IHhzdHNUb2tlbiA9IGF3YWl0IHRoaXMuX3hhbC5kb1hzdHNBdXRob3JpemF0aW9uKHNpc3VUb2tlbiwgJ2h0dHA6Ly9nc3N2Lnhib3hsaXZlLmNvbS8nKVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLl94YWwuX3hob21lVG9rZW46JywgdGhpcy5feGFsLl94aG9tZVRva2VuKVxuICAgICAgICBpZih0aGlzLl94YWwuX3hob21lVG9rZW4gPT09IHVuZGVmaW5lZCB8fCB0aGlzLl94YWwuX3hob21lVG9rZW4uZ2V0U2Vjb25kc1ZhbGlkKCkgPD0gNjApe1xuICAgICAgICAgICAgdGhpcy5feGFsLl94aG9tZVRva2VuID0gYXdhaXQgdGhpcy5feGFsLmdldFN0cmVhbVRva2VuKHhzdHNUb2tlbiwgJ3hob21lJylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLl94YWwuX3hjbG91ZFRva2VuOicsIHRoaXMuX3hhbC5feGNsb3VkVG9rZW4pXG4gICAgICAgIGNvbnN0IHNldHRpbmdzOiBhbnkgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KCdzZXR0aW5ncycsIGRlZmF1bHRTZXR0aW5ncylcbiAgICAgICAgaWYoIXRoaXMuX3hhbC5feGNsb3VkVG9rZW4gfHwgdGhpcy5feGFsLl94Y2xvdWRUb2tlbi5nZXRTZWNvbmRzVmFsaWQoKSA8PSA2MCl7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3hhbC5feGNsb3VkVG9rZW4gPSBhd2FpdCB0aGlzLl94YWwuZ2V0U3RyZWFtVG9rZW4oeHN0c1Rva2VuLCAneGdwdXdlYicsIHNldHRpbmdzLmZvcmNlX3JlZ2lvbl9pcClcbiAgICAgICAgICAgIH0gY2F0Y2goZXJyb3Ipe1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3hhbC5feGNsb3VkVG9rZW4gPSBhd2FpdCB0aGlzLl94YWwuZ2V0U3RyZWFtVG9rZW4oeHN0c1Rva2VuLCAneGdwdXdlYmYycCcsIHNldHRpbmdzLmZvcmNlX3JlZ2lvbl9pcClcbiAgICAgICAgICAgICAgICB9IGNhdGNoKGVycm9yKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5feGFsLl94Y2xvdWRUb2tlbiA9IG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyB4SG9tZVRva2VuOiB0aGlzLl94YWwuX3hob21lVG9rZW4sIHhDbG91ZFRva2VuOiB0aGlzLl94YWwuX3hjbG91ZFRva2VuIH1cbiAgICB9XG5cbiAgICBcbn1cbiIsImltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuLi9hcHBsaWNhdGlvbidcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcblxuY2xhc3MgSHR0cCB7XG4gIGdldChob3N0OiBzdHJpbmcsIHBhdGg6IHN0cmluZywgaGVhZGVyczogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhvc3RIZWFkZXJzID0ge1xuICAgICAgICAvLyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgfTtcblxuICAgICAgYXhpb3NcbiAgICAgICAgLmdldChgaHR0cHM6Ly8ke2hvc3R9JHtwYXRofWAsIHtcbiAgICAgICAgICBoZWFkZXJzOiBob3N0SGVhZGVycyxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCB8fCByZXMuc3RhdHVzID09PSAyMDQpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgc3RhdHVzY29kZTogcmVzLmNvZGUsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHJlcy5oZWFkZXJzLFxuICAgICAgICAgICAgICBib2R5OiByZXMuZGF0YSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ0Vycm9yIGZldGNoaW5nICcgKyBob3N0ICsgcGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwb3N0KGhvc3Q6IHN0cmluZywgcGF0aDogc3RyaW5nLCBoZWFkZXJzOiBhbnksIGRhdGE6IGFueSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBob3N0SGVhZGVycyA9IHtcbiAgICAgICAgLy8gJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgIH07XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBheGlvc1xuICAgICAgICAucG9zdChgaHR0cHM6Ly8ke2hvc3R9JHtwYXRofWAsIGRhdGEsIHtcbiAgICAgICAgICBoZWFkZXJzOiBob3N0SGVhZGVycyxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCB8fCByZXMuc3RhdHVzID09PSAyMDIpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgc3RhdHVzY29kZTogcmVzLmNvZGUsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHJlcy5oZWFkZXJzLFxuICAgICAgICAgICAgICBib2R5OiByZXMuZGF0YSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ0Vycm9yIGZldGNoaW5nICcgKyBob3N0ICsgcGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWNoaXZlbWVudE1hbmFnZXIge1xuICBfYXBwbGljYXRpb246IEFwcGxpY2F0aW9uXG5cbiAgY29uc3RydWN0b3IoYXBwbGljYXRpb24pe1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gYXBwbGljYXRpb25cbiAgfVxuXG4gIGdldEhpc3RvcnlBY2hpdmVtZW50cygpIHtcbiAgICBjb25zdCBodHRwID0gbmV3IEh0dHAoKTtcbiAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldCgnc2V0dGluZ3MnLCB7fSlcbiAgICBjb25zdCBwcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSA9IHNldHRpbmdzLnByZWZlcnJlZF9nYW1lX2xhbmd1YWdlIHx8ICdlbi1VUydcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB1aHMgPSB0aGlzLl9hcHBsaWNhdGlvbi53ZWJUb2tlbi5kYXRhLkRpc3BsYXlDbGFpbXMueHVpWzBdLnVocztcbiAgICAgIGNvbnN0IHhpZCA9IHRoaXMuX2FwcGxpY2F0aW9uLndlYlRva2VuLmRhdGEuRGlzcGxheUNsYWltcy54dWlbMF0ueGlkO1xuXG4gICAgICBodHRwXG4gICAgICAgIC5nZXQoXG4gICAgICAgICAgJ2FjaGlldmVtZW50cy54Ym94bGl2ZS5jb20nLFxuICAgICAgICAgIGAvdXNlcnMveHVpZCgke3hpZH0pL2hpc3RvcnkvdGl0bGVzP29yZGVyQnk9dW5sb2NrVGltZWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogJ1hCTDMuMCB4PScgKyB1aHMgKyAnOycgKyB0aGlzLl9hcHBsaWNhdGlvbi53ZWJUb2tlbi5kYXRhLlRva2VuLFxuICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IHByZWZlcnJlZF9nYW1lX2xhbmd1YWdlLFxuICAgICAgICAgICAgJ3gteGJsLWNvbnRyYWN0LXZlcnNpb24nOiAyLFxuICAgICAgICAgICAgJ3gteGJsLWNsaWVudC1uYW1lJzogJ1hib3hBcHAnLFxuICAgICAgICAgICAgJ3gteGJsLWNsaWVudC10eXBlJzogJ1VXQScsXG4gICAgICAgICAgICAneC14YmwtY2xpZW50LXZlcnNpb24nOiAnMzkuMzkuMjIwMDEuMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBsb2cuaW5mbygnW2dldEhpc3RvcnlBY2hpdmVtZW50c10gZ2V0SGlzdG9yeUFjaGl2ZW1lbnRzOicsIEpTT04uc3RyaW5naWZ5KHJlcykpO1xuICAgICAgICAgIGlmIChyZXMudGl0bGVzKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlcy50aXRsZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnW2dldEhpc3RvcnlBY2hpdmVtZW50c10gZXJyb3I6JywgZSk7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFjaGl2ZW1lbnREZXRhaWwodGl0bGVJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgaHR0cCA9IG5ldyBIdHRwKCk7XG4gICAgY29uc3Qgc2V0dGluZ3M6IGFueSA9IHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5nZXQoJ3NldHRpbmdzJywge30pXG4gICAgY29uc3QgcHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2UgPSBzZXR0aW5ncy5wcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSB8fCAnZW4tVVMnXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdWhzID0gdGhpcy5fYXBwbGljYXRpb24ud2ViVG9rZW4uZGF0YS5EaXNwbGF5Q2xhaW1zLnh1aVswXS51aHM7XG4gICAgICBjb25zdCB4aWQgPSB0aGlzLl9hcHBsaWNhdGlvbi53ZWJUb2tlbi5kYXRhLkRpc3BsYXlDbGFpbXMueHVpWzBdLnhpZDtcblxuICAgICAgaHR0cFxuICAgICAgICAuZ2V0KFxuICAgICAgICAgICdhY2hpZXZlbWVudHMueGJveGxpdmUuY29tJyxcbiAgICAgICAgICBgL3VzZXJzL3h1aWQoJHt4aWR9KS9hY2hpZXZlbWVudHM/dGl0bGVJZD0ke3RpdGxlSWR9Jm1heEl0ZW1zPTEwMDBgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246ICdYQkwzLjAgeD0nICsgdWhzICsgJzsnICsgdGhpcy5fYXBwbGljYXRpb24ud2ViVG9rZW4uZGF0YS5Ub2tlbixcbiAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBwcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSxcbiAgICAgICAgICAgICd4LXhibC1jb250cmFjdC12ZXJzaW9uJzogMixcbiAgICAgICAgICAgICd4LXhibC1jbGllbnQtbmFtZSc6ICdYYm94QXBwJyxcbiAgICAgICAgICAgICd4LXhibC1jbGllbnQtdHlwZSc6ICdVV0EnLFxuICAgICAgICAgICAgJ3gteGJsLWNsaWVudC12ZXJzaW9uJzogJzM5LjM5LjIyMDAxLjAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5hY2hpZXZlbWVudHMpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzLmFjaGlldmVtZW50cyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdbZ2V0QWNoaXZlbWVudERldGFpbF0gZXJyb3I6JywgZSk7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSIsImltcG9ydCB7XG4gICAgc2NyZWVuLFxuICAgIEJyb3dzZXJXaW5kb3csXG4gICAgQnJvd3NlcldpbmRvd0NvbnN0cnVjdG9yT3B0aW9ucyxcbn0gZnJvbSAnZWxlY3Ryb24nXG5pbXBvcnQgU3RvcmUgZnJvbSAnZWxlY3Ryb24tc3RvcmUnXG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnXG5cbmV4cG9ydCBkZWZhdWx0ICh3aW5kb3dOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IEJyb3dzZXJXaW5kb3dDb25zdHJ1Y3Rvck9wdGlvbnMpOiBCcm93c2VyV2luZG93ID0+IHtcbiAgICBjb25zdCBrZXkgPSAnd2luZG93LXN0YXRlJ1xuICAgIGNvbnN0IG5hbWUgPSBgd2luZG93LXN0YXRlLXYyLSR7d2luZG93TmFtZX1gXG4gICAgY29uc3Qgc3RvcmUgPSBuZXcgU3RvcmUoeyBuYW1lIH0pXG4gICAgY29uc3QgZGVmYXVsdFNpemUgPSB7XG4gICAgICAgIHdpZHRoOiBvcHRpb25zLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0LFxuICAgIH1cbiAgICBsZXQgc3RhdGUgPSB7fVxuXG4gICAgY29uc3QgcmVzdG9yZSA9ICgpID0+IHN0b3JlLmdldChrZXksIGRlZmF1bHRTaXplKVxuXG4gICAgY29uc3QgZ2V0Q3VycmVudFBvc2l0aW9uID0gKCkgPT4ge1xuICAgICAgICB3aW4ucmVtb3ZlTWVudSgpXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gd2luLmdldFBvc2l0aW9uKClcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHdpbi5nZXRTaXplKClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHBvc2l0aW9uWzBdLFxuICAgICAgICAgICAgeTogcG9zaXRpb25bMV0sXG4gICAgICAgICAgICB3aWR0aDogc2l6ZVswXSxcbiAgICAgICAgICAgIGhlaWdodDogc2l6ZVsxXSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdpbmRvd1dpdGhpbkJvdW5kcyA9ICh3aW5kb3dTdGF0ZSwgYm91bmRzKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB3aW5kb3dTdGF0ZS54ID49IGJvdW5kcy54ICYmXG4gICAgICB3aW5kb3dTdGF0ZS55ID49IGJvdW5kcy55ICYmXG4gICAgICB3aW5kb3dTdGF0ZS54ICsgd2luZG93U3RhdGUud2lkdGggPD0gYm91bmRzLnggKyBib3VuZHMud2lkdGggJiZcbiAgICAgIHdpbmRvd1N0YXRlLnkgKyB3aW5kb3dTdGF0ZS5oZWlnaHQgPD0gYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0XG4gICAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCByZXNldFRvRGVmYXVsdHMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IHNjcmVlbi5nZXRQcmltYXJ5RGlzcGxheSgpLmJvdW5kc1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNpemUsIHtcbiAgICAgICAgICAgIHg6IChib3VuZHMud2lkdGggLSBkZWZhdWx0U2l6ZS53aWR0aCkgLyAyLFxuICAgICAgICAgICAgeTogKGJvdW5kcy5oZWlnaHQgLSBkZWZhdWx0U2l6ZS5oZWlnaHQpIC8gMixcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBlbnN1cmVWaXNpYmxlT25Tb21lRGlzcGxheSA9IHdpbmRvd1N0YXRlID0+IHtcbiAgICAgICAgY29uc3QgdmlzaWJsZSA9IHNjcmVlbi5nZXRBbGxEaXNwbGF5cygpLnNvbWUoZGlzcGxheSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93V2l0aGluQm91bmRzKHdpbmRvd1N0YXRlLCBkaXNwbGF5LmJvdW5kcylcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKCF2aXNpYmxlKSB7XG4gICAgICAgICAgICAvLyBXaW5kb3cgaXMgcGFydGlhbGx5IG9yIGZ1bGx5IG5vdCB2aXNpYmxlIG5vdy5cbiAgICAgICAgICAgIC8vIFJlc2V0IGl0IHRvIHNhZmUgZGVmYXVsdHMuXG4gICAgICAgICAgICByZXR1cm4gcmVzZXRUb0RlZmF1bHRzKClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2luZG93U3RhdGVcbiAgICB9XG5cbiAgICBjb25zdCBzYXZlU3RhdGUgPSAoKSA9PiB7XG4gICAgICAgIGlmICghd2luLmlzTWluaW1pemVkKCkgJiYgIXdpbi5pc01heGltaXplZCgpKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlLCBnZXRDdXJyZW50UG9zaXRpb24oKSlcbiAgICAgICAgfVxuICAgICAgICBzdG9yZS5zZXQoa2V5LCBzdGF0ZSlcbiAgICB9XG5cbiAgICBzdGF0ZSA9IGVuc3VyZVZpc2libGVPblNvbWVEaXNwbGF5KHJlc3RvcmUoKSlcblxuICAgIGNvbnN0IGJyb3dzZXJPcHRpb25zOiBCcm93c2VyV2luZG93Q29uc3RydWN0b3JPcHRpb25zID0ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgd2ViUHJlZmVyZW5jZXM6IHtcbiAgICAgICAgICAgIC8vIG5vZGVJbnRlZ3JhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIC8vIGNvbnRleHRJc29sYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgbm9kZUludGVncmF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbnRleHRJc29sYXRpb246IHRydWUsXG4gICAgICAgICAgICBlbmFibGVCbGlua0ZlYXR1cmVzOiAnJyxcbiAgICAgICAgICAgIHNhbmRib3g6IGZhbHNlLFxuICAgICAgICAgICAgcHJlbG9hZDogcGF0aC5qb2luKF9fZGlybmFtZSwgJ3ByZWxvYWQuanMnKSxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMud2ViUHJlZmVyZW5jZXMsXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9IaWRlTWVudUJhcjogdHJ1ZSxcbiAgICB9XG4gICAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coYnJvd3Nlck9wdGlvbnMpXG5cbiAgICB3aW4ub24oJ2Nsb3NlJywgc2F2ZVN0YXRlKVxuXG4gICAgcmV0dXJuIHdpblxufSIsImltcG9ydCBodHRwcyBmcm9tICdodHRwcydcbmltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuLi9hcHBsaWNhdGlvbidcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cCB7XG5cbiAgICBfYXBwbGljYXRpb246QXBwbGljYXRpb25cblxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uOkFwcGxpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gYXBwbGljYXRpb25cbiAgICB9XG5cbiAgICBnZXQoaG9zdDpzdHJpbmcsIHVybDogc3RyaW5nLCBtZXRob2QgPSAnR0VUJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlRGF0YSA9ICcnXG5cbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIGhvc3Q6IGhvc3QsXG4gICAgICAgICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSwgKHJlc3BvbnNlOmFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLm9uKCdkYXRhJywgKGRhdGE6YW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRGF0YSArPSBkYXRhXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1c0NvZGUgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgPD0gMjk5KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSFRUUCcsICdnZXQoJyt1cmwrJywgJyttZXRob2QrJykgcmVzb2x2ZTonLCByZXNwb25zZS5zdGF0dXNDb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldHVybkRhdGEgPSByZXNwb25zZURhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2VEYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlcnJvcil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBpcyBub3QgSlNPTi4uXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09IDIwNCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byByZXRyeS4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0KHVybCwgbWV0aG9kKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDc1MClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5EYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdIVFRQJywgJ2dldCgnK3VybCsnKSByZWplY3Q6JywgcmVzcG9uc2Uuc3RhdHVzQ29kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmVxLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXEuZW5kKClcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwb3N0KGhvc3Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIHBvc3REYXRhID0ge30sIGhlYWRlcnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlRGF0YSA9ICcnXG4gICAgICAgICAgICBjb25zdCBtZXJnZWRIZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9LCBoZWFkZXJzKVxuXG4gICAgICAgICAgICBjb25zdCByZXEgPSBodHRwcy5yZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICBob3N0OiBob3N0LFxuICAgICAgICAgICAgICAgIHBhdGg6IHVybCxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBtZXJnZWRIZWFkZXJzLFxuICAgICAgICAgICAgfSwgKHJlc3BvbnNlOmFueSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uub24oJ2RhdGEnLCAoZGF0YTphbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGFcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8PSAyOTkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdIVFRQJywgJ3Bvc3QoJyt1cmwrJykgcmVzb2x2ZTonLCByZXNwb25zZS5zdGF0dXNDb2RlLCByZXNwb25zZURhdGEuc3Vic3RyaW5nKDAsIDEwMCkpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXR1cm5EYXRhID0gcmVzcG9uc2VEYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkRhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZXJyb3Ipe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgaXMgbm90IEpTT04uLlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJldHVybkRhdGEpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0hUVFAnLCAncG9zdCgnK3VybCsnKSByZWplY3Q6JywgcmVzcG9uc2Uuc3RhdHVzQ29kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmVxLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJlcS53cml0ZShKU09OLnN0cmluZ2lmeShwb3N0RGF0YSkpXG5cbiAgICAgICAgICAgIHJlcS5lbmQoKVxuICAgICAgICB9KVxuICAgIH1cblxufSIsImltcG9ydCBjcmVhdGVXaW5kb3cgZnJvbSAnLi9jcmVhdGUtd2luZG93J1xuaW1wb3J0IHhDbG91ZEFwaSBmcm9tICcuL3hjbG91ZGFwaSdcbmltcG9ydCB4Ym94V29ya2VyIGZyb20gJy4veGJveFdvcmtlcidcbmltcG9ydCB7IHNldFVwZGF0ZU5vdGlmaWNhdGlvbiBhcyB1cGRhdGVyIH0gZnJvbSAnLi91cGRhdGVyJ1xuXG5leHBvcnQge1xuICAgIGNyZWF0ZVdpbmRvdyxcbiAgICB4Q2xvdWRBcGksXG4gICAgeGJveFdvcmtlcixcbiAgICB1cGRhdGVyLFxufVxuIiwiaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4uL2FwcGxpY2F0aW9uJ1xuaW1wb3J0IHhDbG91ZEFwaSwgeyBwbGF5UmVzdWx0IH0gZnJvbSAnLi94Y2xvdWRhcGknXG5cbmludGVyZmFjZSBzdHJlYW1TZXNzaW9uIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRhcmdldDogc3RyaW5nO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmd8J2hvbWUnfCdjbG91ZCc7XG4gICAgc3RhdGU/OiBzdHJpbmc7XG4gICAgd2FpdGluZ1RpbWVzPzogYW55O1xuICAgIHBsYXllclN0YXRlOiBzdHJpbmd8J3BlbmRpbmcnfCdzdGFydGVkJ3wncXVldWVkJ3wnZmFpbGVkJztcbiAgICBlcnJvckRldGFpbHM/OiB7XG4gICAgICAgIGNvZGU7XG4gICAgICAgIG1lc3NhZ2U7XG4gICAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtTWFuYWdlciB7XG5cbiAgICBfYXBwbGljYXRpb246QXBwbGljYXRpb25cblxuICAgIF9zZXNzaW9ucyA9IHt9XG4gICAgXG4gICAgY29uc3RydWN0b3IoYXBwbGljYXRpb24pe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uXG4gICAgfVxuXG4gICAgZ2V0QXBpKHR5cGUpOiB4Q2xvdWRBcGl7XG4gICAgICAgIGNvbnN0IHN0cmVhbWluZ1Rva2VucyA9IHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2VucztcblxuICAgICAgICBpZih0eXBlID09PSAnaG9tZScpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgeENsb3VkQXBpKFxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLFxuICAgICAgICAgICAgICAgIHN0cmVhbWluZ1Rva2Vucy54SG9tZVRva2VuLmdldERlZmF1bHRSZWdpb24oKS5iYXNlVXJpLnN1YnN0cmluZyg4KSxcbiAgICAgICAgICAgICAgICBzdHJlYW1pbmdUb2tlbnMueEhvbWVUb2tlbi5kYXRhLmdzVG9rZW4sXG4gICAgICAgICAgICAgICAgXCJob21lXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHhDbG91ZEFwaShcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbixcbiAgICAgICAgICAgICAgICBzdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4uZ2V0RGVmYXVsdFJlZ2lvbigpLmJhc2VVcmkuc3Vic3RyaW5nKDgpLFxuICAgICAgICAgICAgICAgIHN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5kYXRhLmdzVG9rZW4sXG4gICAgICAgICAgICAgICAgXCJjbG91ZFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0U2Vzc2lvbihzZXNzaW9uSWQ6c3RyaW5nKTpzdHJlYW1TZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25zW3Nlc3Npb25JZF1cbiAgICB9XG5cbiAgICBzdGFydFN0cmVhbSh0eXBlOnN0cmluZ3wnaG9tZSd8J2Nsb3VkJywgdGFyZ2V0KXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHR5cGUpLnN0YXJ0U3RyZWFtKHRhcmdldCkudGhlbigocGxheVJlc3VsdDpwbGF5UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAvLyB0aGlzLl9hcHBsaWNhdGlvbi5feENsb3VkQXBpLnN0YXJ0U3RyZWFtKHR5cGUsIHRhcmdldCkudGhlbigocGxheVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdHJlYW1tYW5hZ2VyIC0gc3RhcnRTdHJlYW06JywgcGxheVJlc3VsdClcblxuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHBsYXlSZXN1bHQuc2Vzc2lvblBhdGguc3BsaXQoJy8nKVszXVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtU2Vzc2lvbjpzdHJlYW1TZXNzaW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogcGxheVJlc3VsdC5zZXNzaW9uUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyU3RhdGU6ICdwZW5kaW5nJyxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbnNbc2Vzc2lvbklkXSA9IHN0cmVhbVNlc3Npb25cbiAgICAgICAgICAgICAgICB0aGlzLm1vbml0b3JTZXNzaW9uKHNlc3Npb25JZClcblxuICAgICAgICAgICAgICAgIHJlc29sdmUoc2Vzc2lvbklkKVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzdG9wU3RyZWFtKHNlc3Npb25JZCl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgICAgICAgIGlmKHNlc3Npb24gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdTZXNzaW9uIG5vdCBmb3VuZDogJytzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHNlc3Npb24udHlwZSkuc3RvcFN0cmVhbShzZXNzaW9uSWQpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDdXJyZW50IHNlc3Npb25zOicsIHRoaXMuX3Nlc3Npb25zKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zZXNzaW9uc1tzZXNzaW9uSWRdXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ25ldyBzZXNzaW9uczonLCB0aGlzLl9zZXNzaW9ucylcblxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZW5kU2RwKHNlc3Npb25JZDpzdHJpbmcsIHNkcDphbnkpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgICAgICAgICBpZihzZXNzaW9uID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHJlamVjdCgnU2Vzc2lvbiBub3QgZm91bmQ6ICcrc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdldEFwaShzZXNzaW9uLnR5cGUpLnNlbmRTZHAoc2Vzc2lvbklkLCBzZHApLnRoZW4oKHJlc3VsdCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHNlbmRDaGF0U2RwKHNlc3Npb25JZDpzdHJpbmcsIHNkcDphbnkpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgICAgICAgICBpZihzZXNzaW9uID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHJlamVjdCgnU2Vzc2lvbiBub3QgZm91bmQ6ICcrc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdldEFwaShzZXNzaW9uLnR5cGUpLnNlbmRDaGF0U2RwKHNlc3Npb25JZCwgc2RwKS50aGVuKChyZXN1bHQpID0+IHtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZW5kSWNlKHNlc3Npb25JZDpzdHJpbmcsIGljZTphbnkpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgICAgICAgICBpZihzZXNzaW9uID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHJlamVjdCgnU2Vzc2lvbiBub3QgZm91bmQ6ICcrc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdldEFwaShzZXNzaW9uLnR5cGUpLnNlbmRJY2Uoc2Vzc2lvbklkLCBpY2UpLnRoZW4oKHJlc3VsdCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHNlbmRLZWVwYWxpdmUoc2Vzc2lvbklkOnN0cmluZyl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgICAgICAgIGlmKHNlc3Npb24gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdTZXNzaW9uIG5vdCBmb3VuZDogJytzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHNlc3Npb24udHlwZSkuc2VuZEtlZXBhbGl2ZShzZXNzaW9uSWQpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBtb25pdG9yU2Vzc2lvbihzZXNzaW9uSWQpe1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnU3RyZWFtTWFuYWdlcicsICdtb25pdG9yU2Vzc2lvbignK3Nlc3Npb25JZCsnKSBjaGVja2luZyBzdGF0ZScpXG5cbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKVxuICAgICAgICAgICAgaWYoc2Vzc2lvbiA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ1N0cmVhbU1hbmFnZXInLCAnbW9uaXRvclNlc3Npb24oJytzZXNzaW9uSWQrJykgc2Vzc2lvbiBub3QgZm91bmQnKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXRBcGkodGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkudHlwZSkuZ2V0U3RyZWFtU3RhdGUoc2Vzc2lvbklkKS50aGVuKChyZXN1bHQ6YW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N0cmVhbW1hbmFnZXIgLSBzdGF0ZTonLCByZXN1bHQpXG5cbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS5zdGF0ZSA9IHJlc3VsdC5zdGF0ZVxuXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0LnN0YXRlID09PSAnUHJvdmlzaW9uZWQnKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkucGxheWVyU3RhdGUgPSAnc3RhcnRlZCdcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZihyZXN1bHQuc3RhdGUgPT09ICdQcm92aXNpb25pbmcnKXtcbiAgICAgICAgICAgICAgICAgICAgLy8gTGV0cyBsb29wIGFnYWluXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9uaXRvclNlc3Npb24oc2Vzc2lvbklkKVxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJlc3VsdC5zdGF0ZSA9PT0gJ1JlYWR5VG9Db25uZWN0Jyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvIE1TQUwgQXV0aFxuICAgICAgICAgICAgICAgICAgICAvLyBAVE9ETzogUmVmcmVzaCB0b2tlbiBpZiBleHBpcmVkP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uX3hhbC5nZXRNc2FsVG9rZW4odGhpcy5fYXBwbGljYXRpb24uX2F1dGhlbnRpY2F0aW9uLl90b2tlblN0b3JlKS50aGVuKChtc2FsVG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnR5cGUpLnNlbmRNU0FMQXV0aChzZXNzaW9uSWQsIG1zYWxUb2tlbi5kYXRhLmxwdCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb25pdG9yU2Vzc2lvbihzZXNzaW9uSWQpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNU0FMIEFVVEggRXJyb3I6JywgZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ01TQUwgQVVUSCBFcnJvcjonKyBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ01TQUwgQVVUSCBFcnJvcjonLCBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdNU0FMIEFVVEggRXJyb3I6JysgZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYocmVzdWx0LnN0YXRlID09PSAnV2FpdGluZ0ZvclJlc291cmNlcycpe1xuICAgICAgICAgICAgICAgICAgICAvLyBEbyBRdWV1ZSBsb2dpY1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS53YWl0aW5nVGltZXMgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFwaSh0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS50eXBlKS5nZXRXYWl0aW5nVGltZXModGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkudGFyZ2V0KS50aGVuKCh3YWl0aW5nVGltZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS53YWl0aW5nVGltZXMgPSB3YWl0aW5nVGltZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS5wbGF5ZXJTdGF0ZSA9ICdxdWV1ZWQnXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9uaXRvclNlc3Npb24oc2Vzc2lvbklkKVxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJlc3VsdC5zdGF0ZSA9PT0gJ0ZhaWxlZCcpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS5lcnJvckRldGFpbHMgPSByZXN1bHQuZXJyb3JEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnBsYXllclN0YXRlID0gJ2ZhaWxlZCdcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVW5rbm93biBzdGF0ZTonLCByZXN1bHQpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3RyZWFtbWFuYWdlciAtIGVycm9yIGNoZWNraW5nIHN0YXRlOicsIHNlc3Npb25JZCwgZXJyb3IpXG5cbiAgICAgICAgICAgICAgICBpZihlcnJvci5zdGF0dXMgPT09IDQwNCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnU3RyZWFtTWFuYWdlcicsICdTZXNzaW9uIG5vdCBmb3VuZCBvbiBzZXJ2ZXIuIFJlbW92aW5nIHNlc3Npb24uLi4nKVxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fc2Vzc2lvbnNbc2Vzc2lvbklkXVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9uaXRvclNlc3Npb24oc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sIDEwMDApXG4gICAgfVxuXG4gICAgZ2V0QWN0aXZlU2Vzc2lvbnMoKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKCdjbG91ZCcpLmdldEFjdGl2ZVNlc3Npb25zKCkudGhlbigocmVzdWx0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQWN0aXZlIHNlc3Npb25zOicsIHJlc3VsdClcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxufSIsImltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuLi9hcHBsaWNhdGlvbidcbmltcG9ydCBIVFRQIGZyb20gJy4vaHR0cCdcbmltcG9ydCBTdG9yZSBmcm9tICdlbGVjdHJvbi1zdG9yZSdcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmludGVyZmFjZSB0aXRsZUluZm9BcmdzIHtcbiAgICBQcm9kdWN0VGl0bGU6IHN0cmluZztcbiAgICBQdWJsaXNoZXJOYW1lOiBzdHJpbmc7XG4gICAgWENsb3VkVGl0bGVJZDogc3RyaW5nO1xuICAgIEltYWdlX1RpbGU6IGFueTtcbiAgICBJbWFnZV9Qb3N0ZXI6IGFueTtcbiAgICBTdHJlYW1hYmlsaXR5OiBhbnk7XG4gICAgQ2F0ZWdvcmllczogYW55O1xuICAgIExvY2FsaXplZENhdGVnb3JpZXM6IGFueTtcbiAgICBYQ2xvdWRPZmZlcmluZ3M6IGFueTtcbiAgICBYYm94VGl0bGVJZDogc3RyaW5nO1xuICAgIENoaWxkWGJveFRpdGxlSWRzOiBhbnk7XG4gICAgU3RvcmVJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZU1hbmFnZXIge1xuXG4gICAgX2FwcGxpY2F0aW9uOkFwcGxpY2F0aW9uXG4gICAgX3N0b3JlID0gbmV3IFN0b3JlKClcbiAgICBfaHR0cDpIVFRQXG5cbiAgICBfeENsb3VkVGl0bGVzID0ge31cbiAgICBfcHJvZHVjdElkUXVldWUgPSBbXVxuXG4gICAgX3hDbG91ZFJlY2VudFRpdGxlcyA9IHt9XG4gICAgX3hDbG91ZFJlY2VudFRpdGxlc0xhc3RVcGRhdGUgPSAwXG5cbiAgICBcbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbil7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gYXBwbGljYXRpb25cbiAgICAgICAgdGhpcy5faHR0cCA9IG5ldyBIVFRQKHRoaXMuX2FwcGxpY2F0aW9uKVxuICAgIH1cbiAgICAvLyBnZXRPZmZpY2lhbFRpdGxlcygpIHtcbiAgICAvLyAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIC8vICAgICAgICAgbGV0IG9mZmljaWFsVGl0bGVzID0gW107XG4gICAgLy8gICAgICAgICBheGlvc1xuICAgIC8vICAgICAgICAgLmdldCgnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9HZW9jbGQvWFN0cmVhbWluZy9jb250ZW50cy90aXRsZXMuanNvbj9yZWY9bWFpbicsIHtcbiAgICAvLyAgICAgICAgICAgICB0aW1lb3V0OiAyMCAqIDEwMDAsXG4gICAgLy8gICAgICAgICB9KVxuICAgIC8vICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAvLyAgICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZXMuZGF0YS5jb250ZW50O1xuICAgIC8vICAgICAgICAgICAgICAgICBjb25zdCBiYXNlNjRDb250ZW50Q2xlYW5lZCA9IGNvbnRlbnQucmVwbGFjZSgvXFxuL2csICcnKTtcblxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zdCBkZWNvZGVkQnVmZmVyID0gQnVmZmVyLmZyb20oYmFzZTY0Q29udGVudENsZWFuZWQsICdiYXNlNjQnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZENvbnRlbnQgPSBkZWNvZGVkQnVmZmVyLnRvU3RyaW5nKCd1dGYtOCcpO1xuXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGRlY29kZWRKc29uID0gSlNPTi5wYXJzZShkZWNvZGVkQ29udGVudCk7XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgb2ZmaWNpYWxUaXRsZXMgPSBkZWNvZGVkSnNvbi5Qcm9kdWN0cztcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgcmVzb2x2ZShvZmZpY2lhbFRpdGxlcyk7XG4gICAgLy8gICAgICAgICB9KVxuICAgIC8vICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgIC8vICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvZmZpY2lhbFRpdGxlcyBlcnJvcjonLCBlKVxuICAgIC8vICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgIC8vICAgICAgICAgfSk7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vIH1cblxuICAgIGdldE9mZmljaWFsVGl0bGVzKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBsZXQgb2ZmaWNpYWxUaXRsZXMgPSBbXTtcbiAgICAgICAgICAgIGF4aW9zXG4gICAgICAgICAgICAuZ2V0KCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvR2VvY2xkL1hTdHJlYW1pbmdAbWFpbi90aXRsZXMuanNvbicsIHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiAxMCAqIDEwMDAsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZmljaWFsVGl0bGVzID0gcmVzLmRhdGEuUHJvZHVjdHM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvZmZpY2lhbFRpdGxlczonLCBvZmZpY2lhbFRpdGxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUob2ZmaWNpYWxUaXRsZXMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKFtdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRHYW1lUGFzc1Byb2R1Y3RzKHRpdGxlcykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjdElkUXVldWUgPSBbXTtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aXRsZXMpKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aXRsZXMuZm9yRWFjaCh0aXRsZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlLmRldGFpbHMgJiYgdGl0bGUuZGV0YWlscy5wcm9kdWN0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElkUXVldWUucHVzaCh0aXRsZS5kZXRhaWxzLnByb2R1Y3RJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0T2ZmaWNpYWxUaXRsZXMoKS50aGVuKChvZmZpY2lhbFRpdGxlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VQcm9kdWN0SWRzID0gW1xuICAgICAgICAgICAgICAgICAgICAuLi5uZXcgU2V0KFsuLi5wcm9kdWN0SWRRdWV1ZSwgLi4ub2ZmaWNpYWxUaXRsZXNdKSxcbiAgICAgICAgICAgICAgICBdO1xuICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuX2h0dHAucG9zdCgnY2F0YWxvZy5nYW1lcGFzcy5jb20nLCAnL3YzL3Byb2R1Y3RzP21hcmtldD1VUyZsYW5ndWFnZT1lbi1VUyZoeWRyYXRpb249UmVtb3RlSGlnaFNhcHBoaXJlMCcsIHsgLy8gUmVtb3RlTG93SmFkZTBcbiAgICAgICAgICAgICAgICAgICAgJ1Byb2R1Y3RzJzogbWVyZ2VQcm9kdWN0SWRzLFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgJ21zLWN2JzogMCxcbiAgICAgICAgICAgICAgICAgICAgJ2NhbGxpbmctYXBwLW5hbWUnOiAnWGJveCBDbG91ZCBHYW1pbmcgV2ViJyxcbiAgICAgICAgICAgICAgICAgICAgJ2NhbGxpbmctYXBwLXZlcnNpb24nOiAnMjQuMTcuNjMnLFxuICAgIFxuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdDphbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdHMgPSByZXN1bHQuUHJvZHVjdHM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFRpdGxlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9kdWN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkVGl0bGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByb2R1Y3RzW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtZXJnZWRUaXRsZXMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGEuUHJvZHVjdFRpdGxlLmxvY2FsZUNvbXBhcmUoYi5Qcm9kdWN0VGl0bGUpLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG1lcmdlZFRpdGxlcyk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRHYW1lUGFzc1Byb2R1Y3RzIGVycm9yOicsIGUpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXROZXdUaXRsZXMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0KCdjYXRhbG9nLmdhbWVwYXNzLmNvbScsICcvc2lnbHMvdjI/aWQ9ZjEzY2Y2YjQtNTdlNi00NDU5LTg5ZGYtNmFlYzE4Y2YwNTM4Jm1hcmtldD1VUyZsYW5ndWFnZT1lbi1VUycpXG4gICAgfVxufVxuXG5pbnRlcmZhY2UgVGl0bGVEZXRhaWxzIHtcbiAgICB0aXRsZUlkOnN0cmluZztcbiAgICBkZXRhaWxzOiB7XG4gICAgICAgIHByb2R1Y3RJZDpzdHJpbmc7XG4gICAgICAgIHhib3hUaXRsZUlkOm51bWJlcjtcbiAgICAgICAgaGFzRW50aXRsZW1lbnQ6Ym9vbGVhbjtcbiAgICAgICAgc3VwcG9ydHNJbkFwcFB1cmNoYXNlczpib29sZWFuO1xuICAgICAgICBzdXBwb3J0ZWRUYWJzOiBhbnk7XG4gICAgICAgIHN1cHBvcnRlZElucHV0VHlwZXM6IGFueTtcbiAgICAgICAgcHJvZ3JhbXM6IGFueTtcbiAgICAgICAgdXNlclByb2dyYW1zOiBhbnk7XG4gICAgICAgIHVzZXJTdWJzY3JpcHRpb25zOiBhbnk7XG4gICAgICAgIGlzRnJlZUluU3RvcmU6IGJvb2xlYW47XG4gICAgICAgIG1heEdhbWVwbGF5VGltZUluU2Vjb25kczogbnVtYmVyO1xuICAgIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUaXRsZSB7XG5cbiAgICB0aXRsZUlkXG4gICAgcHJvZHVjdElkXG4gICAgeGJveFRpdGxlSWRcbiAgICBzdXBwb3J0ZWRJbnB1dFR5cGVzXG4gICAgY2F0YWxvZ0RldGFpbHNcblxuICAgIGNvbnN0cnVjdG9yKHRpdGxlOlRpdGxlRGV0YWlscyl7XG4gICAgICAgIHRoaXMudGl0bGVJZCA9IHRpdGxlLnRpdGxlSWRcbiAgICAgICAgdGhpcy5wcm9kdWN0SWQgPSB0aXRsZS5kZXRhaWxzLnByb2R1Y3RJZFxuICAgICAgICB0aGlzLnhib3hUaXRsZUlkID0gdGl0bGUuZGV0YWlscy54Ym94VGl0bGVJZFxuICAgICAgICB0aGlzLnN1cHBvcnRlZElucHV0VHlwZXMgPSB0aXRsZS5kZXRhaWxzLnN1cHBvcnRlZElucHV0VHlwZXNcbiAgICB9XG5cbiAgICBzZXRDYXRhbG9nRGV0YWlscyh0aXRsZUluZm86dGl0bGVJbmZvQXJncyl7XG4gICAgICAgIHRoaXMuY2F0YWxvZ0RldGFpbHMgPSB0aXRsZUluZm9cbiAgICB9XG5cbiAgICB0b1N0cmluZygpe1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcylcbiAgICB9XG5cbiAgICByZXN0b3JlRnJvbUNhY2hlKGNhY2hlZE9iail7XG4gICAgICAgIHRoaXMuY2F0YWxvZ0RldGFpbHMgPSBjYWNoZWRPYmouY2F0YWxvZ0RldGFpbHNcbiAgICB9XG59IiwiaW1wb3J0IHsgVG9rZW5TdG9yZSB9IGZyb20gJy4uL3hhbCdcbmltcG9ydCBTdG9yZSBmcm9tICdlbGVjdHJvbi1zdG9yZSdcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0aFRva2VuU3RvcmUgZXh0ZW5kcyBUb2tlblN0b3JlIHtcblxuICAgIHByaXZhdGUgX3N0b3JlID0gbmV3IFN0b3JlKClcblxuICAgIGxvYWQoKSB7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMuX3N0b3JlLmdldCgndXNlci50b2tlbnN0b3JlJywgJ3t9JykgYXMgc3RyaW5nXG4gICAgICAgIHRoaXMubG9hZEpzb24odG9rZW5zKVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgc2F2ZSgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHVzZXJUb2tlbjogdGhpcy5fdXNlclRva2VuPy5kYXRhLFxuICAgICAgICAgICAgc2lzdVRva2VuOiB0aGlzLl9zaXN1VG9rZW4/LmRhdGEsXG4gICAgICAgICAgICBqd3RLZXlzOiB0aGlzLl9qd3RLZXlzLFxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuX3N0b3JlLnNldCgndXNlci50b2tlbnN0b3JlJywgZGF0YSlcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5fc3RvcmUuZGVsZXRlKCd1c2VyLnRva2Vuc3RvcmUnKVxuICAgICAgICB0aGlzLl91c2VyVG9rZW4gPSB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5fc2lzdVRva2VuID0gdW5kZWZpbmVkXG4gICAgICAgIHRoaXMuX2p3dEtleXMgPSB1bmRlZmluZWRcbiAgICB9XG59IiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IGVsZWN0cm9uIGZyb20gJ2VsZWN0cm9uJ1xuaW1wb3J0IHsgY29tcGFyZSB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnXG5pbXBvcnQgZ2ggZnJvbSAnZ2l0aHViLXVybC10by1vYmplY3QnXG5pbXBvcnQgcGtnIGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbidcblxuLy8gQmFzZSBjb2RlIGJlbG93IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Fua3VyazkxL2VsZWN0cm9uLXVwZGF0ZS1ub3RpZmllci4gQ3JlZGl0cyB0byBAYW5rdXJrOTEuXG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgc2lsZW50PzogYm9vbGVhbjtcbiAgcHJlcmVsZWFzZXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgR2l0aHViUmVsZWFzZU9iamVjdCB7XG4gIHRhZ19uYW1lOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgaHRtbF91cmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRPcHRpb25zOiBPcHRpb25zID0ge1xuICAgIGRlYnVnOiBmYWxzZSwgLy8gZm9yY2UgcnVuIGluIGRldmVsb3BtZW50XG4gICAgc2lsZW50OiB0cnVlLFxuICAgIHByZXJlbGVhc2VzOiBmYWxzZSxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwZGF0ZU5vdGlmaWNhdGlvbihvcHRpb25zOiBPcHRpb25zID0gZGVmYXVsdE9wdGlvbnMsIGxvZ2dlcikge1xuICAgIGNvbnN0IHdpdGhEZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpXG5cbiAgICBpZiAoZWxlY3Ryb24uYXBwLmlzUmVhZHkoKSkge1xuICAgICAgICBjaGVja0ZvclVwZGF0ZXMod2l0aERlZmF1bHRzLCBsb2dnZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgZWxlY3Ryb24uYXBwLm9uKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgICAgIGNoZWNrRm9yVXBkYXRlcyh3aXRoRGVmYXVsdHMsIGxvZ2dlcilcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0ZvclVwZGF0ZXMoe3JlcG9zaXRvcnksIHRva2VuLCBkZWJ1Zywgc2lsZW50LCBwcmVyZWxlYXNlc306IE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucywgbG9nZ2VyKSB7XG4gICAgbG9nZ2VyLmxvZygndXBkYXRlcicsIF9fZmlsZW5hbWUrJ1tjaGVja0ZvclVwZGF0ZXMoKV0gUnVubmluZyB1cGRhdGVyLi4uJywgZWxlY3Ryb24uYXBwLmlzUGFja2FnZWQsIGRlYnVnKVxuICAgIGlmICghZWxlY3Ryb24uYXBwLmlzUGFja2FnZWQgJiYgIWRlYnVnKXtcbiAgICAgICAgbG9nZ2VyLmxvZygndXBkYXRlcicsIF9fZmlsZW5hbWUrJ1tjaGVja0ZvclVwZGF0ZXMoKV0gTm90IGNoZWNraW5nIGZvciB1cGRhdGVzIGJlY2F1c2UgYXBwIGlzIG5vdCBwYWNrYWdlZC4nKVxuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcG9zaXRvcnkpIHtcbiAgICAvLyBjb25zdCBwa2cgPSByZXF1aXJlKHBhdGguam9pbihlbGVjdHJvbi5hcHAuZ2V0QXBwUGF0aCgpLCAncGFja2FnZS5qc29uJykpXG4gICAgICAgIGNvbnN0IGdoT2JqID0gZ2gocGtnLnJlcG9zaXRvcnkpXG5cbiAgICAgICAgaWYgKCFnaE9iaikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXBvc2l0b3J5IFVSTCBub3QgZm91bmQgaW4gcGFja2FnZS5qc29uIGZpbGUuJylcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcG9zaXRvcnkgPSBnaE9iai51c2VyICsgJy8nICsgZ2hPYmoucmVwb1xuICAgIH1cblxuICAgIGxldCBsYXRlc3RSZWxlYXNlOiBudWxsIHwgR2l0aHViUmVsZWFzZU9iamVjdCA9IG51bGxcblxuICAgIHRyeSB7XG4gICAgICAgIGxvZ2dlci5sb2coJ3VwZGF0ZXInLCBfX2ZpbGVuYW1lKydbY2hlY2tGb3JVcGRhdGVzKCldIENoZWNraW5nIGZvciB1cGRhdGVzIG9uIEdpdEh1YjonLCBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG9zaXRvcnl9L3JlbGVhc2VzYClcbiAgICAgICAgY29uc3Qge2RhdGE6IHJlbGVhc2VzfSA9IGF3YWl0IGF4aW9zLmdldChgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG9zaXRvcnl9L3JlbGVhc2VzYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0b2tlbiA/IHthdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gfSA6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgKVxuXG4gICAgICAgIGZvcihjb25zdCByZWxlYXNlIGluIHJlbGVhc2VzKXtcbiAgICAgICAgICAgIGlmKHJlbGVhc2VzW3JlbGVhc2VdLnByZXJlbGVhc2UgPT09IHByZXJlbGVhc2VzKXtcbiAgICAgICAgICAgICAgICBsYXRlc3RSZWxlYXNlID0gcmVsZWFzZXNbcmVsZWFzZV0gYXMgR2l0aHViUmVsZWFzZU9iamVjdFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBsb2dnZXIubG9nKCd1cGRhdGVyJywgX19maWxlbmFtZSsnW2NoZWNrRm9yVXBkYXRlcygpXSBFcnJvciB3aGlsZSBjaGVja2luZyBmb3IgdXBkYXRlczonLCBlcnJvcilcblxuICAgICAgICBpZiAoIXNpbGVudCkge1xuICAgICAgICAgICAgc2hvd0RpYWxvZygnVW5hYmxlIHRvIGNoZWNrIGZvciB1cGRhdGVzIGF0IHRoaXMgbW9tZW50LiBUcnkgYWdhaW4uJywgJ2Vycm9yJylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbGF0ZXN0UmVsZWFzZSkgcmV0dXJuXG5cbiAgICBpZiAoY29tcGFyZShsYXRlc3RSZWxlYXNlLnRhZ19uYW1lLCBlbGVjdHJvbi5hcHAuZ2V0VmVyc2lvbigpLCAnPicpKSB7XG4gICAgICAgIGxvZ2dlci5sb2coJ3VwZGF0ZXInLCBfX2ZpbGVuYW1lKydbY2hlY2tGb3JVcGRhdGVzKCldIE5ldyB2ZXJzaW9uIGZvdW5kOicsIGxhdGVzdFJlbGVhc2UudGFnX25hbWUpXG4gICAgICAgIHNob3dVcGRhdGVEaWFsb2cobGF0ZXN0UmVsZWFzZSlcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIubG9nKCd1cGRhdGVyJywgX19maWxlbmFtZSsnW2NoZWNrRm9yVXBkYXRlcygpXSBBcHBsaWNhdGlvbiBpcyBuZXdlc3QgdmVyc2lvbi4gQ3VycmVudCB2ZXJzaW9uOicsIGVsZWN0cm9uLmFwcC5nZXRWZXJzaW9uKCksICdOZXdlc3QgdmVyc2lvbjonLCBsYXRlc3RSZWxlYXNlLnRhZ19uYW1lIClcbiAgICAgICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgICAgICAgIHNob3dEaWFsb2coYFlvdSBhcmUgYWxyZWFkeSBydW5uaW5nIHRoZSBsYXRlc3QgdmVyc2lvbi4gQ3VycmVudCB2ZXJzaW9uOiAke2VsZWN0cm9uLmFwcC5nZXRWZXJzaW9uKCl9LiBOZXdlc3QgdmVyc2lvbjogJHtsYXRlc3RSZWxlYXNlLnRhZ19uYW1lfWApXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93VXBkYXRlRGlhbG9nKHJlbGVhc2U6IEdpdGh1YlJlbGVhc2VPYmplY3QpIHtcbiAgICBlbGVjdHJvbi5kaWFsb2cuc2hvd01lc3NhZ2VCb3goXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiBlbGVjdHJvbi5hcHAuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgbWVzc2FnZTogJ05ldyByZWxlYXNlIGF2YWlsYWJsZScsXG4gICAgICAgICAgICBkZXRhaWw6IGBJbnN0YWxsZWQgVmVyc2lvbjogJHtlbGVjdHJvbi5hcHAuZ2V0VmVyc2lvbigpfVxcbkxhdGVzdCBWZXJzaW9uOiAke3JlbGVhc2UudGFnX25hbWV9XFxuXFxuJHtyZWxlYXNlLmJvZHl9YC50cmltKCksXG4gICAgICAgICAgICBidXR0b25zOiBbJ0Rvd25sb2FkJywgJ0xhdGVyJ10sXG4gICAgICAgICAgICBkZWZhdWx0SWQ6IDAsXG4gICAgICAgICAgICBjYW5jZWxJZDogMSxcbiAgICAgICAgfSxcbiAgICApXG4gICAgICAgIC50aGVuKCh7cmVzcG9uc2V9KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVjdHJvbi5zaGVsbC5vcGVuRXh0ZXJuYWwocmVsZWFzZS5odG1sX3VybClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpXG4gICAgICAgIH0pXG59XG5cbmNvbnN0IHNob3dEaWFsb2cgPSAoZGV0YWlsOiBzdHJpbmcsIHR5cGU6IHN0cmluZyA9ICdpbmZvJykgPT4ge1xuICAgIGVsZWN0cm9uLmRpYWxvZy5zaG93TWVzc2FnZUJveChcbiAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6IGVsZWN0cm9uLmFwcC5nZXROYW1lKCksXG4gICAgICAgICAgICBtZXNzYWdlOiAnVXBkYXRlIGNoZWNrZXInLFxuICAgICAgICAgICAgYnV0dG9uczogWydDbG9zZSddLFxuICAgICAgICAgICAgZGVmYXVsdElkOiAwLFxuICAgICAgICAgICAgY2FuY2VsSWQ6IDAsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgZGV0YWlsLFxuICAgICAgICB9LFxuICAgIClcbn0iLCJpbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHhib3hXb3JrZXIge1xuXG4gICAgX2FwcGxpY2F0aW9uOkFwcGxpY2F0aW9uXG4gICAgXG4gICAgX2ZyaWVuZHMgPSB7fVxuICAgIF9vbmxpbmVGcmllbmRzID0ge31cblxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuXG4gICAgICAgIC8vIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgLy8gICAgIHRoaXMuaW50ZXJ2YWxGcmllbmRzKCkgXG4gICAgICAgIC8vIH0sIDMwICogMTAwMCkgLy8gQXBpIGlzIGxpbWl0ZWQgdG8gMzAgcmVxdWVzdHMgcGVyIDMwMCBzZWNvbmRzLiAoMzAwLzMwID0gMTAgc2VjKVxuICAgICAgICBcbiAgICAgICAgLy8gdGhpcy5pbnRlcnZhbEZyaWVuZHMoKVxuICAgIH1cblxuICAgIGludGVydmFsRnJpZW5kcygpe1xuICAgICAgICAvLyBjb25zb2xlLmxvZygneGJveCB3b3JrZXIgbG9vcCBydW4nKVxuXG4gICAgICAgIHRoaXMudXBkYXRlRnJpZW5kcygpLnRoZW4oKGZyaWVuZHM6YW55KSA9PiB7XG4gICAgICAgICAgICAvLyBHZXQgYWxsIGZyaWVuZHNcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd4Ym94V29ya2VyIC0gVXBkYXRlZCBmcmllbmRzIHN1Y2Nlc3NmdWxseScpXG5cbiAgICAgICAgICAgIC8vIFNlbmQgb3ZlciBvbmxpbmUgZnJpZW5kc1xuICAgICAgICAgICAgY29uc3Qgb25saW5lRnJpZW5kcyA9IFtdXG4gICAgICAgICAgICBmb3IoY29uc3QgZnJpZW5kIGluIGZyaWVuZHMpe1xuICAgICAgICAgICAgICAgIGlmKGZyaWVuZHNbZnJpZW5kXS5wcmVzZW5jZVN0YXRlICE9PSAnT2ZmbGluZScpe1xuICAgICAgICAgICAgICAgICAgICBvbmxpbmVGcmllbmRzLnB1c2goZnJpZW5kc1tmcmllbmRdKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fb25saW5lRnJpZW5kcyA9IG9ubGluZUZyaWVuZHNcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygneGJveFdvcmtlciAtIEVycm9yIHVwZGF0aW5nIGZyaWVuZHM6JywgZXJyb3IpXG4gICAgICAgIH0pXG5cbiAgICB9XG5cbiAgICB1cGRhdGVGcmllbmRzKCl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fd2ViQXBpLmdldFByb3ZpZGVyKCdwZW9wbGUnKS5nZXRGcmllbmRzKCkudGhlbigoZnJpZW5kcykgPT4ge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBmcmllbmQgaW4gZnJpZW5kcy5wZW9wbGUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmllbmRzW2ZyaWVuZHMucGVvcGxlW2ZyaWVuZF0ueHVpZF0gPSBmcmllbmRzLnBlb3BsZVtmcmllbmRdXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9mcmllbmRzKVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbn0iLCJpbXBvcnQgaHR0cHMgZnJvbSBcImh0dHBzXCI7XG5pbXBvcnQgQXBwbGljYXRpb24gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCI7XG5pbXBvcnQgeyBBZGRyZXNzNiB9IGZyb20gXCJpcC1hZGRyZXNzXCI7XG5pbXBvcnQgeyBkZWZhdWx0U2V0dGluZ3MgfSBmcm9tIFwiLi4vLi4vcmVuZGVyZXIvY29udGV4dC91c2VyQ29udGV4dC5kZWZhdWx0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIHBsYXlSZXN1bHQge1xuICBzZXNzaW9uUGF0aDogc3RyaW5nO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIGV4Y2hhbmdlUmVzdWx0IHtcbiAgZXhjaGFuZ2VSZXNwb25zZTogc3RyaW5nO1xuICBlcnJvckRldGFpbHM6IHtcbiAgICBjb2RlOiBhbnk7XG4gICAgbWVzc2FnZTogYW55O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB4Q2xvdWRBcGkge1xuICBfYXBwbGljYXRpb247XG5cbiAgX2hvc3Q6IHN0cmluZztcbiAgX3Rva2VuOiBzdHJpbmc7XG4gIF90eXBlOiBcImhvbWVcIiB8IFwiY2xvdWRcIjtcblxuICBfc2Vzc2lvblBhdGg6IHN0cmluZztcblxuICBfZXhjaGFuZ2VDb3VudGVyID0gMDtcbiAgX2V4Y2hhbmdlVXJsID0gXCJcIjtcbiAgX2N1cnJlbnRHYW1lID0gXCJcIjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBhcHBsaWNhdGlvbjogQXBwbGljYXRpb24sXG4gICAgaG9zdDogc3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgdHlwZTogXCJob21lXCIgfCBcImNsb3VkXCIgPSBcImhvbWVcIlxuICApIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uO1xuICAgIHRoaXMuX2hvc3QgPSBob3N0O1xuICAgIHRoaXMuX3Rva2VuID0gdG9rZW47XG4gICAgdGhpcy5fdHlwZSA9IHR5cGU7XG4gIH1cblxuICBnZXQodXJsOiBzdHJpbmcsIG1ldGhvZCA9IFwiR0VUXCIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlRGF0YSA9IFwiXCI7XG5cbiAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBob3N0OiB0aGlzLl9ob3N0LFxuICAgICAgICAgIHBhdGg6IHVybCxcbiAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IFwiQmVhcmVyIFwiICsgdGhpcy5fdG9rZW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXNwb25zZS5vbihcImRhdGFcIiwgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGE7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXNwb25zZS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8PSAyOTkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgICAgIFwieENsb3VkQXBpXCIsXG4gICAgICAgICAgICAgICAgXCJob3N0OlwiICtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgK1xuICAgICAgICAgICAgICAgICAgXCIgZ2V0KFwiICtcbiAgICAgICAgICAgICAgICAgIHVybCArXG4gICAgICAgICAgICAgICAgICBcIiwgXCIgK1xuICAgICAgICAgICAgICAgICAgbWV0aG9kICtcbiAgICAgICAgICAgICAgICAgIFwiKSByZXNvbHZlOlwiLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbGV0IHJldHVybkRhdGEgPSByZXNwb25zZURhdGE7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBEYXRhIGlzIG5vdCBKU09OLi5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSAyMDQpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJldHJ5Li5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0KHVybCwgbWV0aG9kKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgNzUwKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJldHVybkRhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coXG4gICAgICAgICAgICAgICAgXCJ4Q2xvdWRBcGlcIixcbiAgICAgICAgICAgICAgICBcImdldChcIiArIHVybCArIFwiKSByZWplY3Q6XCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXEub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgICAgcmVxLmVuZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcG9zdCh1cmw6IHN0cmluZywgcG9zdERhdGEgPSB7fSwgaGVhZGVycyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCByZXNwb25zZURhdGEgPSBcIlwiO1xuICAgICAgY29uc3QgbWVyZ2VkSGVhZGVycyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogXCJCZWFyZXIgXCIgKyB0aGlzLl90b2tlbixcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGVyc1xuICAgICAgKTtcblxuICAgICAgY29uc3QgcmVxID0gaHR0cHMucmVxdWVzdChcbiAgICAgICAge1xuICAgICAgICAgIGhvc3Q6IHRoaXMuX2hvc3QsXG4gICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgaGVhZGVyczogbWVyZ2VkSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXNwb25zZS5vbihcImRhdGFcIiwgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGE7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXNwb25zZS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8PSAyOTkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgICAgIFwieENsb3VkQXBpXCIsXG4gICAgICAgICAgICAgICAgXCJwb3N0KFwiICsgdXJsICsgXCIpIHJlc29sdmU6XCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICByZXNwb25zZURhdGFcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBsZXQgcmV0dXJuRGF0YSA9IHJlc3BvbnNlRGF0YTtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm5EYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZURhdGEpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIERhdGEgaXMgbm90IEpTT04uLlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5EYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZyhcbiAgICAgICAgICAgICAgICBcInhDbG91ZEFwaVwiLFxuICAgICAgICAgICAgICAgIFwicG9zdChcIiArIHVybCArIFwiKSByZWplY3Q6XCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXEub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXEud3JpdGUoSlNPTi5zdHJpbmdpZnkocG9zdERhdGEpKTtcblxuICAgICAgcmVxLmVuZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0V2FpdGluZ1RpbWVzKHRpdGxlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCIvdjEvd2FpdHRpbWUvXCIgKyB0aXRsZUlkKTtcbiAgfVxuXG4gIGdldFRpdGxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCIvdjIvdGl0bGVzXCIpO1xuICB9XG5cbiAgZ2V0UmVjZW50VGl0bGVzKCkge1xuICAgIHJldHVybiB0aGlzLmdldChcIi92Mi90aXRsZXMvbXJ1P21yPTI1XCIpO1xuICB9XG5cbiAgc3RvcFN0cmVhbShzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQsIFwiREVMRVRFXCIpO1xuICB9XG5cbiAgc3RhcnRTdHJlYW0odGFyZ2V0OiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldChcbiAgICAgIFwic2V0dGluZ3NcIixcbiAgICAgIGRlZmF1bHRTZXR0aW5nc1xuICAgICk7XG4gICAgY29uc3QgZGV2aWNlSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGFwcEluZm86IHtcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgY2xpZW50QXBwSWQ6IFwid3d3Lnhib3guY29tXCIsXG4gICAgICAgICAgY2xpZW50QXBwVHlwZTogXCJicm93c2VyXCIsXG4gICAgICAgICAgY2xpZW50QXBwVmVyc2lvbjogXCIyMS4xLjk4XCIsXG4gICAgICAgICAgY2xpZW50U2RrVmVyc2lvbjogXCI4LjUuM1wiLFxuICAgICAgICAgIGh0dHBFbnZpcm9ubWVudDogXCJwcm9kXCIsXG4gICAgICAgICAgc2RrSW5zdGFsbElkOiBcIlwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRldjoge1xuICAgICAgICBodzoge1xuICAgICAgICAgIG1ha2U6IFwiTWljcm9zb2Z0XCIsXG4gICAgICAgICAgbW9kZWw6IFwiU3VyZmFjZSBQcm9cIixcbiAgICAgICAgICBzZGt0eXBlOiBcIndlYlwiLFxuICAgICAgICB9LFxuICAgICAgICBvczoge1xuICAgICAgICAgIG5hbWU6IHNldHRpbmdzLnJlc29sdXRpb24gPT0gMTA4MCA/IFwid2luZG93c1wiIDogXCJhbmRyb2lkXCIsXG4gICAgICAgICAgdmVyOiBcIjIyNjMxLjI3MTVcIixcbiAgICAgICAgICBwbGF0Zm9ybTogXCJkZXNrdG9wXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGRpc3BsYXlJbmZvOiB7XG4gICAgICAgICAgZGltZW5zaW9uczoge1xuICAgICAgICAgICAgd2lkdGhJblBpeGVsczogMTkyMCxcbiAgICAgICAgICAgIGhlaWdodEluUGl4ZWxzOiAxMDgwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGl4ZWxEZW5zaXR5OiB7XG4gICAgICAgICAgICBkcGlYOiAyLFxuICAgICAgICAgICAgZHBpWTogMixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvc3REYXRhID0ge1xuICAgICAgdGl0bGVJZDogdGhpcy5fdHlwZSA9PT0gXCJjbG91ZFwiID8gdGFyZ2V0IDogXCJcIixcbiAgICAgIHN5c3RlbVVwZGF0ZUdyb3VwOiBcIlwiLFxuICAgICAgY2xpZW50U2Vzc2lvbklkOiBcIlwiLFxuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgbmFub1ZlcnNpb246IFwiVjM7V2VicnRjVHJhbnNwb3J0LmRsbFwiLFxuICAgICAgICBlbmFibGVUZXh0VG9TcGVlY2g6IGZhbHNlLFxuICAgICAgICBoaWdoQ29udHJhc3Q6IDAsXG4gICAgICAgIGxvY2FsZTogc2V0dGluZ3MucHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2UgPyBzZXR0aW5ncy5wcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSA6ICdlbi1VUycsXG4gICAgICAgIHVzZUljZUNvbm5lY3Rpb246IGZhbHNlLFxuICAgICAgICB0aW1lem9uZU9mZnNldE1pbnV0ZXM6IDEyMCxcbiAgICAgICAgc2RrVHlwZTogXCJ3ZWJcIixcbiAgICAgICAgLy8gRm9yIHhDbG91ZCBzdHJlYW1pbmdcbiAgICAgICAgb3NOYW1lOiBzZXR0aW5ncy5yZXNvbHV0aW9uID09IDEwODAgPyBcIndpbmRvd3NcIiA6IFwiYW5kcm9pZFwiLFxuICAgICAgfSxcbiAgICAgIHNlcnZlcklkOiB0aGlzLl90eXBlID09PSBcImhvbWVcIiA/IHRhcmdldCA6IFwiXCIsXG4gICAgICBmYWxsYmFja1JlZ2lvbk5hbWVzOiBbXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucG9zdChcIi92NS9zZXNzaW9ucy9cIiArIHRoaXMuX3R5cGUgKyBcIi9wbGF5XCIsIHBvc3REYXRhLCB7XG4gICAgICBcIlgtTVMtRGV2aWNlLUluZm9cIjogZGV2aWNlSW5mbyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0cmVhbVN0YXRlKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc3RhdGVcIik7XG4gIH1cblxuICBzZW5kU2RwKHNlc3Npb25JZDogc3RyaW5nLCBzZHA6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBwb3N0RGF0YSA9IHtcbiAgICAgICAgbWVzc2FnZVR5cGU6IFwib2ZmZXJcIixcbiAgICAgICAgc2RwOiBzZHAsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjaGF0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgYnl0ZXNQZXJTYW1wbGU6IDIsXG4gICAgICAgICAgICBleHBlY3RlZENsaXBEdXJhdGlvbk1zOiAyMCxcbiAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICBjb2RlYzogXCJvcHVzXCIsXG4gICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJ3ZWJtXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVtQ2hhbm5lbHM6IDEsXG4gICAgICAgICAgICBzYW1wbGVGcmVxdWVuY3lIejogMjQwMDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGF0OiB7XG4gICAgICAgICAgICBtaW5WZXJzaW9uOiAxLFxuICAgICAgICAgICAgbWF4VmVyc2lvbjogMSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbnRyb2w6IHtcbiAgICAgICAgICAgIG1pblZlcnNpb246IDEsXG4gICAgICAgICAgICBtYXhWZXJzaW9uOiAzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgIG1pblZlcnNpb246IDEsXG4gICAgICAgICAgICBtYXhWZXJzaW9uOiA4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgbWluVmVyc2lvbjogMSxcbiAgICAgICAgICAgIG1heFZlcnNpb246IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucG9zdChcbiAgICAgICAgXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9zZHBcIixcbiAgICAgICAgcG9zdERhdGFcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc2RwXCIpXG4gICAgICAgICAgICAudGhlbigoc2RwUmVzdWx0OiBleGNoYW5nZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGNoYW5nZVNkcCA9IEpTT04ucGFyc2Uoc2RwUmVzdWx0LmV4Y2hhbmdlUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgIHJlc29sdmUoZXhjaGFuZ2VTZHApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzZW5kQ2hhdFNkcChzZXNzaW9uSWQ6IHN0cmluZywgc2RwOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcG9zdERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2VUeXBlOiBcIm9mZmVyXCIsXG4gICAgICAgIHNkcDogc2RwLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgaXNNZWRpYVN0cmVhbXNDaGF0UmVuZWdvdGlhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucG9zdChcbiAgICAgICAgXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9zZHBcIixcbiAgICAgICAgcG9zdERhdGFcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc2RwXCIpXG4gICAgICAgICAgICAudGhlbigoc2RwUmVzdWx0OiBleGNoYW5nZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGNoYW5nZVNkcCA9IEpTT04ucGFyc2Uoc2RwUmVzdWx0LmV4Y2hhbmdlUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgIHJlc29sdmUoZXhjaGFuZ2VTZHApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBjaGVja0ljZShzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHNldHRpbmdzOiBhbnkgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KFxuICAgICAgXCJzZXR0aW5nc1wiLFxuICAgICAgZGVmYXVsdFNldHRpbmdzXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5nZXQoXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9pY2VcIikudGhlbihcbiAgICAgICAgKGljZVJlc3VsdDogZXhjaGFuZ2VSZXN1bHQgfCBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoaWNlUmVzdWx0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0ljZShzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBfaWNlUmVzdWx0ID0gaWNlUmVzdWx0IGFzIGV4Y2hhbmdlUmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgZXhjaGFuZ2VJY2UgPSBKU09OLnBhcnNlKF9pY2VSZXN1bHQuZXhjaGFuZ2VSZXNwb25zZSk7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZENhbmRpZGF0ZXMgPSBbXTtcblxuICAgICAgICAgICAgLy8gRmluZCBUZXJlZG8gQWRkcmVzcyBhbmQgZXh0cmFjdCByZW1vdGUgaXBcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIGluIGV4Y2hhbmdlSWNlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZUFkZHJlc3MgPVxuICAgICAgICAgICAgICAgIGV4Y2hhbmdlSWNlW2NhbmRpZGF0ZV0uY2FuZGlkYXRlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUFkZHJlc3MubGVuZ3RoID4gNCAmJlxuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUFkZHJlc3NbNF0uc3Vic3RyKDAsIDQpID09PSBcIjIwMDFcIlxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3M2KGNhbmRpZGF0ZUFkZHJlc3NbNF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlcmVkbyA9IGFkZHJlc3MuaW5zcGVjdFRlcmVkbygpO1xuXG4gICAgICAgICAgICAgICAgY29tcHV0ZWRDYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlOlxuICAgICAgICAgICAgICAgICAgICBcImE9Y2FuZGlkYXRlOjEwIDEgVURQIDEgXCIgK1xuICAgICAgICAgICAgICAgICAgICB0ZXJlZG8uY2xpZW50NCArXG4gICAgICAgICAgICAgICAgICAgIFwiIDkwMDIgdHlwIGhvc3QgXCIsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogXCJpY2VDYW5kaWRhdGVcIixcbiAgICAgICAgICAgICAgICAgIHNkcE1MaW5lSW5kZXg6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgc2RwTWlkOiBcIjBcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb21wdXRlZENhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBjYW5kaWRhdGU6XG4gICAgICAgICAgICAgICAgICAgIFwiYT1jYW5kaWRhdGU6MTEgMSBVRFAgMSBcIiArXG4gICAgICAgICAgICAgICAgICAgIHRlcmVkby5jbGllbnQ0ICtcbiAgICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgICB0ZXJlZG8udWRwUG9ydCArXG4gICAgICAgICAgICAgICAgICAgIFwiIHR5cCBob3N0IFwiLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZVR5cGU6IFwiaWNlQ2FuZGlkYXRlXCIsXG4gICAgICAgICAgICAgICAgICBzZHBNTGluZUluZGV4OiBcIjBcIixcbiAgICAgICAgICAgICAgICAgIHNkcE1pZDogXCIwXCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb21wdXRlZENhbmRpZGF0ZXMucHVzaChleGNoYW5nZUljZVtjYW5kaWRhdGVdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgIC9hPWNhbmRpZGF0ZTooPzxmb3VuZGF0aW9uPlxcZCspICg/PGNvbXBvbmVudD5cXGQrKSBVRFAgKD88cHJpb3JpdHk+XFxkKykgKD88aXA+W15cXHNdKykgKD88cG9ydD5cXGQrKSAoPzx0aGVfcmVzdD4uKikvXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBsc3QgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgY29tcHV0ZWRDYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLmNhbmRpZGF0ZSA9PT0gXCJhPWVuZC1vZi1jYW5kaWRhdGVzXCIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwcyA9IHBhdHRlcm4uZXhlYyhpdGVtLmNhbmRpZGF0ZSkuZ3JvdXBzO1xuICAgICAgICAgICAgICBsc3QucHVzaChncm91cHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQZXJmZXJJUFY2XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuaXB2Nikge1xuICAgICAgICAgICAgICBsc3Quc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0SXAgPSBhLmlwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZElwID0gYi5pcDtcblxuICAgICAgICAgICAgICAgIHJldHVybiAhZmlyc3RJcC5pbmNsdWRlcyhcIjpcIikgJiYgc2Vjb25kSXAuaW5jbHVkZXMoXCI6XCIpXG4gICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgIDogLTE7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5kaWRhdGVzID0gW107XG4gICAgICAgICAgICBsZXQgZm91bmRhdGlvbiA9IDE7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmRpZGF0ZSA9IChjYW5kaWRhdGUpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGU6IGNhbmRpZGF0ZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogXCJpY2VDYW5kaWRhdGVcIixcbiAgICAgICAgICAgICAgICBzZHBNTGluZUluZGV4OiBcIjBcIixcbiAgICAgICAgICAgICAgICBzZHBNaWQ6IFwiMFwiLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbHN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgaXRlbS5mb3VuZGF0aW9uID0gZm91bmRhdGlvbjtcbiAgICAgICAgICAgICAgaXRlbS5wcmlvcml0eSA9IGZvdW5kYXRpb24gPT09IDEgPyAyMTMwNzA2NDMxIDogMTtcblxuICAgICAgICAgICAgICBuZXdDYW5kaWRhdGVzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3Q2FuZGlkYXRlKFxuICAgICAgICAgICAgICAgICAgYGE9Y2FuZGlkYXRlOiR7aXRlbS5mb3VuZGF0aW9ufSAxIFVEUCAke2l0ZW0ucHJpb3JpdHl9ICR7aXRlbS5pcH0gJHtpdGVtLnBvcnR9ICR7aXRlbS50aGVfcmVzdH1gXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICArK2ZvdW5kYXRpb247XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbmV3Q2FuZGlkYXRlcy5wdXNoKG5ld0NhbmRpZGF0ZShcImE9ZW5kLW9mLWNhbmRpZGF0ZXNcIikpO1xuXG4gICAgICAgICAgICByZXNvbHZlKG5ld0NhbmRpZGF0ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNlbmRJY2Uoc2Vzc2lvbklkOiBzdHJpbmcsIGljZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHBvc3REYXRhID0ge1xuICAgICAgICBtZXNzYWdlVHlwZTogXCJpY2VDYW5kaWRhdGVcIixcbiAgICAgICAgY2FuZGlkYXRlOiBpY2UsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnBvc3QoXG4gICAgICAgIFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvaWNlXCIsXG4gICAgICAgIHBvc3REYXRhXG4gICAgICApXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJY2Uoc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAgIC50aGVuKGNhbmRpZGF0ZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNhbmRpZGF0ZXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNlbmRNU0FMQXV0aChzZXNzaW9uSWQ6IHN0cmluZywgdXNlclRva2VuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wb3N0KFxuICAgICAgXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9jb25uZWN0XCIsXG4gICAgICB7XG4gICAgICAgIHVzZXJUb2tlbjogdXNlclRva2VuLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZW5kS2VlcGFsaXZlKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucG9zdChcbiAgICAgIFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIva2VlcGFsaXZlXCJcbiAgICApO1xuICB9XG5cbiAgZ2V0QWN0aXZlU2Vzc2lvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL2FjdGl2ZVwiKTtcbiAgfVxufVxuIiwiaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4vYXBwbGljYXRpb24nXG5pbXBvcnQgSXBjQ29uc29sZXMgZnJvbSAnLi9pcGMvY29uc29sZXMnXG5pbXBvcnQgSXBjU3RyZWFtaW5nIGZyb20gJy4vaXBjL3N0cmVhbWluZydcbmltcG9ydCBJcGN4Q2xvdWQgZnJvbSAnLi9pcGMveGNsb3VkJ1xuaW1wb3J0IElwY0FwcCBmcm9tICcuL2lwYy9hcHAnXG5pbXBvcnQgSXBjU2V0dGluZ3MgZnJvbSAnLi9pcGMvc2V0dGluZ3MnXG5cbmltcG9ydCB7IGlwY01haW4gfSBmcm9tICdlbGVjdHJvbidcblxuaW50ZXJmYWNlIElwY0NoYW5uZWxzIHtcbiAgICBzdHJlYW1pbmc6IElwY1N0cmVhbWluZztcbiAgICBjb25zb2xlczogSXBjQ29uc29sZXM7XG4gICAgYXBwOiBJcGNBcHA7XG4gICAgeENsb3VkOiBJcGN4Q2xvdWQ7XG4gICAgc2V0dGluZ3M6IElwY1NldHRpbmdzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcGMge1xuXG4gICAgX2FwcGxpY2F0aW9uOkFwcGxpY2F0aW9uXG5cbiAgICBfY2hhbm5lbHM6SXBjQ2hhbm5lbHNcblxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uOkFwcGxpY2F0aW9uKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxzID0ge1xuICAgICAgICAgICAgc3RyZWFtaW5nOiBuZXcgSXBjU3RyZWFtaW5nKHRoaXMuX2FwcGxpY2F0aW9uKSxcbiAgICAgICAgICAgIGNvbnNvbGVzOiBuZXcgSXBjQ29uc29sZXModGhpcy5fYXBwbGljYXRpb24pLFxuICAgICAgICAgICAgYXBwOiBuZXcgSXBjQXBwKHRoaXMuX2FwcGxpY2F0aW9uKSxcbiAgICAgICAgICAgIHhDbG91ZDogbmV3IElwY3hDbG91ZCh0aGlzLl9hcHBsaWNhdGlvbiksXG4gICAgICAgICAgICBzZXR0aW5nczogbmV3IElwY1NldHRpbmdzKHRoaXMuX2FwcGxpY2F0aW9uKSxcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcihjb25zdCBjaGFubmVsIGluIHRoaXMuX2NoYW5uZWxzKXtcbiAgICAgICAgICAgIGlwY01haW4ub24oY2hhbm5lbCwgKGV2ZW50LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbHNbY2hhbm5lbF0ub25FdmVudChjaGFubmVsLCBldmVudCwgYXJncykgXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIFxuICAgIH1cblxuICAgIHN0YXJ0VXAoKXtcbiAgICAgICAgZm9yKGNvbnN0IGNoYW5uZWwgaW4gdGhpcy5fY2hhbm5lbHMpe1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdJcGMnLCAnU3RhcnRpbmcgSVBDIGNoYW5uZWw6ICcgKyBjaGFubmVsKVxuXG4gICAgICAgICAgICBpZih0aGlzLl9jaGFubmVsc1tjaGFubmVsXS5zdGFydFVwKVxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxzW2NoYW5uZWxdLnN0YXJ0VXAoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Vc2VyTG9hZGVkKCl7XG4gICAgICAgIGZvcihjb25zdCBjaGFubmVsIGluIHRoaXMuX2NoYW5uZWxzKXtcbiAgICAgICAgICAgIGlmKHRoaXMuX2NoYW5uZWxzW2NoYW5uZWxdLm9uVXNlckxvYWRlZCl7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdJcGMnLCAnTG9hZGluZyBzdGFydHVwIGRhdGEgZm9yIElQQyBjaGFubmVsOiAnICsgY2hhbm5lbClcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsc1tjaGFubmVsXS5vblVzZXJMb2FkZWQoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSIsImltcG9ydCBJcGNCYXNlIGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IHNlc3Npb24gfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBjQXBwIGV4dGVuZHMgSXBjQmFzZSB7XG4gIC8vIF9zdHJlYW1pbmdTZXNzaW9uczphbnkgPSB7fVxuXG4gIGxvYWRDYWNoZWRVc2VyKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlclN0YXRlKCk7XG5cbiAgICAgIHJlc29sdmUodXNlcik7XG4gICAgfSk7XG4gIH1cblxuICBnZXRVc2VyU3RhdGUoKSB7XG4gICAgY29uc3QgZ2FtZXJ0YWcgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KFwidXNlci5nYW1lcnRhZ1wiKTtcbiAgICBjb25zdCBnYW1lcnBpYyA9IHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5nZXQoXCJ1c2VyLmdhbWVycGljXCIpO1xuICAgIGNvbnN0IGdhbWVyc2NvcmUgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KFwidXNlci5nYW1lcnNjb3JlXCIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZ25lZEluOiBnYW1lcnRhZyA/IHRydWUgOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwidXNlclwiLFxuICAgICAgZ2FtZXJ0YWc6IGdhbWVydGFnID8gZ2FtZXJ0YWcgOiBcIlwiLFxuICAgICAgZ2FtZXJwaWM6IGdhbWVycGljID8gZ2FtZXJwaWMgOiBcIlwiLFxuICAgICAgZ2FtZXJzY29yZTogZ2FtZXJzY29yZSA/IGdhbWVyc2NvcmUgOiBcIlwiLFxuICAgICAgbGV2ZWw6IHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5fYXBwTGV2ZWwsXG4gICAgfTtcbiAgfVxuXG4gIGdldEF1dGhTdGF0ZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICBpc0F1dGhlbnRpY2F0aW5nOiB0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uX2lzQXV0aGVudGljYXRpbmcsXG4gICAgICAgIGlzQXV0aGVudGljYXRlZDogdGhpcy5fYXBwbGljYXRpb24uX2F1dGhlbnRpY2F0aW9uLl9pc0F1dGhlbnRpY2F0ZWQsXG4gICAgICAgIHVzZXI6IHRoaXMuZ2V0VXNlclN0YXRlKCksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFwcExldmVsKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICByZXNvbHZlKHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5fYXBwTGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgY2hlY2tBdXRoZW50aWNhdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHJlc29sdmUodGhpcy5fYXBwbGljYXRpb24uX2F1dGhlbnRpY2F0aW9uLmNoZWNrQXV0aGVudGljYXRpb24oKSk7XG4gICAgfSk7XG4gIH1cblxuICBsb2dpbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5zdGFydEF1dGhmbG93KCk7XG4gICAgICByZXNvbHZlKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcXVpdCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ucXVpdCgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc3RhcnQoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnJlc3RhcnQoKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhckRhdGEoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNlc3Npb24uZGVmYXVsdFNlc3Npb25cbiAgICAgICAgLmNsZWFyU3RvcmFnZURhdGEoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX2F1dGhlbnRpY2F0aW9uLl90b2tlblN0b3JlLmNsZWFyKCk7XG4gICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmRlbGV0ZShcInVzZXJcIik7XG4gICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmRlbGV0ZShcImF1dGhcIik7XG5cbiAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coXG4gICAgICAgICAgICBcImF1dGhlbnRpY2F0aW9uXCIsXG4gICAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgICAgXCJbc3RhcnRJcGNFdmVudHMoKV0gUmVjZWl2ZWQgcmVzdGFydCByZXF1ZXN0LiBSZXN0YXJ0aW5nIGFwcGxpY2F0aW9uLi4uXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnJlc3RhcnQoKTtcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgXCJhdXRoZW50aWNhdGlvblwiLFxuICAgICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICAgIFwiW3N0YXJ0SXBjRXZlbnRzKCldIEVycm9yOiBGYWlsZWQgdG8gY2xlYXIgbG9jYWwgc3RvcmFnZSFcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRPbmxpbmVGcmllbmRzKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2FwcGxpY2F0aW9uLl94Ym94V29ya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gV29ya2VyIGlzIG5vdCBsb2FkZWQgeWV0Li5cbiAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHRoaXMuX2FwcGxpY2F0aW9uLl94Ym94V29ya2VyLl9vbmxpbmVGcmllbmRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uVWlTaG93bigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHJlc29sdmUoe30pO1xuICAgIH0pO1xuICB9XG5cbiAgaXNGdWxsc2NyZWVuKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgaXNGdWxsU2NyZWVuID0gdGhpcy5fYXBwbGljYXRpb24uX21haW5XaW5kb3cuaXNGdWxsU2NyZWVuKCk7XG4gICAgICByZXNvbHZlKGlzRnVsbFNjcmVlbilcbiAgICB9KTsgXG4gIH1cblxuICB0b2dnbGVGdWxsc2NyZWVuKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgaXNGdWxsU2NyZWVuID0gdGhpcy5fYXBwbGljYXRpb24uX21haW5XaW5kb3cuaXNGdWxsU2NyZWVuKCk7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fbWFpbldpbmRvdy5zZXRGdWxsU2NyZWVuKCFpc0Z1bGxTY3JlZW4pO1xuICAgICAgcmVzb2x2ZSh7fSlcbiAgICB9KTtcbiAgfVxuXG4gIGVudGVyRnVsbHNjcmVlbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9tYWluV2luZG93LnNldEZ1bGxTY3JlZW4odHJ1ZSk7XG4gICAgICByZXNvbHZlKHt9KVxuICAgIH0pO1xuICB9XG5cbiAgZXhpdEZ1bGxzY3JlZW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fbWFpbldpbmRvdy5zZXRGdWxsU2NyZWVuKGZhbHNlKTtcbiAgICAgIHJlc29sdmUoe30pXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuLi9hcHBsaWNhdGlvbidcblxuaW50ZXJmYWNlIEV2ZW50QXJncyB7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBkYXRhOiBhbnk7XG4gICAgZXJyb3I/OiBhbnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY0Jhc2Uge1xuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgY29uc3RydWN0b3IoYXBwbGljYXRpb246QXBwbGljYXRpb24pe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uXG4gICAgfVxuXG4gICAgb25FdmVudChjaGFubmVsLCBldmVudCwgYXJnczpFdmVudEFyZ3Mpe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0lwYzpSZWN2JywgJ1JlY2VpdmVkIGV2ZW50OiBbJytjaGFubmVsKyddJywgYXJncylcbiAgICAgICAgaWYodHlwZW9mIHRoaXNbYXJncy5hY3Rpb25dID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IChPYmplY3Qua2V5cyhhcmdzLmRhdGEpLmxlbmd0aCA+IDApID8gdGhpc1thcmdzLmFjdGlvbl0oYXJncy5kYXRhKSA6IHRoaXNbYXJncy5hY3Rpb25dKClcbiAgICAgICAgICAgIHJlc3BvbnNlLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZChjaGFubmVsLCB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGlkOiBhcmdzLmlkLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUjogSVBDIGNvbW11bmljYXRpb24gZXJyb3IgZnJvbSBiYWNrZW5kOicsIGVycm9yKVxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZChjaGFubmVsLCB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGlkOiBhcmdzLmlkLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0lwYycsICdFUlJPUjogQWN0aW9uIHdhcyBub3QgZm91bmQ6JywgYXJncy5hY3Rpb24sICdvbiBjaGFubmVsJywgY2hhbm5lbClcbiAgICAgICAgICAgIHRoaXMuc2VuZChjaGFubmVsLCB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBhcmdzLmFjdGlvbixcbiAgICAgICAgICAgICAgICBpZDogYXJncy5pZCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgICAgICBlcnJvcjogJ0lQQyBhY3Rpb24gZmFpbHVyZS4gQWN0aW9uIHdhcyBub3QgZm91bmQ6ICcrY2hhbm5lbCsnOicrYXJncy5hY3Rpb24sXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VuZChjaGFubmVsLCBhcmdzOkV2ZW50QXJncyl7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSXBjOlNlbmQnLCAnU2VuZGluZyBldmVudDogWycrY2hhbm5lbCsnXScsIEpTT04uc3RyaW5naWZ5KGFyZ3MpKVxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fbWFpbldpbmRvdy53ZWJDb250ZW50cy5zZW5kKGNoYW5uZWwsIHtcbiAgICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgICBpZDogYXJncy5pZCxcbiAgICAgICAgICAgIGRhdGE6IGFyZ3MuZGF0YSxcbiAgICAgICAgICAgIGVycm9yOiBhcmdzLmVycm9yLFxuICAgICAgICB9KVxuICAgIH1cbn0iLCJpbXBvcnQgSXBjQmFzZSBmcm9tICcuL2Jhc2UnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY0NvbnNvbGVzIGV4dGVuZHMgSXBjQmFzZSB7XG4gICAgLy8gX3N0cmVhbWluZ1Nlc3Npb25zOmFueSA9IHt9XG5cbiAgICBfY29uc29sZXMgPSBbXVxuICAgIF9jb25zb2xlc0xhc3RVcGRhdGUgPSAwXG5cbiAgICBnZXQoKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuX2NvbnNvbGVzTGFzdFVwZGF0ZSA8IERhdGUubm93KCkgLSA2MCoxMDAwKXtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl9hcHBsaWNhdGlvbi5fZXZlbnRzLl93ZWJBcGkuZ2V0UHJvdmlkZXIoJ3NtYXJ0Z2xhc3MnKS5nZXRDb25zb2xlc0xpc3QoKS50aGVuKChjb25zb2xlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl93ZWJBcGkuZ2V0UHJvdmlkZXIoJ3NtYXJ0Z2xhc3MnKS5nZXRDb25zb2xlc0xpc3QoKS50aGVuKChjb25zb2xlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb25zb2xlcyA9IGNvbnNvbGVzLnJlc3VsdFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb25zb2xlc0xhc3RVcGRhdGUgPSBEYXRlLm5vdygpXG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jb25zb2xlcylcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5fY29uc29sZXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxufSIsImltcG9ydCBJcGNCYXNlIGZyb20gJy4vYmFzZSdcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncyB9IGZyb20gJy4uLy4uL3JlbmRlcmVyL2NvbnRleHQvdXNlckNvbnRleHQuZGVmYXVsdHMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY1NldHRpbmdzIGV4dGVuZHMgSXBjQmFzZSB7XG5cbiAgICBzZXRTZXR0aW5ncyhhcmdzOih0eXBlb2YgZGVmYXVsdFNldHRpbmdzKSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3U2V0dGluZ3MgPSB7Li4uZGVmYXVsdFNldHRpbmdzLCAuLi5hcmdzfVxuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLnNldCgnc2V0dGluZ3MnLCBuZXdTZXR0aW5ncylcbiAgICAgICAgICAgIHJlc29sdmUobmV3U2V0dGluZ3MpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0U2V0dGluZ3MoKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHR5cGVvZiBkZWZhdWx0U2V0dGluZ3M+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5nZXQoJ3NldHRpbmdzJywgZGVmYXVsdFNldHRpbmdzKSBhcyBvYmplY3RcbiAgICAgICAgICAgIHJlc29sdmUoey4uLmRlZmF1bHRTZXR0aW5ncywgLi4uc2V0dGluZ3N9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJlc2V0U2V0dGluZ3MoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7Li4uZGVmYXVsdFNldHRpbmdzfVxuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmRlbGV0ZSgnc2V0dGluZ3MnKVxuXG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuc2V0KCdzZXR0aW5ncycsIHNldHRpbmdzKVxuICAgICAgICAgICAgcmVzb2x2ZShzZXR0aW5ncylcbiAgICAgICAgfSlcbiAgICB9XG59IiwiaW1wb3J0IElwY0Jhc2UgZnJvbSAnLi9iYXNlJ1xuaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4uL2FwcGxpY2F0aW9uJ1xuaW1wb3J0IFN0cmVhbU1hbmFnZXIgZnJvbSAnLi4vaGVscGVycy9zdHJlYW1tYW5hZ2VyJ1xuXG5pbnRlcmZhY2Ugc3RhcnRTdHJlYW1BcmdzIHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdGFyZ2V0OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBzZW5kU2RwQXJncyB7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgc2RwOiBhbnk7XG59XG5cbmludGVyZmFjZSBzZW5kSWNlQXJncyB7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgaWNlOiBhbnk7XG59XG5pbnRlcmZhY2Ugc2VuZEtlZXBhbGl2ZUFyZ3Mge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xufVxuaW50ZXJmYWNlIHN0b3BTdHJlYW1BcmdzIHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbn1cbmludGVyZmFjZSBnZXRQbGF5ZXJTdGF0ZUFyZ3Mge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcGNTdHJlYW1pbmcgZXh0ZW5kcyBJcGNCYXNlIHtcblxuICAgIF9zdHJlYW1NYW5hZ2VyOlN0cmVhbU1hbmFnZXJcblxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uOkFwcGxpY2F0aW9uKXtcbiAgICAgICAgc3VwZXIoYXBwbGljYXRpb24pXG5cbiAgICAgICAgdGhpcy5fc3RyZWFtTWFuYWdlciA9IG5ldyBTdHJlYW1NYW5hZ2VyKGFwcGxpY2F0aW9uKVxuICAgIH1cblxuICAgIHN0YXJ0U3RyZWFtKGFyZ3M6c3RhcnRTdHJlYW1BcmdzKXtcblxuICAgICAgICBpZihhcmdzLnR5cGUgPT09ICdob21lJyl7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5faXBjLl9jaGFubmVscy5jb25zb2xlcy5fY29uc29sZXNMYXN0VXBkYXRlID0gMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX2lwYy5fY2hhbm5lbHMueENsb3VkLl9yZWNlbnRUaXRsZXNMYXN0VXBkYXRlID0gMFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbU1hbmFnZXIuc3RhcnRTdHJlYW0oYXJncy50eXBlLCBhcmdzLnRhcmdldClcbiAgICB9XG5cbiAgICBzdG9wU3RyZWFtKGFyZ3M6c3RvcFN0cmVhbUFyZ3Mpe1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtTWFuYWdlci5zdG9wU3RyZWFtKGFyZ3Muc2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHNlbmRTZHAoYXJnczpzZW5kU2RwQXJncyl7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW1NYW5hZ2VyLnNlbmRTZHAoYXJncy5zZXNzaW9uSWQsIGFyZ3Muc2RwKVxuICAgIH1cblxuICAgIHNlbmRDaGF0U2RwKGFyZ3M6c2VuZFNkcEFyZ3Mpe1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtTWFuYWdlci5zZW5kQ2hhdFNkcChhcmdzLnNlc3Npb25JZCwgYXJncy5zZHApXG4gICAgfVxuXG4gICAgc2VuZEljZShhcmdzOnNlbmRJY2VBcmdzKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbU1hbmFnZXIuc2VuZEljZShhcmdzLnNlc3Npb25JZCwgYXJncy5pY2UpXG4gICAgfVxuXG4gICAgc2VuZEtlZXBhbGl2ZShhcmdzOnNlbmRLZWVwYWxpdmVBcmdzKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbU1hbmFnZXIuc2VuZEtlZXBhbGl2ZShhcmdzLnNlc3Npb25JZClcbiAgICB9XG5cbiAgICBnZXRQbGF5ZXJTdGF0ZShhcmdzOmdldFBsYXllclN0YXRlQXJncyl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9zdHJlYW1NYW5hZ2VyLmdldFNlc3Npb24oYXJncy5zZXNzaW9uSWQpKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFjdGl2ZVNlc3Npb25zKCl7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW1NYW5hZ2VyLmdldEFjdGl2ZVNlc3Npb25zKClcbiAgICB9XG5cbn0iLCJpbXBvcnQgSXBjQmFzZSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgQXBwbGljYXRpb24gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCI7XG5pbXBvcnQgVGl0bGVNYW5hZ2VyIGZyb20gXCIuLi9oZWxwZXJzL3RpdGxlbWFuYWdlclwiO1xuaW1wb3J0IEFjaGl2ZW1lbnRNYW5hZ2VyIGZyb20gXCIuLi9oZWxwZXJzL2FjaGl2ZW1lbnRtYW5hZ2VyXCI7XG5pbXBvcnQgeENsb3VkQXBpIGZyb20gXCIuLi9oZWxwZXJzL3hjbG91ZGFwaVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcGN4Q2xvdWQgZXh0ZW5kcyBJcGNCYXNlIHtcbiAgX3RpdGxlTWFuYWdlcjogVGl0bGVNYW5hZ2VyO1xuICBfYWNoaXZlbWVudE1hbmFnZXI6IEFjaGl2ZW1lbnRNYW5hZ2VyO1xuXG4gIF90aXRsZXNBcmVMb2FkZWQgPSBmYWxzZTtcblxuICBfdGl0bGVzID0gW107XG4gIF90aXRsZXNMYXN0VXBkYXRlID0gMDtcblxuICBfcmVjZW50VGl0bGVzID0gW107XG4gIF9yZWNlbnRUaXRsZXNMYXN0VXBkYXRlID0gMDtcblxuICBfbmV3VGl0bGVzID0gW107XG4gIF9uZXdUaXRsZXNMYXN0VXBkYXRlID0gMDtcblxuICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbjogQXBwbGljYXRpb24pIHtcbiAgICBzdXBlcihhcHBsaWNhdGlvbik7XG5cbiAgICB0aGlzLl90aXRsZU1hbmFnZXIgPSBuZXcgVGl0bGVNYW5hZ2VyKGFwcGxpY2F0aW9uKTtcbiAgICB0aGlzLl9hY2hpdmVtZW50TWFuYWdlciA9IG5ldyBBY2hpdmVtZW50TWFuYWdlcihhcHBsaWNhdGlvbik7XG4gIH1cblxuICBzdGFydFVwKCkge1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZyhcIklwYzp4Q2xvdWRcIiwgXCJTdGFydGluZyB4Q2xvdWQgSVBDIENoYW5uZWwuLi5cIik7XG4gIH1cblxuICBnZXRSZWNlbnRUaXRsZXMoKSB7XG4gICAgY29uc3Qgc3RyZWFtaW5nVG9rZW5zID0gdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zO1xuICAgIGNvbnN0IF94Q2xvdWRBcGkgPSBuZXcgeENsb3VkQXBpKFxuICAgICAgdGhpcy5fYXBwbGljYXRpb24sXG4gICAgICBzdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4uZ2V0RGVmYXVsdFJlZ2lvbigpLmJhc2VVcmkuc3Vic3RyaW5nKDgpLFxuICAgICAgc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmRhdGEuZ3NUb2tlbixcbiAgICAgIFwiY2xvdWRcIlxuICAgICk7XG4gICAgcmV0dXJuIF94Q2xvdWRBcGkuZ2V0UmVjZW50VGl0bGVzKCk7XG4gIH1cblxuICBnZXRYaG9tZVRva2VuKCkge1xuICAgIGNvbnNvbGUubG9nKFwiZ2V0WGhvbWVUb2tlblwiKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zICYmXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2Vucy54SG9tZVRva2VuXG4gICAgICApIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnMueEhvbWVUb2tlbi5kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRYaG9tZVRva2VuRGVmYXVsdChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2Vucy54SG9tZVRva2VuLnNldERlZmF1bHRSZWdpb24obmFtZSk7XG4gICAgICByZXNvbHZlKG51bGwpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0WGNsb3VkVG9rZW4oKSB7XG4gICAgY29uc29sZS5sb2coXCJnZXRYY2xvdWRUb2tlblwiKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zICYmXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlblxuICAgICAgKSB7XG4gICAgICAgIHJlc29sdmUodGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFhjbG91ZFRva2VuRGVmYXVsdChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4pIHtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLnNldERlZmF1bHRSZWdpb24obmFtZSk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKHt9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFRpdGxlcygpIHtcbiAgICBjb25zdCBzdHJlYW1pbmdUb2tlbnMgPSB0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnM7XG4gICAgY29uc3QgX3hDbG91ZEFwaSA9IG5ldyB4Q2xvdWRBcGkoXG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbixcbiAgICAgIHN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5nZXREZWZhdWx0UmVnaW9uKCkuYmFzZVVyaS5zdWJzdHJpbmcoOCksXG4gICAgICBzdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4uZGF0YS5nc1Rva2VuLFxuICAgICAgXCJjbG91ZFwiXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgX3hDbG91ZEFwaVxuICAgICAgICAuZ2V0VGl0bGVzKClcbiAgICAgICAgLnRoZW4oKHRpdGxlczogYW55KSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh0aXRsZXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRHYW1lUGFzc1Byb2R1Y3RzKHRpdGxlczogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuX3RpdGxlTWFuYWdlci5nZXRHYW1lUGFzc1Byb2R1Y3RzKHRpdGxlcyk7XG4gIH1cblxuICBnZXROZXdUaXRsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RpdGxlTWFuYWdlci5nZXROZXdUaXRsZXMoKTtcbiAgfVxuXG4gIGdldEhpc3RvcnlBY2hpdmVtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYWNoaXZlbWVudE1hbmFnZXIuZ2V0SGlzdG9yeUFjaGl2ZW1lbnRzKCk7XG4gIH1cblxuICBnZXRBY2hpdmVtZW50RGV0YWlsKHRpdGxlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9hY2hpdmVtZW50TWFuYWdlci5nZXRBY2hpdmVtZW50RGV0YWlsKHRpdGxlSWQpO1xuICB9XG59XG4iLCJpbXBvcnQgVG9rZW5TdG9yZSBmcm9tICcuL3Rva2Vuc3RvcmUnXG5pbXBvcnQgWGFsIGZyb20gJy4veGFsJ1xuXG5leHBvcnQge1xuICAgIFRva2VuU3RvcmUsXG4gICAgWGFsLFxufSIsImltcG9ydCB7IEluY29taW5nSHR0cEhlYWRlcnMgfSBmcm9tICdodHRwJ1xuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIdHRwIHtcblxuICAgIGdldFJlcXVlc3QoaG9zdCwgcGF0aCwgaGVhZGVycykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SHR0cFJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IGhvc3RIZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgIC8vICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxuICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgcG9ydDogNDQzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhvc3RIZWFkZXJzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3Qob3B0aW9ucywgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZURhdGEgPSAnJ1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJlcy5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRGF0YSArPSBkYXRhXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJlcy5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXNDb2RlID09IDIwMCB8fCByZXMuc3RhdHVzQ29kZSA9PSAyMDQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2VEYXRhLnRvU3RyaW5nKCkgPT09ICcnKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBIdHRwUmVzcG9uc2Uoe30sIHJlcy5oZWFkZXJzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgSHR0cFJlc3BvbnNlKEpTT04ucGFyc2UocmVzcG9uc2VEYXRhLnRvU3RyaW5nKCkpLCByZXMuaGVhZGVycykpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c2NvZGU6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlc3BvbnNlRGF0YS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdFcnJvciBmZXRjaGluZyAnK2hvc3QrcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXEub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmVxLmVuZCgpXG5cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwb3N0UmVxdWVzdChob3N0LCBwYXRoLCBoZWFkZXJzLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxIdHRwUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgaG9zdEhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgLy8gJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZih0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnN0cmluZ2lmeShkYXRhKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxuICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgcG9ydDogNDQzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhvc3RIZWFkZXJzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG9wdGlvbnMsIGRhdGEpXG5cbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3Qob3B0aW9ucywgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZURhdGEgPSAnJ1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJlcy5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRGF0YSArPSBkYXRhXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJlcy5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXNDb2RlID09IDIwMCB8fCByZXMuc3RhdHVzQ29kZSA9PSAyMDIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2VEYXRhLnRvU3RyaW5nKCkgPT09ICcnKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBIdHRwUmVzcG9uc2Uoe30sIHJlcy5oZWFkZXJzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgSHR0cFJlc3BvbnNlKEpTT04ucGFyc2UocmVzcG9uc2VEYXRhLnRvU3RyaW5nKCkpLCByZXMuaGVhZGVycykpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c2NvZGU6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlc3BvbnNlRGF0YS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdFcnJvciBmZXRjaGluZyAnK2hvc3QrcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXEub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmVxLndyaXRlKGRhdGEpXG4gICAgICAgICAgICByZXEuZW5kKClcblxuICAgICAgICB9KVxuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgSHR0cFJlc3BvbnNlIHtcblxuICAgIGRhdGE6YW55XG4gICAgaGVhZGVyczpJbmNvbWluZ0h0dHBIZWFkZXJzXG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOmFueSwgaGVhZGVyczpJbmNvbWluZ0h0dHBIZWFkZXJzKXtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzXG4gICAgfVxuXG4gICAgaGVhZGVyKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlcnNcbiAgICB9XG5cbiAgICBib2R5KCl7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW4ge1xuICAgIGRhdGE6YW55XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVTZWNvbmRzTGVmdChkYXRlOkRhdGUpe1xuICAgICAgICBjb25zdCBleHBpcmVzT24gPSBkYXRlXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigoZXhwaXJlc09uLmdldFRpbWUoKSAtIGN1cnJlbnREYXRlLmdldFRpbWUoKSkgLyAxMDAwKVxuICAgIH1cblxuICAgIGdldFNlY29uZHNWYWxpZCgpe1xuICAgICAgICBjb25zb2xlLmxvZygnV2FybmluZzogZ2V0U2Vjb25kc1ZhbGlkIG5vdCBpbXBsZW1lbnRlZCcpXG5cbiAgICAgICAgcmV0dXJuIDBcbiAgICB9XG5cbiAgICBpc1ZhbGlkKCl7IFxuICAgICAgICBjb25zb2xlLmxvZygnV2FybmluZzogaXNWYWxpZCBub3QgaW1wbGVtZW50ZWQnKVxuXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGdldFVzZXJIYXNoKCl7XG4gICAgICAgIGlmKCdVc2VyVG9rZW4nIGluIHRoaXMuZGF0YSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLlVzZXJUb2tlbi5EaXNwbGF5Q2xhaW1zLnh1aVswXS51aHNcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGdldEdhbWVydGFnKCl7XG4gICAgICAgIGlmKCdBdXRob3JpemF0aW9uVG9rZW4nIGluIHRoaXMuZGF0YSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLkF1dGhvcml6YXRpb25Ub2tlbi5EaXNwbGF5Q2xhaW1zLnh1aVswXS5ndGdcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbn0iLCJpbXBvcnQgVG9rZW4gZnJvbSAnLi4vdG9rZW4nXG5cbmV4cG9ydCBpbnRlcmZhY2UgSURldmljZUNvZGUge1xuICAgIElzc3VlSW5zdGFudDogc3RyaW5nXG4gICAgTm90QWZ0ZXI6IHN0cmluZ1xuICAgIFRva2VuOiBzdHJpbmdcbiAgICBEaXNwbGF5Q2xhaW1zOiB7XG4gICAgICAgIHh1aToge1xuICAgICAgICAgICAgdWhzOiBzdHJpbmdcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGV2aWNlVG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gICAgZGF0YTpJRGV2aWNlQ29kZVxuXG4gICAgY29uc3RydWN0b3IoZGF0YTpJRGV2aWNlQ29kZSkge1xuICAgICAgICBzdXBlcihkYXRhKVxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfVxuXG4gICAgZ2V0U2Vjb25kc1ZhbGlkKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5Ob3RBZnRlcikpXG4gICAgfVxuXG4gICAgaXNWYWxpZCgpe1xuXG4gICAgICAgIGlmKHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLk5vdEFmdGVyKSkgPD0gMCl7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxufSIsImltcG9ydCBUb2tlbiBmcm9tICcuLi90b2tlbidcbmltcG9ydCBVc2VyVG9rZW4gZnJvbSAnLi91c2VydG9rZW4nXG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1zYWxUb2tlbiB7XG4gICAgbHB0OiBzdHJpbmdcbiAgICByZWZyZXNoX3Rva2VuOiBzdHJpbmdcbiAgICB1c2VyX2lkOiBzdHJpbmdcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXNhbFRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICAgIGRhdGE6SU1zYWxUb2tlblxuXG4gICAgY29uc3RydWN0b3IoZGF0YTpJTXNhbFRva2VuKSB7XG4gICAgICAgIHN1cGVyKGRhdGEpXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9XG59IiwiaW1wb3J0IFRva2VuIGZyb20gJy4uL3Rva2VuJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElTaXN1VG9rZW4ge1xuICAgIERldmljZVRva2VuOiBzdHJpbmdcbiAgICBUaXRsZVRva2VuOiBJU2lzdVRpdGxlVG9rZW5cbiAgICBVc2VyVG9rZW46IElTaXN1VXNlclRva2VuXG4gICAgQXV0aG9yaXphdGlvblRva2VuXG4gICAgV2ViUGFnZTogc3RyaW5nXG4gICAgU2FuZGJveDogc3RyaW5nXG4gICAgVXNlTW9kZXJuR2FtZXJ0YWc6IGJvb2xlYW5cbiAgICBGbG93OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIElTaXN1VXNlclRva2VuIHtcbiAgICBJc3N1ZUluc3RhbnQ6IHN0cmluZ1xuICAgIE5vdEFmdGVyOiBzdHJpbmdcbiAgICBUb2tlbjogc3RyaW5nXG4gICAgRGlzcGxheUNsYWltczoge1xuICAgICAgICB4dWk6IHtcbiAgICAgICAgICAgIHVoczogc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmludGVyZmFjZSBJU2lzdVRpdGxlVG9rZW4ge1xuICAgIElzc3VlSW5zdGFudDogc3RyaW5nXG4gICAgTm90QWZ0ZXI6IHN0cmluZ1xuICAgIFRva2VuOiBzdHJpbmdcbiAgICBEaXNwbGF5Q2xhaW1zOiB7XG4gICAgICAgIHh0aToge1xuICAgICAgICAgICAgdGlkOiBzdHJpbmdcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lzdVRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICAgIGRhdGE6SVNpc3VUb2tlblxuXG4gICAgY29uc3RydWN0b3IoZGF0YTpJU2lzdVRva2VuKSB7XG4gICAgICAgIHN1cGVyKGRhdGEpXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9XG5cbiAgICBnZXRTZWNvbmRzVmFsaWQoKXtcbiAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnRUaXRsZSA9IHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLlRpdGxlVG9rZW4uTm90QWZ0ZXIpKVxuICAgICAgICBjb25zdCBzZWNvbmRzTGVmdFVzZXIgPSB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5Vc2VyVG9rZW4uTm90QWZ0ZXIpKVxuICAgICAgICBjb25zdCBzZWNvbmRzTGVmdEF1dGhvcml6YXRpb24gPSB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5BdXRob3JpemF0aW9uVG9rZW4uTm90QWZ0ZXIpKVxuICAgICAgICByZXR1cm4gTWF0aC5taW4oc2Vjb25kc0xlZnRUaXRsZSwgc2Vjb25kc0xlZnRVc2VyLCBzZWNvbmRzTGVmdEF1dGhvcml6YXRpb24pXG4gICAgfVxuXG4gICAgaXNWYWxpZCgpe1xuICAgICAgICBjb25zdCBzZWNvbmRzTGVmdFRpdGxlID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuVGl0bGVUb2tlbi5Ob3RBZnRlcikpXG4gICAgICAgIGlmKHNlY29uZHNMZWZ0VGl0bGUgPD0gMCl7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlY29uZHNMZWZ0VXNlciA9IHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLlVzZXJUb2tlbi5Ob3RBZnRlcikpXG4gICAgICAgIGlmKHNlY29uZHNMZWZ0VXNlciA8PSAwKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnRBdXRob3JpemF0aW9uID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuQXV0aG9yaXphdGlvblRva2VuLk5vdEFmdGVyKSlcbiAgICAgICAgaWYoc2Vjb25kc0xlZnRBdXRob3JpemF0aW9uIDw9IDApe1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGdldFVzZXJIYXNoKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuVXNlclRva2VuLkRpc3BsYXlDbGFpbXMueHVpWzBdLnVoc1xuICAgIH1cblxuICAgIGdldEdhbWVydGFnKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuQXV0aG9yaXphdGlvblRva2VuLkRpc3BsYXlDbGFpbXMueHVpWzBdLmd0Z1xuICAgIH1cbn0iLCJpbXBvcnQgVG9rZW4gZnJvbSAnLi4vdG9rZW4nXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbVRva2VuIHtcbiAgICBvZmZlcmluZ1NldHRpbmdzOiBJT2ZmZXJpbmdTZXR0aW5nc1xuICAgIG1hcmtldDogc3RyaW5nXG4gICAgZ3NUb2tlbjogc3RyaW5nXG4gICAgdG9rZW5UeXBlOiBzdHJpbmdcbiAgICBkdXJhdGlvbkluU2Vjb25kczogbnVtYmVyXG59XG4gIFxuZXhwb3J0IGludGVyZmFjZSBJT2ZmZXJpbmdTZXR0aW5ncyB7XG4gICAgYWxsb3dSZWdpb25TZWxlY3Rpb246IGJvb2xlYW5cbiAgICByZWdpb25zOiBJUmVnaW9uW11cbiAgICBzZWxlY3RhYmxlU2VydmVyVHlwZXM6IGFueVxuICAgIGNsaWVudENsb3VkU2V0dGluZ3M6IElDbGllbnRDbG91ZFNldHRpbmdzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlZ2lvbiB7XG4gICAgbmFtZTogc3RyaW5nXG4gICAgYmFzZVVyaTogc3RyaW5nXG4gICAgbmV0d29ya1Rlc3RIb3N0bmFtZTogc3RyaW5nXG4gICAgaXNEZWZhdWx0OiBib29sZWFuXG4gICAgc3lzdGVtVXBkYXRlR3JvdXBzOiBhbnlcbiAgICBmYWxsYmFja1ByaW9yaXR5OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xpZW50Q2xvdWRTZXR0aW5ncyB7XG4gICAgRW52aXJvbm1lbnRzOiBJRW52aXJvbm1lbnRbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFbnZpcm9ubWVudCB7XG4gICAgTmFtZTogc3RyaW5nXG4gICAgQXV0aEJhc2VVcmk/OiBzdHJpbmdcbn0gIFxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1pbmdUb2tlbiBleHRlbmRzIFRva2VuIHtcblxuICAgIHB1YmxpYyBkYXRhOklTdHJlYW1Ub2tlblxuICAgIHByaXZhdGUgX29iamVjdENyZWF0ZVRpbWUgPSBEYXRlLm5vdygpXG5cbiAgICBjb25zdHJ1Y3Rvcih0b2tlbkRhdGE6SVN0cmVhbVRva2VuKXtcbiAgICAgICAgc3VwZXIodG9rZW5EYXRhKVxuICAgICAgICB0aGlzLmRhdGEgPSB0b2tlbkRhdGFcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVTZWNvbmRzTGVmdChkYXRlOkRhdGUpe1xuICAgICAgICBjb25zdCBleHBpcmVzT24gPSBkYXRlXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigoZXhwaXJlc09uLmdldFRpbWUoKSAtIGN1cnJlbnREYXRlLmdldFRpbWUoKSkgLyAxMDAwKVxuICAgIH1cblxuICAgIGdldFNlY29uZHNWYWxpZCgpe1xuICAgICAgICBpZih0aGlzLl9vYmplY3RDcmVhdGVUaW1lICsgKHRoaXMuZGF0YS5kdXJhdGlvbkluU2Vjb25kcyoxMDAwKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLl9vYmplY3RDcmVhdGVUaW1lICsgKHRoaXMuZGF0YS5kdXJhdGlvbkluU2Vjb25kcyoxMDAwKSkpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMFxuICAgIH1cblxuICAgIGlzVmFsaWQoKXtcbiAgICAgICAgaWYodGhpcy5fb2JqZWN0Q3JlYXRlVGltZSArICh0aGlzLmRhdGEuZHVyYXRpb25JblNlY29uZHMqMTAwMCkpe1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnQgPSB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuX29iamVjdENyZWF0ZVRpbWUgKyAodGhpcy5kYXRhLmR1cmF0aW9uSW5TZWNvbmRzKjEwMDApKSlcbiAgICAgICAgICAgIHJldHVybiBzZWNvbmRzTGVmdCA+IDBcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGdldE1hcmtldCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLm1hcmtldFxuICAgIH1cblxuICAgIGdldFJlZ2lvbnMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5vZmZlcmluZ1NldHRpbmdzLnJlZ2lvbnNcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0UmVnaW9uKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEub2ZmZXJpbmdTZXR0aW5ncy5yZWdpb25zLmZpbHRlcihyZWdpb24gPT4gcmVnaW9uLmlzRGVmYXVsdClbMF1cbiAgICB9XG5cbiAgICBzZXREZWZhdWx0UmVnaW9uKG5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmRhdGEub2ZmZXJpbmdTZXR0aW5ncy5yZWdpb25zLmZvckVhY2gocmVnaW9uID0+IHtcbiAgICAgICAgICAgIGlmIChyZWdpb24ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgIHJlZ2lvbi5pc0RlZmF1bHQgPSB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlZ2lvbi5pc0RlZmF1bHQgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldEVudmlyb25tZW50cygpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLm9mZmVyaW5nU2V0dGluZ3MuY2xpZW50Q2xvdWRTZXR0aW5ncy5FbnZpcm9ubWVudHNcbiAgICB9XG59IiwiaW1wb3J0IFRva2VuIGZyb20gJy4uL3Rva2VuJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyVG9rZW4ge1xuICAgIHRva2VuX3R5cGU6IHN0cmluZ1xuICAgIGV4cGlyZXNfaW46IG51bWJlclxuICAgIHNjb3BlOiBzdHJpbmdcbiAgICBhY2Nlc3NfdG9rZW46IHN0cmluZ1xuICAgIHJlZnJlc2hfdG9rZW46IHN0cmluZ1xuICAgIHVzZXJfaWQ6IHN0cmluZ1xuICAgIGV4cGlyZXNfb246IHN0cmluZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVc2VyVG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gICAgZGF0YTpJVXNlclRva2VuXG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOklVc2VyVG9rZW4pIHtcbiAgICAgICAgc3VwZXIoZGF0YSlcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH1cblxuICAgIGNhbGN1bGF0ZVNlY29uZHNMZWZ0KGRhdGU6RGF0ZSl7XG4gICAgICAgIGNvbnN0IGV4cGlyZXNPbiA9IGRhdGVcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKChleHBpcmVzT24uZ2V0VGltZSgpIC0gY3VycmVudERhdGUuZ2V0VGltZSgpKSAvIDEwMDApXG4gICAgfVxuXG4gICAgZ2V0U2Vjb25kc1ZhbGlkKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5leHBpcmVzX29uKSlcbiAgICB9XG5cbiAgICBpc1ZhbGlkKCl7XG4gICAgICAgIGNvbnN0IHNlY29uZHNMZWZ0ID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuZXhwaXJlc19vbikpXG4gICAgICAgIHJldHVybiBzZWNvbmRzTGVmdCA+IDBcbiAgICB9XG59IiwiaW1wb3J0IFRva2VuIGZyb20gJy4uL3Rva2VuJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElYc3RzVG9rZW4ge1xuICAgIElzc3VlSW5zdGFudDogc3RyaW5nXG4gICAgTm90QWZ0ZXI6IHN0cmluZ1xuICAgIFRva2VuOiBzdHJpbmdcbiAgICBEaXNwbGF5Q2xhaW1zOiB7XG4gICAgICAgIHh1aToge1xuICAgICAgICAgICAgdWhzOiBzdHJpbmdcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWHN0c1Rva2VuIGV4dGVuZHMgVG9rZW4ge1xuICAgIGRhdGE6SVhzdHNUb2tlblxuXG4gICAgY29uc3RydWN0b3IoZGF0YTpJWHN0c1Rva2VuKSB7XG4gICAgICAgIHN1cGVyKGRhdGEpXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9XG5cbiAgICBnZXRTZWNvbmRzVmFsaWQoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLk5vdEFmdGVyKSlcbiAgICB9XG5cbiAgICBpc1ZhbGlkKCl7XG5cbiAgICAgICAgaWYodGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuTm90QWZ0ZXIpKSA8PSAwKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG59IiwiaW1wb3J0IFNpc3VUb2tlbiBmcm9tICcuL2xpYi90b2tlbnMvc2lzdXRva2VuJ1xuaW1wb3J0IFVzZXJUb2tlbiBmcm9tICcuL2xpYi90b2tlbnMvdXNlcnRva2VuJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlblN0b3JlIHtcblxuICAgIF9maWxlcGF0aDpzdHJpbmcgPSAnJ1xuXG4gICAgLy8gTWFpbiB0b2tlbnNcbiAgICBfdXNlclRva2VuOlVzZXJUb2tlbiB8IHVuZGVmaW5lZFxuICAgIF9zaXN1VG9rZW46U2lzdVRva2VuIHwgdW5kZWZpbmVkXG4gICAgX2p3dEtleXM6YW55XG5cbiAgICAvLyBTdWItVG9rZW5zXG4gICAgbG9hZChmaWxlcGF0aDpzdHJpbmcsIHNpbGVudCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2ZpbGVwYXRoID0gZmlsZXBhdGhcblxuICAgICAgICBpZihmcy5leGlzdHNTeW5jKGZpbGVwYXRoKSl7XG4gICAgICAgICAgICBjb25zdCBmaWxlQ29udGVudHMgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZXBhdGgpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkSnNvbihmaWxlQ29udGVudHMudG9TdHJpbmcoKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmKCEgc2lsZW50KXtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Rva2VuU3RvcmU6IEZpbGUgbm90IGZvdW5kOiAnICsgZmlsZXBhdGgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBsb2FkSnNvbihqc29uOnN0cmluZykge1xuICAgICAgICBjb25zdCBqc29uRGF0YTp7IHVzZXJUb2tlbjphbnksIHNpc3VUb2tlbjphbnksIGp3dEtleXM6YW55IH0gPSBKU09OLnBhcnNlKGpzb24pXG5cbiAgICAgICAgaWYoanNvbkRhdGEudXNlclRva2VuKXtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJUb2tlbiA9IG5ldyBVc2VyVG9rZW4oanNvbkRhdGEudXNlclRva2VuKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoanNvbkRhdGEuc2lzdVRva2VuKXtcbiAgICAgICAgICAgIHRoaXMuX3Npc3VUb2tlbiA9IG5ldyBTaXN1VG9rZW4oanNvbkRhdGEuc2lzdVRva2VuKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoanNvbkRhdGEuand0S2V5cyl7XG4gICAgICAgICAgICB0aGlzLl9qd3RLZXlzID0ganNvbkRhdGEuand0S2V5c1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBzZXRVc2VyVG9rZW4odXNlclRva2VuOlVzZXJUb2tlbikge1xuICAgICAgICBjb25zdCBleHBpcmVEYXRlID0gbmV3IERhdGUoKVxuICAgICAgICBleHBpcmVEYXRlLnNldFNlY29uZHMoZXhwaXJlRGF0ZS5nZXRTZWNvbmRzKCkgKyB1c2VyVG9rZW4uZGF0YS5leHBpcmVzX2luKVxuXG4gICAgICAgIHRoaXMuX3VzZXJUb2tlbiA9IG5ldyBVc2VyVG9rZW4oeyAuLi51c2VyVG9rZW4uZGF0YSwgZXhwaXJlc19vbjogZXhwaXJlRGF0ZS50b0lTT1N0cmluZygpIH0pXG4gICAgfVxuXG4gICAgZ2V0VXNlclRva2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclRva2VuXG4gICAgfVxuXG4gICAgc2V0U2lzdVRva2VuKHNpc3VUb2tlbjpTaXN1VG9rZW4pIHtcbiAgICAgICAgdGhpcy5fc2lzdVRva2VuID0gbmV3IFNpc3VUb2tlbihzaXN1VG9rZW4uZGF0YSlcbiAgICB9XG5cbiAgICBnZXRTaXN1VG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXN1VG9rZW5cbiAgICB9XG5cbiAgICBzZXRKd3RLZXlzKGp3dEtleXM6YW55KSB7XG4gICAgICAgIHRoaXMuX2p3dEtleXMgPSBqd3RLZXlzXG4gICAgfVxuXG4gICAgc2F2ZSgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHVzZXJUb2tlbjogdGhpcy5fdXNlclRva2VuPy5kYXRhLFxuICAgICAgICAgICAgc2lzdVRva2VuOiB0aGlzLl9zaXN1VG9rZW4/LmRhdGEsXG4gICAgICAgICAgICBqd3RLZXlzOiB0aGlzLl9qd3RLZXlzXG4gICAgICAgIH1cblxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuX2ZpbGVwYXRoLCBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSlcbiAgICB9XG5cbiAgICByZW1vdmVBbGwoKSB7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5fZmlsZXBhdGgsIEpTT04uc3RyaW5naWZ5KHt9KSlcbiAgICB9XG5cbiAgICBoYXNWYWxpZEF1dGhUb2tlbnMoKSB7XG4gICAgICAgIGlmKHRoaXMuX3VzZXJUb2tlbil7XG4gICAgICAgICAgICBpZighIHRoaXMuX3VzZXJUb2tlbi5pc1ZhbGlkKCkpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLl9zaXN1VG9rZW4pe1xuICAgICAgICAgICAgaWYoISB0aGlzLl91c2VyVG9rZW4uaXNWYWxpZCgpKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG59IiwiaW1wb3J0IEh0dHAgZnJvbSAnLi9saWIvaHR0cCdcbmltcG9ydCBjcnlwdG8sIHsgc3VidGxlLCBLZXlPYmplY3QgfSBmcm9tICdjcnlwdG8nXG5pbXBvcnQgeyBleHBvcnRKV0sgfSBmcm9tICdqb3NlJ1xuXG5pbXBvcnQgRGV2aWNlVG9rZW4gZnJvbSAnLi9saWIvdG9rZW5zL2RldmljZXRva2VuJ1xuaW1wb3J0IFNpc3VUb2tlbiwgeyBJU2lzdVRva2VuIH0gZnJvbSAnLi9saWIvdG9rZW5zL3Npc3V0b2tlbidcbmltcG9ydCBVc2VyVG9rZW4sIHsgSVVzZXJUb2tlbiB9IGZyb20gJy4vbGliL3Rva2Vucy91c2VydG9rZW4nXG5pbXBvcnQgU3RyZWFtaW5nVG9rZW4gZnJvbSAnLi9saWIvdG9rZW5zL3N0cmVhbWluZ3Rva2VuJ1xuaW1wb3J0IFhzdHNUb2tlbiBmcm9tICcuL2xpYi90b2tlbnMveHN0c3Rva2VuJ1xuaW1wb3J0IE1zYWxUb2tlbiBmcm9tICcuL2xpYi90b2tlbnMvbXNhbHRva2VuJ1xuXG5pbXBvcnQgVG9rZW5TdG9yZSBmcm9tICcuL3Rva2Vuc3RvcmUnXG5cbmNvbnN0IFVVSUQgPSByZXF1aXJlKCd1dWlkLTEzNDUnKVxuY29uc3QgbmV4dFVVSUQgPSAoKSA9PiBVVUlELnYzKHsgbmFtZXNwYWNlOiAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JywgbmFtZTogRGF0ZS5ub3coKS50b1N0cmluZygpIH0pXG5cbmludGVyZmFjZSBJQ29kZUNoYWxsYW5nZSB7XG4gICAgdmFsdWU6IHN0cmluZ1xuICAgIG1ldGhvZDogc3RyaW5nXG4gICAgdmVyaWZpZXI6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgSVNpc3VBdXRoZW50aWNhdGlvblJlc3BvbnNlIHtcbiAgICBNc2FPYXV0aFJlZGlyZWN0OiBzdHJpbmdcbiAgICBNc2FSZXF1ZXN0UGFyYW1ldGVyczoge31cbiAgICBTZXNzaW9uSWQ6IHN0cmluZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBYYWwge1xuXG4gICAga2V5c1xuICAgIGp3dEtleXNcblxuICAgIF9hcHAgPSB7XG4gICAgICAgIEFwcElkOiAnMDAwMDAwMDA0YzIwYTkwOCcsIC8vJzAwMDAwMDAwNGMxMmFlNmYnLCAvLyAwMDAwMDAwMDQ4MTgzNTIyID0gd29ya2luZywgYnV0IG1pbmVjcmFmdCAtLTw8PCAwMDAwMDAwMDRjMTJhZTZmIHdvcmtzLCB4Ym94IGFwcFxuICAgICAgICBUaXRsZUlkOiAnMzI4MTc4MDc4JywgLy8nMzI4MTc4MDc4JywgLy8gMTAxNjg5ODQzOSA9IHdvcmtpbmdcbiAgICAgICAgUmVkaXJlY3RVcmk6ICdtcy14YWwtMDAwMDAwMDA0YzIwYTkwODovL2F1dGgnXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IodG9rZW5TdG9yZT86VG9rZW5TdG9yZSl7XG4gICAgICAgIGlmKHRva2VuU3RvcmUgJiYgdG9rZW5TdG9yZS5fand0S2V5cyl7XG4gICAgICAgICAgICB0aGlzLnNldEtleXModG9rZW5TdG9yZS5fand0S2V5cy5qd3QpLnRoZW4oKGtleXMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnS2V5cyBsb2FkZWQ6Jywga2V5cylcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gbG9hZCBrZXlzOicsIGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgc2V0S2V5cyhvcmdKd3RLZXkpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgc3VidGxlLmltcG9ydEtleSgnandrJywgb3JnSnd0S2V5LCB7IG5hbWU6ICdFQ0RTQScsIG5hbWVkQ3VydmU6ICdQLTI1NicgfSwgdHJ1ZSwgWydzaWduJ10pLnRoZW4oand0S2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gS2V5T2JqZWN0LmZyb20oand0S2V5KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuand0S2V5cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcmF3OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlS2V5OiBwcml2YXRlS2V5XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGp3dDogb3JnSnd0S2V5XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmp3dEtleXMpXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdrZXkgZXJyb3I6JywgZXJyb3IpXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0S2V5cygpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5qd3RLZXlzICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5qd3RLZXlzKVxuXG4gICAgICAgICAgICB9IGVsc2UgaWYodGhpcy5rZXlzID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHRoaXMua2V5cyA9IGNyeXB0by5nZW5lcmF0ZUtleVBhaXJTeW5jKCdlYycsIHsgbmFtZWRDdXJ2ZTogJ1AtMjU2JyB9KVxuXG4gICAgICAgICAgICAgICAgdGhpcy5qd3RLZXlzID0ge1xuICAgICAgICAgICAgICAgICAgICByYXc6IHRoaXMua2V5c1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGV4cG9ydEpXSyh0aGlzLmtleXMucHVibGljS2V5KS50aGVuKGp3ayA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGp3a0tleSA9IHsgLi4uandrLCBhbGc6ICdFUzI1NicsIHVzZTogJ3NpZycgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmp3dEtleXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IHRoaXMua2V5cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp3dDogandrS2V5XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqd2tLZXlzID0gdGhpcy5qd3RLZXlzLnJhdy5wcml2YXRlS2V5LmV4cG9ydCh7IHR5cGU6ICdwa2NzOCcsIGZvcm1hdDogJ2p3aycgfSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRLZXlzKGp3a0tleXMpLnRoZW4oa2V5cyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGtleXMpXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmp3dEtleXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY29kZUNoYWxsYW5nZVxuXG4gICAgZ2V0Q29kZUNoYWxsYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElDb2RlQ2hhbGxhbmdlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLmNvZGVDaGFsbGFuZ2UgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZV92ZXJpZmllciA9IEJ1ZmZlci5mcm9tKGNyeXB0by5wc2V1ZG9SYW5kb21CeXRlcygzMikpLnRvU3RyaW5nKCdiYXNlNjR1cmwnKVxuXG4gICAgICAgICAgICAgICAgY29uc3QgY29kZV9jaGFsbGVuZ2UgPSBjcnlwdG9cbiAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShjb2RlX3ZlcmlmaWVyKVxuICAgICAgICAgICAgICAgICAgICAuZGlnZXN0KCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvZGVDaGFsbGFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb2RlX2NoYWxsZW5nZS50b1N0cmluZygnYmFzZTY0dXJsJyksXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1MyNTYnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllcjogY29kZV92ZXJpZmllcixcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5jb2RlQ2hhbGxhbmdlKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldFJhbmRvbVN0YXRlKGJ5dGVzID0gNjQpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyhieXRlcykudG9TdHJpbmcoJ2Jhc2U2NHVybCcpXG4gICAgfVxuXG4gICAgZ2V0RGV2aWNlVG9rZW4oKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdnZXREZXZpY2VUb2tlbi4uLicpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxEZXZpY2VUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRLZXlzKCkudGhlbigoand0S2V5czphbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBdXRoTWV0aG9kOiAnUHJvb2ZPZlBvc3Nlc3Npb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgSWQ6IGB7JHtuZXh0VVVJRCgpfX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlVHlwZTogJ0FuZHJvaWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsTnVtYmVyOiBgeyR7bmV4dFVVSUQoKX19YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb246ICcxNS4wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb29mS2V5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSc6ICdzaWcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGcnOiAnRVMyNTYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrdHknOiAnRUMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcnYnOiAnUC0yNTYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd4Jzogand0S2V5cy5qd3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAneSc6IGp3dEtleXMuand0LnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVseWluZ1BhcnR5OiAnaHR0cDovL2F1dGgueGJveGxpdmUuY29tJyxcbiAgICAgICAgICAgICAgICAgICAgVG9rZW5UeXBlOiAnSldUJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuc2lnbignaHR0cHM6Ly9kZXZpY2UuYXV0aC54Ym94bGl2ZS5jb20vZGV2aWNlL2F1dGhlbnRpY2F0ZScsICcnLCBib2R5LCBqd3RLZXlzKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0geyAuLi57XG4gICAgICAgICAgICAgICAgICAgICd4LXhibC1jb250cmFjdC12ZXJzaW9uJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZSdcbiAgICAgICAgICAgICAgICB9LCBTaWduYXR1cmU6IHNpZ25hdHVyZSB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3QoJ2RldmljZS5hdXRoLnhib3hsaXZlLmNvbScsICcvZGV2aWNlL2F1dGhlbnRpY2F0ZScsIGhlYWRlcnMsIGJvZHkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IERldmljZVRva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGRvU2lzdUF1dGhlbnRpY2F0aW9uKGRldmljZVRva2VuOkRldmljZVRva2VuLCBjb2RlQ2hhbGxhbmdlOklDb2RlQ2hhbGxhbmdlLCBzdGF0ZSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJU2lzdUF1dGhlbnRpY2F0aW9uUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0S2V5cygpLnRoZW4oKGp3dEtleXM6YW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICBBcHBJZDogdGhpcy5fYXBwLkFwcElkLFxuICAgICAgICAgICAgICAgICAgICBUaXRsZUlkOiB0aGlzLl9hcHAuVGl0bGVJZCxcbiAgICAgICAgICAgICAgICAgICAgUmVkaXJlY3RVcmk6IHRoaXMuX2FwcC5SZWRpcmVjdFVyaSxcbiAgICAgICAgICAgICAgICAgICAgRGV2aWNlVG9rZW46IGRldmljZVRva2VuLmRhdGEuVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIFNhbmRib3g6IFwiUkVUQUlMXCIsXG4gICAgICAgICAgICAgICAgICAgIFRva2VuVHlwZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgICAgIE9mZmVyczogW1wic2VydmljZTo6dXNlci5hdXRoLnhib3hsaXZlLmNvbTo6TUJJX1NTTFwiXSxcbiAgICAgICAgICAgICAgICAgICAgUXVlcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdhbmRyb2lkX3Bob25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfY2hhbGxlbmdlOiBjb2RlQ2hhbGxhbmdlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9jaGFsbGVuZ2VfbWV0aG9kOiBjb2RlQ2hhbGxhbmdlLm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLnNpZ24oJ2h0dHBzOi8vc2lzdS54Ym94bGl2ZS5jb20vYXV0aGVudGljYXRlJywgJycsIGJvZHksIGp3dEtleXMpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7IC4uLntcbiAgICAgICAgICAgICAgICAgICAgJ3gteGJsLWNvbnRyYWN0LXZlcnNpb24nOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgICAgICB9LCBTaWduYXR1cmU6IHNpZ25hdHVyZSB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3QoJ3Npc3UueGJveGxpdmUuY29tJywgJy9hdXRoZW50aWNhdGUnLCBoZWFkZXJzLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgU2Vzc2lvbklkIHRvIHJlc3BvbnNlIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNCb2R5ID0geyBTZXNzaW9uSWQ6IHJlc3BvbnNlLmhlYWRlcnNbJ3gtc2Vzc2lvbmlkJ10sIC4uLnJlc3BvbnNlLmJvZHkoKSB9XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKCByZXNCb2R5IGFzIElTaXN1QXV0aGVudGljYXRpb25SZXNwb25zZSkpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGRvU2lzdUF1dGhvcml6YXRpb24odXNlclRva2VuOlVzZXJUb2tlbiwgZGV2aWNlVG9rZW46RGV2aWNlVG9rZW4sIFNlc3Npb25JZD86c3RyaW5nKXtcbiAgICAgICAgY29uc29sZS5sb2coJ2RvU2lzdUF1dGhvcml6YXRpb24uLi4nKVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8U2lzdVRva2VuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEtleXMoKS50aGVuKChqd3RLZXlzOmFueSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgQWNjZXNzVG9rZW46ICd0PScrdXNlclRva2VuLmRhdGEuYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICBBcHBJZDogdGhpcy5fYXBwLkFwcElkLFxuICAgICAgICAgICAgICAgICAgICBEZXZpY2VUb2tlbjogZGV2aWNlVG9rZW4uZGF0YS5Ub2tlbixcbiAgICAgICAgICAgICAgICAgICAgU2FuZGJveDogXCJSRVRBSUxcIixcbiAgICAgICAgICAgICAgICAgICAgU2l0ZU5hbWU6IFwidXNlci5hdXRoLnhib3hsaXZlLmNvbVwiLFxuICAgICAgICAgICAgICAgICAgICBVc2VNb2Rlcm5HYW1lcnRhZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgUHJvb2ZLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2UnOiAnc2lnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbGcnOiAnRVMyNTYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2t0eSc6ICdFQycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnY3J2JzogJ1AtMjU2JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd4Jzogand0S2V5cy5qd3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICd5Jzogand0S2V5cy5qd3QueVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAuLi5TZXNzaW9uSWQgPyB7IFNlc3Npb25JZDogU2Vzc2lvbklkIH0gOiB7fVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLnNpZ24oJ2h0dHBzOi8vc2lzdS54Ym94bGl2ZS5jb20vYXV0aG9yaXplJywgJycsIGJvZHksIGp3dEtleXMpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICd4LXhibC1jb250cmFjdC12ZXJzaW9uJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZScsXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZTogc2lnbmF0dXJlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgSHR0cENsaWVudCA9IG5ldyBIdHRwKClcbiAgICAgICAgICAgICAgICBIdHRwQ2xpZW50LnBvc3RSZXF1ZXN0KCdzaXN1Lnhib3hsaXZlLmNvbScsICcvYXV0aG9yaXplJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU2lzdVRva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGV4Y2hhbmdlQ29kZUZvclRva2VuKGNvZGU6c3RyaW5nLCBjb2RlVmVyaWZpZXI6c3RyaW5nKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPFVzZXJUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAnY2xpZW50X2lkJzogdGhpcy5fYXBwLkFwcElkLFxuICAgICAgICAgICAgICAgICdjb2RlJzogY29kZSxcbiAgICAgICAgICAgICAgICAnY29kZV92ZXJpZmllcic6IGNvZGVWZXJpZmllcixcbiAgICAgICAgICAgICAgICAnZ3JhbnRfdHlwZSc6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgICAgICAgICAgICdyZWRpcmVjdF91cmknOiB0aGlzLl9hcHAuUmVkaXJlY3RVcmksXG4gICAgICAgICAgICAgICAgJ3Njb3BlJzogJ3NlcnZpY2U6OnVzZXIuYXV0aC54Ym94bGl2ZS5jb206Ok1CSV9TU0wnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBheWxvYWQpLnRvU3RyaW5nKClcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdCgnbG9naW4ubGl2ZS5jb20nLCAnL29hdXRoMjBfdG9rZW4uc3JmJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBVc2VyVG9rZW4ocmVzcG9uc2UuYm9keSgpKSlcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZWZyZXNoVXNlclRva2VuKHVzZXJUb2tlbjpVc2VyVG9rZW4pe1xuICAgICAgICBjb25zb2xlLmxvZygncmVmcmVzaFVzZXJUb2tlbi4uLicpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxVc2VyVG9rZW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgJ2NsaWVudF9pZCc6IHRoaXMuX2FwcC5BcHBJZCxcbiAgICAgICAgICAgICAgICAnZ3JhbnRfdHlwZSc6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgICAgICAgICAncmVmcmVzaF90b2tlbic6IHVzZXJUb2tlbi5kYXRhLnJlZnJlc2hfdG9rZW4sXG4gICAgICAgICAgICAgICAgJ3Njb3BlJzogJ3NlcnZpY2U6OnVzZXIuYXV0aC54Ym94bGl2ZS5jb206Ok1CSV9TU0wnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBheWxvYWQpLnRvU3RyaW5nKClcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdCgnbG9naW4ubGl2ZS5jb20nLCAnL29hdXRoMjBfdG9rZW4uc3JmJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVmcmVzaFVzZXJUb2tlbiBzdWNjZXNzOiAnLCByZXNwb25zZS5ib2R5KCkpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgVXNlclRva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVmcmVzaFVzZXJUb2tlbiBmYWlsOicsIGVycm9yKVxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZG9Yc3RzQXV0aG9yaXphdGlvbihzaXN1VG9rZW46U2lzdVRva2VuLCByZWx5aW5nUGFydHk6c3RyaW5nKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPFhzdHNUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRLZXlzKCkudGhlbigoand0S2V5czphbnkpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFNhbmRib3hJZDogJ1JFVEFJTCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VUb2tlbjogc2lzdVRva2VuLmRhdGEuRGV2aWNlVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBUaXRsZVRva2VuOiBzaXN1VG9rZW4uZGF0YS5UaXRsZVRva2VuLlRva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlclRva2VuczogW3Npc3VUb2tlbi5kYXRhLlVzZXJUb2tlbi5Ub2tlbl1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVseWluZ1BhcnR5OiByZWx5aW5nUGFydHksXG4gICAgICAgICAgICAgICAgICAgIFRva2VuVHlwZTogJ0pXVCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLnNpZ24oJ2h0dHBzOi8veHN0cy5hdXRoLnhib3hsaXZlLmNvbS94c3RzL2F1dGhvcml6ZScsICcnLCBib2R5LCBqd3RLZXlzKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0geyAuLi57XG4gICAgICAgICAgICAgICAgICAgICd4LXhibC1jb250cmFjdC12ZXJzaW9uJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZScsXG4gICAgICAgICAgICAgICAgfSwgU2lnbmF0dXJlOiBzaWduYXR1cmUgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgSHR0cENsaWVudCA9IG5ldyBIdHRwKClcbiAgICAgICAgICAgICAgICBIdHRwQ2xpZW50LnBvc3RSZXF1ZXN0KCd4c3RzLmF1dGgueGJveGxpdmUuY29tJywgJy94c3RzL2F1dGhvcml6ZScsIGhlYWRlcnMsIGJvZHkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFhzdHNUb2tlbihyZXNwb25zZS5ib2R5KCkpKVxuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBleGNoYW5nZVJlZnJlc2hUb2tlbkZvclhjbG91ZFRyYW5zZmVyVG9rZW4odXNlclRva2VuOlVzZXJUb2tlbil7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxNc2FsVG9rZW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLl9hcHAuQXBwSWQsXG4gICAgICAgICAgICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICAgICAgICAgIHNjb3BlOiAnc2VydmljZTo6aHR0cDovL1Bhc3Nwb3J0Lk5FVC9wdXJwb3NlOjpQVVJQT1NFX1hCT1hfQ0xPVURfQ09OU09MRV9UUkFOU0ZFUl9UT0tFTicsXG4gICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogdXNlclRva2VuLmRhdGEucmVmcmVzaF90b2tlbixcbiAgICAgICAgICAgICAgICBjb2RlOiAnJyxcbiAgICAgICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiAnJyxcbiAgICAgICAgICAgICAgICByZWRpcmVjdF91cmk6ICcnLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXlsb2FkKS50b1N0cmluZygpXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZScsXG4gICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgY29uc3QgSHR0cENsaWVudCA9IG5ldyBIdHRwKClcbiAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3QoJ2xvZ2luLmxpdmUuY29tJywgJy9vYXV0aDIwX3Rva2VuLnNyZicsIGhlYWRlcnMsIGJvZHkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgTXNhbFRva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0U3RyZWFtVG9rZW4oeHN0c1Rva2VuOlhzdHNUb2tlbiwgb2ZmZXJpbmc6c3RyaW5nLCBmb3JjZVJlZ2lvbklwOiBzdHJpbmcgPSAnJyl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxTdHJlYW1pbmdUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAndG9rZW4nOiB4c3RzVG9rZW4uZGF0YS5Ub2tlbixcbiAgICAgICAgICAgICAgICAnb2ZmZXJpbmdJZCc6IG9mZmVyaW5nLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZScsXG4gICAgICAgICAgICAgICAgJ3gtZ3Nzdi1jbGllbnQnOiAnWGJveENvbUJyb3dzZXInLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm9yY2VSZWdpb25JcC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ10gPSBmb3JjZVJlZ2lvbklwXG4gICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgY29uc3QgSHR0cENsaWVudCA9IG5ldyBIdHRwKClcbiAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3Qob2ZmZXJpbmcrJy5nc3N2LXBsYXktcHJvZC54Ym94bGl2ZS5jb20nLCAnL3YyL2xvZ2luL3VzZXInLCBoZWFkZXJzLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFN0cmVhbWluZ1Rva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gQ3JlZGl0cyB0byBodHRwczovL2dpdGh1Yi5jb20vUHJpc21hcmluZUpTL3ByaXNtYXJpbmUtYXV0aCBmb3IgdGhlIHNpZ25pbmcgcGFydFxuICAgIHNpZ24odXJsLCBhdXRob3JpemF0aW9uVG9rZW4sIHBheWxvYWQsIGp3dEtleXMpIHtcbiAgICAgICAgY29uc3Qgd2luZG93c1RpbWVzdGFtcCA9IChCaWdJbnQoKERhdGUubm93KCkgLyAxMDAwKSB8IDApICsgQmlnSW50KDExNjQ0NDczNjAwKSkgKiBCaWdJbnQoMTAwMDAwMDApXG4gICAgICAgIGNvbnN0IHBhdGhBbmRRdWVyeSA9IG5ldyBVUkwodXJsKS5wYXRobmFtZVxuICAgIFxuICAgICAgICBjb25zdCBhbGxvY1NpemUgPSA1ICsgOSArIDUgKyBwYXRoQW5kUXVlcnkubGVuZ3RoICsgMSArIGF1dGhvcml6YXRpb25Ub2tlbi5sZW5ndGggKyAxICsgcGF5bG9hZC5sZW5ndGggKyAxXG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhhbGxvY1NpemUpXG4gICAgICAgIGJ1Zi53cml0ZUludDMyQkUoMSlcbiAgICAgICAgYnVmLndyaXRlVUludDgoMCwgNClcbiAgICAgICAgYnVmLndyaXRlQmlnVUludDY0QkUod2luZG93c1RpbWVzdGFtcCwgNSlcbiAgICAgICAgYnVmLndyaXRlVUludDgoMCwgMTMpXG4gICAgICAgIGxldCBvZmZzZXQgPSAxNFxuXG4gICAgICAgIEJ1ZmZlci5mcm9tKCdQT1NUJykuY29weShidWYsIG9mZnNldClcbiAgICAgICAgYnVmLndyaXRlVUludDgoMCwgb2Zmc2V0KzQpXG4gICAgICAgIG9mZnNldCA9IG9mZnNldCs0KzFcblxuICAgICAgICBCdWZmZXIuZnJvbShwYXRoQW5kUXVlcnkpLmNvcHkoYnVmLCBvZmZzZXQpXG4gICAgICAgIGJ1Zi53cml0ZVVJbnQ4KDAsIG9mZnNldCtwYXRoQW5kUXVlcnkubGVuZ3RoKVxuICAgICAgICBvZmZzZXQgPSBvZmZzZXQrcGF0aEFuZFF1ZXJ5Lmxlbmd0aCsxXG5cbiAgICAgICAgQnVmZmVyLmZyb20oYXV0aG9yaXphdGlvblRva2VuKS5jb3B5KGJ1Ziwgb2Zmc2V0KVxuICAgICAgICBidWYud3JpdGVVSW50OCgwLCBvZmZzZXQrYXV0aG9yaXphdGlvblRva2VuLmxlbmd0aClcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0K2F1dGhvcml6YXRpb25Ub2tlbi5sZW5ndGgrMVxuXG4gICAgICAgIEJ1ZmZlci5mcm9tKHBheWxvYWQpLmNvcHkoYnVmLCBvZmZzZXQpXG4gICAgICAgIGJ1Zi53cml0ZVVJbnQ4KDAsIG9mZnNldCtwYXlsb2FkLmxlbmd0aClcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0K3BheWxvYWQubGVuZ3RoKzFcblxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uc2lnbignU0hBMjU2JywgYnVmLCB7IGtleTogand0S2V5cy5yYXcucHJpdmF0ZUtleSwgZHNhRW5jb2Rpbmc6ICdpZWVlLXAxMzYzJyB9KVxuICAgIFxuICAgICAgICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuYWxsb2Moc2lnbmF0dXJlLmxlbmd0aCArIDEyKVxuICAgICAgICBoZWFkZXIud3JpdGVJbnQzMkJFKDEpXG4gICAgICAgIGhlYWRlci53cml0ZUJpZ1VJbnQ2NEJFKHdpbmRvd3NUaW1lc3RhbXAsIDQpXG4gICAgICAgIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkuY29weShoZWFkZXIsIDEyKVxuICAgIFxuICAgICAgICByZXR1cm4gaGVhZGVyXG4gICAgfVxuXG4gICAgLy8gVG9rZW4gcmV0cmlldmFsIGhlbHBlcnNcbiAgICBhc3luYyByZWZyZXNoVG9rZW5zKHRva2VuU3RvcmU6VG9rZW5TdG9yZSl7XG4gICAgICAgIGNvbnN0IGN1clVzZXJUb2tlbiA9IHRva2VuU3RvcmUuZ2V0VXNlclRva2VuKClcbiAgICAgICAgaWYoY3VyVXNlclRva2VuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgdG9rZW4gaXMgbWlzc2luZy4gUGxlYXNlIGF1dGhlbnRpY2F0ZSBmaXJzdCcpXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJUb2tlbiA9IGF3YWl0IHRoaXMucmVmcmVzaFVzZXJUb2tlbihjdXJVc2VyVG9rZW4pXG4gICAgICAgICAgICBjb25zdCBkZXZpY2VUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlVG9rZW4oKVxuICAgICAgICAgICAgY29uc3Qgc2lzdVRva2VuID0gYXdhaXQgdGhpcy5kb1Npc3VBdXRob3JpemF0aW9uKHVzZXJUb2tlbiwgZGV2aWNlVG9rZW4pXG5cbiAgICAgICAgICAgIHRva2VuU3RvcmUuc2V0VXNlclRva2VuKHVzZXJUb2tlbilcbiAgICAgICAgICAgIHRva2VuU3RvcmUuc2V0U2lzdVRva2VuKHNpc3VUb2tlbilcbiAgICAgICAgICAgIHRva2VuU3RvcmUuc2F2ZSgpXG5cbiAgICAgICAgICAgIHJldHVybiB7IHVzZXJUb2tlbiwgZGV2aWNlVG9rZW4sIHNpc3VUb2tlbiB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVG9rZW5SZWZyZXNoRXJyb3IoJ0ZhaWxlZCB0byByZWZyZXNoIHRva2VuczogJyArIEpTT04uc3RyaW5naWZ5KGVycm9yKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldE1zYWxUb2tlbih0b2tlblN0b3JlOlRva2VuU3RvcmUpe1xuICAgICAgICBjb25zdCB1c2VyVG9rZW4gPSB0b2tlblN0b3JlLmdldFVzZXJUb2tlbigpXG4gICAgICAgIGlmKHVzZXJUb2tlbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIHRva2VuIGlzIG1pc3NpbmcuIFBsZWFzZSBhdXRoZW50aWNhdGUgZmlyc3QnKVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhjaGFuZ2VSZWZyZXNoVG9rZW5Gb3JYY2xvdWRUcmFuc2ZlclRva2VuKHVzZXJUb2tlbikgICAgXG4gICAgfVxuXG4gICAgX3dlYlRva2VuOlhzdHNUb2tlbiB8IHVuZGVmaW5lZFxuXG4gICAgYXN5bmMgZ2V0V2ViVG9rZW4odG9rZW5TdG9yZTpUb2tlblN0b3JlKXtcbiAgICAgICAgY29uc3Qgc2lzdVRva2VuID0gdG9rZW5TdG9yZS5nZXRTaXN1VG9rZW4oKVxuICAgICAgICBpZihzaXN1VG9rZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lzdSB0b2tlbiBpcyBtaXNzaW5nLiBQbGVhc2UgYXV0aGVudGljYXRlIGZpcnN0JylcblxuICAgICAgICBpZih0aGlzLl93ZWJUb2tlbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dlYlRva2VuLmdldFNlY29uZHNWYWxpZCgpIDw9IDYwKXtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5kb1hzdHNBdXRob3JpemF0aW9uKHNpc3VUb2tlbiwgJ2h0dHA6Ly94Ym94bGl2ZS5jb20nKVxuICAgICAgICAgICAgdGhpcy5fd2ViVG9rZW4gPSB0b2tlblxuXG4gICAgICAgICAgICByZXR1cm4gdG9rZW5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWJUb2tlbiBhcyBYc3RzVG9rZW5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF94aG9tZVRva2VuOlN0cmVhbWluZ1Rva2VuIHwgdW5kZWZpbmVkXG4gICAgX3hjbG91ZFRva2VuOlN0cmVhbWluZ1Rva2VuIHwgdW5kZWZpbmVkXG5cbiAgICBhc3luYyBnZXRTdHJlYW1pbmdUb2tlbih0b2tlblN0b3JlOlRva2VuU3RvcmUpe1xuICAgICAgICBjb25zdCBzaXN1VG9rZW4gPSB0b2tlblN0b3JlLmdldFNpc3VUb2tlbigpXG4gICAgICAgIGlmKHNpc3VUb2tlbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaXN1IHRva2VuIGlzIG1pc3NpbmcuIFBsZWFzZSBhdXRoZW50aWNhdGUgZmlyc3QnKVxuXG4gICAgICAgIGNvbnN0IHhzdHNUb2tlbiA9IGF3YWl0IHRoaXMuZG9Yc3RzQXV0aG9yaXphdGlvbihzaXN1VG9rZW4sICdodHRwOi8vZ3Nzdi54Ym94bGl2ZS5jb20vJylcblxuICAgICAgICBpZih0aGlzLl94aG9tZVRva2VuID09PSB1bmRlZmluZWQgfHwgdGhpcy5feGhvbWVUb2tlbi5nZXRTZWNvbmRzVmFsaWQoKSA8PSA2MCl7XG4gICAgICAgICAgICB0aGlzLl94aG9tZVRva2VuID0gYXdhaXQgdGhpcy5nZXRTdHJlYW1Ub2tlbih4c3RzVG9rZW4sICd4aG9tZScpXG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLl94Y2xvdWRUb2tlbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3hjbG91ZFRva2VuLmdldFNlY29uZHNWYWxpZCgpIDw9IDYwKXtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5feGNsb3VkVG9rZW4gPSBhd2FpdCB0aGlzLmdldFN0cmVhbVRva2VuKHhzdHNUb2tlbiwgJ3hncHV3ZWInKVxuICAgICAgICAgICAgfSBjYXRjaChlcnJvcil7XG4gICAgICAgICAgICAgICAgdGhpcy5feGNsb3VkVG9rZW4gPSBhd2FpdCB0aGlzLmdldFN0cmVhbVRva2VuKHhzdHNUb2tlbiwgJ3hncHV3ZWJmMnAnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgeEhvbWVUb2tlbjogdGhpcy5feGhvbWVUb2tlbiwgeENsb3VkVG9rZW46IHRoaXMuX3hjbG91ZFRva2VuIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRSZWRpcmVjdFVyaSgpe1xuICAgICAgICBjb25zdCBkZXZpY2VUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlVG9rZW4oKVxuICAgICAgICBjb25zdCBjb2RlQ2hhbGxhbmdlID0gYXdhaXQgdGhpcy5nZXRDb2RlQ2hhbGxhbmdlKClcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFJhbmRvbVN0YXRlKClcbiAgICAgICAgY29uc3Qgc2lzdUF1dGggPSBhd2FpdCB0aGlzLmRvU2lzdUF1dGhlbnRpY2F0aW9uKGRldmljZVRva2VuLCBjb2RlQ2hhbGxhbmdlLCBzdGF0ZSlcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2lzdUF1dGgsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIGNvZGVDaGFsbGFuZ2VcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbiAgICBhc3luYyBhdXRoZW50aWNhdGVVc2VyKHRva2VuU3RvcmU6VG9rZW5TdG9yZSwgcmVkaXJlY3RPYmplY3Q6e1xuICAgICAgICBzaXN1QXV0aDogSVNpc3VBdXRoZW50aWNhdGlvblJlc3BvbnNlO1xuICAgICAgICBzdGF0ZTogc3RyaW5nO1xuICAgICAgICBjb2RlQ2hhbGxhbmdlOiBJQ29kZUNoYWxsYW5nZTtcbiAgICB9LCByZWRpcmVjdFVyaTpzdHJpbmcpe1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlZGlyZWN0VXJpKVxuXG4gICAgICAgIGNvbnN0IGVycm9yID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoJ2Vycm9yJylcbiAgICAgICAgaWYoZXJyb3Ipe1xuICAgICAgICAgICAgY29uc3QgZXJyb3JfZGVzY3JpcHRpb24gPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnZXJyb3JfZGVzY3JpcHRpb24nKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2RlID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoJ2NvZGUnKVxuICAgICAgICBpZihjb2RlKXtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoJ3N0YXRlJylcbiAgICAgICAgICAgIGlmKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRlVXNlclVzaW5nQ29kZSh0b2tlblN0b3JlLCByZWRpcmVjdE9iamVjdCwgY29kZSwgc3RhdGUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBhc3luYyBhdXRoZW50aWNhdGVVc2VyVXNpbmdDb2RlKHRva2VuU3RvcmU6VG9rZW5TdG9yZSwgcmVkaXJlY3RPYmplY3Q6e1xuICAgICAgICBzaXN1QXV0aDogSVNpc3VBdXRoZW50aWNhdGlvblJlc3BvbnNlO1xuICAgICAgICBzdGF0ZTogc3RyaW5nO1xuICAgICAgICBjb2RlQ2hhbGxhbmdlOiBJQ29kZUNoYWxsYW5nZTtcbiAgICB9LCBjb2RlOnN0cmluZywgc3RhdGU6c3RyaW5nKXtcblxuICAgICAgICBjb25zb2xlLmxvZygnYXV0aGVudGljYXRlVXNlcjonLCBjb2RlLCBzdGF0ZSlcblxuICAgICAgICBpZihzdGF0ZSAhPT0gcmVkaXJlY3RPYmplY3Quc3RhdGUpe1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZDogU3RhdGUgbWlzbWF0Y2gnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZUNoYWxsYW5nZSA9IGF3YWl0IHRoaXMuZ2V0Q29kZUNoYWxsYW5nZSgpXG4gICAgICAgIGNvbnN0IHVzZXJUb2tlbiA9IGF3YWl0IHRoaXMuZXhjaGFuZ2VDb2RlRm9yVG9rZW4oY29kZSwgY29kZUNoYWxsYW5nZS52ZXJpZmllcilcblxuICAgICAgICB0b2tlblN0b3JlLnNldFVzZXJUb2tlbih1c2VyVG9rZW4pXG4gICAgICAgIHRva2VuU3RvcmUuc2V0Snd0S2V5cyh0aGlzLmp3dEtleXMpXG4gICAgICAgIHRva2VuU3RvcmUuc2F2ZSgpXG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUb2tlblJlZnJlc2hFcnJvciBleHRlbmRzIEVycm9yIHt9IiwiZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5ncyA9IHtcbiAgbG9jYWxlOiBcImVuXCIsXG4gIGZ1bGxzY3JlZW46IGZhbHNlLFxuICByZXNvbHV0aW9uOiA3MjAsXG4gIHhob21lX2JpdHJhdGVfbW9kZTogXCJBdXRvXCIsXG4gIHhob21lX2JpdHJhdGU6IDIwLFxuICB4Y2xvdWRfYml0cmF0ZV9tb2RlOiBcIkF1dG9cIixcbiAgeGNsb3VkX2JpdHJhdGU6IDIwLFxuICBwcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZTogXCJlbi1VU1wiLFxuICBmb3JjZV9yZWdpb25faXA6IFwiXCIsXG4gIGNvZGVjOiBcIlwiLFxuICB2aWJyYXRpb246IHRydWUsXG4gIHZpYnJhdGlvbl9tb2RlOiBcIk5hdGl2ZVwiLFxuICBnYW1lcGFkX2tlcm5hbDogXCJOYXRpdmVcIixcbiAgZGVhZF96b25lOiAwLjEsXG4gIHZpZGVvX2Zvcm1hdDogXCJcIixcbiAgdmlydHVhbF9nYW1lcGFkX29wYWNpdHk6IDAuNixcbiAgZ2FtZXBhZF9tYXBpbmc6IG51bGwsXG4gIG5hdGl2ZV9nYW1lcGFkX21hcGluZzogbnVsbCxcbiAgaXB2NjogZmFsc2UsXG4gIGlucHV0X21vdXNla2V5Ym9hcmRfbWFwaW5nOiB7XG4gICAgQXJyb3dMZWZ0OiAnRFBhZExlZnQnLFxuICAgIEFycm93VXA6ICdEUGFkVXAnLFxuICAgIEFycm93UmlnaHQ6ICdEUGFkUmlnaHQnLFxuICAgIEFycm93RG93bjogJ0RQYWREb3duJyxcblxuICAgIEVudGVyOiAnQScsXG4gICAgYTogJ0EnLFxuXG4gICAgQmFja3NwYWNlOiAnQicsXG4gICAgYjogJ0InLFxuXG4gICAgeDogJ1gnLFxuICAgIHk6ICdZJyxcblxuICAgICdbJzogJ0xlZnRTaG91bGRlcicsXG4gICAgJ10nOiAnUmlnaHRTaG91bGRlcicsXG5cbiAgICAnLSc6ICdMZWZ0VHJpZ2dlcicsXG4gICAgJz0nOiAnUmlnaHRUcmlnZ2VyJyxcblxuICAgIHY6ICdWaWV3JyxcbiAgICBtOiAnTWVudScsXG4gICAgbjogJ05leHVzJyxcbiAgfSxcbiAgZGlzcGxheV9vcHRpb25zOiB7XG4gICAgc2hhcnBuZXNzOiA1LFxuICAgIHNhdHVyYXRpb246IDEwMCxcbiAgICBjb250cmFzdDogMTAwLFxuICAgIGJyaWdodG5lc3M6IDEwMCxcbiAgfSxcbiAgZGVidWc6IGZhbHNlLFxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNyeXB0b1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJub2RlOnBhdGhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2F4aW9zX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2NvbXBhcmVfdmVyc2lvbnNfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfZGVidWdfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfZWxlY3Ryb25fc2VydmVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfZWxlY3Ryb25fc3RvcmVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfZ2l0aHViX3VybF90b19vYmplY3RfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfaXBfYWRkcmVzc19fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9qb3NlX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3V1aWRfMTM0NV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV94Ym94X3dlYmFwaV9fOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9kYXRlL25vd1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvaW5jbHVkZXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9rZXlzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29tZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvcnRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS90cmltXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvanNvbi9zdHJpbmdpZnlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvYXNzaWduXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3Qva2V5c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3Byb21pc2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtaW1tZWRpYXRlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zZXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS91cmwtc2VhcmNoLXBhcmFtc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3VybFwiKTsiLCJ2YXIgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF9TeW1ib2wkdG9QcmltaXRpdmUgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC90by1wcmltaXRpdmUuanNcIik7XG52YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbX1N5bWJvbCR0b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKFwiLi90b1ByaW1pdGl2ZS5qc1wiKTtcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxubW9kdWxlLmV4cG9ydHMgPSB0b1Byb3BlcnR5S2V5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF9TeW1ib2wgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiKTtcbnZhciBfU3ltYm9sJGl0ZXJhdG9yID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanNcIik7XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3N5bWJvbCcpO1xuXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5mdW5jdGlvbi5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3N5bWJvbC9pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmlzQXJyYXk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbHRlcicpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmaWx0ZXInKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2gnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnZm9yRWFjaCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdpbmNsdWRlcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2tleXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29tZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzb21lJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvcnQnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc29ydCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5kYXRlLm5vdycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguRGF0ZS5ub3c7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maWx0ZXInKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsdGVyO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gbWV0aG9kIDogb3duO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBhcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvaW5jbHVkZXMnKTtcbnZhciBzdHJpbmdNZXRob2QgPSByZXF1aXJlKCcuLi9zdHJpbmcvdmlydHVhbC9pbmNsdWRlcycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG52YXIgU3RyaW5nUHJvdG90eXBlID0gU3RyaW5nLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmluY2x1ZGVzO1xuICBpZiAoaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5pbmNsdWRlcykpIHJldHVybiBhcnJheU1ldGhvZDtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyB8fCBpdCA9PT0gU3RyaW5nUHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKFN0cmluZ1Byb3RvdHlwZSwgaXQpICYmIG93biA9PT0gU3RyaW5nUHJvdG90eXBlLmluY2x1ZGVzKSkge1xuICAgIHJldHVybiBzdHJpbmdNZXRob2Q7XG4gIH0gcmV0dXJuIG93bjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb21lJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvbWU7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvbWUpID8gbWV0aG9kIDogb3duO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvcnQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29ydDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29ydCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL3N0cmluZy92aXJ0dWFsL3RyaW0nKTtcblxudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC50cmltO1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzdHJpbmcnIHx8IGl0ID09PSBTdHJpbmdQcm90b3R5cGVcbiAgICB8fCAoaXNQcm90b3R5cGVPZihTdHJpbmdQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IFN0cmluZ1Byb3RvdHlwZS50cmltKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUudG8tanNvbicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1qc29uIC0tIHNhZmVcbmlmICghcGF0aC5KU09OKSBwYXRoLkpTT04gPSB7IHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnkgfTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgcmV0dXJuIGFwcGx5KHBhdGguSlNPTi5zdHJpbmdpZnksIG51bGwsIGFyZ3VtZW50cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuYXNzaWduO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhULCBEKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhULCBEKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydGllcy5zaGFtKSBkZWZpbmVQcm9wZXJ0aWVzLnNoYW0gPSB0cnVlO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5LnNoYW0pIGRlZmluZVByb3BlcnR5LnNoYW0gPSB0cnVlO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG59O1xuXG5pZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtKSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSA9IHRydWU7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3Qua2V5cycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmtleXM7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFueScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLndpdGgtcmVzb2x2ZXJzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlByb21pc2U7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldC5kaWZmZXJlbmNlLnYyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0LmlzLWRpc2pvaW50LWZyb20udjInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0LmlzLXN1YnNldC1vZi52MicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQuaXMtc3VwZXJzZXQtb2YudjInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldC51bmlvbi52MicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlNldDtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ1N0cmluZycsICdpbmNsdWRlcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcudHJpbScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdTdHJpbmcnLCAndHJpbScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BlY2llcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BsaXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudW5zY29wYWJsZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hdGgudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LnRvLXN0cmluZy10YWcnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlN5bWJvbDtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG52YXIgV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKCdpdGVyYXRvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlJyk7XG52YXIgV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKCd0b1ByaW1pdGl2ZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9zeW1ib2wnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9zeW1ib2wvaXRlcmF0b3InKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9zeW1ib2wvdG8tcHJpbWl0aXZlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQtc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5jdXN0b20tbWF0Y2hlcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm9ic2VydmFibGUnKTtcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucGF0dGVybi1tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL3N5bWJvbC90by1wcmltaXRpdmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc1Bvc3NpYmxlUHJvdG90eXBlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBQZXJmb3JtID8gUmVxdWlyZUludGVybmFsU2xvdChNLCBbW1NldERhdGFdXSlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ29iamVjdCcgJiYgJ3NpemUnIGluIGl0ICYmICdoYXMnIGluIGl0ICYmICdhZGQnIGluIGl0ICYmICdkZWxldGUnIGluIGl0ICYmICdrZXlzJyBpbiBpdCkgcmV0dXJuIGl0O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdCkgKyAnIGlzIG5vdCBhIHNldCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFByb3RvdHlwZSkge1xuICBpZiAoaXNQcm90b3R5cGVPZihQcm90b3R5cGUsIGl0KSkgcmV0dXJuIGl0O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcignSW5jb3JyZWN0IGludm9jYXRpb24nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGRjI2LSBidWc6IEFycmF5QnVmZmVycyBhcmUgbm9uLWV4dGVuc2libGUsIGJ1dCBPYmplY3QuaXNFeHRlbnNpYmxlIGRvZXMgbm90IHJlcG9ydCBpdFxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyID09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKGJ1ZmZlcikpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidWZmZXIsICdhJywgeyB2YWx1ZTogOCB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICFTVFJJQ1RfTUVUSE9EID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlclJlamVjdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9SRUpFQ1QgPSBUWVBFID09PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShzZWxmKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgfHwgSVNfRklMVEVSX1JFSkVDVCA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gZXZlcnlcbiAgICAgICAgICBjYXNlIDc6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyUmVqZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJSZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiAgZmlsdGVyUmVqZWN0OiBjcmVhdGVNZXRob2QoNylcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKFtdLnNsaWNlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbnZhciBzb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOCkge1xuICAgIC8vIGluc2VydGlvbiBzb3J0XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciBlbGVtZW50LCBqO1xuXG4gICAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICAgIGogPSBpO1xuICAgICAgZWxlbWVudCA9IGFycmF5W2ldO1xuICAgICAgd2hpbGUgKGogJiYgY29tcGFyZWZuKGFycmF5W2ogLSAxXSwgZWxlbWVudCkgPiAwKSB7XG4gICAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICAgIH1cbiAgICAgIGlmIChqICE9PSBpKyspIGFycmF5W2pdID0gZWxlbWVudDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gbWVyZ2Ugc29ydFxuICAgIHZhciBtaWRkbGUgPSBmbG9vcihsZW5ndGggLyAyKTtcbiAgICB2YXIgbGVmdCA9IHNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKTtcbiAgICB2YXIgcmlnaHQgPSBzb3J0KGFycmF5U2xpY2UoYXJyYXksIG1pZGRsZSksIGNvbXBhcmVmbik7XG4gICAgdmFyIGxsZW5ndGggPSBsZWZ0Lmxlbmd0aDtcbiAgICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgICB2YXIgbGluZGV4ID0gMDtcbiAgICB2YXIgcmluZGV4ID0gMDtcblxuICAgIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICAgIGFycmF5W2xpbmRleCArIHJpbmRleF0gPSAobGluZGV4IDwgbGxlbmd0aCAmJiByaW5kZXggPCBybGVuZ3RoKVxuICAgICAgICA/IGNvbXBhcmVmbihsZWZ0W2xpbmRleF0sIHJpZ2h0W3JpbmRleF0pIDw9IDAgPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXVxuICAgICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNvcnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYSBwYXJ0IG9mIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXkpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAoaXNDb25zdHJ1Y3RvcihDKSAmJiAoQyA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IEM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKGFycmF5U3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsQXJyYXkpKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2ROYW1lLCBudW1BcmdzKSB7XG4gIHJldHVybiBudW1BcmdzID09PSAxID8gZnVuY3Rpb24gKG9iamVjdCwgYXJnKSB7XG4gICAgcmV0dXJuIG9iamVjdFttZXRob2ROYW1lXShhcmcpO1xuICB9IDogZnVuY3Rpb24gKG9iamVjdCwgYXJnMSwgYXJnMikge1xuICAgIHJldHVybiBvYmplY3RbbWV0aG9kTmFtZV0oYXJnMSwgYXJnMik7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICB0cnkge1xuICAgIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIHdvcmthcm91bmQgb2Ygb2xkIFdlYktpdCArIGBldmFsYCBidWdcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9ICRPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLmZhc3RLZXk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIFByb3RvdHlwZSk7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgaW5kZXg6IGNyZWF0ZShudWxsKSxcbiAgICAgICAgZmlyc3Q6IG51bGwsXG4gICAgICAgIGxhc3Q6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCFERVNDUklQVE9SUykgdGhhdC5zaXplID0gMDtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0aGF0W0FEREVSXSwgeyB0aGF0OiB0aGF0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgUHJvdG90eXBlID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgdmFyIGRlZmluZSA9IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgIHZhciBwcmV2aW91cywgaW5kZXg7XG4gICAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUubGFzdCA9IGVudHJ5ID0ge1xuICAgICAgICAgIGluZGV4OiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgcHJldmlvdXM6IHByZXZpb3VzID0gc3RhdGUubGFzdCxcbiAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RhdGUuZmlyc3QpIHN0YXRlLmZpcnN0ID0gZW50cnk7XG4gICAgICAgIGlmIChwcmV2aW91cykgcHJldmlvdXMubmV4dCA9IGVudHJ5O1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUrKztcbiAgICAgICAgZWxzZSB0aGF0LnNpemUrKztcbiAgICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSBzdGF0ZS5pbmRleFtpbmRleF0gPSBlbnRyeTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIHZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAvLyBmYXN0IGNhc2VcbiAgICAgIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgICAgIHZhciBlbnRyeTtcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gc3RhdGUuaW5kZXhbaW5kZXhdO1xuICAgICAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gICAgICBmb3IgKGVudHJ5ID0gc3RhdGUuZmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm5leHQpIHtcbiAgICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSByZXR1cm4gZW50cnk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuY2xlYXIoKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmNsZWFyXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBzdGF0ZS5maXJzdDtcbiAgICAgICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnByZXZpb3VzKSBlbnRyeS5wcmV2aW91cyA9IGVudHJ5LnByZXZpb3VzLm5leHQgPSBudWxsO1xuICAgICAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5maXJzdCA9IHN0YXRlLmxhc3QgPSBudWxsO1xuICAgICAgICBzdGF0ZS5pbmRleCA9IGNyZWF0ZShudWxsKTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplID0gMDtcbiAgICAgICAgZWxzZSB0aGF0LnNpemUgPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmRlbGV0ZShrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5pbmRleFtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubmV4dCA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucHJldmlvdXMgPSBwcmV2O1xuICAgICAgICAgIGlmIChzdGF0ZS5maXJzdCA9PT0gZW50cnkpIHN0YXRlLmZpcnN0ID0gbmV4dDtcbiAgICAgICAgICBpZiAoc3RhdGUubGFzdCA9PT0gZW50cnkpIHN0YXRlLmxhc3QgPSBwcmV2O1xuICAgICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZS0tO1xuICAgICAgICAgIGVsc2UgdGhhdC5zaXplLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuZmlyc3QpIHtcbiAgICAgICAgICBib3VuZEZ1bmN0aW9uKGVudHJ5LnZhbHVlLCBlbnRyeS5rZXksIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXR9LnByb3RvdHlwZS5oYXMoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmhhc1xuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIElTX01BUCA/IHtcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLmdldChrZXkpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudmFsdWU7XG4gICAgICB9LFxuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5zZXRcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmFkZFxuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCkge1xuICAgIHZhciBJVEVSQVRPUl9OQU1FID0gQ09OU1RSVUNUT1JfTkFNRSArICcgSXRlcmF0b3InO1xuICAgIHZhciBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgdmFyIGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoSVRFUkFUT1JfTkFNRSk7XG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUueyBrZXlzLCB2YWx1ZXMsIGVudHJpZXMsIEBAaXRlcmF0b3IgfSgpYCBtZXRob2RzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICBkZWZpbmVJdGVyYXRvcihDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgICAgdHlwZTogSVRFUkFUT1JfTkFNRSxcbiAgICAgICAgdGFyZ2V0OiBpdGVyYXRlZCxcbiAgICAgICAgc3RhdGU6IGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlKGl0ZXJhdGVkKSxcbiAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgbGFzdDogbnVsbFxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICAgICAgdmFyIGVudHJ5ID0gc3RhdGUubGFzdDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCFzdGF0ZS50YXJnZXQgfHwgIShzdGF0ZS5sYXN0ID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5zdGF0ZS5maXJzdCkpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgc3RhdGUudGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09PSAna2V5cycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LmtleSwgZmFsc2UpO1xuICAgICAgaWYgKGtpbmQgPT09ICd2YWx1ZXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS52YWx1ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2VudHJ5LmtleSwgZW50cnkudmFsdWVdLCBmYWxzZSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGVbQEBzcGVjaWVzXWAgYWNjZXNzb3JzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtbWFwLUBAc3BlY2llc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXNldC1AQHNwZWNpZXNcbiAgICBzZXRTcGVjaWVzKENPTlNUUlVDVE9SX05BTUUpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsVGhpc1tDT05TVFJVQ1RPUl9OQU1FXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgdmFyIGV4cG9ydGVkID0ge307XG4gIHZhciBDb25zdHJ1Y3RvcjtcblxuICBpZiAoIURFU0NSSVBUT1JTIHx8ICFpc0NhbGxhYmxlKE5hdGl2ZUNvbnN0cnVjdG9yKVxuICAgIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKS5lbnRyaWVzKCkubmV4dCgpOyB9KSlcbiAgKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDb25zdHJ1Y3RvciA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB9IGVsc2Uge1xuICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZShhbkluc3RhbmNlKHRhcmdldCwgUHJvdG90eXBlKSwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBjb2xsZWN0aW9uOiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGFyZ2V0W0FEREVSXSwgeyB0aGF0OiB0YXJnZXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICBmb3JFYWNoKFsnYWRkJywgJ2NsZWFyJywgJ2RlbGV0ZScsICdmb3JFYWNoJywgJ2dldCcsICdoYXMnLCAnc2V0JywgJ2tleXMnLCAndmFsdWVzJywgJ2VudHJpZXMnXSwgZnVuY3Rpb24gKEtFWSkge1xuICAgICAgdmFyIElTX0FEREVSID0gS0VZID09PSAnYWRkJyB8fCBLRVkgPT09ICdzZXQnO1xuICAgICAgaWYgKEtFWSBpbiBOYXRpdmVQcm90b3R5cGUgJiYgIShJU19XRUFLICYmIEtFWSA9PT0gJ2NsZWFyJykpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5jb2xsZWN0aW9uO1xuICAgICAgICAgIGlmICghSVNfQURERVIgJiYgSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkpIHJldHVybiBLRVkgPT09ICdnZXQnID8gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGNvbGxlY3Rpb25bS0VZXShhID09PSAwID8gMCA6IGEsIGIpO1xuICAgICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSVNfV0VBSyB8fCBkZWZpbmVQcm9wZXJ0eShQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb24uc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgZXhwb3J0ZWRbQ09OU1RSVUNUT1JfTkFNRV0gPSBDb25zdHJ1Y3RvcjtcbiAgJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIGV4cG9ydGVkKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgdmFyIHJlZ2V4cCA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tNRVRIT0RfTkFNRV0ocmVnZXhwKTtcbiAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlZ2V4cFtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAnLy4vJ1tNRVRIT0RfTkFNRV0ocmVnZXhwKTtcbiAgICB9IGNhdGNoIChlcnJvcjIpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiBmYWxzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBwYWRTdGFydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctcGFkJykuc3RhcnQ7XG5cbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG52YXIgJGlzRmluaXRlID0gaXNGaW5pdGU7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgRGF0ZVByb3RvdHlwZSA9IERhdGUucHJvdG90eXBlO1xudmFyIG5hdGl2ZURhdGVUb0lTT1N0cmluZyA9IERhdGVQcm90b3R5cGUudG9JU09TdHJpbmc7XG52YXIgdGhpc1RpbWVWYWx1ZSA9IHVuY3VycnlUaGlzKERhdGVQcm90b3R5cGUuZ2V0VGltZSk7XG52YXIgZ2V0VVRDRGF0ZSA9IHVuY3VycnlUaGlzKERhdGVQcm90b3R5cGUuZ2V0VVRDRGF0ZSk7XG52YXIgZ2V0VVRDRnVsbFllYXIgPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFVUQ0Z1bGxZZWFyKTtcbnZhciBnZXRVVENIb3VycyA9IHVuY3VycnlUaGlzKERhdGVQcm90b3R5cGUuZ2V0VVRDSG91cnMpO1xudmFyIGdldFVUQ01pbGxpc2Vjb25kcyA9IHVuY3VycnlUaGlzKERhdGVQcm90b3R5cGUuZ2V0VVRDTWlsbGlzZWNvbmRzKTtcbnZhciBnZXRVVENNaW51dGVzID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRVVENNaW51dGVzKTtcbnZhciBnZXRVVENNb250aCA9IHVuY3VycnlUaGlzKERhdGVQcm90b3R5cGUuZ2V0VVRDTW9udGgpO1xudmFyIGdldFVUQ1NlY29uZHMgPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFVUQ1NlY29uZHMpO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS50b2lzb3N0cmluZ1xuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBmYWlscyBoZXJlOlxubW9kdWxlLmV4cG9ydHMgPSAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlRGF0ZVRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoLTVlMTMgLSAxKSkgIT09ICcwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVonO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmF0aXZlRGF0ZVRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoTmFOKSk7XG59KSkgPyBmdW5jdGlvbiB0b0lTT1N0cmluZygpIHtcbiAgaWYgKCEkaXNGaW5pdGUodGhpc1RpbWVWYWx1ZSh0aGlzKSkpIHRocm93IG5ldyAkUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkYXRlID0gdGhpcztcbiAgdmFyIHllYXIgPSBnZXRVVENGdWxsWWVhcihkYXRlKTtcbiAgdmFyIG1pbGxpc2Vjb25kcyA9IGdldFVUQ01pbGxpc2Vjb25kcyhkYXRlKTtcbiAgdmFyIHNpZ24gPSB5ZWFyIDwgMCA/ICctJyA6IHllYXIgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzaWduICsgcGFkU3RhcnQoYWJzKHllYXIpLCBzaWduID8gNiA6IDQsIDApICtcbiAgICAnLScgKyBwYWRTdGFydChnZXRVVENNb250aChkYXRlKSArIDEsIDIsIDApICtcbiAgICAnLScgKyBwYWRTdGFydChnZXRVVENEYXRlKGRhdGUpLCAyLCAwKSArXG4gICAgJ1QnICsgcGFkU3RhcnQoZ2V0VVRDSG91cnMoZGF0ZSksIDIsIDApICtcbiAgICAnOicgKyBwYWRTdGFydChnZXRVVENNaW51dGVzKGRhdGUpLCAyLCAwKSArXG4gICAgJzonICsgcGFkU3RhcnQoZ2V0VVRDU2Vjb25kcyhkYXRlKSwgMiwgMCkgK1xuICAgICcuJyArIHBhZFN0YXJ0KG1pbGxpc2Vjb25kcywgMywgMCkgK1xuICAgICdaJztcbn0gOiBuYXRpdmVEYXRlVG9JU09TdHJpbmc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnVtZXJhYmxlKSB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgdmFsdWUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bnNhZmUgJiYgdGFyZ2V0W2tleV0pIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsVGhpc1trZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBmaXJlZm94ID0gdXNlckFnZW50Lm1hdGNoKC9maXJlZm94XFwvKFxcZCspL2kpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhZmlyZWZveCAmJiArZmlyZWZveFsxXTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBVQSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL01TSUV8VHJpZGVudC8udGVzdChVQSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvaXBhZHxpcGhvbmV8aXBvZC9pLnRlc3QodXNlckFnZW50KSAmJiB0eXBlb2YgUGViYmxlICE9ICd1bmRlZmluZWQnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gLyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBFTlZJUk9OTUVOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVOVklST05NRU5UID09PSAnTk9ERSc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbFRoaXMuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgd2Via2l0ID0gdXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFxcLyhcXGQrKVxcLi8pO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhd2Via2l0ICYmICt3ZWJraXRbMV07XG4iLCIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQnVuLCBEZW5vIC0tIGRldGVjdGlvbiAqL1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyIHVzZXJBZ2VudFN0YXJ0c1dpdGggPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiB1c2VyQWdlbnQuc2xpY2UoMCwgc3RyaW5nLmxlbmd0aCkgPT09IHN0cmluZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHVzZXJBZ2VudFN0YXJ0c1dpdGgoJ0J1bi8nKSkgcmV0dXJuICdCVU4nO1xuICBpZiAodXNlckFnZW50U3RhcnRzV2l0aCgnQ2xvdWRmbGFyZS1Xb3JrZXJzJykpIHJldHVybiAnQ0xPVURGTEFSRSc7XG4gIGlmICh1c2VyQWdlbnRTdGFydHNXaXRoKCdEZW5vLycpKSByZXR1cm4gJ0RFTk8nO1xuICBpZiAodXNlckFnZW50U3RhcnRzV2l0aCgnTm9kZS5qcy8nKSkgcmV0dXJuICdOT0RFJztcbiAgaWYgKGdsb2JhbFRoaXMuQnVuICYmIHR5cGVvZiBCdW4udmVyc2lvbiA9PSAnc3RyaW5nJykgcmV0dXJuICdCVU4nO1xuICBpZiAoZ2xvYmFsVGhpcy5EZW5vICYmIHR5cGVvZiBEZW5vLnZlcnNpb24gPT0gJ29iamVjdCcpIHJldHVybiAnREVOTyc7XG4gIGlmIChjbGFzc29mKGdsb2JhbFRoaXMucHJvY2VzcykgPT09ICdwcm9jZXNzJykgcmV0dXJuICdOT0RFJztcbiAgaWYgKGdsb2JhbFRoaXMud2luZG93ICYmIGdsb2JhbFRoaXMuZG9jdW1lbnQpIHJldHVybiAnQlJPV1NFUic7XG4gIHJldHVybiAnUkVTVCc7XG59KSgpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgJEVycm9yID0gRXJyb3I7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xuXG52YXIgVEVTVCA9IChmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBTdHJpbmcobmV3ICRFcnJvcihhcmcpLnN0YWNrKTsgfSkoJ3p4Y2FzZCcpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZG9zL25vLXZ1bG5lcmFibGUgLS0gc2FmZVxudmFyIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSA9IC9cXG5cXHMqYXQgW146XSo6W15cXG5dKi87XG52YXIgSVNfVjhfT1JfQ0hBS1JBX1NUQUNLID0gVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZLnRlc3QoVEVTVCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoSVNfVjhfT1JfQ0hBS1JBX1NUQUNLICYmIHR5cGVvZiBzdGFjayA9PSAnc3RyaW5nJyAmJiAhJEVycm9yLnByZXBhcmVTdGFja1RyYWNlKSB7XG4gICAgd2hpbGUgKGRyb3BFbnRyaWVzLS0pIHN0YWNrID0gcmVwbGFjZShzdGFjaywgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZLCAnJyk7XG4gIH0gcmV0dXJuIHN0YWNrO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyJyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdhJyk7XG4gIGlmICghKCdzdGFjaycgaW4gZXJyb3IpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIDcpKTtcbiAgcmV0dXJuIGVycm9yLnN0YWNrICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbi8vIGFkZCBkZWJ1Z2dpbmcgaW5mb1xucmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyYXBwZXIpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gYXBwbHkoTmF0aXZlQ29uc3RydWN0b3IsIHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbFRoaXMgOiBTVEFUSUMgPyBnbG9iYWxUaGlzW1RBUkdFVF0gOiBnbG9iYWxUaGlzW1RBUkdFVF0gJiYgZ2xvYmFsVGhpc1tUQVJHRVRdLnByb3RvdHlwZTtcblxuICB2YXIgdGFyZ2V0ID0gR0xPQkFMID8gcGF0aCA6IHBhdGhbVEFSR0VUXSB8fCBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVEFSR0VULCB7fSlbVEFSR0VUXTtcbiAgdmFyIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG5cbiAgdmFyIEZPUkNFRCwgVVNFX05BVElWRSwgVklSVFVBTF9QUk9UT1RZUEU7XG4gIHZhciBrZXksIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSwgbmF0aXZlUHJvcGVydHksIHJlc3VsdFByb3BlcnR5LCBkZXNjcmlwdG9yO1xuXG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgVVNFX05BVElWRSA9ICFGT1JDRUQgJiYgbmF0aXZlU291cmNlICYmIGhhc093bihuYXRpdmVTb3VyY2UsIGtleSk7XG5cbiAgICB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUpIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hdGl2ZVNvdXJjZSwga2V5KTtcbiAgICAgIG5hdGl2ZVByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSBuYXRpdmVQcm9wZXJ0eSA9IG5hdGl2ZVNvdXJjZVtrZXldO1xuXG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBpbXBsZW1lbnRhdGlvblxuICAgIHNvdXJjZVByb3BlcnR5ID0gKFVTRV9OQVRJVkUgJiYgbmF0aXZlUHJvcGVydHkpID8gbmF0aXZlUHJvcGVydHkgOiBzb3VyY2Vba2V5XTtcblxuICAgIGlmICghRk9SQ0VEICYmICFQUk9UTyAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgbWV0aG9kcyB0byBnbG9iYWwgZm9yIGNhbGxpbmcgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWxUaGlzKTtcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlcyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIGlzQ2FsbGFibGUoc291cmNlUHJvcGVydHkpKSByZXN1bHRQcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCByZXN1bHRQcm9wZXJ0eSk7XG5cbiAgICBpZiAoUFJPVE8pIHtcbiAgICAgIFZJUlRVQUxfUFJPVE9UWVBFID0gVEFSR0VUICsgJ1Byb3RvdHlwZSc7XG4gICAgICBpZiAoIWhhc093bihwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFLCB7fSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgdmlydHVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAoRk9SQ0VEIHx8ICF0YXJnZXRQcm90b3R5cGVba2V5XSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldFByb3RvdHlwZSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtcHJldmVudGV4dGVuc2lvbnMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChOQVRJVkVfQklORCA/IGNhbGwuYmluZChhcHBseSkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SLCBNRVRIT0QpIHtcbiAgdmFyIE5hbWVzcGFjZSA9IHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG4gIHZhciBwdXJlTWV0aG9kID0gTmFtZXNwYWNlICYmIE5hbWVzcGFjZVtNRVRIT0RdO1xuICBpZiAocHVyZU1ldGhvZCkgcmV0dXJuIHB1cmVNZXRob2Q7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFRoaXNbQ09OU1RSVUNUT1JdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gTmF0aXZlUHJvdG90eXBlICYmIE5hdGl2ZVByb3RvdHlwZVtNRVRIT0RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHZhcmlhYmxlKSA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gYEdldEl0ZXJhdG9yRGlyZWN0KG9iailgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvI3NlYy1nZXRpdGVyYXRvcmRpcmVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgaXRlcmF0b3I6IG9iaixcbiAgICBuZXh0OiBvYmoubmV4dCxcbiAgICBkb25lOiBmYWxzZVxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXQpKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciBnZXRJdGVyYXRvckRpcmVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0Jyk7XG5cbnZhciBJTlZBTElEX1NJWkUgPSAnSW52YWxpZCBzaXplJztcbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBtYXggPSBNYXRoLm1heDtcblxudmFyIFNldFJlY29yZCA9IGZ1bmN0aW9uIChzZXQsIGludFNpemUpIHtcbiAgdGhpcy5zZXQgPSBzZXQ7XG4gIHRoaXMuc2l6ZSA9IG1heChpbnRTaXplLCAwKTtcbiAgdGhpcy5oYXMgPSBhQ2FsbGFibGUoc2V0Lmhhcyk7XG4gIHRoaXMua2V5cyA9IGFDYWxsYWJsZShzZXQua2V5cyk7XG59O1xuXG5TZXRSZWNvcmQucHJvdG90eXBlID0ge1xuICBnZXRJdGVyYXRvcjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRJdGVyYXRvckRpcmVjdChhbk9iamVjdChjYWxsKHRoaXMua2V5cywgdGhpcy5zZXQpKSk7XG4gIH0sXG4gIGluY2x1ZGVzOiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gY2FsbCh0aGlzLmhhcywgdGhpcy5zZXQsIGl0KTtcbiAgfVxufTtcblxuLy8gYEdldFNldFJlY29yZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc2V0LW1ldGhvZHMvI3NlYy1nZXRzZXRyZWNvcmRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICBhbk9iamVjdChvYmopO1xuICB2YXIgbnVtU2l6ZSA9ICtvYmouc2l6ZTtcbiAgLy8gTk9URTogSWYgc2l6ZSBpcyB1bmRlZmluZWQsIHRoZW4gbnVtU2l6ZSB3aWxsIGJlIE5hTlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICBpZiAobnVtU2l6ZSAhPT0gbnVtU2l6ZSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgdmFyIGludFNpemUgPSB0b0ludGVnZXJPckluZmluaXR5KG51bVNpemUpO1xuICBpZiAoaW50U2l6ZSA8IDApIHRocm93IG5ldyAkUmFuZ2VFcnJvcihJTlZBTElEX1NJWkUpO1xuICByZXR1cm4gbmV3IFNldFJlY29yZChvYmosIGludFNpemUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlIC0tIHNhZmVcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY29uc29sZS5lcnJvcihhKSA6IGNvbnNvbGUuZXJyb3IoYSwgYik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbi8vIGBJbnN0YWxsRXJyb3JDYXVzZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtZXJyb3ItY2F1c2UvI3NlYy1lcnJvcm9iamVjdHMtaW5zdGFsbC1lcnJvci1jYXVzZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgb3B0aW9ucykge1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgJ2NhdXNlJyBpbiBvcHRpb25zKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE8sICdjYXVzZScsIG9wdGlvbnMuY2F1c2UpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGlzRXh0ZW5zaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxudmFyIHNldE1ldGFkYXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIGRlZmluZVByb3BlcnR5KGl0LCBNRVRBREFUQSwgeyB2YWx1ZToge1xuICAgIG9iamVjdElEOiAnTycgKyBpZCsrLCAvLyBvYmplY3QgSURcbiAgICB3ZWFrRGF0YToge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG5cbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIGEgcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBREFUQV0ub2JqZWN0SUQ7XG59O1xuXG52YXIgZ2V0V2Vha0RhdGEgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIHRoZSBzdG9yZSBvZiB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBREFUQV0ud2Vha0RhdGE7XG59O1xuXG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpJTkcgJiYgUkVRVUlSRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzT3duKGl0LCBNRVRBREFUQSkpIHNldE1ldGFkYXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxudmFyIGVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgbWV0YS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4gIFJFUVVJUkVEID0gdHJ1ZTtcbiAgdmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmY7XG4gIHZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xuICB2YXIgdGVzdCA9IHt9O1xuICB0ZXN0W01FVEFEQVRBXSA9IDE7XG5cbiAgLy8gcHJldmVudCBleHBvc2luZyBvZiBtZXRhZGF0YSBrZXlcbiAgaWYgKGdldE93blByb3BlcnR5TmFtZXModGVzdCkubGVuZ3RoKSB7XG4gICAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHRbaV0gPT09IE1FVEFEQVRBKSB7XG4gICAgICAgICAgc3BsaWNlKHJlc3VsdCwgaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUuZlxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBlbmFibGU6IGVuYWJsZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2Vha0RhdGE6IGdldFdlYWtEYXRhLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cbmhpZGRlbktleXNbTUVUQURBVEFdID0gdHJ1ZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAudGVzdChub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgW10sIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNPYmplY3QoYXJndW1lbnQpIHx8IGFyZ3VtZW50ID09PSBudWxsO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09PSAnUmVnRXhwJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlY29yZCwgZm4sIElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEKSB7XG4gIHZhciBpdGVyYXRvciA9IElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEID8gcmVjb3JkIDogcmVjb3JkLml0ZXJhdG9yO1xuICB2YXIgbmV4dCA9IHJlY29yZC5uZXh0O1xuICB2YXIgc3RlcCwgcmVzdWx0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICByZXN1bHQgPSBmbihzdGVwLnZhbHVlKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19SRUNPUkQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfUkVDT1JEKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19SRUNPUkQpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlLml0ZXJhdG9yO1xuICB9IGVsc2UgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gSVNfUkVDT1JEID8gaXRlcmFibGUubmV4dCA6IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQsIEVOVU1FUkFCTEVfTkVYVCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCshRU5VTUVSQUJMRV9ORVhULCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2FmZUdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2FmZS1nZXQtYnVpbHQtaW4nKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIFF1ZXVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3F1ZXVlJyk7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcycpO1xudmFyIElTX0lPU19QRUJCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtaW9zLXBlYmJsZScpO1xudmFyIElTX1dFQk9TX1dFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy13ZWJvcy13ZWJraXQnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLW5vZGUnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWxUaGlzLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsVGhpcy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWxUaGlzLlByb21pc2U7XG52YXIgbWljcm90YXNrID0gc2FmZUdldEJ1aWx0SW4oJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIW1pY3JvdGFzaykge1xuICB2YXIgcXVldWUgPSBuZXcgUXVldWUoKTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKElTX05PREUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoZm4gPSBxdWV1ZS5nZXQoKSkgdHJ5IHtcbiAgICAgIGZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIC8vIGFsc28gZXhjZXB0IFdlYk9TIFdlYmtpdCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODk4XG4gIGlmICghSVNfSU9TICYmICFJU19OT0RFICYmICFJU19XRUJPU19XRUJLSVQgJiYgTXV0YXRpb25PYnNlcnZlciAmJiBkb2N1bWVudCkge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKCFJU19JT1NfUEVCQkxFICYmIFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgLy8gd29ya2Fyb3VuZCBvZiBXZWJLaXQgfiBpT1MgU2FmYXJpIDEwLjEgYnVnXG4gICAgcHJvbWlzZS5jb25zdHJ1Y3RvciA9IFByb21pc2U7XG4gICAgdGhlbiA9IGJpbmQocHJvbWlzZS50aGVuLCBwcm9taXNlKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBOb2RlLmpzIHdpdGhvdXQgcHJvbWlzZXNcbiAgfSBlbHNlIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnZVxuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICAvLyBgd2VicGFja2AgZGV2IHNlcnZlciBidWcgb24gSUUgZ2xvYmFsIG1ldGhvZHMgLSB1c2UgYmluZChmbiwgZ2xvYmFsKVxuICAgIG1hY3JvdGFzayA9IGJpbmQobWFjcm90YXNrLCBnbG9iYWxUaGlzKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtYWNyb3Rhc2soZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICBtaWNyb3Rhc2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBpZiAoIXF1ZXVlLmhlYWQpIG5vdGlmeSgpO1xuICAgIHF1ZXVlLmFkZChmbik7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWljcm90YXNrO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhQ2FsbGFibGUocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUNhbGxhYmxlKHJlamVjdCk7XG59O1xuXG4vLyBgTmV3UHJvbWlzZUNhcGFiaWxpdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uZXdwcm9taXNlY2FwYWJpbGl0eVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgJGRlZmF1bHQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID09PSB1bmRlZmluZWQgPyBhcmd1bWVudHMubGVuZ3RoIDwgMiA/ICcnIDogJGRlZmF1bHQgOiB0b1N0cmluZyhhcmd1bWVudCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzUmVnRXhwKGl0KSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiVGhlIG1ldGhvZCBkb2Vzbid0IGFjY2VwdCByZWd1bGFyIGV4cHJlc3Npb25zXCIpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSBzYWZlXG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmICRhc3NpZ24oeyBiOiAxIH0sICRhc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN5bWJvbCAtLSBzYWZlXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ2Fzc2lnbiBkZXRlY3Rpb24nKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPT0gNyB8fCBvYmplY3RLZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPT0gYWxwaGFiZXQ7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xuICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IEluZGV4ZWRPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChvYmplY3RLZXlzKFMpLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZSwgUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWFzc2lnbm1lbnQgLS0gYXZvaWQgbWVtb3J5IGxlYWtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgJiYgIVY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBwcm9wc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGFycmF5U2xpY2Uod2luZG93TmFtZXMpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgY2xhc3NvZihpdCkgPT09ICdXaW5kb3cnXG4gICAgPyBnZXRXaW5kb3dOYW1lcyhpdClcbiAgICA6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gJE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyAkT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiAkT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSAtLSBzYWZlXG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgJGlzRXh0ZW5zaWJsZSgxKTsgfSk7XG5cbi8vIGBPYmplY3QuaXNFeHRlbnNpYmxlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmlzZXh0ZW5zaWJsZVxubW9kdWxlLmV4cG9ydHMgPSAoRkFJTFNfT05fUFJJTUlUSVZFUyB8fCBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUpID8gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgJiYgY2xhc3NvZihpdCkgPT09ICdBcnJheUJ1ZmZlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWU7XG59IDogJGlzRXh0ZW5zaWJsZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIHJlcXVpcmVPYmplY3RDb2VyY2libGUoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gTztcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSwgdmFsdWU6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCB2YWx1ZTogZXJyb3IgfTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBFTlZJUk9OTUVOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBTVUJDTEFTU0lORyA9IGZhbHNlO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IGlzQ2FsbGFibGUoZ2xvYmFsVGhpcy5Qcm9taXNlUmVqZWN0aW9uRXZlbnQpO1xuXG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBpc0ZvcmNlZCgnUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFID0gaW5zcGVjdFNvdXJjZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpO1xuICB2YXIgR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSA9IFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFICE9PSBTdHJpbmcoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgLy8gVjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgLy8gV2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgaWYgKCFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIFY4X1ZFUlNJT04gPT09IDY2KSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgbmVlZCBQcm9taXNlI3sgY2F0Y2gsIGZpbmFsbHkgfSBpbiB0aGUgcHVyZSB2ZXJzaW9uIGZvciBwcmV2ZW50aW5nIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgaWYgKElTX1BVUkUgJiYgIShOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSkpIHJldHVybiB0cnVlO1xuICAvLyBXZSBjYW4ndCB1c2UgQEBzcGVjaWVzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxuICBpZiAoIVY4X1ZFUlNJT04gfHwgVjhfVkVSU0lPTiA8IDUxIHx8ICEvbmF0aXZlIGNvZGUvLnRlc3QoUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UpKSB7XG4gICAgLy8gRGV0ZWN0IGNvcnJlY3RuZXNzIG9mIHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSgxKTsgfSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICAgIH07XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gRmFrZVByb21pc2U7XG4gICAgU1VCQ0xBU1NJTkcgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICAgIGlmICghU1VCQ0xBU1NJTkcpIHJldHVybiB0cnVlO1xuICAvLyBVbmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gIH0gcmV0dXJuICFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIChFTlZJUk9OTUVOVCA9PT0gJ0JST1dTRVInIHx8IEVOVklST05NRU5UID09PSAnREVOTycpICYmICFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENPTlNUUlVDVE9SOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUixcbiAgUkVKRUNUSU9OX0VWRU5UOiBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQsXG4gIFNVQkNMQVNTSU5HOiBTVUJDTEFTU0lOR1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpcy5Qcm9taXNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKS50aGVuKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhlYWQgPSBudWxsO1xuICB0aGlzLnRhaWwgPSBudWxsO1xufTtcblxuUXVldWUucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmFyIGVudHJ5ID0geyBpdGVtOiBpdGVtLCBuZXh0OiBudWxsIH07XG4gICAgdmFyIHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgaWYgKHRhaWwpIHRhaWwubmV4dCA9IGVudHJ5O1xuICAgIGVsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgdGhpcy50YWlsID0gZW50cnk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbnRyeSA9IHRoaXMuaGVhZDtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHZhciBuZXh0ID0gdGhpcy5oZWFkID0gZW50cnkubmV4dDtcbiAgICAgIGlmIChuZXh0ID09PSBudWxsKSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgcmV0dXJuIGVudHJ5Lml0ZW07XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXVlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBBdm9pZCBOb2RlSlMgZXhwZXJpbWVudGFsIHdhcm5pbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFERVNDUklQVE9SUykgcmV0dXJuIGdsb2JhbFRoaXNbbmFtZV07XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbFRoaXMsIG5hbWUpO1xuICByZXR1cm4gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgRU5WSVJPTk1FTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQnKTtcbnZhciBVU0VSX0FHRU5UID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xuXG52YXIgRnVuY3Rpb24gPSBnbG9iYWxUaGlzLkZ1bmN0aW9uO1xuLy8gZGlydHkgSUU5LSBhbmQgQnVuIDAuMy4wLSBjaGVja3NcbnZhciBXUkFQID0gL01TSUUgLlxcLi8udGVzdChVU0VSX0FHRU5UKSB8fCBFTlZJUk9OTUVOVCA9PT0gJ0JVTicgJiYgKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlcnNpb24gPSBnbG9iYWxUaGlzLkJ1bi52ZXJzaW9uLnNwbGl0KCcuJyk7XG4gIHJldHVybiB2ZXJzaW9uLmxlbmd0aCA8IDMgfHwgdmVyc2lvblswXSA9PT0gJzAnICYmICh2ZXJzaW9uWzFdIDwgMyB8fCB2ZXJzaW9uWzFdID09PSAnMycgJiYgdmVyc2lvblsyXSA9PT0gJzAnKTtcbn0pKCk7XG5cbi8vIElFOS0gLyBCdW4gMC4zLjAtIHNldFRpbWVvdXQgLyBzZXRJbnRlcnZhbCAvIHNldEltbWVkaWF0ZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI3RpbWVyc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL292ZW4tc2gvYnVuL2lzc3Vlcy8xNjMzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGhhc1RpbWVBcmcpIHtcbiAgdmFyIGZpcnN0UGFyYW1JbmRleCA9IGhhc1RpbWVBcmcgPyAyIDogMTtcbiAgcmV0dXJuIFdSQVAgPyBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCAvKiAsIC4uLmFyZ3VtZW50cyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKSA+IGZpcnN0UGFyYW1JbmRleDtcbiAgICB2YXIgZm4gPSBpc0NhbGxhYmxlKGhhbmRsZXIpID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpO1xuICAgIHZhciBwYXJhbXMgPSBib3VuZEFyZ3MgPyBhcnJheVNsaWNlKGFyZ3VtZW50cywgZmlyc3RQYXJhbUluZGV4KSA6IFtdO1xuICAgIHZhciBjYWxsYmFjayA9IGJvdW5kQXJncyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB0aGlzLCBwYXJhbXMpO1xuICAgIH0gOiBmbjtcbiAgICByZXR1cm4gaGFzVGltZUFyZyA/IHNjaGVkdWxlcihjYWxsYmFjaywgdGltZW91dCkgOiBzY2hlZHVsZXIoY2FsbGJhY2spO1xuICB9IDogc2NoZWR1bGVyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuICBpdGVyYXRlKHNldCwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgZWxzZSBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGNhbGxlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsZXInKTtcblxudmFyIFNldCA9IGdldEJ1aWx0SW4oJ1NldCcpO1xudmFyIFNldFByb3RvdHlwZSA9IFNldC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBTZXQ6IFNldCxcbiAgYWRkOiBjYWxsZXIoJ2FkZCcsIDEpLFxuICBoYXM6IGNhbGxlcignaGFzJywgMSksXG4gIHJlbW92ZTogY2FsbGVyKCdkZWxldGUnLCAxKSxcbiAgcHJvdG86IFNldFByb3RvdHlwZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbnRlcnNlY3Rpb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkge1xuICAgIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChoYXMoTywgZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Rpc2pvaW50RnJvbShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIHJldHVybiBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3Vic2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGl0ZXJhdGUoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIW90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3VwZXJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDwgb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIWhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQsIGZuLCBpbnRlcnJ1cHRpYmxlKSB7XG4gIHJldHVybiBpbnRlcnJ1cHRpYmxlID8gaXRlcmF0ZVNpbXBsZShzZXQua2V5cygpLCBmbiwgdHJ1ZSkgOiBzZXQuZm9yRWFjaChmbik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIHNldC5zaXplO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzeW1tZXRyaWNEaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gICAgZWxzZSBhZGQocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMsIFNFVF9NRVRIT0QpIHtcbiAgdmFyIHRhcmdldCA9IFNUQVRJQyA/IGl0IDogaXQgJiYgaXQucHJvdG90eXBlO1xuICBpZiAodGFyZ2V0KSB7XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgYWRkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuYWRkO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdW5pb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zOC4xJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOC4xL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCBpc051bGxPclVuZGVmaW5lZChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUNvbnN0cnVjdG9yKFMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgJHJlcGVhdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctcmVwZWF0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIHJlcGVhdCA9IHVuY3VycnlUaGlzKCRyZXBlYXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgcGFkU3RhcnQsIHBhZEVuZCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0VORCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiB0b1N0cmluZyhmaWxsU3RyaW5nKTtcbiAgICB2YXIgZmlsbExlbiwgc3RyaW5nRmlsbGVyO1xuICAgIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT09ICcnKSByZXR1cm4gUztcbiAgICBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICAgIHN0cmluZ0ZpbGxlciA9IHJlcGVhdChmaWxsU3RyLCBjZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICAgIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nU2xpY2Uoc3RyaW5nRmlsbGVyLCAwLCBmaWxsTGVuKTtcbiAgICByZXR1cm4gSVNfRU5EID8gUyArIHN0cmluZ0ZpbGxlciA6IHN0cmluZ0ZpbGxlciArIFM7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucGFkc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnBhZEVuZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5wYWRlbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vYmVzdGllanMvcHVueWNvZGUuanMvYmxvYi9tYXN0ZXIvcHVueWNvZGUuanNcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIG1heEludCA9IDIxNDc0ODM2NDc7IC8vIGFrYS4gMHg3RkZGRkZGRiBvciAyXjMxLTFcbnZhciBiYXNlID0gMzY7XG52YXIgdE1pbiA9IDE7XG52YXIgdE1heCA9IDI2O1xudmFyIHNrZXcgPSAzODtcbnZhciBkYW1wID0gNzAwO1xudmFyIGluaXRpYWxCaWFzID0gNzI7XG52YXIgaW5pdGlhbE4gPSAxMjg7IC8vIDB4ODBcbnZhciBkZWxpbWl0ZXIgPSAnLSc7IC8vICdcXHgyRCdcbnZhciByZWdleE5vbkFTQ0lJID0gL1teXFwwLVxcdTAwN0VdLzsgLy8gbm9uLUFTQ0lJIGNoYXJzXG52YXIgcmVnZXhTZXBhcmF0b3JzID0gL1suXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nOyAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG52YXIgT1ZFUkZMT1dfRVJST1IgPSAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnO1xudmFyIGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbjtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMocmVnZXhTZXBhcmF0b3JzLmV4ZWMpO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcbnZhciB0b0xvd2VyQ2FzZSA9IHVuY3VycnlUaGlzKCcnLnRvTG93ZXJDYXNlKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG4gKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhIHBhaXIgb2Ygc3Vycm9nYXRlIGhhbHZlcyAoZWFjaCBvZiB3aGljaFxuICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG4gKiBtYXRjaGluZyBVVEYtMTYuXG4gKi9cbnZhciB1Y3MyZGVjb2RlID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIHZhciBjb3VudGVyID0gMDtcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gY2hhckNvZGVBdChzdHJpbmcsIGNvdW50ZXIrKyk7XG4gICAgaWYgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERCRkYgJiYgY291bnRlciA8IGxlbmd0aCkge1xuICAgICAgLy8gSXQncyBhIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3Rlci5cbiAgICAgIHZhciBleHRyYSA9IGNoYXJDb2RlQXQoc3RyaW5nLCBjb3VudGVyKyspO1xuICAgICAgaWYgKChleHRyYSAmIDB4RkMwMCkgPT09IDB4REMwMCkgeyAvLyBMb3cgc3Vycm9nYXRlLlxuICAgICAgICBwdXNoKG91dHB1dCwgKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEl0J3MgYW4gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG5leHQgY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyLlxuICAgICAgICBwdXNoKG91dHB1dCwgdmFsdWUpO1xuICAgICAgICBjb3VudGVyLS07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHB1c2gob3V0cHV0LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cbiAqL1xudmFyIGRpZ2l0VG9CYXNpYyA9IGZ1bmN0aW9uIChkaWdpdCkge1xuICAvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuICAvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcbiAgcmV0dXJuIGRpZ2l0ICsgMjIgKyA3NSAqIChkaWdpdCA8IDI2KTtcbn07XG5cbi8qKlxuICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cbiAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG4gKi9cbnZhciBhZGFwdCA9IGZ1bmN0aW9uIChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcbiAgdmFyIGsgPSAwO1xuICBkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuICBkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG4gIHdoaWxlIChkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDEpIHtcbiAgICBkZWx0YSA9IGZsb29yKGRlbHRhIC8gYmFzZU1pbnVzVE1pbik7XG4gICAgayArPSBiYXNlO1xuICB9XG4gIHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgKGUuZy4gYSBkb21haW4gbmFtZSBsYWJlbCkgdG8gYVxuICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqL1xudmFyIGVuY29kZSA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgb3V0cHV0ID0gW107XG5cbiAgLy8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gYW4gYXJyYXkgb2YgVW5pY29kZSBjb2RlIHBvaW50cy5cbiAgaW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuICAvLyBDYWNoZSB0aGUgbGVuZ3RoLlxuICB2YXIgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgc3RhdGUuXG4gIHZhciBuID0gaW5pdGlhbE47XG4gIHZhciBkZWx0YSA9IDA7XG4gIHZhciBiaWFzID0gaW5pdGlhbEJpYXM7XG4gIHZhciBpLCBjdXJyZW50VmFsdWU7XG5cbiAgLy8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50cy5cbiAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY3VycmVudFZhbHVlID0gaW5wdXRbaV07XG4gICAgaWYgKGN1cnJlbnRWYWx1ZSA8IDB4ODApIHtcbiAgICAgIHB1c2gob3V0cHV0LCBmcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDsgLy8gbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuICB2YXIgaGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aDsgLy8gbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cbiAgLy8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgd2l0aCBhIGRlbGltaXRlciB1bmxlc3MgaXQncyBlbXB0eS5cbiAgaWYgKGJhc2ljTGVuZ3RoKSB7XG4gICAgcHVzaChvdXRwdXQsIGRlbGltaXRlcik7XG4gIH1cblxuICAvLyBNYWluIGVuY29kaW5nIGxvb3A6XG4gIHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG4gICAgLy8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dCBsYXJnZXIgb25lOlxuICAgIHZhciBtID0gbWF4SW50O1xuICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgY3VycmVudFZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuICAgICAgICBtID0gY3VycmVudFZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPiwgYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cuXG4gICAgdmFyIGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcbiAgICBpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuICAgICAgdGhyb3cgbmV3ICRSYW5nZUVycm9yKE9WRVJGTE9XX0VSUk9SKTtcbiAgICB9XG5cbiAgICBkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuICAgIG4gPSBtO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3ICRSYW5nZUVycm9yKE9WRVJGTE9XX0VSUk9SKTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPT09IG4pIHtcbiAgICAgICAgLy8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIuXG4gICAgICAgIHZhciBxID0gZGVsdGE7XG4gICAgICAgIHZhciBrID0gYmFzZTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICB2YXIgdCA9IGsgPD0gYmlhcyA/IHRNaW4gOiBrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzO1xuICAgICAgICAgIGlmIChxIDwgdCkgYnJlYWs7XG4gICAgICAgICAgdmFyIHFNaW51c1QgPSBxIC0gdDtcbiAgICAgICAgICB2YXIgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuICAgICAgICAgIHB1c2gob3V0cHV0LCBmcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCkpKTtcbiAgICAgICAgICBxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuICAgICAgICAgIGsgKz0gYmFzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2gob3V0cHV0LCBmcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEpKSk7XG4gICAgICAgIGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PT0gYmFzaWNMZW5ndGgpO1xuICAgICAgICBkZWx0YSA9IDA7XG4gICAgICAgIGhhbmRsZWRDUENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGVsdGErKztcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIGpvaW4ob3V0cHV0LCAnJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgZW5jb2RlZCA9IFtdO1xuICB2YXIgbGFiZWxzID0gc3BsaXQocmVwbGFjZSh0b0xvd2VyQ2FzZShpbnB1dCksIHJlZ2V4U2VwYXJhdG9ycywgJ1xcdTAwMkUnKSwgJy4nKTtcbiAgdmFyIGksIGxhYmVsO1xuICBmb3IgKGkgPSAwOyBpIDwgbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGFiZWwgPSBsYWJlbHNbaV07XG4gICAgcHVzaChlbmNvZGVkLCBleGVjKHJlZ2V4Tm9uQVNDSUksIGxhYmVsKSA/ICd4bi0tJyArIGVuY29kZShsYWJlbCkgOiBsYWJlbCk7XG4gIH1cbiAgcmV0dXJuIGpvaW4oZW5jb2RlZCwgJy4nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUucmVwZWF0YCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBlYXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PT0gSW5maW5pdHkpIHRocm93IG5ldyAkUmFuZ2VFcnJvcignV3JvbmcgbnVtYmVyIG9mIHJlcGV0aXRpb25zJyk7XG4gIGZvciAoO24gPiAwOyAobiA+Pj49IDEpICYmIChzdHIgKz0gc3RyKSkgaWYgKG4gJiAxKSByZXN1bHQgKz0gc3RyO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuUFJPUEVSO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIG5vbiA9ICdcXHUyMDBCXFx1MDA4NVxcdTE4MEUnO1xuXG4vLyBjaGVjayB0aGF0IGEgbWV0aG9kIHdvcmtzIHdpdGggdGhlIGNvcnJlY3QgbGlzdFxuLy8gb2Ygd2hpdGVzcGFjZXMgYW5kIGhhcyBhIGNvcnJlY3QgbmFtZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgcmV0dXJuIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISF3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0oKVxuICAgICAgfHwgbm9uW01FVEhPRF9OQU1FXSgpICE9PSBub25cbiAgICAgIHx8IChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiB3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0ubmFtZSAhPT0gTUVUSE9EX05BTUUpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGx0cmltID0gUmVnRXhwKCdeWycgKyB3aGl0ZXNwYWNlcyArICddKycpO1xudmFyIHJ0cmltID0gUmVnRXhwKCcoXnxbXicgKyB3aGl0ZXNwYWNlcyArICddKVsnICsgd2hpdGVzcGFjZXMgKyAnXSskJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbSwgdHJpbVN0YXJ0LCB0cmltRW5kLCB0cmltTGVmdCwgdHJpbVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzKSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBsdHJpbSwgJycpO1xuICAgIGlmIChUWVBFICYgMikgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIHJ0cmltLCAnJDEnKTtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbUxlZnQsIHRyaW1TdGFydCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4gIHRyaW06IGNyZWF0ZU1ldGhvZCgzKVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyIGtleUZvciA9IFN5bWJvbC5rZXlGb3I7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sIHx8IGZ1bmN0aW9uIGlzUmVnaXN0ZXJlZFN5bWJvbCh2YWx1ZSkge1xuICB0cnkge1xuICAgIHJldHVybiBrZXlGb3IodGhpc1N5bWJvbFZhbHVlKHZhbHVlKSkgIT09IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciAkaXNXZWxsS25vd25TeW1ib2wgPSBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2w7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldEJ1aWx0SW4oJ09iamVjdCcsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyk7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG5mb3IgKHZhciBpID0gMCwgc3ltYm9sS2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKSwgc3ltYm9sS2V5c0xlbmd0aCA9IHN5bWJvbEtleXMubGVuZ3RoOyBpIDwgc3ltYm9sS2V5c0xlbmd0aDsgaSsrKSB7XG4gIC8vIHNvbWUgb2xkIGVuZ2luZXMgdGhyb3dzIG9uIGFjY2VzcyB0byBzb21lIGtleXMgbGlrZSBgYXJndW1lbnRzYCBvciBgY2FsbGVyYFxuICB0cnkge1xuICAgIHZhciBzeW1ib2xLZXkgPSBzeW1ib2xLZXlzW2ldO1xuICAgIGlmIChpc1N5bWJvbChTeW1ib2xbc3ltYm9sS2V5XSkpIHdlbGxLbm93blN5bWJvbChzeW1ib2xLZXkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNXZWxsS25vd25TeW1ib2wodmFsdWUpIHtcbiAgaWYgKCRpc1dlbGxLbm93blN5bWJvbCAmJiAkaXNXZWxsS25vd25TeW1ib2wodmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICB2YXIgc3ltYm9sID0gdGhpc1N5bWJvbFZhbHVlKHZhbHVlKTtcbiAgICBmb3IgKHZhciBqID0gMCwga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoOyBqIDwga2V5c0xlbmd0aDsgaisrKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxIC0tIHBvbHlmaWxsZWQgc3ltYm9scyBjYXNlXG4gICAgICBpZiAoV2VsbEtub3duU3ltYm9sc1N0b3JlW2tleXNbal1dID09IHN5bWJvbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSBzYWZlICovXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiYgISFTeW1ib2xbJ2ZvciddICYmICEhU3ltYm9sLmtleUZvcjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZScpO1xuXG52YXIgc2V0ID0gZ2xvYmFsVGhpcy5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWxUaGlzLmNsZWFySW1tZWRpYXRlO1xudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWxUaGlzLkRpc3BhdGNoO1xudmFyIEZ1bmN0aW9uID0gZ2xvYmFsVGhpcy5GdW5jdGlvbjtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbFRoaXMuTWVzc2FnZUNoYW5uZWw7XG52YXIgU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciAkbG9jYXRpb24sIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG5mYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIERlbm8gdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3Igb24gYGxvY2F0aW9uYCBhY2Nlc3Mgd2l0aG91dCBgLS1sb2NhdGlvbmAgZmxhZ1xuICAkbG9jYXRpb24gPSBnbG9iYWxUaGlzLmxvY2F0aW9uO1xufSk7XG5cbnZhciBydW4gPSBmdW5jdGlvbiAoaWQpIHtcbiAgaWYgKGhhc093bihxdWV1ZSwgaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcblxudmFyIHJ1bm5lciA9IGZ1bmN0aW9uIChpZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJ1bihpZCk7XG4gIH07XG59O1xuXG52YXIgZXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4oZXZlbnQuZGF0YSk7XG59O1xuXG52YXIgZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBvbGQgZW5naW5lcyBoYXZlIG5vdCBsb2NhdGlvbi5vcmlnaW5cbiAgZ2xvYmFsVGhpcy5wb3N0TWVzc2FnZShTdHJpbmcoaWQpLCAkbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgJGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShoYW5kbGVyKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXIgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoSVNfTk9ERSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3cocnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICAvLyBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzYyNFxuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsICYmICFJU19JT1MpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBldmVudExpc3RlbmVyO1xuICAgIGRlZmVyID0gYmluZChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0KTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoXG4gICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyICYmXG4gICAgaXNDYWxsYWJsZShnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKSAmJlxuICAgICFnbG9iYWxUaGlzLmltcG9ydFNjcmlwdHMgJiZcbiAgICAkbG9jYXRpb24gJiYgJGxvY2F0aW9uLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgIWZhaWxzKGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIpXG4gICkge1xuICAgIGRlZmVyID0gZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcjtcbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0cnVuYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXRydW5jJyk7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiB0cnVuYyhudW1iZXIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGxlbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuICByZXR1cm4gbGVuID4gMCA/IG1pbihsZW4sIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3JlbGF0aXZlLXVybC1zdHlsZSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICB2YXIgdXJsID0gbmV3IFVSTCgnYj9hPTEmYj0yJmM9MycsICdodHRwczovL2EnKTtcbiAgdmFyIHBhcmFtcyA9IHVybC5zZWFyY2hQYXJhbXM7XG4gIHZhciBwYXJhbXMyID0gbmV3IFVSTFNlYXJjaFBhcmFtcygnYT0xJmE9MiZiPTMnKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB1cmwucGF0aG5hbWUgPSAnYyUyMGQnO1xuICBwYXJhbXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgIHBhcmFtc1snZGVsZXRlJ10oJ2InKTtcbiAgICByZXN1bHQgKz0ga2V5ICsgdmFsdWU7XG4gIH0pO1xuICBwYXJhbXMyWydkZWxldGUnXSgnYScsIDIpO1xuICAvLyBgdW5kZWZpbmVkYCBjYXNlIGlzIGEgQ2hyb21pdW0gMTE3IGJ1Z1xuICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xNDIyMlxuICBwYXJhbXMyWydkZWxldGUnXSgnYicsIHVuZGVmaW5lZCk7XG4gIHJldHVybiAoSVNfUFVSRSAmJiAoIXVybC50b0pTT04gfHwgIXBhcmFtczIuaGFzKCdhJywgMSkgfHwgcGFyYW1zMi5oYXMoJ2EnLCAyKSB8fCAhcGFyYW1zMi5oYXMoJ2EnLCB1bmRlZmluZWQpIHx8IHBhcmFtczIuaGFzKCdiJykpKVxuICAgIHx8ICghcGFyYW1zLnNpemUgJiYgKElTX1BVUkUgfHwgIURFU0NSSVBUT1JTKSlcbiAgICB8fCAhcGFyYW1zLnNvcnRcbiAgICB8fCB1cmwuaHJlZiAhPT0gJ2h0dHBzOi8vYS9jJTIwZD9hPTEmYz0zJ1xuICAgIHx8IHBhcmFtcy5nZXQoJ2MnKSAhPT0gJzMnXG4gICAgfHwgU3RyaW5nKG5ldyBVUkxTZWFyY2hQYXJhbXMoJz9hPTEnKSkgIT09ICdhPTEnXG4gICAgfHwgIXBhcmFtc1tJVEVSQVRPUl1cbiAgICAvLyB0aHJvd3MgaW4gRWRnZVxuICAgIHx8IG5ldyBVUkwoJ2h0dHBzOi8vYUBiJykudXNlcm5hbWUgIT09ICdhJ1xuICAgIHx8IG5ldyBVUkxTZWFyY2hQYXJhbXMobmV3IFVSTFNlYXJjaFBhcmFtcygnYT1iJykpLmdldCgnYScpICE9PSAnYidcbiAgICAvLyBub3QgcHVueWNvZGVkIGluIEVkZ2VcbiAgICB8fCBuZXcgVVJMKCdodHRwczovL9GC0LXRgdGCJykuaG9zdCAhPT0gJ3huLS1lMWF5YmMnXG4gICAgLy8gbm90IGVzY2FwZWQgaW4gQ2hyb21lIDYyLVxuICAgIHx8IG5ldyBVUkwoJ2h0dHBzOi8vYSPQsScpLmhhc2ggIT09ICcjJUQwJUIxJ1xuICAgIC8vIGZhaWxzIGluIENocm9tZSA2Ni1cbiAgICB8fCByZXN1bHQgIT09ICdhMWMzJ1xuICAgIC8vIHRocm93cyBpbiBTYWZhcmlcbiAgICB8fCBuZXcgVVJMKCdodHRwczovL3gnLCB1bmRlZmluZWQpLmhvc3QgIT09ICd4Jztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICByZXR1cm4gcGFzc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgdmFyIFN5bWJvbCA9IHBhdGguU3ltYm9sIHx8IChwYXRoLlN5bWJvbCA9IHt9KTtcbiAgaWYgKCFoYXNPd24oU3ltYm9sLCBOQU1FKSkgZGVmaW5lUHJvcGVydHkoU3ltYm9sLCBOQU1FLCB7XG4gICAgdmFsdWU6IHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZihOQU1FKVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbmV4cG9ydHMuZiA9IHdlbGxLbm93blN5bWJvbDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBhIHN0cmluZyBvZiBhbGwgdmFsaWQgdW5pY29kZSB3aGl0ZXNwYWNlc1xubW9kdWxlLmV4cG9ydHMgPSAnXFx1MDAwOVxcdTAwMEFcXHUwMDBCXFx1MDAwQ1xcdTAwMERcXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUyMDAwXFx1MjAwMVxcdTIwMDInICtcbiAgJ1xcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGluc3RhbGxFcnJvckNhdXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UnKTtcbnZhciBpbnN0YWxsRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciBwdXNoID0gW10ucHVzaDtcblxudmFyICRBZ2dyZWdhdGVFcnJvciA9IGZ1bmN0aW9uIEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgbWVzc2FnZSAvKiAsIG9wdGlvbnMgKi8pIHtcbiAgdmFyIGlzSW5zdGFuY2UgPSBpc1Byb3RvdHlwZU9mKEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlLCB0aGlzKTtcbiAgdmFyIHRoYXQ7XG4gIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgIHRoYXQgPSBzZXRQcm90b3R5cGVPZihuZXcgJEVycm9yKCksIGlzSW5zdGFuY2UgPyBnZXRQcm90b3R5cGVPZih0aGlzKSA6IEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGF0ID0gaXNJbnN0YW5jZSA/IHRoaXMgOiBjcmVhdGUoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUpO1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCBUT19TVFJJTkdfVEFHLCAnRXJyb3InKTtcbiAgfVxuICBpZiAobWVzc2FnZSAhPT0gdW5kZWZpbmVkKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgJ21lc3NhZ2UnLCBub3JtYWxpemVTdHJpbmdBcmd1bWVudChtZXNzYWdlKSk7XG4gIGluc3RhbGxFcnJvclN0YWNrKHRoYXQsICRBZ2dyZWdhdGVFcnJvciwgdGhhdC5zdGFjaywgMSk7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikgaW5zdGFsbEVycm9yQ2F1c2UodGhhdCwgYXJndW1lbnRzWzJdKTtcbiAgdmFyIGVycm9yc0FycmF5ID0gW107XG4gIGl0ZXJhdGUoZXJyb3JzLCBwdXNoLCB7IHRoYXQ6IGVycm9yc0FycmF5IH0pO1xuICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgJ2Vycm9ycycsIGVycm9yc0FycmF5KTtcbiAgcmV0dXJuIHRoYXQ7XG59O1xuXG5pZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKCRBZ2dyZWdhdGVFcnJvciwgJEVycm9yKTtcbmVsc2UgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcygkQWdncmVnYXRlRXJyb3IsICRFcnJvciwgeyBuYW1lOiB0cnVlIH0pO1xuXG52YXIgQWdncmVnYXRlRXJyb3JQcm90b3R5cGUgPSAkQWdncmVnYXRlRXJyb3IucHJvdG90eXBlID0gY3JlYXRlKCRFcnJvci5wcm90b3R5cGUsIHtcbiAgY29uc3RydWN0b3I6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAkQWdncmVnYXRlRXJyb3IpLFxuICBtZXNzYWdlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJycpLFxuICBuYW1lOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJ0FnZ3JlZ2F0ZUVycm9yJylcbn0pO1xuXG4vLyBgQWdncmVnYXRlRXJyb3JgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFnZ3JlZ2F0ZS1lcnJvci1jb25zdHJ1Y3RvclxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAyIH0sIHtcbiAgQWdncmVnYXRlRXJyb3I6ICRBZ2dyZWdhdGVFcnJvclxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHJlcGxhY2VkIHRvIG1vZHVsZSBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3IuY29uc3RydWN0b3InKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG5cbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbi8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUID0gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIGlzQ29uY2F0U3ByZWFkYWJsZSA9IGZ1bmN0aW9uIChPKSB7XG4gIGlmICghaXNPYmplY3QoTykpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNwcmVhZGFibGUgPSBPW0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgcmV0dXJuIHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoTyk7XG59O1xuXG52YXIgRk9SQ0VEID0gIUlTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgfHwgIWFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5jb25jYXRcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBpc0NvbmNhdFNwcmVhZGFibGUgYW5kIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGNvbmNhdDogZnVuY3Rpb24gY29uY2F0KGFyZykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgdmFyIG4gPSAwO1xuICAgIHZhciBpLCBrLCBsZW5ndGgsIGxlbiwgRTtcbiAgICBmb3IgKGkgPSAtMSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBFID0gaSA9PT0gLTEgPyBPIDogYXJndW1lbnRzW2ldO1xuICAgICAgaWYgKGlzQ29uY2F0U3ByZWFkYWJsZShFKSkge1xuICAgICAgICBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShFKTtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyBsZW4pO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbGVuOyBrKyssIG4rKykgaWYgKGsgaW4gRSkgY3JlYXRlUHJvcGVydHkoQSwgbiwgRVtrXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIDEpO1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShBLCBuKyssIEUpO1xuICAgICAgfVxuICAgIH1cbiAgICBBLmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9PSBmb3JFYWNoIH0sIHtcbiAgZm9yRWFjaDogZm9yRWFjaFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmNsdWRlcztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIEZGOTkrIGJ1Z1xudmFyIEJST0tFTl9PTl9TUEFSU0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtaW5jbHVkZXMgLS0gZGV0ZWN0aW9uXG4gIHJldHVybiAhQXJyYXkoMSkuaW5jbHVkZXMoKTtcbn0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCUk9LRU5fT05fU1BBUlNFIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbi8vIGBBcnJheS5pc0FycmF5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuaXNhcnJheVxuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzQXJyYXk6IGlzQXJyYXlcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSBudWxsO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5zb21lO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3NvbWUnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFTVFJJQ1RfTUVUSE9EIH0sIHtcbiAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkc29tZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVybmFsU29ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zb3J0Jyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgRkYgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtZmYtdmVyc2lvbicpO1xudmFyIElFX09SX0VER0UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtaWUtb3ItZWRnZScpO1xudmFyIFY4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBXRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtd2Via2l0LXZlcnNpb24nKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdW5jdXJyeVRoaXModGVzdC5zb3J0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXModGVzdC5wdXNoKTtcblxuLy8gSUU4LVxudmFyIEZBSUxTX09OX1VOREVGSU5FRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KTtcbi8vIFY4IGJ1Z1xudmFyIEZBSUxTX09OX05VTEwgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydChudWxsKTtcbn0pO1xuLy8gT2xkIFdlYktpdFxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb3J0Jyk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDcwO1xuICBpZiAoRkYgJiYgRkYgPiAzKSByZXR1cm47XG4gIGlmIChJRV9PUl9FREdFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdFQktJVCkgcmV0dXJuIFdFQktJVCA8IDYwMztcblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBjb2RlLCBjaHIsIHZhbHVlLCBpbmRleDtcblxuICAvLyBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIG1vcmUgNTEyIGVsZW1lbnRzIChDaGFrcmEgYW5kIG9sZCBWOCBmYWlscyBvbmx5IGluIHRoaXMgY2FzZSlcbiAgZm9yIChjb2RlID0gNjU7IGNvZGUgPCA3NjsgY29kZSsrKSB7XG4gICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSA2NjogY2FzZSA2OTogY2FzZSA3MDogY2FzZSA3MjogdmFsdWUgPSAzOyBicmVhaztcbiAgICAgIGNhc2UgNjg6IGNhc2UgNzE6IHZhbHVlID0gNDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB2YWx1ZSA9IDI7XG4gICAgfVxuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDc7IGluZGV4KyspIHtcbiAgICAgIHRlc3QucHVzaCh7IGs6IGNociArIGluZGV4LCB2OiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudiAtIGEudjsgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGVzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSB0ZXN0W2luZGV4XS5rLmNoYXJBdCgwKTtcbiAgICBpZiAocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IGNocikgcmVzdWx0ICs9IGNocjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgIT09ICdER0JFRkhBQ0lKSyc7XG59KTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRCB8fCAhU1RBQkxFX1NPUlQ7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICByZXR1cm4gdG9TdHJpbmcoeCkgPiB0b1N0cmluZyh5KSA/IDEgOiAtMTtcbiAgfTtcbn07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb3J0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG5cbiAgICB2YXIgYXJyYXkgPSB0b09iamVjdCh0aGlzKTtcblxuICAgIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkID8gbmF0aXZlU29ydChhcnJheSkgOiBuYXRpdmVTb3J0KGFycmF5LCBjb21wYXJlZm4pO1xuXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICAgIHZhciBpdGVtc0xlbmd0aCwgaW5kZXg7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGluZGV4IGluIGFycmF5KSBwdXNoKGl0ZW1zLCBhcnJheVtpbmRleF0pO1xuICAgIH1cblxuICAgIGludGVybmFsU29ydChpdGVtcywgZ2V0U29ydENvbXBhcmUoY29tcGFyZWZuKSk7XG5cbiAgICBpdGVtc0xlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZW1zKTtcbiAgICBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBpdGVtc0xlbmd0aCkgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXgrK107XG4gICAgd2hpbGUgKGluZGV4IDwgYXJyYXlMZW5ndGgpIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhhcnJheSwgaW5kZXgrKyk7XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgJERhdGUgPSBEYXRlO1xudmFyIHRoaXNUaW1lVmFsdWUgPSB1bmN1cnJ5VGhpcygkRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSk7XG5cbi8vIGBEYXRlLm5vd2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUubm93XG4kKHsgdGFyZ2V0OiAnRGF0ZScsIHN0YXQ6IHRydWUgfSwge1xuICBub3c6IGZ1bmN0aW9uIG5vdygpIHtcbiAgICByZXR1cm4gdGhpc1RpbWVWYWx1ZShuZXcgJERhdGUoKSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgdG9JU09TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGF0ZS10by1pc28tc3RyaW5nJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgY2FsbChEYXRlLnByb3RvdHlwZS50b0pTT04sIHsgdG9JU09TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0gfSkgIT09IDE7XG59KTtcblxuLy8gYERhdGUucHJvdG90eXBlLnRvSlNPTmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLnRvanNvblxuJCh7IHRhcmdldDogJ0RhdGUnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwdiA9IHRvUHJpbWl0aXZlKE8sICdudW1iZXInKTtcbiAgICByZXR1cm4gdHlwZW9mIHB2ID09ICdudW1iZXInICYmICFpc0Zpbml0ZShwdikgPyBudWxsIDpcbiAgICAgICghKCd0b0lTT1N0cmluZycgaW4gTykgJiYgY2xhc3NvZihPKSA9PT0gJ0RhdGUnKSA/IGNhbGwodG9JU09TdHJpbmcsIE8pIDogTy50b0lTT1N0cmluZygpO1xuICB9XG59KTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGdldFJlcGxhY2VyRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24nKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJHN0cmluZ2lmeSA9IGdldEJ1aWx0SW4oJ0pTT04nLCAnc3RyaW5naWZ5Jyk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKC8uLy5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbnVtYmVyVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG52YXIgdGVzdGVyID0gL1tcXHVEODAwLVxcdURGRkZdL2c7XG52YXIgbG93ID0gL15bXFx1RDgwMC1cXHVEQkZGXSQvO1xudmFyIGhpID0gL15bXFx1REMwMC1cXHVERkZGXSQvO1xuXG52YXIgV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoJ3N0cmluZ2lmeSBkZXRlY3Rpb24nKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgcmV0dXJuICRzdHJpbmdpZnkoW3N5bWJvbF0pICE9PSAnW251bGxdJ1xuICAgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAgIHx8ICRzdHJpbmdpZnkoeyBhOiBzeW1ib2wgfSkgIT09ICd7fSdcbiAgICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICAgIHx8ICRzdHJpbmdpZnkoT2JqZWN0KHN5bWJvbCkpICE9PSAne30nO1xufSk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXdlbGwtZm9ybWVkLXN0cmluZ2lmeVxudmFyIElMTF9GT1JNRURfVU5JQ09ERSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRzdHJpbmdpZnkoJ1xcdURGMDZcXHVEODM0JykgIT09ICdcIlxcXFx1ZGYwNlxcXFx1ZDgzNFwiJ1xuICAgIHx8ICRzdHJpbmdpZnkoJ1xcdURFQUQnKSAhPT0gJ1wiXFxcXHVkZWFkXCInO1xufSk7XG5cbnZhciBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA9IGZ1bmN0aW9uIChpdCwgcmVwbGFjZXIpIHtcbiAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gIHZhciAkcmVwbGFjZXIgPSBnZXRSZXBsYWNlckZ1bmN0aW9uKHJlcGxhY2VyKTtcbiAgaWYgKCFpc0NhbGxhYmxlKCRyZXBsYWNlcikgJiYgKGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gIGFyZ3NbMV0gPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIHNvbWUgb2xkIGltcGxlbWVudGF0aW9ucyAobGlrZSBXZWJLaXQpIGNvdWxkIHBhc3MgbnVtYmVycyBhcyBrZXlzXG4gICAgaWYgKGlzQ2FsbGFibGUoJHJlcGxhY2VyKSkgdmFsdWUgPSBjYWxsKCRyZXBsYWNlciwgdGhpcywgJFN0cmluZyhrZXkpLCB2YWx1ZSk7XG4gICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbiAgcmV0dXJuIGFwcGx5KCRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xufTtcblxudmFyIGZpeElsbEZvcm1lZCA9IGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0LCBzdHJpbmcpIHtcbiAgdmFyIHByZXYgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgLSAxKTtcbiAgdmFyIG5leHQgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgKyAxKTtcbiAgaWYgKChleGVjKGxvdywgbWF0Y2gpICYmICFleGVjKGhpLCBuZXh0KSkgfHwgKGV4ZWMoaGksIG1hdGNoKSAmJiAhZXhlYyhsb3csIHByZXYpKSkge1xuICAgIHJldHVybiAnXFxcXHUnICsgbnVtYmVyVG9TdHJpbmcoY2hhckNvZGVBdChtYXRjaCwgMCksIDE2KTtcbiAgfSByZXR1cm4gbWF0Y2g7XG59O1xuXG5pZiAoJHN0cmluZ2lmeSkge1xuICAvLyBgSlNPTi5zdHJpbmdpZnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24uc3RyaW5naWZ5XG4gICQoeyB0YXJnZXQ6ICdKU09OJywgc3RhdDogdHJ1ZSwgYXJpdHk6IDMsIGZvcmNlZDogV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIHx8IElMTF9GT1JNRURfVU5JQ09ERSB9LCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgICAgIHZhciByZXN1bHQgPSBhcHBseShXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPyBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA6ICRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xuICAgICAgcmV0dXJuIElMTF9GT1JNRURfVU5JQ09ERSAmJiB0eXBlb2YgcmVzdWx0ID09ICdzdHJpbmcnID8gcmVwbGFjZShyZXN1bHQsIHRlc3RlciwgZml4SWxsRm9ybWVkKSA6IHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBKU09OW0BAdG9TdHJpbmdUYWddIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24tQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsVGhpcy5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtYXNzaWduJyk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBhcml0eTogMiwgZm9yY2VkOiBPYmplY3QuYXNzaWduICE9PSBhc3NpZ24gfSwge1xuICBhc3NpZ246IGFzc2lnblxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyAhPT0gZGVmaW5lUHJvcGVydGllcywgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydGllczogZGVmaW5lUHJvcGVydGllc1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAhPT0gZGVmaW5lUHJvcGVydHksIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnR5OiBkZWZpbmVQcm9wZXJ0eVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIga2V5LCBkZXNjcmlwdG9yO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSA9IGtleXNbaW5kZXgrK10pO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxuLy8gVjggfiBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRk9SQ0VEID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5c3ltYm9sc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICB2YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gJGdldE93blByb3BlcnR5U3ltYm9scyh0b09iamVjdChpdCkpIDogW107XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVLZXlzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBrZXlzOiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXModG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxuLy8gYFByb21pc2UuYWxsU2V0dGxlZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsc2V0dGxlZFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYWxsU2V0dGxlZDogZnVuY3Rpb24gYWxsU2V0dGxlZChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAnZnVsZmlsbGVkJywgdmFsdWU6IHZhbHVlIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ3JlamVjdGVkJywgcmVhc29uOiBlcnJvciB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbnZhciBQUk9NSVNFX0FOWV9FUlJPUiA9ICdObyBvbmUgcHJvbWlzZSByZXNvbHZlZCc7XG5cbi8vIGBQcm9taXNlLmFueWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYW55XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbnk6IGZ1bmN0aW9uIGFueShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgQWdncmVnYXRlRXJyb3IgPSBnZXRCdWlsdEluKCdBZ2dyZWdhdGVFcnJvcicpO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIHZhciBhbHJlYWR5UmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlSZWplY3RlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBlcnJvcnNbaW5kZXhdID0gZXJyb3I7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZWplY3QobmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgUFJPTUlTRV9BTllfRVJST1IpKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmNhdGNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsIHJlYWw6IHRydWUgfSwge1xuICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgfVxufSk7XG5cbi8vIG1ha2VzIHN1cmUgdGhhdCBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzIGBQcm9taXNlI2NhdGNoYCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2NhdGNoJ107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICE9PSBtZXRob2QpIHtcbiAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICdjYXRjaCcsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9taWNyb3Rhc2snKTtcbnZhciBob3N0UmVwb3J0RXJyb3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycycpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIFF1ZXVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3F1ZXVlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uQ09OU1RSVUNUT1I7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlJFSkVDVElPTl9FVkVOVDtcbnZhciBOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORyA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5TVUJDTEFTU0lORztcbnZhciBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFBST01JU0UpO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yO1xudmFyIFByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbnZhciBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eTtcblxudmFyIERJU1BBVENIX0VWRU5UID0gISEoZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRXZlbnQgJiYgZ2xvYmFsVGhpcy5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcblxudmFyIEludGVybmFsLCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgUHJvbWlzZVdyYXBwZXIsIG5hdGl2ZVRoZW47XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIGlzQ2FsbGFibGUodGhlbiA9IGl0LnRoZW4pID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIGNhbGxSZWFjdGlvbiA9IGZ1bmN0aW9uIChyZWFjdGlvbiwgc3RhdGUpIHtcbiAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gIHZhciBvayA9IHN0YXRlLnN0YXRlID09PSBGVUxGSUxMRUQ7XG4gIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICB0cnkge1xuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGlmIChzdGF0ZS5yZWplY3Rpb24gPT09IFVOSEFORExFRCkgb25IYW5kbGVVbmhhbmRsZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gY2FuIHRocm93XG4gICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgY2FsbCh0aGVuLCByZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICByZWplY3QoZXJyb3IpO1xuICB9XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWFjdGlvbnMgPSBzdGF0ZS5yZWFjdGlvbnM7XG4gICAgdmFyIHJlYWN0aW9uO1xuICAgIHdoaWxlIChyZWFjdGlvbiA9IHJlYWN0aW9ucy5nZXQoKSkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbFRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0gZWxzZSBldmVudCA9IHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiByZWFzb24gfTtcbiAgaWYgKCFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgJiYgKGhhbmRsZXIgPSBnbG9iYWxUaGlzWydvbicgKyBuYW1lXSkpIGhhbmRsZXIoZXZlbnQpO1xuICBlbHNlIGlmIChuYW1lID09PSBVTkhBTkRMRURfUkVKRUNUSU9OKSBob3N0UmVwb3J0RXJyb3JzKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24pO1xufTtcblxudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsVGhpcywgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsVGhpcywgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIGlmIChJU19OT0RFKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChSRUpFQ1RJT05fSEFORExFRCwgcHJvbWlzZSwgc3RhdGUudmFsdWUpO1xuICB9KTtcbn07XG5cbnZhciBiaW5kID0gZnVuY3Rpb24gKGZuLCBzdGF0ZSwgdW53cmFwKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBmbihzdGF0ZSwgdmFsdWUsIHVud3JhcCk7XG4gIH07XG59O1xuXG52YXIgaW50ZXJuYWxSZWplY3QgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICBzdGF0ZS5zdGF0ZSA9IFJFSkVDVEVEO1xuICBub3RpZnkoc3RhdGUsIHRydWUpO1xufTtcblxudmFyIGludGVybmFsUmVzb2x2ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHRyeSB7XG4gICAgaWYgKHN0YXRlLmZhY2FkZSA9PT0gdmFsdWUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICB2YXIgdGhlbiA9IGlzVGhlbmFibGUodmFsdWUpO1xuICAgIGlmICh0aGVuKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsKHRoZW4sIHZhbHVlLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlc29sdmUsIHdyYXBwZXIsIHN0YXRlKSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZWplY3QsIHdyYXBwZXIsIHN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaW50ZXJuYWxSZWplY3Qod3JhcHBlciwgZXJyb3IsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICBzdGF0ZS5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICAgIG5vdGlmeShzdGF0ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnRlcm5hbFJlamVjdCh7IGRvbmU6IGZhbHNlIH0sIGVycm9yLCBzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgUHJvbWlzZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgYUNhbGxhYmxlKGV4ZWN1dG9yKTtcbiAgICBjYWxsKEludGVybmFsLCB0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKSwgYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaW50ZXJuYWxSZWplY3Qoc3RhdGUsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgUHJvbWlzZVByb3RvdHlwZSA9IFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBQUk9NSVNFLFxuICAgICAgZG9uZTogZmFsc2UsXG4gICAgICBub3RpZmllZDogZmFsc2UsXG4gICAgICBwYXJlbnQ6IGZhbHNlLFxuICAgICAgcmVhY3Rpb25zOiBuZXcgUXVldWUoKSxcbiAgICAgIHJlamVjdGlvbjogZmFsc2UsXG4gICAgICBzdGF0ZTogUEVORElORyxcbiAgICAgIHZhbHVlOiBudWxsXG4gICAgfSk7XG4gIH07XG5cbiAgLy8gYFByb21pc2UucHJvdG90eXBlLnRoZW5gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLnRoZW5cbiAgSW50ZXJuYWwucHJvdG90eXBlID0gZGVmaW5lQnVpbHRJbihQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yKSk7XG4gICAgc3RhdGUucGFyZW50ID0gdHJ1ZTtcbiAgICByZWFjdGlvbi5vayA9IGlzQ2FsbGFibGUob25GdWxmaWxsZWQpID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgIHJlYWN0aW9uLmZhaWwgPSBpc0NhbGxhYmxlKG9uUmVqZWN0ZWQpICYmIG9uUmVqZWN0ZWQ7XG4gICAgcmVhY3Rpb24uZG9tYWluID0gSVNfTk9ERSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gUEVORElORykgc3RhdGUucmVhY3Rpb25zLmFkZChyZWFjdGlvbik7XG4gICAgZWxzZSBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gIH0pO1xuXG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUocHJvbWlzZSk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpO1xuICAgIHRoaXMucmVqZWN0ID0gYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpO1xuICB9O1xuXG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikgJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIG5hdGl2ZVRoZW4gPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLnRoZW47XG5cbiAgICBpZiAoIU5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HKSB7XG4gICAgICAvLyBtYWtlIGBQcm9taXNlI3RoZW5gIHJldHVybiBhIHBvbHlmaWxsZWQgYFByb21pc2VgIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBjYWxsKG5hdGl2ZVRoZW4sIHRoYXQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY0MFxuICAgICAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBgLmNvbnN0cnVjdG9yID09PSBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICAgIC8vIG1ha2UgYGluc3RhbmNlb2YgUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgc2V0UHJvdG90eXBlT2YoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10aGVuYWJsZSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10uY2FsbCh7IHRoZW46IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBOT05fR0VORVJJQyB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSBpc0NhbGxhYmxlKG9uRmluYWxseSk7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNmaW5hbGx5YCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnZmluYWxseScsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3Mgc3BsaXQgdG8gbW9kdWxlcyBsaXN0ZWQgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFsbCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UucmFjZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJlc29sdmUnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xuXG4vLyBgUHJvbWlzZS5yZWplY3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlamVjdFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICB2YXIgY2FwYWJpbGl0eVJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIGNhcGFiaWxpdHlSZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG5cbnZhciBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID0gZ2V0QnVpbHRJbignUHJvbWlzZScpO1xudmFyIENIRUNLX1dSQVBQRVIgPSBJU19QVVJFICYmICFGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQ0hFQ0tfV1JBUFBFUiAmJiB0aGlzID09PSBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID8gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG4vLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2Utd2l0aC1yZXNvbHZlcnNcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHdpdGhSZXNvbHZlcnM6IGZ1bmN0aW9uIHdpdGhSZXNvbHZlcnMoKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvbWlzZTogcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZSxcbiAgICAgIHJlc29sdmU6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUsXG4gICAgICByZWplY3Q6IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdFxuICAgIH07XG4gIH1cbn0pO1xuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uU3Ryb25nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIGBTZXRgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC1vYmplY3RzXG5jb2xsZWN0aW9uKCdTZXQnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25TdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZGlmZmVyZW5jZScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdkaWZmZXJlbmNlJykgfSwge1xuICBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJzZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pbnRlcnNlY3Rpb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbnZhciBJTkNPUlJFQ1QgPSAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaW50ZXJzZWN0aW9uJykgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgZXMvbm8tc2V0IC0tIHRlc3RpbmdcbiAgcmV0dXJuIFN0cmluZyhBcnJheS5mcm9tKG5ldyBTZXQoWzEsIDIsIDNdKS5pbnRlcnNlY3Rpb24obmV3IFNldChbMywgMl0pKSkpICE9PSAnMywyJztcbn0pO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1QgfSwge1xuICBpbnRlcnNlY3Rpb246IGludGVyc2VjdGlvblxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0Rpc2pvaW50RnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNEaXNqb2ludEZyb20nKSB9LCB7XG4gIGlzRGlzam9pbnRGcm9tOiBpc0Rpc2pvaW50RnJvbVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1N1YnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdWJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNTdWJzZXRPZicpIH0sIHtcbiAgaXNTdWJzZXRPZjogaXNTdWJzZXRPZlxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1N1cGVyc2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnaXNTdXBlcnNldE9mJykgfSwge1xuICBpc1N1cGVyc2V0T2Y6IGlzU3VwZXJzZXRPZlxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHJlcGxhY2VkIHRvIG1vZHVsZSBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuY29uc3RydWN0b3InKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHN5bW1ldHJpY0RpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXN5bW1ldHJpYy1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3N5bW1ldHJpY0RpZmZlcmVuY2UnKSB9LCB7XG4gIHN5bW1ldHJpY0RpZmZlcmVuY2U6IHN5bW1ldHJpY0RpZmZlcmVuY2Vcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5pb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXVuaW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCd1bmlvbicpIH0sIHtcbiAgdW5pb246IHVuaW9uXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xuXG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3RyaW5nLWZyb21jb2RlcG9pbnQgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxuLy8gbGVuZ3RoIHNob3VsZCBiZSAxLCBvbGQgRkYgcHJvYmxlbVxudmFyIElOQ09SUkVDVF9MRU5HVEggPSAhISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPT0gMTtcblxuLy8gYFN0cmluZy5mcm9tQ29kZVBvaW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLmZyb21jb2RlcG9pbnRcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBzdGF0OiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBJTkNPUlJFQ1RfTEVOR1RIIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gW107XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBjb2RlID0gK2FyZ3VtZW50c1tpKytdO1xuICAgICAgaWYgKHRvQWJzb2x1dGVJbmRleChjb2RlLCAweDEwRkZGRikgIT09IGNvZGUpIHRocm93IG5ldyAkUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICBlbGVtZW50c1tpXSA9IGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweEQ4MDAsIGNvZGUgJSAweDQwMCArIDB4REMwMCk7XG4gICAgfSByZXR1cm4gam9pbihlbGVtZW50cywgJycpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIG5vdEFSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjb3JyZWN0SXNSZWdFeHBMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYycpO1xuXG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhY29ycmVjdElzUmVnRXhwTG9naWMoJ2luY2x1ZGVzJykgfSwge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfnN0cmluZ0luZGV4T2YoXG4gICAgICB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKSxcbiAgICAgIHRvU3RyaW5nKG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKSksXG4gICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcblxudmFyIFNUUklOR19JVEVSQVRPUiA9ICdTdHJpbmcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLUBAaXRlcmF0b3JcbmRlZmluZUl0ZXJhdG9yKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiB0b1N0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXN0cmluZ2l0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocG9pbnQsIGZhbHNlKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIGZvcmNlZFN0cmluZ1RyaW1NZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdUcmltTWV0aG9kKCd0cmltJykgfSwge1xuICB0cmltOiBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jSXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5hc3luY2l0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jSXRlcmF0b3InKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBuYXRpdmVPYmplY3RDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgSElEREVOID0gc2hhcmVkS2V5KCdoaWRkZW4nKTtcbnZhciBTWU1CT0wgPSAnU3ltYm9sJztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcblxudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyICRTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsVGhpcy5SYW5nZUVycm9yO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFFPYmplY3QgPSBnbG9iYWxUaGlzLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuYXRpdmVPYmplY3RDcmVhdGUobnVsbCkpKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgJHRoaXMgPSB0aGlzID09PSB1bmRlZmluZWQgPyBnbG9iYWxUaGlzIDogdGhpcztcbiAgICAgIGlmICgkdGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bigkdGhpcywgSElEREVOKSAmJiBoYXNPd24oJHRoaXNbSElEREVOXSwgdGFnKSkgJHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5oYXNJbnN0YW5jZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmhhc2luc3RhbmNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2hhc0luc3RhbmNlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmlzY29uY2F0c3ByZWFkYWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBzcGxpdCB0byBtb2R1bGVzIGxpc3RlZCBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wua2V5Rm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmtleWZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IG5ldyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoc3ltKSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG4gICAgaWYgKGhhc093bihTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5LCBzeW0pKSByZXR1cm4gU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1dO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hBbGxgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaGFsbFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaEFsbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnJlcGxhY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5yZXBsYWNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc2VhcmNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc2VhcmNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NlYXJjaCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGVjaWVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BlY2llc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwbGl0YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BsaXRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BsaXQnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC50b1ByaW1pdGl2ZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvcHJpbWl0aXZlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIGBTeW1ib2wudG9TdHJpbmdUYWdgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3N0cmluZ3RhZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnZXRCdWlsdEluKCdTeW1ib2wnKSwgJ1N5bWJvbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC51bnNjb3BhYmxlc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnVuc2NvcGFibGVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBNRVRBREFUQSA9IHdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLy8gRnVuY3Rpb24ucHJvdG90eXBlW0BAbWV0YWRhdGFdXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmlmIChGdW5jdGlvblByb3RvdHlwZVtNRVRBREFUQV0gPT09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShGdW5jdGlvblByb3RvdHlwZSwgTUVUQURBVEEsIHtcbiAgICB2YWx1ZTogbnVsbFxuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXN5bmMtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0Rpc3Bvc2UnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuY3VzdG9tTWF0Y2hlcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnY3VzdG9tTWF0Y2hlcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5kaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdkaXNwb3NlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1JlZ2lzdGVyZWRTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXJlZ2lzdGVyZWQnKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUgfSwge1xuICBpc1JlZ2lzdGVyZWRTeW1ib2w6IGlzUmVnaXN0ZXJlZFN5bWJvbFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1JlZ2lzdGVyZWRTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXJlZ2lzdGVyZWQnKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRgIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzUmVnaXN0ZXJlZFN5bWJvbCcgfSwge1xuICBpc1JlZ2lzdGVyZWQ6IGlzUmVnaXN0ZXJlZFN5bWJvbFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1dlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bicpO1xuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd25TeW1ib2w6IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duJyk7XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25gIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1dlbGxLbm93blN5bWJvbCcsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoZXJgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoZXInKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhS2V5YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21ldGFkYXRhS2V5Jyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5vYnNlcnZhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5wYXR0ZXJuTWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3BhdHRlcm5NYXRjaCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZUFsbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGNsZWFySW1tZWRpYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5jbGVhcjtcblxuLy8gYGNsZWFySW1tZWRpYXRlYCBtZXRob2Rcbi8vIGh0dHA6Ly93M2MuZ2l0aHViLmlvL3NldEltbWVkaWF0ZS8jc2ktY2xlYXJJbW1lZGlhdGVcbiQoeyBnbG9iYWw6IHRydWUsIGJpbmQ6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGZvcmNlZDogZ2xvYmFsVGhpcy5jbGVhckltbWVkaWF0ZSAhPT0gY2xlYXJJbW1lZGlhdGUgfSwge1xuICBjbGVhckltbWVkaWF0ZTogY2xlYXJJbW1lZGlhdGVcbn0pO1xuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICBzZXRUb1N0cmluZ1RhZyhnbG9iYWxUaGlzW0NPTExFQ1RJT05fTkFNRV0sIENPTExFQ1RJT05fTkFNRSk7XG4gIEl0ZXJhdG9yc1tDT0xMRUNUSU9OX05BTUVdID0gSXRlcmF0b3JzLkFycmF5O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBzcGxpdCB0byBtb2R1bGVzIGxpc3RlZCBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuY2xlYXItaW1tZWRpYXRlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5zZXQtaW1tZWRpYXRlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2V0VGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL292ZW4tc2gvYnVuL2lzc3Vlcy8xNjMzXG52YXIgc2V0SW1tZWRpYXRlID0gZ2xvYmFsVGhpcy5zZXRJbW1lZGlhdGUgPyBzY2hlZHVsZXJzRml4KHNldFRhc2ssIGZhbHNlKSA6IHNldFRhc2s7XG5cbi8vIGBzZXRJbW1lZGlhdGVgIG1ldGhvZFxuLy8gaHR0cDovL3czYy5naXRodWIuaW8vc2V0SW1tZWRpYXRlLyNzaS1zZXRJbW1lZGlhdGVcbiQoeyBnbG9iYWw6IHRydWUsIGJpbmQ6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGZvcmNlZDogZ2xvYmFsVGhpcy5zZXRJbW1lZGlhdGUgIT09IHNldEltbWVkaWF0ZSB9LCB7XG4gIHNldEltbWVkaWF0ZTogc2V0SW1tZWRpYXRlXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRJbnRlcnZhbCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsVGhpcy5zZXRJbnRlcnZhbCwgdHJ1ZSk7XG5cbi8vIEJ1biAvIElFOS0gc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0aW50ZXJ2YWxcbiQoeyBnbG9iYWw6IHRydWUsIGJpbmQ6IHRydWUsIGZvcmNlZDogZ2xvYmFsVGhpcy5zZXRJbnRlcnZhbCAhPT0gc2V0SW50ZXJ2YWwgfSwge1xuICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWxcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxudmFyIHNldFRpbWVvdXQgPSBzY2hlZHVsZXJzRml4KGdsb2JhbFRoaXMuc2V0VGltZW91dCwgdHJ1ZSk7XG5cbi8vIEJ1biAvIElFOS0gc2V0VGltZW91dCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbFRoaXMuc2V0VGltZW91dCAhPT0gc2V0VGltZW91dCB9LCB7XG4gIHNldFRpbWVvdXQ6IHNldFRpbWVvdXRcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBzcGxpdCB0byBtb2R1bGVzIGxpc3RlZCBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuc2V0LWludGVydmFsJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5zZXQtdGltZW91dCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogaW4gY29yZS1qc0A0LCBtb3ZlIC9tb2R1bGVzLyBkZXBlbmRlbmNpZXMgdG8gcHVibGljIGVudHJpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb24gYnkgdG9vbHMgbGlrZSBgcHJlc2V0LWVudmBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNhZmVHZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhZmUtZ2V0LWJ1aWx0LWluJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFVTRV9OQVRJVkVfVVJMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VybC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5U29ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zb3J0Jyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBVUkxfU0VBUkNIX1BBUkFNUyA9ICdVUkxTZWFyY2hQYXJhbXMnO1xudmFyIFVSTF9TRUFSQ0hfUEFSQU1TX0lURVJBVE9SID0gVVJMX1NFQVJDSF9QQVJBTVMgKyAnSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoVVJMX1NFQVJDSF9QQVJBTVMpO1xudmFyIGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFVSTF9TRUFSQ0hfUEFSQU1TX0lURVJBVE9SKTtcblxudmFyIG5hdGl2ZUZldGNoID0gc2FmZUdldEJ1aWx0SW4oJ2ZldGNoJyk7XG52YXIgTmF0aXZlUmVxdWVzdCA9IHNhZmVHZXRCdWlsdEluKCdSZXF1ZXN0Jyk7XG52YXIgSGVhZGVycyA9IHNhZmVHZXRCdWlsdEluKCdIZWFkZXJzJyk7XG52YXIgUmVxdWVzdFByb3RvdHlwZSA9IE5hdGl2ZVJlcXVlc3QgJiYgTmF0aXZlUmVxdWVzdC5wcm90b3R5cGU7XG52YXIgSGVhZGVyc1Byb3RvdHlwZSA9IEhlYWRlcnMgJiYgSGVhZGVycy5wcm90b3R5cGU7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgZW5jb2RlVVJJQ29tcG9uZW50ID0gZ2xvYmFsVGhpcy5lbmNvZGVVUklDb21wb25lbnQ7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciBmcm9tQ29kZVBvaW50ID0gZ2V0QnVpbHRJbignU3RyaW5nJywgJ2Zyb21Db2RlUG9pbnQnKTtcbnZhciAkcGFyc2VJbnQgPSBwYXJzZUludDtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHNoaWZ0ID0gdW5jdXJyeVRoaXMoW10uc2hpZnQpO1xudmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKC8uLy5leGVjKTtcblxudmFyIHBsdXMgPSAvXFwrL2c7XG52YXIgRkFMTEJBQ0tfUkVQTEFDRVIgPSAnXFx1RkZGRCc7XG52YXIgVkFMSURfSEVYID0gL15bMC05YS1mXSskL2k7XG5cbnZhciBwYXJzZUhleE9jdGV0ID0gZnVuY3Rpb24gKHN0cmluZywgc3RhcnQpIHtcbiAgdmFyIHN1YnN0ciA9IHN0cmluZ1NsaWNlKHN0cmluZywgc3RhcnQsIHN0YXJ0ICsgMik7XG4gIGlmICghZXhlYyhWQUxJRF9IRVgsIHN1YnN0cikpIHJldHVybiBOYU47XG5cbiAgcmV0dXJuICRwYXJzZUludChzdWJzdHIsIDE2KTtcbn07XG5cbnZhciBnZXRMZWFkaW5nT25lcyA9IGZ1bmN0aW9uIChvY3RldCkge1xuICB2YXIgY291bnQgPSAwO1xuICBmb3IgKHZhciBtYXNrID0gMHg4MDsgbWFzayA+IDAgJiYgKG9jdGV0ICYgbWFzaykgIT09IDA7IG1hc2sgPj49IDEpIHtcbiAgICBjb3VudCsrO1xuICB9XG4gIHJldHVybiBjb3VudDtcbn07XG5cbnZhciB1dGY4RGVjb2RlID0gZnVuY3Rpb24gKG9jdGV0cykge1xuICB2YXIgY29kZVBvaW50ID0gbnVsbDtcblxuICBzd2l0Y2ggKG9jdGV0cy5sZW5ndGgpIHtcbiAgICBjYXNlIDE6XG4gICAgICBjb2RlUG9pbnQgPSBvY3RldHNbMF07XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICBjb2RlUG9pbnQgPSAob2N0ZXRzWzBdICYgMHgxRikgPDwgNiB8IChvY3RldHNbMV0gJiAweDNGKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIGNvZGVQb2ludCA9IChvY3RldHNbMF0gJiAweDBGKSA8PCAxMiB8IChvY3RldHNbMV0gJiAweDNGKSA8PCA2IHwgKG9jdGV0c1syXSAmIDB4M0YpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgY29kZVBvaW50ID0gKG9jdGV0c1swXSAmIDB4MDcpIDw8IDE4IHwgKG9jdGV0c1sxXSAmIDB4M0YpIDw8IDEyIHwgKG9jdGV0c1syXSAmIDB4M0YpIDw8IDYgfCAob2N0ZXRzWzNdICYgMHgzRik7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBjb2RlUG9pbnQgPiAweDEwRkZGRiA/IG51bGwgOiBjb2RlUG9pbnQ7XG59O1xuXG52YXIgZGVjb2RlID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIGlucHV0ID0gcmVwbGFjZShpbnB1dCwgcGx1cywgJyAnKTtcbiAgdmFyIGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICB2YXIgZGVjb2RlZENoYXIgPSBjaGFyQXQoaW5wdXQsIGkpO1xuXG4gICAgaWYgKGRlY29kZWRDaGFyID09PSAnJScpIHtcbiAgICAgIGlmIChjaGFyQXQoaW5wdXQsIGkgKyAxKSA9PT0gJyUnIHx8IGkgKyAzID4gbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdCArPSAnJSc7XG4gICAgICAgIGkrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBvY3RldCA9IHBhcnNlSGV4T2N0ZXQoaW5wdXQsIGkgKyAxKTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmIChvY3RldCAhPT0gb2N0ZXQpIHtcbiAgICAgICAgcmVzdWx0ICs9IGRlY29kZWRDaGFyO1xuICAgICAgICBpKys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpICs9IDI7XG4gICAgICB2YXIgYnl0ZVNlcXVlbmNlTGVuZ3RoID0gZ2V0TGVhZGluZ09uZXMob2N0ZXQpO1xuXG4gICAgICBpZiAoYnl0ZVNlcXVlbmNlTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRlY29kZWRDaGFyID0gZnJvbUNoYXJDb2RlKG9jdGV0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChieXRlU2VxdWVuY2VMZW5ndGggPT09IDEgfHwgYnl0ZVNlcXVlbmNlTGVuZ3RoID4gNCkge1xuICAgICAgICAgIHJlc3VsdCArPSBGQUxMQkFDS19SRVBMQUNFUjtcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb2N0ZXRzID0gW29jdGV0XTtcbiAgICAgICAgdmFyIHNlcXVlbmNlSW5kZXggPSAxO1xuXG4gICAgICAgIHdoaWxlIChzZXF1ZW5jZUluZGV4IDwgYnl0ZVNlcXVlbmNlTGVuZ3RoKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGlmIChpICsgMyA+IGxlbmd0aCB8fCBjaGFyQXQoaW5wdXQsIGkpICE9PSAnJScpIGJyZWFrO1xuXG4gICAgICAgICAgdmFyIG5leHRCeXRlID0gcGFyc2VIZXhPY3RldChpbnB1dCwgaSArIDEpO1xuXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgICAgICBpZiAobmV4dEJ5dGUgIT09IG5leHRCeXRlKSB7XG4gICAgICAgICAgICBpICs9IDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5leHRCeXRlID4gMTkxIHx8IG5leHRCeXRlIDwgMTI4KSBicmVhaztcblxuICAgICAgICAgIHB1c2gob2N0ZXRzLCBuZXh0Qnl0ZSk7XG4gICAgICAgICAgaSArPSAyO1xuICAgICAgICAgIHNlcXVlbmNlSW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvY3RldHMubGVuZ3RoICE9PSBieXRlU2VxdWVuY2VMZW5ndGgpIHtcbiAgICAgICAgICByZXN1bHQgKz0gRkFMTEJBQ0tfUkVQTEFDRVI7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY29kZVBvaW50ID0gdXRmOERlY29kZShvY3RldHMpO1xuICAgICAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IEZBTExCQUNLX1JFUExBQ0VSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlY29kZWRDaGFyID0gZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0ICs9IGRlY29kZWRDaGFyO1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgZmluZCA9IC9bIScoKX5dfCUyMC9nO1xuXG52YXIgcmVwbGFjZW1lbnRzID0ge1xuICAnISc6ICclMjEnLFxuICBcIidcIjogJyUyNycsXG4gICcoJzogJyUyOCcsXG4gICcpJzogJyUyOScsXG4gICd+JzogJyU3RScsXG4gICclMjAnOiAnKydcbn07XG5cbnZhciByZXBsYWNlciA9IGZ1bmN0aW9uIChtYXRjaCkge1xuICByZXR1cm4gcmVwbGFjZW1lbnRzW21hdGNoXTtcbn07XG5cbnZhciBzZXJpYWxpemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHJlcGxhY2UoZW5jb2RlVVJJQ29tcG9uZW50KGl0KSwgZmluZCwgcmVwbGFjZXIpO1xufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihmdW5jdGlvbiBJdGVyYXRvcihwYXJhbXMsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogVVJMX1NFQVJDSF9QQVJBTVNfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHBhcmFtcykuZW50cmllcyxcbiAgICBpbmRleDogMCxcbiAgICBraW5kOiBraW5kXG4gIH0pO1xufSwgVVJMX1NFQVJDSF9QQVJBTVMsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IG51bGw7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICB2YXIgZW50cnkgPSB0YXJnZXRbaW5kZXhdO1xuICBzd2l0Y2ggKHN0YXRlLmtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkua2V5LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkudmFsdWUsIGZhbHNlKTtcbiAgfSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0sIGZhbHNlKTtcbn0sIHRydWUpO1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zU3RhdGUgPSBmdW5jdGlvbiAoaW5pdCkge1xuICB0aGlzLmVudHJpZXMgPSBbXTtcbiAgdGhpcy51cmwgPSBudWxsO1xuXG4gIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaXNPYmplY3QoaW5pdCkpIHRoaXMucGFyc2VPYmplY3QoaW5pdCk7XG4gICAgZWxzZSB0aGlzLnBhcnNlUXVlcnkodHlwZW9mIGluaXQgPT0gJ3N0cmluZycgPyBjaGFyQXQoaW5pdCwgMCkgPT09ICc/JyA/IHN0cmluZ1NsaWNlKGluaXQsIDEpIDogaW5pdCA6ICR0b1N0cmluZyhpbml0KSk7XG4gIH1cbn07XG5cblVSTFNlYXJjaFBhcmFtc1N0YXRlLnByb3RvdHlwZSA9IHtcbiAgdHlwZTogVVJMX1NFQVJDSF9QQVJBTVMsXG4gIGJpbmRVUkw6IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9LFxuICBwYXJzZU9iamVjdDogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHZhciBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKG9iamVjdCk7XG4gICAgdmFyIGl0ZXJhdG9yLCBuZXh0LCBzdGVwLCBlbnRyeUl0ZXJhdG9yLCBlbnRyeU5leHQsIGZpcnN0LCBzZWNvbmQ7XG5cbiAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3Iob2JqZWN0LCBpdGVyYXRvck1ldGhvZCk7XG4gICAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICAgIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgICAgICBlbnRyeUl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoYW5PYmplY3Qoc3RlcC52YWx1ZSkpO1xuICAgICAgICBlbnRyeU5leHQgPSBlbnRyeUl0ZXJhdG9yLm5leHQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZmlyc3QgPSBjYWxsKGVudHJ5TmV4dCwgZW50cnlJdGVyYXRvcikpLmRvbmUgfHxcbiAgICAgICAgICAoc2Vjb25kID0gY2FsbChlbnRyeU5leHQsIGVudHJ5SXRlcmF0b3IpKS5kb25lIHx8XG4gICAgICAgICAgIWNhbGwoZW50cnlOZXh0LCBlbnRyeUl0ZXJhdG9yKS5kb25lXG4gICAgICAgICkgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgc2VxdWVuY2Ugd2l0aCBsZW5ndGggMicpO1xuICAgICAgICBwdXNoKGVudHJpZXMsIHsga2V5OiAkdG9TdHJpbmcoZmlyc3QudmFsdWUpLCB2YWx1ZTogJHRvU3RyaW5nKHNlY29uZC52YWx1ZSkgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGZvciAodmFyIGtleSBpbiBvYmplY3QpIGlmIChoYXNPd24ob2JqZWN0LCBrZXkpKSB7XG4gICAgICBwdXNoKGVudHJpZXMsIHsga2V5OiBrZXksIHZhbHVlOiAkdG9TdHJpbmcob2JqZWN0W2tleV0pIH0pO1xuICAgIH1cbiAgfSxcbiAgcGFyc2VRdWVyeTogZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICB2YXIgZW50cmllcyA9IHRoaXMuZW50cmllcztcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3BsaXQocXVlcnksICcmJyk7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIGF0dHJpYnV0ZSwgZW50cnk7XG4gICAgICB3aGlsZSAoaW5kZXggPCBhdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2luZGV4KytdO1xuICAgICAgICBpZiAoYXR0cmlidXRlLmxlbmd0aCkge1xuICAgICAgICAgIGVudHJ5ID0gc3BsaXQoYXR0cmlidXRlLCAnPScpO1xuICAgICAgICAgIHB1c2goZW50cmllcywge1xuICAgICAgICAgICAga2V5OiBkZWNvZGUoc2hpZnQoZW50cnkpKSxcbiAgICAgICAgICAgIHZhbHVlOiBkZWNvZGUoam9pbihlbnRyeSwgJz0nKSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgc2VyaWFsaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGVudHJ5O1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXgrK107XG4gICAgICBwdXNoKHJlc3VsdCwgc2VyaWFsaXplKGVudHJ5LmtleSkgKyAnPScgKyBzZXJpYWxpemUoZW50cnkudmFsdWUpKTtcbiAgICB9IHJldHVybiBqb2luKHJlc3VsdCwgJyYnKTtcbiAgfSxcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5wYXJzZVF1ZXJ5KHRoaXMudXJsLnF1ZXJ5KTtcbiAgfSxcbiAgdXBkYXRlVVJMOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMudXJsKSB0aGlzLnVybC51cGRhdGUoKTtcbiAgfVxufTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtc2AgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLXVybHNlYXJjaHBhcmFtc1xudmFyIFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yID0gZnVuY3Rpb24gVVJMU2VhcmNoUGFyYW1zKC8qIGluaXQgKi8pIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUpO1xuICB2YXIgaW5pdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkO1xuICB2YXIgc3RhdGUgPSBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIG5ldyBVUkxTZWFyY2hQYXJhbXNTdGF0ZShpbml0KSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHRoaXMuc2l6ZSA9IHN0YXRlLmVudHJpZXMubGVuZ3RoO1xufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSA9IFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuZGVmaW5lQnVpbHRJbnMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCB7XG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmFwcGVuZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1hcHBlbmRcbiAgYXBwZW5kOiBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDIpO1xuICAgIHB1c2goc3RhdGUuZW50cmllcywgeyBrZXk6ICR0b1N0cmluZyhuYW1lKSwgdmFsdWU6ICR0b1N0cmluZyh2YWx1ZSkgfSk7XG4gICAgaWYgKCFERVNDUklQVE9SUykgdGhpcy5sZW5ndGgrKztcbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZGVsZXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWRlbGV0ZVxuICAnZGVsZXRlJzogZnVuY3Rpb24gKG5hbWUgLyogLCB2YWx1ZSAqLykge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBlbnRyaWVzID0gc3RhdGUuZW50cmllcztcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciAkdmFsdWUgPSBsZW5ndGggPCAyID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIHZhciB2YWx1ZSA9ICR2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJHZhbHVlIDogJHRvU3RyaW5nKCR2YWx1ZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkgJiYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgZW50cnkudmFsdWUgPT09IHZhbHVlKSkge1xuICAgICAgICBzcGxpY2UoZW50cmllcywgaW5kZXgsIDEpO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgICB9IGVsc2UgaW5kZXgrKztcbiAgICB9XG4gICAgaWYgKCFERVNDUklQVE9SUykgdGhpcy5zaXplID0gZW50cmllcy5sZW5ndGg7XG4gICAgc3RhdGUudXBkYXRlVVJMKCk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmdldGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1nZXRcbiAgZ2V0OiBmdW5jdGlvbiBnZXQobmFtZSkge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKDsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGVudHJpZXNbaW5kZXhdLmtleSA9PT0ga2V5KSByZXR1cm4gZW50cmllc1tpbmRleF0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5nZXRBbGxgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZ2V0YWxsXG4gIGdldEFsbDogZnVuY3Rpb24gZ2V0QWxsKG5hbWUpIHtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGZvciAoOyBpbmRleCA8IGVudHJpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoZW50cmllc1tpbmRleF0ua2V5ID09PSBrZXkpIHB1c2gocmVzdWx0LCBlbnRyaWVzW2luZGV4XS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmhhc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1oYXNcbiAgaGFzOiBmdW5jdGlvbiBoYXMobmFtZSAvKiAsIHZhbHVlICovKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyICR2YWx1ZSA9IGxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV07XG4gICAgdmFyIHZhbHVlID0gJHZhbHVlID09PSB1bmRlZmluZWQgPyAkdmFsdWUgOiAkdG9TdHJpbmcoJHZhbHVlKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4KytdO1xuICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5ICYmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGVudHJ5LnZhbHVlID09PSB2YWx1ZSkpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnNldGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1zZXRcbiAgc2V0OiBmdW5jdGlvbiBzZXQobmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBlbnRyaWVzID0gc3RhdGUuZW50cmllcztcbiAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciB2YWwgPSAkdG9TdHJpbmcodmFsdWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGVudHJ5O1xuICAgIGZvciAoOyBpbmRleCA8IGVudHJpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGlmIChmb3VuZCkgc3BsaWNlKGVudHJpZXMsIGluZGV4LS0sIDEpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgZW50cnkudmFsdWUgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFmb3VuZCkgcHVzaChlbnRyaWVzLCB7IGtleToga2V5LCB2YWx1ZTogdmFsIH0pO1xuICAgIGlmICghREVTQ1JJUFRPUlMpIHRoaXMuc2l6ZSA9IGVudHJpZXMubGVuZ3RoO1xuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5zb3J0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLXNvcnRcbiAgc29ydDogZnVuY3Rpb24gc29ydCgpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIGFycmF5U29ydChzdGF0ZS5lbnRyaWVzLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEua2V5ID4gYi5rZXkgPyAxIDogLTE7XG4gICAgfSk7XG4gICAgc3RhdGUudXBkYXRlVVJMKCk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFjaywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGVudHJ5O1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXgrK107XG4gICAgICBib3VuZEZ1bmN0aW9uKGVudHJ5LnZhbHVlLCBlbnRyeS5rZXksIHRoaXMpO1xuICAgIH1cbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvcih0aGlzLCAna2V5cycpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yKHRoaXMsICd2YWx1ZXMnKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4gIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvcih0aGlzLCAnZW50cmllcycpO1xuICB9XG59LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2RcbmRlZmluZUJ1aWx0SW4oVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCBJVEVSQVRPUiwgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmVudHJpZXMsIHsgbmFtZTogJ2VudHJpZXMnIH0pO1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHNlYXJjaHBhcmFtcy1zdHJpbmdpZmljYXRpb24tYmVoYXZpb3JcbmRlZmluZUJ1aWx0SW4oVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuc2VyaWFsaXplKCk7XG59LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnNpemVgIGdldHRlclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy91cmwvcHVsbC83MzRcbmlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ3NpemUnLCB7XG4gIGdldDogZnVuY3Rpb24gc2l6ZSgpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzLmxlbmd0aDtcbiAgfSxcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IsIFVSTF9TRUFSQ0hfUEFSQU1TKTtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogIVVTRV9OQVRJVkVfVVJMIH0sIHtcbiAgVVJMU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvclxufSk7XG5cbi8vIFdyYXAgYGZldGNoYCBhbmQgYFJlcXVlc3RgIGZvciBjb3JyZWN0IHdvcmsgd2l0aCBwb2x5ZmlsbGVkIGBVUkxTZWFyY2hQYXJhbXNgXG5pZiAoIVVTRV9OQVRJVkVfVVJMICYmIGlzQ2FsbGFibGUoSGVhZGVycykpIHtcbiAgdmFyIGhlYWRlcnNIYXMgPSB1bmN1cnJ5VGhpcyhIZWFkZXJzUHJvdG90eXBlLmhhcyk7XG4gIHZhciBoZWFkZXJzU2V0ID0gdW5jdXJyeVRoaXMoSGVhZGVyc1Byb3RvdHlwZS5zZXQpO1xuXG4gIHZhciB3cmFwUmVxdWVzdE9wdGlvbnMgPSBmdW5jdGlvbiAoaW5pdCkge1xuICAgIGlmIChpc09iamVjdChpbml0KSkge1xuICAgICAgdmFyIGJvZHkgPSBpbml0LmJvZHk7XG4gICAgICB2YXIgaGVhZGVycztcbiAgICAgIGlmIChjbGFzc29mKGJvZHkpID09PSBVUkxfU0VBUkNIX1BBUkFNUykge1xuICAgICAgICBoZWFkZXJzID0gaW5pdC5oZWFkZXJzID8gbmV3IEhlYWRlcnMoaW5pdC5oZWFkZXJzKSA6IG5ldyBIZWFkZXJzKCk7XG4gICAgICAgIGlmICghaGVhZGVyc0hhcyhoZWFkZXJzLCAnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgICBoZWFkZXJzU2V0KGhlYWRlcnMsICdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlKGluaXQsIHtcbiAgICAgICAgICBib2R5OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgJHRvU3RyaW5nKGJvZHkpKSxcbiAgICAgICAgICBoZWFkZXJzOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgaGVhZGVycylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSByZXR1cm4gaW5pdDtcbiAgfTtcblxuICBpZiAoaXNDYWxsYWJsZShuYXRpdmVGZXRjaCkpIHtcbiAgICAkKHsgZ2xvYmFsOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBkb250Q2FsbEdldFNldDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGZldGNoOiBmdW5jdGlvbiBmZXRjaChpbnB1dCAvKiAsIGluaXQgKi8pIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUZldGNoKGlucHV0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHdyYXBSZXF1ZXN0T3B0aW9ucyhhcmd1bWVudHNbMV0pIDoge30pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGlzQ2FsbGFibGUoTmF0aXZlUmVxdWVzdCkpIHtcbiAgICB2YXIgUmVxdWVzdENvbnN0cnVjdG9yID0gZnVuY3Rpb24gUmVxdWVzdChpbnB1dCAvKiAsIGluaXQgKi8pIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgUmVxdWVzdFByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gbmV3IE5hdGl2ZVJlcXVlc3QoaW5wdXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gd3JhcFJlcXVlc3RPcHRpb25zKGFyZ3VtZW50c1sxXSkgOiB7fSk7XG4gICAgfTtcblxuICAgIFJlcXVlc3RQcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZXF1ZXN0Q29uc3RydWN0b3I7XG4gICAgUmVxdWVzdENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IFJlcXVlc3RQcm90b3R5cGU7XG5cbiAgICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZG9udENhbGxHZXRTZXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBSZXF1ZXN0OiBSZXF1ZXN0Q29uc3RydWN0b3JcbiAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgVVJMU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvcixcbiAgZ2V0U3RhdGU6IGdldEludGVybmFsUGFyYW1zU3RhdGVcbn07XG4iLCIvLyBlbXB0eVxuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5jb25zdHJ1Y3RvcicpO1xuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgVVNFX05BVElWRV9VUkwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXJsLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgVVJMID0gZ2V0QnVpbHRJbignVVJMJyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDc1MDVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vL2lzc3Vlcy8xODg5M1xudmFyIFRIUk9XU19XSVRIT1VUX0FSR1VNRU5UUyA9IFVTRV9OQVRJVkVfVVJMICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgVVJMLmNhblBhcnNlKCk7XG59KTtcblxuLy8gQnVuIH4gMS4wLjMwIGJ1Z1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL292ZW4tc2gvYnVuL2lzc3Vlcy85MjUwXG52YXIgV1JPTkdfQVJJVFkgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBVUkwuY2FuUGFyc2UubGVuZ3RoICE9PSAxO1xufSk7XG5cbi8vIGBVUkwuY2FuUGFyc2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWNhbnBhcnNlXG4kKHsgdGFyZ2V0OiAnVVJMJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhVEhST1dTX1dJVEhPVVRfQVJHVU1FTlRTIHx8IFdST05HX0FSSVRZIH0sIHtcbiAgY2FuUGFyc2U6IGZ1bmN0aW9uIGNhblBhcnNlKHVybCkge1xuICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgdXJsU3RyaW5nID0gdG9TdHJpbmcodXJsKTtcbiAgICB2YXIgYmFzZSA9IGxlbmd0aCA8IDIgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0b1N0cmluZyhhcmd1bWVudHNbMV0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gISFuZXcgVVJMKHVybFN0cmluZywgYmFzZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogaW4gY29yZS1qc0A0LCBtb3ZlIC9tb2R1bGVzLyBkZXBlbmRlbmNpZXMgdG8gcHVibGljIGVudHJpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb24gYnkgdG9vbHMgbGlrZSBgcHJlc2V0LWVudmBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFVTRV9OQVRJVkVfVVJMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VybC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xudmFyIGFycmF5RnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mcm9tJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGNvZGVBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY29kZUF0O1xudmFyIHRvQVNDSUkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXB1bnljb2RlLXRvLWFzY2lpJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIFVSTFNlYXJjaFBhcmFtc01vZHVsZSA9IHJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmNvbnN0cnVjdG9yJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsVVJMU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcignVVJMJyk7XG52YXIgVVJMU2VhcmNoUGFyYW1zID0gVVJMU2VhcmNoUGFyYW1zTW9kdWxlLlVSTFNlYXJjaFBhcmFtcztcbnZhciBnZXRJbnRlcm5hbFNlYXJjaFBhcmFtc1N0YXRlID0gVVJMU2VhcmNoUGFyYW1zTW9kdWxlLmdldFN0YXRlO1xuXG52YXIgTmF0aXZlVVJMID0gZ2xvYmFsVGhpcy5VUkw7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgcGFyc2VJbnQgPSBnbG9iYWxUaGlzLnBhcnNlSW50O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcbnZhciBwb3AgPSB1bmN1cnJ5VGhpcyhbXS5wb3ApO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc2hpZnQgPSB1bmN1cnJ5VGhpcyhbXS5zaGlmdCk7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgdG9Mb3dlckNhc2UgPSB1bmN1cnJ5VGhpcygnJy50b0xvd2VyQ2FzZSk7XG52YXIgdW5zaGlmdCA9IHVuY3VycnlUaGlzKFtdLnVuc2hpZnQpO1xuXG52YXIgSU5WQUxJRF9BVVRIT1JJVFkgPSAnSW52YWxpZCBhdXRob3JpdHknO1xudmFyIElOVkFMSURfU0NIRU1FID0gJ0ludmFsaWQgc2NoZW1lJztcbnZhciBJTlZBTElEX0hPU1QgPSAnSW52YWxpZCBob3N0JztcbnZhciBJTlZBTElEX1BPUlQgPSAnSW52YWxpZCBwb3J0JztcblxudmFyIEFMUEhBID0gL1thLXpdL2k7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLW9ic2N1cmUtcmFuZ2UgLS0gc2FmZVxudmFyIEFMUEhBTlVNRVJJQyA9IC9bXFxkKy0uYS16XS9pO1xudmFyIERJR0lUID0gL1xcZC87XG52YXIgSEVYX1NUQVJUID0gL14weC9pO1xudmFyIE9DVCA9IC9eWzAtN10rJC87XG52YXIgREVDID0gL15cXGQrJC87XG52YXIgSEVYID0gL15bXFxkYS1mXSskL2k7XG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tY29udHJvbC1jaGFyYWN0ZXIgLS0gc2FmZSAqL1xudmFyIEZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlQgPSAvW1xcMFxcdFxcblxcciAjJS86PD4/QFtcXFxcXFxdXnxdLztcbnZhciBGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5UX0VYQ0xVRElOR19QRVJDRU5UID0gL1tcXDBcXHRcXG5cXHIgIy86PD4/QFtcXFxcXFxdXnxdLztcbnZhciBMRUFESU5HX0MwX0NPTlRST0xfT1JfU1BBQ0UgPSAvXltcXHUwMDAwLVxcdTAwMjBdKy87XG52YXIgVFJBSUxJTkdfQzBfQ09OVFJPTF9PUl9TUEFDRSA9IC8oXnxbXlxcdTAwMDAtXFx1MDAyMF0pW1xcdTAwMDAtXFx1MDAyMF0rJC87XG52YXIgVEFCX0FORF9ORVdfTElORSA9IC9bXFx0XFxuXFxyXS9nO1xuLyogZXNsaW50LWVuYWJsZSByZWdleHAvbm8tY29udHJvbC1jaGFyYWN0ZXIgLS0gc2FmZSAqL1xudmFyIEVPRjtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNpcHY0LW51bWJlci1wYXJzZXJcbnZhciBwYXJzZUlQdjQgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIHBhcnRzID0gc3BsaXQoaW5wdXQsICcuJyk7XG4gIHZhciBwYXJ0c0xlbmd0aCwgbnVtYmVycywgaW5kZXgsIHBhcnQsIHJhZGl4LCBudW1iZXIsIGlwdjQ7XG4gIGlmIChwYXJ0cy5sZW5ndGggJiYgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICcnKSB7XG4gICAgcGFydHMubGVuZ3RoLS07XG4gIH1cbiAgcGFydHNMZW5ndGggPSBwYXJ0cy5sZW5ndGg7XG4gIGlmIChwYXJ0c0xlbmd0aCA+IDQpIHJldHVybiBpbnB1dDtcbiAgbnVtYmVycyA9IFtdO1xuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0c0xlbmd0aDsgaW5kZXgrKykge1xuICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07XG4gICAgaWYgKHBhcnQgPT09ICcnKSByZXR1cm4gaW5wdXQ7XG4gICAgcmFkaXggPSAxMDtcbiAgICBpZiAocGFydC5sZW5ndGggPiAxICYmIGNoYXJBdChwYXJ0LCAwKSA9PT0gJzAnKSB7XG4gICAgICByYWRpeCA9IGV4ZWMoSEVYX1NUQVJULCBwYXJ0KSA/IDE2IDogODtcbiAgICAgIHBhcnQgPSBzdHJpbmdTbGljZShwYXJ0LCByYWRpeCA9PT0gOCA/IDEgOiAyKTtcbiAgICB9XG4gICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICBudW1iZXIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWV4ZWMocmFkaXggPT09IDEwID8gREVDIDogcmFkaXggPT09IDggPyBPQ1QgOiBIRVgsIHBhcnQpKSByZXR1cm4gaW5wdXQ7XG4gICAgICBudW1iZXIgPSBwYXJzZUludChwYXJ0LCByYWRpeCk7XG4gICAgfVxuICAgIHB1c2gobnVtYmVycywgbnVtYmVyKTtcbiAgfVxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0c0xlbmd0aDsgaW5kZXgrKykge1xuICAgIG51bWJlciA9IG51bWJlcnNbaW5kZXhdO1xuICAgIGlmIChpbmRleCA9PT0gcGFydHNMZW5ndGggLSAxKSB7XG4gICAgICBpZiAobnVtYmVyID49IHBvdygyNTYsIDUgLSBwYXJ0c0xlbmd0aCkpIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyID4gMjU1KSByZXR1cm4gbnVsbDtcbiAgfVxuICBpcHY0ID0gcG9wKG51bWJlcnMpO1xuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBudW1iZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGlwdjQgKz0gbnVtYmVyc1tpbmRleF0gKiBwb3coMjU2LCAzIC0gaW5kZXgpO1xuICB9XG4gIHJldHVybiBpcHY0O1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWlwdjYtcGFyc2VyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHMgLS0gVE9ET1xudmFyIHBhcnNlSVB2NiA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgYWRkcmVzcyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbiAgdmFyIHBpZWNlSW5kZXggPSAwO1xuICB2YXIgY29tcHJlc3MgPSBudWxsO1xuICB2YXIgcG9pbnRlciA9IDA7XG4gIHZhciB2YWx1ZSwgbGVuZ3RoLCBudW1iZXJzU2VlbiwgaXB2NFBpZWNlLCBudW1iZXIsIHN3YXBzLCBzd2FwO1xuXG4gIHZhciBjaHIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNoYXJBdChpbnB1dCwgcG9pbnRlcik7XG4gIH07XG5cbiAgaWYgKGNocigpID09PSAnOicpIHtcbiAgICBpZiAoY2hhckF0KGlucHV0LCAxKSAhPT0gJzonKSByZXR1cm47XG4gICAgcG9pbnRlciArPSAyO1xuICAgIHBpZWNlSW5kZXgrKztcbiAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XG4gIH1cbiAgd2hpbGUgKGNocigpKSB7XG4gICAgaWYgKHBpZWNlSW5kZXggPT09IDgpIHJldHVybjtcbiAgICBpZiAoY2hyKCkgPT09ICc6Jykge1xuICAgICAgaWYgKGNvbXByZXNzICE9PSBudWxsKSByZXR1cm47XG4gICAgICBwb2ludGVyKys7XG4gICAgICBwaWVjZUluZGV4Kys7XG4gICAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFsdWUgPSBsZW5ndGggPSAwO1xuICAgIHdoaWxlIChsZW5ndGggPCA0ICYmIGV4ZWMoSEVYLCBjaHIoKSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgKiAxNiArIHBhcnNlSW50KGNocigpLCAxNik7XG4gICAgICBwb2ludGVyKys7XG4gICAgICBsZW5ndGgrKztcbiAgICB9XG4gICAgaWYgKGNocigpID09PSAnLicpIHtcbiAgICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHBvaW50ZXIgLT0gbGVuZ3RoO1xuICAgICAgaWYgKHBpZWNlSW5kZXggPiA2KSByZXR1cm47XG4gICAgICBudW1iZXJzU2VlbiA9IDA7XG4gICAgICB3aGlsZSAoY2hyKCkpIHtcbiAgICAgICAgaXB2NFBpZWNlID0gbnVsbDtcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID4gMCkge1xuICAgICAgICAgIGlmIChjaHIoKSA9PT0gJy4nICYmIG51bWJlcnNTZWVuIDwgNCkgcG9pbnRlcisrO1xuICAgICAgICAgIGVsc2UgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXhlYyhESUdJVCwgY2hyKCkpKSByZXR1cm47XG4gICAgICAgIHdoaWxlIChleGVjKERJR0lULCBjaHIoKSkpIHtcbiAgICAgICAgICBudW1iZXIgPSBwYXJzZUludChjaHIoKSwgMTApO1xuICAgICAgICAgIGlmIChpcHY0UGllY2UgPT09IG51bGwpIGlwdjRQaWVjZSA9IG51bWJlcjtcbiAgICAgICAgICBlbHNlIGlmIChpcHY0UGllY2UgPT09IDApIHJldHVybjtcbiAgICAgICAgICBlbHNlIGlwdjRQaWVjZSA9IGlwdjRQaWVjZSAqIDEwICsgbnVtYmVyO1xuICAgICAgICAgIGlmIChpcHY0UGllY2UgPiAyNTUpIHJldHVybjtcbiAgICAgICAgICBwb2ludGVyKys7XG4gICAgICAgIH1cbiAgICAgICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IGFkZHJlc3NbcGllY2VJbmRleF0gKiAyNTYgKyBpcHY0UGllY2U7XG4gICAgICAgIG51bWJlcnNTZWVuKys7XG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA9PT0gMiB8fCBudW1iZXJzU2VlbiA9PT0gNCkgcGllY2VJbmRleCsrO1xuICAgICAgfVxuICAgICAgaWYgKG51bWJlcnNTZWVuICE9PSA0KSByZXR1cm47XG4gICAgICBicmVhaztcbiAgICB9IGVsc2UgaWYgKGNocigpID09PSAnOicpIHtcbiAgICAgIHBvaW50ZXIrKztcbiAgICAgIGlmICghY2hyKCkpIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGNocigpKSByZXR1cm47XG4gICAgYWRkcmVzc1twaWVjZUluZGV4KytdID0gdmFsdWU7XG4gIH1cbiAgaWYgKGNvbXByZXNzICE9PSBudWxsKSB7XG4gICAgc3dhcHMgPSBwaWVjZUluZGV4IC0gY29tcHJlc3M7XG4gICAgcGllY2VJbmRleCA9IDc7XG4gICAgd2hpbGUgKHBpZWNlSW5kZXggIT09IDAgJiYgc3dhcHMgPiAwKSB7XG4gICAgICBzd2FwID0gYWRkcmVzc1twaWVjZUluZGV4XTtcbiAgICAgIGFkZHJlc3NbcGllY2VJbmRleC0tXSA9IGFkZHJlc3NbY29tcHJlc3MgKyBzd2FwcyAtIDFdO1xuICAgICAgYWRkcmVzc1tjb21wcmVzcyArIC0tc3dhcHNdID0gc3dhcDtcbiAgICB9XG4gIH0gZWxzZSBpZiAocGllY2VJbmRleCAhPT0gOCkgcmV0dXJuO1xuICByZXR1cm4gYWRkcmVzcztcbn07XG5cbnZhciBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZSA9IGZ1bmN0aW9uIChpcHY2KSB7XG4gIHZhciBtYXhJbmRleCA9IG51bGw7XG4gIHZhciBtYXhMZW5ndGggPSAxO1xuICB2YXIgY3VyclN0YXJ0ID0gbnVsbDtcbiAgdmFyIGN1cnJMZW5ndGggPSAwO1xuICB2YXIgaW5kZXggPSAwO1xuICBmb3IgKDsgaW5kZXggPCA4OyBpbmRleCsrKSB7XG4gICAgaWYgKGlwdjZbaW5kZXhdICE9PSAwKSB7XG4gICAgICBpZiAoY3Vyckxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICBtYXhJbmRleCA9IGN1cnJTdGFydDtcbiAgICAgICAgbWF4TGVuZ3RoID0gY3Vyckxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGN1cnJTdGFydCA9IG51bGw7XG4gICAgICBjdXJyTGVuZ3RoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN1cnJTdGFydCA9PT0gbnVsbCkgY3VyclN0YXJ0ID0gaW5kZXg7XG4gICAgICArK2N1cnJMZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiBjdXJyTGVuZ3RoID4gbWF4TGVuZ3RoID8gY3VyclN0YXJ0IDogbWF4SW5kZXg7XG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2hvc3Qtc2VyaWFsaXppbmdcbnZhciBzZXJpYWxpemVIb3N0ID0gZnVuY3Rpb24gKGhvc3QpIHtcbiAgdmFyIHJlc3VsdCwgaW5kZXgsIGNvbXByZXNzLCBpZ25vcmUwO1xuXG4gIC8vIGlwdjRcbiAgaWYgKHR5cGVvZiBob3N0ID09ICdudW1iZXInKSB7XG4gICAgcmVzdWx0ID0gW107XG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDsgaW5kZXgrKykge1xuICAgICAgdW5zaGlmdChyZXN1bHQsIGhvc3QgJSAyNTYpO1xuICAgICAgaG9zdCA9IGZsb29yKGhvc3QgLyAyNTYpO1xuICAgIH1cbiAgICByZXR1cm4gam9pbihyZXN1bHQsICcuJyk7XG4gIH1cblxuICAvLyBpcHY2XG4gIGlmICh0eXBlb2YgaG9zdCA9PSAnb2JqZWN0Jykge1xuICAgIHJlc3VsdCA9ICcnO1xuICAgIGNvbXByZXNzID0gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoaG9zdCk7XG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgODsgaW5kZXgrKykge1xuICAgICAgaWYgKGlnbm9yZTAgJiYgaG9zdFtpbmRleF0gPT09IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKGlnbm9yZTApIGlnbm9yZTAgPSBmYWxzZTtcbiAgICAgIGlmIChjb21wcmVzcyA9PT0gaW5kZXgpIHtcbiAgICAgICAgcmVzdWx0ICs9IGluZGV4ID8gJzonIDogJzo6JztcbiAgICAgICAgaWdub3JlMCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gbnVtYmVyVG9TdHJpbmcoaG9zdFtpbmRleF0sIDE2KTtcbiAgICAgICAgaWYgKGluZGV4IDwgNykgcmVzdWx0ICs9ICc6JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICdbJyArIHJlc3VsdCArICddJztcbiAgfVxuXG4gIHJldHVybiBob3N0O1xufTtcblxudmFyIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQgPSB7fTtcbnZhciBmcmFnbWVudFBlcmNlbnRFbmNvZGVTZXQgPSBhc3NpZ24oe30sIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQsIHtcbiAgJyAnOiAxLCAnXCInOiAxLCAnPCc6IDEsICc+JzogMSwgJ2AnOiAxXG59KTtcbnZhciBwYXRoUGVyY2VudEVuY29kZVNldCA9IGFzc2lnbih7fSwgZnJhZ21lbnRQZXJjZW50RW5jb2RlU2V0LCB7XG4gICcjJzogMSwgJz8nOiAxLCAneyc6IDEsICd9JzogMVxufSk7XG52YXIgdXNlcmluZm9QZXJjZW50RW5jb2RlU2V0ID0gYXNzaWduKHt9LCBwYXRoUGVyY2VudEVuY29kZVNldCwge1xuICAnLyc6IDEsICc6JzogMSwgJzsnOiAxLCAnPSc6IDEsICdAJzogMSwgJ1snOiAxLCAnXFxcXCc6IDEsICddJzogMSwgJ14nOiAxLCAnfCc6IDFcbn0pO1xuXG52YXIgcGVyY2VudEVuY29kZSA9IGZ1bmN0aW9uIChjaHIsIHNldCkge1xuICB2YXIgY29kZSA9IGNvZGVBdChjaHIsIDApO1xuICByZXR1cm4gY29kZSA+IDB4MjAgJiYgY29kZSA8IDB4N0YgJiYgIWhhc093bihzZXQsIGNocikgPyBjaHIgOiBlbmNvZGVVUklDb21wb25lbnQoY2hyKTtcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jc3BlY2lhbC1zY2hlbWVcbnZhciBzcGVjaWFsU2NoZW1lcyA9IHtcbiAgZnRwOiAyMSxcbiAgZmlsZTogbnVsbCxcbiAgaHR0cDogODAsXG4gIGh0dHBzOiA0NDMsXG4gIHdzOiA4MCxcbiAgd3NzOiA0NDNcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jd2luZG93cy1kcml2ZS1sZXR0ZXJcbnZhciBpc1dpbmRvd3NEcml2ZUxldHRlciA9IGZ1bmN0aW9uIChzdHJpbmcsIG5vcm1hbGl6ZWQpIHtcbiAgdmFyIHNlY29uZDtcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPT09IDIgJiYgZXhlYyhBTFBIQSwgY2hhckF0KHN0cmluZywgMCkpXG4gICAgJiYgKChzZWNvbmQgPSBjaGFyQXQoc3RyaW5nLCAxKSkgPT09ICc6JyB8fCAoIW5vcm1hbGl6ZWQgJiYgc2Vjb25kID09PSAnfCcpKTtcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jc3RhcnQtd2l0aC1hLXdpbmRvd3MtZHJpdmUtbGV0dGVyXG52YXIgc3RhcnRzV2l0aFdpbmRvd3NEcml2ZUxldHRlciA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIHRoaXJkO1xuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA+IDEgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoc3RyaW5nU2xpY2Uoc3RyaW5nLCAwLCAyKSkgJiYgKFxuICAgIHN0cmluZy5sZW5ndGggPT09IDIgfHxcbiAgICAoKHRoaXJkID0gY2hhckF0KHN0cmluZywgMikpID09PSAnLycgfHwgdGhpcmQgPT09ICdcXFxcJyB8fCB0aGlyZCA9PT0gJz8nIHx8IHRoaXJkID09PSAnIycpXG4gICk7XG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3NpbmdsZS1kb3QtcGF0aC1zZWdtZW50XG52YXIgaXNTaW5nbGVEb3QgPSBmdW5jdGlvbiAoc2VnbWVudCkge1xuICByZXR1cm4gc2VnbWVudCA9PT0gJy4nIHx8IHRvTG93ZXJDYXNlKHNlZ21lbnQpID09PSAnJTJlJztcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG91YmxlLWRvdC1wYXRoLXNlZ21lbnRcbnZhciBpc0RvdWJsZURvdCA9IGZ1bmN0aW9uIChzZWdtZW50KSB7XG4gIHNlZ21lbnQgPSB0b0xvd2VyQ2FzZShzZWdtZW50KTtcbiAgcmV0dXJuIHNlZ21lbnQgPT09ICcuLicgfHwgc2VnbWVudCA9PT0gJyUyZS4nIHx8IHNlZ21lbnQgPT09ICcuJTJlJyB8fCBzZWdtZW50ID09PSAnJTJlJTJlJztcbn07XG5cbi8vIFN0YXRlczpcbnZhciBTQ0hFTUVfU1RBUlQgPSB7fTtcbnZhciBTQ0hFTUUgPSB7fTtcbnZhciBOT19TQ0hFTUUgPSB7fTtcbnZhciBTUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWSA9IHt9O1xudmFyIFBBVEhfT1JfQVVUSE9SSVRZID0ge307XG52YXIgUkVMQVRJVkUgPSB7fTtcbnZhciBSRUxBVElWRV9TTEFTSCA9IHt9O1xudmFyIFNQRUNJQUxfQVVUSE9SSVRZX1NMQVNIRVMgPSB7fTtcbnZhciBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUyA9IHt9O1xudmFyIEFVVEhPUklUWSA9IHt9O1xudmFyIEhPU1QgPSB7fTtcbnZhciBIT1NUTkFNRSA9IHt9O1xudmFyIFBPUlQgPSB7fTtcbnZhciBGSUxFID0ge307XG52YXIgRklMRV9TTEFTSCA9IHt9O1xudmFyIEZJTEVfSE9TVCA9IHt9O1xudmFyIFBBVEhfU1RBUlQgPSB7fTtcbnZhciBQQVRIID0ge307XG52YXIgQ0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSCA9IHt9O1xudmFyIFFVRVJZID0ge307XG52YXIgRlJBR01FTlQgPSB7fTtcblxudmFyIFVSTFN0YXRlID0gZnVuY3Rpb24gKHVybCwgaXNCYXNlLCBiYXNlKSB7XG4gIHZhciB1cmxTdHJpbmcgPSAkdG9TdHJpbmcodXJsKTtcbiAgdmFyIGJhc2VTdGF0ZSwgZmFpbHVyZSwgc2VhcmNoUGFyYW1zO1xuICBpZiAoaXNCYXNlKSB7XG4gICAgZmFpbHVyZSA9IHRoaXMucGFyc2UodXJsU3RyaW5nKTtcbiAgICBpZiAoZmFpbHVyZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihmYWlsdXJlKTtcbiAgICB0aGlzLnNlYXJjaFBhcmFtcyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCkgYmFzZVN0YXRlID0gbmV3IFVSTFN0YXRlKGJhc2UsIHRydWUpO1xuICAgIGZhaWx1cmUgPSB0aGlzLnBhcnNlKHVybFN0cmluZywgbnVsbCwgYmFzZVN0YXRlKTtcbiAgICBpZiAoZmFpbHVyZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihmYWlsdXJlKTtcbiAgICBzZWFyY2hQYXJhbXMgPSBnZXRJbnRlcm5hbFNlYXJjaFBhcmFtc1N0YXRlKG5ldyBVUkxTZWFyY2hQYXJhbXMoKSk7XG4gICAgc2VhcmNoUGFyYW1zLmJpbmRVUkwodGhpcyk7XG4gICAgdGhpcy5zZWFyY2hQYXJhbXMgPSBzZWFyY2hQYXJhbXM7XG4gIH1cbn07XG5cblVSTFN0YXRlLnByb3RvdHlwZSA9IHtcbiAgdHlwZTogJ1VSTCcsXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsLXBhcnNpbmdcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzIC0tIFRPRE9cbiAgcGFyc2U6IGZ1bmN0aW9uIChpbnB1dCwgc3RhdGVPdmVycmlkZSwgYmFzZSkge1xuICAgIHZhciB1cmwgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IHN0YXRlT3ZlcnJpZGUgfHwgU0NIRU1FX1NUQVJUO1xuICAgIHZhciBwb2ludGVyID0gMDtcbiAgICB2YXIgYnVmZmVyID0gJyc7XG4gICAgdmFyIHNlZW5BdCA9IGZhbHNlO1xuICAgIHZhciBzZWVuQnJhY2tldCA9IGZhbHNlO1xuICAgIHZhciBzZWVuUGFzc3dvcmRUb2tlbiA9IGZhbHNlO1xuICAgIHZhciBjb2RlUG9pbnRzLCBjaHIsIGJ1ZmZlckNvZGVQb2ludHMsIGZhaWx1cmU7XG5cbiAgICBpbnB1dCA9ICR0b1N0cmluZyhpbnB1dCk7XG5cbiAgICBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgIHVybC5zY2hlbWUgPSAnJztcbiAgICAgIHVybC51c2VybmFtZSA9ICcnO1xuICAgICAgdXJsLnBhc3N3b3JkID0gJyc7XG4gICAgICB1cmwuaG9zdCA9IG51bGw7XG4gICAgICB1cmwucG9ydCA9IG51bGw7XG4gICAgICB1cmwucGF0aCA9IFtdO1xuICAgICAgdXJsLnF1ZXJ5ID0gbnVsbDtcbiAgICAgIHVybC5mcmFnbWVudCA9IG51bGw7XG4gICAgICB1cmwuY2Fubm90QmVBQmFzZVVSTCA9IGZhbHNlO1xuICAgICAgaW5wdXQgPSByZXBsYWNlKGlucHV0LCBMRUFESU5HX0MwX0NPTlRST0xfT1JfU1BBQ0UsICcnKTtcbiAgICAgIGlucHV0ID0gcmVwbGFjZShpbnB1dCwgVFJBSUxJTkdfQzBfQ09OVFJPTF9PUl9TUEFDRSwgJyQxJyk7XG4gICAgfVxuXG4gICAgaW5wdXQgPSByZXBsYWNlKGlucHV0LCBUQUJfQU5EX05FV19MSU5FLCAnJyk7XG5cbiAgICBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKGlucHV0KTtcblxuICAgIHdoaWxlIChwb2ludGVyIDw9IGNvZGVQb2ludHMubGVuZ3RoKSB7XG4gICAgICBjaHIgPSBjb2RlUG9pbnRzW3BvaW50ZXJdO1xuICAgICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICBjYXNlIFNDSEVNRV9TVEFSVDpcbiAgICAgICAgICBpZiAoY2hyICYmIGV4ZWMoQUxQSEEsIGNocikpIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSB0b0xvd2VyQ2FzZShjaHIpO1xuICAgICAgICAgICAgc3RhdGUgPSBTQ0hFTUU7XG4gICAgICAgICAgfSBlbHNlIGlmICghc3RhdGVPdmVycmlkZSkge1xuICAgICAgICAgICAgc3RhdGUgPSBOT19TQ0hFTUU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuIElOVkFMSURfU0NIRU1FO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU0NIRU1FOlxuICAgICAgICAgIGlmIChjaHIgJiYgKGV4ZWMoQUxQSEFOVU1FUklDLCBjaHIpIHx8IGNociA9PT0gJysnIHx8IGNociA9PT0gJy0nIHx8IGNociA9PT0gJy4nKSkge1xuICAgICAgICAgICAgYnVmZmVyICs9IHRvTG93ZXJDYXNlKGNocik7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICc6Jykge1xuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgJiYgKFxuICAgICAgICAgICAgICAodXJsLmlzU3BlY2lhbCgpICE9PSBoYXNPd24oc3BlY2lhbFNjaGVtZXMsIGJ1ZmZlcikpIHx8XG4gICAgICAgICAgICAgIChidWZmZXIgPT09ICdmaWxlJyAmJiAodXJsLmluY2x1ZGVzQ3JlZGVudGlhbHMoKSB8fCB1cmwucG9ydCAhPT0gbnVsbCkpIHx8XG4gICAgICAgICAgICAgICh1cmwuc2NoZW1lID09PSAnZmlsZScgJiYgIXVybC5ob3N0KVxuICAgICAgICAgICAgKSkgcmV0dXJuO1xuICAgICAgICAgICAgdXJsLnNjaGVtZSA9IGJ1ZmZlcjtcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgIGlmICh1cmwuaXNTcGVjaWFsKCkgJiYgc3BlY2lhbFNjaGVtZXNbdXJsLnNjaGVtZV0gPT09IHVybC5wb3J0KSB1cmwucG9ydCA9IG51bGw7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgaWYgKHVybC5zY2hlbWUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICBzdGF0ZSA9IEZJTEU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybC5pc1NwZWNpYWwoKSAmJiBiYXNlICYmIGJhc2Uuc2NoZW1lID09PSB1cmwuc2NoZW1lKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9SRUxBVElWRV9PUl9BVVRIT1JJVFk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybC5pc1NwZWNpYWwoKSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfQVVUSE9SSVRZX1NMQVNIRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludHNbcG9pbnRlciArIDFdID09PSAnLycpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBQQVRIX09SX0FVVEhPUklUWTtcbiAgICAgICAgICAgICAgcG9pbnRlcisrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xuICAgICAgICAgICAgICBwdXNoKHVybC5wYXRoLCAnJyk7XG4gICAgICAgICAgICAgIHN0YXRlID0gQ0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gTk9fU0NIRU1FO1xuICAgICAgICAgICAgcG9pbnRlciA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuIElOVkFMSURfU0NIRU1FO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgTk9fU0NIRU1FOlxuICAgICAgICAgIGlmICghYmFzZSB8fCAoYmFzZS5jYW5ub3RCZUFCYXNlVVJMICYmIGNociAhPT0gJyMnKSkgcmV0dXJuIElOVkFMSURfU0NIRU1FO1xuICAgICAgICAgIGlmIChiYXNlLmNhbm5vdEJlQUJhc2VVUkwgJiYgY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgIHVybC5zY2hlbWUgPSBiYXNlLnNjaGVtZTtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgdXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xuICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGF0ZSA9IGJhc2Uuc2NoZW1lID09PSAnZmlsZScgPyBGSUxFIDogUkVMQVRJVkU7XG4gICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgY2FzZSBTUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWTpcbiAgICAgICAgICBpZiAoY2hyID09PSAnLycgJiYgY29kZVBvaW50c1twb2ludGVyICsgMV0gPT09ICcvJykge1xuICAgICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUztcbiAgICAgICAgICAgIHBvaW50ZXIrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSBSRUxBVElWRTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQQVRIX09SX0FVVEhPUklUWTpcbiAgICAgICAgICBpZiAoY2hyID09PSAnLycpIHtcbiAgICAgICAgICAgIHN0YXRlID0gQVVUSE9SSVRZO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFTEFUSVZFOlxuICAgICAgICAgIHVybC5zY2hlbWUgPSBiYXNlLnNjaGVtZTtcbiAgICAgICAgICBpZiAoY2hyID09PSBFT0YpIHtcbiAgICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJy8nIHx8IChjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFJFTEFUSVZFX1NMQVNIO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnPycpIHtcbiAgICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICB1cmwucGF0aC5sZW5ndGgtLTtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSRUxBVElWRV9TTEFTSDpcbiAgICAgICAgICBpZiAodXJsLmlzU3BlY2lhbCgpICYmIChjaHIgPT09ICcvJyB8fCBjaHIgPT09ICdcXFxcJykpIHtcbiAgICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICcvJykge1xuICAgICAgICAgICAgc3RhdGUgPSBBVVRIT1JJVFk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTOlxuICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM7XG4gICAgICAgICAgaWYgKGNociAhPT0gJy8nIHx8IGNoYXJBdChidWZmZXIsIHBvaW50ZXIgKyAxKSAhPT0gJy8nKSBjb250aW51ZTtcbiAgICAgICAgICBwb2ludGVyKys7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUzpcbiAgICAgICAgICBpZiAoY2hyICE9PSAnLycgJiYgY2hyICE9PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIHN0YXRlID0gQVVUSE9SSVRZO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIEFVVEhPUklUWTpcbiAgICAgICAgICBpZiAoY2hyID09PSAnQCcpIHtcbiAgICAgICAgICAgIGlmIChzZWVuQXQpIGJ1ZmZlciA9ICclNDAnICsgYnVmZmVyO1xuICAgICAgICAgICAgc2VlbkF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJ1ZmZlckNvZGVQb2ludHMgPSBhcnJheUZyb20oYnVmZmVyKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyQ29kZVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gYnVmZmVyQ29kZVBvaW50c1tpXTtcbiAgICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA9PT0gJzonICYmICFzZWVuUGFzc3dvcmRUb2tlbikge1xuICAgICAgICAgICAgICAgIHNlZW5QYXNzd29yZFRva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgZW5jb2RlZENvZGVQb2ludHMgPSBwZXJjZW50RW5jb2RlKGNvZGVQb2ludCwgdXNlcmluZm9QZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgICAgICAgaWYgKHNlZW5QYXNzd29yZFRva2VuKSB1cmwucGFzc3dvcmQgKz0gZW5jb2RlZENvZGVQb2ludHM7XG4gICAgICAgICAgICAgIGVsc2UgdXJsLnVzZXJuYW1lICs9IGVuY29kZWRDb2RlUG9pbnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGNociA9PT0gRU9GIHx8IGNociA9PT0gJy8nIHx8IGNociA9PT0gJz8nIHx8IGNociA9PT0gJyMnIHx8XG4gICAgICAgICAgICAoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHNlZW5BdCAmJiBidWZmZXIgPT09ICcnKSByZXR1cm4gSU5WQUxJRF9BVVRIT1JJVFk7XG4gICAgICAgICAgICBwb2ludGVyIC09IGFycmF5RnJvbShidWZmZXIpLmxlbmd0aCArIDE7XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gSE9TVDtcbiAgICAgICAgICB9IGVsc2UgYnVmZmVyICs9IGNocjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEhPU1Q6XG4gICAgICAgIGNhc2UgSE9TVE5BTUU6XG4gICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgJiYgdXJsLnNjaGVtZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEZJTEVfSE9TVDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnOicgJiYgIXNlZW5CcmFja2V0KSB7XG4gICAgICAgICAgICBpZiAoYnVmZmVyID09PSAnJykgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgICAgICAgIGZhaWx1cmUgPSB1cmwucGFyc2VIb3N0KGJ1ZmZlcik7XG4gICAgICAgICAgICBpZiAoZmFpbHVyZSkgcmV0dXJuIGZhaWx1cmU7XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUE9SVDtcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlID09PSBIT1NUTkFNRSkgcmV0dXJuO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBjaHIgPT09IEVPRiB8fCBjaHIgPT09ICcvJyB8fCBjaHIgPT09ICc/JyB8fCBjaHIgPT09ICcjJyB8fFxuICAgICAgICAgICAgKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh1cmwuaXNTcGVjaWFsKCkgJiYgYnVmZmVyID09PSAnJykgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlICYmIGJ1ZmZlciA9PT0gJycgJiYgKHVybC5pbmNsdWRlc0NyZWRlbnRpYWxzKCkgfHwgdXJsLnBvcnQgIT09IG51bGwpKSByZXR1cm47XG4gICAgICAgICAgICBmYWlsdXJlID0gdXJsLnBhcnNlSG9zdChidWZmZXIpO1xuICAgICAgICAgICAgaWYgKGZhaWx1cmUpIHJldHVybiBmYWlsdXJlO1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEhfU1RBUlQ7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkgcmV0dXJuO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjaHIgPT09ICdbJykgc2VlbkJyYWNrZXQgPSB0cnVlO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2hyID09PSAnXScpIHNlZW5CcmFja2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBidWZmZXIgKz0gY2hyO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQT1JUOlxuICAgICAgICAgIGlmIChleGVjKERJR0lULCBjaHIpKSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gY2hyO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBjaHIgPT09IEVPRiB8fCBjaHIgPT09ICcvJyB8fCBjaHIgPT09ICc/JyB8fCBjaHIgPT09ICcjJyB8fFxuICAgICAgICAgICAgKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSkgfHxcbiAgICAgICAgICAgIHN0YXRlT3ZlcnJpZGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChidWZmZXIgIT09ICcnKSB7XG4gICAgICAgICAgICAgIHZhciBwb3J0ID0gcGFyc2VJbnQoYnVmZmVyLCAxMCk7XG4gICAgICAgICAgICAgIGlmIChwb3J0ID4gMHhGRkZGKSByZXR1cm4gSU5WQUxJRF9QT1JUO1xuICAgICAgICAgICAgICB1cmwucG9ydCA9ICh1cmwuaXNTcGVjaWFsKCkgJiYgcG9ydCA9PT0gc3BlY2lhbFNjaGVtZXNbdXJsLnNjaGVtZV0pID8gbnVsbCA6IHBvcnQ7XG4gICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHJldHVybjtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gSU5WQUxJRF9QT1JUO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgRklMRTpcbiAgICAgICAgICB1cmwuc2NoZW1lID0gJ2ZpbGUnO1xuICAgICAgICAgIGlmIChjaHIgPT09ICcvJyB8fCBjaHIgPT09ICdcXFxcJykgc3RhdGUgPSBGSUxFX1NMQVNIO1xuICAgICAgICAgIGVsc2UgaWYgKGJhc2UgJiYgYmFzZS5zY2hlbWUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgc3dpdGNoIChjaHIpIHtcbiAgICAgICAgICAgICAgY2FzZSBFT0Y6XG4gICAgICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnPyc6XG4gICAgICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnIyc6XG4gICAgICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICghc3RhcnRzV2l0aFdpbmRvd3NEcml2ZUxldHRlcihqb2luKGFycmF5U2xpY2UoY29kZVBvaW50cywgcG9pbnRlciksICcnKSkpIHtcbiAgICAgICAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICAgICAgICB1cmwuc2hvcnRlblBhdGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgRklMRV9TTEFTSDpcbiAgICAgICAgICBpZiAoY2hyID09PSAnLycgfHwgY2hyID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIHN0YXRlID0gRklMRV9IT1NUO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChiYXNlICYmIGJhc2Uuc2NoZW1lID09PSAnZmlsZScgJiYgIXN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIoam9pbihhcnJheVNsaWNlKGNvZGVQb2ludHMsIHBvaW50ZXIpLCAnJykpKSB7XG4gICAgICAgICAgICBpZiAoaXNXaW5kb3dzRHJpdmVMZXR0ZXIoYmFzZS5wYXRoWzBdLCB0cnVlKSkgcHVzaCh1cmwucGF0aCwgYmFzZS5wYXRoWzBdKTtcbiAgICAgICAgICAgIGVsc2UgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBjYXNlIEZJTEVfSE9TVDpcbiAgICAgICAgICBpZiAoY2hyID09PSBFT0YgfHwgY2hyID09PSAnLycgfHwgY2hyID09PSAnXFxcXCcgfHwgY2hyID09PSAnPycgfHwgY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgIGlmICghc3RhdGVPdmVycmlkZSAmJiBpc1dpbmRvd3NEcml2ZUxldHRlcihidWZmZXIpKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyID09PSAnJykge1xuICAgICAgICAgICAgICB1cmwuaG9zdCA9ICcnO1xuICAgICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkgcmV0dXJuO1xuICAgICAgICAgICAgICBzdGF0ZSA9IFBBVEhfU1RBUlQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmYWlsdXJlID0gdXJsLnBhcnNlSG9zdChidWZmZXIpO1xuICAgICAgICAgICAgICBpZiAoZmFpbHVyZSkgcmV0dXJuIGZhaWx1cmU7XG4gICAgICAgICAgICAgIGlmICh1cmwuaG9zdCA9PT0gJ2xvY2FsaG9zdCcpIHVybC5ob3N0ID0gJyc7XG4gICAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICBzdGF0ZSA9IFBBVEhfU1RBUlQ7XG4gICAgICAgICAgICB9IGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBidWZmZXIgKz0gY2hyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUEFUSF9TVEFSVDpcbiAgICAgICAgICBpZiAodXJsLmlzU3BlY2lhbCgpKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBpZiAoY2hyICE9PSAnLycgJiYgY2hyICE9PSAnXFxcXCcpIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUgJiYgY2hyID09PSAnPycpIHtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgIT09IEVPRikge1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgaWYgKGNociAhPT0gJy8nKSBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUEFUSDpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjaHIgPT09IEVPRiB8fCBjaHIgPT09ICcvJyB8fFxuICAgICAgICAgICAgKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSkgfHxcbiAgICAgICAgICAgICghc3RhdGVPdmVycmlkZSAmJiAoY2hyID09PSAnPycgfHwgY2hyID09PSAnIycpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGlzRG91YmxlRG90KGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgdXJsLnNob3J0ZW5QYXRoKCk7XG4gICAgICAgICAgICAgIGlmIChjaHIgIT09ICcvJyAmJiAhKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSkpIHtcbiAgICAgICAgICAgICAgICBwdXNoKHVybC5wYXRoLCAnJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTaW5nbGVEb3QoYnVmZmVyKSkge1xuICAgICAgICAgICAgICBpZiAoY2hyICE9PSAnLycgJiYgIShjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpKSB7XG4gICAgICAgICAgICAgICAgcHVzaCh1cmwucGF0aCwgJycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAodXJsLnNjaGVtZSA9PT0gJ2ZpbGUnICYmICF1cmwucGF0aC5sZW5ndGggJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoYnVmZmVyKSkge1xuICAgICAgICAgICAgICAgIGlmICh1cmwuaG9zdCkgdXJsLmhvc3QgPSAnJztcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBjaGFyQXQoYnVmZmVyLCAwKSArICc6JzsgLy8gbm9ybWFsaXplIHdpbmRvd3MgZHJpdmUgbGV0dGVyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcHVzaCh1cmwucGF0aCwgYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgaWYgKHVybC5zY2hlbWUgPT09ICdmaWxlJyAmJiAoY2hyID09PSBFT0YgfHwgY2hyID09PSAnPycgfHwgY2hyID09PSAnIycpKSB7XG4gICAgICAgICAgICAgIHdoaWxlICh1cmwucGF0aC5sZW5ndGggPiAxICYmIHVybC5wYXRoWzBdID09PSAnJykge1xuICAgICAgICAgICAgICAgIHNoaWZ0KHVybC5wYXRoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNociA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyICs9IHBlcmNlbnRFbmNvZGUoY2hyLCBwYXRoUGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIENBTk5PVF9CRV9BX0JBU0VfVVJMX1BBVEg6XG4gICAgICAgICAgaWYgKGNociA9PT0gJz8nKSB7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyICE9PSBFT0YpIHtcbiAgICAgICAgICAgIHVybC5wYXRoWzBdICs9IHBlcmNlbnRFbmNvZGUoY2hyLCBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUVVFUlk6XG4gICAgICAgICAgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgIT09IEVPRikge1xuICAgICAgICAgICAgaWYgKGNociA9PT0gXCInXCIgJiYgdXJsLmlzU3BlY2lhbCgpKSB1cmwucXVlcnkgKz0gJyUyNyc7XG4gICAgICAgICAgICBlbHNlIGlmIChjaHIgPT09ICcjJykgdXJsLnF1ZXJ5ICs9ICclMjMnO1xuICAgICAgICAgICAgZWxzZSB1cmwucXVlcnkgKz0gcGVyY2VudEVuY29kZShjaHIsIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBGUkFHTUVOVDpcbiAgICAgICAgICBpZiAoY2hyICE9PSBFT0YpIHVybC5mcmFnbWVudCArPSBwZXJjZW50RW5jb2RlKGNociwgZnJhZ21lbnRQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcG9pbnRlcisrO1xuICAgIH1cbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNob3N0LXBhcnNpbmdcbiAgcGFyc2VIb3N0OiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICB2YXIgcmVzdWx0LCBjb2RlUG9pbnRzLCBpbmRleDtcbiAgICBpZiAoY2hhckF0KGlucHV0LCAwKSA9PT0gJ1snKSB7XG4gICAgICBpZiAoY2hhckF0KGlucHV0LCBpbnB1dC5sZW5ndGggLSAxKSAhPT0gJ10nKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgcmVzdWx0ID0gcGFyc2VJUHY2KHN0cmluZ1NsaWNlKGlucHV0LCAxLCAtMSkpO1xuICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICB0aGlzLmhvc3QgPSByZXN1bHQ7XG4gICAgLy8gb3BhcXVlIGhvc3RcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU3BlY2lhbCgpKSB7XG4gICAgICBpZiAoZXhlYyhGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5UX0VYQ0xVRElOR19QRVJDRU5ULCBpbnB1dCkpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICByZXN1bHQgPSAnJztcbiAgICAgIGNvZGVQb2ludHMgPSBhcnJheUZyb20oaW5wdXQpO1xuICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY29kZVBvaW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ICs9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50c1tpbmRleF0sIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0ID0gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dCA9IHRvQVNDSUkoaW5wdXQpO1xuICAgICAgaWYgKGV4ZWMoRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVCwgaW5wdXQpKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgcmVzdWx0ID0gcGFyc2VJUHY0KGlucHV0KTtcbiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICB0aGlzLmhvc3QgPSByZXN1bHQ7XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2Nhbm5vdC1oYXZlLWEtdXNlcm5hbWUtcGFzc3dvcmQtcG9ydFxuICBjYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gIXRoaXMuaG9zdCB8fCB0aGlzLmNhbm5vdEJlQUJhc2VVUkwgfHwgdGhpcy5zY2hlbWUgPT09ICdmaWxlJztcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNpbmNsdWRlLWNyZWRlbnRpYWxzXG4gIGluY2x1ZGVzQ3JlZGVudGlhbHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy51c2VybmFtZSAhPT0gJycgfHwgdGhpcy5wYXNzd29yZCAhPT0gJyc7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaXMtc3BlY2lhbFxuICBpc1NwZWNpYWw6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaGFzT3duKHNwZWNpYWxTY2hlbWVzLCB0aGlzLnNjaGVtZSk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jc2hvcnRlbi1hLXVybHMtcGF0aFxuICBzaG9ydGVuUGF0aDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXRoID0gdGhpcy5wYXRoO1xuICAgIHZhciBwYXRoU2l6ZSA9IHBhdGgubGVuZ3RoO1xuICAgIGlmIChwYXRoU2l6ZSAmJiAodGhpcy5zY2hlbWUgIT09ICdmaWxlJyB8fCBwYXRoU2l6ZSAhPT0gMSB8fCAhaXNXaW5kb3dzRHJpdmVMZXR0ZXIocGF0aFswXSwgdHJ1ZSkpKSB7XG4gICAgICBwYXRoLmxlbmd0aC0tO1xuICAgIH1cbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1zZXJpYWxpemVyXG4gIHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciB1cmwgPSB0aGlzO1xuICAgIHZhciBzY2hlbWUgPSB1cmwuc2NoZW1lO1xuICAgIHZhciB1c2VybmFtZSA9IHVybC51c2VybmFtZTtcbiAgICB2YXIgcGFzc3dvcmQgPSB1cmwucGFzc3dvcmQ7XG4gICAgdmFyIGhvc3QgPSB1cmwuaG9zdDtcbiAgICB2YXIgcG9ydCA9IHVybC5wb3J0O1xuICAgIHZhciBwYXRoID0gdXJsLnBhdGg7XG4gICAgdmFyIHF1ZXJ5ID0gdXJsLnF1ZXJ5O1xuICAgIHZhciBmcmFnbWVudCA9IHVybC5mcmFnbWVudDtcbiAgICB2YXIgb3V0cHV0ID0gc2NoZW1lICsgJzonO1xuICAgIGlmIChob3N0ICE9PSBudWxsKSB7XG4gICAgICBvdXRwdXQgKz0gJy8vJztcbiAgICAgIGlmICh1cmwuaW5jbHVkZXNDcmVkZW50aWFscygpKSB7XG4gICAgICAgIG91dHB1dCArPSB1c2VybmFtZSArIChwYXNzd29yZCA/ICc6JyArIHBhc3N3b3JkIDogJycpICsgJ0AnO1xuICAgICAgfVxuICAgICAgb3V0cHV0ICs9IHNlcmlhbGl6ZUhvc3QoaG9zdCk7XG4gICAgICBpZiAocG9ydCAhPT0gbnVsbCkgb3V0cHV0ICs9ICc6JyArIHBvcnQ7XG4gICAgfSBlbHNlIGlmIChzY2hlbWUgPT09ICdmaWxlJykgb3V0cHV0ICs9ICcvLyc7XG4gICAgb3V0cHV0ICs9IHVybC5jYW5ub3RCZUFCYXNlVVJMID8gcGF0aFswXSA6IHBhdGgubGVuZ3RoID8gJy8nICsgam9pbihwYXRoLCAnLycpIDogJyc7XG4gICAgaWYgKHF1ZXJ5ICE9PSBudWxsKSBvdXRwdXQgKz0gJz8nICsgcXVlcnk7XG4gICAgaWYgKGZyYWdtZW50ICE9PSBudWxsKSBvdXRwdXQgKz0gJyMnICsgZnJhZ21lbnQ7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhyZWZcbiAgc2V0SHJlZjogZnVuY3Rpb24gKGhyZWYpIHtcbiAgICB2YXIgZmFpbHVyZSA9IHRoaXMucGFyc2UoaHJlZik7XG4gICAgaWYgKGZhaWx1cmUpIHRocm93IG5ldyBUeXBlRXJyb3IoZmFpbHVyZSk7XG4gICAgdGhpcy5zZWFyY2hQYXJhbXMudXBkYXRlKCk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1vcmlnaW5cbiAgZ2V0T3JpZ2luOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNjaGVtZSA9IHRoaXMuc2NoZW1lO1xuICAgIHZhciBwb3J0ID0gdGhpcy5wb3J0O1xuICAgIGlmIChzY2hlbWUgPT09ICdibG9iJykgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgVVJMQ29uc3RydWN0b3Ioc2NoZW1lLnBhdGhbMF0pLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgaWYgKHNjaGVtZSA9PT0gJ2ZpbGUnIHx8ICF0aGlzLmlzU3BlY2lhbCgpKSByZXR1cm4gJ251bGwnO1xuICAgIHJldHVybiBzY2hlbWUgKyAnOi8vJyArIHNlcmlhbGl6ZUhvc3QodGhpcy5ob3N0KSArIChwb3J0ICE9PSBudWxsID8gJzonICsgcG9ydCA6ICcnKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXByb3RvY29sXG4gIGdldFByb3RvY29sOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZW1lICsgJzonO1xuICB9LFxuICBzZXRQcm90b2NvbDogZnVuY3Rpb24gKHByb3RvY29sKSB7XG4gICAgdGhpcy5wYXJzZSgkdG9TdHJpbmcocHJvdG9jb2wpICsgJzonLCBTQ0hFTUVfU1RBUlQpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtdXNlcm5hbWVcbiAgZ2V0VXNlcm5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy51c2VybmFtZTtcbiAgfSxcbiAgc2V0VXNlcm5hbWU6IGZ1bmN0aW9uICh1c2VybmFtZSkge1xuICAgIHZhciBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKCR0b1N0cmluZyh1c2VybmFtZSkpO1xuICAgIGlmICh0aGlzLmNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydCgpKSByZXR1cm47XG4gICAgdGhpcy51c2VybmFtZSA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy51c2VybmFtZSArPSBwZXJjZW50RW5jb2RlKGNvZGVQb2ludHNbaV0sIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCk7XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcGFzc3dvcmRcbiAgZ2V0UGFzc3dvcmQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXNzd29yZDtcbiAgfSxcbiAgc2V0UGFzc3dvcmQ6IGZ1bmN0aW9uIChwYXNzd29yZCkge1xuICAgIHZhciBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKCR0b1N0cmluZyhwYXNzd29yZCkpO1xuICAgIGlmICh0aGlzLmNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydCgpKSByZXR1cm47XG4gICAgdGhpcy5wYXNzd29yZCA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYXNzd29yZCArPSBwZXJjZW50RW5jb2RlKGNvZGVQb2ludHNbaV0sIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCk7XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaG9zdFxuICBnZXRIb3N0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gICAgdmFyIHBvcnQgPSB0aGlzLnBvcnQ7XG4gICAgcmV0dXJuIGhvc3QgPT09IG51bGwgPyAnJ1xuICAgICAgOiBwb3J0ID09PSBudWxsID8gc2VyaWFsaXplSG9zdChob3N0KVxuICAgICAgOiBzZXJpYWxpemVIb3N0KGhvc3QpICsgJzonICsgcG9ydDtcbiAgfSxcbiAgc2V0SG9zdDogZnVuY3Rpb24gKGhvc3QpIHtcbiAgICBpZiAodGhpcy5jYW5ub3RCZUFCYXNlVVJMKSByZXR1cm47XG4gICAgdGhpcy5wYXJzZShob3N0LCBIT1NUKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhvc3RuYW1lXG4gIGdldEhvc3RuYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gICAgcmV0dXJuIGhvc3QgPT09IG51bGwgPyAnJyA6IHNlcmlhbGl6ZUhvc3QoaG9zdCk7XG4gIH0sXG4gIHNldEhvc3RuYW1lOiBmdW5jdGlvbiAoaG9zdG5hbWUpIHtcbiAgICBpZiAodGhpcy5jYW5ub3RCZUFCYXNlVVJMKSByZXR1cm47XG4gICAgdGhpcy5wYXJzZShob3N0bmFtZSwgSE9TVE5BTUUpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcG9ydFxuICBnZXRQb3J0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvcnQgPSB0aGlzLnBvcnQ7XG4gICAgcmV0dXJuIHBvcnQgPT09IG51bGwgPyAnJyA6ICR0b1N0cmluZyhwb3J0KTtcbiAgfSxcbiAgc2V0UG9ydDogZnVuY3Rpb24gKHBvcnQpIHtcbiAgICBpZiAodGhpcy5jYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQoKSkgcmV0dXJuO1xuICAgIHBvcnQgPSAkdG9TdHJpbmcocG9ydCk7XG4gICAgaWYgKHBvcnQgPT09ICcnKSB0aGlzLnBvcnQgPSBudWxsO1xuICAgIGVsc2UgdGhpcy5wYXJzZShwb3J0LCBQT1JUKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBhdGhuYW1lXG4gIGdldFBhdGhuYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhdGggPSB0aGlzLnBhdGg7XG4gICAgcmV0dXJuIHRoaXMuY2Fubm90QmVBQmFzZVVSTCA/IHBhdGhbMF0gOiBwYXRoLmxlbmd0aCA/ICcvJyArIGpvaW4ocGF0aCwgJy8nKSA6ICcnO1xuICB9LFxuICBzZXRQYXRobmFtZTogZnVuY3Rpb24gKHBhdGhuYW1lKSB7XG4gICAgaWYgKHRoaXMuY2Fubm90QmVBQmFzZVVSTCkgcmV0dXJuO1xuICAgIHRoaXMucGF0aCA9IFtdO1xuICAgIHRoaXMucGFyc2UocGF0aG5hbWUsIFBBVEhfU1RBUlQpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtc2VhcmNoXG4gIGdldFNlYXJjaDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnk7XG4gICAgcmV0dXJuIHF1ZXJ5ID8gJz8nICsgcXVlcnkgOiAnJztcbiAgfSxcbiAgc2V0U2VhcmNoOiBmdW5jdGlvbiAoc2VhcmNoKSB7XG4gICAgc2VhcmNoID0gJHRvU3RyaW5nKHNlYXJjaCk7XG4gICAgaWYgKHNlYXJjaCA9PT0gJycpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hhckF0KHNlYXJjaCwgMCkgPT09ICc/Jykgc2VhcmNoID0gc3RyaW5nU2xpY2Uoc2VhcmNoLCAxKTtcbiAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgIHRoaXMucGFyc2Uoc2VhcmNoLCBRVUVSWSk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoUGFyYW1zLnVwZGF0ZSgpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtc2VhcmNocGFyYW1zXG4gIGdldFNlYXJjaFBhcmFtczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFBhcmFtcy5mYWNhZGU7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1oYXNoXG4gIGdldEhhc2g6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZnJhZ21lbnQgPSB0aGlzLmZyYWdtZW50O1xuICAgIHJldHVybiBmcmFnbWVudCA/ICcjJyArIGZyYWdtZW50IDogJyc7XG4gIH0sXG4gIHNldEhhc2g6IGZ1bmN0aW9uIChoYXNoKSB7XG4gICAgaGFzaCA9ICR0b1N0cmluZyhoYXNoKTtcbiAgICBpZiAoaGFzaCA9PT0gJycpIHtcbiAgICAgIHRoaXMuZnJhZ21lbnQgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY2hhckF0KGhhc2gsIDApID09PSAnIycpIGhhc2ggPSBzdHJpbmdTbGljZShoYXNoLCAxKTtcbiAgICB0aGlzLmZyYWdtZW50ID0gJyc7XG4gICAgdGhpcy5wYXJzZShoYXNoLCBGUkFHTUVOVCk7XG4gIH0sXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucXVlcnkgPSB0aGlzLnNlYXJjaFBhcmFtcy5zZXJpYWxpemUoKSB8fCBudWxsO1xuICB9XG59O1xuXG4vLyBgVVJMYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtY2xhc3NcbnZhciBVUkxDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFVSTCh1cmwgLyogLCBiYXNlICovKSB7XG4gIHZhciB0aGF0ID0gYW5JbnN0YW5jZSh0aGlzLCBVUkxQcm90b3R5cGUpO1xuICB2YXIgYmFzZSA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHN0YXRlID0gc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCBuZXcgVVJMU3RhdGUodXJsLCBmYWxzZSwgYmFzZSkpO1xuICBpZiAoIURFU0NSSVBUT1JTKSB7XG4gICAgdGhhdC5ocmVmID0gc3RhdGUuc2VyaWFsaXplKCk7XG4gICAgdGhhdC5vcmlnaW4gPSBzdGF0ZS5nZXRPcmlnaW4oKTtcbiAgICB0aGF0LnByb3RvY29sID0gc3RhdGUuZ2V0UHJvdG9jb2woKTtcbiAgICB0aGF0LnVzZXJuYW1lID0gc3RhdGUuZ2V0VXNlcm5hbWUoKTtcbiAgICB0aGF0LnBhc3N3b3JkID0gc3RhdGUuZ2V0UGFzc3dvcmQoKTtcbiAgICB0aGF0Lmhvc3QgPSBzdGF0ZS5nZXRIb3N0KCk7XG4gICAgdGhhdC5ob3N0bmFtZSA9IHN0YXRlLmdldEhvc3RuYW1lKCk7XG4gICAgdGhhdC5wb3J0ID0gc3RhdGUuZ2V0UG9ydCgpO1xuICAgIHRoYXQucGF0aG5hbWUgPSBzdGF0ZS5nZXRQYXRobmFtZSgpO1xuICAgIHRoYXQuc2VhcmNoID0gc3RhdGUuZ2V0U2VhcmNoKCk7XG4gICAgdGhhdC5zZWFyY2hQYXJhbXMgPSBzdGF0ZS5nZXRTZWFyY2hQYXJhbXMoKTtcbiAgICB0aGF0Lmhhc2ggPSBzdGF0ZS5nZXRIYXNoKCk7XG4gIH1cbn07XG5cbnZhciBVUkxQcm90b3R5cGUgPSBVUkxDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbnZhciBhY2Nlc3NvckRlc2NyaXB0b3IgPSBmdW5jdGlvbiAoZ2V0dGVyLCBzZXR0ZXIpIHtcbiAgcmV0dXJuIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpW2dldHRlcl0oKTtcbiAgICB9LFxuICAgIHNldDogc2V0dGVyICYmIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGdldEludGVybmFsVVJMU3RhdGUodGhpcylbc2V0dGVyXSh2YWx1ZSk7XG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZVxuICB9O1xufTtcblxuaWYgKERFU0NSSVBUT1JTKSB7XG4gIC8vIGBVUkwucHJvdG90eXBlLmhyZWZgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ocmVmXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdocmVmJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdzZXJpYWxpemUnLCAnc2V0SHJlZicpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUub3JpZ2luYCBnZXR0ZXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLW9yaWdpblxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnb3JpZ2luJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRPcmlnaW4nKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnByb3RvY29sYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcHJvdG9jb2xcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3Byb3RvY29sJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRQcm90b2NvbCcsICdzZXRQcm90b2NvbCcpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUudXNlcm5hbWVgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC11c2VybmFtZVxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAndXNlcm5hbWUnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFVzZXJuYW1lJywgJ3NldFVzZXJuYW1lJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5wYXNzd29yZGAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBhc3N3b3JkXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdwYXNzd29yZCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0UGFzc3dvcmQnLCAnc2V0UGFzc3dvcmQnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLmhvc3RgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ob3N0XG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdob3N0JywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRIb3N0JywgJ3NldEhvc3QnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLmhvc3RuYW1lYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaG9zdG5hbWVcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ2hvc3RuYW1lJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRIb3N0bmFtZScsICdzZXRIb3N0bmFtZScpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUucG9ydGAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBvcnRcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3BvcnQnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFBvcnQnLCAnc2V0UG9ydCcpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUucGF0aG5hbWVgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wYXRobmFtZVxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAncGF0aG5hbWUnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFBhdGhuYW1lJywgJ3NldFBhdGhuYW1lJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5zZWFyY2hgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1zZWFyY2hcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3NlYXJjaCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0U2VhcmNoJywgJ3NldFNlYXJjaCcpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUuc2VhcmNoUGFyYW1zYCBnZXR0ZXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXNlYXJjaHBhcmFtc1xuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnc2VhcmNoUGFyYW1zJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRTZWFyY2hQYXJhbXMnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLmhhc2hgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1oYXNoXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdoYXNoJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRIYXNoJywgJ3NldEhhc2gnKSk7XG59XG5cbi8vIGBVUkwucHJvdG90eXBlLnRvSlNPTmAgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtdG9qc29uXG5kZWZpbmVCdWlsdEluKFVSTFByb3RvdHlwZSwgJ3RvSlNPTicsIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgcmV0dXJuIGdldEludGVybmFsVVJMU3RhdGUodGhpcykuc2VyaWFsaXplKCk7XG59LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbi8vIGBVUkwucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jVVJMLXN0cmluZ2lmaWNhdGlvbi1iZWhhdmlvclxuZGVmaW5lQnVpbHRJbihVUkxQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5zZXJpYWxpemUoKTtcbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuaWYgKE5hdGl2ZVVSTCkge1xuICB2YXIgbmF0aXZlQ3JlYXRlT2JqZWN0VVJMID0gTmF0aXZlVVJMLmNyZWF0ZU9iamVjdFVSTDtcbiAgdmFyIG5hdGl2ZVJldm9rZU9iamVjdFVSTCA9IE5hdGl2ZVVSTC5yZXZva2VPYmplY3RVUkw7XG4gIC8vIGBVUkwuY3JlYXRlT2JqZWN0VVJMYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9jcmVhdGVPYmplY3RVUkxcbiAgaWYgKG5hdGl2ZUNyZWF0ZU9iamVjdFVSTCkgZGVmaW5lQnVpbHRJbihVUkxDb25zdHJ1Y3RvciwgJ2NyZWF0ZU9iamVjdFVSTCcsIGJpbmQobmF0aXZlQ3JlYXRlT2JqZWN0VVJMLCBOYXRpdmVVUkwpKTtcbiAgLy8gYFVSTC5yZXZva2VPYmplY3RVUkxgIG1ldGhvZFxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJML3Jldm9rZU9iamVjdFVSTFxuICBpZiAobmF0aXZlUmV2b2tlT2JqZWN0VVJMKSBkZWZpbmVCdWlsdEluKFVSTENvbnN0cnVjdG9yLCAncmV2b2tlT2JqZWN0VVJMJywgYmluZChuYXRpdmVSZXZva2VPYmplY3RVUkwsIE5hdGl2ZVVSTCkpO1xufVxuXG5zZXRUb1N0cmluZ1RhZyhVUkxDb25zdHJ1Y3RvciwgJ1VSTCcpO1xuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiAhVVNFX05BVElWRV9VUkwsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIFVSTDogVVJMQ29uc3RydWN0b3Jcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyByZXBsYWNlZCB0byBtb2R1bGUgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC5jb25zdHJ1Y3RvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgVVNFX05BVElWRV9VUkwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXJsLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgVVJMID0gZ2V0QnVpbHRJbignVVJMJyk7XG5cbi8vIGBVUkwucGFyc2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWNhbnBhcnNlXG4kKHsgdGFyZ2V0OiAnVVJMJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhVVNFX05BVElWRV9VUkwgfSwge1xuICBwYXJzZTogZnVuY3Rpb24gcGFyc2UodXJsKSB7XG4gICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciB1cmxTdHJpbmcgPSB0b1N0cmluZyh1cmwpO1xuICAgIHZhciBiYXNlID0gbGVuZ3RoIDwgMiB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRvU3RyaW5nKGFyZ3VtZW50c1sxXSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgVVJMKHVybFN0cmluZywgYmFzZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2RhdGUvbm93Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZpbHRlcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5mb3JFYWNoO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mb3JFYWNoKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvaW5jbHVkZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwva2V5cycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5rZXlzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5rZXlzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc29tZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3RyaW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvanNvbi9zdHJpbmdpZnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2Fzc2lnbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuaW1tZWRpYXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRJbW1lZGlhdGU7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi50aW1lcnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLnNldFRpbWVvdXQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc2V0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sL2l0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi93ZWIvdXJsLXNlYXJjaC1wYXJhbXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi93ZWIvdXJsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmRlbGV0ZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuaGFzJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5zaXplJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5VUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL3VybC1zZWFyY2gtcGFyYW1zJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC5jYW4tcGFyc2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC5wYXJzZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLnRvLWpzb24nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlVSTDtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnQgeyBhcHAgYXMgRWxlY3Ryb25BcHAsIEJyb3dzZXJXaW5kb3csIGRpYWxvZyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHNlcnZlIGZyb20gXCJlbGVjdHJvbi1zZXJ2ZVwiO1xuaW1wb3J0IFN0b3JlIGZyb20gXCJlbGVjdHJvbi1zdG9yZVwiO1xuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiO1xuaW1wb3J0IHsgY3JlYXRlV2luZG93LCB4Ym94V29ya2VyIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IEF1dGhlbnRpY2F0aW9uIGZyb20gXCIuL2F1dGhlbnRpY2F0aW9uXCI7XG5pbXBvcnQgSXBjIGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHsgZGVmYXVsdFNldHRpbmdzIH0gZnJvbSAnLi4vcmVuZGVyZXIvY29udGV4dC91c2VyQ29udGV4dC5kZWZhdWx0cydcblxuaW1wb3J0IHhib3hXZWJBcGkgZnJvbSBcInhib3gtd2ViYXBpXCI7XG5pbXBvcnQgeENsb3VkQXBpIGZyb20gXCIuL2hlbHBlcnMveGNsb3VkYXBpXCI7XG5cbmltcG9ydCBwa2cgZnJvbSBcIi4uL3BhY2thZ2UuanNvblwiO1xuXG5pbnRlcmZhY2Ugc3RhcnR1cEZsYWdzIHtcbiAgZnVsbHNjcmVlbjogYm9vbGVhbjtcbiAgYXV0b1N0cmVhbTogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbiB7XG4gIHByaXZhdGUgX2xvZztcbiAgcHVibGljIF9zdG9yZSA9IG5ldyBTdG9yZSgpO1xuICBwcml2YXRlIF9zdGFydHVwRmxhZ3M6IHN0YXJ0dXBGbGFncyA9IHtcbiAgICBmdWxsc2NyZWVuOiBmYWxzZSxcbiAgICBhdXRvU3RyZWFtOiBcIlwiLFxuICB9O1xuXG4gIHB1YmxpYyBfaXNQcm9kdWN0aW9uOiBib29sZWFuID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiO1xuICBwcml2YXRlIF9pc0NpOiBib29sZWFuID0gcHJvY2Vzcy5lbnYuQ0kgIT09IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfaXNNYWM6IGJvb2xlYW4gPSBwcm9jZXNzLnBsYXRmb3JtID09PSBcImRhcndpblwiO1xuICBwcml2YXRlIF9pc1dpbmRvd3M6IGJvb2xlYW4gPSBwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCI7XG4gIHByaXZhdGUgX2lzUXVpdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgX21haW5XaW5kb3c7XG4gIHB1YmxpYyBfaXBjOiBJcGM7XG4gIHB1YmxpYyBfYXV0aGVudGljYXRpb246IEF1dGhlbnRpY2F0aW9uO1xuXG4gIHB1YmxpYyBzdHJlYW1pbmdUb2tlbnM6IGFueVxuXG4gIHB1YmxpYyB3ZWJUb2tlbjogYW55XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBfX2ZpbGVuYW1lICsgXCJbY29uc3RydWN0b3IoKV0gU3RhcnRpbmcgWFN0cmVhbWluZyB2XCIgKyBwa2cudmVyc2lvblxuICAgICk7XG4gICAgdGhpcy5fbG9nID0gRGVidWcoXCJ4c3RyZWFtaW5nXCIpO1xuXG4gICAgRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKFxuICAgICAgXCJlbmFibGUtZmVhdHVyZXNcIixcbiAgICAgIFwiVmFhcGlJZ25vcmVEcml2ZXJDaGVja3MsVmFhcGlWaWRlb0RlY29kZXIsUGxhdGZvcm1IRVZDRGVjb2RlclN1cHBvcnQsQ2FudmFzT29wUmFzdGVyaXphdGlvblwiXG4gICAgKTtcbiAgICAvLyBFbGVjdHJvbkFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goJ2Rpc2FibGUtZmVhdHVyZXMnLCAnVXNlQ2hyb21lT1NEaXJlY3RWaWRlb0RlY29kZXInKTtcbiAgICBFbGVjdHJvbkFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goXCJlbmFibGUtZ3B1LXJhc3Rlcml6YXRpb25cIik7XG4gICAgRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKFwiZW5hYmxlLW9vcC1yYXN0ZXJpemF0aW9uXCIpO1xuICAgIEVsZWN0cm9uQXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaChcImFjY2VsZXJhdGVkLXZpZGVvLWRlY29kZVwiKTtcbiAgICBFbGVjdHJvbkFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goXCJvem9uZS1wbGF0Zm9ybS1oaW50XCIsIFwieDExXCIpO1xuICAgIEVsZWN0cm9uQXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaChcImlnbm9yZS1ncHUtYmxvY2tsaXN0XCIpO1xuICAgIC8vIEVsZWN0cm9uQXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaCgnZW5hYmxlLXplcm8tY29weScpO1xuXG4gICAgdGhpcy5yZWFkU3RhcnR1cEZsYWdzKCk7XG4gICAgdGhpcy5sb2FkQXBwbGljYXRpb25EZWZhdWx0cygpO1xuXG4gICAgLy8gRWxlY3Ryb25BcHAucmVtb3ZlQXNEZWZhdWx0UHJvdG9jb2xDbGllbnQoJ21zLXhhbC1wdWJsaWMtYmV0YS0wMDAwMDAwMDRjMjBhOTA4JylcblxuICAgIHRoaXMuX2lwYyA9IG5ldyBJcGModGhpcyk7XG4gICAgdGhpcy5fYXV0aGVudGljYXRpb24gPSBuZXcgQXV0aGVudGljYXRpb24odGhpcyk7XG5cbiAgICB0aGlzLl9pcGMuc3RhcnRVcCgpO1xuICB9XG5cbiAgbG9nKG5hbWVzcGFjZSA9IFwiYXBwbGljYXRpb25cIiwgLi4uYXJncykge1xuICAgIHRoaXMuX2xvZy5leHRlbmQobmFtZXNwYWNlKSguLi5hcmdzKTtcbiAgfVxuXG4gIGdldFN0YXJ0dXBGbGFncygpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnR1cEZsYWdzO1xuICB9XG5cbiAgcmVzZXRBdXRvc3RyZWFtKCkge1xuICAgIHRoaXMuX3N0YXJ0dXBGbGFncy5hdXRvU3RyZWFtID0gXCJcIjtcbiAgfVxuXG4gIHJlYWRTdGFydHVwRmxhZ3MoKSB7XG4gICAgdGhpcy5sb2coXG4gICAgICBcImFwcGxpY2F0aW9uXCIsXG4gICAgICBfX2ZpbGVuYW1lICsgXCJbcmVhZFN0YXJ0dXBGbGFncygpXSBQcm9ncmFtIGFyZ3MgZGV0ZWN0ZWQ6XCIsXG4gICAgICBwcm9jZXNzLmFyZ3ZcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBhcmcgaW4gcHJvY2Vzcy5hcmd2KSB7XG4gICAgICBpZiAocHJvY2Vzcy5hcmd2W2FyZ10uaW5jbHVkZXMoXCItLWZ1bGxzY3JlZW5cIikpIHtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJhcHBsaWNhdGlvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgXCJbcmVhZFN0YXJ0dXBGbGFncygpXSAtLWZ1bGxzY3JlZW4gc3dpdGNoIGZvdW5kLiBTZXR0aW5nIGZ1bGxzY3JlZW4gdG8gdHJ1ZVwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N0YXJ0dXBGbGFncy5mdWxsc2NyZWVuID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2Nlc3MuYXJndlthcmddLmluY2x1ZGVzKFwiLS1jb25uZWN0PVwiKSkge1xuICAgICAgICBjb25zdCBrZXkgPSBwcm9jZXNzLmFyZ3ZbYXJnXS5zdWJzdHJpbmcoMTApO1xuXG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiYXBwbGljYXRpb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgIFwiW3JlYWRTdGFydHVwRmxhZ3MoKV0gLS1jb25uZWN0IHN3aXRjaCBmb3VuZC4gU2V0dGluZyBhdXRvU3RyZWFtIHRvXCIsXG4gICAgICAgICAga2V5XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N0YXJ0dXBGbGFncy5hdXRvU3RyZWFtID0ga2V5O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubG9nKFxuICAgICAgXCJhcHBsaWNhdGlvblwiLFxuICAgICAgX19maWxlbmFtZSArIFwiW3JlYWRTdGFydHVwRmxhZ3MoKV0gRW5kIHJlc3VsdCBvZiBzdGFydHVwRmxhZ3M6XCIsXG4gICAgICB0aGlzLl9zdGFydHVwRmxhZ3NcbiAgICApO1xuICB9XG5cbiAgbG9hZEFwcGxpY2F0aW9uRGVmYXVsdHMoKSB7XG4gICAgaWYgKHRoaXMuX2lzUHJvZHVjdGlvbiA9PT0gdHJ1ZSAmJiB0aGlzLl9pc0NpID09PSBmYWxzZSkge1xuICAgICAgc2VydmUoeyBkaXJlY3Rvcnk6IFwiYXBwXCIgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pc0NpID09PSB0cnVlKSB7XG4gICAgICBjb25zdCByYW5kb20gPSBNYXRoLnJhbmRvbSgpICogMTAwO1xuICAgICAgRWxlY3Ryb25BcHAuc2V0UGF0aChcbiAgICAgICAgXCJ1c2VyRGF0YVwiLFxuICAgICAgICBgJHtFbGVjdHJvbkFwcC5nZXRQYXRoKFwidXNlckRhdGFcIil9ICgke3JhbmRvbX0pYFxuICAgICAgKTtcbiAgICAgIEVsZWN0cm9uQXBwLnNldFBhdGgoXG4gICAgICAgIFwic2Vzc2lvbkRhdGFcIixcbiAgICAgICAgYCR7RWxlY3Ryb25BcHAuZ2V0UGF0aChcInVzZXJEYXRhXCIpfSAoJHtyYW5kb219KWBcbiAgICAgICk7XG4gICAgICB0aGlzLl9zdG9yZS5kZWxldGUoXCJ1c2VyXCIpO1xuICAgICAgdGhpcy5fc3RvcmUuZGVsZXRlKFwiYXV0aFwiKTtcblxuICAgICAgc2VydmUoeyBkaXJlY3Rvcnk6IFwiYXBwXCIgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIEVsZWN0cm9uQXBwLnNldFBhdGgoXG4gICAgICAgIFwidXNlckRhdGFcIixcbiAgICAgICAgYCR7RWxlY3Ryb25BcHAuZ2V0UGF0aChcInVzZXJEYXRhXCIpfSAoZGV2ZWxvcG1lbnQpYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBFbGVjdHJvbkFwcC53aGVuUmVhZHkoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImVsZWN0cm9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICBcIltsb2FkQXBwbGljYXRpb25EZWZhdWx0cygpXSBFbGVjdHJvbiBoYXMgYmVlbiBmdWxseSBsb2FkZWQuIFJlYWR5IHRvIG9wZW4gd2luZG93c1wiXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5vcGVuTWFpbldpbmRvdygpO1xuICAgICAgICB0aGlzLl9hdXRoZW50aWNhdGlvbi5zdGFydFdlYnZpZXdIb29rcygpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgXCJbbG9hZEFwcGxpY2F0aW9uRGVmYXVsdHMoKV0gRWxlY3Ryb24gaGFzIGZhaWxlZCB0byBsb2FkOlwiLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgIEVsZWN0cm9uQXBwLm9uKFwid2luZG93LWFsbC1jbG9zZWRcIiwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzTWFjID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgIFwiW2xvYWRBcHBsaWNhdGlvbkRlZmF1bHRzKCldIEVsZWN0cm9uIGRldGVjdGVkIHRoYXQgYWxsIHdpbmRvd3MgYXJlIGNsb3NlZC4gUnVubmluZyBpbiBiYWNrZ3JvdW5kLi4uXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgIFwiW2xvYWRBcHBsaWNhdGlvbkRlZmF1bHRzKCldIEVsZWN0cm9uIGRldGVjdGVkIHRoYXQgYWxsIHdpbmRvd3MgYXJlIGNsb3NlZC4gUXVpdHRpbmcgYXBwLi4uXCJcbiAgICAgICAgKTtcbiAgICAgICAgRWxlY3Ryb25BcHAucXVpdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgRWxlY3Ryb25BcHAub24oXCJhY3RpdmF0ZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLl9tYWluV2luZG93ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB0aGlzLl9tYWluV2luZG93LnNob3coKVxuICAgICAgICA6IHRoaXMub3Blbk1haW5XaW5kb3coKTtcbiAgICB9KTtcbiAgICBFbGVjdHJvbkFwcC5vbihcImJlZm9yZS1xdWl0XCIsICgpID0+ICh0aGlzLl9pc1F1aXR0aW5nID0gdHJ1ZSkpO1xuICB9XG5cbiAgX3dlYkFwaTogeGJveFdlYkFwaTtcbiAgX3hIb21lQXBpOiB4Q2xvdWRBcGk7XG4gIF94Q2xvdWRBcGk6IHhDbG91ZEFwaTtcbiAgX3hib3hXb3JrZXI6IHhib3hXb3JrZXI7XG5cbiAgYXV0aGVudGljYXRpb25Db21wbGV0ZWQoc3RyZWFtaW5nVG9rZW5zLCB3ZWJUb2tlbikge1xuICAgIHRoaXMubG9nKFxuICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgX19maWxlbmFtZSArIFwiW2F1dGhlbnRpY2F0aW9uQ29tcGxldGVkKCldIGF1dGhlbnRpY2F0aW9uQ29tcGxldGVkIGNhbGxlZFwiXG4gICAgKTtcbiAgICB0aGlzLmxvZyhcbiAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgIF9fZmlsZW5hbWUgKyBcIlthdXRoZW50aWNhdGlvbkNvbXBsZXRlZCgpXSBzdHJlYW1pbmdUb2tlbnM6XCIsXG4gICAgICBzdHJlYW1pbmdUb2tlbnNcbiAgICApO1xuXG4gICAgdGhpcy5zdHJlYW1pbmdUb2tlbnMgPSBzdHJlYW1pbmdUb2tlbnNcbiAgICB0aGlzLndlYlRva2VuID0gd2ViVG9rZW5cblxuICAgIHRoaXMuX3dlYkFwaSA9IG5ldyB4Ym94V2ViQXBpKHtcbiAgICAgIHVzZXJUb2tlbjogd2ViVG9rZW4uZGF0YS5Ub2tlbixcbiAgICAgIHVoczogd2ViVG9rZW4uZGF0YS5EaXNwbGF5Q2xhaW1zLnh1aVswXS51aHMsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9hdXRoZW50aWNhdGlvbi5faXNBdXRoZW50aWNhdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uLl9pc0F1dGhlbnRpY2F0ZWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fd2ViQXBpXG4gICAgICAuZ2V0UHJvdmlkZXIoXCJwcm9maWxlXCIpXG4gICAgICAuZ2V0KFxuICAgICAgICBcIi91c2Vycy9tZS9wcm9maWxlL3NldHRpbmdzP3NldHRpbmdzPUdhbWVEaXNwbGF5TmFtZSxHYW1lRGlzcGxheVBpY1JhdyxHYW1lcnNjb3JlLEdhbWVydGFnXCJcbiAgICAgIClcbiAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5wcm9maWxlVXNlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciAoY29uc3Qgc2V0dGluZyBpbiByZXN1bHQucHJvZmlsZVVzZXJzWzBdLnNldHRpbmdzKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnByb2ZpbGVVc2Vyc1swXS5zZXR0aW5nc1tzZXR0aW5nXS5pZCA9PT0gXCJHYW1lcnRhZ1wiKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3N0b3JlLnNldChcbiAgICAgICAgICAgICAgICBcInVzZXIuZ2FtZXJ0YWdcIixcbiAgICAgICAgICAgICAgICByZXN1bHQucHJvZmlsZVVzZXJzWzBdLnNldHRpbmdzW3NldHRpbmddLnZhbHVlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICByZXN1bHQucHJvZmlsZVVzZXJzWzBdLnNldHRpbmdzW3NldHRpbmddLmlkID09PVxuICAgICAgICAgICAgICBcIkdhbWVEaXNwbGF5UGljUmF3XCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLl9zdG9yZS5zZXQoXG4gICAgICAgICAgICAgICAgXCJ1c2VyLmdhbWVycGljXCIsXG4gICAgICAgICAgICAgICAgcmVzdWx0LnByb2ZpbGVVc2Vyc1swXS5zZXR0aW5nc1tzZXR0aW5nXS52YWx1ZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgcmVzdWx0LnByb2ZpbGVVc2Vyc1swXS5zZXR0aW5nc1tzZXR0aW5nXS5pZCA9PT0gXCJHYW1lcnNjb3JlXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLl9zdG9yZS5zZXQoXG4gICAgICAgICAgICAgICAgXCJ1c2VyLmdhbWVyc2NvcmVcIixcbiAgICAgICAgICAgICAgICByZXN1bHQucHJvZmlsZVVzZXJzWzBdLnNldHRpbmdzW3NldHRpbmddLnZhbHVlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUnVuIHdvcmtlcnNcbiAgICAgICAgdGhpcy5feGJveFdvcmtlciA9IG5ldyB4Ym94V29ya2VyKHRoaXMpO1xuICAgICAgICB0aGlzLl9pcGMub25Vc2VyTG9hZGVkKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImVsZWN0cm9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICBcIlthdXRoZW50aWNhdGlvbkNvbXBsZXRlZCgpXSBGYWlsZWQgdG8gcmV0cmlldmUgdXNlciBwcm9maWxlOlwiLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG4gICAgICAgIGRpYWxvZy5zaG93TWVzc2FnZUJveCh7XG4gICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgIFwiRXJyb3I6IEZhaWxlZCB0byByZXRyaWV2ZSB1c2VyIHByb2ZpbGU6XCIgKyBKU09OLnN0cmluZ2lmeShlcnJvciksXG4gICAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgb3Blbk1haW5XaW5kb3coKSB7XG4gICAgdGhpcy5sb2coXG4gICAgICBcImVsZWN0cm9uXCIsXG4gICAgICBfX2ZpbGVuYW1lICsgXCJbb3Blbk1haW5XaW5kb3coKV0gQ3JlYXRpbmcgbmV3IG1haW4gd2luZG93XCJcbiAgICApO1xuXG4gICAgY29uc3Qgc2V0dGluZ3M6IGFueSA9IHRoaXMuX3N0b3JlLmdldCgnc2V0dGluZ3MnLCBkZWZhdWx0U2V0dGluZ3MpXG4gICAgY29uc29sZS5sb2coJ3NldHRpbmdzOicsIHNldHRpbmdzKVxuXG4gICAgY29uc3Qgd2luZG93T3B0aW9uczogYW55ID0ge1xuICAgICAgdGl0bGU6IFwiWFN0cmVhbWluZ1wiLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInJnYigyNiwgMjcsIDMwKVwiLFxuICAgIH07XG5cbiAgICBpZiAoc2V0dGluZ3MuZnVsbHNjcmVlbikge1xuICAgICAgd2luZG93T3B0aW9ucy5mdWxsc2NyZWVuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9tYWluV2luZG93ID0gY3JlYXRlV2luZG93KFwibWFpblwiLCB7XG4gICAgICB3aWR0aDogMTI4MCxcbiAgICAgIGhlaWdodDogODAwLFxuICAgICAgLi4ud2luZG93T3B0aW9ucyxcbiAgICB9KTtcblxuICAgIHRoaXMuX21haW5XaW5kb3cub24oXCJzaG93XCIsICgpID0+IHtcbiAgICAgIHRoaXMubG9nKFxuICAgICAgICBcImVsZWN0cm9uXCIsXG4gICAgICAgIF9fZmlsZW5hbWUgKyBcIltvcGVuTWFpbldpbmRvdygpXSBTaG93aW5nIE1haW4gd2luZG93LlwiXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fbWFpbldpbmRvdy5vbihcImNsb3NlXCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzTWFjID09PSB0cnVlICYmIHRoaXMuX2lzUXVpdHRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICsgXCJbb3Blbk1haW5XaW5kb3coKV0gTWFpbiB3aW5kb3dzIGhhcyBiZWVuIGhpZGRlblwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX21haW5XaW5kb3cuaGlkZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgKyBcIltvcGVuTWFpbldpbmRvdygpXSBNYWluIHdpbmRvd3MgaGFzIGJlZW4gY2xvc2VkXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbWFpbldpbmRvdyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFxuICAgIGNvbnN0IGxvY2FsZSA9IHNldHRpbmdzLmxvY2FsZSB8fCAnZW4nXG5cbiAgICBpZiAodGhpcy5faXNQcm9kdWN0aW9uID09PSB0cnVlICYmIHRoaXMuX2lzQ2kgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9tYWluV2luZG93LmxvYWRVUkwoYGFwcDovLy4vJHtsb2NhbGV9L2hvbWVgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcG9ydCA9IHByb2Nlc3MuYXJndlsyXSB8fCAzMDAwO1xuICAgICAgdGhpcy5fbWFpbldpbmRvdy5sb2FkVVJMKGBodHRwOi8vbG9jYWxob3N0OiR7cG9ydH0vJHtsb2NhbGV9L2hvbWVgKTtcblxuICAgICAgLy8gaWYodGhpcy5faXNDaSAhPT0gdHJ1ZSl7XG4gICAgICAvLyAgICAgdGhpcy5fbWFpbldpbmRvdy53ZWJDb250ZW50cy5vcGVuRGV2VG9vbHMoKVxuICAgICAgLy8gICAgIHRoaXMub3BlbkdQVVdpbmRvdygpXG4gICAgICAvLyB9XG4gICAgfVxuICB9XG5cbiAgX2dwdVdpbmRvdztcblxuICBvcGVuR1BVV2luZG93KCkge1xuICAgIHRoaXMuX2dwdVdpbmRvdyA9IG5ldyBCcm93c2VyV2luZG93KHtcbiAgICAgIHdpZHRoOiA4MDAsXG4gICAgICBoZWlnaHQ6IDYwMCxcbiAgICB9KTtcblxuICAgIC8vIExvYWQgY2hyb21lOi8vZ3B1XG4gICAgdGhpcy5fZ3B1V2luZG93LmxvYWRVUkwoXCJjaHJvbWU6Ly9ncHVcIik7XG5cbiAgICAvLyBPcGVuIERldlRvb2xzXG4gICAgdGhpcy5fZ3B1V2luZG93LndlYkNvbnRlbnRzLm9wZW5EZXZUb29scygpO1xuICB9XG5cbiAgcXVpdCgpIHtcbiAgICBFbGVjdHJvbkFwcC5xdWl0KCk7XG4gIH1cblxuICByZXN0YXJ0KCkge1xuICAgIHRoaXMucXVpdCgpO1xuICAgIEVsZWN0cm9uQXBwLnJlbGF1bmNoKCk7XG4gIH1cbn1cblxubmV3IEFwcGxpY2F0aW9uKCk7XG4iXSwibmFtZXMiOlsic2Vzc2lvbiIsImRpYWxvZyIsImNyZWF0ZVdpbmRvdyIsIlhhbCIsIkF1dGhUb2tlblN0b3JlIiwiZGVmYXVsdFNldHRpbmdzIiwiQXV0aGVudGljYXRpb24iLCJjb25zdHJ1Y3RvciIsImFwcGxpY2F0aW9uIiwiX2RlZmluZVByb3BlcnR5IiwiX2FwcGxpY2F0aW9uIiwiX3Rva2VuU3RvcmUiLCJsb2FkIiwiX3hhbCIsImNoZWNrQXV0aGVudGljYXRpb24iLCJfaXNBdXRoZW50aWNhdGluZyIsIl9pc0F1dGhlbnRpY2F0ZWQiLCJsb2ciLCJoYXNWYWxpZEF1dGhUb2tlbnMiLCJzdGFydFNpbGVudEZsb3ciLCJnZXRVc2VyVG9rZW4iLCJ1bmRlZmluZWQiLCJyZWZyZXNoVG9rZW5zIiwidGhlbiIsImdldFN0cmVhbWluZ1Rva2VuIiwic3RyZWFtaW5nVG9rZW5zIiwieENsb3VkVG9rZW4iLCJfYXBwTGV2ZWwiLCJnZXRXZWJUb2tlbiIsIndlYlRva2VuIiwiX19maWxlbmFtZSIsImF1dGhlbnRpY2F0aW9uQ29tcGxldGVkIiwiY2F0Y2giLCJlcnJvciIsInNob3dNZXNzYWdlQm94IiwibWVzc2FnZSIsIl9KU09OJHN0cmluZ2lmeSIsInR5cGUiLCJlcnIiLCJjbGVhciIsInN0YXJ0QXV0aGZsb3ciLCJnZXRSZWRpcmVjdFVyaSIsInJlZGlyZWN0Iiwib3BlbkF1dGhXaW5kb3ciLCJzaXN1QXV0aCIsIk1zYU9hdXRoUmVkaXJlY3QiLCJfYXV0aENhbGxiYWNrIiwicmVkaXJlY3RVcmkiLCJhdXRoZW50aWNhdGVVc2VyIiwicmVzdWx0Iiwic2hvd0Vycm9yQm94Iiwic3RhcnRXZWJ2aWV3SG9va3MiLCJkZWZhdWx0U2Vzc2lvbiIsIndlYlJlcXVlc3QiLCJvbkhlYWRlcnNSZWNlaXZlZCIsInVybHMiLCJkZXRhaWxzIiwiY2FsbGJhY2siLCJfY29udGV4dCIsInJlc3BvbnNlSGVhZGVycyIsIkxvY2F0aW9uIiwiX2luY2x1ZGVzSW5zdGFuY2VQcm9wZXJ0eSIsImNhbGwiLCJfYXBwIiwiUmVkaXJlY3RVcmkiLCJfYXV0aFdpbmRvdyIsImNsb3NlIiwiY2FuY2VsIiwidXJsIiwiYXV0aFdpbmRvdyIsIndpZHRoIiwiaGVpZ2h0IiwidGl0bGUiLCJsb2FkVVJMIiwib24iLCJ0b2tlblN0b3JlIiwiY29uc29sZSIsInNpc3VUb2tlbiIsImdldFNpc3VUb2tlbiIsIkVycm9yIiwieHN0c1Rva2VuIiwiZG9Yc3RzQXV0aG9yaXphdGlvbiIsIl94aG9tZVRva2VuIiwiZ2V0U2Vjb25kc1ZhbGlkIiwiZ2V0U3RyZWFtVG9rZW4iLCJfeGNsb3VkVG9rZW4iLCJzZXR0aW5ncyIsIl9zdG9yZSIsImdldCIsImZvcmNlX3JlZ2lvbl9pcCIsInhIb21lVG9rZW4iLCJheGlvcyIsIkh0dHAiLCJob3N0IiwicGF0aCIsImhlYWRlcnMiLCJfUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJob3N0SGVhZGVycyIsIl9vYmplY3RTcHJlYWQiLCJyZXMiLCJzdGF0dXMiLCJkYXRhIiwic3RhdHVzY29kZSIsImNvZGUiLCJib2R5IiwiZSIsInBvc3QiLCJBY2hpdmVtZW50TWFuYWdlciIsImdldEhpc3RvcnlBY2hpdmVtZW50cyIsImh0dHAiLCJwcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSIsInVocyIsIkRpc3BsYXlDbGFpbXMiLCJ4dWkiLCJ4aWQiLCJBdXRob3JpemF0aW9uIiwiVG9rZW4iLCJ0aXRsZXMiLCJnZXRBY2hpdmVtZW50RGV0YWlsIiwidGl0bGVJZCIsImFjaGlldmVtZW50cyIsInNjcmVlbiIsIkJyb3dzZXJXaW5kb3ciLCJTdG9yZSIsIndpbmRvd05hbWUiLCJvcHRpb25zIiwia2V5IiwibmFtZSIsInN0b3JlIiwiZGVmYXVsdFNpemUiLCJzdGF0ZSIsInJlc3RvcmUiLCJnZXRDdXJyZW50UG9zaXRpb24iLCJ3aW4iLCJyZW1vdmVNZW51IiwicG9zaXRpb24iLCJnZXRQb3NpdGlvbiIsInNpemUiLCJnZXRTaXplIiwieCIsInkiLCJ3aW5kb3dXaXRoaW5Cb3VuZHMiLCJ3aW5kb3dTdGF0ZSIsImJvdW5kcyIsInJlc2V0VG9EZWZhdWx0cyIsImdldFByaW1hcnlEaXNwbGF5IiwiX09iamVjdCRhc3NpZ24iLCJlbnN1cmVWaXNpYmxlT25Tb21lRGlzcGxheSIsInZpc2libGUiLCJfc29tZUluc3RhbmNlUHJvcGVydHkiLCJnZXRBbGxEaXNwbGF5cyIsImRpc3BsYXkiLCJzYXZlU3RhdGUiLCJpc01pbmltaXplZCIsImlzTWF4aW1pemVkIiwic2V0IiwiYnJvd3Nlck9wdGlvbnMiLCJ3ZWJQcmVmZXJlbmNlcyIsIm5vZGVJbnRlZ3JhdGlvbiIsImNvbnRleHRJc29sYXRpb24iLCJlbmFibGVCbGlua0ZlYXR1cmVzIiwic2FuZGJveCIsInByZWxvYWQiLCJqb2luIiwiX19kaXJuYW1lIiwiYXV0b0hpZGVNZW51QmFyIiwiaHR0cHMiLCJtZXRob2QiLCJyZXNwb25zZURhdGEiLCJyZXEiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJzdGF0dXNDb2RlIiwicmV0dXJuRGF0YSIsIkpTT04iLCJwYXJzZSIsIl9zZXRUaW1lb3V0IiwiZW5kIiwicG9zdERhdGEiLCJtZXJnZWRIZWFkZXJzIiwic3Vic3RyaW5nIiwid3JpdGUiLCJ4Q2xvdWRBcGkiLCJ4Ym94V29ya2VyIiwic2V0VXBkYXRlTm90aWZpY2F0aW9uIiwidXBkYXRlciIsIlN0cmVhbU1hbmFnZXIiLCJnZXRBcGkiLCJnZXREZWZhdWx0UmVnaW9uIiwiYmFzZVVyaSIsImdzVG9rZW4iLCJnZXRTZXNzaW9uIiwic2Vzc2lvbklkIiwiX3Nlc3Npb25zIiwic3RhcnRTdHJlYW0iLCJ0YXJnZXQiLCJwbGF5UmVzdWx0Iiwic2Vzc2lvblBhdGgiLCJzcGxpdCIsInN0cmVhbVNlc3Npb24iLCJpZCIsInBsYXllclN0YXRlIiwibW9uaXRvclNlc3Npb24iLCJzdG9wU3RyZWFtIiwic2VuZFNkcCIsInNkcCIsInNlbmRDaGF0U2RwIiwic2VuZEljZSIsImljZSIsInNlbmRLZWVwYWxpdmUiLCJnZXRTdHJlYW1TdGF0ZSIsIl9hdXRoZW50aWNhdGlvbiIsImdldE1zYWxUb2tlbiIsIm1zYWxUb2tlbiIsInNlbmRNU0FMQXV0aCIsImxwdCIsImFsZXJ0Iiwid2FpdGluZ1RpbWVzIiwiZ2V0V2FpdGluZ1RpbWVzIiwiZXJyb3JEZXRhaWxzIiwiZ2V0QWN0aXZlU2Vzc2lvbnMiLCJIVFRQIiwiVGl0bGVNYW5hZ2VyIiwiX2h0dHAiLCJnZXRPZmZpY2lhbFRpdGxlcyIsIm9mZmljaWFsVGl0bGVzIiwidGltZW91dCIsIlByb2R1Y3RzIiwiZ2V0R2FtZVBhc3NQcm9kdWN0cyIsInByb2R1Y3RJZFF1ZXVlIiwiX0FycmF5JGlzQXJyYXkiLCJfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkiLCJwcm9kdWN0SWQiLCJwdXNoIiwibWVyZ2VQcm9kdWN0SWRzIiwiX1NldCIsInByb2R1Y3RzIiwibWVyZ2VkVGl0bGVzIiwiX3NvcnRJbnN0YW5jZVByb3BlcnR5IiwiYSIsImIiLCJQcm9kdWN0VGl0bGUiLCJsb2NhbGVDb21wYXJlIiwiZ2V0TmV3VGl0bGVzIiwiVGl0bGUiLCJ4Ym94VGl0bGVJZCIsInN1cHBvcnRlZElucHV0VHlwZXMiLCJzZXRDYXRhbG9nRGV0YWlscyIsInRpdGxlSW5mbyIsImNhdGFsb2dEZXRhaWxzIiwidG9TdHJpbmciLCJyZXN0b3JlRnJvbUNhY2hlIiwiY2FjaGVkT2JqIiwiVG9rZW5TdG9yZSIsImFyZ3MiLCJ0b2tlbnMiLCJsb2FkSnNvbiIsInNhdmUiLCJ1c2VyVG9rZW4iLCJfdXNlclRva2VuIiwiX3Npc3VUb2tlbiIsImp3dEtleXMiLCJfand0S2V5cyIsImRlbGV0ZSIsImVsZWN0cm9uIiwiY29tcGFyZSIsImdoIiwicGtnIiwiZGVmYXVsdE9wdGlvbnMiLCJkZWJ1ZyIsInNpbGVudCIsInByZXJlbGVhc2VzIiwibG9nZ2VyIiwid2l0aERlZmF1bHRzIiwiYXBwIiwiaXNSZWFkeSIsImNoZWNrRm9yVXBkYXRlcyIsInJlcG9zaXRvcnkiLCJ0b2tlbiIsImlzUGFja2FnZWQiLCJnaE9iaiIsInVzZXIiLCJyZXBvIiwibGF0ZXN0UmVsZWFzZSIsInJlbGVhc2VzIiwiYXV0aG9yaXphdGlvbiIsInJlbGVhc2UiLCJwcmVyZWxlYXNlIiwic2hvd0RpYWxvZyIsInRhZ19uYW1lIiwiZ2V0VmVyc2lvbiIsInNob3dVcGRhdGVEaWFsb2ciLCJnZXROYW1lIiwiZGV0YWlsIiwiX3RyaW1JbnN0YW5jZVByb3BlcnR5IiwiYnV0dG9ucyIsImRlZmF1bHRJZCIsImNhbmNlbElkIiwiX3NldEltbWVkaWF0ZSIsInNoZWxsIiwib3BlbkV4dGVybmFsIiwiaHRtbF91cmwiLCJpbnRlcnZhbEZyaWVuZHMiLCJ1cGRhdGVGcmllbmRzIiwiZnJpZW5kcyIsIm9ubGluZUZyaWVuZHMiLCJmcmllbmQiLCJwcmVzZW5jZVN0YXRlIiwiX29ubGluZUZyaWVuZHMiLCJfd2ViQXBpIiwiZ2V0UHJvdmlkZXIiLCJnZXRGcmllbmRzIiwicGVvcGxlIiwiX2ZyaWVuZHMiLCJ4dWlkIiwiQWRkcmVzczYiLCJfaG9zdCIsIl90b2tlbiIsIl90eXBlIiwiZ2V0VGl0bGVzIiwiZ2V0UmVjZW50VGl0bGVzIiwiZGV2aWNlSW5mbyIsImFwcEluZm8iLCJlbnYiLCJjbGllbnRBcHBJZCIsImNsaWVudEFwcFR5cGUiLCJjbGllbnRBcHBWZXJzaW9uIiwiY2xpZW50U2RrVmVyc2lvbiIsImh0dHBFbnZpcm9ubWVudCIsInNka0luc3RhbGxJZCIsImRldiIsImh3IiwibWFrZSIsIm1vZGVsIiwic2RrdHlwZSIsIm9zIiwicmVzb2x1dGlvbiIsInZlciIsInBsYXRmb3JtIiwiZGlzcGxheUluZm8iLCJkaW1lbnNpb25zIiwid2lkdGhJblBpeGVscyIsImhlaWdodEluUGl4ZWxzIiwicGl4ZWxEZW5zaXR5IiwiZHBpWCIsImRwaVkiLCJzeXN0ZW1VcGRhdGVHcm91cCIsImNsaWVudFNlc3Npb25JZCIsIm5hbm9WZXJzaW9uIiwiZW5hYmxlVGV4dFRvU3BlZWNoIiwiaGlnaENvbnRyYXN0IiwibG9jYWxlIiwidXNlSWNlQ29ubmVjdGlvbiIsInRpbWV6b25lT2Zmc2V0TWludXRlcyIsInNka1R5cGUiLCJvc05hbWUiLCJzZXJ2ZXJJZCIsImZhbGxiYWNrUmVnaW9uTmFtZXMiLCJtZXNzYWdlVHlwZSIsImNvbmZpZ3VyYXRpb24iLCJjaGF0Q29uZmlndXJhdGlvbiIsImJ5dGVzUGVyU2FtcGxlIiwiZXhwZWN0ZWRDbGlwRHVyYXRpb25NcyIsImZvcm1hdCIsImNvZGVjIiwiY29udGFpbmVyIiwibnVtQ2hhbm5lbHMiLCJzYW1wbGVGcmVxdWVuY3lIeiIsImNoYXQiLCJtaW5WZXJzaW9uIiwibWF4VmVyc2lvbiIsImNvbnRyb2wiLCJpbnB1dCIsInNkcFJlc3VsdCIsImV4Y2hhbmdlU2RwIiwiZXhjaGFuZ2VSZXNwb25zZSIsImlzTWVkaWFTdHJlYW1zQ2hhdFJlbmVnb3RpYXRpb24iLCJjaGVja0ljZSIsImljZVJlc3VsdCIsIl9pY2VSZXN1bHQiLCJleGNoYW5nZUljZSIsImNvbXB1dGVkQ2FuZGlkYXRlcyIsImNhbmRpZGF0ZSIsImNhbmRpZGF0ZUFkZHJlc3MiLCJsZW5ndGgiLCJzdWJzdHIiLCJhZGRyZXNzIiwidGVyZWRvIiwiaW5zcGVjdFRlcmVkbyIsImNsaWVudDQiLCJzZHBNTGluZUluZGV4Iiwic2RwTWlkIiwidWRwUG9ydCIsInBhdHRlcm4iLCJSZWdFeHAiLCJsc3QiLCJpdGVtIiwiZ3JvdXBzIiwiZXhlYyIsImlwdjYiLCJmaXJzdElwIiwiaXAiLCJzZWNvbmRJcCIsIm5ld0NhbmRpZGF0ZXMiLCJmb3VuZGF0aW9uIiwibmV3Q2FuZGlkYXRlIiwicHJpb3JpdHkiLCJwb3J0IiwidGhlX3Jlc3QiLCJjYW5kaWRhdGVzIiwiSXBjQ29uc29sZXMiLCJJcGNTdHJlYW1pbmciLCJJcGN4Q2xvdWQiLCJJcGNBcHAiLCJJcGNTZXR0aW5ncyIsImlwY01haW4iLCJJcGMiLCJfY2hhbm5lbHMiLCJzdHJlYW1pbmciLCJjb25zb2xlcyIsInhDbG91ZCIsImNoYW5uZWwiLCJldmVudCIsIm9uRXZlbnQiLCJzdGFydFVwIiwib25Vc2VyTG9hZGVkIiwiSXBjQmFzZSIsImxvYWRDYWNoZWRVc2VyIiwiZ2V0VXNlclN0YXRlIiwiZ2FtZXJ0YWciLCJnYW1lcnBpYyIsImdhbWVyc2NvcmUiLCJzaWduZWRJbiIsImxldmVsIiwiZ2V0QXV0aFN0YXRlIiwiaXNBdXRoZW50aWNhdGluZyIsImlzQXV0aGVudGljYXRlZCIsImdldEFwcExldmVsIiwibG9naW4iLCJxdWl0IiwicmVzdGFydCIsImNsZWFyRGF0YSIsImNsZWFyU3RvcmFnZURhdGEiLCJnZXRPbmxpbmVGcmllbmRzIiwiX3hib3hXb3JrZXIiLCJvblVpU2hvd24iLCJpc0Z1bGxzY3JlZW4iLCJpc0Z1bGxTY3JlZW4iLCJfbWFpbldpbmRvdyIsInRvZ2dsZUZ1bGxzY3JlZW4iLCJzZXRGdWxsU2NyZWVuIiwiZW50ZXJGdWxsc2NyZWVuIiwiZXhpdEZ1bGxzY3JlZW4iLCJhY3Rpb24iLCJfT2JqZWN0JGtleXMiLCJzZW5kIiwid2ViQ29udGVudHMiLCJfY29uc29sZXNMYXN0VXBkYXRlIiwiX0RhdGUkbm93IiwiZ2V0Q29uc29sZXNMaXN0IiwiX2NvbnNvbGVzIiwic2V0U2V0dGluZ3MiLCJuZXdTZXR0aW5ncyIsImdldFNldHRpbmdzIiwicmVzZXRTZXR0aW5ncyIsIl9zdHJlYW1NYW5hZ2VyIiwiX2lwYyIsIl9yZWNlbnRUaXRsZXNMYXN0VXBkYXRlIiwiZ2V0UGxheWVyU3RhdGUiLCJhY3RpdmVTZXNzaW9ucyIsIl90aXRsZU1hbmFnZXIiLCJfYWNoaXZlbWVudE1hbmFnZXIiLCJfeENsb3VkQXBpIiwiZ2V0WGhvbWVUb2tlbiIsInNldFhob21lVG9rZW5EZWZhdWx0Iiwic2V0RGVmYXVsdFJlZ2lvbiIsImdldFhjbG91ZFRva2VuIiwic2V0WGNsb3VkVG9rZW5EZWZhdWx0IiwiZ2V0UmVxdWVzdCIsImhvc3RuYW1lIiwiSHR0cFJlc3BvbnNlIiwicG9zdFJlcXVlc3QiLCJoZWFkZXIiLCJjYWxjdWxhdGVTZWNvbmRzTGVmdCIsImRhdGUiLCJleHBpcmVzT24iLCJjdXJyZW50RGF0ZSIsIkRhdGUiLCJNYXRoIiwiZmxvb3IiLCJnZXRUaW1lIiwiaXNWYWxpZCIsImdldFVzZXJIYXNoIiwiVXNlclRva2VuIiwiZ2V0R2FtZXJ0YWciLCJBdXRob3JpemF0aW9uVG9rZW4iLCJndGciLCJEZXZpY2VUb2tlbiIsIk5vdEFmdGVyIiwiTXNhbFRva2VuIiwiU2lzdVRva2VuIiwic2Vjb25kc0xlZnRUaXRsZSIsIlRpdGxlVG9rZW4iLCJzZWNvbmRzTGVmdFVzZXIiLCJzZWNvbmRzTGVmdEF1dGhvcml6YXRpb24iLCJtaW4iLCJTdHJlYW1pbmdUb2tlbiIsInRva2VuRGF0YSIsIl9vYmplY3RDcmVhdGVUaW1lIiwiZHVyYXRpb25JblNlY29uZHMiLCJzZWNvbmRzTGVmdCIsImdldE1hcmtldCIsIm1hcmtldCIsImdldFJlZ2lvbnMiLCJvZmZlcmluZ1NldHRpbmdzIiwicmVnaW9ucyIsIl9maWx0ZXJJbnN0YW5jZVByb3BlcnR5IiwicmVnaW9uIiwiaXNEZWZhdWx0IiwiX2NvbnRleHQyIiwiZ2V0RW52aXJvbm1lbnRzIiwiY2xpZW50Q2xvdWRTZXR0aW5ncyIsIkVudmlyb25tZW50cyIsImV4cGlyZXNfb24iLCJYc3RzVG9rZW4iLCJmcyIsImZpbGVwYXRoIiwiX2ZpbGVwYXRoIiwiZXhpc3RzU3luYyIsImZpbGVDb250ZW50cyIsInJlYWRGaWxlU3luYyIsImpzb24iLCJqc29uRGF0YSIsInNldFVzZXJUb2tlbiIsImV4cGlyZURhdGUiLCJzZXRTZWNvbmRzIiwiZ2V0U2Vjb25kcyIsImV4cGlyZXNfaW4iLCJ0b0lTT1N0cmluZyIsInNldFNpc3VUb2tlbiIsInNldEp3dEtleXMiLCJ3cml0ZUZpbGVTeW5jIiwicmVtb3ZlQWxsIiwiY3J5cHRvIiwic3VidGxlIiwiS2V5T2JqZWN0IiwiZXhwb3J0SldLIiwiVVVJRCIsInJlcXVpcmUiLCJuZXh0VVVJRCIsInYzIiwibmFtZXNwYWNlIiwiQXBwSWQiLCJUaXRsZUlkIiwic2V0S2V5cyIsImp3dCIsImtleXMiLCJvcmdKd3RLZXkiLCJpbXBvcnRLZXkiLCJuYW1lZEN1cnZlIiwiand0S2V5IiwicHJpdmF0ZUtleSIsImZyb20iLCJyYXciLCJnZXRLZXlzIiwiX2tleXNJbnN0YW5jZVByb3BlcnR5IiwiZ2VuZXJhdGVLZXlQYWlyU3luYyIsInB1YmxpY0tleSIsImp3ayIsImp3a0tleSIsImFsZyIsInVzZSIsImp3a0tleXMiLCJleHBvcnQiLCJnZXRDb2RlQ2hhbGxhbmdlIiwiY29kZUNoYWxsYW5nZSIsImNvZGVfdmVyaWZpZXIiLCJCdWZmZXIiLCJwc2V1ZG9SYW5kb21CeXRlcyIsImNvZGVfY2hhbGxlbmdlIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsImRpZ2VzdCIsInZhbHVlIiwidmVyaWZpZXIiLCJnZXRSYW5kb21TdGF0ZSIsImJ5dGVzIiwicmFuZG9tQnl0ZXMiLCJnZXREZXZpY2VUb2tlbiIsInBheWxvYWQiLCJQcm9wZXJ0aWVzIiwiQXV0aE1ldGhvZCIsIklkIiwiRGV2aWNlVHlwZSIsIlNlcmlhbE51bWJlciIsIlZlcnNpb24iLCJQcm9vZktleSIsIlJlbHlpbmdQYXJ0eSIsIlRva2VuVHlwZSIsInNpZ25hdHVyZSIsInNpZ24iLCJTaWduYXR1cmUiLCJIdHRwQ2xpZW50IiwiZG9TaXN1QXV0aGVudGljYXRpb24iLCJkZXZpY2VUb2tlbiIsIlNhbmRib3giLCJPZmZlcnMiLCJRdWVyeSIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCIsInJlc0JvZHkiLCJTZXNzaW9uSWQiLCJkb1Npc3VBdXRob3JpemF0aW9uIiwiQWNjZXNzVG9rZW4iLCJhY2Nlc3NfdG9rZW4iLCJTaXRlTmFtZSIsIlVzZU1vZGVybkdhbWVydGFnIiwiZXhjaGFuZ2VDb2RlRm9yVG9rZW4iLCJjb2RlVmVyaWZpZXIiLCJfVVJMU2VhcmNoUGFyYW1zIiwicmVmcmVzaFVzZXJUb2tlbiIsInJlZnJlc2hfdG9rZW4iLCJyZWx5aW5nUGFydHkiLCJTYW5kYm94SWQiLCJVc2VyVG9rZW5zIiwiZXhjaGFuZ2VSZWZyZXNoVG9rZW5Gb3JYY2xvdWRUcmFuc2ZlclRva2VuIiwiY2xpZW50X2lkIiwiZ3JhbnRfdHlwZSIsInNjb3BlIiwicmVkaXJlY3RfdXJpIiwib2ZmZXJpbmciLCJmb3JjZVJlZ2lvbklwIiwiYXV0aG9yaXphdGlvblRva2VuIiwid2luZG93c1RpbWVzdGFtcCIsIkJpZ0ludCIsInBhdGhBbmRRdWVyeSIsIl9VUkwiLCJwYXRobmFtZSIsImFsbG9jU2l6ZSIsImJ1ZiIsImFsbG9jIiwid3JpdGVJbnQzMkJFIiwid3JpdGVVSW50OCIsIndyaXRlQmlnVUludDY0QkUiLCJvZmZzZXQiLCJjb3B5IiwiZHNhRW5jb2RpbmciLCJjdXJVc2VyVG9rZW4iLCJUb2tlblJlZnJlc2hFcnJvciIsIl93ZWJUb2tlbiIsInJlZGlyZWN0T2JqZWN0Iiwic2VhcmNoUGFyYW1zIiwiZXJyb3JfZGVzY3JpcHRpb24iLCJhdXRoZW50aWNhdGVVc2VyVXNpbmdDb2RlIiwiRWxlY3Ryb25BcHAiLCJzZXJ2ZSIsIkRlYnVnIiwieGJveFdlYkFwaSIsIkFwcGxpY2F0aW9uIiwiZnVsbHNjcmVlbiIsImF1dG9TdHJlYW0iLCJwcm9jZXNzIiwiTk9ERV9FTlYiLCJDSSIsInZlcnNpb24iLCJfbG9nIiwiY29tbWFuZExpbmUiLCJhcHBlbmRTd2l0Y2giLCJyZWFkU3RhcnR1cEZsYWdzIiwibG9hZEFwcGxpY2F0aW9uRGVmYXVsdHMiLCJleHRlbmQiLCJnZXRTdGFydHVwRmxhZ3MiLCJfc3RhcnR1cEZsYWdzIiwicmVzZXRBdXRvc3RyZWFtIiwiYXJndiIsImFyZyIsIl9pc1Byb2R1Y3Rpb24iLCJfaXNDaSIsImRpcmVjdG9yeSIsInJhbmRvbSIsInNldFBhdGgiLCJnZXRQYXRoIiwid2hlblJlYWR5Iiwib3Blbk1haW5XaW5kb3ciLCJfaXNNYWMiLCJzaG93IiwiX2lzUXVpdHRpbmciLCJwcm9maWxlVXNlcnMiLCJzZXR0aW5nIiwid2luZG93T3B0aW9ucyIsImJhY2tncm91bmRDb2xvciIsInByZXZlbnREZWZhdWx0IiwiaGlkZSIsIm9wZW5HUFVXaW5kb3ciLCJfZ3B1V2luZG93Iiwib3BlbkRldlRvb2xzIiwicmVsYXVuY2giXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsNkRBQTZEO0FBQ3JGO0FBQ0EsTUFBTTtBQUNOLHNCQUFzQix5Q0FBeUM7QUFDL0Q7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sR0FBRztBQUNIO0FB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QUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qiw2QkFBNkI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsMkJBQTJCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNB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QUFLLEVBQUU7TUFDdkQsSUFBSSxDQUFDck8sV0FBVyxDQUFDMVgsT0FBTyxDQUFDLFdBQVd5UixNQUFNLE9BQU8sQ0FBQztJQUNwRCxDQUFDLE1BQU07TUFDTCxNQUFNd0QsSUFBSSxHQUFHOFAsT0FBTyxDQUFDYSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSTtNQUNwQyxJQUFJLENBQUNsTyxXQUFXLENBQUMxWCxPQUFPLENBQUMsb0JBQW9CaVYsSUFBSSxJQUFJeEQsTUFBTSxPQUFPLENBQUM7O01BRW5FO01BQ0E7TUFDQTtNQUNBO0lBQ0Y7RUFDRjtFQUlBc1YsYUFBYUEsQ0FBQSxFQUFHO0lBQ2QsSUFBSSxDQUFDQyxVQUFVLEdBQUcsSUFBSTdqQixvREFBYSxDQUFDO01BQ2xDdEQsS0FBSyxFQUFFLEdBQUc7TUFDVkMsTUFBTSxFQUFFO0lBQ1YsQ0FBQyxDQUFDOztJQUVGO0lBQ0EsSUFBSSxDQUFDa25CLFVBQVUsQ0FBQ2huQixPQUFPLENBQUMsY0FBYyxDQUFDOztJQUV2QztJQUNBLElBQUksQ0FBQ2duQixVQUFVLENBQUM5TyxXQUFXLENBQUMrTyxZQUFZLENBQUMsQ0FBQztFQUM1QztFQUVBaFEsSUFBSUEsQ0FBQSxFQUFHO0lBQ0x1TiwwQ0FBVyxDQUFDdk4sSUFBSSxDQUFDLENBQUM7RUFDcEI7RUFFQUMsT0FBT0EsQ0FBQSxFQUFHO0lBQ1IsSUFBSSxDQUFDRCxJQUFJLENBQUMsQ0FBQztJQUNYdU4sMENBQVcsQ0FBQzBDLFFBQVEsQ0FBQyxDQUFDO0VBQ3hCO0FBQ0Y7QUFFQSxJQUFJdEMsV0FBVyxDQUFDLENBQUMsQyIsInNvdXJjZXMiOlsid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2F1dGhlbnRpY2F0aW9uLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvYWNoaXZlbWVudG1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaGVscGVycy9jcmVhdGUtd2luZG93LnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvaHR0cC50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL2luZGV4LnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvc3RyZWFtbWFuYWdlci50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3RpdGxlbWFuYWdlci50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3Rva2Vuc3RvcmUudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaGVscGVycy91cGRhdGVyLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMveGJveFdvcmtlci50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3hjbG91ZGFwaS50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9pcGMudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaXBjL2FwcC50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9pcGMvYmFzZS50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9pcGMvY29uc29sZXMudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaXBjL3NldHRpbmdzLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2lwYy9zdHJlYW1pbmcudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaXBjL3hjbG91ZC50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL2xpYi9odHRwLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9saWIvdG9rZW4udHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL2xpYi90b2tlbnMvZGV2aWNldG9rZW4udHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL2xpYi90b2tlbnMvbXNhbHRva2VuLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9saWIvdG9rZW5zL3Npc3V0b2tlbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL3Rva2Vucy9zdHJlYW1pbmd0b2tlbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL3Rva2Vucy91c2VydG9rZW4udHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL2xpYi90b2tlbnMveHN0c3Rva2VuLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC90b2tlbnN0b3JlLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC94YWwudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL3JlbmRlcmVyL2NvbnRleHQvdXNlckNvbnRleHQuZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiZWxlY3Ryb25cIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJmc1wiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImh0dHBzXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwibm9kZTpwYXRoXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJheGlvc1wiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiY29tcGFyZS12ZXJzaW9uc1wiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiZGVidWdcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcImVsZWN0cm9uLXNlcnZlXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJlbGVjdHJvbi1zdG9yZVwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiZ2l0aHViLXVybC10by1vYmplY3RcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcImlwLWFkZHJlc3NcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcImpvc2VcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcInV1aWQtMTM0NVwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwieGJveC13ZWJhcGlcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvYXJyYXkvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2RhdGUvbm93LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uva2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc29tZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc29ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvanNvbi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9wcm9taXNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zZXQtaW1tZWRpYXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zZXQtdGltZW91dC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc2V0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS91cmwtc2VhcmNoLXBhcmFtcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvdXJsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC9pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29tZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZGF0ZS9ub3cuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2luY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NvbWUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS90cmltLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3Byb21pc2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc2V0L2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N0cmluZy92aXJ0dWFsL2luY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N0cmluZy92aXJ0dWFsL3RyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3N5bWJvbC9pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLXNldC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mcm9tLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2FsbGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RhdGUtdG8taXNvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb20taXRlcmFibGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC1mZi12ZXJzaW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1pZS1vci1lZGdlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1pb3MtcGViYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1pb3MuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLW5vZGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLXdlYm9zLXdlYmtpdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtd2Via2l0LXZlcnNpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmFpbHMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZyZWV6aW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1hcHBseS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1tZXRob2QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wdXJlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbm90LWEtcmVnZXhwLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGF0aC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9xdWV1ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zYWZlLWdldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1jbG9uZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWRpZmZlcmVuY2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1oZWxwZXJzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtaXMtZGlzam9pbnQtZnJvbS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1zaXplLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXN5bW1ldHJpYy1kaWZmZXJlbmNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXVuaW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLXBhZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLXB1bnljb2RlLXRvLWFzY2lpLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctcmVwZWF0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy10cmltLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXJlZ2lzdGVyZWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90YXNrLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXJsLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb21lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmRhdGUubm93LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuZGF0ZS50by1qc29uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm1hdGgudG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYW55LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJlc29sdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLndpdGgtcmVzb2x2ZXJzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucmVmbGVjdC50by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLmZyb20tY29kZS1wb2ludC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmZvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC1hbGwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wucmVwbGFjZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc3BlY2llcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGxpdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC51bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5mdW5jdGlvbi5tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuYXN5bmMtZGlzcG9zZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuY3VzdG9tLW1hdGNoZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQtc3ltYm9sLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucGF0dGVybi1tYXRjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucmVwbGFjZS1hbGwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuY2xlYXItaW1tZWRpYXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC1pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LWludGVydmFsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC10aW1lb3V0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5kZWxldGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuaGFzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLnNpemUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLmNhbi1wYXJzZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC5wYXJzZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwudG8tanNvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwva2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvZGF0ZS9ub3cuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb21lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS90cmltLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3Byb21pc2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3NldC1pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3NldC10aW1lb3V0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS91cmwtc2VhcmNoLXBhcmFtcy9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvdXJsL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3dlYi91cmwtc2VhcmNoLXBhcmFtcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS93ZWIvdXJsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2FwcGxpY2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImVsZWN0cm9uLXNlcnZlXCIpLCByZXF1aXJlKFwiZWxlY3Ryb24tc3RvcmVcIiksIHJlcXVpcmUoXCJkZWJ1Z1wiKSwgcmVxdWlyZShcImlwLWFkZHJlc3NcIiksIHJlcXVpcmUoXCJheGlvc1wiKSwgcmVxdWlyZShcImNvbXBhcmUtdmVyc2lvbnNcIiksIHJlcXVpcmUoXCJnaXRodWItdXJsLXRvLW9iamVjdFwiKSwgcmVxdWlyZShcImpvc2VcIiksIHJlcXVpcmUoXCJ1dWlkLTEzNDVcIiksIHJlcXVpcmUoXCJ4Ym94LXdlYmFwaVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJlbGVjdHJvbi1zZXJ2ZVwiLCBcImVsZWN0cm9uLXN0b3JlXCIsIFwiZGVidWdcIiwgXCJpcC1hZGRyZXNzXCIsIFwiYXhpb3NcIiwgXCJjb21wYXJlLXZlcnNpb25zXCIsIFwiZ2l0aHViLXVybC10by1vYmplY3RcIiwgXCJqb3NlXCIsIFwidXVpZC0xMzQ1XCIsIFwieGJveC13ZWJhcGlcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIHtcblx0XHR2YXIgYSA9IHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyA/IGZhY3RvcnkocmVxdWlyZShcImVsZWN0cm9uLXNlcnZlXCIpLCByZXF1aXJlKFwiZWxlY3Ryb24tc3RvcmVcIiksIHJlcXVpcmUoXCJkZWJ1Z1wiKSwgcmVxdWlyZShcImlwLWFkZHJlc3NcIiksIHJlcXVpcmUoXCJheGlvc1wiKSwgcmVxdWlyZShcImNvbXBhcmUtdmVyc2lvbnNcIiksIHJlcXVpcmUoXCJnaXRodWItdXJsLXRvLW9iamVjdFwiKSwgcmVxdWlyZShcImpvc2VcIiksIHJlcXVpcmUoXCJ1dWlkLTEzNDVcIiksIHJlcXVpcmUoXCJ4Ym94LXdlYmFwaVwiKSkgOiBmYWN0b3J5KHJvb3RbXCJlbGVjdHJvbi1zZXJ2ZVwiXSwgcm9vdFtcImVsZWN0cm9uLXN0b3JlXCJdLCByb290W1wiZGVidWdcIl0sIHJvb3RbXCJpcC1hZGRyZXNzXCJdLCByb290W1wiYXhpb3NcIl0sIHJvb3RbXCJjb21wYXJlLXZlcnNpb25zXCJdLCByb290W1wiZ2l0aHViLXVybC10by1vYmplY3RcIl0sIHJvb3RbXCJqb3NlXCJdLCByb290W1widXVpZC0xMzQ1XCJdLCByb290W1wieGJveC13ZWJhcGlcIl0pO1xuXHRcdGZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTtcblx0fVxufSkoZ2xvYmFsLCAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9lbGVjdHJvbl9zZXJ2ZV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2VsZWN0cm9uX3N0b3JlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfZGVidWdfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9pcF9hZGRyZXNzX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfYXhpb3NfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9jb21wYXJlX3ZlcnNpb25zX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfZ2l0aHViX3VybF90b19vYmplY3RfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9qb3NlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfdXVpZF8xMzQ1X18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfeGJveF93ZWJhcGlfXykgPT4ge1xucmV0dXJuICIsImltcG9ydCB7IHNlc3Npb24sIGRpYWxvZyB9IGZyb20gJ2VsZWN0cm9uJ1xuaW1wb3J0IHsgY3JlYXRlV2luZG93IH0gZnJvbSAnLi9oZWxwZXJzJ1xuaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4vYXBwbGljYXRpb24nXG5pbXBvcnQgeyBYYWwsIFRva2VuU3RvcmUgfSBmcm9tICcuL3hhbCdcbmltcG9ydCBBdXRoVG9rZW5TdG9yZSBmcm9tICcuL2hlbHBlcnMvdG9rZW5zdG9yZSdcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncyB9IGZyb20gJy4uL3JlbmRlcmVyL2NvbnRleHQvdXNlckNvbnRleHQuZGVmYXVsdHMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dGhlbnRpY2F0aW9uIHtcbiAgICBfYXBwbGljYXRpb246QXBwbGljYXRpb25cblxuICAgIF90b2tlblN0b3JlOkF1dGhUb2tlblN0b3JlXG4gICAgX3hhbDpYYWxcbiAgICBcbiAgICBfYXV0aFdpbmRvd1xuICAgIF9hdXRoQ2FsbGJhY2tcblxuICAgIF9pc0F1dGhlbnRpY2F0aW5nOmJvb2xlYW4gPSBmYWxzZVxuICAgIF9pc0F1dGhlbnRpY2F0ZWQ6Ym9vbGVhbiA9IGZhbHNlXG4gICAgX2FwcExldmVsOm51bWJlciA9IDBcblxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uOkFwcGxpY2F0aW9uKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuICAgICAgICB0aGlzLl90b2tlblN0b3JlID0gbmV3IEF1dGhUb2tlblN0b3JlKClcbiAgICAgICAgdGhpcy5fdG9rZW5TdG9yZS5sb2FkKClcbiAgICAgICAgdGhpcy5feGFsID0gbmV3IFhhbCh0aGlzLl90b2tlblN0b3JlKVxuICAgIH1cblxuICAgIGNoZWNrQXV0aGVudGljYXRpb24oKXtcbiAgICAgICAgdGhpcy5faXNBdXRoZW50aWNhdGluZyA9IHRydWVcbiAgICAgICAgdGhpcy5faXNBdXRoZW50aWNhdGVkID0gZmFsc2VcblxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW2NoZWNrQXV0aGVudGljYXRpb24oKV0gU3RhcnRpbmcgdG9rZW4gY2hlY2suLi4nKVxuICAgICAgICBpZih0aGlzLl90b2tlblN0b3JlLmhhc1ZhbGlkQXV0aFRva2VucygpKXtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbY2hlY2tBdXRoZW50aWNhdGlvbigpXSBUb2tlbnMgYXJlIHZhbGlkLicpXG4gICAgICAgICAgICB0aGlzLnN0YXJ0U2lsZW50RmxvdygpXG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmKHRoaXMuX3Rva2VuU3RvcmUuZ2V0VXNlclRva2VuKCkgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHVzZXIgdG9rZW4sIGxldHMgdHJ5IHRvIHJlZnJlc2ggaXQuXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tjaGVja0F1dGhlbnRpY2F0aW9uKCldIFRva2VucyBhcmUgZXhwaXJlZCBidXQgd2UgaGF2ZSBhIHVzZXIgdG9rZW4uIExldHMgdHJ5IHRvIHJlZnJlc2ggdGhlIHRva2Vucy4nKVxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRTaWxlbnRGbG93KClcblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbY2hlY2tBdXRoZW50aWNhdGlvbigpXSBObyB0b2tlbnMgYXJlIHByZXNlbnQuJylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXJ0U2lsZW50Rmxvdygpe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0U2lsZW50RmxvdygpXSBTdGFydGluZyBzaWxlbnQgZmxvdy4uLicpXG4gICAgICAgIHRoaXMuX2lzQXV0aGVudGljYXRpbmcgPSB0cnVlXG4gICAgICAgIHRoaXMuX3hhbC5yZWZyZXNoVG9rZW5zKHRoaXMuX3Rva2VuU3RvcmUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFNpbGVudEZsb3coKV0gVG9rZW5zIGhhdmUgYmVlbiByZWZyZXNoZWQnKVxuXG4gICAgICAgICAgICB0aGlzLmdldFN0cmVhbWluZ1Rva2VuKHRoaXMuX3Rva2VuU3RvcmUpLnRoZW4oKHN0cmVhbWluZ1Rva2VucykgPT4ge1xuICAgICAgICAgICAgICAgIGlmKHN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbiAhPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRTaWxlbnRGbG93KCldIFJldHJpZXZlZCBib3RoIHhIb21lIGFuZCB4Q2xvdWQgdG9rZW5zJylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwTGV2ZWwgPSAyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFNpbGVudEZsb3coKV0gUmV0cmlldmVkIHhIb21lIHRva2VuIG9ubHknKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBMZXZlbCA9IDFcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl94YWwuZ2V0V2ViVG9rZW4odGhpcy5fdG9rZW5TdG9yZSkudGhlbigod2ViVG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgX19maWxlbmFtZSsnW3N0YXJ0U2lsZW50RmxvdygpXSBXZWIgdG9rZW4gcmVjZWl2ZWQnKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uYXV0aGVudGljYXRpb25Db21wbGV0ZWQoc3RyZWFtaW5nVG9rZW5zLCB3ZWJUb2tlbilcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCBfX2ZpbGVuYW1lKydbc3RhcnRTaWxlbnRGbG93KCldIEZhaWxlZCB0byByZXRyaWV2ZSB3ZWIgdG9rZW5zOicsIGVycm9yKVxuICAgICAgICAgICAgICAgICAgICBkaWFsb2cuc2hvd01lc3NhZ2VCb3goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Vycm9yOiBGYWlsZWQgdG8gcmV0cmlldmUgd2ViIHRva2VuczonKyBKU09OLnN0cmluZ2lmeShlcnJvciksXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0U2lsZW50RmxvdygpXSBGYWlsZWQgdG8gcmV0cmlldmUgc3RyZWFtaW5nIHRva2VuczonLCBlcnIpXG4gICAgICAgICAgICAgICAgZGlhbG9nLnNob3dNZXNzYWdlQm94KHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Vycm9yOiBGYWlsZWQgdG8gcmV0cmlldmUgc3RyZWFtaW5nIHRva2VuczonKyBKU09OLnN0cmluZ2lmeShlcnIpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRTaWxlbnRGbG93KCldIEVycm9yIHJlZnJlc2hpbmcgdG9rZW5zOicsIGVycilcbiAgICAgICAgICAgIGRpYWxvZy5zaG93TWVzc2FnZUJveCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1tzdGFydFNpbGVudEZsb3coKV0gRXJyb3IgcmVmcmVzaGluZyB0b2tlbnM6JyArIEpTT04uc3RyaW5naWZ5KGVyciksXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB0aGlzLl90b2tlblN0b3JlLmNsZWFyKClcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzdGFydEF1dGhmbG93KCl7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRBdXRoZmxvdygpXSBTdGFydGluZyBhdXRoZW50aWNhdGlvbiBmbG93JylcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX3hhbC5nZXRSZWRpcmVjdFVyaSgpLnRoZW4oKHJlZGlyZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wZW5BdXRoV2luZG93KHJlZGlyZWN0LnNpc3VBdXRoLk1zYU9hdXRoUmVkaXJlY3QpXG5cbiAgICAgICAgICAgIHRoaXMuX2F1dGhDYWxsYmFjayA9IChyZWRpcmVjdFVyaSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzQXV0aGVudGljYXRpbmcgPSB0cnVlXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydEF1dGhGbG93KCldIEdvdCByZWRpcmVjdCBVUkk6JywgcmVkaXJlY3RVcmkpXG4gICAgICAgICAgICAgICAgdGhpcy5feGFsLmF1dGhlbnRpY2F0ZVVzZXIodGhpcy5fdG9rZW5TdG9yZSwgcmVkaXJlY3QsIHJlZGlyZWN0VXJpKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydEF1dGhGbG93KCldIEF1dGhlbnRpY2F0ZWQgdXNlcjonLCByZXN1bHQpXG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFNpbGVudEZsb3coKVxuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0QXV0aEZsb3coKV0gRXJyb3IgYXV0aGVudGljYXRpbmcgdXNlcjonLCBlcnIpXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZy5zaG93RXJyb3JCb3goJ0Vycm9yJywgJ0Vycm9yIGF1dGhlbnRpY2F0aW5nIHVzZXIuIEVycm9yIGRldGFpbHM6ICcrSlNPTi5zdHJpbmdpZnkoZXJyKSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0QXV0aEZsb3coKV0gRXJyb3IgZ2V0dGluZyByZWRpcmVjdCBVUkk6JywgZXJyKVxuICAgICAgICAgICAgZGlhbG9nLnNob3dFcnJvckJveCgnRXJyb3InLCAnRXJyb3IgZ2V0dGluZyByZWRpcmVjdCBVUkkuIEVycm9yIGRldGFpbHM6ICcrSlNPTi5zdHJpbmdpZnkoZXJyKSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzdGFydFdlYnZpZXdIb29rcygpe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0V2Vidmlld0hvb2tzKCldIFN0YXJ0aW5nIHdlYnZpZXcgaG9va3MnKVxuXG4gICAgICAgIHNlc3Npb24uZGVmYXVsdFNlc3Npb24ud2ViUmVxdWVzdC5vbkhlYWRlcnNSZWNlaXZlZCh7XG4gICAgICAgICAgICB1cmxzOiBbXG4gICAgICAgICAgICAgICAgJ2h0dHBzOi8vbG9naW4ubGl2ZS5jb20vb2F1dGgyMF9hdXRob3JpemUuc3JmPyonLFxuICAgICAgICAgICAgICAgICdodHRwczovL2xvZ2luLmxpdmUuY29tL3Bwc2VjdXJlL3Bvc3Quc3JmPyonLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSwgKGRldGFpbHMsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICAgICAgICAgIGlmKGRldGFpbHMucmVzcG9uc2VIZWFkZXJzLkxvY2F0aW9uICE9PSB1bmRlZmluZWQgJiYgZGV0YWlscy5yZXNwb25zZUhlYWRlcnMuTG9jYXRpb25bMF0uaW5jbHVkZXModGhpcy5feGFsLl9hcHAuUmVkaXJlY3RVcmkpKXtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0V2Vidmlld0hvb2tzKCldIEdvdCByZWRpcmVjdCBVUkkgZnJvbSBPQVVUSDonLCBkZXRhaWxzLnJlc3BvbnNlSGVhZGVycy5Mb2NhdGlvblswXSlcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoV2luZG93LmNsb3NlKClcblxuICAgICAgICAgICAgICAgIGlmKHRoaXMuX2F1dGhDYWxsYmFjayAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXV0aENhbGxiYWNrKGRldGFpbHMucmVzcG9uc2VIZWFkZXJzLkxvY2F0aW9uWzBdKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRXZWJ2aWV3SG9va3MoKV0gQXV0aGVudGljYXRpb24gQ2FsbGJhY2sgaXMgbm90IGRlZmluZWQ6JywgdGhpcy5fYXV0aENhbGxiYWNrKVxuICAgICAgICAgICAgICAgICAgICBkaWFsb2cuc2hvd0Vycm9yQm94KCdFcnJvcicsICdBdXRoZW50aWNhdGlvbiBDYWxsYmFjayBpcyBub3QgZGVmaW5lZC4gRXJyb3IgZGV0YWlsczogJytKU09OLnN0cmluZ2lmeSh0aGlzLl9hdXRoQ2FsbGJhY2spKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiB0cnVlIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRldGFpbHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgb3BlbkF1dGhXaW5kb3codXJsKXtcbiAgICAgICAgY29uc3QgYXV0aFdpbmRvdyA9IGNyZWF0ZVdpbmRvdygnYXV0aCcsIHtcbiAgICAgICAgICAgIHdpZHRoOiA1MDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDYwMCxcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24nLFxuICAgICAgICB9KVxuICAgICAgICBcbiAgICAgICAgYXV0aFdpbmRvdy5sb2FkVVJMKHVybClcbiAgICAgICAgdGhpcy5fYXV0aFdpbmRvdyA9IGF1dGhXaW5kb3dcblxuICAgICAgICB0aGlzLl9hdXRoV2luZG93Lm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbb3BlbkF1dGhXaW5kb3coKV0gQ2xvc2VkIGF1dGggd2luZG93JylcbiAgICAgICAgICAgIC8vIEBUT0RPOiBXaGF0IHRvIGRvP1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFzeW5jIGdldFN0cmVhbWluZ1Rva2VuKHRva2VuU3RvcmU6VG9rZW5TdG9yZSl7XG4gICAgICAgIGNvbnNvbGUubG9nKCdnZXRTdHJlYW1pbmdUb2tlbicpXG4gICAgICAgIGNvbnN0IHNpc3VUb2tlbiA9IHRva2VuU3RvcmUuZ2V0U2lzdVRva2VuKClcbiAgICAgICAgaWYoc2lzdVRva2VuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Npc3UgdG9rZW4gaXMgbWlzc2luZy4gUGxlYXNlIGF1dGhlbnRpY2F0ZSBmaXJzdCcpXG5cbiAgICAgICAgY29uc3QgeHN0c1Rva2VuID0gYXdhaXQgdGhpcy5feGFsLmRvWHN0c0F1dGhvcml6YXRpb24oc2lzdVRva2VuLCAnaHR0cDovL2dzc3YueGJveGxpdmUuY29tLycpXG5cbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuX3hhbC5feGhvbWVUb2tlbjonLCB0aGlzLl94YWwuX3hob21lVG9rZW4pXG4gICAgICAgIGlmKHRoaXMuX3hhbC5feGhvbWVUb2tlbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3hhbC5feGhvbWVUb2tlbi5nZXRTZWNvbmRzVmFsaWQoKSA8PSA2MCl7XG4gICAgICAgICAgICB0aGlzLl94YWwuX3hob21lVG9rZW4gPSBhd2FpdCB0aGlzLl94YWwuZ2V0U3RyZWFtVG9rZW4oeHN0c1Rva2VuLCAneGhvbWUnKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuX3hhbC5feGNsb3VkVG9rZW46JywgdGhpcy5feGFsLl94Y2xvdWRUb2tlbilcbiAgICAgICAgY29uc3Qgc2V0dGluZ3M6IGFueSA9IHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5nZXQoJ3NldHRpbmdzJywgZGVmYXVsdFNldHRpbmdzKVxuICAgICAgICBpZighdGhpcy5feGFsLl94Y2xvdWRUb2tlbiB8fCB0aGlzLl94YWwuX3hjbG91ZFRva2VuLmdldFNlY29uZHNWYWxpZCgpIDw9IDYwKXtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5feGFsLl94Y2xvdWRUb2tlbiA9IGF3YWl0IHRoaXMuX3hhbC5nZXRTdHJlYW1Ub2tlbih4c3RzVG9rZW4sICd4Z3B1d2ViJywgc2V0dGluZ3MuZm9yY2VfcmVnaW9uX2lwKVxuICAgICAgICAgICAgfSBjYXRjaChlcnJvcil7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5feGFsLl94Y2xvdWRUb2tlbiA9IGF3YWl0IHRoaXMuX3hhbC5nZXRTdHJlYW1Ub2tlbih4c3RzVG9rZW4sICd4Z3B1d2ViZjJwJywgc2V0dGluZ3MuZm9yY2VfcmVnaW9uX2lwKVxuICAgICAgICAgICAgICAgIH0gY2F0Y2goZXJyb3Ipe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl94YWwuX3hjbG91ZFRva2VuID0gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHhIb21lVG9rZW46IHRoaXMuX3hhbC5feGhvbWVUb2tlbiwgeENsb3VkVG9rZW46IHRoaXMuX3hhbC5feGNsb3VkVG9rZW4gfVxuICAgIH1cblxuICAgIFxufVxuIiwiaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4uL2FwcGxpY2F0aW9uJ1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuXG5jbGFzcyBIdHRwIHtcbiAgZ2V0KGhvc3Q6IHN0cmluZywgcGF0aDogc3RyaW5nLCBoZWFkZXJzOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaG9zdEhlYWRlcnMgPSB7XG4gICAgICAgIC8vICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICB9O1xuXG4gICAgICBheGlvc1xuICAgICAgICAuZ2V0KGBodHRwczovLyR7aG9zdH0ke3BhdGh9YCwge1xuICAgICAgICAgIGhlYWRlcnM6IGhvc3RIZWFkZXJzLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwIHx8IHJlcy5zdGF0dXMgPT09IDIwNCkge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGF0dXNjb2RlOiByZXMuY29kZSxcbiAgICAgICAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgICAgICAgIGJvZHk6IHJlcy5kYXRhLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgZmV0Y2hpbmcgJyArIGhvc3QgKyBwYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHBvc3QoaG9zdDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGhlYWRlcnM6IGFueSwgZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhvc3RIZWFkZXJzID0ge1xuICAgICAgICAvLyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGF4aW9zXG4gICAgICAgIC5wb3N0KGBodHRwczovLyR7aG9zdH0ke3BhdGh9YCwgZGF0YSwge1xuICAgICAgICAgIGhlYWRlcnM6IGhvc3RIZWFkZXJzLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwIHx8IHJlcy5zdGF0dXMgPT09IDIwMikge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGF0dXNjb2RlOiByZXMuY29kZSxcbiAgICAgICAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgICAgICAgIGJvZHk6IHJlcy5kYXRhLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgZmV0Y2hpbmcgJyArIGhvc3QgKyBwYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2hpdmVtZW50TWFuYWdlciB7XG4gIF9hcHBsaWNhdGlvbjogQXBwbGljYXRpb25cblxuICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbil7XG4gICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuICB9XG5cbiAgZ2V0SGlzdG9yeUFjaGl2ZW1lbnRzKCkge1xuICAgIGNvbnN0IGh0dHAgPSBuZXcgSHR0cCgpO1xuICAgIGNvbnN0IHNldHRpbmdzOiBhbnkgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KCdzZXR0aW5ncycsIHt9KVxuICAgIGNvbnN0IHByZWZlcnJlZF9nYW1lX2xhbmd1YWdlID0gc2V0dGluZ3MucHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2UgfHwgJ2VuLVVTJ1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHVocyA9IHRoaXMuX2FwcGxpY2F0aW9uLndlYlRva2VuLmRhdGEuRGlzcGxheUNsYWltcy54dWlbMF0udWhzO1xuICAgICAgY29uc3QgeGlkID0gdGhpcy5fYXBwbGljYXRpb24ud2ViVG9rZW4uZGF0YS5EaXNwbGF5Q2xhaW1zLnh1aVswXS54aWQ7XG5cbiAgICAgIGh0dHBcbiAgICAgICAgLmdldChcbiAgICAgICAgICAnYWNoaWV2ZW1lbnRzLnhib3hsaXZlLmNvbScsXG4gICAgICAgICAgYC91c2Vycy94dWlkKCR7eGlkfSkvaGlzdG9yeS90aXRsZXM/b3JkZXJCeT11bmxvY2tUaW1lYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiAnWEJMMy4wIHg9JyArIHVocyArICc7JyArIHRoaXMuX2FwcGxpY2F0aW9uLndlYlRva2VuLmRhdGEuVG9rZW4sXG4gICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogcHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2UsXG4gICAgICAgICAgICAneC14YmwtY29udHJhY3QtdmVyc2lvbic6IDIsXG4gICAgICAgICAgICAneC14YmwtY2xpZW50LW5hbWUnOiAnWGJveEFwcCcsXG4gICAgICAgICAgICAneC14YmwtY2xpZW50LXR5cGUnOiAnVVdBJyxcbiAgICAgICAgICAgICd4LXhibC1jbGllbnQtdmVyc2lvbic6ICczOS4zOS4yMjAwMS4wJyxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIGxvZy5pbmZvKCdbZ2V0SGlzdG9yeUFjaGl2ZW1lbnRzXSBnZXRIaXN0b3J5QWNoaXZlbWVudHM6JywgSlNPTi5zdHJpbmdpZnkocmVzKSk7XG4gICAgICAgICAgaWYgKHJlcy50aXRsZXMpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzLnRpdGxlcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdbZ2V0SGlzdG9yeUFjaGl2ZW1lbnRzXSBlcnJvcjonLCBlKTtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0QWNoaXZlbWVudERldGFpbCh0aXRsZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBodHRwID0gbmV3IEh0dHAoKTtcbiAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldCgnc2V0dGluZ3MnLCB7fSlcbiAgICBjb25zdCBwcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSA9IHNldHRpbmdzLnByZWZlcnJlZF9nYW1lX2xhbmd1YWdlIHx8ICdlbi1VUydcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB1aHMgPSB0aGlzLl9hcHBsaWNhdGlvbi53ZWJUb2tlbi5kYXRhLkRpc3BsYXlDbGFpbXMueHVpWzBdLnVocztcbiAgICAgIGNvbnN0IHhpZCA9IHRoaXMuX2FwcGxpY2F0aW9uLndlYlRva2VuLmRhdGEuRGlzcGxheUNsYWltcy54dWlbMF0ueGlkO1xuXG4gICAgICBodHRwXG4gICAgICAgIC5nZXQoXG4gICAgICAgICAgJ2FjaGlldmVtZW50cy54Ym94bGl2ZS5jb20nLFxuICAgICAgICAgIGAvdXNlcnMveHVpZCgke3hpZH0pL2FjaGlldmVtZW50cz90aXRsZUlkPSR7dGl0bGVJZH0mbWF4SXRlbXM9MTAwMGAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogJ1hCTDMuMCB4PScgKyB1aHMgKyAnOycgKyB0aGlzLl9hcHBsaWNhdGlvbi53ZWJUb2tlbi5kYXRhLlRva2VuLFxuICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IHByZWZlcnJlZF9nYW1lX2xhbmd1YWdlLFxuICAgICAgICAgICAgJ3gteGJsLWNvbnRyYWN0LXZlcnNpb24nOiAyLFxuICAgICAgICAgICAgJ3gteGJsLWNsaWVudC1uYW1lJzogJ1hib3hBcHAnLFxuICAgICAgICAgICAgJ3gteGJsLWNsaWVudC10eXBlJzogJ1VXQScsXG4gICAgICAgICAgICAneC14YmwtY2xpZW50LXZlcnNpb24nOiAnMzkuMzkuMjIwMDEuMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzLmFjaGlldmVtZW50cykge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXMuYWNoaWV2ZW1lbnRzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1tnZXRBY2hpdmVtZW50RGV0YWlsXSBlcnJvcjonLCBlKTtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiaW1wb3J0IHtcbiAgICBzY3JlZW4sXG4gICAgQnJvd3NlcldpbmRvdyxcbiAgICBCcm93c2VyV2luZG93Q29uc3RydWN0b3JPcHRpb25zLFxufSBmcm9tICdlbGVjdHJvbidcbmltcG9ydCBTdG9yZSBmcm9tICdlbGVjdHJvbi1zdG9yZSdcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCdcblxuZXhwb3J0IGRlZmF1bHQgKHdpbmRvd05hbWU6IHN0cmluZywgb3B0aW9uczogQnJvd3NlcldpbmRvd0NvbnN0cnVjdG9yT3B0aW9ucyk6IEJyb3dzZXJXaW5kb3cgPT4ge1xuICAgIGNvbnN0IGtleSA9ICd3aW5kb3ctc3RhdGUnXG4gICAgY29uc3QgbmFtZSA9IGB3aW5kb3ctc3RhdGUtdjItJHt3aW5kb3dOYW1lfWBcbiAgICBjb25zdCBzdG9yZSA9IG5ldyBTdG9yZSh7IG5hbWUgfSlcbiAgICBjb25zdCBkZWZhdWx0U2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IG9wdGlvbnMud2lkdGgsXG4gICAgICAgIGhlaWdodDogb3B0aW9ucy5oZWlnaHQsXG4gICAgfVxuICAgIGxldCBzdGF0ZSA9IHt9XG5cbiAgICBjb25zdCByZXN0b3JlID0gKCkgPT4gc3RvcmUuZ2V0KGtleSwgZGVmYXVsdFNpemUpXG5cbiAgICBjb25zdCBnZXRDdXJyZW50UG9zaXRpb24gPSAoKSA9PiB7XG4gICAgICAgIHdpbi5yZW1vdmVNZW51KClcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB3aW4uZ2V0UG9zaXRpb24oKVxuICAgICAgICBjb25zdCBzaXplID0gd2luLmdldFNpemUoKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogcG9zaXRpb25bMF0sXG4gICAgICAgICAgICB5OiBwb3NpdGlvblsxXSxcbiAgICAgICAgICAgIHdpZHRoOiBzaXplWzBdLFxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplWzFdLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2luZG93V2l0aGluQm91bmRzID0gKHdpbmRvd1N0YXRlLCBib3VuZHMpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHdpbmRvd1N0YXRlLnggPj0gYm91bmRzLnggJiZcbiAgICAgIHdpbmRvd1N0YXRlLnkgPj0gYm91bmRzLnkgJiZcbiAgICAgIHdpbmRvd1N0YXRlLnggKyB3aW5kb3dTdGF0ZS53aWR0aCA8PSBib3VuZHMueCArIGJvdW5kcy53aWR0aCAmJlxuICAgICAgd2luZG93U3RhdGUueSArIHdpbmRvd1N0YXRlLmhlaWdodCA8PSBib3VuZHMueSArIGJvdW5kcy5oZWlnaHRcbiAgICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlc2V0VG9EZWZhdWx0cyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmRzID0gc2NyZWVuLmdldFByaW1hcnlEaXNwbGF5KCkuYm91bmRzXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2l6ZSwge1xuICAgICAgICAgICAgeDogKGJvdW5kcy53aWR0aCAtIGRlZmF1bHRTaXplLndpZHRoKSAvIDIsXG4gICAgICAgICAgICB5OiAoYm91bmRzLmhlaWdodCAtIGRlZmF1bHRTaXplLmhlaWdodCkgLyAyLFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IGVuc3VyZVZpc2libGVPblNvbWVEaXNwbGF5ID0gd2luZG93U3RhdGUgPT4ge1xuICAgICAgICBjb25zdCB2aXNpYmxlID0gc2NyZWVuLmdldEFsbERpc3BsYXlzKCkuc29tZShkaXNwbGF5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3dXaXRoaW5Cb3VuZHMod2luZG93U3RhdGUsIGRpc3BsYXkuYm91bmRzKVxuICAgICAgICB9KVxuICAgICAgICBpZiAoIXZpc2libGUpIHtcbiAgICAgICAgICAgIC8vIFdpbmRvdyBpcyBwYXJ0aWFsbHkgb3IgZnVsbHkgbm90IHZpc2libGUgbm93LlxuICAgICAgICAgICAgLy8gUmVzZXQgaXQgdG8gc2FmZSBkZWZhdWx0cy5cbiAgICAgICAgICAgIHJldHVybiByZXNldFRvRGVmYXVsdHMoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3aW5kb3dTdGF0ZVxuICAgIH1cblxuICAgIGNvbnN0IHNhdmVTdGF0ZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF3aW4uaXNNaW5pbWl6ZWQoKSAmJiAhd2luLmlzTWF4aW1pemVkKCkpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGUsIGdldEN1cnJlbnRQb3NpdGlvbigpKVxuICAgICAgICB9XG4gICAgICAgIHN0b3JlLnNldChrZXksIHN0YXRlKVxuICAgIH1cblxuICAgIHN0YXRlID0gZW5zdXJlVmlzaWJsZU9uU29tZURpc3BsYXkocmVzdG9yZSgpKVxuXG4gICAgY29uc3QgYnJvd3Nlck9wdGlvbnM6IEJyb3dzZXJXaW5kb3dDb25zdHJ1Y3Rvck9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgICAgICAgLy8gbm9kZUludGVncmF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgLy8gY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBub2RlSW50ZWdyYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgY29udGV4dElzb2xhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuYWJsZUJsaW5rRmVhdHVyZXM6ICcnLFxuICAgICAgICAgICAgc2FuZGJveDogZmFsc2UsXG4gICAgICAgICAgICBwcmVsb2FkOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAncHJlbG9hZC5qcycpLFxuICAgICAgICAgICAgLi4ub3B0aW9ucy53ZWJQcmVmZXJlbmNlcyxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0b0hpZGVNZW51QmFyOiB0cnVlLFxuICAgIH1cbiAgICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyhicm93c2VyT3B0aW9ucylcblxuICAgIHdpbi5vbignY2xvc2UnLCBzYXZlU3RhdGUpXG5cbiAgICByZXR1cm4gd2luXG59IiwiaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xuaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4uL2FwcGxpY2F0aW9uJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIdHRwIHtcblxuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgY29uc3RydWN0b3IoYXBwbGljYXRpb246QXBwbGljYXRpb24pIHtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuICAgIH1cblxuICAgIGdldChob3N0OnN0cmluZywgdXJsOiBzdHJpbmcsIG1ldGhvZCA9ICdHRVQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gJydcblxuICAgICAgICAgICAgY29uc3QgcmVxID0gaHR0cHMucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgICAgICAgICBwYXRoOiB1cmwsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCAocmVzcG9uc2U6YW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uub24oJ2RhdGEnLCAoZGF0YTphbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGFcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8PSAyOTkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdIVFRQJywgJ2dldCgnK3VybCsnLCAnK21ldGhvZCsnKSByZXNvbHZlOicsIHJlc3BvbnNlLnN0YXR1c0NvZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dXJuRGF0YSA9IHJlc3BvbnNlRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5EYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZURhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGVycm9yKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIGlzIG5vdCBKU09OLi5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gMjA0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJldHJ5Li5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXQodXJsLCBtZXRob2QpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgNzUwKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJldHVybkRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0hUVFAnLCAnZ2V0KCcrdXJsKycpIHJlamVjdDonLCByZXNwb25zZS5zdGF0dXNDb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXEub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJlcS5lbmQoKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHBvc3QoaG9zdDogc3RyaW5nLCB1cmw6IHN0cmluZywgcG9zdERhdGEgPSB7fSwgaGVhZGVycyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gJydcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZEhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sIGhlYWRlcnMpXG5cbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIGhvc3Q6IGhvc3QsXG4gICAgICAgICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IG1lcmdlZEhlYWRlcnMsXG4gICAgICAgICAgICB9LCAocmVzcG9uc2U6YW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgICByZXNwb25zZS5vbignZGF0YScsIChkYXRhOmFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgKz0gZGF0YVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXNwb25zZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXNDb2RlID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXNDb2RlIDw9IDI5OSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0hUVFAnLCAncG9zdCgnK3VybCsnKSByZXNvbHZlOicsIHJlc3BvbnNlLnN0YXR1c0NvZGUsIHJlc3BvbnNlRGF0YS5zdWJzdHJpbmcoMCwgMTAwKSlcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldHVybkRhdGEgPSByZXNwb25zZURhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2VEYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlcnJvcil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBpcyBub3QgSlNPTi4uXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmV0dXJuRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSFRUUCcsICdwb3N0KCcrdXJsKycpIHJlamVjdDonLCByZXNwb25zZS5zdGF0dXNDb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXEub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmVxLndyaXRlKEpTT04uc3RyaW5naWZ5KHBvc3REYXRhKSlcblxuICAgICAgICAgICAgcmVxLmVuZCgpXG4gICAgICAgIH0pXG4gICAgfVxuXG59IiwiaW1wb3J0IGNyZWF0ZVdpbmRvdyBmcm9tICcuL2NyZWF0ZS13aW5kb3cnXG5pbXBvcnQgeENsb3VkQXBpIGZyb20gJy4veGNsb3VkYXBpJ1xuaW1wb3J0IHhib3hXb3JrZXIgZnJvbSAnLi94Ym94V29ya2VyJ1xuaW1wb3J0IHsgc2V0VXBkYXRlTm90aWZpY2F0aW9uIGFzIHVwZGF0ZXIgfSBmcm9tICcuL3VwZGF0ZXInXG5cbmV4cG9ydCB7XG4gICAgY3JlYXRlV2luZG93LFxuICAgIHhDbG91ZEFwaSxcbiAgICB4Ym94V29ya2VyLFxuICAgIHVwZGF0ZXIsXG59XG4iLCJpbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5pbXBvcnQgeENsb3VkQXBpLCB7IHBsYXlSZXN1bHQgfSBmcm9tICcuL3hjbG91ZGFwaSdcblxuaW50ZXJmYWNlIHN0cmVhbVNlc3Npb24ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdGFyZ2V0OiBzdHJpbmc7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHR5cGU6IHN0cmluZ3wnaG9tZSd8J2Nsb3VkJztcbiAgICBzdGF0ZT86IHN0cmluZztcbiAgICB3YWl0aW5nVGltZXM/OiBhbnk7XG4gICAgcGxheWVyU3RhdGU6IHN0cmluZ3wncGVuZGluZyd8J3N0YXJ0ZWQnfCdxdWV1ZWQnfCdmYWlsZWQnO1xuICAgIGVycm9yRGV0YWlscz86IHtcbiAgICAgICAgY29kZTtcbiAgICAgICAgbWVzc2FnZTtcbiAgICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1NYW5hZ2VyIHtcblxuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgX3Nlc3Npb25zID0ge31cbiAgICBcbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbil7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gYXBwbGljYXRpb25cbiAgICB9XG5cbiAgICBnZXRBcGkodHlwZSk6IHhDbG91ZEFwaXtcbiAgICAgICAgY29uc3Qgc3RyZWFtaW5nVG9rZW5zID0gdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zO1xuXG4gICAgICAgIGlmKHR5cGUgPT09ICdob21lJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB4Q2xvdWRBcGkoXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24sXG4gICAgICAgICAgICAgICAgc3RyZWFtaW5nVG9rZW5zLnhIb21lVG9rZW4uZ2V0RGVmYXVsdFJlZ2lvbigpLmJhc2VVcmkuc3Vic3RyaW5nKDgpLFxuICAgICAgICAgICAgICAgIHN0cmVhbWluZ1Rva2Vucy54SG9tZVRva2VuLmRhdGEuZ3NUb2tlbixcbiAgICAgICAgICAgICAgICBcImhvbWVcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgeENsb3VkQXBpKFxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLFxuICAgICAgICAgICAgICAgIHN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5nZXREZWZhdWx0UmVnaW9uKCkuYmFzZVVyaS5zdWJzdHJpbmcoOCksXG4gICAgICAgICAgICAgICAgc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmRhdGEuZ3NUb2tlbixcbiAgICAgICAgICAgICAgICBcImNsb3VkXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTZXNzaW9uKHNlc3Npb25JZDpzdHJpbmcpOnN0cmVhbVNlc3Npb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbnNbc2Vzc2lvbklkXVxuICAgIH1cblxuICAgIHN0YXJ0U3RyZWFtKHR5cGU6c3RyaW5nfCdob21lJ3wnY2xvdWQnLCB0YXJnZXQpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRBcGkodHlwZSkuc3RhcnRTdHJlYW0odGFyZ2V0KS50aGVuKChwbGF5UmVzdWx0OnBsYXlSZXN1bHQpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuX2FwcGxpY2F0aW9uLl94Q2xvdWRBcGkuc3RhcnRTdHJlYW0odHlwZSwgdGFyZ2V0KS50aGVuKChwbGF5UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N0cmVhbW1hbmFnZXIgLSBzdGFydFN0cmVhbTonLCBwbGF5UmVzdWx0KVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gcGxheVJlc3VsdC5zZXNzaW9uUGF0aC5zcGxpdCgnLycpWzNdXG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1TZXNzaW9uOnN0cmVhbVNlc3Npb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBwbGF5UmVzdWx0LnNlc3Npb25QYXRoLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBwbGF5ZXJTdGF0ZTogJ3BlbmRpbmcnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9zZXNzaW9uc1tzZXNzaW9uSWRdID0gc3RyZWFtU2Vzc2lvblxuICAgICAgICAgICAgICAgIHRoaXMubW9uaXRvclNlc3Npb24oc2Vzc2lvbklkKVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShzZXNzaW9uSWQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHN0b3BTdHJlYW0oc2Vzc2lvbklkKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKVxuICAgICAgICAgICAgaWYoc2Vzc2lvbiA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICByZWplY3QoJ1Nlc3Npb24gbm90IGZvdW5kOiAnK3Nlc3Npb25JZClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5nZXRBcGkoc2Vzc2lvbi50eXBlKS5zdG9wU3RyZWFtKHNlc3Npb25JZCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0N1cnJlbnQgc2Vzc2lvbnM6JywgdGhpcy5fc2Vzc2lvbnMpXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Nlc3Npb25zW3Nlc3Npb25JZF1cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbmV3IHNlc3Npb25zOicsIHRoaXMuX3Nlc3Npb25zKVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHNlbmRTZHAoc2Vzc2lvbklkOnN0cmluZywgc2RwOmFueSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgICAgICAgIGlmKHNlc3Npb24gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdTZXNzaW9uIG5vdCBmb3VuZDogJytzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHNlc3Npb24udHlwZSkuc2VuZFNkcChzZXNzaW9uSWQsIHNkcCkudGhlbigocmVzdWx0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2VuZENoYXRTZHAoc2Vzc2lvbklkOnN0cmluZywgc2RwOmFueSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgICAgICAgIGlmKHNlc3Npb24gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdTZXNzaW9uIG5vdCBmb3VuZDogJytzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHNlc3Npb24udHlwZSkuc2VuZENoYXRTZHAoc2Vzc2lvbklkLCBzZHApLnRoZW4oKHJlc3VsdCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHNlbmRJY2Uoc2Vzc2lvbklkOnN0cmluZywgaWNlOmFueSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgICAgICAgIGlmKHNlc3Npb24gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdTZXNzaW9uIG5vdCBmb3VuZDogJytzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHNlc3Npb24udHlwZSkuc2VuZEljZShzZXNzaW9uSWQsIGljZSkudGhlbigocmVzdWx0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2VuZEtlZXBhbGl2ZShzZXNzaW9uSWQ6c3RyaW5nKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKVxuICAgICAgICAgICAgaWYoc2Vzc2lvbiA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICByZWplY3QoJ1Nlc3Npb24gbm90IGZvdW5kOiAnK3Nlc3Npb25JZClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5nZXRBcGkoc2Vzc2lvbi50eXBlKS5zZW5kS2VlcGFsaXZlKHNlc3Npb25JZCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIG1vbml0b3JTZXNzaW9uKHNlc3Npb25JZCl7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdTdHJlYW1NYW5hZ2VyJywgJ21vbml0b3JTZXNzaW9uKCcrc2Vzc2lvbklkKycpIGNoZWNraW5nIHN0YXRlJylcblxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgICAgICAgICBpZihzZXNzaW9uID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnU3RyZWFtTWFuYWdlcicsICdtb25pdG9yU2Vzc2lvbignK3Nlc3Npb25JZCsnKSBzZXNzaW9uIG5vdCBmb3VuZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdldEFwaSh0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS50eXBlKS5nZXRTdHJlYW1TdGF0ZShzZXNzaW9uSWQpLnRoZW4oKHJlc3VsdDphbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3RyZWFtbWFuYWdlciAtIHN0YXRlOicsIHJlc3VsdClcblxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnN0YXRlID0gcmVzdWx0LnN0YXRlXG5cbiAgICAgICAgICAgICAgICBpZihyZXN1bHQuc3RhdGUgPT09ICdQcm92aXNpb25lZCcpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS5wbGF5ZXJTdGF0ZSA9ICdzdGFydGVkJ1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJlc3VsdC5zdGF0ZSA9PT0gJ1Byb3Zpc2lvbmluZycpe1xuICAgICAgICAgICAgICAgICAgICAvLyBMZXRzIGxvb3AgYWdhaW5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb25pdG9yU2Vzc2lvbihzZXNzaW9uSWQpXG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYocmVzdWx0LnN0YXRlID09PSAnUmVhZHlUb0Nvbm5lY3QnKXtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gTVNBTCBBdXRoXG4gICAgICAgICAgICAgICAgICAgIC8vIEBUT0RPOiBSZWZyZXNoIHRva2VuIGlmIGV4cGlyZWQ/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5feGFsLmdldE1zYWxUb2tlbih0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uX3Rva2VuU3RvcmUpLnRoZW4oKG1zYWxUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBcGkodGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkudHlwZSkuc2VuZE1TQUxBdXRoKHNlc3Npb25JZCwgbXNhbFRva2VuLmRhdGEubHB0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbml0b3JTZXNzaW9uKHNlc3Npb25JZClcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ01TQUwgQVVUSCBFcnJvcjonLCBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnTVNBTCBBVVRIIEVycm9yOicrIGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnTVNBTCBBVVRIIEVycm9yOicsIGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ01TQUwgQVVUSCBFcnJvcjonKyBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZihyZXN1bHQuc3RhdGUgPT09ICdXYWl0aW5nRm9yUmVzb3VyY2VzJyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvIFF1ZXVlIGxvZ2ljXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLndhaXRpbmdUaW1lcyA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnR5cGUpLmdldFdhaXRpbmdUaW1lcyh0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS50YXJnZXQpLnRoZW4oKHdhaXRpbmdUaW1lcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLndhaXRpbmdUaW1lcyA9IHdhaXRpbmdUaW1lc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnBsYXllclN0YXRlID0gJ3F1ZXVlZCdcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb25pdG9yU2Vzc2lvbihzZXNzaW9uSWQpXG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYocmVzdWx0LnN0YXRlID09PSAnRmFpbGVkJyl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLmVycm9yRGV0YWlscyA9IHJlc3VsdC5lcnJvckRldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkucGxheWVyU3RhdGUgPSAnZmFpbGVkJ1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdVbmtub3duIHN0YXRlOicsIHJlc3VsdClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdHJlYW1tYW5hZ2VyIC0gZXJyb3IgY2hlY2tpbmcgc3RhdGU6Jywgc2Vzc2lvbklkLCBlcnJvcilcblxuICAgICAgICAgICAgICAgIGlmKGVycm9yLnN0YXR1cyA9PT0gNDA0KXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdTdHJlYW1NYW5hZ2VyJywgJ1Nlc3Npb24gbm90IGZvdW5kIG9uIHNlcnZlci4gUmVtb3Zpbmcgc2Vzc2lvbi4uLicpXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zZXNzaW9uc1tzZXNzaW9uSWRdXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb25pdG9yU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSwgMTAwMClcbiAgICB9XG5cbiAgICBnZXRBY3RpdmVTZXNzaW9ucygpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRBcGkoJ2Nsb3VkJykuZ2V0QWN0aXZlU2Vzc2lvbnMoKS50aGVuKChyZXN1bHQpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBY3RpdmUgc2Vzc2lvbnM6JywgcmVzdWx0KVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG59IiwiaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4uL2FwcGxpY2F0aW9uJ1xuaW1wb3J0IEhUVFAgZnJvbSAnLi9odHRwJ1xuaW1wb3J0IFN0b3JlIGZyb20gJ2VsZWN0cm9uLXN0b3JlJ1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW50ZXJmYWNlIHRpdGxlSW5mb0FyZ3Mge1xuICAgIFByb2R1Y3RUaXRsZTogc3RyaW5nO1xuICAgIFB1Ymxpc2hlck5hbWU6IHN0cmluZztcbiAgICBYQ2xvdWRUaXRsZUlkOiBzdHJpbmc7XG4gICAgSW1hZ2VfVGlsZTogYW55O1xuICAgIEltYWdlX1Bvc3RlcjogYW55O1xuICAgIFN0cmVhbWFiaWxpdHk6IGFueTtcbiAgICBDYXRlZ29yaWVzOiBhbnk7XG4gICAgTG9jYWxpemVkQ2F0ZWdvcmllczogYW55O1xuICAgIFhDbG91ZE9mZmVyaW5nczogYW55O1xuICAgIFhib3hUaXRsZUlkOiBzdHJpbmc7XG4gICAgQ2hpbGRYYm94VGl0bGVJZHM6IGFueTtcbiAgICBTdG9yZUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlTWFuYWdlciB7XG5cbiAgICBfYXBwbGljYXRpb246QXBwbGljYXRpb25cbiAgICBfc3RvcmUgPSBuZXcgU3RvcmUoKVxuICAgIF9odHRwOkhUVFBcblxuICAgIF94Q2xvdWRUaXRsZXMgPSB7fVxuICAgIF9wcm9kdWN0SWRRdWV1ZSA9IFtdXG5cbiAgICBfeENsb3VkUmVjZW50VGl0bGVzID0ge31cbiAgICBfeENsb3VkUmVjZW50VGl0bGVzTGFzdFVwZGF0ZSA9IDBcblxuICAgIFxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuICAgICAgICB0aGlzLl9odHRwID0gbmV3IEhUVFAodGhpcy5fYXBwbGljYXRpb24pXG4gICAgfVxuICAgIC8vIGdldE9mZmljaWFsVGl0bGVzKCkge1xuICAgIC8vICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgLy8gICAgICAgICBsZXQgb2ZmaWNpYWxUaXRsZXMgPSBbXTtcbiAgICAvLyAgICAgICAgIGF4aW9zXG4gICAgLy8gICAgICAgICAuZ2V0KCdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL0dlb2NsZC9YU3RyZWFtaW5nL2NvbnRlbnRzL3RpdGxlcy5qc29uP3JlZj1tYWluJywge1xuICAgIC8vICAgICAgICAgICAgIHRpbWVvdXQ6IDIwICogMTAwMCxcbiAgICAvLyAgICAgICAgIH0pXG4gICAgLy8gICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgIC8vICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHJlcy5kYXRhLmNvbnRlbnQ7XG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnRDbGVhbmVkID0gY29udGVudC5yZXBsYWNlKC9cXG4vZywgJycpO1xuXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGRlY29kZWRCdWZmZXIgPSBCdWZmZXIuZnJvbShiYXNlNjRDb250ZW50Q2xlYW5lZCwgJ2Jhc2U2NCcpO1xuICAgIC8vICAgICAgICAgICAgICAgICBjb25zdCBkZWNvZGVkQ29udGVudCA9IGRlY29kZWRCdWZmZXIudG9TdHJpbmcoJ3V0Zi04Jyk7XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZEpzb24gPSBKU09OLnBhcnNlKGRlY29kZWRDb250ZW50KTtcblxuICAgIC8vICAgICAgICAgICAgICAgICBvZmZpY2lhbFRpdGxlcyA9IGRlY29kZWRKc29uLlByb2R1Y3RzO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICByZXNvbHZlKG9mZmljaWFsVGl0bGVzKTtcbiAgICAvLyAgICAgICAgIH0pXG4gICAgLy8gICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgY29uc29sZS5sb2coJ29mZmljaWFsVGl0bGVzIGVycm9yOicsIGUpXG4gICAgLy8gICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gfVxuXG4gICAgZ2V0T2ZmaWNpYWxUaXRsZXMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGxldCBvZmZpY2lhbFRpdGxlcyA9IFtdO1xuICAgICAgICAgICAgYXhpb3NcbiAgICAgICAgICAgIC5nZXQoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9HZW9jbGQvWFN0cmVhbWluZ0BtYWluL3RpdGxlcy5qc29uJywge1xuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDEwICogMTAwMCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmaWNpYWxUaXRsZXMgPSByZXMuZGF0YS5Qcm9kdWN0cztcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29mZmljaWFsVGl0bGVzOicsIG9mZmljaWFsVGl0bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShvZmZpY2lhbFRpdGxlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEdhbWVQYXNzUHJvZHVjdHModGl0bGVzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0SWRRdWV1ZSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgdjJUaXRsZU1hcCA9IHt9O1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRpdGxlcykpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpdGxlcy5mb3JFYWNoKHRpdGxlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGl0bGUuZGV0YWlscyAmJiB0aXRsZS5kZXRhaWxzLnByb2R1Y3RJZCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SWRRdWV1ZS5wdXNoKHRpdGxlLmRldGFpbHMucHJvZHVjdElkKTtcbiAgICAgICAgICAgICAgICAgICAgdjJUaXRsZU1hcFt0aXRsZS5kZXRhaWxzLnByb2R1Y3RJZF0gPSB0aXRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gR2V0IG9mZmljaWFsVGl0bGVzXG4gICAgICAgICAgICB0aGlzLmdldE9mZmljaWFsVGl0bGVzKCkudGhlbigob2ZmaWNpYWxUaXRsZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlUHJvZHVjdElkcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgLi4ubmV3IFNldChbLi4ucHJvZHVjdElkUXVldWUsIC4uLm9mZmljaWFsVGl0bGVzXSksXG4gICAgICAgICAgICAgICAgXTtcbiAgICBcbiAgICAgICAgICAgICAgICB0aGlzLl9odHRwLnBvc3QoJ2NhdGFsb2cuZ2FtZXBhc3MuY29tJywgJy92My9wcm9kdWN0cz9tYXJrZXQ9VVMmbGFuZ3VhZ2U9ZW4tVVMmaHlkcmF0aW9uPVJlbW90ZUxvd0phZGUwJywgeyAvLyBSZW1vdGVMb3dKYWRlMFxuICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdHMnOiBtZXJnZVByb2R1Y3RJZHMsXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAnbXMtY3YnOiAwLFxuICAgICAgICAgICAgICAgICAgICAnY2FsbGluZy1hcHAtbmFtZSc6ICdYYm94IENsb3VkIEdhbWluZyBXZWInLFxuICAgICAgICAgICAgICAgICAgICAnY2FsbGluZy1hcHAtdmVyc2lvbic6ICcyNC4xNy42MycsXG4gICAgXG4gICAgICAgICAgICAgICAgfSkudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuUHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RzID0gcmVzdWx0LlByb2R1Y3RzO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkVGl0bGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9kdWN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2MlRpdGxlTWFwW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRUaXRsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wcm9kdWN0c1trZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi52MlRpdGxlTWFwW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRUaXRsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wcm9kdWN0c1trZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZFRpdGxlcy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuUHJvZHVjdFRpdGxlLmxvY2FsZUNvbXBhcmUoYi5Qcm9kdWN0VGl0bGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobWVyZ2VkVGl0bGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRHYW1lUGFzc1Byb2R1Y3RzIGVycm9yOicsIGUpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXROZXdUaXRsZXMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0KCdjYXRhbG9nLmdhbWVwYXNzLmNvbScsICcvc2lnbHMvdjI/aWQ9ZjEzY2Y2YjQtNTdlNi00NDU5LTg5ZGYtNmFlYzE4Y2YwNTM4Jm1hcmtldD1VUyZsYW5ndWFnZT1lbi1VUycpXG4gICAgfVxufVxuXG5pbnRlcmZhY2UgVGl0bGVEZXRhaWxzIHtcbiAgICB0aXRsZUlkOnN0cmluZztcbiAgICBkZXRhaWxzOiB7XG4gICAgICAgIHByb2R1Y3RJZDpzdHJpbmc7XG4gICAgICAgIHhib3hUaXRsZUlkOm51bWJlcjtcbiAgICAgICAgaGFzRW50aXRsZW1lbnQ6Ym9vbGVhbjtcbiAgICAgICAgc3VwcG9ydHNJbkFwcFB1cmNoYXNlczpib29sZWFuO1xuICAgICAgICBzdXBwb3J0ZWRUYWJzOiBhbnk7XG4gICAgICAgIHN1cHBvcnRlZElucHV0VHlwZXM6IGFueTtcbiAgICAgICAgcHJvZ3JhbXM6IGFueTtcbiAgICAgICAgdXNlclByb2dyYW1zOiBhbnk7XG4gICAgICAgIHVzZXJTdWJzY3JpcHRpb25zOiBhbnk7XG4gICAgICAgIGlzRnJlZUluU3RvcmU6IGJvb2xlYW47XG4gICAgICAgIG1heEdhbWVwbGF5VGltZUluU2Vjb25kczogbnVtYmVyO1xuICAgIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUaXRsZSB7XG5cbiAgICB0aXRsZUlkXG4gICAgcHJvZHVjdElkXG4gICAgeGJveFRpdGxlSWRcbiAgICBzdXBwb3J0ZWRJbnB1dFR5cGVzXG4gICAgY2F0YWxvZ0RldGFpbHNcblxuICAgIGNvbnN0cnVjdG9yKHRpdGxlOlRpdGxlRGV0YWlscyl7XG4gICAgICAgIHRoaXMudGl0bGVJZCA9IHRpdGxlLnRpdGxlSWRcbiAgICAgICAgdGhpcy5wcm9kdWN0SWQgPSB0aXRsZS5kZXRhaWxzLnByb2R1Y3RJZFxuICAgICAgICB0aGlzLnhib3hUaXRsZUlkID0gdGl0bGUuZGV0YWlscy54Ym94VGl0bGVJZFxuICAgICAgICB0aGlzLnN1cHBvcnRlZElucHV0VHlwZXMgPSB0aXRsZS5kZXRhaWxzLnN1cHBvcnRlZElucHV0VHlwZXNcbiAgICB9XG5cbiAgICBzZXRDYXRhbG9nRGV0YWlscyh0aXRsZUluZm86dGl0bGVJbmZvQXJncyl7XG4gICAgICAgIHRoaXMuY2F0YWxvZ0RldGFpbHMgPSB0aXRsZUluZm9cbiAgICB9XG5cbiAgICB0b1N0cmluZygpe1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcylcbiAgICB9XG5cbiAgICByZXN0b3JlRnJvbUNhY2hlKGNhY2hlZE9iail7XG4gICAgICAgIHRoaXMuY2F0YWxvZ0RldGFpbHMgPSBjYWNoZWRPYmouY2F0YWxvZ0RldGFpbHNcbiAgICB9XG59IiwiaW1wb3J0IHsgVG9rZW5TdG9yZSB9IGZyb20gJy4uL3hhbCdcbmltcG9ydCBTdG9yZSBmcm9tICdlbGVjdHJvbi1zdG9yZSdcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0aFRva2VuU3RvcmUgZXh0ZW5kcyBUb2tlblN0b3JlIHtcblxuICAgIHByaXZhdGUgX3N0b3JlID0gbmV3IFN0b3JlKClcblxuICAgIGxvYWQoKSB7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMuX3N0b3JlLmdldCgndXNlci50b2tlbnN0b3JlJywgJ3t9JykgYXMgc3RyaW5nXG4gICAgICAgIHRoaXMubG9hZEpzb24odG9rZW5zKVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgc2F2ZSgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHVzZXJUb2tlbjogdGhpcy5fdXNlclRva2VuPy5kYXRhLFxuICAgICAgICAgICAgc2lzdVRva2VuOiB0aGlzLl9zaXN1VG9rZW4/LmRhdGEsXG4gICAgICAgICAgICBqd3RLZXlzOiB0aGlzLl9qd3RLZXlzLFxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuX3N0b3JlLnNldCgndXNlci50b2tlbnN0b3JlJywgZGF0YSlcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5fc3RvcmUuZGVsZXRlKCd1c2VyLnRva2Vuc3RvcmUnKVxuICAgICAgICB0aGlzLl91c2VyVG9rZW4gPSB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5fc2lzdVRva2VuID0gdW5kZWZpbmVkXG4gICAgICAgIHRoaXMuX2p3dEtleXMgPSB1bmRlZmluZWRcbiAgICB9XG59IiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IGVsZWN0cm9uIGZyb20gJ2VsZWN0cm9uJ1xuaW1wb3J0IHsgY29tcGFyZSB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnXG5pbXBvcnQgZ2ggZnJvbSAnZ2l0aHViLXVybC10by1vYmplY3QnXG5pbXBvcnQgcGtnIGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbidcblxuLy8gQmFzZSBjb2RlIGJlbG93IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Fua3VyazkxL2VsZWN0cm9uLXVwZGF0ZS1ub3RpZmllci4gQ3JlZGl0cyB0byBAYW5rdXJrOTEuXG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgc2lsZW50PzogYm9vbGVhbjtcbiAgcHJlcmVsZWFzZXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgR2l0aHViUmVsZWFzZU9iamVjdCB7XG4gIHRhZ19uYW1lOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgaHRtbF91cmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRPcHRpb25zOiBPcHRpb25zID0ge1xuICAgIGRlYnVnOiBmYWxzZSwgLy8gZm9yY2UgcnVuIGluIGRldmVsb3BtZW50XG4gICAgc2lsZW50OiB0cnVlLFxuICAgIHByZXJlbGVhc2VzOiBmYWxzZSxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwZGF0ZU5vdGlmaWNhdGlvbihvcHRpb25zOiBPcHRpb25zID0gZGVmYXVsdE9wdGlvbnMsIGxvZ2dlcikge1xuICAgIGNvbnN0IHdpdGhEZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpXG5cbiAgICBpZiAoZWxlY3Ryb24uYXBwLmlzUmVhZHkoKSkge1xuICAgICAgICBjaGVja0ZvclVwZGF0ZXMod2l0aERlZmF1bHRzLCBsb2dnZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgZWxlY3Ryb24uYXBwLm9uKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgICAgIGNoZWNrRm9yVXBkYXRlcyh3aXRoRGVmYXVsdHMsIGxvZ2dlcilcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0ZvclVwZGF0ZXMoe3JlcG9zaXRvcnksIHRva2VuLCBkZWJ1Zywgc2lsZW50LCBwcmVyZWxlYXNlc306IE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucywgbG9nZ2VyKSB7XG4gICAgbG9nZ2VyLmxvZygndXBkYXRlcicsIF9fZmlsZW5hbWUrJ1tjaGVja0ZvclVwZGF0ZXMoKV0gUnVubmluZyB1cGRhdGVyLi4uJywgZWxlY3Ryb24uYXBwLmlzUGFja2FnZWQsIGRlYnVnKVxuICAgIGlmICghZWxlY3Ryb24uYXBwLmlzUGFja2FnZWQgJiYgIWRlYnVnKXtcbiAgICAgICAgbG9nZ2VyLmxvZygndXBkYXRlcicsIF9fZmlsZW5hbWUrJ1tjaGVja0ZvclVwZGF0ZXMoKV0gTm90IGNoZWNraW5nIGZvciB1cGRhdGVzIGJlY2F1c2UgYXBwIGlzIG5vdCBwYWNrYWdlZC4nKVxuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcG9zaXRvcnkpIHtcbiAgICAvLyBjb25zdCBwa2cgPSByZXF1aXJlKHBhdGguam9pbihlbGVjdHJvbi5hcHAuZ2V0QXBwUGF0aCgpLCAncGFja2FnZS5qc29uJykpXG4gICAgICAgIGNvbnN0IGdoT2JqID0gZ2gocGtnLnJlcG9zaXRvcnkpXG5cbiAgICAgICAgaWYgKCFnaE9iaikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXBvc2l0b3J5IFVSTCBub3QgZm91bmQgaW4gcGFja2FnZS5qc29uIGZpbGUuJylcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcG9zaXRvcnkgPSBnaE9iai51c2VyICsgJy8nICsgZ2hPYmoucmVwb1xuICAgIH1cblxuICAgIGxldCBsYXRlc3RSZWxlYXNlOiBudWxsIHwgR2l0aHViUmVsZWFzZU9iamVjdCA9IG51bGxcblxuICAgIHRyeSB7XG4gICAgICAgIGxvZ2dlci5sb2coJ3VwZGF0ZXInLCBfX2ZpbGVuYW1lKydbY2hlY2tGb3JVcGRhdGVzKCldIENoZWNraW5nIGZvciB1cGRhdGVzIG9uIEdpdEh1YjonLCBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG9zaXRvcnl9L3JlbGVhc2VzYClcbiAgICAgICAgY29uc3Qge2RhdGE6IHJlbGVhc2VzfSA9IGF3YWl0IGF4aW9zLmdldChgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG9zaXRvcnl9L3JlbGVhc2VzYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0b2tlbiA/IHthdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gfSA6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgKVxuXG4gICAgICAgIGZvcihjb25zdCByZWxlYXNlIGluIHJlbGVhc2VzKXtcbiAgICAgICAgICAgIGlmKHJlbGVhc2VzW3JlbGVhc2VdLnByZXJlbGVhc2UgPT09IHByZXJlbGVhc2VzKXtcbiAgICAgICAgICAgICAgICBsYXRlc3RSZWxlYXNlID0gcmVsZWFzZXNbcmVsZWFzZV0gYXMgR2l0aHViUmVsZWFzZU9iamVjdFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBsb2dnZXIubG9nKCd1cGRhdGVyJywgX19maWxlbmFtZSsnW2NoZWNrRm9yVXBkYXRlcygpXSBFcnJvciB3aGlsZSBjaGVja2luZyBmb3IgdXBkYXRlczonLCBlcnJvcilcblxuICAgICAgICBpZiAoIXNpbGVudCkge1xuICAgICAgICAgICAgc2hvd0RpYWxvZygnVW5hYmxlIHRvIGNoZWNrIGZvciB1cGRhdGVzIGF0IHRoaXMgbW9tZW50LiBUcnkgYWdhaW4uJywgJ2Vycm9yJylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbGF0ZXN0UmVsZWFzZSkgcmV0dXJuXG5cbiAgICBpZiAoY29tcGFyZShsYXRlc3RSZWxlYXNlLnRhZ19uYW1lLCBlbGVjdHJvbi5hcHAuZ2V0VmVyc2lvbigpLCAnPicpKSB7XG4gICAgICAgIGxvZ2dlci5sb2coJ3VwZGF0ZXInLCBfX2ZpbGVuYW1lKydbY2hlY2tGb3JVcGRhdGVzKCldIE5ldyB2ZXJzaW9uIGZvdW5kOicsIGxhdGVzdFJlbGVhc2UudGFnX25hbWUpXG4gICAgICAgIHNob3dVcGRhdGVEaWFsb2cobGF0ZXN0UmVsZWFzZSlcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIubG9nKCd1cGRhdGVyJywgX19maWxlbmFtZSsnW2NoZWNrRm9yVXBkYXRlcygpXSBBcHBsaWNhdGlvbiBpcyBuZXdlc3QgdmVyc2lvbi4gQ3VycmVudCB2ZXJzaW9uOicsIGVsZWN0cm9uLmFwcC5nZXRWZXJzaW9uKCksICdOZXdlc3QgdmVyc2lvbjonLCBsYXRlc3RSZWxlYXNlLnRhZ19uYW1lIClcbiAgICAgICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgICAgICAgIHNob3dEaWFsb2coYFlvdSBhcmUgYWxyZWFkeSBydW5uaW5nIHRoZSBsYXRlc3QgdmVyc2lvbi4gQ3VycmVudCB2ZXJzaW9uOiAke2VsZWN0cm9uLmFwcC5nZXRWZXJzaW9uKCl9LiBOZXdlc3QgdmVyc2lvbjogJHtsYXRlc3RSZWxlYXNlLnRhZ19uYW1lfWApXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93VXBkYXRlRGlhbG9nKHJlbGVhc2U6IEdpdGh1YlJlbGVhc2VPYmplY3QpIHtcbiAgICBlbGVjdHJvbi5kaWFsb2cuc2hvd01lc3NhZ2VCb3goXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiBlbGVjdHJvbi5hcHAuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgbWVzc2FnZTogJ05ldyByZWxlYXNlIGF2YWlsYWJsZScsXG4gICAgICAgICAgICBkZXRhaWw6IGBJbnN0YWxsZWQgVmVyc2lvbjogJHtlbGVjdHJvbi5hcHAuZ2V0VmVyc2lvbigpfVxcbkxhdGVzdCBWZXJzaW9uOiAke3JlbGVhc2UudGFnX25hbWV9XFxuXFxuJHtyZWxlYXNlLmJvZHl9YC50cmltKCksXG4gICAgICAgICAgICBidXR0b25zOiBbJ0Rvd25sb2FkJywgJ0xhdGVyJ10sXG4gICAgICAgICAgICBkZWZhdWx0SWQ6IDAsXG4gICAgICAgICAgICBjYW5jZWxJZDogMSxcbiAgICAgICAgfSxcbiAgICApXG4gICAgICAgIC50aGVuKCh7cmVzcG9uc2V9KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVjdHJvbi5zaGVsbC5vcGVuRXh0ZXJuYWwocmVsZWFzZS5odG1sX3VybClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpXG4gICAgICAgIH0pXG59XG5cbmNvbnN0IHNob3dEaWFsb2cgPSAoZGV0YWlsOiBzdHJpbmcsIHR5cGU6IHN0cmluZyA9ICdpbmZvJykgPT4ge1xuICAgIGVsZWN0cm9uLmRpYWxvZy5zaG93TWVzc2FnZUJveChcbiAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6IGVsZWN0cm9uLmFwcC5nZXROYW1lKCksXG4gICAgICAgICAgICBtZXNzYWdlOiAnVXBkYXRlIGNoZWNrZXInLFxuICAgICAgICAgICAgYnV0dG9uczogWydDbG9zZSddLFxuICAgICAgICAgICAgZGVmYXVsdElkOiAwLFxuICAgICAgICAgICAgY2FuY2VsSWQ6IDAsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgZGV0YWlsLFxuICAgICAgICB9LFxuICAgIClcbn0iLCJpbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHhib3hXb3JrZXIge1xuXG4gICAgX2FwcGxpY2F0aW9uOkFwcGxpY2F0aW9uXG4gICAgXG4gICAgX2ZyaWVuZHMgPSB7fVxuICAgIF9vbmxpbmVGcmllbmRzID0ge31cblxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuXG4gICAgICAgIC8vIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgLy8gICAgIHRoaXMuaW50ZXJ2YWxGcmllbmRzKCkgXG4gICAgICAgIC8vIH0sIDMwICogMTAwMCkgLy8gQXBpIGlzIGxpbWl0ZWQgdG8gMzAgcmVxdWVzdHMgcGVyIDMwMCBzZWNvbmRzLiAoMzAwLzMwID0gMTAgc2VjKVxuICAgICAgICBcbiAgICAgICAgLy8gdGhpcy5pbnRlcnZhbEZyaWVuZHMoKVxuICAgIH1cblxuICAgIGludGVydmFsRnJpZW5kcygpe1xuICAgICAgICAvLyBjb25zb2xlLmxvZygneGJveCB3b3JrZXIgbG9vcCBydW4nKVxuXG4gICAgICAgIHRoaXMudXBkYXRlRnJpZW5kcygpLnRoZW4oKGZyaWVuZHM6YW55KSA9PiB7XG4gICAgICAgICAgICAvLyBHZXQgYWxsIGZyaWVuZHNcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd4Ym94V29ya2VyIC0gVXBkYXRlZCBmcmllbmRzIHN1Y2Nlc3NmdWxseScpXG5cbiAgICAgICAgICAgIC8vIFNlbmQgb3ZlciBvbmxpbmUgZnJpZW5kc1xuICAgICAgICAgICAgY29uc3Qgb25saW5lRnJpZW5kcyA9IFtdXG4gICAgICAgICAgICBmb3IoY29uc3QgZnJpZW5kIGluIGZyaWVuZHMpe1xuICAgICAgICAgICAgICAgIGlmKGZyaWVuZHNbZnJpZW5kXS5wcmVzZW5jZVN0YXRlICE9PSAnT2ZmbGluZScpe1xuICAgICAgICAgICAgICAgICAgICBvbmxpbmVGcmllbmRzLnB1c2goZnJpZW5kc1tmcmllbmRdKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fb25saW5lRnJpZW5kcyA9IG9ubGluZUZyaWVuZHNcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygneGJveFdvcmtlciAtIEVycm9yIHVwZGF0aW5nIGZyaWVuZHM6JywgZXJyb3IpXG4gICAgICAgIH0pXG5cbiAgICB9XG5cbiAgICB1cGRhdGVGcmllbmRzKCl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fd2ViQXBpLmdldFByb3ZpZGVyKCdwZW9wbGUnKS5nZXRGcmllbmRzKCkudGhlbigoZnJpZW5kcykgPT4ge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBmcmllbmQgaW4gZnJpZW5kcy5wZW9wbGUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmllbmRzW2ZyaWVuZHMucGVvcGxlW2ZyaWVuZF0ueHVpZF0gPSBmcmllbmRzLnBlb3BsZVtmcmllbmRdXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9mcmllbmRzKVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbn0iLCJpbXBvcnQgaHR0cHMgZnJvbSBcImh0dHBzXCI7XG5pbXBvcnQgQXBwbGljYXRpb24gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCI7XG5pbXBvcnQgeyBBZGRyZXNzNiB9IGZyb20gXCJpcC1hZGRyZXNzXCI7XG5pbXBvcnQgeyBkZWZhdWx0U2V0dGluZ3MgfSBmcm9tIFwiLi4vLi4vcmVuZGVyZXIvY29udGV4dC91c2VyQ29udGV4dC5kZWZhdWx0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIHBsYXlSZXN1bHQge1xuICBzZXNzaW9uUGF0aDogc3RyaW5nO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIGV4Y2hhbmdlUmVzdWx0IHtcbiAgZXhjaGFuZ2VSZXNwb25zZTogc3RyaW5nO1xuICBlcnJvckRldGFpbHM6IHtcbiAgICBjb2RlOiBhbnk7XG4gICAgbWVzc2FnZTogYW55O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB4Q2xvdWRBcGkge1xuICBfYXBwbGljYXRpb247XG5cbiAgX2hvc3Q6IHN0cmluZztcbiAgX3Rva2VuOiBzdHJpbmc7XG4gIF90eXBlOiBcImhvbWVcIiB8IFwiY2xvdWRcIjtcblxuICBfc2Vzc2lvblBhdGg6IHN0cmluZztcblxuICBfZXhjaGFuZ2VDb3VudGVyID0gMDtcbiAgX2V4Y2hhbmdlVXJsID0gXCJcIjtcbiAgX2N1cnJlbnRHYW1lID0gXCJcIjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBhcHBsaWNhdGlvbjogQXBwbGljYXRpb24sXG4gICAgaG9zdDogc3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgdHlwZTogXCJob21lXCIgfCBcImNsb3VkXCIgPSBcImhvbWVcIlxuICApIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uO1xuICAgIHRoaXMuX2hvc3QgPSBob3N0O1xuICAgIHRoaXMuX3Rva2VuID0gdG9rZW47XG4gICAgdGhpcy5fdHlwZSA9IHR5cGU7XG4gIH1cblxuICBnZXQodXJsOiBzdHJpbmcsIG1ldGhvZCA9IFwiR0VUXCIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlRGF0YSA9IFwiXCI7XG5cbiAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBob3N0OiB0aGlzLl9ob3N0LFxuICAgICAgICAgIHBhdGg6IHVybCxcbiAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IFwiQmVhcmVyIFwiICsgdGhpcy5fdG9rZW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXNwb25zZS5vbihcImRhdGFcIiwgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGE7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXNwb25zZS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8PSAyOTkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgICAgIFwieENsb3VkQXBpXCIsXG4gICAgICAgICAgICAgICAgXCJob3N0OlwiICtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgK1xuICAgICAgICAgICAgICAgICAgXCIgZ2V0KFwiICtcbiAgICAgICAgICAgICAgICAgIHVybCArXG4gICAgICAgICAgICAgICAgICBcIiwgXCIgK1xuICAgICAgICAgICAgICAgICAgbWV0aG9kICtcbiAgICAgICAgICAgICAgICAgIFwiKSByZXNvbHZlOlwiLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbGV0IHJldHVybkRhdGEgPSByZXNwb25zZURhdGE7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBEYXRhIGlzIG5vdCBKU09OLi5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSAyMDQpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJldHJ5Li5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0KHVybCwgbWV0aG9kKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgNzUwKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJldHVybkRhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coXG4gICAgICAgICAgICAgICAgXCJ4Q2xvdWRBcGlcIixcbiAgICAgICAgICAgICAgICBcImdldChcIiArIHVybCArIFwiKSByZWplY3Q6XCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXEub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgICAgcmVxLmVuZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcG9zdCh1cmw6IHN0cmluZywgcG9zdERhdGEgPSB7fSwgaGVhZGVycyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCByZXNwb25zZURhdGEgPSBcIlwiO1xuICAgICAgY29uc3QgbWVyZ2VkSGVhZGVycyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogXCJCZWFyZXIgXCIgKyB0aGlzLl90b2tlbixcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGVyc1xuICAgICAgKTtcblxuICAgICAgY29uc3QgcmVxID0gaHR0cHMucmVxdWVzdChcbiAgICAgICAge1xuICAgICAgICAgIGhvc3Q6IHRoaXMuX2hvc3QsXG4gICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgaGVhZGVyczogbWVyZ2VkSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXNwb25zZS5vbihcImRhdGFcIiwgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGE7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXNwb25zZS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8PSAyOTkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgICAgIFwieENsb3VkQXBpXCIsXG4gICAgICAgICAgICAgICAgXCJwb3N0KFwiICsgdXJsICsgXCIpIHJlc29sdmU6XCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICByZXNwb25zZURhdGFcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBsZXQgcmV0dXJuRGF0YSA9IHJlc3BvbnNlRGF0YTtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm5EYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZURhdGEpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIERhdGEgaXMgbm90IEpTT04uLlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5EYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZyhcbiAgICAgICAgICAgICAgICBcInhDbG91ZEFwaVwiLFxuICAgICAgICAgICAgICAgIFwicG9zdChcIiArIHVybCArIFwiKSByZWplY3Q6XCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXEub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXEud3JpdGUoSlNPTi5zdHJpbmdpZnkocG9zdERhdGEpKTtcblxuICAgICAgcmVxLmVuZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0V2FpdGluZ1RpbWVzKHRpdGxlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCIvdjEvd2FpdHRpbWUvXCIgKyB0aXRsZUlkKTtcbiAgfVxuXG4gIGdldFRpdGxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCIvdjIvdGl0bGVzXCIpO1xuICB9XG5cbiAgZ2V0UmVjZW50VGl0bGVzKCkge1xuICAgIHJldHVybiB0aGlzLmdldChcIi92Mi90aXRsZXMvbXJ1P21yPTI1XCIpO1xuICB9XG5cbiAgc3RvcFN0cmVhbShzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQsIFwiREVMRVRFXCIpO1xuICB9XG5cbiAgc3RhcnRTdHJlYW0odGFyZ2V0OiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldChcbiAgICAgIFwic2V0dGluZ3NcIixcbiAgICAgIGRlZmF1bHRTZXR0aW5nc1xuICAgICk7XG4gICAgY29uc3QgZGV2aWNlSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGFwcEluZm86IHtcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgY2xpZW50QXBwSWQ6IFwid3d3Lnhib3guY29tXCIsXG4gICAgICAgICAgY2xpZW50QXBwVHlwZTogXCJicm93c2VyXCIsXG4gICAgICAgICAgY2xpZW50QXBwVmVyc2lvbjogXCIyMS4xLjk4XCIsXG4gICAgICAgICAgY2xpZW50U2RrVmVyc2lvbjogXCI4LjUuM1wiLFxuICAgICAgICAgIGh0dHBFbnZpcm9ubWVudDogXCJwcm9kXCIsXG4gICAgICAgICAgc2RrSW5zdGFsbElkOiBcIlwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRldjoge1xuICAgICAgICBodzoge1xuICAgICAgICAgIG1ha2U6IFwiTWljcm9zb2Z0XCIsXG4gICAgICAgICAgbW9kZWw6IFwiU3VyZmFjZSBQcm9cIixcbiAgICAgICAgICBzZGt0eXBlOiBcIndlYlwiLFxuICAgICAgICB9LFxuICAgICAgICBvczoge1xuICAgICAgICAgIG5hbWU6IHNldHRpbmdzLnJlc29sdXRpb24gPT0gMTA4MCA/IFwid2luZG93c1wiIDogXCJhbmRyb2lkXCIsXG4gICAgICAgICAgdmVyOiBcIjIyNjMxLjI3MTVcIixcbiAgICAgICAgICBwbGF0Zm9ybTogXCJkZXNrdG9wXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGRpc3BsYXlJbmZvOiB7XG4gICAgICAgICAgZGltZW5zaW9uczoge1xuICAgICAgICAgICAgd2lkdGhJblBpeGVsczogMTkyMCxcbiAgICAgICAgICAgIGhlaWdodEluUGl4ZWxzOiAxMDgwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGl4ZWxEZW5zaXR5OiB7XG4gICAgICAgICAgICBkcGlYOiAyLFxuICAgICAgICAgICAgZHBpWTogMixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvc3REYXRhID0ge1xuICAgICAgdGl0bGVJZDogdGhpcy5fdHlwZSA9PT0gXCJjbG91ZFwiID8gdGFyZ2V0IDogXCJcIixcbiAgICAgIHN5c3RlbVVwZGF0ZUdyb3VwOiBcIlwiLFxuICAgICAgY2xpZW50U2Vzc2lvbklkOiBcIlwiLFxuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgbmFub1ZlcnNpb246IFwiVjM7V2VicnRjVHJhbnNwb3J0LmRsbFwiLFxuICAgICAgICBlbmFibGVUZXh0VG9TcGVlY2g6IGZhbHNlLFxuICAgICAgICBoaWdoQ29udHJhc3Q6IDAsXG4gICAgICAgIGxvY2FsZTogc2V0dGluZ3MucHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2UgPyBzZXR0aW5ncy5wcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSA6ICdlbi1VUycsXG4gICAgICAgIHVzZUljZUNvbm5lY3Rpb246IGZhbHNlLFxuICAgICAgICB0aW1lem9uZU9mZnNldE1pbnV0ZXM6IDEyMCxcbiAgICAgICAgc2RrVHlwZTogXCJ3ZWJcIixcbiAgICAgICAgLy8gRm9yIHhDbG91ZCBzdHJlYW1pbmdcbiAgICAgICAgb3NOYW1lOiBzZXR0aW5ncy5yZXNvbHV0aW9uID09IDEwODAgPyBcIndpbmRvd3NcIiA6IFwiYW5kcm9pZFwiLFxuICAgICAgfSxcbiAgICAgIHNlcnZlcklkOiB0aGlzLl90eXBlID09PSBcImhvbWVcIiA/IHRhcmdldCA6IFwiXCIsXG4gICAgICBmYWxsYmFja1JlZ2lvbk5hbWVzOiBbXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucG9zdChcIi92NS9zZXNzaW9ucy9cIiArIHRoaXMuX3R5cGUgKyBcIi9wbGF5XCIsIHBvc3REYXRhLCB7XG4gICAgICBcIlgtTVMtRGV2aWNlLUluZm9cIjogZGV2aWNlSW5mbyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0cmVhbVN0YXRlKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc3RhdGVcIik7XG4gIH1cblxuICBzZW5kU2RwKHNlc3Npb25JZDogc3RyaW5nLCBzZHA6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBwb3N0RGF0YSA9IHtcbiAgICAgICAgbWVzc2FnZVR5cGU6IFwib2ZmZXJcIixcbiAgICAgICAgc2RwOiBzZHAsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjaGF0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgYnl0ZXNQZXJTYW1wbGU6IDIsXG4gICAgICAgICAgICBleHBlY3RlZENsaXBEdXJhdGlvbk1zOiAyMCxcbiAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICBjb2RlYzogXCJvcHVzXCIsXG4gICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJ3ZWJtXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVtQ2hhbm5lbHM6IDEsXG4gICAgICAgICAgICBzYW1wbGVGcmVxdWVuY3lIejogMjQwMDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGF0OiB7XG4gICAgICAgICAgICBtaW5WZXJzaW9uOiAxLFxuICAgICAgICAgICAgbWF4VmVyc2lvbjogMSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbnRyb2w6IHtcbiAgICAgICAgICAgIG1pblZlcnNpb246IDEsXG4gICAgICAgICAgICBtYXhWZXJzaW9uOiAzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgIG1pblZlcnNpb246IDEsXG4gICAgICAgICAgICBtYXhWZXJzaW9uOiA4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgbWluVmVyc2lvbjogMSxcbiAgICAgICAgICAgIG1heFZlcnNpb246IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucG9zdChcbiAgICAgICAgXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9zZHBcIixcbiAgICAgICAgcG9zdERhdGFcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc2RwXCIpXG4gICAgICAgICAgICAudGhlbigoc2RwUmVzdWx0OiBleGNoYW5nZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGNoYW5nZVNkcCA9IEpTT04ucGFyc2Uoc2RwUmVzdWx0LmV4Y2hhbmdlUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgIHJlc29sdmUoZXhjaGFuZ2VTZHApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzZW5kQ2hhdFNkcChzZXNzaW9uSWQ6IHN0cmluZywgc2RwOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcG9zdERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2VUeXBlOiBcIm9mZmVyXCIsXG4gICAgICAgIHNkcDogc2RwLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgaXNNZWRpYVN0cmVhbXNDaGF0UmVuZWdvdGlhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucG9zdChcbiAgICAgICAgXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9zZHBcIixcbiAgICAgICAgcG9zdERhdGFcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc2RwXCIpXG4gICAgICAgICAgICAudGhlbigoc2RwUmVzdWx0OiBleGNoYW5nZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGNoYW5nZVNkcCA9IEpTT04ucGFyc2Uoc2RwUmVzdWx0LmV4Y2hhbmdlUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgIHJlc29sdmUoZXhjaGFuZ2VTZHApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBjaGVja0ljZShzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHNldHRpbmdzOiBhbnkgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KFxuICAgICAgXCJzZXR0aW5nc1wiLFxuICAgICAgZGVmYXVsdFNldHRpbmdzXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5nZXQoXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9pY2VcIikudGhlbihcbiAgICAgICAgKGljZVJlc3VsdDogZXhjaGFuZ2VSZXN1bHQgfCBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoaWNlUmVzdWx0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0ljZShzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBfaWNlUmVzdWx0ID0gaWNlUmVzdWx0IGFzIGV4Y2hhbmdlUmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgZXhjaGFuZ2VJY2UgPSBKU09OLnBhcnNlKF9pY2VSZXN1bHQuZXhjaGFuZ2VSZXNwb25zZSk7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZENhbmRpZGF0ZXMgPSBbXTtcblxuICAgICAgICAgICAgLy8gRmluZCBUZXJlZG8gQWRkcmVzcyBhbmQgZXh0cmFjdCByZW1vdGUgaXBcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIGluIGV4Y2hhbmdlSWNlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZUFkZHJlc3MgPVxuICAgICAgICAgICAgICAgIGV4Y2hhbmdlSWNlW2NhbmRpZGF0ZV0uY2FuZGlkYXRlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUFkZHJlc3MubGVuZ3RoID4gNCAmJlxuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUFkZHJlc3NbNF0uc3Vic3RyKDAsIDQpID09PSBcIjIwMDFcIlxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3M2KGNhbmRpZGF0ZUFkZHJlc3NbNF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlcmVkbyA9IGFkZHJlc3MuaW5zcGVjdFRlcmVkbygpO1xuXG4gICAgICAgICAgICAgICAgY29tcHV0ZWRDYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlOlxuICAgICAgICAgICAgICAgICAgICBcImE9Y2FuZGlkYXRlOjEwIDEgVURQIDEgXCIgK1xuICAgICAgICAgICAgICAgICAgICB0ZXJlZG8uY2xpZW50NCArXG4gICAgICAgICAgICAgICAgICAgIFwiIDkwMDIgdHlwIGhvc3QgXCIsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogXCJpY2VDYW5kaWRhdGVcIixcbiAgICAgICAgICAgICAgICAgIHNkcE1MaW5lSW5kZXg6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgc2RwTWlkOiBcIjBcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb21wdXRlZENhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBjYW5kaWRhdGU6XG4gICAgICAgICAgICAgICAgICAgIFwiYT1jYW5kaWRhdGU6MTEgMSBVRFAgMSBcIiArXG4gICAgICAgICAgICAgICAgICAgIHRlcmVkby5jbGllbnQ0ICtcbiAgICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgICB0ZXJlZG8udWRwUG9ydCArXG4gICAgICAgICAgICAgICAgICAgIFwiIHR5cCBob3N0IFwiLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZVR5cGU6IFwiaWNlQ2FuZGlkYXRlXCIsXG4gICAgICAgICAgICAgICAgICBzZHBNTGluZUluZGV4OiBcIjBcIixcbiAgICAgICAgICAgICAgICAgIHNkcE1pZDogXCIwXCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb21wdXRlZENhbmRpZGF0ZXMucHVzaChleGNoYW5nZUljZVtjYW5kaWRhdGVdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgIC9hPWNhbmRpZGF0ZTooPzxmb3VuZGF0aW9uPlxcZCspICg/PGNvbXBvbmVudD5cXGQrKSBVRFAgKD88cHJpb3JpdHk+XFxkKykgKD88aXA+W15cXHNdKykgKD88cG9ydD5cXGQrKSAoPzx0aGVfcmVzdD4uKikvXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBsc3QgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgY29tcHV0ZWRDYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLmNhbmRpZGF0ZSA9PT0gXCJhPWVuZC1vZi1jYW5kaWRhdGVzXCIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwcyA9IHBhdHRlcm4uZXhlYyhpdGVtLmNhbmRpZGF0ZSkuZ3JvdXBzO1xuICAgICAgICAgICAgICBsc3QucHVzaChncm91cHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQZXJmZXJJUFY2XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuaXB2Nikge1xuICAgICAgICAgICAgICBsc3Quc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0SXAgPSBhLmlwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZElwID0gYi5pcDtcblxuICAgICAgICAgICAgICAgIHJldHVybiAhZmlyc3RJcC5pbmNsdWRlcyhcIjpcIikgJiYgc2Vjb25kSXAuaW5jbHVkZXMoXCI6XCIpXG4gICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgIDogLTE7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5kaWRhdGVzID0gW107XG4gICAgICAgICAgICBsZXQgZm91bmRhdGlvbiA9IDE7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmRpZGF0ZSA9IChjYW5kaWRhdGUpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGU6IGNhbmRpZGF0ZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogXCJpY2VDYW5kaWRhdGVcIixcbiAgICAgICAgICAgICAgICBzZHBNTGluZUluZGV4OiBcIjBcIixcbiAgICAgICAgICAgICAgICBzZHBNaWQ6IFwiMFwiLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbHN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgaXRlbS5mb3VuZGF0aW9uID0gZm91bmRhdGlvbjtcbiAgICAgICAgICAgICAgaXRlbS5wcmlvcml0eSA9IGZvdW5kYXRpb24gPT09IDEgPyAyMTMwNzA2NDMxIDogMTtcblxuICAgICAgICAgICAgICBuZXdDYW5kaWRhdGVzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3Q2FuZGlkYXRlKFxuICAgICAgICAgICAgICAgICAgYGE9Y2FuZGlkYXRlOiR7aXRlbS5mb3VuZGF0aW9ufSAxIFVEUCAke2l0ZW0ucHJpb3JpdHl9ICR7aXRlbS5pcH0gJHtpdGVtLnBvcnR9ICR7aXRlbS50aGVfcmVzdH1gXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICArK2ZvdW5kYXRpb247XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbmV3Q2FuZGlkYXRlcy5wdXNoKG5ld0NhbmRpZGF0ZShcImE9ZW5kLW9mLWNhbmRpZGF0ZXNcIikpO1xuXG4gICAgICAgICAgICByZXNvbHZlKG5ld0NhbmRpZGF0ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNlbmRJY2Uoc2Vzc2lvbklkOiBzdHJpbmcsIGljZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHBvc3REYXRhID0ge1xuICAgICAgICBtZXNzYWdlVHlwZTogXCJpY2VDYW5kaWRhdGVcIixcbiAgICAgICAgY2FuZGlkYXRlOiBpY2UsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnBvc3QoXG4gICAgICAgIFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvaWNlXCIsXG4gICAgICAgIHBvc3REYXRhXG4gICAgICApXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJY2Uoc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAgIC50aGVuKGNhbmRpZGF0ZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNhbmRpZGF0ZXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNlbmRNU0FMQXV0aChzZXNzaW9uSWQ6IHN0cmluZywgdXNlclRva2VuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wb3N0KFxuICAgICAgXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9jb25uZWN0XCIsXG4gICAgICB7XG4gICAgICAgIHVzZXJUb2tlbjogdXNlclRva2VuLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZW5kS2VlcGFsaXZlKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucG9zdChcbiAgICAgIFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIva2VlcGFsaXZlXCJcbiAgICApO1xuICB9XG5cbiAgZ2V0QWN0aXZlU2Vzc2lvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL2FjdGl2ZVwiKTtcbiAgfVxufVxuIiwiaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4vYXBwbGljYXRpb24nXG5pbXBvcnQgSXBjQ29uc29sZXMgZnJvbSAnLi9pcGMvY29uc29sZXMnXG5pbXBvcnQgSXBjU3RyZWFtaW5nIGZyb20gJy4vaXBjL3N0cmVhbWluZydcbmltcG9ydCBJcGN4Q2xvdWQgZnJvbSAnLi9pcGMveGNsb3VkJ1xuaW1wb3J0IElwY0FwcCBmcm9tICcuL2lwYy9hcHAnXG5pbXBvcnQgSXBjU2V0dGluZ3MgZnJvbSAnLi9pcGMvc2V0dGluZ3MnXG5cbmltcG9ydCB7IGlwY01haW4gfSBmcm9tICdlbGVjdHJvbidcblxuaW50ZXJmYWNlIElwY0NoYW5uZWxzIHtcbiAgICBzdHJlYW1pbmc6IElwY1N0cmVhbWluZztcbiAgICBjb25zb2xlczogSXBjQ29uc29sZXM7XG4gICAgYXBwOiBJcGNBcHA7XG4gICAgeENsb3VkOiBJcGN4Q2xvdWQ7XG4gICAgc2V0dGluZ3M6IElwY1NldHRpbmdzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcGMge1xuXG4gICAgX2FwcGxpY2F0aW9uOkFwcGxpY2F0aW9uXG5cbiAgICBfY2hhbm5lbHM6SXBjQ2hhbm5lbHNcblxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uOkFwcGxpY2F0aW9uKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxzID0ge1xuICAgICAgICAgICAgc3RyZWFtaW5nOiBuZXcgSXBjU3RyZWFtaW5nKHRoaXMuX2FwcGxpY2F0aW9uKSxcbiAgICAgICAgICAgIGNvbnNvbGVzOiBuZXcgSXBjQ29uc29sZXModGhpcy5fYXBwbGljYXRpb24pLFxuICAgICAgICAgICAgYXBwOiBuZXcgSXBjQXBwKHRoaXMuX2FwcGxpY2F0aW9uKSxcbiAgICAgICAgICAgIHhDbG91ZDogbmV3IElwY3hDbG91ZCh0aGlzLl9hcHBsaWNhdGlvbiksXG4gICAgICAgICAgICBzZXR0aW5nczogbmV3IElwY1NldHRpbmdzKHRoaXMuX2FwcGxpY2F0aW9uKSxcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcihjb25zdCBjaGFubmVsIGluIHRoaXMuX2NoYW5uZWxzKXtcbiAgICAgICAgICAgIGlwY01haW4ub24oY2hhbm5lbCwgKGV2ZW50LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbHNbY2hhbm5lbF0ub25FdmVudChjaGFubmVsLCBldmVudCwgYXJncykgXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIFxuICAgIH1cblxuICAgIHN0YXJ0VXAoKXtcbiAgICAgICAgZm9yKGNvbnN0IGNoYW5uZWwgaW4gdGhpcy5fY2hhbm5lbHMpe1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdJcGMnLCAnU3RhcnRpbmcgSVBDIGNoYW5uZWw6ICcgKyBjaGFubmVsKVxuXG4gICAgICAgICAgICBpZih0aGlzLl9jaGFubmVsc1tjaGFubmVsXS5zdGFydFVwKVxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxzW2NoYW5uZWxdLnN0YXJ0VXAoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Vc2VyTG9hZGVkKCl7XG4gICAgICAgIGZvcihjb25zdCBjaGFubmVsIGluIHRoaXMuX2NoYW5uZWxzKXtcbiAgICAgICAgICAgIGlmKHRoaXMuX2NoYW5uZWxzW2NoYW5uZWxdLm9uVXNlckxvYWRlZCl7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdJcGMnLCAnTG9hZGluZyBzdGFydHVwIGRhdGEgZm9yIElQQyBjaGFubmVsOiAnICsgY2hhbm5lbClcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsc1tjaGFubmVsXS5vblVzZXJMb2FkZWQoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSIsImltcG9ydCBJcGNCYXNlIGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IHNlc3Npb24gfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBjQXBwIGV4dGVuZHMgSXBjQmFzZSB7XG4gIC8vIF9zdHJlYW1pbmdTZXNzaW9uczphbnkgPSB7fVxuXG4gIGxvYWRDYWNoZWRVc2VyKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlclN0YXRlKCk7XG5cbiAgICAgIHJlc29sdmUodXNlcik7XG4gICAgfSk7XG4gIH1cblxuICBnZXRVc2VyU3RhdGUoKSB7XG4gICAgY29uc3QgZ2FtZXJ0YWcgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KFwidXNlci5nYW1lcnRhZ1wiKTtcbiAgICBjb25zdCBnYW1lcnBpYyA9IHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5nZXQoXCJ1c2VyLmdhbWVycGljXCIpO1xuICAgIGNvbnN0IGdhbWVyc2NvcmUgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KFwidXNlci5nYW1lcnNjb3JlXCIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZ25lZEluOiBnYW1lcnRhZyA/IHRydWUgOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwidXNlclwiLFxuICAgICAgZ2FtZXJ0YWc6IGdhbWVydGFnID8gZ2FtZXJ0YWcgOiBcIlwiLFxuICAgICAgZ2FtZXJwaWM6IGdhbWVycGljID8gZ2FtZXJwaWMgOiBcIlwiLFxuICAgICAgZ2FtZXJzY29yZTogZ2FtZXJzY29yZSA/IGdhbWVyc2NvcmUgOiBcIlwiLFxuICAgICAgbGV2ZWw6IHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5fYXBwTGV2ZWwsXG4gICAgfTtcbiAgfVxuXG4gIGdldEF1dGhTdGF0ZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICBpc0F1dGhlbnRpY2F0aW5nOiB0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uX2lzQXV0aGVudGljYXRpbmcsXG4gICAgICAgIGlzQXV0aGVudGljYXRlZDogdGhpcy5fYXBwbGljYXRpb24uX2F1dGhlbnRpY2F0aW9uLl9pc0F1dGhlbnRpY2F0ZWQsXG4gICAgICAgIHVzZXI6IHRoaXMuZ2V0VXNlclN0YXRlKCksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFwcExldmVsKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICByZXNvbHZlKHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5fYXBwTGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgY2hlY2tBdXRoZW50aWNhdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHJlc29sdmUodGhpcy5fYXBwbGljYXRpb24uX2F1dGhlbnRpY2F0aW9uLmNoZWNrQXV0aGVudGljYXRpb24oKSk7XG4gICAgfSk7XG4gIH1cblxuICBsb2dpbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5zdGFydEF1dGhmbG93KCk7XG4gICAgICByZXNvbHZlKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcXVpdCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ucXVpdCgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc3RhcnQoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnJlc3RhcnQoKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhckRhdGEoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNlc3Npb24uZGVmYXVsdFNlc3Npb25cbiAgICAgICAgLmNsZWFyU3RvcmFnZURhdGEoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX2F1dGhlbnRpY2F0aW9uLl90b2tlblN0b3JlLmNsZWFyKCk7XG4gICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmRlbGV0ZShcInVzZXJcIik7XG4gICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmRlbGV0ZShcImF1dGhcIik7XG5cbiAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coXG4gICAgICAgICAgICBcImF1dGhlbnRpY2F0aW9uXCIsXG4gICAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgICAgXCJbc3RhcnRJcGNFdmVudHMoKV0gUmVjZWl2ZWQgcmVzdGFydCByZXF1ZXN0LiBSZXN0YXJ0aW5nIGFwcGxpY2F0aW9uLi4uXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnJlc3RhcnQoKTtcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgXCJhdXRoZW50aWNhdGlvblwiLFxuICAgICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICAgIFwiW3N0YXJ0SXBjRXZlbnRzKCldIEVycm9yOiBGYWlsZWQgdG8gY2xlYXIgbG9jYWwgc3RvcmFnZSFcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRPbmxpbmVGcmllbmRzKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2FwcGxpY2F0aW9uLl94Ym94V29ya2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gV29ya2VyIGlzIG5vdCBsb2FkZWQgeWV0Li5cbiAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHRoaXMuX2FwcGxpY2F0aW9uLl94Ym94V29ya2VyLl9vbmxpbmVGcmllbmRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uVWlTaG93bigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHJlc29sdmUoe30pO1xuICAgIH0pO1xuICB9XG5cbiAgaXNGdWxsc2NyZWVuKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgaXNGdWxsU2NyZWVuID0gdGhpcy5fYXBwbGljYXRpb24uX21haW5XaW5kb3cuaXNGdWxsU2NyZWVuKCk7XG4gICAgICByZXNvbHZlKGlzRnVsbFNjcmVlbilcbiAgICB9KTsgXG4gIH1cblxuICB0b2dnbGVGdWxsc2NyZWVuKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgaXNGdWxsU2NyZWVuID0gdGhpcy5fYXBwbGljYXRpb24uX21haW5XaW5kb3cuaXNGdWxsU2NyZWVuKCk7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fbWFpbldpbmRvdy5zZXRGdWxsU2NyZWVuKCFpc0Z1bGxTY3JlZW4pO1xuICAgICAgcmVzb2x2ZSh7fSlcbiAgICB9KTtcbiAgfVxuXG4gIGVudGVyRnVsbHNjcmVlbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9tYWluV2luZG93LnNldEZ1bGxTY3JlZW4odHJ1ZSk7XG4gICAgICByZXNvbHZlKHt9KVxuICAgIH0pO1xuICB9XG5cbiAgZXhpdEZ1bGxzY3JlZW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fbWFpbldpbmRvdy5zZXRGdWxsU2NyZWVuKGZhbHNlKTtcbiAgICAgIHJlc29sdmUoe30pXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuLi9hcHBsaWNhdGlvbidcblxuaW50ZXJmYWNlIEV2ZW50QXJncyB7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBkYXRhOiBhbnk7XG4gICAgZXJyb3I/OiBhbnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY0Jhc2Uge1xuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgY29uc3RydWN0b3IoYXBwbGljYXRpb246QXBwbGljYXRpb24pe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uXG4gICAgfVxuXG4gICAgb25FdmVudChjaGFubmVsLCBldmVudCwgYXJnczpFdmVudEFyZ3Mpe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0lwYzpSZWN2JywgJ1JlY2VpdmVkIGV2ZW50OiBbJytjaGFubmVsKyddJywgYXJncylcbiAgICAgICAgaWYodHlwZW9mIHRoaXNbYXJncy5hY3Rpb25dID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IChPYmplY3Qua2V5cyhhcmdzLmRhdGEpLmxlbmd0aCA+IDApID8gdGhpc1thcmdzLmFjdGlvbl0oYXJncy5kYXRhKSA6IHRoaXNbYXJncy5hY3Rpb25dKClcbiAgICAgICAgICAgIHJlc3BvbnNlLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZChjaGFubmVsLCB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGlkOiBhcmdzLmlkLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUjogSVBDIGNvbW11bmljYXRpb24gZXJyb3IgZnJvbSBiYWNrZW5kOicsIGVycm9yKVxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZChjaGFubmVsLCB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGlkOiBhcmdzLmlkLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0lwYycsICdFUlJPUjogQWN0aW9uIHdhcyBub3QgZm91bmQ6JywgYXJncy5hY3Rpb24sICdvbiBjaGFubmVsJywgY2hhbm5lbClcbiAgICAgICAgICAgIHRoaXMuc2VuZChjaGFubmVsLCB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBhcmdzLmFjdGlvbixcbiAgICAgICAgICAgICAgICBpZDogYXJncy5pZCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgICAgICBlcnJvcjogJ0lQQyBhY3Rpb24gZmFpbHVyZS4gQWN0aW9uIHdhcyBub3QgZm91bmQ6ICcrY2hhbm5lbCsnOicrYXJncy5hY3Rpb24sXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VuZChjaGFubmVsLCBhcmdzOkV2ZW50QXJncyl7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSXBjOlNlbmQnLCAnU2VuZGluZyBldmVudDogWycrY2hhbm5lbCsnXScsIEpTT04uc3RyaW5naWZ5KGFyZ3MpKVxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fbWFpbldpbmRvdy53ZWJDb250ZW50cy5zZW5kKGNoYW5uZWwsIHtcbiAgICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgICBpZDogYXJncy5pZCxcbiAgICAgICAgICAgIGRhdGE6IGFyZ3MuZGF0YSxcbiAgICAgICAgICAgIGVycm9yOiBhcmdzLmVycm9yLFxuICAgICAgICB9KVxuICAgIH1cbn0iLCJpbXBvcnQgSXBjQmFzZSBmcm9tICcuL2Jhc2UnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY0NvbnNvbGVzIGV4dGVuZHMgSXBjQmFzZSB7XG4gICAgLy8gX3N0cmVhbWluZ1Nlc3Npb25zOmFueSA9IHt9XG5cbiAgICBfY29uc29sZXMgPSBbXVxuICAgIF9jb25zb2xlc0xhc3RVcGRhdGUgPSAwXG5cbiAgICBnZXQoKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuX2NvbnNvbGVzTGFzdFVwZGF0ZSA8IERhdGUubm93KCkgLSA2MCoxMDAwKXtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl9hcHBsaWNhdGlvbi5fZXZlbnRzLl93ZWJBcGkuZ2V0UHJvdmlkZXIoJ3NtYXJ0Z2xhc3MnKS5nZXRDb25zb2xlc0xpc3QoKS50aGVuKChjb25zb2xlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl93ZWJBcGkuZ2V0UHJvdmlkZXIoJ3NtYXJ0Z2xhc3MnKS5nZXRDb25zb2xlc0xpc3QoKS50aGVuKChjb25zb2xlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb25zb2xlcyA9IGNvbnNvbGVzLnJlc3VsdFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb25zb2xlc0xhc3RVcGRhdGUgPSBEYXRlLm5vdygpXG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jb25zb2xlcylcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5fY29uc29sZXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxufSIsImltcG9ydCBJcGNCYXNlIGZyb20gJy4vYmFzZSdcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncyB9IGZyb20gJy4uLy4uL3JlbmRlcmVyL2NvbnRleHQvdXNlckNvbnRleHQuZGVmYXVsdHMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY1NldHRpbmdzIGV4dGVuZHMgSXBjQmFzZSB7XG5cbiAgICBzZXRTZXR0aW5ncyhhcmdzOih0eXBlb2YgZGVmYXVsdFNldHRpbmdzKSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3U2V0dGluZ3MgPSB7Li4uZGVmYXVsdFNldHRpbmdzLCAuLi5hcmdzfVxuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLnNldCgnc2V0dGluZ3MnLCBuZXdTZXR0aW5ncylcbiAgICAgICAgICAgIHJlc29sdmUobmV3U2V0dGluZ3MpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0U2V0dGluZ3MoKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHR5cGVvZiBkZWZhdWx0U2V0dGluZ3M+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5nZXQoJ3NldHRpbmdzJywgZGVmYXVsdFNldHRpbmdzKSBhcyBvYmplY3RcbiAgICAgICAgICAgIHJlc29sdmUoey4uLmRlZmF1bHRTZXR0aW5ncywgLi4uc2V0dGluZ3N9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJlc2V0U2V0dGluZ3MoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7Li4uZGVmYXVsdFNldHRpbmdzfVxuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmRlbGV0ZSgnc2V0dGluZ3MnKVxuXG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuc2V0KCdzZXR0aW5ncycsIHNldHRpbmdzKVxuICAgICAgICAgICAgcmVzb2x2ZShzZXR0aW5ncylcbiAgICAgICAgfSlcbiAgICB9XG59IiwiaW1wb3J0IElwY0Jhc2UgZnJvbSAnLi9iYXNlJ1xuaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4uL2FwcGxpY2F0aW9uJ1xuaW1wb3J0IFN0cmVhbU1hbmFnZXIgZnJvbSAnLi4vaGVscGVycy9zdHJlYW1tYW5hZ2VyJ1xuXG5pbnRlcmZhY2Ugc3RhcnRTdHJlYW1BcmdzIHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdGFyZ2V0OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBzZW5kU2RwQXJncyB7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgc2RwOiBhbnk7XG59XG5cbmludGVyZmFjZSBzZW5kSWNlQXJncyB7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgaWNlOiBhbnk7XG59XG5pbnRlcmZhY2Ugc2VuZEtlZXBhbGl2ZUFyZ3Mge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xufVxuaW50ZXJmYWNlIHN0b3BTdHJlYW1BcmdzIHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbn1cbmludGVyZmFjZSBnZXRQbGF5ZXJTdGF0ZUFyZ3Mge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcGNTdHJlYW1pbmcgZXh0ZW5kcyBJcGNCYXNlIHtcblxuICAgIF9zdHJlYW1NYW5hZ2VyOlN0cmVhbU1hbmFnZXJcblxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uOkFwcGxpY2F0aW9uKXtcbiAgICAgICAgc3VwZXIoYXBwbGljYXRpb24pXG5cbiAgICAgICAgdGhpcy5fc3RyZWFtTWFuYWdlciA9IG5ldyBTdHJlYW1NYW5hZ2VyKGFwcGxpY2F0aW9uKVxuICAgIH1cblxuICAgIHN0YXJ0U3RyZWFtKGFyZ3M6c3RhcnRTdHJlYW1BcmdzKXtcblxuICAgICAgICBpZihhcmdzLnR5cGUgPT09ICdob21lJyl7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5faXBjLl9jaGFubmVscy5jb25zb2xlcy5fY29uc29sZXNMYXN0VXBkYXRlID0gMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX2lwYy5fY2hhbm5lbHMueENsb3VkLl9yZWNlbnRUaXRsZXNMYXN0VXBkYXRlID0gMFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbU1hbmFnZXIuc3RhcnRTdHJlYW0oYXJncy50eXBlLCBhcmdzLnRhcmdldClcbiAgICB9XG5cbiAgICBzdG9wU3RyZWFtKGFyZ3M6c3RvcFN0cmVhbUFyZ3Mpe1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtTWFuYWdlci5zdG9wU3RyZWFtKGFyZ3Muc2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHNlbmRTZHAoYXJnczpzZW5kU2RwQXJncyl7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW1NYW5hZ2VyLnNlbmRTZHAoYXJncy5zZXNzaW9uSWQsIGFyZ3Muc2RwKVxuICAgIH1cblxuICAgIHNlbmRDaGF0U2RwKGFyZ3M6c2VuZFNkcEFyZ3Mpe1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtTWFuYWdlci5zZW5kQ2hhdFNkcChhcmdzLnNlc3Npb25JZCwgYXJncy5zZHApXG4gICAgfVxuXG4gICAgc2VuZEljZShhcmdzOnNlbmRJY2VBcmdzKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbU1hbmFnZXIuc2VuZEljZShhcmdzLnNlc3Npb25JZCwgYXJncy5pY2UpXG4gICAgfVxuXG4gICAgc2VuZEtlZXBhbGl2ZShhcmdzOnNlbmRLZWVwYWxpdmVBcmdzKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbU1hbmFnZXIuc2VuZEtlZXBhbGl2ZShhcmdzLnNlc3Npb25JZClcbiAgICB9XG5cbiAgICBnZXRQbGF5ZXJTdGF0ZShhcmdzOmdldFBsYXllclN0YXRlQXJncyl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9zdHJlYW1NYW5hZ2VyLmdldFNlc3Npb24oYXJncy5zZXNzaW9uSWQpKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFjdGl2ZVNlc3Npb25zKCl7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW1NYW5hZ2VyLmdldEFjdGl2ZVNlc3Npb25zKClcbiAgICB9XG5cbn0iLCJpbXBvcnQgSXBjQmFzZSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgQXBwbGljYXRpb24gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCI7XG5pbXBvcnQgVGl0bGVNYW5hZ2VyIGZyb20gXCIuLi9oZWxwZXJzL3RpdGxlbWFuYWdlclwiO1xuaW1wb3J0IEFjaGl2ZW1lbnRNYW5hZ2VyIGZyb20gXCIuLi9oZWxwZXJzL2FjaGl2ZW1lbnRtYW5hZ2VyXCI7XG5pbXBvcnQgeENsb3VkQXBpIGZyb20gXCIuLi9oZWxwZXJzL3hjbG91ZGFwaVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcGN4Q2xvdWQgZXh0ZW5kcyBJcGNCYXNlIHtcbiAgX3RpdGxlTWFuYWdlcjogVGl0bGVNYW5hZ2VyO1xuICBfYWNoaXZlbWVudE1hbmFnZXI6IEFjaGl2ZW1lbnRNYW5hZ2VyO1xuXG4gIF90aXRsZXNBcmVMb2FkZWQgPSBmYWxzZTtcblxuICBfdGl0bGVzID0gW107XG4gIF90aXRsZXNMYXN0VXBkYXRlID0gMDtcblxuICBfcmVjZW50VGl0bGVzID0gW107XG4gIF9yZWNlbnRUaXRsZXNMYXN0VXBkYXRlID0gMDtcblxuICBfbmV3VGl0bGVzID0gW107XG4gIF9uZXdUaXRsZXNMYXN0VXBkYXRlID0gMDtcblxuICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbjogQXBwbGljYXRpb24pIHtcbiAgICBzdXBlcihhcHBsaWNhdGlvbik7XG5cbiAgICB0aGlzLl90aXRsZU1hbmFnZXIgPSBuZXcgVGl0bGVNYW5hZ2VyKGFwcGxpY2F0aW9uKTtcbiAgICB0aGlzLl9hY2hpdmVtZW50TWFuYWdlciA9IG5ldyBBY2hpdmVtZW50TWFuYWdlcihhcHBsaWNhdGlvbik7XG4gIH1cblxuICBzdGFydFVwKCkge1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZyhcIklwYzp4Q2xvdWRcIiwgXCJTdGFydGluZyB4Q2xvdWQgSVBDIENoYW5uZWwuLi5cIik7XG4gIH1cblxuICBnZXRSZWNlbnRUaXRsZXMoKSB7XG4gICAgY29uc3Qgc3RyZWFtaW5nVG9rZW5zID0gdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zO1xuICAgIGNvbnN0IF94Q2xvdWRBcGkgPSBuZXcgeENsb3VkQXBpKFxuICAgICAgdGhpcy5fYXBwbGljYXRpb24sXG4gICAgICBzdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4uZ2V0RGVmYXVsdFJlZ2lvbigpLmJhc2VVcmkuc3Vic3RyaW5nKDgpLFxuICAgICAgc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmRhdGEuZ3NUb2tlbixcbiAgICAgIFwiY2xvdWRcIlxuICAgICk7XG4gICAgcmV0dXJuIF94Q2xvdWRBcGkuZ2V0UmVjZW50VGl0bGVzKCk7XG4gIH1cblxuICBnZXRYaG9tZVRva2VuKCkge1xuICAgIGNvbnNvbGUubG9nKFwiZ2V0WGhvbWVUb2tlblwiKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zICYmXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2Vucy54SG9tZVRva2VuXG4gICAgICApIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnMueEhvbWVUb2tlbi5kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRYaG9tZVRva2VuRGVmYXVsdChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2Vucy54SG9tZVRva2VuLnNldERlZmF1bHRSZWdpb24obmFtZSk7XG4gICAgICByZXNvbHZlKG51bGwpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0WGNsb3VkVG9rZW4oKSB7XG4gICAgY29uc29sZS5sb2coXCJnZXRYY2xvdWRUb2tlblwiKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zICYmXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlblxuICAgICAgKSB7XG4gICAgICAgIHJlc29sdmUodGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFhjbG91ZFRva2VuRGVmYXVsdChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4pIHtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLnNldERlZmF1bHRSZWdpb24obmFtZSk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKHt9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFRpdGxlcygpIHtcbiAgICBjb25zdCBzdHJlYW1pbmdUb2tlbnMgPSB0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnM7XG4gICAgY29uc3QgX3hDbG91ZEFwaSA9IG5ldyB4Q2xvdWRBcGkoXG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbixcbiAgICAgIHN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5nZXREZWZhdWx0UmVnaW9uKCkuYmFzZVVyaS5zdWJzdHJpbmcoOCksXG4gICAgICBzdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4uZGF0YS5nc1Rva2VuLFxuICAgICAgXCJjbG91ZFwiXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgX3hDbG91ZEFwaVxuICAgICAgICAuZ2V0VGl0bGVzKClcbiAgICAgICAgLnRoZW4oKHRpdGxlczogYW55KSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh0aXRsZXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRHYW1lUGFzc1Byb2R1Y3RzKHRpdGxlczogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuX3RpdGxlTWFuYWdlci5nZXRHYW1lUGFzc1Byb2R1Y3RzKHRpdGxlcyk7XG4gIH1cblxuICBnZXROZXdUaXRsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RpdGxlTWFuYWdlci5nZXROZXdUaXRsZXMoKTtcbiAgfVxuXG4gIGdldEhpc3RvcnlBY2hpdmVtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYWNoaXZlbWVudE1hbmFnZXIuZ2V0SGlzdG9yeUFjaGl2ZW1lbnRzKCk7XG4gIH1cblxuICBnZXRBY2hpdmVtZW50RGV0YWlsKHRpdGxlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9hY2hpdmVtZW50TWFuYWdlci5nZXRBY2hpdmVtZW50RGV0YWlsKHRpdGxlSWQpO1xuICB9XG59XG4iLCJpbXBvcnQgVG9rZW5TdG9yZSBmcm9tICcuL3Rva2Vuc3RvcmUnXG5pbXBvcnQgWGFsIGZyb20gJy4veGFsJ1xuXG5leHBvcnQge1xuICAgIFRva2VuU3RvcmUsXG4gICAgWGFsLFxufSIsImltcG9ydCB7IEluY29taW5nSHR0cEhlYWRlcnMgfSBmcm9tICdodHRwJ1xuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIdHRwIHtcblxuICAgIGdldFJlcXVlc3QoaG9zdCwgcGF0aCwgaGVhZGVycykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SHR0cFJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IGhvc3RIZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgIC8vICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxuICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgcG9ydDogNDQzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhvc3RIZWFkZXJzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3Qob3B0aW9ucywgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZURhdGEgPSAnJ1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJlcy5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRGF0YSArPSBkYXRhXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJlcy5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXNDb2RlID09IDIwMCB8fCByZXMuc3RhdHVzQ29kZSA9PSAyMDQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2VEYXRhLnRvU3RyaW5nKCkgPT09ICcnKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBIdHRwUmVzcG9uc2Uoe30sIHJlcy5oZWFkZXJzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgSHR0cFJlc3BvbnNlKEpTT04ucGFyc2UocmVzcG9uc2VEYXRhLnRvU3RyaW5nKCkpLCByZXMuaGVhZGVycykpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c2NvZGU6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlc3BvbnNlRGF0YS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdFcnJvciBmZXRjaGluZyAnK2hvc3QrcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXEub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmVxLmVuZCgpXG5cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwb3N0UmVxdWVzdChob3N0LCBwYXRoLCBoZWFkZXJzLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxIdHRwUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgaG9zdEhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgLy8gJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZih0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnN0cmluZ2lmeShkYXRhKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxuICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgcG9ydDogNDQzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhvc3RIZWFkZXJzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG9wdGlvbnMsIGRhdGEpXG5cbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3Qob3B0aW9ucywgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZURhdGEgPSAnJ1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJlcy5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRGF0YSArPSBkYXRhXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJlcy5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXNDb2RlID09IDIwMCB8fCByZXMuc3RhdHVzQ29kZSA9PSAyMDIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2VEYXRhLnRvU3RyaW5nKCkgPT09ICcnKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBIdHRwUmVzcG9uc2Uoe30sIHJlcy5oZWFkZXJzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgSHR0cFJlc3BvbnNlKEpTT04ucGFyc2UocmVzcG9uc2VEYXRhLnRvU3RyaW5nKCkpLCByZXMuaGVhZGVycykpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c2NvZGU6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlc3BvbnNlRGF0YS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdFcnJvciBmZXRjaGluZyAnK2hvc3QrcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXEub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmVxLndyaXRlKGRhdGEpXG4gICAgICAgICAgICByZXEuZW5kKClcblxuICAgICAgICB9KVxuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgSHR0cFJlc3BvbnNlIHtcblxuICAgIGRhdGE6YW55XG4gICAgaGVhZGVyczpJbmNvbWluZ0h0dHBIZWFkZXJzXG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOmFueSwgaGVhZGVyczpJbmNvbWluZ0h0dHBIZWFkZXJzKXtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzXG4gICAgfVxuXG4gICAgaGVhZGVyKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlcnNcbiAgICB9XG5cbiAgICBib2R5KCl7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW4ge1xuICAgIGRhdGE6YW55XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVTZWNvbmRzTGVmdChkYXRlOkRhdGUpe1xuICAgICAgICBjb25zdCBleHBpcmVzT24gPSBkYXRlXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigoZXhwaXJlc09uLmdldFRpbWUoKSAtIGN1cnJlbnREYXRlLmdldFRpbWUoKSkgLyAxMDAwKVxuICAgIH1cblxuICAgIGdldFNlY29uZHNWYWxpZCgpe1xuICAgICAgICBjb25zb2xlLmxvZygnV2FybmluZzogZ2V0U2Vjb25kc1ZhbGlkIG5vdCBpbXBsZW1lbnRlZCcpXG5cbiAgICAgICAgcmV0dXJuIDBcbiAgICB9XG5cbiAgICBpc1ZhbGlkKCl7IFxuICAgICAgICBjb25zb2xlLmxvZygnV2FybmluZzogaXNWYWxpZCBub3QgaW1wbGVtZW50ZWQnKVxuXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGdldFVzZXJIYXNoKCl7XG4gICAgICAgIGlmKCdVc2VyVG9rZW4nIGluIHRoaXMuZGF0YSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLlVzZXJUb2tlbi5EaXNwbGF5Q2xhaW1zLnh1aVswXS51aHNcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGdldEdhbWVydGFnKCl7XG4gICAgICAgIGlmKCdBdXRob3JpemF0aW9uVG9rZW4nIGluIHRoaXMuZGF0YSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLkF1dGhvcml6YXRpb25Ub2tlbi5EaXNwbGF5Q2xhaW1zLnh1aVswXS5ndGdcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbn0iLCJpbXBvcnQgVG9rZW4gZnJvbSAnLi4vdG9rZW4nXG5cbmV4cG9ydCBpbnRlcmZhY2UgSURldmljZUNvZGUge1xuICAgIElzc3VlSW5zdGFudDogc3RyaW5nXG4gICAgTm90QWZ0ZXI6IHN0cmluZ1xuICAgIFRva2VuOiBzdHJpbmdcbiAgICBEaXNwbGF5Q2xhaW1zOiB7XG4gICAgICAgIHh1aToge1xuICAgICAgICAgICAgdWhzOiBzdHJpbmdcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGV2aWNlVG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gICAgZGF0YTpJRGV2aWNlQ29kZVxuXG4gICAgY29uc3RydWN0b3IoZGF0YTpJRGV2aWNlQ29kZSkge1xuICAgICAgICBzdXBlcihkYXRhKVxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfVxuXG4gICAgZ2V0U2Vjb25kc1ZhbGlkKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5Ob3RBZnRlcikpXG4gICAgfVxuXG4gICAgaXNWYWxpZCgpe1xuXG4gICAgICAgIGlmKHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLk5vdEFmdGVyKSkgPD0gMCl7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxufSIsImltcG9ydCBUb2tlbiBmcm9tICcuLi90b2tlbidcbmltcG9ydCBVc2VyVG9rZW4gZnJvbSAnLi91c2VydG9rZW4nXG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1zYWxUb2tlbiB7XG4gICAgbHB0OiBzdHJpbmdcbiAgICByZWZyZXNoX3Rva2VuOiBzdHJpbmdcbiAgICB1c2VyX2lkOiBzdHJpbmdcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXNhbFRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICAgIGRhdGE6SU1zYWxUb2tlblxuXG4gICAgY29uc3RydWN0b3IoZGF0YTpJTXNhbFRva2VuKSB7XG4gICAgICAgIHN1cGVyKGRhdGEpXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9XG59IiwiaW1wb3J0IFRva2VuIGZyb20gJy4uL3Rva2VuJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElTaXN1VG9rZW4ge1xuICAgIERldmljZVRva2VuOiBzdHJpbmdcbiAgICBUaXRsZVRva2VuOiBJU2lzdVRpdGxlVG9rZW5cbiAgICBVc2VyVG9rZW46IElTaXN1VXNlclRva2VuXG4gICAgQXV0aG9yaXphdGlvblRva2VuXG4gICAgV2ViUGFnZTogc3RyaW5nXG4gICAgU2FuZGJveDogc3RyaW5nXG4gICAgVXNlTW9kZXJuR2FtZXJ0YWc6IGJvb2xlYW5cbiAgICBGbG93OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIElTaXN1VXNlclRva2VuIHtcbiAgICBJc3N1ZUluc3RhbnQ6IHN0cmluZ1xuICAgIE5vdEFmdGVyOiBzdHJpbmdcbiAgICBUb2tlbjogc3RyaW5nXG4gICAgRGlzcGxheUNsYWltczoge1xuICAgICAgICB4dWk6IHtcbiAgICAgICAgICAgIHVoczogc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmludGVyZmFjZSBJU2lzdVRpdGxlVG9rZW4ge1xuICAgIElzc3VlSW5zdGFudDogc3RyaW5nXG4gICAgTm90QWZ0ZXI6IHN0cmluZ1xuICAgIFRva2VuOiBzdHJpbmdcbiAgICBEaXNwbGF5Q2xhaW1zOiB7XG4gICAgICAgIHh0aToge1xuICAgICAgICAgICAgdGlkOiBzdHJpbmdcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lzdVRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICAgIGRhdGE6SVNpc3VUb2tlblxuXG4gICAgY29uc3RydWN0b3IoZGF0YTpJU2lzdVRva2VuKSB7XG4gICAgICAgIHN1cGVyKGRhdGEpXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9XG5cbiAgICBnZXRTZWNvbmRzVmFsaWQoKXtcbiAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnRUaXRsZSA9IHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLlRpdGxlVG9rZW4uTm90QWZ0ZXIpKVxuICAgICAgICBjb25zdCBzZWNvbmRzTGVmdFVzZXIgPSB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5Vc2VyVG9rZW4uTm90QWZ0ZXIpKVxuICAgICAgICBjb25zdCBzZWNvbmRzTGVmdEF1dGhvcml6YXRpb24gPSB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5BdXRob3JpemF0aW9uVG9rZW4uTm90QWZ0ZXIpKVxuICAgICAgICByZXR1cm4gTWF0aC5taW4oc2Vjb25kc0xlZnRUaXRsZSwgc2Vjb25kc0xlZnRVc2VyLCBzZWNvbmRzTGVmdEF1dGhvcml6YXRpb24pXG4gICAgfVxuXG4gICAgaXNWYWxpZCgpe1xuICAgICAgICBjb25zdCBzZWNvbmRzTGVmdFRpdGxlID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuVGl0bGVUb2tlbi5Ob3RBZnRlcikpXG4gICAgICAgIGlmKHNlY29uZHNMZWZ0VGl0bGUgPD0gMCl7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlY29uZHNMZWZ0VXNlciA9IHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLlVzZXJUb2tlbi5Ob3RBZnRlcikpXG4gICAgICAgIGlmKHNlY29uZHNMZWZ0VXNlciA8PSAwKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnRBdXRob3JpemF0aW9uID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuQXV0aG9yaXphdGlvblRva2VuLk5vdEFmdGVyKSlcbiAgICAgICAgaWYoc2Vjb25kc0xlZnRBdXRob3JpemF0aW9uIDw9IDApe1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGdldFVzZXJIYXNoKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuVXNlclRva2VuLkRpc3BsYXlDbGFpbXMueHVpWzBdLnVoc1xuICAgIH1cblxuICAgIGdldEdhbWVydGFnKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuQXV0aG9yaXphdGlvblRva2VuLkRpc3BsYXlDbGFpbXMueHVpWzBdLmd0Z1xuICAgIH1cbn0iLCJpbXBvcnQgVG9rZW4gZnJvbSAnLi4vdG9rZW4nXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbVRva2VuIHtcbiAgICBvZmZlcmluZ1NldHRpbmdzOiBJT2ZmZXJpbmdTZXR0aW5nc1xuICAgIG1hcmtldDogc3RyaW5nXG4gICAgZ3NUb2tlbjogc3RyaW5nXG4gICAgdG9rZW5UeXBlOiBzdHJpbmdcbiAgICBkdXJhdGlvbkluU2Vjb25kczogbnVtYmVyXG59XG4gIFxuZXhwb3J0IGludGVyZmFjZSBJT2ZmZXJpbmdTZXR0aW5ncyB7XG4gICAgYWxsb3dSZWdpb25TZWxlY3Rpb246IGJvb2xlYW5cbiAgICByZWdpb25zOiBJUmVnaW9uW11cbiAgICBzZWxlY3RhYmxlU2VydmVyVHlwZXM6IGFueVxuICAgIGNsaWVudENsb3VkU2V0dGluZ3M6IElDbGllbnRDbG91ZFNldHRpbmdzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlZ2lvbiB7XG4gICAgbmFtZTogc3RyaW5nXG4gICAgYmFzZVVyaTogc3RyaW5nXG4gICAgbmV0d29ya1Rlc3RIb3N0bmFtZTogc3RyaW5nXG4gICAgaXNEZWZhdWx0OiBib29sZWFuXG4gICAgc3lzdGVtVXBkYXRlR3JvdXBzOiBhbnlcbiAgICBmYWxsYmFja1ByaW9yaXR5OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xpZW50Q2xvdWRTZXR0aW5ncyB7XG4gICAgRW52aXJvbm1lbnRzOiBJRW52aXJvbm1lbnRbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFbnZpcm9ubWVudCB7XG4gICAgTmFtZTogc3RyaW5nXG4gICAgQXV0aEJhc2VVcmk/OiBzdHJpbmdcbn0gIFxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1pbmdUb2tlbiBleHRlbmRzIFRva2VuIHtcblxuICAgIHB1YmxpYyBkYXRhOklTdHJlYW1Ub2tlblxuICAgIHByaXZhdGUgX29iamVjdENyZWF0ZVRpbWUgPSBEYXRlLm5vdygpXG5cbiAgICBjb25zdHJ1Y3Rvcih0b2tlbkRhdGE6SVN0cmVhbVRva2VuKXtcbiAgICAgICAgc3VwZXIodG9rZW5EYXRhKVxuICAgICAgICB0aGlzLmRhdGEgPSB0b2tlbkRhdGFcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVTZWNvbmRzTGVmdChkYXRlOkRhdGUpe1xuICAgICAgICBjb25zdCBleHBpcmVzT24gPSBkYXRlXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigoZXhwaXJlc09uLmdldFRpbWUoKSAtIGN1cnJlbnREYXRlLmdldFRpbWUoKSkgLyAxMDAwKVxuICAgIH1cblxuICAgIGdldFNlY29uZHNWYWxpZCgpe1xuICAgICAgICBpZih0aGlzLl9vYmplY3RDcmVhdGVUaW1lICsgKHRoaXMuZGF0YS5kdXJhdGlvbkluU2Vjb25kcyoxMDAwKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLl9vYmplY3RDcmVhdGVUaW1lICsgKHRoaXMuZGF0YS5kdXJhdGlvbkluU2Vjb25kcyoxMDAwKSkpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMFxuICAgIH1cblxuICAgIGlzVmFsaWQoKXtcbiAgICAgICAgaWYodGhpcy5fb2JqZWN0Q3JlYXRlVGltZSArICh0aGlzLmRhdGEuZHVyYXRpb25JblNlY29uZHMqMTAwMCkpe1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnQgPSB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuX29iamVjdENyZWF0ZVRpbWUgKyAodGhpcy5kYXRhLmR1cmF0aW9uSW5TZWNvbmRzKjEwMDApKSlcbiAgICAgICAgICAgIHJldHVybiBzZWNvbmRzTGVmdCA+IDBcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGdldE1hcmtldCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLm1hcmtldFxuICAgIH1cblxuICAgIGdldFJlZ2lvbnMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5vZmZlcmluZ1NldHRpbmdzLnJlZ2lvbnNcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0UmVnaW9uKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEub2ZmZXJpbmdTZXR0aW5ncy5yZWdpb25zLmZpbHRlcihyZWdpb24gPT4gcmVnaW9uLmlzRGVmYXVsdClbMF1cbiAgICB9XG5cbiAgICBzZXREZWZhdWx0UmVnaW9uKG5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmRhdGEub2ZmZXJpbmdTZXR0aW5ncy5yZWdpb25zLmZvckVhY2gocmVnaW9uID0+IHtcbiAgICAgICAgICAgIGlmIChyZWdpb24ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgIHJlZ2lvbi5pc0RlZmF1bHQgPSB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlZ2lvbi5pc0RlZmF1bHQgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldEVudmlyb25tZW50cygpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLm9mZmVyaW5nU2V0dGluZ3MuY2xpZW50Q2xvdWRTZXR0aW5ncy5FbnZpcm9ubWVudHNcbiAgICB9XG59IiwiaW1wb3J0IFRva2VuIGZyb20gJy4uL3Rva2VuJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyVG9rZW4ge1xuICAgIHRva2VuX3R5cGU6IHN0cmluZ1xuICAgIGV4cGlyZXNfaW46IG51bWJlclxuICAgIHNjb3BlOiBzdHJpbmdcbiAgICBhY2Nlc3NfdG9rZW46IHN0cmluZ1xuICAgIHJlZnJlc2hfdG9rZW46IHN0cmluZ1xuICAgIHVzZXJfaWQ6IHN0cmluZ1xuICAgIGV4cGlyZXNfb246IHN0cmluZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVc2VyVG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gICAgZGF0YTpJVXNlclRva2VuXG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOklVc2VyVG9rZW4pIHtcbiAgICAgICAgc3VwZXIoZGF0YSlcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH1cblxuICAgIGNhbGN1bGF0ZVNlY29uZHNMZWZ0KGRhdGU6RGF0ZSl7XG4gICAgICAgIGNvbnN0IGV4cGlyZXNPbiA9IGRhdGVcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKChleHBpcmVzT24uZ2V0VGltZSgpIC0gY3VycmVudERhdGUuZ2V0VGltZSgpKSAvIDEwMDApXG4gICAgfVxuXG4gICAgZ2V0U2Vjb25kc1ZhbGlkKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5leHBpcmVzX29uKSlcbiAgICB9XG5cbiAgICBpc1ZhbGlkKCl7XG4gICAgICAgIGNvbnN0IHNlY29uZHNMZWZ0ID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuZXhwaXJlc19vbikpXG4gICAgICAgIHJldHVybiBzZWNvbmRzTGVmdCA+IDBcbiAgICB9XG59IiwiaW1wb3J0IFRva2VuIGZyb20gJy4uL3Rva2VuJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElYc3RzVG9rZW4ge1xuICAgIElzc3VlSW5zdGFudDogc3RyaW5nXG4gICAgTm90QWZ0ZXI6IHN0cmluZ1xuICAgIFRva2VuOiBzdHJpbmdcbiAgICBEaXNwbGF5Q2xhaW1zOiB7XG4gICAgICAgIHh1aToge1xuICAgICAgICAgICAgdWhzOiBzdHJpbmdcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWHN0c1Rva2VuIGV4dGVuZHMgVG9rZW4ge1xuICAgIGRhdGE6SVhzdHNUb2tlblxuXG4gICAgY29uc3RydWN0b3IoZGF0YTpJWHN0c1Rva2VuKSB7XG4gICAgICAgIHN1cGVyKGRhdGEpXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9XG5cbiAgICBnZXRTZWNvbmRzVmFsaWQoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLk5vdEFmdGVyKSlcbiAgICB9XG5cbiAgICBpc1ZhbGlkKCl7XG5cbiAgICAgICAgaWYodGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuTm90QWZ0ZXIpKSA8PSAwKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG59IiwiaW1wb3J0IFNpc3VUb2tlbiBmcm9tICcuL2xpYi90b2tlbnMvc2lzdXRva2VuJ1xuaW1wb3J0IFVzZXJUb2tlbiBmcm9tICcuL2xpYi90b2tlbnMvdXNlcnRva2VuJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlblN0b3JlIHtcblxuICAgIF9maWxlcGF0aDpzdHJpbmcgPSAnJ1xuXG4gICAgLy8gTWFpbiB0b2tlbnNcbiAgICBfdXNlclRva2VuOlVzZXJUb2tlbiB8IHVuZGVmaW5lZFxuICAgIF9zaXN1VG9rZW46U2lzdVRva2VuIHwgdW5kZWZpbmVkXG4gICAgX2p3dEtleXM6YW55XG5cbiAgICAvLyBTdWItVG9rZW5zXG4gICAgbG9hZChmaWxlcGF0aDpzdHJpbmcsIHNpbGVudCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2ZpbGVwYXRoID0gZmlsZXBhdGhcblxuICAgICAgICBpZihmcy5leGlzdHNTeW5jKGZpbGVwYXRoKSl7XG4gICAgICAgICAgICBjb25zdCBmaWxlQ29udGVudHMgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZXBhdGgpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkSnNvbihmaWxlQ29udGVudHMudG9TdHJpbmcoKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmKCEgc2lsZW50KXtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Rva2VuU3RvcmU6IEZpbGUgbm90IGZvdW5kOiAnICsgZmlsZXBhdGgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBsb2FkSnNvbihqc29uOnN0cmluZykge1xuICAgICAgICBjb25zdCBqc29uRGF0YTp7IHVzZXJUb2tlbjphbnksIHNpc3VUb2tlbjphbnksIGp3dEtleXM6YW55IH0gPSBKU09OLnBhcnNlKGpzb24pXG5cbiAgICAgICAgaWYoanNvbkRhdGEudXNlclRva2VuKXtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJUb2tlbiA9IG5ldyBVc2VyVG9rZW4oanNvbkRhdGEudXNlclRva2VuKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoanNvbkRhdGEuc2lzdVRva2VuKXtcbiAgICAgICAgICAgIHRoaXMuX3Npc3VUb2tlbiA9IG5ldyBTaXN1VG9rZW4oanNvbkRhdGEuc2lzdVRva2VuKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoanNvbkRhdGEuand0S2V5cyl7XG4gICAgICAgICAgICB0aGlzLl9qd3RLZXlzID0ganNvbkRhdGEuand0S2V5c1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBzZXRVc2VyVG9rZW4odXNlclRva2VuOlVzZXJUb2tlbikge1xuICAgICAgICBjb25zdCBleHBpcmVEYXRlID0gbmV3IERhdGUoKVxuICAgICAgICBleHBpcmVEYXRlLnNldFNlY29uZHMoZXhwaXJlRGF0ZS5nZXRTZWNvbmRzKCkgKyB1c2VyVG9rZW4uZGF0YS5leHBpcmVzX2luKVxuXG4gICAgICAgIHRoaXMuX3VzZXJUb2tlbiA9IG5ldyBVc2VyVG9rZW4oeyAuLi51c2VyVG9rZW4uZGF0YSwgZXhwaXJlc19vbjogZXhwaXJlRGF0ZS50b0lTT1N0cmluZygpIH0pXG4gICAgfVxuXG4gICAgZ2V0VXNlclRva2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclRva2VuXG4gICAgfVxuXG4gICAgc2V0U2lzdVRva2VuKHNpc3VUb2tlbjpTaXN1VG9rZW4pIHtcbiAgICAgICAgdGhpcy5fc2lzdVRva2VuID0gbmV3IFNpc3VUb2tlbihzaXN1VG9rZW4uZGF0YSlcbiAgICB9XG5cbiAgICBnZXRTaXN1VG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXN1VG9rZW5cbiAgICB9XG5cbiAgICBzZXRKd3RLZXlzKGp3dEtleXM6YW55KSB7XG4gICAgICAgIHRoaXMuX2p3dEtleXMgPSBqd3RLZXlzXG4gICAgfVxuXG4gICAgc2F2ZSgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHVzZXJUb2tlbjogdGhpcy5fdXNlclRva2VuPy5kYXRhLFxuICAgICAgICAgICAgc2lzdVRva2VuOiB0aGlzLl9zaXN1VG9rZW4/LmRhdGEsXG4gICAgICAgICAgICBqd3RLZXlzOiB0aGlzLl9qd3RLZXlzXG4gICAgICAgIH1cblxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuX2ZpbGVwYXRoLCBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSlcbiAgICB9XG5cbiAgICByZW1vdmVBbGwoKSB7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5fZmlsZXBhdGgsIEpTT04uc3RyaW5naWZ5KHt9KSlcbiAgICB9XG5cbiAgICBoYXNWYWxpZEF1dGhUb2tlbnMoKSB7XG4gICAgICAgIGlmKHRoaXMuX3VzZXJUb2tlbil7XG4gICAgICAgICAgICBpZighIHRoaXMuX3VzZXJUb2tlbi5pc1ZhbGlkKCkpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLl9zaXN1VG9rZW4pe1xuICAgICAgICAgICAgaWYoISB0aGlzLl91c2VyVG9rZW4uaXNWYWxpZCgpKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG59IiwiaW1wb3J0IEh0dHAgZnJvbSAnLi9saWIvaHR0cCdcbmltcG9ydCBjcnlwdG8sIHsgc3VidGxlLCBLZXlPYmplY3QgfSBmcm9tICdjcnlwdG8nXG5pbXBvcnQgeyBleHBvcnRKV0sgfSBmcm9tICdqb3NlJ1xuXG5pbXBvcnQgRGV2aWNlVG9rZW4gZnJvbSAnLi9saWIvdG9rZW5zL2RldmljZXRva2VuJ1xuaW1wb3J0IFNpc3VUb2tlbiwgeyBJU2lzdVRva2VuIH0gZnJvbSAnLi9saWIvdG9rZW5zL3Npc3V0b2tlbidcbmltcG9ydCBVc2VyVG9rZW4sIHsgSVVzZXJUb2tlbiB9IGZyb20gJy4vbGliL3Rva2Vucy91c2VydG9rZW4nXG5pbXBvcnQgU3RyZWFtaW5nVG9rZW4gZnJvbSAnLi9saWIvdG9rZW5zL3N0cmVhbWluZ3Rva2VuJ1xuaW1wb3J0IFhzdHNUb2tlbiBmcm9tICcuL2xpYi90b2tlbnMveHN0c3Rva2VuJ1xuaW1wb3J0IE1zYWxUb2tlbiBmcm9tICcuL2xpYi90b2tlbnMvbXNhbHRva2VuJ1xuXG5pbXBvcnQgVG9rZW5TdG9yZSBmcm9tICcuL3Rva2Vuc3RvcmUnXG5cbmNvbnN0IFVVSUQgPSByZXF1aXJlKCd1dWlkLTEzNDUnKVxuY29uc3QgbmV4dFVVSUQgPSAoKSA9PiBVVUlELnYzKHsgbmFtZXNwYWNlOiAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JywgbmFtZTogRGF0ZS5ub3coKS50b1N0cmluZygpIH0pXG5cbmludGVyZmFjZSBJQ29kZUNoYWxsYW5nZSB7XG4gICAgdmFsdWU6IHN0cmluZ1xuICAgIG1ldGhvZDogc3RyaW5nXG4gICAgdmVyaWZpZXI6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgSVNpc3VBdXRoZW50aWNhdGlvblJlc3BvbnNlIHtcbiAgICBNc2FPYXV0aFJlZGlyZWN0OiBzdHJpbmdcbiAgICBNc2FSZXF1ZXN0UGFyYW1ldGVyczoge31cbiAgICBTZXNzaW9uSWQ6IHN0cmluZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBYYWwge1xuXG4gICAga2V5c1xuICAgIGp3dEtleXNcblxuICAgIF9hcHAgPSB7XG4gICAgICAgIEFwcElkOiAnMDAwMDAwMDA0YzIwYTkwOCcsIC8vJzAwMDAwMDAwNGMxMmFlNmYnLCAvLyAwMDAwMDAwMDQ4MTgzNTIyID0gd29ya2luZywgYnV0IG1pbmVjcmFmdCAtLTw8PCAwMDAwMDAwMDRjMTJhZTZmIHdvcmtzLCB4Ym94IGFwcFxuICAgICAgICBUaXRsZUlkOiAnMzI4MTc4MDc4JywgLy8nMzI4MTc4MDc4JywgLy8gMTAxNjg5ODQzOSA9IHdvcmtpbmdcbiAgICAgICAgUmVkaXJlY3RVcmk6ICdtcy14YWwtMDAwMDAwMDA0YzIwYTkwODovL2F1dGgnXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IodG9rZW5TdG9yZT86VG9rZW5TdG9yZSl7XG4gICAgICAgIGlmKHRva2VuU3RvcmUgJiYgdG9rZW5TdG9yZS5fand0S2V5cyl7XG4gICAgICAgICAgICB0aGlzLnNldEtleXModG9rZW5TdG9yZS5fand0S2V5cy5qd3QpLnRoZW4oKGtleXMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnS2V5cyBsb2FkZWQ6Jywga2V5cylcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gbG9hZCBrZXlzOicsIGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgc2V0S2V5cyhvcmdKd3RLZXkpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgc3VidGxlLmltcG9ydEtleSgnandrJywgb3JnSnd0S2V5LCB7IG5hbWU6ICdFQ0RTQScsIG5hbWVkQ3VydmU6ICdQLTI1NicgfSwgdHJ1ZSwgWydzaWduJ10pLnRoZW4oand0S2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gS2V5T2JqZWN0LmZyb20oand0S2V5KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuand0S2V5cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcmF3OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlS2V5OiBwcml2YXRlS2V5XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGp3dDogb3JnSnd0S2V5XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmp3dEtleXMpXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdrZXkgZXJyb3I6JywgZXJyb3IpXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0S2V5cygpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5qd3RLZXlzICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5qd3RLZXlzKVxuXG4gICAgICAgICAgICB9IGVsc2UgaWYodGhpcy5rZXlzID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHRoaXMua2V5cyA9IGNyeXB0by5nZW5lcmF0ZUtleVBhaXJTeW5jKCdlYycsIHsgbmFtZWRDdXJ2ZTogJ1AtMjU2JyB9KVxuXG4gICAgICAgICAgICAgICAgdGhpcy5qd3RLZXlzID0ge1xuICAgICAgICAgICAgICAgICAgICByYXc6IHRoaXMua2V5c1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGV4cG9ydEpXSyh0aGlzLmtleXMucHVibGljS2V5KS50aGVuKGp3ayA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGp3a0tleSA9IHsgLi4uandrLCBhbGc6ICdFUzI1NicsIHVzZTogJ3NpZycgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmp3dEtleXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IHRoaXMua2V5cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp3dDogandrS2V5XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqd2tLZXlzID0gdGhpcy5qd3RLZXlzLnJhdy5wcml2YXRlS2V5LmV4cG9ydCh7IHR5cGU6ICdwa2NzOCcsIGZvcm1hdDogJ2p3aycgfSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRLZXlzKGp3a0tleXMpLnRoZW4oa2V5cyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGtleXMpXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmp3dEtleXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY29kZUNoYWxsYW5nZVxuXG4gICAgZ2V0Q29kZUNoYWxsYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElDb2RlQ2hhbGxhbmdlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLmNvZGVDaGFsbGFuZ2UgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZV92ZXJpZmllciA9IEJ1ZmZlci5mcm9tKGNyeXB0by5wc2V1ZG9SYW5kb21CeXRlcygzMikpLnRvU3RyaW5nKCdiYXNlNjR1cmwnKVxuXG4gICAgICAgICAgICAgICAgY29uc3QgY29kZV9jaGFsbGVuZ2UgPSBjcnlwdG9cbiAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZShjb2RlX3ZlcmlmaWVyKVxuICAgICAgICAgICAgICAgICAgICAuZGlnZXN0KCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvZGVDaGFsbGFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb2RlX2NoYWxsZW5nZS50b1N0cmluZygnYmFzZTY0dXJsJyksXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1MyNTYnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllcjogY29kZV92ZXJpZmllcixcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5jb2RlQ2hhbGxhbmdlKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldFJhbmRvbVN0YXRlKGJ5dGVzID0gNjQpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyhieXRlcykudG9TdHJpbmcoJ2Jhc2U2NHVybCcpXG4gICAgfVxuXG4gICAgZ2V0RGV2aWNlVG9rZW5IYWNrKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnZ2V0RGV2aWNlVG9rZW5IYWNrLi4uJylcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPERldmljZVRva2VuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldERldmljZVRva2VuKCkudGhlbihkZXZpY2VUb2tlbiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2dldERldmljZVRva2VuIHN1Y2Nlc3M6JywgZGV2aWNlVG9rZW4pXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShkZXZpY2VUb2tlbilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXNjb2RlID09IDQwMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGV2aWNlIHRva2VuIGdldCBlcnJvciwgcmV0cnkuLi4nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREZXZpY2VUb2tlbkhhY2soKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdClcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXREZXZpY2VUb2tlbigpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2dldERldmljZVRva2VuLi4uJylcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPERldmljZVRva2VuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEtleXMoKS50aGVuKChqd3RLZXlzOmFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhNZXRob2Q6ICdQcm9vZk9mUG9zc2Vzc2lvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBJZDogYHske25leHRVVUlEKCl9fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VUeXBlOiAnQW5kcm9pZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxOdW1iZXI6IGB7JHtuZXh0VVVJRCgpfX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbjogJzE1LjAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvb2ZLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlJzogJ3NpZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZyc6ICdFUzI1NicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t0eSc6ICdFQycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Nydic6ICdQLTI1NicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3gnOiBqd3RLZXlzLmp3dC54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5Jzogand0S2V5cy5qd3QueVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBSZWx5aW5nUGFydHk6ICdodHRwOi8vYXV0aC54Ym94bGl2ZS5jb20nLFxuICAgICAgICAgICAgICAgICAgICBUb2tlblR5cGU6ICdKV1QnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5zaWduKCdodHRwczovL2RldmljZS5hdXRoLnhib3hsaXZlLmNvbS9kZXZpY2UvYXV0aGVudGljYXRlJywgJycsIGJvZHksIGp3dEtleXMpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7IC4uLntcbiAgICAgICAgICAgICAgICAgICAgJ3gteGJsLWNvbnRyYWN0LXZlcnNpb24nOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJ1xuICAgICAgICAgICAgICAgIH0sIFNpZ25hdHVyZTogc2lnbmF0dXJlIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IEh0dHBDbGllbnQgPSBuZXcgSHR0cCgpXG4gICAgICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdCgnZGV2aWNlLmF1dGgueGJveGxpdmUuY29tJywgJy9kZXZpY2UvYXV0aGVudGljYXRlJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgRGV2aWNlVG9rZW4ocmVzcG9uc2UuYm9keSgpKSlcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZG9TaXN1QXV0aGVudGljYXRpb24oZGV2aWNlVG9rZW46RGV2aWNlVG9rZW4sIGNvZGVDaGFsbGFuZ2U6SUNvZGVDaGFsbGFuZ2UsIHN0YXRlKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElTaXN1QXV0aGVudGljYXRpb25SZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRLZXlzKCkudGhlbigoand0S2V5czphbnkpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgICAgIEFwcElkOiB0aGlzLl9hcHAuQXBwSWQsXG4gICAgICAgICAgICAgICAgICAgIFRpdGxlSWQ6IHRoaXMuX2FwcC5UaXRsZUlkLFxuICAgICAgICAgICAgICAgICAgICBSZWRpcmVjdFVyaTogdGhpcy5fYXBwLlJlZGlyZWN0VXJpLFxuICAgICAgICAgICAgICAgICAgICBEZXZpY2VUb2tlbjogZGV2aWNlVG9rZW4uZGF0YS5Ub2tlbixcbiAgICAgICAgICAgICAgICAgICAgU2FuZGJveDogXCJSRVRBSUxcIixcbiAgICAgICAgICAgICAgICAgICAgVG9rZW5UeXBlOiBcImNvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgT2ZmZXJzOiBbXCJzZXJ2aWNlOjp1c2VyLmF1dGgueGJveGxpdmUuY29tOjpNQklfU1NMXCJdLFxuICAgICAgICAgICAgICAgICAgICBRdWVyeToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2FuZHJvaWRfcGhvbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9jaGFsbGVuZ2U6IGNvZGVDaGFsbGFuZ2UudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2NoYWxsZW5nZV9tZXRob2Q6IGNvZGVDaGFsbGFuZ2UubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuc2lnbignaHR0cHM6Ly9zaXN1Lnhib3hsaXZlLmNvbS9hdXRoZW50aWNhdGUnLCAnJywgYm9keSwgand0S2V5cykudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHsgLi4ue1xuICAgICAgICAgICAgICAgICAgICAneC14YmwtY29udHJhY3QtdmVyc2lvbic6ICcxJyxcbiAgICAgICAgICAgICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZSwgbm8tY2FjaGUnLFxuICAgICAgICAgICAgICAgIH0sIFNpZ25hdHVyZTogc2lnbmF0dXJlIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IEh0dHBDbGllbnQgPSBuZXcgSHR0cCgpXG4gICAgICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdCgnc2lzdS54Ym94bGl2ZS5jb20nLCAnL2F1dGhlbnRpY2F0ZScsIGhlYWRlcnMsIGJvZHkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBTZXNzaW9uSWQgdG8gcmVzcG9uc2Ugb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc0JvZHkgPSB7IFNlc3Npb25JZDogcmVzcG9uc2UuaGVhZGVyc1sneC1zZXNzaW9uaWQnXSwgLi4ucmVzcG9uc2UuYm9keSgpIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgoIHJlc0JvZHkgYXMgSVNpc3VBdXRoZW50aWNhdGlvblJlc3BvbnNlKSlcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZG9TaXN1QXV0aG9yaXphdGlvbih1c2VyVG9rZW46VXNlclRva2VuLCBkZXZpY2VUb2tlbjpEZXZpY2VUb2tlbiwgU2Vzc2lvbklkPzpzdHJpbmcpe1xuICAgICAgICBjb25zb2xlLmxvZygnZG9TaXN1QXV0aG9yaXphdGlvbi4uLicpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxTaXN1VG9rZW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0S2V5cygpLnRoZW4oKGp3dEtleXM6YW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICBBY2Nlc3NUb2tlbjogJ3Q9Jyt1c2VyVG9rZW4uZGF0YS5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIEFwcElkOiB0aGlzLl9hcHAuQXBwSWQsXG4gICAgICAgICAgICAgICAgICAgIERldmljZVRva2VuOiBkZXZpY2VUb2tlbi5kYXRhLlRva2VuLFxuICAgICAgICAgICAgICAgICAgICBTYW5kYm94OiBcIlJFVEFJTFwiLFxuICAgICAgICAgICAgICAgICAgICBTaXRlTmFtZTogXCJ1c2VyLmF1dGgueGJveGxpdmUuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgIFVzZU1vZGVybkdhbWVydGFnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBQcm9vZktleToge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSc6ICdzaWcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZyc6ICdFUzI1NicsXG4gICAgICAgICAgICAgICAgICAgICAgICAna3R5JzogJ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjcnYnOiAnUC0yNTYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3gnOiBqd3RLZXlzLmp3dC54LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3knOiBqd3RLZXlzLmp3dC55XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC4uLlNlc3Npb25JZCA/IHsgU2Vzc2lvbklkOiBTZXNzaW9uSWQgfSA6IHt9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuc2lnbignaHR0cHM6Ly9zaXN1Lnhib3hsaXZlLmNvbS9hdXRob3JpemUnLCAnJywgYm9keSwgand0S2V5cykudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ3gteGJsLWNvbnRyYWN0LXZlcnNpb24nOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlOiBzaWduYXR1cmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3QoJ3Npc3UueGJveGxpdmUuY29tJywgJy9hdXRob3JpemUnLCBoZWFkZXJzLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBTaXN1VG9rZW4ocmVzcG9uc2UuYm9keSgpKSlcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZXhjaGFuZ2VDb2RlRm9yVG9rZW4oY29kZTpzdHJpbmcsIGNvZGVWZXJpZmllcjpzdHJpbmcpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8VXNlclRva2VuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICdjbGllbnRfaWQnOiB0aGlzLl9hcHAuQXBwSWQsXG4gICAgICAgICAgICAgICAgJ2NvZGUnOiBjb2RlLFxuICAgICAgICAgICAgICAgICdjb2RlX3ZlcmlmaWVyJzogY29kZVZlcmlmaWVyLFxuICAgICAgICAgICAgICAgICdncmFudF90eXBlJzogJ2F1dGhvcml6YXRpb25fY29kZScsXG4gICAgICAgICAgICAgICAgJ3JlZGlyZWN0X3VyaSc6IHRoaXMuX2FwcC5SZWRpcmVjdFVyaSxcbiAgICAgICAgICAgICAgICAnc2NvcGUnOiAnc2VydmljZTo6dXNlci5hdXRoLnhib3hsaXZlLmNvbTo6TUJJX1NTTCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF5bG9hZCkudG9TdHJpbmcoKVxuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZSwgbm8tY2FjaGUnLFxuICAgICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IEh0dHBDbGllbnQgPSBuZXcgSHR0cCgpXG4gICAgICAgICAgICBIdHRwQ2xpZW50LnBvc3RSZXF1ZXN0KCdsb2dpbi5saXZlLmNvbScsICcvb2F1dGgyMF90b2tlbi5zcmYnLCBoZWFkZXJzLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFVzZXJUb2tlbihyZXNwb25zZS5ib2R5KCkpKVxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJlZnJlc2hVc2VyVG9rZW4odXNlclRva2VuOlVzZXJUb2tlbil7XG4gICAgICAgIGNvbnNvbGUubG9nKCdyZWZyZXNoVXNlclRva2VuLi4uJylcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPFVzZXJUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAnY2xpZW50X2lkJzogdGhpcy5fYXBwLkFwcElkLFxuICAgICAgICAgICAgICAgICdncmFudF90eXBlJzogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICAgICAgICAgICdyZWZyZXNoX3Rva2VuJzogdXNlclRva2VuLmRhdGEucmVmcmVzaF90b2tlbixcbiAgICAgICAgICAgICAgICAnc2NvcGUnOiAnc2VydmljZTo6dXNlci5hdXRoLnhib3hsaXZlLmNvbTo6TUJJX1NTTCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF5bG9hZCkudG9TdHJpbmcoKVxuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZSwgbm8tY2FjaGUnLFxuICAgICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IEh0dHBDbGllbnQgPSBuZXcgSHR0cCgpXG4gICAgICAgICAgICBIdHRwQ2xpZW50LnBvc3RSZXF1ZXN0KCdsb2dpbi5saXZlLmNvbScsICcvb2F1dGgyMF90b2tlbi5zcmYnLCBoZWFkZXJzLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZWZyZXNoVXNlclRva2VuIHN1Y2Nlc3M6ICcsIHJlc3BvbnNlLmJvZHkoKSlcbiAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBVc2VyVG9rZW4ocmVzcG9uc2UuYm9keSgpKSlcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZWZyZXNoVXNlclRva2VuIGZhaWw6JywgZXJyb3IpXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBkb1hzdHNBdXRob3JpemF0aW9uKHNpc3VUb2tlbjpTaXN1VG9rZW4sIHJlbHlpbmdQYXJ0eTpzdHJpbmcpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8WHN0c1Rva2VuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEtleXMoKS50aGVuKChqd3RLZXlzOmFueSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgU2FuZGJveElkOiAnUkVUQUlMJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIERldmljZVRva2VuOiBzaXN1VG9rZW4uZGF0YS5EZXZpY2VUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlVG9rZW46IHNpc3VUb2tlbi5kYXRhLlRpdGxlVG9rZW4uVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VyVG9rZW5zOiBbc2lzdVRva2VuLmRhdGEuVXNlclRva2VuLlRva2VuXVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBSZWx5aW5nUGFydHk6IHJlbHlpbmdQYXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgVG9rZW5UeXBlOiAnSldUJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuc2lnbignaHR0cHM6Ly94c3RzLmF1dGgueGJveGxpdmUuY29tL3hzdHMvYXV0aG9yaXplJywgJycsIGJvZHksIGp3dEtleXMpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7IC4uLntcbiAgICAgICAgICAgICAgICAgICAgJ3gteGJsLWNvbnRyYWN0LXZlcnNpb24nOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgICAgICB9LCBTaWduYXR1cmU6IHNpZ25hdHVyZSB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3QoJ3hzdHMuYXV0aC54Ym94bGl2ZS5jb20nLCAnL3hzdHMvYXV0aG9yaXplJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgWHN0c1Rva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGV4Y2hhbmdlUmVmcmVzaFRva2VuRm9yWGNsb3VkVHJhbnNmZXJUb2tlbih1c2VyVG9rZW46VXNlclRva2VuKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPE1zYWxUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICBjbGllbnRfaWQ6IHRoaXMuX2FwcC5BcHBJZCxcbiAgICAgICAgICAgICAgICBncmFudF90eXBlOiAncmVmcmVzaF90b2tlbicsXG4gICAgICAgICAgICAgICAgc2NvcGU6ICdzZXJ2aWNlOjpodHRwOi8vUGFzc3BvcnQuTkVUL3B1cnBvc2U6OlBVUlBPU0VfWEJPWF9DTE9VRF9DT05TT0xFX1RSQU5TRkVSX1RPS0VOJyxcbiAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB1c2VyVG9rZW4uZGF0YS5yZWZyZXNoX3Rva2VuLFxuICAgICAgICAgICAgICAgIGNvZGU6ICcnLFxuICAgICAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6ICcnLFxuICAgICAgICAgICAgICAgIHJlZGlyZWN0X3VyaTogJycsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBheWxvYWQpLnRvU3RyaW5nKClcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdCgnbG9naW4ubGl2ZS5jb20nLCAnL29hdXRoMjBfdG9rZW4uc3JmJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBNc2FsVG9rZW4ocmVzcG9uc2UuYm9keSgpKSlcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRTdHJlYW1Ub2tlbih4c3RzVG9rZW46WHN0c1Rva2VuLCBvZmZlcmluZzpzdHJpbmcsIGZvcmNlUmVnaW9uSXA6IHN0cmluZyA9ICcnKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPFN0cmVhbWluZ1Rva2VuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICd0b2tlbic6IHhzdHNUb2tlbi5kYXRhLlRva2VuLFxuICAgICAgICAgICAgICAgICdvZmZlcmluZ0lkJzogb2ZmZXJpbmcsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgICAgICAneC1nc3N2LWNsaWVudCc6ICdYYm94Q29tQnJvd3NlcicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmb3JjZVJlZ2lvbklwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzWyd4LWZvcndhcmRlZC1mb3InXSA9IGZvcmNlUmVnaW9uSXBcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdChvZmZlcmluZysnLmdzc3YtcGxheS1wcm9kLnhib3hsaXZlLmNvbScsICcvdjIvbG9naW4vdXNlcicsIGhlYWRlcnMsIGJvZHkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU3RyZWFtaW5nVG9rZW4ocmVzcG9uc2UuYm9keSgpKSlcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBDcmVkaXRzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbWFyaW5lSlMvcHJpc21hcmluZS1hdXRoIGZvciB0aGUgc2lnbmluZyBwYXJ0XG4gICAgc2lnbih1cmwsIGF1dGhvcml6YXRpb25Ub2tlbiwgcGF5bG9hZCwgand0S2V5cykge1xuICAgICAgICBjb25zdCB3aW5kb3dzVGltZXN0YW1wID0gKEJpZ0ludCgoRGF0ZS5ub3coKSAvIDEwMDApIHwgMCkgKyBCaWdJbnQoMTE2NDQ0NzM2MDApKSAqIEJpZ0ludCgxMDAwMDAwMClcbiAgICAgICAgY29uc3QgcGF0aEFuZFF1ZXJ5ID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXG4gICAgXG4gICAgICAgIGNvbnN0IGFsbG9jU2l6ZSA9IDUgKyA5ICsgNSArIHBhdGhBbmRRdWVyeS5sZW5ndGggKyAxICsgYXV0aG9yaXphdGlvblRva2VuLmxlbmd0aCArIDEgKyBwYXlsb2FkLmxlbmd0aCArIDFcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKGFsbG9jU2l6ZSlcbiAgICAgICAgYnVmLndyaXRlSW50MzJCRSgxKVxuICAgICAgICBidWYud3JpdGVVSW50OCgwLCA0KVxuICAgICAgICBidWYud3JpdGVCaWdVSW50NjRCRSh3aW5kb3dzVGltZXN0YW1wLCA1KVxuICAgICAgICBidWYud3JpdGVVSW50OCgwLCAxMylcbiAgICAgICAgbGV0IG9mZnNldCA9IDE0XG5cbiAgICAgICAgQnVmZmVyLmZyb20oJ1BPU1QnKS5jb3B5KGJ1Ziwgb2Zmc2V0KVxuICAgICAgICBidWYud3JpdGVVSW50OCgwLCBvZmZzZXQrNClcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0KzQrMVxuXG4gICAgICAgIEJ1ZmZlci5mcm9tKHBhdGhBbmRRdWVyeSkuY29weShidWYsIG9mZnNldClcbiAgICAgICAgYnVmLndyaXRlVUludDgoMCwgb2Zmc2V0K3BhdGhBbmRRdWVyeS5sZW5ndGgpXG4gICAgICAgIG9mZnNldCA9IG9mZnNldCtwYXRoQW5kUXVlcnkubGVuZ3RoKzFcblxuICAgICAgICBCdWZmZXIuZnJvbShhdXRob3JpemF0aW9uVG9rZW4pLmNvcHkoYnVmLCBvZmZzZXQpXG4gICAgICAgIGJ1Zi53cml0ZVVJbnQ4KDAsIG9mZnNldCthdXRob3JpemF0aW9uVG9rZW4ubGVuZ3RoKVxuICAgICAgICBvZmZzZXQgPSBvZmZzZXQrYXV0aG9yaXphdGlvblRva2VuLmxlbmd0aCsxXG5cbiAgICAgICAgQnVmZmVyLmZyb20ocGF5bG9hZCkuY29weShidWYsIG9mZnNldClcbiAgICAgICAgYnVmLndyaXRlVUludDgoMCwgb2Zmc2V0K3BheWxvYWQubGVuZ3RoKVxuICAgICAgICBvZmZzZXQgPSBvZmZzZXQrcGF5bG9hZC5sZW5ndGgrMVxuXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5zaWduKCdTSEEyNTYnLCBidWYsIHsga2V5OiBqd3RLZXlzLnJhdy5wcml2YXRlS2V5LCBkc2FFbmNvZGluZzogJ2llZWUtcDEzNjMnIH0pXG4gICAgXG4gICAgICAgIGNvbnN0IGhlYWRlciA9IEJ1ZmZlci5hbGxvYyhzaWduYXR1cmUubGVuZ3RoICsgMTIpXG4gICAgICAgIGhlYWRlci53cml0ZUludDMyQkUoMSlcbiAgICAgICAgaGVhZGVyLndyaXRlQmlnVUludDY0QkUod2luZG93c1RpbWVzdGFtcCwgNClcbiAgICAgICAgQnVmZmVyLmZyb20oc2lnbmF0dXJlKS5jb3B5KGhlYWRlciwgMTIpXG4gICAgXG4gICAgICAgIHJldHVybiBoZWFkZXJcbiAgICB9XG5cbiAgICAvLyBUb2tlbiByZXRyaWV2YWwgaGVscGVyc1xuICAgIGFzeW5jIHJlZnJlc2hUb2tlbnModG9rZW5TdG9yZTpUb2tlblN0b3JlKXtcbiAgICAgICAgY29uc3QgY3VyVXNlclRva2VuID0gdG9rZW5TdG9yZS5nZXRVc2VyVG9rZW4oKVxuICAgICAgICBpZihjdXJVc2VyVG9rZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciB0b2tlbiBpcyBtaXNzaW5nLiBQbGVhc2UgYXV0aGVudGljYXRlIGZpcnN0JylcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdXNlclRva2VuID0gYXdhaXQgdGhpcy5yZWZyZXNoVXNlclRva2VuKGN1clVzZXJUb2tlbilcbiAgICAgICAgICAgIGNvbnN0IGRldmljZVRva2VuID0gYXdhaXQgdGhpcy5nZXREZXZpY2VUb2tlbkhhY2soKVxuICAgICAgICAgICAgY29uc3Qgc2lzdVRva2VuID0gYXdhaXQgdGhpcy5kb1Npc3VBdXRob3JpemF0aW9uKHVzZXJUb2tlbiwgZGV2aWNlVG9rZW4pXG5cbiAgICAgICAgICAgIHRva2VuU3RvcmUuc2V0VXNlclRva2VuKHVzZXJUb2tlbilcbiAgICAgICAgICAgIHRva2VuU3RvcmUuc2V0U2lzdVRva2VuKHNpc3VUb2tlbilcbiAgICAgICAgICAgIHRva2VuU3RvcmUuc2F2ZSgpXG5cbiAgICAgICAgICAgIHJldHVybiB7IHVzZXJUb2tlbiwgZGV2aWNlVG9rZW4sIHNpc3VUb2tlbiB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVG9rZW5SZWZyZXNoRXJyb3IoJ0ZhaWxlZCB0byByZWZyZXNoIHRva2VuczogJyArIEpTT04uc3RyaW5naWZ5KGVycm9yKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldE1zYWxUb2tlbih0b2tlblN0b3JlOlRva2VuU3RvcmUpe1xuICAgICAgICBjb25zdCB1c2VyVG9rZW4gPSB0b2tlblN0b3JlLmdldFVzZXJUb2tlbigpXG4gICAgICAgIGlmKHVzZXJUb2tlbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIHRva2VuIGlzIG1pc3NpbmcuIFBsZWFzZSBhdXRoZW50aWNhdGUgZmlyc3QnKVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhjaGFuZ2VSZWZyZXNoVG9rZW5Gb3JYY2xvdWRUcmFuc2ZlclRva2VuKHVzZXJUb2tlbikgICAgXG4gICAgfVxuXG4gICAgX3dlYlRva2VuOlhzdHNUb2tlbiB8IHVuZGVmaW5lZFxuXG4gICAgYXN5bmMgZ2V0V2ViVG9rZW4odG9rZW5TdG9yZTpUb2tlblN0b3JlKXtcbiAgICAgICAgY29uc3Qgc2lzdVRva2VuID0gdG9rZW5TdG9yZS5nZXRTaXN1VG9rZW4oKVxuICAgICAgICBpZihzaXN1VG9rZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lzdSB0b2tlbiBpcyBtaXNzaW5nLiBQbGVhc2UgYXV0aGVudGljYXRlIGZpcnN0JylcblxuICAgICAgICBpZih0aGlzLl93ZWJUb2tlbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dlYlRva2VuLmdldFNlY29uZHNWYWxpZCgpIDw9IDYwKXtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5kb1hzdHNBdXRob3JpemF0aW9uKHNpc3VUb2tlbiwgJ2h0dHA6Ly94Ym94bGl2ZS5jb20nKVxuICAgICAgICAgICAgdGhpcy5fd2ViVG9rZW4gPSB0b2tlblxuXG4gICAgICAgICAgICByZXR1cm4gdG9rZW5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWJUb2tlbiBhcyBYc3RzVG9rZW5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF94aG9tZVRva2VuOlN0cmVhbWluZ1Rva2VuIHwgdW5kZWZpbmVkXG4gICAgX3hjbG91ZFRva2VuOlN0cmVhbWluZ1Rva2VuIHwgdW5kZWZpbmVkXG5cbiAgICBhc3luYyBnZXRTdHJlYW1pbmdUb2tlbih0b2tlblN0b3JlOlRva2VuU3RvcmUpe1xuICAgICAgICBjb25zdCBzaXN1VG9rZW4gPSB0b2tlblN0b3JlLmdldFNpc3VUb2tlbigpXG4gICAgICAgIGlmKHNpc3VUb2tlbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaXN1IHRva2VuIGlzIG1pc3NpbmcuIFBsZWFzZSBhdXRoZW50aWNhdGUgZmlyc3QnKVxuXG4gICAgICAgIGNvbnN0IHhzdHNUb2tlbiA9IGF3YWl0IHRoaXMuZG9Yc3RzQXV0aG9yaXphdGlvbihzaXN1VG9rZW4sICdodHRwOi8vZ3Nzdi54Ym94bGl2ZS5jb20vJylcblxuICAgICAgICBpZih0aGlzLl94aG9tZVRva2VuID09PSB1bmRlZmluZWQgfHwgdGhpcy5feGhvbWVUb2tlbi5nZXRTZWNvbmRzVmFsaWQoKSA8PSA2MCl7XG4gICAgICAgICAgICB0aGlzLl94aG9tZVRva2VuID0gYXdhaXQgdGhpcy5nZXRTdHJlYW1Ub2tlbih4c3RzVG9rZW4sICd4aG9tZScpXG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLl94Y2xvdWRUb2tlbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3hjbG91ZFRva2VuLmdldFNlY29uZHNWYWxpZCgpIDw9IDYwKXtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5feGNsb3VkVG9rZW4gPSBhd2FpdCB0aGlzLmdldFN0cmVhbVRva2VuKHhzdHNUb2tlbiwgJ3hncHV3ZWInKVxuICAgICAgICAgICAgfSBjYXRjaChlcnJvcil7XG4gICAgICAgICAgICAgICAgdGhpcy5feGNsb3VkVG9rZW4gPSBhd2FpdCB0aGlzLmdldFN0cmVhbVRva2VuKHhzdHNUb2tlbiwgJ3hncHV3ZWJmMnAnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgeEhvbWVUb2tlbjogdGhpcy5feGhvbWVUb2tlbiwgeENsb3VkVG9rZW46IHRoaXMuX3hjbG91ZFRva2VuIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRSZWRpcmVjdFVyaSgpe1xuICAgICAgICBjb25zdCBkZXZpY2VUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlVG9rZW5IYWNrKClcbiAgICAgICAgY29uc3QgY29kZUNoYWxsYW5nZSA9IGF3YWl0IHRoaXMuZ2V0Q29kZUNoYWxsYW5nZSgpXG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRSYW5kb21TdGF0ZSgpXG4gICAgICAgIGNvbnN0IHNpc3VBdXRoID0gYXdhaXQgdGhpcy5kb1Npc3VBdXRoZW50aWNhdGlvbihkZXZpY2VUb2tlbiwgY29kZUNoYWxsYW5nZSwgc3RhdGUpXG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNpc3VBdXRoLFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBjb2RlQ2hhbGxhbmdlXG4gICAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgYXN5bmMgYXV0aGVudGljYXRlVXNlcih0b2tlblN0b3JlOlRva2VuU3RvcmUsIHJlZGlyZWN0T2JqZWN0OntcbiAgICAgICAgc2lzdUF1dGg6IElTaXN1QXV0aGVudGljYXRpb25SZXNwb25zZTtcbiAgICAgICAgc3RhdGU6IHN0cmluZztcbiAgICAgICAgY29kZUNoYWxsYW5nZTogSUNvZGVDaGFsbGFuZ2U7XG4gICAgfSwgcmVkaXJlY3RVcmk6c3RyaW5nKXtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChyZWRpcmVjdFVyaSlcblxuICAgICAgICBjb25zdCBlcnJvciA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdlcnJvcicpXG4gICAgICAgIGlmKGVycm9yKXtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yX2Rlc2NyaXB0aW9uID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoJ2Vycm9yX2Rlc2NyaXB0aW9uJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29kZSA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdjb2RlJylcbiAgICAgICAgaWYoY29kZSl7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdzdGF0ZScpXG4gICAgICAgICAgICBpZihzdGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dGhlbnRpY2F0ZVVzZXJVc2luZ0NvZGUodG9rZW5TdG9yZSwgcmVkaXJlY3RPYmplY3QsIGNvZGUsIHN0YXRlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgYXN5bmMgYXV0aGVudGljYXRlVXNlclVzaW5nQ29kZSh0b2tlblN0b3JlOlRva2VuU3RvcmUsIHJlZGlyZWN0T2JqZWN0OntcbiAgICAgICAgc2lzdUF1dGg6IElTaXN1QXV0aGVudGljYXRpb25SZXNwb25zZTtcbiAgICAgICAgc3RhdGU6IHN0cmluZztcbiAgICAgICAgY29kZUNoYWxsYW5nZTogSUNvZGVDaGFsbGFuZ2U7XG4gICAgfSwgY29kZTpzdHJpbmcsIHN0YXRlOnN0cmluZyl7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ2F1dGhlbnRpY2F0ZVVzZXI6JywgY29kZSwgc3RhdGUpXG5cbiAgICAgICAgaWYoc3RhdGUgIT09IHJlZGlyZWN0T2JqZWN0LnN0YXRlKXtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQ6IFN0YXRlIG1pc21hdGNoJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGVDaGFsbGFuZ2UgPSBhd2FpdCB0aGlzLmdldENvZGVDaGFsbGFuZ2UoKVxuICAgICAgICBjb25zdCB1c2VyVG9rZW4gPSBhd2FpdCB0aGlzLmV4Y2hhbmdlQ29kZUZvclRva2VuKGNvZGUsIGNvZGVDaGFsbGFuZ2UudmVyaWZpZXIpXG5cbiAgICAgICAgdG9rZW5TdG9yZS5zZXRVc2VyVG9rZW4odXNlclRva2VuKVxuICAgICAgICB0b2tlblN0b3JlLnNldEp3dEtleXModGhpcy5qd3RLZXlzKVxuICAgICAgICB0b2tlblN0b3JlLnNhdmUoKVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVG9rZW5SZWZyZXNoRXJyb3IgZXh0ZW5kcyBFcnJvciB7fSIsImV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3MgPSB7XG4gIGxvY2FsZTogXCJlblwiLFxuICBmdWxsc2NyZWVuOiBmYWxzZSxcbiAgcmVzb2x1dGlvbjogNzIwLFxuICB4aG9tZV9iaXRyYXRlX21vZGU6IFwiQXV0b1wiLFxuICB4aG9tZV9iaXRyYXRlOiAyMCxcbiAgeGNsb3VkX2JpdHJhdGVfbW9kZTogXCJBdXRvXCIsXG4gIHhjbG91ZF9iaXRyYXRlOiAyMCxcbiAgcHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2U6IFwiZW4tVVNcIixcbiAgZm9yY2VfcmVnaW9uX2lwOiBcIlwiLFxuICBjb2RlYzogXCJcIixcbiAgdmlicmF0aW9uOiB0cnVlLFxuICB2aWJyYXRpb25fbW9kZTogXCJOYXRpdmVcIixcbiAgZ2FtZXBhZF9rZXJuYWw6IFwiTmF0aXZlXCIsXG4gIGRlYWRfem9uZTogMC4xLFxuICB2aWRlb19mb3JtYXQ6IFwiXCIsXG4gIHZpcnR1YWxfZ2FtZXBhZF9vcGFjaXR5OiAwLjYsXG4gIGdhbWVwYWRfbWFwaW5nOiBudWxsLFxuICBuYXRpdmVfZ2FtZXBhZF9tYXBpbmc6IG51bGwsXG4gIGlwdjY6IGZhbHNlLFxuICBpbnB1dF9tb3VzZWtleWJvYXJkX21hcGluZzoge1xuICAgIEFycm93TGVmdDogJ0RQYWRMZWZ0JyxcbiAgICBBcnJvd1VwOiAnRFBhZFVwJyxcbiAgICBBcnJvd1JpZ2h0OiAnRFBhZFJpZ2h0JyxcbiAgICBBcnJvd0Rvd246ICdEUGFkRG93bicsXG5cbiAgICBFbnRlcjogJ0EnLFxuICAgIGE6ICdBJyxcblxuICAgIEJhY2tzcGFjZTogJ0InLFxuICAgIGI6ICdCJyxcblxuICAgIHg6ICdYJyxcbiAgICB5OiAnWScsXG5cbiAgICAnWyc6ICdMZWZ0U2hvdWxkZXInLFxuICAgICddJzogJ1JpZ2h0U2hvdWxkZXInLFxuXG4gICAgJy0nOiAnTGVmdFRyaWdnZXInLFxuICAgICc9JzogJ1JpZ2h0VHJpZ2dlcicsXG5cbiAgICB2OiAnVmlldycsXG4gICAgbTogJ01lbnUnLFxuICAgIG46ICdOZXh1cycsXG4gIH0sXG4gIGRpc3BsYXlfb3B0aW9uczoge1xuICAgIHNoYXJwbmVzczogNSxcbiAgICBzYXR1cmF0aW9uOiAxMDAsXG4gICAgY29udHJhc3Q6IDEwMCxcbiAgICBicmlnaHRuZXNzOiAxMDAsXG4gIH0sXG4gIGRlYnVnOiBmYWxzZSxcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlY3Ryb25cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibm9kZTpwYXRoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9heGlvc19fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9jb21wYXJlX3ZlcnNpb25zX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2RlYnVnX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2VsZWN0cm9uX3NlcnZlX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2VsZWN0cm9uX3N0b3JlX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2dpdGh1Yl91cmxfdG9fb2JqZWN0X187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2lwX2FkZHJlc3NfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfam9zZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV91dWlkXzEzNDVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfeGJveF93ZWJhcGlfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L2lzLWFycmF5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvZGF0ZS9ub3dcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWx0ZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luY2x1ZGVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uva2V5c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvbWVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb3J0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2pzb24vc3RyaW5naWZ5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2Fzc2lnblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydGllc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2tleXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9wcm9taXNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc2V0LWltbWVkaWF0ZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3NldC10aW1lb3V0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc2V0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvdXJsLXNlYXJjaC1wYXJhbXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS91cmxcIik7IiwidmFyIF9PYmplY3QkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIik7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfU3ltYm9sJHRvUHJpbWl0aXZlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCIpO1xudmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W19TeW1ib2wkdG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJpbWl0aXZlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZShcIi4vdG9QcmltaXRpdmUuanNcIik7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfU3ltYm9sID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIik7XG52YXIgX1N5bWJvbCRpdGVyYXRvciA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzXCIpO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gKG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBfU3ltYm9sJGl0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBfU3ltYm9sICYmIG8gIT09IF9TeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpLCBfdHlwZW9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wnKTtcblxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuZnVuY3Rpb24ubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3N5bWJvbC90by1wcmltaXRpdmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5pc0FycmF5O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maWx0ZXInKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnZmlsdGVyJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZvckVhY2gnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnaW5jbHVkZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdrZXlzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc29tZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb3J0Jyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NvcnQnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS5ub3cnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkRhdGUubm93O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmlsdGVyJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZpbHRlcjtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmlsdGVyKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYXJyYXlNZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2luY2x1ZGVzJyk7XG52YXIgc3RyaW5nTWV0aG9kID0gcmVxdWlyZSgnLi4vc3RyaW5nL3ZpcnR1YWwvaW5jbHVkZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5pbmNsdWRlcztcbiAgaWYgKGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuaW5jbHVkZXMpKSByZXR1cm4gYXJyYXlNZXRob2Q7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgfHwgaXQgPT09IFN0cmluZ1Byb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihTdHJpbmdQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IFN0cmluZ1Byb3RvdHlwZS5pbmNsdWRlcykpIHtcbiAgICByZXR1cm4gc3RyaW5nTWV0aG9kO1xuICB9IHJldHVybiBvd247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29tZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb21lO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb21lKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb3J0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvcnQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvcnQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9zdHJpbmcvdmlydHVhbC90cmltJyk7XG5cbnZhciBTdHJpbmdQcm90b3R5cGUgPSBTdHJpbmcucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudHJpbTtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3RyaW5nJyB8fCBpdCA9PT0gU3RyaW5nUHJvdG90eXBlXG4gICAgfHwgKGlzUHJvdG90eXBlT2YoU3RyaW5nUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBTdHJpbmdQcm90b3R5cGUudHJpbSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5kYXRlLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tanNvbiAtLSBzYWZlXG5pZiAoIXBhdGguSlNPTikgcGF0aC5KU09OID0geyBzdHJpbmdpZnk6IEpTT04uc3RyaW5naWZ5IH07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gIHJldHVybiBhcHBseShwYXRoLkpTT04uc3RyaW5naWZ5LCBudWxsLCBhcmd1bWVudHMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmFzc2lnbjtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoVCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVCwgRCk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMuc2hhbSkgZGVmaW5lUHJvcGVydGllcy5zaGFtID0gdHJ1ZTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eS5zaGFtKSBkZWZpbmVQcm9wZXJ0eS5zaGFtID0gdHJ1ZTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xufTtcblxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSkgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0gPSB0cnVlO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS53aXRoLXJlc29sdmVycycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQuZGlmZmVyZW5jZS52MicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQuaW50ZXJzZWN0aW9uLnYyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0LmlzLXN1cGVyc2V0LW9mLnYyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52MicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQudW5pb24udjInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5TZXQ7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdTdHJpbmcnLCAnaW5jbHVkZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0nKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnU3RyaW5nJywgJ3RyaW0nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXRoLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC50by1zdHJpbmctdGFnJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5TeW1ib2w7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZignaXRlcmF0b3InKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZigndG9QcmltaXRpdmUnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sJyk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sL2l0ZXJhdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuY3VzdG9tLW1hdGNoZXInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLWtleScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sL2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wvdG8tcHJpbWl0aXZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ29uc3RydWN0b3IoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Bvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNQb3NzaWJsZVByb3RvdHlwZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gUGVyZm9ybSA/IFJlcXVpcmVJbnRlcm5hbFNsb3QoTSwgW1tTZXREYXRhXV0pXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ID09ICdvYmplY3QnICYmICdzaXplJyBpbiBpdCAmJiAnaGFzJyBpbiBpdCAmJiAnYWRkJyBpbiBpdCAmJiAnZGVsZXRlJyBpbiBpdCAmJiAna2V5cycgaW4gaXQpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXQpICsgJyBpcyBub3QgYSBzZXQnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRkYyNi0gYnVnOiBBcnJheUJ1ZmZlcnMgYXJlIG5vbi1leHRlbnNpYmxlLCBidXQgT2JqZWN0LmlzRXh0ZW5zaWJsZSBkb2VzIG5vdCByZXBvcnQgaXRcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShidWZmZXIpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVmZmVyLCAnYScsIHsgdmFsdWU6IDggfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG59IDogW10uZm9yRWFjaDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PT0gJEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6ICRBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgYXJndW1lbnQpIHtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgc29ydCA9IGZ1bmN0aW9uIChhcnJheSwgY29tcGFyZWZuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKGxlbmd0aCA8IDgpIHtcbiAgICAvLyBpbnNlcnRpb24gc29ydFxuICAgIHZhciBpID0gMTtcbiAgICB2YXIgZWxlbWVudCwgajtcblxuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICBqID0gaTtcbiAgICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICAgIHdoaWxlIChqICYmIGNvbXBhcmVmbihhcnJheVtqIC0gMV0sIGVsZW1lbnQpID4gMCkge1xuICAgICAgICBhcnJheVtqXSA9IGFycmF5Wy0tal07XG4gICAgICB9XG4gICAgICBpZiAoaiAhPT0gaSsrKSBhcnJheVtqXSA9IGVsZW1lbnQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIG1lcmdlIHNvcnRcbiAgICB2YXIgbWlkZGxlID0gZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgdmFyIGxlZnQgPSBzb3J0KGFycmF5U2xpY2UoYXJyYXksIDAsIG1pZGRsZSksIGNvbXBhcmVmbik7XG4gICAgdmFyIHJpZ2h0ID0gc29ydChhcnJheVNsaWNlKGFycmF5LCBtaWRkbGUpLCBjb21wYXJlZm4pO1xuICAgIHZhciBsbGVuZ3RoID0gbGVmdC5sZW5ndGg7XG4gICAgdmFyIHJsZW5ndGggPSByaWdodC5sZW5ndGg7XG4gICAgdmFyIGxpbmRleCA9IDA7XG4gICAgdmFyIHJpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAobGluZGV4IDwgbGxlbmd0aCB8fCByaW5kZXggPCBybGVuZ3RoKSB7XG4gICAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgICAgPyBjb21wYXJlZm4obGVmdFtsaW5kZXhdLCByaWdodFtyaW5kZXhdKSA8PSAwID8gbGVmdFtsaW5kZXgrK10gOiByaWdodFtyaW5kZXgrK11cbiAgICAgICAgOiBsaW5kZXggPCBsbGVuZ3RoID8gbGVmdFtsaW5kZXgrK10gOiByaWdodFtyaW5kZXgrK107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzb3J0O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgbnVtQXJncykge1xuICByZXR1cm4gbnVtQXJncyA9PT0gMSA/IGZ1bmN0aW9uIChvYmplY3QsIGFyZykge1xuICAgIHJldHVybiBvYmplY3RbbWV0aG9kTmFtZV0oYXJnKTtcbiAgfSA6IGZ1bmN0aW9uIChvYmplY3QsIGFyZzEsIGFyZzIpIHtcbiAgICByZXR1cm4gb2JqZWN0W21ldGhvZE5hbWVdKGFyZzEsIGFyZzIpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgY2FsbGVkID0gMDtcbiAgdmFyIGl0ZXJhdG9yV2l0aFJldHVybiA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBkb25lOiAhIWNhbGxlZCsrIH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKCkge1xuICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIGl0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBuby10aHJvdy1saXRlcmFsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmF0b3JXaXRoUmV0dXJuLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBTS0lQX0NMT1NJTkcpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IHJldHVybiBmYWxzZTsgfSAvLyB3b3JrYXJvdW5kIG9mIG9sZCBXZWJLaXQgKyBgZXZhbGAgYnVnXG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiBudWxsLFxuICAgICAgICBsYXN0OiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gbnVsbDtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gbnVsbDtcbiAgICAgICAgc3RhdGUuaW5kZXggPSBjcmVhdGUobnVsbCk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IG51bGxcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmxhc3Q7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghc3RhdGUudGFyZ2V0IHx8ICEoc3RhdGUubGFzdCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuc3RhdGUuZmlyc3QpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHN0YXRlLnRhcmdldCA9IG51bGw7XG4gICAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PT0gJ2tleXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS5rZXksIGZhbHNlKTtcbiAgICAgIGlmIChraW5kID09PSAndmFsdWVzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkudmFsdWUsIGZhbHNlKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZmFsc2UpO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSwgd3JhcHBlciwgY29tbW9uKSB7XG4gIHZhciBJU19NQVAgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ01hcCcpICE9PSAtMTtcbiAgdmFyIElTX1dFQUsgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ1dlYWsnKSAhPT0gLTE7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFRoaXNbQ09OU1RSVUNUT1JfTkFNRV07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHZhciBleHBvcnRlZCA9IHt9O1xuICB2YXIgQ29uc3RydWN0b3I7XG5cbiAgaWYgKCFERVNDUklQVE9SUyB8fCAhaXNDYWxsYWJsZShOYXRpdmVDb25zdHJ1Y3RvcilcbiAgICB8fCAhKElTX1dFQUsgfHwgTmF0aXZlUHJvdG90eXBlLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHsgbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCkuZW50cmllcygpLm5leHQoKTsgfSkpXG4gICkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQ29uc3RydWN0b3IgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZS5lbmFibGUoKTtcbiAgfSBlbHNlIHtcbiAgICBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUoYW5JbnN0YW5jZSh0YXJnZXQsIFByb3RvdHlwZSksIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgY29sbGVjdGlvbjogbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKClcbiAgICAgIH0pO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRhcmdldFtBRERFUl0sIHsgdGhhdDogdGFyZ2V0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgUHJvdG90eXBlID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgZm9yRWFjaChbJ2FkZCcsICdjbGVhcicsICdkZWxldGUnLCAnZm9yRWFjaCcsICdnZXQnLCAnaGFzJywgJ3NldCcsICdrZXlzJywgJ3ZhbHVlcycsICdlbnRyaWVzJ10sIGZ1bmN0aW9uIChLRVkpIHtcbiAgICAgIHZhciBJU19BRERFUiA9IEtFWSA9PT0gJ2FkZCcgfHwgS0VZID09PSAnc2V0JztcbiAgICAgIGlmIChLRVkgaW4gTmF0aXZlUHJvdG90eXBlICYmICEoSVNfV0VBSyAmJiBLRVkgPT09ICdjbGVhcicpKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShQcm90b3R5cGUsIEtFWSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICB2YXIgY29sbGVjdGlvbiA9IGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbjtcbiAgICAgICAgICBpZiAoIUlTX0FEREVSICYmIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpKSByZXR1cm4gS0VZID09PSAnZ2V0JyA/IHVuZGVmaW5lZCA6IGZhbHNlO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBjb2xsZWN0aW9uW0tFWV0oYSA9PT0gMCA/IDAgOiBhLCBiKTtcbiAgICAgICAgICByZXR1cm4gSVNfQURERVIgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIElTX1dFQUsgfHwgZGVmaW5lUHJvcGVydHkoUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5jb2xsZWN0aW9uLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgZmFsc2UsIHRydWUpO1xuXG4gIGV4cG9ydGVkW0NPTlNUUlVDVE9SX05BTUVdID0gQ29uc3RydWN0b3I7XG4gICQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCBleHBvcnRlZCk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHZhciByZWdleHAgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbTUVUSE9EX05BTUVdKHJlZ2V4cCk7XG4gIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgIHRyeSB7XG4gICAgICByZWdleHBbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gJy8uLydbTUVUSE9EX05BTUVdKHJlZ2V4cCk7XG4gICAgfSBjYXRjaCAoZXJyb3IyKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtrZXldID0gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgcGFkU3RhcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXBhZCcpLnN0YXJ0O1xuXG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyICRpc0Zpbml0ZSA9IGlzRmluaXRlO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIERhdGVQcm90b3R5cGUgPSBEYXRlLnByb3RvdHlwZTtcbnZhciBuYXRpdmVEYXRlVG9JU09TdHJpbmcgPSBEYXRlUHJvdG90eXBlLnRvSVNPU3RyaW5nO1xudmFyIHRoaXNUaW1lVmFsdWUgPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFRpbWUpO1xudmFyIGdldFVUQ0RhdGUgPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFVUQ0RhdGUpO1xudmFyIGdldFVUQ0Z1bGxZZWFyID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRVVENGdWxsWWVhcik7XG52YXIgZ2V0VVRDSG91cnMgPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFVUQ0hvdXJzKTtcbnZhciBnZXRVVENNaWxsaXNlY29uZHMgPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFVUQ01pbGxpc2Vjb25kcyk7XG52YXIgZ2V0VVRDTWludXRlcyA9IHVuY3VycnlUaGlzKERhdGVQcm90b3R5cGUuZ2V0VVRDTWludXRlcyk7XG52YXIgZ2V0VVRDTW9udGggPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFVUQ01vbnRoKTtcbnZhciBnZXRVVENTZWNvbmRzID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRVVENTZWNvbmRzKTtcblxuLy8gYERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUudG9pc29zdHJpbmdcbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgZmFpbHMgaGVyZTpcbm1vZHVsZS5leHBvcnRzID0gKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5hdGl2ZURhdGVUb0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKC01ZTEzIC0gMSkpICE9PSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIG5hdGl2ZURhdGVUb0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghJGlzRmluaXRlKHRoaXNUaW1lVmFsdWUodGhpcykpKSB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB2YXIgZGF0ZSA9IHRoaXM7XG4gIHZhciB5ZWFyID0gZ2V0VVRDRnVsbFllYXIoZGF0ZSk7XG4gIHZhciBtaWxsaXNlY29uZHMgPSBnZXRVVENNaWxsaXNlY29uZHMoZGF0ZSk7XG4gIHZhciBzaWduID0geWVhciA8IDAgPyAnLScgOiB5ZWFyID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gc2lnbiArIHBhZFN0YXJ0KGFicyh5ZWFyKSwgc2lnbiA/IDYgOiA0LCAwKSArXG4gICAgJy0nICsgcGFkU3RhcnQoZ2V0VVRDTW9udGgoZGF0ZSkgKyAxLCAyLCAwKSArXG4gICAgJy0nICsgcGFkU3RhcnQoZ2V0VVRDRGF0ZShkYXRlKSwgMiwgMCkgK1xuICAgICdUJyArIHBhZFN0YXJ0KGdldFVUQ0hvdXJzKGRhdGUpLCAyLCAwKSArXG4gICAgJzonICsgcGFkU3RhcnQoZ2V0VVRDTWludXRlcyhkYXRlKSwgMiwgMCkgK1xuICAgICc6JyArIHBhZFN0YXJ0KGdldFVUQ1NlY29uZHMoZGF0ZSksIDIsIDApICtcbiAgICAnLicgKyBwYWRTdGFydChtaWxsaXNlY29uZHMsIDMsIDApICtcbiAgICAnWic7XG59IDogbmF0aXZlRGF0ZVRvSVNPU3RyaW5nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW51bWVyYWJsZSkgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5zYWZlICYmIHRhcmdldFtrZXldKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgUCkge1xuICBpZiAoIWRlbGV0ZSBPW1BdKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgZmlyZWZveCA9IHVzZXJBZ2VudC5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS9pKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIWZpcmVmb3ggJiYgK2ZpcmVmb3hbMV07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9NU0lFfFRyaWRlbnQvLnRlc3QoVUEpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHVzZXJBZ2VudCkgJiYgdHlwZW9mIFBlYmJsZSAhPSAndW5kZWZpbmVkJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IC8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgRU5WSVJPTk1FTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBFTlZJUk9OTUVOVCA9PT0gJ05PREUnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdCh1c2VyQWdlbnQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIHdlYmtpdCA9IHVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcXC8oXFxkKylcXC4vKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIXdlYmtpdCAmJiArd2Via2l0WzFdO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEJ1biwgRGVubyAtLSBkZXRlY3Rpb24gKi9cbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciB1c2VyQWdlbnRTdGFydHNXaXRoID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gdXNlckFnZW50LnNsaWNlKDAsIHN0cmluZy5sZW5ndGgpID09PSBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XG4gIGlmICh1c2VyQWdlbnRTdGFydHNXaXRoKCdCdW4vJykpIHJldHVybiAnQlVOJztcbiAgaWYgKHVzZXJBZ2VudFN0YXJ0c1dpdGgoJ0Nsb3VkZmxhcmUtV29ya2VycycpKSByZXR1cm4gJ0NMT1VERkxBUkUnO1xuICBpZiAodXNlckFnZW50U3RhcnRzV2l0aCgnRGVuby8nKSkgcmV0dXJuICdERU5PJztcbiAgaWYgKHVzZXJBZ2VudFN0YXJ0c1dpdGgoJ05vZGUuanMvJykpIHJldHVybiAnTk9ERSc7XG4gIGlmIChnbG9iYWxUaGlzLkJ1biAmJiB0eXBlb2YgQnVuLnZlcnNpb24gPT0gJ3N0cmluZycpIHJldHVybiAnQlVOJztcbiAgaWYgKGdsb2JhbFRoaXMuRGVubyAmJiB0eXBlb2YgRGVuby52ZXJzaW9uID09ICdvYmplY3QnKSByZXR1cm4gJ0RFTk8nO1xuICBpZiAoY2xhc3NvZihnbG9iYWxUaGlzLnByb2Nlc3MpID09PSAncHJvY2VzcycpIHJldHVybiAnTk9ERSc7XG4gIGlmIChnbG9iYWxUaGlzLndpbmRvdyAmJiBnbG9iYWxUaGlzLmRvY3VtZW50KSByZXR1cm4gJ0JST1dTRVInO1xuICByZXR1cm4gJ1JFU1QnO1xufSkoKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcblxudmFyIFRFU1QgPSAoZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gU3RyaW5nKG5ldyAkRXJyb3IoYXJnKS5zdGFjayk7IH0pKCd6eGNhc2QnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbnZhciBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkgPSAvXFxuXFxzKmF0IFteOl0qOlteXFxuXSovO1xudmFyIElTX1Y4X09SX0NIQUtSQV9TVEFDSyA9IFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWS50ZXN0KFRFU1QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKElTX1Y4X09SX0NIQUtSQV9TVEFDSyAmJiB0eXBlb2Ygc3RhY2sgPT0gJ3N0cmluZycgJiYgISRFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuICAgIHdoaWxlIChkcm9wRW50cmllcy0tKSBzdGFjayA9IHJlcGxhY2Uoc3RhY2ssIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSwgJycpO1xuICB9IHJldHVybiBzdGFjaztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGNsZWFyRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhcicpO1xudmFyIEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlJyk7XG5cbi8vIG5vbi1zdGFuZGFyZCBWOFxudmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGVycm9yLCBDLCBzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFKSB7XG4gICAgaWYgKGNhcHR1cmVTdGFja1RyYWNlKSBjYXB0dXJlU3RhY2tUcmFjZShlcnJvciwgQyk7XG4gICAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNsZWFyRXJyb3JTdGFjayhzdGFjaywgZHJvcEVudHJpZXMpKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG4vLyBhZGQgZGVidWdnaW5nIGluZm9cbnJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIHdyYXBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChOYXRpdmVDb25zdHJ1Y3Rvcikge1xuICB2YXIgV3JhcHBlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcmFwcGVyKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIGFwcGx5KE5hdGl2ZUNvbnN0cnVjdG9yLCB0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICBXcmFwcGVyLnByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIFdyYXBwZXI7XG59O1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWxUaGlzIDogU1RBVElDID8gZ2xvYmFsVGhpc1tUQVJHRVRdIDogZ2xvYmFsVGhpc1tUQVJHRVRdICYmIGdsb2JhbFRoaXNbVEFSR0VUXS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFRBUkdFVCwge30pW1RBUkdFVF07XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXNPd24obmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoIUZPUkNFRCAmJiAhUFJPVE8gJiYgdHlwZW9mIHRhcmdldFByb3BlcnR5ID09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIG1ldGhvZHMgdG8gZ2xvYmFsIGZvciBjYWxsaW5nIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBpZiAob3B0aW9ucy5iaW5kICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gYmluZChzb3VyY2VQcm9wZXJ0eSwgZ2xvYmFsVGhpcyk7XG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uXG4gICAgZWxzZSBpZiAob3B0aW9ucy53cmFwICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gd3JhcENvbnN0cnVjdG9yKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICBlbHNlIGlmIChQUk9UTyAmJiBpc0NhbGxhYmxlKHNvdXJjZVByb3BlcnR5KSkgcmVzdWx0UHJvcGVydHkgPSB1bmN1cnJ5VGhpcyhzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gZGVmYXVsdCBjYXNlXG4gICAgZWxzZSByZXN1bHRQcm9wZXJ0eSA9IHNvdXJjZVByb3BlcnR5O1xuXG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHNvdXJjZVByb3BlcnR5ICYmIHNvdXJjZVByb3BlcnR5LnNoYW0pIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdFByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cblxuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgcmVzdWx0UHJvcGVydHkpO1xuXG4gICAgaWYgKFBST1RPKSB7XG4gICAgICBWSVJUVUFMX1BST1RPVFlQRSA9IFRBUkdFVCArICdQcm90b3R5cGUnO1xuICAgICAgaWYgKCFoYXNPd24ocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUpKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSwge30pO1xuICAgICAgfVxuICAgICAgLy8gZXhwb3J0IHZpcnR1YWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoW1ZJUlRVQUxfUFJPVE9UWVBFXSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICAvLyBleHBvcnQgcmVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgaWYgKG9wdGlvbnMucmVhbCAmJiB0YXJnZXRQcm90b3R5cGUgJiYgKEZPUkNFRCB8fCAhdGFyZ2V0UHJvdG90eXBlW2tleV0pKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXRQcm90b3R5cGUsIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBiaW5kID0gdW5jdXJyeVRoaXModW5jdXJyeVRoaXMuYmluZCk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgcmV0dXJuIHRoYXQgPT09IHVuZGVmaW5lZCA/IGZuIDogTkFUSVZFX0JJTkQgPyBiaW5kKGZuLCB0aGF0KSA6IGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUiwgTUVUSE9EKSB7XG4gIHZhciBOYW1lc3BhY2UgPSBwYXRoW0NPTlNUUlVDVE9SICsgJ1Byb3RvdHlwZSddO1xuICB2YXIgcHVyZU1ldGhvZCA9IE5hbWVzcGFjZSAmJiBOYW1lc3BhY2VbTUVUSE9EXTtcbiAgaWYgKHB1cmVNZXRob2QpIHJldHVybiBwdXJlTWV0aG9kO1xuICB2YXIgTmF0aXZlQ29uc3RydWN0b3IgPSBnbG9iYWxUaGlzW0NPTlNUUlVDVE9SXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIE5hdGl2ZVByb3RvdHlwZSAmJiBOYXRpdmVQcm90b3R5cGVbTUVUSE9EXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh2YXJpYWJsZSkgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pXG4gICAgOiBwYXRoW25hbWVzcGFjZV0gJiYgcGF0aFtuYW1lc3BhY2VdW21ldGhvZF0gfHwgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGBHZXRJdGVyYXRvckRpcmVjdChvYmopYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzLyNzZWMtZ2V0aXRlcmF0b3JkaXJlY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4ge1xuICAgIGl0ZXJhdG9yOiBvYmosXG4gICAgbmV4dDogb2JqLm5leHQsXG4gICAgZG9uZTogZmFsc2VcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgcmV0dXJuIGdldE1ldGhvZChpdCwgSVRFUkFUT1IpXG4gICAgfHwgZ2V0TWV0aG9kKGl0LCAnQEBpdGVyYXRvcicpXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZXBsYWNlcikge1xuICBpZiAoaXNDYWxsYWJsZShyZXBsYWNlcikpIHJldHVybiByZXBsYWNlcjtcbiAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmV0dXJuO1xuICB2YXIgcmF3TGVuZ3RoID0gcmVwbGFjZXIubGVuZ3RoO1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0xlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZW1lbnQgPSByZXBsYWNlcltpXTtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ3N0cmluZycpIHB1c2goa2V5cywgZWxlbWVudCk7XG4gICAgZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ251bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ051bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ1N0cmluZycpIHB1c2goa2V5cywgdG9TdHJpbmcoZWxlbWVudCkpO1xuICB9XG4gIHZhciBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciByb290ID0gdHJ1ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHJvb3QpIHtcbiAgICAgIHJvb3QgPSBmYWxzZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHJldHVybiB2YWx1ZTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXNMZW5ndGg7IGorKykgaWYgKGtleXNbal0gPT09IGtleSkgcmV0dXJuIHZhbHVlO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgZ2V0SXRlcmF0b3JEaXJlY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdCcpO1xuXG52YXIgSU5WQUxJRF9TSVpFID0gJ0ludmFsaWQgc2l6ZSc7XG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbnZhciBTZXRSZWNvcmQgPSBmdW5jdGlvbiAoc2V0LCBpbnRTaXplKSB7XG4gIHRoaXMuc2V0ID0gc2V0O1xuICB0aGlzLnNpemUgPSBtYXgoaW50U2l6ZSwgMCk7XG4gIHRoaXMuaGFzID0gYUNhbGxhYmxlKHNldC5oYXMpO1xuICB0aGlzLmtleXMgPSBhQ2FsbGFibGUoc2V0LmtleXMpO1xufTtcblxuU2V0UmVjb3JkLnByb3RvdHlwZSA9IHtcbiAgZ2V0SXRlcmF0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0SXRlcmF0b3JEaXJlY3QoYW5PYmplY3QoY2FsbCh0aGlzLmtleXMsIHRoaXMuc2V0KSkpO1xuICB9LFxuICBpbmNsdWRlczogZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGNhbGwodGhpcy5oYXMsIHRoaXMuc2V0LCBpdCk7XG4gIH1cbn07XG5cbi8vIGBHZXRTZXRSZWNvcmRgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNzZWMtZ2V0c2V0cmVjb3JkXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgYW5PYmplY3Qob2JqKTtcbiAgdmFyIG51bVNpemUgPSArb2JqLnNpemU7XG4gIC8vIE5PVEU6IElmIHNpemUgaXMgdW5kZWZpbmVkLCB0aGVuIG51bVNpemUgd2lsbCBiZSBOYU5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgaWYgKG51bVNpemUgIT09IG51bVNpemUpIHRocm93IG5ldyAkVHlwZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHZhciBpbnRTaXplID0gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1TaXplKTtcbiAgaWYgKGludFNpemUgPCAwKSB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgcmV0dXJuIG5ldyBTZXRSZWNvcmQob2JqLCBpbnRTaXplKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBzYWZlXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBpc0V4dGVuc2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcblxudmFyIFJFUVVJUkVEID0gZmFsc2U7XG52YXIgTUVUQURBVEEgPSB1aWQoJ21ldGEnKTtcbnZhciBpZCA9IDA7XG5cbnZhciBzZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBkZWZpbmVQcm9wZXJ0eShpdCwgTUVUQURBVEEsIHsgdmFsdWU6IHtcbiAgICBvYmplY3RJRDogJ08nICsgaWQrKywgLy8gb2JqZWN0IElEXG4gICAgd2Vha0RhdGE6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xuXG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBhIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLm9iamVjdElEO1xufTtcblxudmFyIGdldFdlYWtEYXRhID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiB0aGUgc3RvcmUgb2Ygd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLndlYWtEYXRhO1xufTtcblxuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaSU5HICYmIFJFUVVJUkVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhc093bihpdCwgTUVUQURBVEEpKSBzZXRNZXRhZGF0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cbnZhciBlbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIG1ldGEuZW5hYmxlID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICBSRVFVSVJFRCA9IHRydWU7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mO1xuICB2YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdGVzdFtNRVRBREFUQV0gPSAxO1xuXG4gIC8vIHByZXZlbnQgZXhwb3Npbmcgb2YgbWV0YWRhdGEga2V5XG4gIGlmIChnZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QpLmxlbmd0aCkge1xuICAgIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocmVzdWx0W2ldID09PSBNRVRBREFUQSkge1xuICAgICAgICAgIHNwbGljZShyZXN1bHQsIGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlLmZcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5hYmxlOiBlbmFibGUsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWtEYXRhOiBnZXRXZWFrRGF0YSxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5oaWRkZW5LZXlzW01FVEFEQVRBXSA9IHRydWU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIGNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgY29uc3RydWN0b3JSZWdFeHAgPSAvXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKTtcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLnRlc3Qobm9vcCk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3RydWN0KG5vb3AsIFtdLCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gICAgLy8gYEZ1bmN0aW9uI3RvU3RyaW5nYCB0aHJvd3Mgb24gc29tZSBidWlsdC1pdCBmdW5jdGlvbiBpbiBzb21lIGxlZ2FjeSBlbmdpbmVzXG4gICAgLy8gKGZvciBleGFtcGxlLCBgRE9NUXVhZGAgYW5kIHNpbWlsYXIgaW4gRkY0MS0pXG4gICAgcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmlzQ29uc3RydWN0b3JMZWdhY3kuc2hhbSA9IHRydWU7XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGFyZ3VtZW50KSB8fCBhcmd1bWVudCA9PT0gbnVsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbi8vIGBJc1JlZ0V4cGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzcmVnZXhwXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjbGFzc29mKGl0KSA9PT0gJ1JlZ0V4cCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWNvcmQsIGZuLCBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCkge1xuICB2YXIgaXRlcmF0b3IgPSBJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCA/IHJlY29yZCA6IHJlY29yZC5pdGVyYXRvcjtcbiAgdmFyIG5leHQgPSByZWNvcmQubmV4dDtcbiAgdmFyIHN0ZXAsIHJlc3VsdDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgcmVzdWx0ID0gZm4oc3RlcC52YWx1ZSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBSZXN1bHRQcm90b3R5cGUgPSBSZXN1bHQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfUkVDT1JEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX1JFQ09SRCk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0KTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBjb25kaXRpb24pO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfUkVDT1JEKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZS5pdGVyYXRvcjtcbiAgfSBlbHNlIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICghaXRlckZuKSB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdGVyYWJsZSkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlcmFibGUpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IElTX1JFQ09SRCA/IGl0ZXJhYmxlLm5leHQgOiBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuUFJPUEVSO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcblxuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNDYWxsYWJsZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICAgICAgICAgIGRlZmluZUJ1aWx0SW4oQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkucHJvdG90eXBlLnsgdmFsdWVzLCBAQGl0ZXJhdG9yIH0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBERUZBVUxUID09PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgaWYgKCFJU19QVVJFICYmIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsICduYW1lJywgVkFMVUVTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIGNhbGwobmF0aXZlSXRlcmF0b3IsIHRoaXMpOyB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9ICFpc09iamVjdChJdGVyYXRvclByb3RvdHlwZSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICBkZWZpbmVCdWlsdEluKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNhZmVHZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhZmUtZ2V0LWJ1aWx0LWluJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1pb3MnKTtcbnZhciBJU19JT1NfUEVCQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcy1wZWJibGUnKTtcbnZhciBJU19XRUJPU19XRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1ub2RlJyk7XG5cbnZhciBNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsVGhpcy5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbFRoaXMuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsVGhpcy5Qcm9taXNlO1xudmFyIG1pY3JvdGFzayA9IHNhZmVHZXRCdWlsdEluKCdxdWV1ZU1pY3JvdGFzaycpO1xudmFyIG5vdGlmeSwgdG9nZ2xlLCBub2RlLCBwcm9taXNlLCB0aGVuO1xuXG4vLyBtb2Rlcm4gZW5naW5lcyBoYXZlIHF1ZXVlTWljcm90YXNrIG1ldGhvZFxuaWYgKCFtaWNyb3Rhc2spIHtcbiAgdmFyIHF1ZXVlID0gbmV3IFF1ZXVlKCk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChJU19OT0RFICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGZuID0gcXVldWUuZ2V0KCkpIHRyeSB7XG4gICAgICBmbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAocXVldWUuaGVhZCkgbm90aWZ5KCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICAvLyBhbHNvIGV4Y2VwdCBXZWJPUyBXZWJraXQgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg5OFxuICBpZiAoIUlTX0lPUyAmJiAhSVNfTk9ERSAmJiAhSVNfV0VCT1NfV0VCS0lUICYmIE11dGF0aW9uT2JzZXJ2ZXIgJiYgZG9jdW1lbnQpIHtcbiAgICB0b2dnbGUgPSB0cnVlO1xuICAgIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmICghSVNfSU9TX1BFQkJMRSAmJiBQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIC8vIHdvcmthcm91bmQgb2YgV2ViS2l0IH4gaU9TIFNhZmFyaSAxMC4xIGJ1Z1xuICAgIHByb21pc2UuY29uc3RydWN0b3IgPSBQcm9taXNlO1xuICAgIHRoZW4gPSBiaW5kKHByb21pc2UudGhlbiwgcHJvbWlzZSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gTm9kZS5qcyB3aXRob3V0IHByb21pc2VzXG4gIH0gZWxzZSBpZiAoSVNfTk9ERSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ2VcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgLy8gYHdlYnBhY2tgIGRldiBzZXJ2ZXIgYnVnIG9uIElFIGdsb2JhbCBtZXRob2RzIC0gdXNlIGJpbmQoZm4sIGdsb2JhbClcbiAgICBtYWNyb3Rhc2sgPSBiaW5kKG1hY3JvdGFzaywgZ2xvYmFsVGhpcyk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgbWljcm90YXNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKCFxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICBxdWV1ZS5hZGQoZm4pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pY3JvdGFzaztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUNhbGxhYmxlKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFDYWxsYWJsZShyZWplY3QpO1xufTtcblxuLy8gYE5ld1Byb21pc2VDYXBhYmlsaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbmV3cHJvbWlzZWNhcGFiaWxpdHlcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1JlZ0V4cChpdCkpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gc2FmZVxudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHNob3VsZCBoYXZlIGNvcnJlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucyAoRWRnZSBidWcpXG4gIGlmIChERVNDUklQVE9SUyAmJiAkYXNzaWduKHsgYjogMSB9LCAkYXNzaWduKGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgJ2InLCB7XG4gICAgICAgIHZhbHVlOiAzLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9KSwgeyBiOiAyIH0pKS5iICE9PSAxKSByZXR1cm4gdHJ1ZTtcbiAgLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zeW1ib2wgLS0gc2FmZVxuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdhc3NpZ24gZGV0ZWN0aW9uJyk7XG4gIHZhciBhbHBoYWJldCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbc3ltYm9sXSA9IDc7XG4gIGFscGhhYmV0LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChjaHIpIHsgQltjaHJdID0gY2hyOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW3N5bWJvbF0gIT09IDcgfHwgb2JqZWN0S2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT09IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQob2JqZWN0S2V5cyhTKSwgZ2V0T3duUHJvcGVydHlTeW1ib2xzKFMpKSA6IG9iamVjdEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwocHJvcGVydHlJc0VudW1lcmFibGUsIFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1hc3NpZ25tZW50IC0tIGF2b2lkIG1lbW9yeSBsZWFrXG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7XG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gdHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnXG4gICAgPyBkb2N1bWVudC5kb21haW4gJiYgYWN0aXZlWERvY3VtZW50XG4gICAgICA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSAvLyBvbGQgSUVcbiAgICAgIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKClcbiAgICA6IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KTsgLy8gV1NIXG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1jcmVhdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllc01vZHVsZS5mKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBhcnJheVNsaWNlKHdpbmRvd05hbWVzKTtcbiAgfVxufTtcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIGNsYXNzb2YoaXQpID09PSAnV2luZG93J1xuICAgID8gZ2V0V2luZG93TmFtZXMoaXQpXG4gICAgOiAkZ2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoaXQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIE9iamVjdFByb3RvdHlwZSA9ICRPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gJE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChPKTtcbiAgaWYgKGhhc093bihvYmplY3QsIElFX1BST1RPKSkgcmV0dXJuIG9iamVjdFtJRV9QUk9UT107XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgaWYgKGlzQ2FsbGFibGUoY29uc3RydWN0b3IpICYmIG9iamVjdCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgJE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRpc0V4dGVuc2libGUoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmlzRXh0ZW5zaWJsZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5pc2V4dGVuc2libGVcbm1vZHVsZS5leHBvcnRzID0gKEZBSUxTX09OX1BSSU1JVElWRVMgfHwgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFKSA/IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFICYmIGNsYXNzb2YoaXQpID09PSAnQXJyYXlCdWZmZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlO1xufSA6ICRpc0V4dGVuc2libGU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIE87XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIHZhbHVlOiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgdmFsdWU6IGVycm9yIH07XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgRU5WSVJPTk1FTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgU1VCQ0xBU1NJTkcgPSBmYWxzZTtcbnZhciBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgPSBpc0NhbGxhYmxlKGdsb2JhbFRoaXMuUHJvbWlzZVJlamVjdGlvbkV2ZW50KTtcblxudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gaXNGb3JjZWQoJ1Byb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSA9IGluc3BlY3RTb3VyY2UoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSAhPT0gU3RyaW5nKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSN7IGNhdGNoLCBmaW5hbGx5IH0gaW4gdGhlIHB1cmUgdmVyc2lvbiBmb3IgcHJldmVudGluZyBwcm90b3R5cGUgcG9sbHV0aW9uXG4gIGlmIChJU19QVVJFICYmICEoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10pKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKCFWOF9WRVJTSU9OIHx8IFY4X1ZFUlNJT04gPCA1MSB8fCAhL25hdGl2ZSBjb2RlLy50ZXN0KFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFKSkge1xuICAgIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSBuZXcgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUoMSk7IH0pO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgICB9O1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICAgIFNVQkNMQVNTSU5HID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgICBpZiAoIVNVQkNMQVNTSU5HKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICB9IHJldHVybiAhR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiAoRU5WSVJPTk1FTlQgPT09ICdCUk9XU0VSJyB8fCBFTlZJUk9OTUVOVCA9PT0gJ0RFTk8nKSAmJiAhTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDT05TVFJVQ1RPUjogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsXG4gIFJFSkVDVElPTl9FVkVOVDogTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5ULFxuICBTVUJDTEFTU0lORzogU1VCQ0xBU1NJTkdcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXMuUHJvbWlzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSkudGhlbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oZWFkID0gbnVsbDtcbiAgdGhpcy50YWlsID0gbnVsbDtcbn07XG5cblF1ZXVlLnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbiAoaXRlbSkge1xuICAgIHZhciBlbnRyeSA9IHsgaXRlbTogaXRlbSwgbmV4dDogbnVsbCB9O1xuICAgIHZhciB0YWlsID0gdGhpcy50YWlsO1xuICAgIGlmICh0YWlsKSB0YWlsLm5leHQgPSBlbnRyeTtcbiAgICBlbHNlIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgIHRoaXMudGFpbCA9IGVudHJ5O1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZW50cnkgPSB0aGlzLmhlYWQ7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICB2YXIgbmV4dCA9IHRoaXMuaGVhZCA9IGVudHJ5Lm5leHQ7XG4gICAgICBpZiAobmV4dCA9PT0gbnVsbCkgdGhpcy50YWlsID0gbnVsbDtcbiAgICAgIHJldHVybiBlbnRyeS5pdGVtO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWV1ZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gQXZvaWQgTm9kZUpTIGV4cGVyaW1lbnRhbCB3YXJuaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghREVTQ1JJUFRPUlMpIHJldHVybiBnbG9iYWxUaGlzW25hbWVdO1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWxUaGlzLCBuYW1lKTtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIEVOVklST05NRU5UID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50Jyk7XG52YXIgVVNFUl9BR0VOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcblxudmFyIEZ1bmN0aW9uID0gZ2xvYmFsVGhpcy5GdW5jdGlvbjtcbi8vIGRpcnR5IElFOS0gYW5kIEJ1biAwLjMuMC0gY2hlY2tzXG52YXIgV1JBUCA9IC9NU0lFIC5cXC4vLnRlc3QoVVNFUl9BR0VOVCkgfHwgRU5WSVJPTk1FTlQgPT09ICdCVU4nICYmIChmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZXJzaW9uID0gZ2xvYmFsVGhpcy5CdW4udmVyc2lvbi5zcGxpdCgnLicpO1xuICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPCAzIHx8IHZlcnNpb25bMF0gPT09ICcwJyAmJiAodmVyc2lvblsxXSA8IDMgfHwgdmVyc2lvblsxXSA9PT0gJzMnICYmIHZlcnNpb25bMl0gPT09ICcwJyk7XG59KSgpO1xuXG4vLyBJRTktIC8gQnVuIDAuMy4wLSBzZXRUaW1lb3V0IC8gc2V0SW50ZXJ2YWwgLyBzZXRJbW1lZGlhdGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvMTYzM1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBoYXNUaW1lQXJnKSB7XG4gIHZhciBmaXJzdFBhcmFtSW5kZXggPSBoYXNUaW1lQXJnID8gMiA6IDE7XG4gIHJldHVybiBXUkFQID8gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSkgPiBmaXJzdFBhcmFtSW5kZXg7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgcGFyYW1zID0gYm91bmRBcmdzID8gYXJyYXlTbGljZShhcmd1bWVudHMsIGZpcnN0UGFyYW1JbmRleCkgOiBbXTtcbiAgICB2YXIgY2FsbGJhY2sgPSBib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdGhpcywgcGFyYW1zKTtcbiAgICB9IDogZm47XG4gICAgcmV0dXJuIGhhc1RpbWVBcmcgPyBzY2hlZHVsZXIoY2FsbGJhY2ssIHRpbWVvdXQpIDogc2NoZWR1bGVyKGNhbGxiYWNrKTtcbiAgfSA6IHNjaGVkdWxlcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgaXRlcmF0ZShzZXQsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIGVsc2UgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBjYWxsZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbGVyJyk7XG5cbnZhciBTZXQgPSBnZXRCdWlsdEluKCdTZXQnKTtcbnZhciBTZXRQcm90b3R5cGUgPSBTZXQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgU2V0OiBTZXQsXG4gIGFkZDogY2FsbGVyKCdhZGQnLCAxKSxcbiAgaGFzOiBjYWxsZXIoJ2hhcycsIDEpLFxuICByZW1vdmU6IGNhbGxlcignZGVsZXRlJywgMSksXG4gIHByb3RvOiBTZXRQcm90b3R5cGVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pbnRlcnNlY3Rpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW50ZXJzZWN0aW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHtcbiAgICBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoaGFzKE8sIGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEaXNqb2ludEZyb20ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSByZXR1cm4gaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdWJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1YnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBpdGVyYXRlKE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1cGVyc2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0LCBmbiwgaW50ZXJydXB0aWJsZSkge1xuICByZXR1cm4gaW50ZXJydXB0aWJsZSA/IGl0ZXJhdGVTaW1wbGUoc2V0LmtleXMoKSwgZm4sIHRydWUpIDogc2V0LmZvckVhY2goZm4pO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBzZXQuc2l6ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ltbWV0cmljRGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICAgIGVsc2UgYWRkKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRBRywgU1RBVElDLCBTRVRfTUVUSE9EKSB7XG4gIHZhciB0YXJnZXQgPSBTVEFUSUMgPyBpdCA6IGl0ICYmIGl0LnByb3RvdHlwZTtcbiAgaWYgKHRhcmdldCkge1xuICAgIGlmICghaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gICAgfVxuICAgIGlmIChTRVRfTUVUSE9EICYmICFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsICd0b1N0cmluZycsIHRvU3RyaW5nKTtcbiAgICB9XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGFkZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmFkZDtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVuaW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzguMScsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMS9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgaXNOdWxsT3JVbmRlZmluZWQoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFDb25zdHJ1Y3RvcihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyICRyZXBlYXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXJlcGVhdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciByZXBlYXQgPSB1bmN1cnJ5VGhpcygkcmVwZWF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHBhZFN0YXJ0LCBwYWRFbmQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19FTkQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gICAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICAgIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogdG9TdHJpbmcoZmlsbFN0cmluZyk7XG4gICAgdmFyIGZpbGxMZW4sIHN0cmluZ0ZpbGxlcjtcbiAgICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09PSAnJykgcmV0dXJuIFM7XG4gICAgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgICBzdHJpbmdGaWxsZXIgPSByZXBlYXQoZmlsbFN0ciwgY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ1NsaWNlKHN0cmluZ0ZpbGxlciwgMCwgZmlsbExlbik7XG4gICAgcmV0dXJuIElTX0VORCA/IFMgKyBzdHJpbmdGaWxsZXIgOiBzdHJpbmdGaWxsZXIgKyBTO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnBhZHN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5wYWRFbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucGFkZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL3B1bnljb2RlLmpzL2Jsb2IvbWFzdGVyL3B1bnljb2RlLmpzXG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBtYXhJbnQgPSAyMTQ3NDgzNjQ3OyAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG52YXIgYmFzZSA9IDM2O1xudmFyIHRNaW4gPSAxO1xudmFyIHRNYXggPSAyNjtcbnZhciBza2V3ID0gMzg7XG52YXIgZGFtcCA9IDcwMDtcbnZhciBpbml0aWFsQmlhcyA9IDcyO1xudmFyIGluaXRpYWxOID0gMTI4OyAvLyAweDgwXG52YXIgZGVsaW1pdGVyID0gJy0nOyAvLyAnXFx4MkQnXG52YXIgcmVnZXhOb25BU0NJSSA9IC9bXlxcMC1cXHUwMDdFXS87IC8vIG5vbi1BU0NJSSBjaGFyc1xudmFyIHJlZ2V4U2VwYXJhdG9ycyA9IC9bLlxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZzsgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xudmFyIE9WRVJGTE9XX0VSUk9SID0gJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJztcbnZhciBiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW47XG5cbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKHJlZ2V4U2VwYXJhdG9ycy5leGVjKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG52YXIgdG9Mb3dlckNhc2UgPSB1bmN1cnJ5VGhpcygnJy50b0xvd2VyQ2FzZSk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxuICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcbiAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuICogbWF0Y2hpbmcgVVRGLTE2LlxuICovXG52YXIgdWNzMmRlY29kZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuICB2YXIgY291bnRlciA9IDA7XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICB3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGNoYXJDb2RlQXQoc3RyaW5nLCBjb3VudGVyKyspO1xuICAgIGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICAgIC8vIEl0J3MgYSBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXIuXG4gICAgICB2YXIgZXh0cmEgPSBjaGFyQ29kZUF0KHN0cmluZywgY291bnRlcisrKTtcbiAgICAgIGlmICgoZXh0cmEgJiAweEZDMDApID09PSAweERDMDApIHsgLy8gTG93IHN1cnJvZ2F0ZS5cbiAgICAgICAgcHVzaChvdXRwdXQsICgodmFsdWUgJiAweDNGRikgPDwgMTApICsgKGV4dHJhICYgMHgzRkYpICsgMHgxMDAwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJdCdzIGFuIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZVxuICAgICAgICAvLyBuZXh0IGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpci5cbiAgICAgICAgcHVzaChvdXRwdXQsIHZhbHVlKTtcbiAgICAgICAgY291bnRlci0tO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwdXNoKG91dHB1dCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGRpZ2l0L2ludGVnZXIgaW50byBhIGJhc2ljIGNvZGUgcG9pbnQuXG4gKi9cbnZhciBkaWdpdFRvQmFzaWMgPSBmdW5jdGlvbiAoZGlnaXQpIHtcbiAgLy8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcbiAgLy8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XG4gIHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNik7XG59O1xuXG4vKipcbiAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG4gKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuICovXG52YXIgYWRhcHQgPSBmdW5jdGlvbiAoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG4gIHZhciBrID0gMDtcbiAgZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcbiAgZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuICB3aGlsZSAoZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxKSB7XG4gICAgZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuICAgIGsgKz0gYmFzZTtcbiAgfVxuICByZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcbiAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG4gKi9cbnZhciBlbmNvZGUgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuXG4gIC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIGFuIGFycmF5IG9mIFVuaWNvZGUgY29kZSBwb2ludHMuXG4gIGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cbiAgLy8gQ2FjaGUgdGhlIGxlbmd0aC5cbiAgdmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHN0YXRlLlxuICB2YXIgbiA9IGluaXRpYWxOO1xuICB2YXIgZGVsdGEgPSAwO1xuICB2YXIgYmlhcyA9IGluaXRpYWxCaWFzO1xuICB2YXIgaSwgY3VycmVudFZhbHVlO1xuXG4gIC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHMuXG4gIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGN1cnJlbnRWYWx1ZSA9IGlucHV0W2ldO1xuICAgIGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG4gICAgICBwdXNoKG91dHB1dCwgZnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7IC8vIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cbiAgdmFyIGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGg7IC8vIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXG4gIC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIHdpdGggYSBkZWxpbWl0ZXIgdW5sZXNzIGl0J3MgZW1wdHkuXG4gIGlmIChiYXNpY0xlbmd0aCkge1xuICAgIHB1c2gob3V0cHV0LCBkZWxpbWl0ZXIpO1xuICB9XG5cbiAgLy8gTWFpbiBlbmNvZGluZyBsb29wOlxuICB3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuICAgIC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHQgbGFyZ2VyIG9uZTpcbiAgICB2YXIgbSA9IG1heEludDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9IGlucHV0W2ldO1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcbiAgICAgICAgbSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbmNyZWFzZSBgZGVsdGFgIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVyJ3MgPG4saT4gc3RhdGUgdG8gPG0sMD4sIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93LlxuICAgIHZhciBoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG4gICAgaWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcbiAgICAgIHRocm93IG5ldyAkUmFuZ2VFcnJvcihPVkVSRkxPV19FUlJPUik7XG4gICAgfVxuXG4gICAgZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcbiAgICBuID0gbTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgY3VycmVudFZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG4gICAgICAgIHRocm93IG5ldyAkUmFuZ2VFcnJvcihPVkVSRkxPV19FUlJPUik7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudFZhbHVlID09PSBuKSB7XG4gICAgICAgIC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyLlxuICAgICAgICB2YXIgcSA9IGRlbHRhO1xuICAgICAgICB2YXIgayA9IGJhc2U7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgdmFyIHQgPSBrIDw9IGJpYXMgPyB0TWluIDogayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcztcbiAgICAgICAgICBpZiAocSA8IHQpIGJyZWFrO1xuICAgICAgICAgIHZhciBxTWludXNUID0gcSAtIHQ7XG4gICAgICAgICAgdmFyIGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcbiAgICAgICAgICBwdXNoKG91dHB1dCwgZnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QpKSk7XG4gICAgICAgICAgcSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcbiAgICAgICAgICBrICs9IGJhc2U7XG4gICAgICAgIH1cblxuICAgICAgICBwdXNoKG91dHB1dCwgZnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxKSkpO1xuICAgICAgICBiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT09IGJhc2ljTGVuZ3RoKTtcbiAgICAgICAgZGVsdGEgPSAwO1xuICAgICAgICBoYW5kbGVkQ1BDb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRlbHRhKys7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBqb2luKG91dHB1dCwgJycpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIGVuY29kZWQgPSBbXTtcbiAgdmFyIGxhYmVscyA9IHNwbGl0KHJlcGxhY2UodG9Mb3dlckNhc2UoaW5wdXQpLCByZWdleFNlcGFyYXRvcnMsICdcXHUwMDJFJyksICcuJyk7XG4gIHZhciBpLCBsYWJlbDtcbiAgZm9yIChpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7IGkrKykge1xuICAgIGxhYmVsID0gbGFiZWxzW2ldO1xuICAgIHB1c2goZW5jb2RlZCwgZXhlYyhyZWdleE5vbkFTQ0lJLCBsYWJlbCkgPyAneG4tLScgKyBlbmNvZGUobGFiZWwpIDogbGFiZWwpO1xuICB9XG4gIHJldHVybiBqb2luKGVuY29kZWQsICcuJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGVhdGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwZWF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXJPckluZmluaXR5KGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT09IEluZmluaXR5KSB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoJ1dyb25nIG51bWJlciBvZiByZXBldGl0aW9ucycpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzdWx0ICs9IHN0cjtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBub24gPSAnXFx1MjAwQlxcdTAwODVcXHUxODBFJztcblxuLy8gY2hlY2sgdGhhdCBhIG1ldGhvZCB3b3JrcyB3aXRoIHRoZSBjb3JyZWN0IGxpc3Rcbi8vIG9mIHdoaXRlc3BhY2VzIGFuZCBoYXMgYSBjb3JyZWN0IG5hbWVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdKClcbiAgICAgIHx8IG5vbltNRVRIT0RfTkFNRV0oKSAhPT0gbm9uXG4gICAgICB8fCAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdLm5hbWUgIT09IE1FVEhPRF9OQU1FKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXlsnICsgd2hpdGVzcGFjZXMgKyAnXSsnKTtcbnZhciBydHJpbSA9IFJlZ0V4cCgnKF58W14nICsgd2hpdGVzcGFjZXMgKyAnXSlbJyArIHdoaXRlc3BhY2VzICsgJ10rJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgbHRyaW0sICcnKTtcbiAgICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBydHJpbSwgJyQxJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbVJpZ2h0LCB0cmltRW5kIH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgdmFyIFN5bWJvbFByb3RvdHlwZSA9IFN5bWJvbCAmJiBTeW1ib2wucHJvdG90eXBlO1xuICB2YXIgdmFsdWVPZiA9IFN5bWJvbFByb3RvdHlwZSAmJiBTeW1ib2xQcm90b3R5cGUudmFsdWVPZjtcbiAgdmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuICBpZiAoU3ltYm9sUHJvdG90eXBlICYmICFTeW1ib2xQcm90b3R5cGVbVE9fUFJJTUlUSVZFXSkge1xuICAgIC8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgLmxlbmd0aFxuICAgIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCBUT19QUklNSVRJVkUsIGZ1bmN0aW9uIChoaW50KSB7XG4gICAgICByZXR1cm4gY2FsbCh2YWx1ZU9mLCB0aGlzKTtcbiAgICB9LCB7IGFyaXR5OiAxIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciBrZXlGb3IgPSBTeW1ib2wua2V5Rm9yO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbCB8fCBmdW5jdGlvbiBpc1JlZ2lzdGVyZWRTeW1ib2wodmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4ga2V5Rm9yKHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSkpICE9PSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG52YXIgJGlzV2VsbEtub3duU3ltYm9sID0gU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRCdWlsdEluKCdPYmplY3QnLCAnZ2V0T3duUHJvcGVydHlOYW1lcycpO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuZm9yICh2YXIgaSA9IDAsIHN5bWJvbEtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKFN5bWJvbCksIHN5bWJvbEtleXNMZW5ndGggPSBzeW1ib2xLZXlzLmxlbmd0aDsgaSA8IHN5bWJvbEtleXNMZW5ndGg7IGkrKykge1xuICAvLyBzb21lIG9sZCBlbmdpbmVzIHRocm93cyBvbiBhY2Nlc3MgdG8gc29tZSBrZXlzIGxpa2UgYGFyZ3VtZW50c2Agb3IgYGNhbGxlcmBcbiAgdHJ5IHtcbiAgICB2YXIgc3ltYm9sS2V5ID0gc3ltYm9sS2V5c1tpXTtcbiAgICBpZiAoaXNTeW1ib2woU3ltYm9sW3N5bWJvbEtleV0pKSB3ZWxsS25vd25TeW1ib2woc3ltYm9sS2V5KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufVxuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzV2VsbEtub3duU3ltYm9sKHZhbHVlKSB7XG4gIGlmICgkaXNXZWxsS25vd25TeW1ib2wgJiYgJGlzV2VsbEtub3duU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHRydWU7XG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbCA9IHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSk7XG4gICAgZm9yICh2YXIgaiA9IDAsIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDsgaiA8IGtleXNMZW5ndGg7IGorKykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcSAtLSBwb2x5ZmlsbGVkIHN5bWJvbHMgY2FzZVxuICAgICAgaWYgKFdlbGxLbm93blN5bWJvbHNTdG9yZVtrZXlzW2pdXSA9PSBzeW1ib2wpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1pb3MnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLW5vZGUnKTtcblxudmFyIHNldCA9IGdsb2JhbFRoaXMuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyID0gZ2xvYmFsVGhpcy5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsVGhpcy5EaXNwYXRjaDtcbnZhciBGdW5jdGlvbiA9IGdsb2JhbFRoaXMuRnVuY3Rpb247XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWxUaGlzLk1lc3NhZ2VDaGFubmVsO1xudmFyIFN0cmluZyA9IGdsb2JhbFRoaXMuU3RyaW5nO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgJGxvY2F0aW9uLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcblxuZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBEZW5vIHRocm93cyBhIFJlZmVyZW5jZUVycm9yIG9uIGBsb2NhdGlvbmAgYWNjZXNzIHdpdGhvdXQgYC0tbG9jYXRpb25gIGZsYWdcbiAgJGxvY2F0aW9uID0gZ2xvYmFsVGhpcy5sb2NhdGlvbjtcbn0pO1xuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlmIChoYXNPd24ocXVldWUsIGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG5cbnZhciBydW5uZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBydW4oaWQpO1xuICB9O1xufTtcblxudmFyIGV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuKGV2ZW50LmRhdGEpO1xufTtcblxudmFyIGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gb2xkIGVuZ2luZXMgaGF2ZSBub3QgbG9jYXRpb24ub3JpZ2luXG4gIGdsb2JhbFRoaXMucG9zdE1lc3NhZ2UoU3RyaW5nKGlkKSwgJGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArICRsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoaGFuZGxlcikge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZXZlbnRMaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKFxuICAgIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lciAmJlxuICAgIGlzQ2FsbGFibGUoZ2xvYmFsVGhpcy5wb3N0TWVzc2FnZSkgJiZcbiAgICAhZ2xvYmFsVGhpcy5pbXBvcnRTY3JpcHRzICYmXG4gICAgJGxvY2F0aW9uICYmICRsb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgICFmYWlscyhnbG9iYWxQb3N0TWVzc2FnZURlZmVyKVxuICApIHtcbiAgICBkZWZlciA9IGdsb2JhbFBvc3RNZXNzYWdlRGVmZXI7XG4gICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZXZlbnRMaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bihpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQocnVubmVyKGlkKSwgMCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGNsZWFyOiBjbGVhclxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9yZWxhdGl2ZS11cmwtc3R5bGUgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgdmFyIHVybCA9IG5ldyBVUkwoJ2I/YT0xJmI9MiZjPTMnLCAnaHR0cHM6Ly9hJyk7XG4gIHZhciBwYXJhbXMgPSB1cmwuc2VhcmNoUGFyYW1zO1xuICB2YXIgcGFyYW1zMiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoJ2E9MSZhPTImYj0zJyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdXJsLnBhdGhuYW1lID0gJ2MlMjBkJztcbiAgcGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICBwYXJhbXNbJ2RlbGV0ZSddKCdiJyk7XG4gICAgcmVzdWx0ICs9IGtleSArIHZhbHVlO1xuICB9KTtcbiAgcGFyYW1zMlsnZGVsZXRlJ10oJ2EnLCAyKTtcbiAgLy8gYHVuZGVmaW5lZGAgY2FzZSBpcyBhIENocm9taXVtIDExNyBidWdcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTQyMjJcbiAgcGFyYW1zMlsnZGVsZXRlJ10oJ2InLCB1bmRlZmluZWQpO1xuICByZXR1cm4gKElTX1BVUkUgJiYgKCF1cmwudG9KU09OIHx8ICFwYXJhbXMyLmhhcygnYScsIDEpIHx8IHBhcmFtczIuaGFzKCdhJywgMikgfHwgIXBhcmFtczIuaGFzKCdhJywgdW5kZWZpbmVkKSB8fCBwYXJhbXMyLmhhcygnYicpKSlcbiAgICB8fCAoIXBhcmFtcy5zaXplICYmIChJU19QVVJFIHx8ICFERVNDUklQVE9SUykpXG4gICAgfHwgIXBhcmFtcy5zb3J0XG4gICAgfHwgdXJsLmhyZWYgIT09ICdodHRwczovL2EvYyUyMGQ/YT0xJmM9MydcbiAgICB8fCBwYXJhbXMuZ2V0KCdjJykgIT09ICczJ1xuICAgIHx8IFN0cmluZyhuZXcgVVJMU2VhcmNoUGFyYW1zKCc/YT0xJykpICE9PSAnYT0xJ1xuICAgIHx8ICFwYXJhbXNbSVRFUkFUT1JdXG4gICAgLy8gdGhyb3dzIGluIEVkZ2VcbiAgICB8fCBuZXcgVVJMKCdodHRwczovL2FAYicpLnVzZXJuYW1lICE9PSAnYSdcbiAgICB8fCBuZXcgVVJMU2VhcmNoUGFyYW1zKG5ldyBVUkxTZWFyY2hQYXJhbXMoJ2E9YicpKS5nZXQoJ2EnKSAhPT0gJ2InXG4gICAgLy8gbm90IHB1bnljb2RlZCBpbiBFZGdlXG4gICAgfHwgbmV3IFVSTCgnaHR0cHM6Ly/RgtC10YHRgicpLmhvc3QgIT09ICd4bi0tZTFheWJjJ1xuICAgIC8vIG5vdCBlc2NhcGVkIGluIENocm9tZSA2Mi1cbiAgICB8fCBuZXcgVVJMKCdodHRwczovL2Ej0LEnKS5oYXNoICE9PSAnIyVEMCVCMSdcbiAgICAvLyBmYWlscyBpbiBDaHJvbWUgNjYtXG4gICAgfHwgcmVzdWx0ICE9PSAnYTFjMydcbiAgICAvLyB0aHJvd3MgaW4gU2FmYXJpXG4gICAgfHwgbmV3IFVSTCgnaHR0cHM6Ly94JywgdW5kZWZpbmVkKS5ob3N0ICE9PSAneCc7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhc3NlZCwgcmVxdWlyZWQpIHtcbiAgaWYgKHBhc3NlZCA8IHJlcXVpcmVkKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKTtcbiAgcmV0dXJuIHBhc3NlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5leHBvcnRzLmYgPSB3ZWxsS25vd25TeW1ib2w7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyJyArXG4gICdcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaW5zdGFsbEVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJEVycm9yID0gRXJyb3I7XG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbnZhciAkQWdncmVnYXRlRXJyb3IgPSBmdW5jdGlvbiBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIG1lc3NhZ2UgLyogLCBvcHRpb25zICovKSB7XG4gIHZhciBpc0luc3RhbmNlID0gaXNQcm90b3R5cGVPZihBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSwgdGhpcyk7XG4gIHZhciB0aGF0O1xuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICB0aGF0ID0gc2V0UHJvdG90eXBlT2YobmV3ICRFcnJvcigpLCBpc0luc3RhbmNlID8gZ2V0UHJvdG90eXBlT2YodGhpcykgOiBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhhdCA9IGlzSW5zdGFuY2UgPyB0aGlzIDogY3JlYXRlKEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlKTtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgVE9fU1RSSU5HX1RBRywgJ0Vycm9yJyk7XG4gIH1cbiAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdtZXNzYWdlJywgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQobWVzc2FnZSkpO1xuICBpbnN0YWxsRXJyb3JTdGFjayh0aGF0LCAkQWdncmVnYXRlRXJyb3IsIHRoYXQuc3RhY2ssIDEpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIGluc3RhbGxFcnJvckNhdXNlKHRoYXQsIGFyZ3VtZW50c1syXSk7XG4gIHZhciBlcnJvcnNBcnJheSA9IFtdO1xuICBpdGVyYXRlKGVycm9ycywgcHVzaCwgeyB0aGF0OiBlcnJvcnNBcnJheSB9KTtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdlcnJvcnMnLCBlcnJvcnNBcnJheSk7XG4gIHJldHVybiB0aGF0O1xufTtcblxuaWYgKHNldFByb3RvdHlwZU9mKSBzZXRQcm90b3R5cGVPZigkQWdncmVnYXRlRXJyb3IsICRFcnJvcik7XG5lbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IsIHsgbmFtZTogdHJ1ZSB9KTtcblxudmFyIEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlID0gJEFnZ3JlZ2F0ZUVycm9yLnByb3RvdHlwZSA9IGNyZWF0ZSgkRXJyb3IucHJvdG90eXBlLCB7XG4gIGNvbnN0cnVjdG9yOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJEFnZ3JlZ2F0ZUVycm9yKSxcbiAgbWVzc2FnZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICcnKSxcbiAgbmFtZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICdBZ2dyZWdhdGVFcnJvcicpXG59KTtcblxuLy8gYEFnZ3JlZ2F0ZUVycm9yYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZ2dyZWdhdGUtZXJyb3ItY29uc3RydWN0b3JcbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBhcml0eTogMiB9LCB7XG4gIEFnZ3JlZ2F0ZUVycm9yOiAkQWdncmVnYXRlRXJyb3Jcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyByZXBsYWNlZCB0byBtb2R1bGUgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yLmNvbnN0cnVjdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbi8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9IFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBpc0NvbmNhdFNwcmVhZGFibGUgPSBmdW5jdGlvbiAoTykge1xuICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzcHJlYWRhYmxlID0gT1tJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gIHJldHVybiBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KE8pO1xufTtcblxudmFyIEZPUkNFRCA9ICFJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIHx8ICFhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBjb25jYXQ6IGZ1bmN0aW9uIGNvbmNhdChhcmcpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoRSk7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgbGVuKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyAxKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogW10uZm9yRWFjaCAhPT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5jbHVkZXM7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG4vLyBGRjk5KyBidWdcbnZhciBCUk9LRU5fT05fU1BBUlNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluY2x1ZGVzIC0tIGRldGVjdGlvblxuICByZXR1cm4gIUFycmF5KDEpLmluY2x1ZGVzKCk7XG59KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogQlJPS0VOX09OX1NQQVJTRSB9LCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdpbmNsdWRlcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmlzYXJyYXlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBpc0FycmF5OiBpc0FycmF5XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICB9XG4gIHN3aXRjaCAoc3RhdGUua2luZCkge1xuICAgIGNhc2UgJ2tleXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChpbmRleCwgZmFsc2UpO1xuICAgIGNhc2UgJ3ZhbHVlcyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHRhcmdldFtpbmRleF0sIGZhbHNlKTtcbiAgfSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBmYWxzZSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNvYmplY3RcbnZhciB2YWx1ZXMgPSBJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcblxuLy8gVjggfiBDaHJvbWUgNDUtIGJ1Z1xuaWYgKCFJU19QVVJFICYmIERFU0NSSVBUT1JTICYmIHZhbHVlcy5uYW1lICE9PSAndmFsdWVzJykgdHJ5IHtcbiAgZGVmaW5lUHJvcGVydHkodmFsdWVzLCAnbmFtZScsIHsgdmFsdWU6ICd2YWx1ZXMnIH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpbnRlcm5hbFNvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc29ydCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIEZGID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWZmLXZlcnNpb24nKTtcbnZhciBJRV9PUl9FREdFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgV0VCS0lUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXdlYmtpdC12ZXJzaW9uJyk7XG5cbnZhciB0ZXN0ID0gW107XG52YXIgbmF0aXZlU29ydCA9IHVuY3VycnlUaGlzKHRlc3Quc29ydCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKHRlc3QucHVzaCk7XG5cbi8vIElFOC1cbnZhciBGQUlMU19PTl9VTkRFRklORUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSk7XG4vLyBWOCBidWdcbnZhciBGQUlMU19PTl9OVUxMID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQobnVsbCk7XG59KTtcbi8vIE9sZCBXZWJLaXRcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29ydCcpO1xuXG52YXIgU1RBQkxFX1NPUlQgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBmZWF0dXJlIGRldGVjdGlvbiBjYW4gYmUgdG9vIHNsb3csIHNvIGNoZWNrIGVuZ2luZXMgdmVyc2lvbnNcbiAgaWYgKFY4KSByZXR1cm4gVjggPCA3MDtcbiAgaWYgKEZGICYmIEZGID4gMykgcmV0dXJuO1xuICBpZiAoSUVfT1JfRURHRSkgcmV0dXJuIHRydWU7XG4gIGlmIChXRUJLSVQpIHJldHVybiBXRUJLSVQgPCA2MDM7XG5cbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgY29kZSwgY2hyLCB2YWx1ZSwgaW5kZXg7XG5cbiAgLy8gZ2VuZXJhdGUgYW4gYXJyYXkgd2l0aCBtb3JlIDUxMiBlbGVtZW50cyAoQ2hha3JhIGFuZCBvbGQgVjggZmFpbHMgb25seSBpbiB0aGlzIGNhc2UpXG4gIGZvciAoY29kZSA9IDY1OyBjb2RlIDwgNzY7IGNvZGUrKykge1xuICAgIGNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgIGNhc2UgNjY6IGNhc2UgNjk6IGNhc2UgNzA6IGNhc2UgNzI6IHZhbHVlID0gMzsgYnJlYWs7XG4gICAgICBjYXNlIDY4OiBjYXNlIDcxOiB2YWx1ZSA9IDQ7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogdmFsdWUgPSAyO1xuICAgIH1cblxuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDQ3OyBpbmRleCsrKSB7XG4gICAgICB0ZXN0LnB1c2goeyBrOiBjaHIgKyBpbmRleCwgdjogdmFsdWUgfSk7XG4gICAgfVxuICB9XG5cbiAgdGVzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLnYgLSBhLnY7IH0pO1xuXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRlc3QubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY2hyID0gdGVzdFtpbmRleF0uay5jaGFyQXQoMCk7XG4gICAgaWYgKHJlc3VsdC5jaGFyQXQocmVzdWx0Lmxlbmd0aCAtIDEpICE9PSBjaHIpIHJlc3VsdCArPSBjaHI7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0ICE9PSAnREdCRUZIQUNJSksnO1xufSk7XG5cbnZhciBGT1JDRUQgPSBGQUlMU19PTl9VTkRFRklORUQgfHwgIUZBSUxTX09OX05VTEwgfHwgIVNUUklDVF9NRVRIT0QgfHwgIVNUQUJMRV9TT1JUO1xuXG52YXIgZ2V0U29ydENvbXBhcmUgPSBmdW5jdGlvbiAoY29tcGFyZWZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeCwgeSkge1xuICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHJldHVybiAtMTtcbiAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIHJldHVybiArY29tcGFyZWZuKHgsIHkpIHx8IDA7XG4gICAgcmV0dXJuIHRvU3RyaW5nKHgpID4gdG9TdHJpbmcoeSkgPyAxIDogLTE7XG4gIH07XG59O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29ydFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIGFDYWxsYWJsZShjb21wYXJlZm4pO1xuXG4gICAgdmFyIGFycmF5ID0gdG9PYmplY3QodGhpcyk7XG5cbiAgICBpZiAoU1RBQkxFX1NPUlQpIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZCA/IG5hdGl2ZVNvcnQoYXJyYXkpIDogbmF0aXZlU29ydChhcnJheSwgY29tcGFyZWZuKTtcblxuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciBhcnJheUxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGFycmF5KTtcbiAgICB2YXIgaXRlbXNMZW5ndGgsIGluZGV4O1xuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChpbmRleCBpbiBhcnJheSkgcHVzaChpdGVtcywgYXJyYXlbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpbnRlcm5hbFNvcnQoaXRlbXMsIGdldFNvcnRDb21wYXJlKGNvbXBhcmVmbikpO1xuXG4gICAgaXRlbXNMZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVtcyk7XG4gICAgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgaXRlbXNMZW5ndGgpIGFycmF5W2luZGV4XSA9IGl0ZW1zW2luZGV4KytdO1xuICAgIHdoaWxlIChpbmRleCA8IGFycmF5TGVuZ3RoKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coYXJyYXksIGluZGV4KyspO1xuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyICREYXRlID0gRGF0ZTtcbnZhciB0aGlzVGltZVZhbHVlID0gdW5jdXJyeVRoaXMoJERhdGUucHJvdG90eXBlLmdldFRpbWUpO1xuXG4vLyBgRGF0ZS5ub3dgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLm5vd1xuJCh7IHRhcmdldDogJ0RhdGUnLCBzdGF0OiB0cnVlIH0sIHtcbiAgbm93OiBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuIHRoaXNUaW1lVmFsdWUobmV3ICREYXRlKCkpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIHRvSVNPU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RhdGUtdG8taXNvLXN0cmluZycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IERhdGUoTmFOKS50b0pTT04oKSAhPT0gbnVsbFxuICAgIHx8IGNhbGwoRGF0ZS5wcm90b3R5cGUudG9KU09OLCB7IHRvSVNPU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9IH0pICE9PSAxO1xufSk7XG5cbi8vIGBEYXRlLnByb3RvdHlwZS50b0pTT05gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS50b2pzb25cbiQoeyB0YXJnZXQ6ICdEYXRlJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oa2V5KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgcHYgPSB0b1ByaW1pdGl2ZShPLCAnbnVtYmVyJyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6XG4gICAgICAoISgndG9JU09TdHJpbmcnIGluIE8pICYmIGNsYXNzb2YoTykgPT09ICdEYXRlJykgPyBjYWxsKHRvSVNPU3RyaW5nLCBPKSA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBnZXRSZXBsYWNlckZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCdzdHJpbmdpZnkgZGV0ZWN0aW9uJyk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPT0gJ1tudWxsXSdcbiAgICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9PSAne30nXG4gICAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gSlNPTltAQHRvU3RyaW5nVGFnXSBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdsb2JhbFRoaXMuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgYXJpdHk6IDIsIGZvcmNlZDogT2JqZWN0LmFzc2lnbiAhPT0gYXNzaWduIH0sIHtcbiAgYXNzaWduOiBhc3NpZ25cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgIT09IGRlZmluZVByb3BlcnRpZXMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEZPUkNFRCA9ICFERVNDUklQVE9SUyB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0luZGV4ZWRPYmplY3QoaXQpLCBrZXkpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZPUkNFRCA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eXN5bWJvbHNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgdmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5U3ltYm9scyA/ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3QoaXQpKSA6IFtdO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbFNldHRsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbHNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ2Z1bGZpbGxlZCcsIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdyZWplY3RlZCcsIHJlYXNvbjogZXJyb3IgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwoJHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFueVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYW55OiBmdW5jdGlvbiBhbnkoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIEFnZ3JlZ2F0ZUVycm9yID0gZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKTtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGVycm9yO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5jYXRjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmNhdGNoXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SLCByZWFsOiB0cnVlIH0sIHtcbiAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNjYXRjaGAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG5pZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpKSB7XG4gIHZhciBtZXRob2QgPSBnZXRCdWlsdEluKCdQcm9taXNlJykucHJvdG90eXBlWydjYXRjaCddO1xuICBpZiAoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnY2F0Y2gnLCBtZXRob2QsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLW5vZGUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLkNPTlNUUlVDVE9SO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5SRUpFQ1RJT05fRVZFTlQ7XG52YXIgTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uU1VCQ0xBU1NJTkc7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvciA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcjtcbnZhciBQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG52YXIgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHk7XG5cbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbFRoaXMuZGlzcGF0Y2hFdmVudCk7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG5cbnZhciBJbnRlcm5hbCwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFByb21pc2VXcmFwcGVyLCBuYXRpdmVUaGVuO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiBpc0NhbGxhYmxlKHRoZW4gPSBpdC50aGVuKSA/IHRoZW4gOiBmYWxzZTtcbn07XG5cbnZhciBjYWxsUmVhY3Rpb24gPSBmdW5jdGlvbiAocmVhY3Rpb24sIHN0YXRlKSB7XG4gIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICB2YXIgb2sgPSBzdGF0ZS5zdGF0ZSA9PT0gRlVMRklMTEVEO1xuICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgdHJ5IHtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgaWYgKCFvaykge1xuICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHN0YXRlKTtcbiAgICAgICAgc3RhdGUucmVqZWN0aW9uID0gSEFORExFRDtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgIGNhbGwodGhlbiwgcmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgfVxufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVhY3Rpb25zID0gc3RhdGUucmVhY3Rpb25zO1xuICAgIHZhciByZWFjdGlvbjtcbiAgICB3aGlsZSAocmVhY3Rpb24gPSByZWFjdGlvbnMuZ2V0KCkpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5ub3RpZmllZCA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhc3RhdGUucmVqZWN0aW9uKSBvblVuaGFuZGxlZChzdGF0ZSk7XG4gIH0pO1xufTtcblxudmFyIGRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAobmFtZSwgcHJvbWlzZSwgcmVhc29uKSB7XG4gIHZhciBldmVudCwgaGFuZGxlcjtcbiAgaWYgKERJU1BBVENIX0VWRU5UKSB7XG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICBldmVudC5wcm9taXNlID0gcHJvbWlzZTtcbiAgICBldmVudC5yZWFzb24gPSByZWFzb247XG4gICAgZXZlbnQuaW5pdEV2ZW50KG5hbWUsIGZhbHNlLCB0cnVlKTtcbiAgICBnbG9iYWxUaGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2UgZXZlbnQgPSB7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcmVhc29uIH07XG4gIGlmICghTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UICYmIChoYW5kbGVyID0gZ2xvYmFsVGhpc1snb24nICsgbmFtZV0pKSBoYW5kbGVyKGV2ZW50KTtcbiAgZWxzZSBpZiAobmFtZSA9PT0gVU5IQU5ETEVEX1JFSkVDVElPTikgaG9zdFJlcG9ydEVycm9ycygnVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgcmVhc29uKTtcbn07XG5cbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbFRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgICB2YXIgSVNfVU5IQU5ETEVEID0gaXNVbmhhbmRsZWQoc3RhdGUpO1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKElTX1VOSEFORExFRCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChJU19OT0RFKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sIHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHN0YXRlLnJlamVjdGlvbiA9IElTX05PREUgfHwgaXNVbmhhbmRsZWQoc3RhdGUpID8gVU5IQU5ETEVEIDogSEFORExFRDtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5yZWplY3Rpb24gIT09IEhBTkRMRUQgJiYgIXN0YXRlLnBhcmVudDtcbn07XG5cbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbFRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4oc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChzdGF0ZS5mYWNhZGUgPT09IHZhbHVlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgdmFyIHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKTtcbiAgICBpZiAodGhlbikge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IGRvbmU6IGZhbHNlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FsbCh0aGVuLCB2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkoc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QoeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIGFDYWxsYWJsZShleGVjdXRvcik7XG4gICAgY2FsbChJbnRlcm5hbCwgdGhpcyk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSksIGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGludGVybmFsUmVqZWN0KHN0YXRlLCBlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIFByb21pc2VQcm90b3R5cGUgPSBQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogbmV3IFF1ZXVlKCksXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogbnVsbFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gIEludGVybmFsLnByb3RvdHlwZSA9IGRlZmluZUJ1aWx0SW4oUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgcmVhY3Rpb24ub2sgPSBpc0NhbGxhYmxlKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICByZWFjdGlvbi5mYWlsID0gaXNDYWxsYWJsZShvblJlamVjdGVkKSAmJiBvblJlamVjdGVkO1xuICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc3RhdGUuc3RhdGUgPT09IFBFTkRJTkcpIHN0YXRlLnJlYWN0aW9ucy5hZGQocmVhY3Rpb24pO1xuICAgIGVsc2UgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICB9KTtcblxuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHByb21pc2UpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKTtcbiAgICB0aGlzLnJlamVjdCA9IGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKTtcbiAgfTtcblxuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICBpZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBuYXRpdmVUaGVuID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZS50aGVuO1xuXG4gICAgaWYgKCFOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORykge1xuICAgICAgLy8gbWFrZSBgUHJvbWlzZSN0aGVuYCByZXR1cm4gYSBwb2x5ZmlsbGVkIGBQcm9taXNlYCBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgY2FsbChuYXRpdmVUaGVuLCB0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIG1ha2UgYC5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIHRyeSB7XG4gICAgICBkZWxldGUgTmF0aXZlUHJvbWlzZVByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICAvLyBtYWtlIGBpbnN0YW5jZW9mIFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIHNldFByb3RvdHlwZU9mKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIFByb21pc2U6IFByb21pc2VDb25zdHJ1Y3RvclxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSwgZmFsc2UsIHRydWUpO1xuc2V0U3BlY2llcyhQUk9NSVNFKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBTYWZhcmkgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4MjlcbnZhciBOT05fR0VORVJJQyA9ICEhTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdGhlbmFibGUgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddLmNhbGwoeyB0aGVuOiBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmZpbmFsbHlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogTk9OX0dFTkVSSUMgfSwge1xuICAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBnZXRCdWlsdEluKCdQcm9taXNlJykpO1xuICAgIHZhciBpc0Z1bmN0aW9uID0gaXNDYWxsYWJsZShvbkZpbmFsbHkpO1xuICAgIHJldHVybiB0aGlzLnRoZW4oXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseSxcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHlcbiAgICApO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjZmluYWxseWAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG5pZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpKSB7XG4gIHZhciBtZXRob2QgPSBnZXRCdWlsdEluKCdQcm9taXNlJykucHJvdG90eXBlWydmaW5hbGx5J107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2ZpbmFsbHknLCBtZXRob2QsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5yYWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgdmFyIGNhcGFiaWxpdHlSZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICBjYXBhYmlsaXR5UmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xuXG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKTtcbnZhciBDSEVDS19XUkFQUEVSID0gSVNfUFVSRSAmJiAhRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlc29sdmVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKENIRUNLX1dSQVBQRVIgJiYgdGhpcyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA/IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxuLy8gYFByb21pc2Uud2l0aFJlc29sdmVyc2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXdpdGgtcmVzb2x2ZXJzXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUgfSwge1xuICB3aXRoUmVzb2x2ZXJzOiBmdW5jdGlvbiB3aXRoUmVzb2x2ZXJzKCkge1xuICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb21pc2U6IHByb21pc2VDYXBhYmlsaXR5LnByb21pc2UsXG4gICAgICByZXNvbHZlOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlLFxuICAgICAgcmVqZWN0OiBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3RcbiAgICB9O1xuICB9XG59KTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgU2V0YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQtb2JqZWN0c1xuY29sbGVjdGlvbignU2V0JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGRpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnZGlmZmVyZW5jZScpIH0sIHtcbiAgZGlmZmVyZW5jZTogZGlmZmVyZW5jZVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVyc2VjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG52YXIgSU5DT1JSRUNUID0gIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2ludGVyc2VjdGlvbicpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIGVzL25vLXNldCAtLSB0ZXN0aW5nXG4gIHJldHVybiBTdHJpbmcoQXJyYXkuZnJvbShuZXcgU2V0KFsxLCAyLCAzXSkuaW50ZXJzZWN0aW9uKG5ldyBTZXQoWzMsIDJdKSkpKSAhPT0gJzMsMic7XG59KTtcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUIH0sIHtcbiAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb25cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNEaXNqb2ludEZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzRGlzam9pbnRGcm9tJykgfSwge1xuICBpc0Rpc2pvaW50RnJvbTogaXNEaXNqb2ludEZyb21cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdWJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3Vic2V0T2YnKSB9LCB7XG4gIGlzU3Vic2V0T2Y6IGlzU3Vic2V0T2Zcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdXBlcnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdXBlcnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3VwZXJzZXRPZicpIH0sIHtcbiAgaXNTdXBlcnNldE9mOiBpc1N1cGVyc2V0T2Zcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyByZXBsYWNlZCB0byBtb2R1bGUgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmNvbnN0cnVjdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzeW1tZXRyaWNEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZScpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdzeW1tZXRyaWNEaWZmZXJlbmNlJykgfSwge1xuICBzeW1tZXRyaWNEaWZmZXJlbmNlOiBzeW1tZXRyaWNEaWZmZXJlbmNlXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuaW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC11bmlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgndW5pb24nKSB9LCB7XG4gIHVuaW9uOiB1bmlvblxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN0cmluZy1mcm9tY29kZXBvaW50IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgJGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludDtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbnZhciBJTkNPUlJFQ1RfTEVOR1RIID0gISEkZnJvbUNvZGVQb2ludCAmJiAkZnJvbUNvZGVQb2ludC5sZW5ndGggIT09IDE7XG5cbi8vIGBTdHJpbmcuZnJvbUNvZGVQb2ludGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5mcm9tY29kZXBvaW50XG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgc3RhdDogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogSU5DT1JSRUNUX0xFTkdUSCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoeCkge1xuICAgIHZhciBlbGVtZW50cyA9IFtdO1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMEZGRkYpICE9PSBjb2RlKSB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoY29kZSArICcgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCcpO1xuICAgICAgZWxlbWVudHNbaV0gPSBjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhEODAwLCBjb2RlICUgMHg0MDAgKyAweERDMDApO1xuICAgIH0gcmV0dXJuIGpvaW4oZWxlbWVudHMsICcnKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBub3RBUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMnKTtcblxudmFyIHN0cmluZ0luZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIWNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdpbmNsdWRlcycpIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5zdHJpbmdJbmRleE9mKFxuICAgICAgdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSksXG4gICAgICB0b1N0cmluZyhub3RBUmVnRXhwKHNlYXJjaFN0cmluZykpLFxuICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHBvaW50LCBmYWxzZSk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciBmb3JjZWRTdHJpbmdUcmltTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbScpIH0sIHtcbiAgdHJpbTogZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0l0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuYXN5bmNpdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbCAmJiAkU3ltYm9sW1BST1RPVFlQRV07XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbFRoaXMuUmFuZ2VFcnJvcjtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsVGhpcy5RT2JqZWN0O1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmY7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90b3R5cGVTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoTywgUCwgQXR0cmlidXRlcykge1xuICB2YXIgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIFApO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcikgZGVsZXRlIE9iamVjdFByb3RvdHlwZVtQXTtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yICYmIE8gIT09IE9iamVjdFByb3RvdHlwZSkge1xuICAgIG5hdGl2ZURlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZSwgUCwgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcik7XG4gIH1cbn07XG5cbnZhciBzZXRTeW1ib2xEZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0Q3JlYXRlKG5hdGl2ZURlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9PSA3O1xufSkgPyBmYWxsYmFja0RlZmluZVByb3BlcnR5IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZShTeW1ib2xQcm90b3R5cGUpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXNPd24oTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgbmF0aXZlT2JqZWN0Q3JlYXRlKG51bGwpKSk7XG4gICAgICBPW0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNPd24oTywgSElEREVOKSAmJiBPW0hJRERFTl1ba2V5XSkgT1tISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSBuYXRpdmVPYmplY3RDcmVhdGUoQXR0cmlidXRlcywgeyBlbnVtZXJhYmxlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2NyaXB0b3IoTywga2V5LCBBdHRyaWJ1dGVzKTtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywga2V5LCBBdHRyaWJ1dGVzKTtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhwcm9wZXJ0aWVzKS5jb25jYXQoJGdldE93blByb3BlcnR5U3ltYm9scyhwcm9wZXJ0aWVzKSk7XG4gICRmb3JFYWNoKGtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwoJHByb3BlcnR5SXNFbnVtZXJhYmxlLCBwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1Byb3BlcnR5S2V5KFYpO1xuICB2YXIgZW51bWVyYWJsZSA9IGNhbGwobmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUsIHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBQKSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXNPd24odGhpcywgUCkgfHwgIWhhc093bihBbGxTeW1ib2xzLCBQKSB8fCBoYXNPd24odGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF1cbiAgICA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzT3duKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpKSBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBJU19PQkpFQ1RfUFJPVE9UWVBFID0gTyA9PT0gT2JqZWN0UHJvdG90eXBlO1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKElTX09CSkVDVF9QUk9UT1RZUEUgPyBPYmplY3RQcm90b3R5cGVTeW1ib2xzIDogdG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAoIUlTX09CSkVDVF9QUk9UT1RZUEUgfHwgaGFzT3duKE9iamVjdFByb3RvdHlwZSwga2V5KSkpIHtcbiAgICAgIHB1c2gocmVzdWx0LCBBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmIChpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICFhcmd1bWVudHMubGVuZ3RoIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogJHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHRhZyA9IHVpZChkZXNjcmlwdGlvbik7XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyICR0aGlzID0gdGhpcyA9PT0gdW5kZWZpbmVkID8gZ2xvYmFsVGhpcyA6IHRoaXM7XG4gICAgICBpZiAoJHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSkgY2FsbChzZXR0ZXIsIE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXNPd24oJHRoaXMsIEhJRERFTikgJiYgaGFzT3duKCR0aGlzW0hJRERFTl0sIHRhZykpICR0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0U3ltYm9sRGVzY3JpcHRvcigkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgICBmYWxsYmFja0RlZmluZVByb3BlcnR5KCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIFVTRV9TRVRURVIpIHNldFN5bWJvbERlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6IHNldHRlciB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcsIGRlc2NyaXB0aW9uKTtcbiAgfTtcblxuICBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sW1BST1RPVFlQRV07XG5cbiAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnRhZztcbiAgfSk7XG5cbiAgZGVmaW5lQnVpbHRJbigkU3ltYm9sLCAnd2l0aG91dFNldHRlcicsIGZ1bmN0aW9uIChkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiB3cmFwKHVpZChkZXNjcmlwdGlvbiksIGRlc2NyaXB0aW9uKTtcbiAgfSk7XG5cbiAgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgZGVmaW5lUHJvcGVydGllc01vZHVsZS5mID0gJGRlZmluZVByb3BlcnRpZXM7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2VsbEtub3duU3ltYm9sKG5hbWUpLCBuYW1lKTtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1TeW1ib2wtZGVzY3JpcHRpb25cbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIUlTX1BVUkUpIHtcbiAgICAgIGRlZmluZUJ1aWx0SW4oT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIU5BVElWRV9TWU1CT0wgfSwge1xuICBTeW1ib2w6ICRTeW1ib2xcbn0pO1xuXG4kZm9yRWFjaChvYmplY3RLZXlzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlZmluZVdlbGxLbm93blN5bWJvbChuYW1lKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiBTWU1CT0wsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gZmFsc2U7IH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvclxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCBTWU1CT0wpO1xuXG5oaWRkZW5LZXlzW0hJRERFTl0gPSB0cnVlO1xuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uJyk7XG5cbnZhciBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5mb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcoa2V5KTtcbiAgICBpZiAoaGFzT3duKFN0cmluZ1RvU3ltYm9sUmVnaXN0cnksIHN0cmluZykpIHJldHVybiBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ107XG4gICAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKHN0cmluZyk7XG4gICAgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddID0gc3ltYm9sO1xuICAgIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltYm9sXSA9IHN0cmluZztcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaGFzSW5zdGFuY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5oYXNpbnN0YW5jZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdoYXNJbnN0YW5jZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pc2NvbmNhdHNwcmVhZGFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3Mgc3BsaXQgdG8gbW9kdWxlcyBsaXN0ZWQgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5mb3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmtleS1mb3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnknKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmtleUZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKHRyeVRvU3RyaW5nKHN5bSkgKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xuICAgIGlmIChoYXNPd24oU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSwgc3ltKSkgcmV0dXJuIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltXTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoQWxsYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hhbGxcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2hBbGwnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5yZXBsYWNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucmVwbGFjZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNlYXJjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNlYXJjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzZWFyY2gnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BlY2llc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwZWNpZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGxpdGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwbGl0XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwbGl0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wudG9QcmltaXRpdmVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3ByaW1pdGl2ZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9zdHJpbmd0YWdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2V0QnVpbHRJbignU3ltYm9sJyksICdTeW1ib2wnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wudW5zY29wYWJsZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC51bnNjb3BhYmxlc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgTUVUQURBVEEgPSB3ZWxsS25vd25TeW1ib2woJ21ldGFkYXRhJyk7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8vIEZ1bmN0aW9uLnByb3RvdHlwZVtAQG1ldGFkYXRhXVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5pZiAoRnVuY3Rpb25Qcm90b3R5cGVbTUVUQURBVEFdID09PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE1FVEFEQVRBLCB7XG4gICAgdmFsdWU6IG51bGxcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFzeW5jLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNEaXNwb3NlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmN1c3RvbU1hdGNoZXJgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2N1c3RvbU1hdGNoZXInKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuZGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnZGlzcG9zZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNSZWdpc3RlcmVkU3ltYm9sOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1JlZ2lzdGVyZWRTeW1ib2wnIH0sIHtcbiAgaXNSZWdpc3RlcmVkOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duU3ltYm9sOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1dlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bicpO1xuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBuYW1lOiAnaXNXZWxsS25vd25TeW1ib2wnLCBmb3JjZWQ6IHRydWUgfSwge1xuICBpc1dlbGxLbm93bjogaXNXZWxsS25vd25TeW1ib2xcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGVyYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaGVyJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YUtleWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YUtleScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvcnNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wub2JzZXJ2YWJsZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9ic2VydmFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnb2JzZXJ2YWJsZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucGF0dGVybk1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdwYXR0ZXJuTWF0Y2gnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2VBbGwnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBjbGVhckltbWVkaWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuY2xlYXI7XG5cbi8vIGBjbGVhckltbWVkaWF0ZWAgbWV0aG9kXG4vLyBodHRwOi8vdzNjLmdpdGh1Yi5pby9zZXRJbW1lZGlhdGUvI3NpLWNsZWFySW1tZWRpYXRlXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbFRoaXMuY2xlYXJJbW1lZGlhdGUgIT09IGNsZWFySW1tZWRpYXRlIH0sIHtcbiAgY2xlYXJJbW1lZGlhdGU6IGNsZWFySW1tZWRpYXRlXG59KTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgc2V0VG9TdHJpbmdUYWcoZ2xvYmFsVGhpc1tDT0xMRUNUSU9OX05BTUVdLCBDT0xMRUNUSU9OX05BTUUpO1xuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3Mgc3BsaXQgdG8gbW9kdWxlcyBsaXN0ZWQgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmNsZWFyLWltbWVkaWF0ZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuc2V0LWltbWVkaWF0ZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNldFRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvMTYzM1xudmFyIHNldEltbWVkaWF0ZSA9IGdsb2JhbFRoaXMuc2V0SW1tZWRpYXRlID8gc2NoZWR1bGVyc0ZpeChzZXRUYXNrLCBmYWxzZSkgOiBzZXRUYXNrO1xuXG4vLyBgc2V0SW1tZWRpYXRlYCBtZXRob2Rcbi8vIGh0dHA6Ly93M2MuZ2l0aHViLmlvL3NldEltbWVkaWF0ZS8jc2ktc2V0SW1tZWRpYXRlXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbFRoaXMuc2V0SW1tZWRpYXRlICE9PSBzZXRJbW1lZGlhdGUgfSwge1xuICBzZXRJbW1lZGlhdGU6IHNldEltbWVkaWF0ZVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0SW50ZXJ2YWwgPSBzY2hlZHVsZXJzRml4KGdsb2JhbFRoaXMuc2V0SW50ZXJ2YWwsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldGludGVydmFsXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbFRoaXMuc2V0SW50ZXJ2YWwgIT09IHNldEludGVydmFsIH0sIHtcbiAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRUaW1lb3V0ID0gc2NoZWR1bGVyc0ZpeChnbG9iYWxUaGlzLnNldFRpbWVvdXQsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldFRpbWVvdXQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWxUaGlzLnNldFRpbWVvdXQgIT09IHNldFRpbWVvdXQgfSwge1xuICBzZXRUaW1lb3V0OiBzZXRUaW1lb3V0XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3Mgc3BsaXQgdG8gbW9kdWxlcyBsaXN0ZWQgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnNldC1pbnRlcnZhbCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuc2V0LXRpbWVvdXQnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IGluIGNvcmUtanNANCwgbW92ZSAvbW9kdWxlcy8gZGVwZW5kZW5jaWVzIHRvIHB1YmxpYyBlbnRyaWVzIGZvciBiZXR0ZXIgb3B0aW1pemF0aW9uIGJ5IHRvb2xzIGxpa2UgYHByZXNldC1lbnZgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5mcm9tLWNvZGUtcG9pbnQnKTtcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzYWZlR2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zYWZlLWdldC1idWlsdC1pbicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBVU0VfTkFUSVZFX1VSTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBhcnJheVNvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc29ydCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgVVJMX1NFQVJDSF9QQVJBTVMgPSAnVVJMU2VhcmNoUGFyYW1zJztcbnZhciBVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUiA9IFVSTF9TRUFSQ0hfUEFSQU1TICsgJ0l0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFVSTF9TRUFSQ0hfUEFSQU1TKTtcbnZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUik7XG5cbnZhciBuYXRpdmVGZXRjaCA9IHNhZmVHZXRCdWlsdEluKCdmZXRjaCcpO1xudmFyIE5hdGl2ZVJlcXVlc3QgPSBzYWZlR2V0QnVpbHRJbignUmVxdWVzdCcpO1xudmFyIEhlYWRlcnMgPSBzYWZlR2V0QnVpbHRJbignSGVhZGVycycpO1xudmFyIFJlcXVlc3RQcm90b3R5cGUgPSBOYXRpdmVSZXF1ZXN0ICYmIE5hdGl2ZVJlcXVlc3QucHJvdG90eXBlO1xudmFyIEhlYWRlcnNQcm90b3R5cGUgPSBIZWFkZXJzICYmIEhlYWRlcnMucHJvdG90eXBlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIGVuY29kZVVSSUNvbXBvbmVudCA9IGdsb2JhbFRoaXMuZW5jb2RlVVJJQ29tcG9uZW50O1xudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgZnJvbUNvZGVQb2ludCA9IGdldEJ1aWx0SW4oJ1N0cmluZycsICdmcm9tQ29kZVBvaW50Jyk7XG52YXIgJHBhcnNlSW50ID0gcGFyc2VJbnQ7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzaGlmdCA9IHVuY3VycnlUaGlzKFtdLnNoaWZ0KTtcbnZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG5cbnZhciBwbHVzID0gL1xcKy9nO1xudmFyIEZBTExCQUNLX1JFUExBQ0VSID0gJ1xcdUZGRkQnO1xudmFyIFZBTElEX0hFWCA9IC9eWzAtOWEtZl0rJC9pO1xuXG52YXIgcGFyc2VIZXhPY3RldCA9IGZ1bmN0aW9uIChzdHJpbmcsIHN0YXJ0KSB7XG4gIHZhciBzdWJzdHIgPSBzdHJpbmdTbGljZShzdHJpbmcsIHN0YXJ0LCBzdGFydCArIDIpO1xuICBpZiAoIWV4ZWMoVkFMSURfSEVYLCBzdWJzdHIpKSByZXR1cm4gTmFOO1xuXG4gIHJldHVybiAkcGFyc2VJbnQoc3Vic3RyLCAxNik7XG59O1xuXG52YXIgZ2V0TGVhZGluZ09uZXMgPSBmdW5jdGlvbiAob2N0ZXQpIHtcbiAgdmFyIGNvdW50ID0gMDtcbiAgZm9yICh2YXIgbWFzayA9IDB4ODA7IG1hc2sgPiAwICYmIChvY3RldCAmIG1hc2spICE9PSAwOyBtYXNrID4+PSAxKSB7XG4gICAgY291bnQrKztcbiAgfVxuICByZXR1cm4gY291bnQ7XG59O1xuXG52YXIgdXRmOERlY29kZSA9IGZ1bmN0aW9uIChvY3RldHMpIHtcbiAgdmFyIGNvZGVQb2ludCA9IG51bGw7XG5cbiAgc3dpdGNoIChvY3RldHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgY29kZVBvaW50ID0gb2N0ZXRzWzBdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgY29kZVBvaW50ID0gKG9jdGV0c1swXSAmIDB4MUYpIDw8IDYgfCAob2N0ZXRzWzFdICYgMHgzRik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICBjb2RlUG9pbnQgPSAob2N0ZXRzWzBdICYgMHgwRikgPDwgMTIgfCAob2N0ZXRzWzFdICYgMHgzRikgPDwgNiB8IChvY3RldHNbMl0gJiAweDNGKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIGNvZGVQb2ludCA9IChvY3RldHNbMF0gJiAweDA3KSA8PCAxOCB8IChvY3RldHNbMV0gJiAweDNGKSA8PCAxMiB8IChvY3RldHNbMl0gJiAweDNGKSA8PCA2IHwgKG9jdGV0c1szXSAmIDB4M0YpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gY29kZVBvaW50ID4gMHgxMEZGRkYgPyBudWxsIDogY29kZVBvaW50O1xufTtcblxudmFyIGRlY29kZSA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICBpbnB1dCA9IHJlcGxhY2UoaW5wdXQsIHBsdXMsICcgJyk7XG4gIHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgdmFyIGRlY29kZWRDaGFyID0gY2hhckF0KGlucHV0LCBpKTtcblxuICAgIGlmIChkZWNvZGVkQ2hhciA9PT0gJyUnKSB7XG4gICAgICBpZiAoY2hhckF0KGlucHV0LCBpICsgMSkgPT09ICclJyB8fCBpICsgMyA+IGxlbmd0aCkge1xuICAgICAgICByZXN1bHQgKz0gJyUnO1xuICAgICAgICBpKys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgb2N0ZXQgPSBwYXJzZUhleE9jdGV0KGlucHV0LCBpICsgMSk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAob2N0ZXQgIT09IG9jdGV0KSB7XG4gICAgICAgIHJlc3VsdCArPSBkZWNvZGVkQ2hhcjtcbiAgICAgICAgaSsrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaSArPSAyO1xuICAgICAgdmFyIGJ5dGVTZXF1ZW5jZUxlbmd0aCA9IGdldExlYWRpbmdPbmVzKG9jdGV0KTtcblxuICAgICAgaWYgKGJ5dGVTZXF1ZW5jZUxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWNvZGVkQ2hhciA9IGZyb21DaGFyQ29kZShvY3RldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYnl0ZVNlcXVlbmNlTGVuZ3RoID09PSAxIHx8IGJ5dGVTZXF1ZW5jZUxlbmd0aCA+IDQpIHtcbiAgICAgICAgICByZXN1bHQgKz0gRkFMTEJBQ0tfUkVQTEFDRVI7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG9jdGV0cyA9IFtvY3RldF07XG4gICAgICAgIHZhciBzZXF1ZW5jZUluZGV4ID0gMTtcblxuICAgICAgICB3aGlsZSAoc2VxdWVuY2VJbmRleCA8IGJ5dGVTZXF1ZW5jZUxlbmd0aCkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgICBpZiAoaSArIDMgPiBsZW5ndGggfHwgY2hhckF0KGlucHV0LCBpKSAhPT0gJyUnKSBicmVhaztcblxuICAgICAgICAgIHZhciBuZXh0Qnl0ZSA9IHBhcnNlSGV4T2N0ZXQoaW5wdXQsIGkgKyAxKTtcblxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICAgICAgaWYgKG5leHRCeXRlICE9PSBuZXh0Qnl0ZSkge1xuICAgICAgICAgICAgaSArPSAzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuZXh0Qnl0ZSA+IDE5MSB8fCBuZXh0Qnl0ZSA8IDEyOCkgYnJlYWs7XG5cbiAgICAgICAgICBwdXNoKG9jdGV0cywgbmV4dEJ5dGUpO1xuICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICBzZXF1ZW5jZUluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2N0ZXRzLmxlbmd0aCAhPT0gYnl0ZVNlcXVlbmNlTGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IEZBTExCQUNLX1JFUExBQ0VSO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvZGVQb2ludCA9IHV0ZjhEZWNvZGUob2N0ZXRzKTtcbiAgICAgICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdCArPSBGQUxMQkFDS19SRVBMQUNFUjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWNvZGVkQ2hhciA9IGZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdCArPSBkZWNvZGVkQ2hhcjtcbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGZpbmQgPSAvWyEnKCl+XXwlMjAvZztcblxudmFyIHJlcGxhY2VtZW50cyA9IHtcbiAgJyEnOiAnJTIxJyxcbiAgXCInXCI6ICclMjcnLFxuICAnKCc6ICclMjgnLFxuICAnKSc6ICclMjknLFxuICAnfic6ICclN0UnLFxuICAnJTIwJzogJysnXG59O1xuXG52YXIgcmVwbGFjZXIgPSBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgcmV0dXJuIHJlcGxhY2VtZW50c1ttYXRjaF07XG59O1xuXG52YXIgc2VyaWFsaXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiByZXBsYWNlKGVuY29kZVVSSUNvbXBvbmVudChpdCksIGZpbmQsIHJlcGxhY2VyKTtcbn07XG5cbnZhciBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoZnVuY3Rpb24gSXRlcmF0b3IocGFyYW1zLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFVSTF9TRUFSQ0hfUEFSQU1TX0lURVJBVE9SLFxuICAgIHRhcmdldDogZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZShwYXJhbXMpLmVudHJpZXMsXG4gICAgaW5kZXg6IDAsXG4gICAga2luZDoga2luZFxuICB9KTtcbn0sIFVSTF9TRUFSQ0hfUEFSQU1TLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSBudWxsO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgdmFyIGVudHJ5ID0gdGFyZ2V0W2luZGV4XTtcbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LmtleSwgZmFsc2UpO1xuICAgIGNhc2UgJ3ZhbHVlcyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LnZhbHVlLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2VudHJ5LmtleSwgZW50cnkudmFsdWVdLCBmYWxzZSk7XG59LCB0cnVlKTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc1N0YXRlID0gZnVuY3Rpb24gKGluaXQpIHtcbiAgdGhpcy5lbnRyaWVzID0gW107XG4gIHRoaXMudXJsID0gbnVsbDtcblxuICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGlzT2JqZWN0KGluaXQpKSB0aGlzLnBhcnNlT2JqZWN0KGluaXQpO1xuICAgIGVsc2UgdGhpcy5wYXJzZVF1ZXJ5KHR5cGVvZiBpbml0ID09ICdzdHJpbmcnID8gY2hhckF0KGluaXQsIDApID09PSAnPycgPyBzdHJpbmdTbGljZShpbml0LCAxKSA6IGluaXQgOiAkdG9TdHJpbmcoaW5pdCkpO1xuICB9XG59O1xuXG5VUkxTZWFyY2hQYXJhbXNTdGF0ZS5wcm90b3R5cGUgPSB7XG4gIHR5cGU6IFVSTF9TRUFSQ0hfUEFSQU1TLFxuICBiaW5kVVJMOiBmdW5jdGlvbiAodXJsKSB7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfSxcbiAgcGFyc2VPYmplY3Q6IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICB2YXIgZW50cmllcyA9IHRoaXMuZW50cmllcztcbiAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChvYmplY3QpO1xuICAgIHZhciBpdGVyYXRvciwgbmV4dCwgc3RlcCwgZW50cnlJdGVyYXRvciwgZW50cnlOZXh0LCBmaXJzdCwgc2Vjb25kO1xuXG4gICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKG9iamVjdCwgaXRlcmF0b3JNZXRob2QpO1xuICAgICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICAgICAgZW50cnlJdGVyYXRvciA9IGdldEl0ZXJhdG9yKGFuT2JqZWN0KHN0ZXAudmFsdWUpKTtcbiAgICAgICAgZW50cnlOZXh0ID0gZW50cnlJdGVyYXRvci5uZXh0O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGZpcnN0ID0gY2FsbChlbnRyeU5leHQsIGVudHJ5SXRlcmF0b3IpKS5kb25lIHx8XG4gICAgICAgICAgKHNlY29uZCA9IGNhbGwoZW50cnlOZXh0LCBlbnRyeUl0ZXJhdG9yKSkuZG9uZSB8fFxuICAgICAgICAgICFjYWxsKGVudHJ5TmV4dCwgZW50cnlJdGVyYXRvcikuZG9uZVxuICAgICAgICApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHNlcXVlbmNlIHdpdGggbGVuZ3RoIDInKTtcbiAgICAgICAgcHVzaChlbnRyaWVzLCB7IGtleTogJHRvU3RyaW5nKGZpcnN0LnZhbHVlKSwgdmFsdWU6ICR0b1N0cmluZyhzZWNvbmQudmFsdWUpIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBpZiAoaGFzT3duKG9iamVjdCwga2V5KSkge1xuICAgICAgcHVzaChlbnRyaWVzLCB7IGtleToga2V5LCB2YWx1ZTogJHRvU3RyaW5nKG9iamVjdFtrZXldKSB9KTtcbiAgICB9XG4gIH0sXG4gIHBhcnNlUXVlcnk6IGZ1bmN0aW9uIChxdWVyeSkge1xuICAgIGlmIChxdWVyeSkge1xuICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHNwbGl0KHF1ZXJ5LCAnJicpO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciBhdHRyaWJ1dGUsIGVudHJ5O1xuICAgICAgd2hpbGUgKGluZGV4IDwgYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgYXR0cmlidXRlID0gYXR0cmlidXRlc1tpbmRleCsrXTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZS5sZW5ndGgpIHtcbiAgICAgICAgICBlbnRyeSA9IHNwbGl0KGF0dHJpYnV0ZSwgJz0nKTtcbiAgICAgICAgICBwdXNoKGVudHJpZXMsIHtcbiAgICAgICAgICAgIGtleTogZGVjb2RlKHNoaWZ0KGVudHJ5KSksXG4gICAgICAgICAgICB2YWx1ZTogZGVjb2RlKGpvaW4oZW50cnksICc9JykpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBlbnRyeTtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2luZGV4KytdO1xuICAgICAgcHVzaChyZXN1bHQsIHNlcmlhbGl6ZShlbnRyeS5rZXkpICsgJz0nICsgc2VyaWFsaXplKGVudHJ5LnZhbHVlKSk7XG4gICAgfSByZXR1cm4gam9pbihyZXN1bHQsICcmJyk7XG4gIH0sXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW50cmllcy5sZW5ndGggPSAwO1xuICAgIHRoaXMucGFyc2VRdWVyeSh0aGlzLnVybC5xdWVyeSk7XG4gIH0sXG4gIHVwZGF0ZVVSTDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnVybCkgdGhpcy51cmwudXBkYXRlKCk7XG4gIH1cbn07XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXNgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS11cmxzZWFyY2hwYXJhbXNcbnZhciBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFVSTFNlYXJjaFBhcmFtcygvKiBpbml0ICovKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlKTtcbiAgdmFyIGluaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHN0YXRlID0gc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCBuZXcgVVJMU2VhcmNoUGFyYW1zU3RhdGUoaW5pdCkpO1xuICBpZiAoIURFU0NSSVBUT1JTKSB0aGlzLnNpemUgPSBzdGF0ZS5lbnRyaWVzLmxlbmd0aDtcbn07XG5cbnZhciBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUgPSBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbmRlZmluZUJ1aWx0SW5zKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwge1xuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5hcHBlbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtYXBwZW5kXG4gIGFwcGVuZDogZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAyKTtcbiAgICBwdXNoKHN0YXRlLmVudHJpZXMsIHsga2V5OiAkdG9TdHJpbmcobmFtZSksIHZhbHVlOiAkdG9TdHJpbmcodmFsdWUpIH0pO1xuICAgIGlmICghREVTQ1JJUFRPUlMpIHRoaXMubGVuZ3RoKys7XG4gICAgc3RhdGUudXBkYXRlVVJMKCk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmRlbGV0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1kZWxldGVcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChuYW1lIC8qICwgdmFsdWUgKi8pIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZW50cmllcyA9IHN0YXRlLmVudHJpZXM7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgJHZhbHVlID0gbGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgdmFsdWUgPSAkdmFsdWUgPT09IHVuZGVmaW5lZCA/ICR2YWx1ZSA6ICR0b1N0cmluZygkdmFsdWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5ICYmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGVudHJ5LnZhbHVlID09PSB2YWx1ZSkpIHtcbiAgICAgICAgc3BsaWNlKGVudHJpZXMsIGluZGV4LCAxKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgfSBlbHNlIGluZGV4Kys7XG4gICAgfVxuICAgIGlmICghREVTQ1JJUFRPUlMpIHRoaXMuc2l6ZSA9IGVudHJpZXMubGVuZ3RoO1xuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5nZXRgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZ2V0XG4gIGdldDogZnVuY3Rpb24gZ2V0KG5hbWUpIHtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgZm9yICg7IGluZGV4IDwgZW50cmllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChlbnRyaWVzW2luZGV4XS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJpZXNbaW5kZXhdLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZ2V0QWxsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWdldGFsbFxuICBnZXRBbGw6IGZ1bmN0aW9uIGdldEFsbChuYW1lKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKDsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGVudHJpZXNbaW5kZXhdLmtleSA9PT0ga2V5KSBwdXNoKHJlc3VsdCwgZW50cmllc1tpbmRleF0udmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5oYXNgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtaGFzXG4gIGhhczogZnVuY3Rpb24gaGFzKG5hbWUgLyogLCB2YWx1ZSAqLykge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciAkdmFsdWUgPSBsZW5ndGggPCAyID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIHZhciB2YWx1ZSA9ICR2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJHZhbHVlIDogJHRvU3RyaW5nKCR2YWx1ZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleCsrXTtcbiAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSAmJiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBlbnRyeS52YWx1ZSA9PT0gdmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5zZXRgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtc2V0XG4gIHNldDogZnVuY3Rpb24gc2V0KG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZW50cmllcyA9IHN0YXRlLmVudHJpZXM7XG4gICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgdmFsID0gJHRvU3RyaW5nKHZhbHVlKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBlbnRyeTtcbiAgICBmb3IgKDsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoZm91bmQpIHNwbGljZShlbnRyaWVzLCBpbmRleC0tLCAxKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGVudHJ5LnZhbHVlID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZm91bmQpIHB1c2goZW50cmllcywgeyBrZXk6IGtleSwgdmFsdWU6IHZhbCB9KTtcbiAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGlzLnNpemUgPSBlbnRyaWVzLmxlbmd0aDtcbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1zb3J0XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICBhcnJheVNvcnQoc3RhdGUuZW50cmllcywgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLmtleSA+IGIua2V5ID8gMSA6IC0xO1xuICAgIH0pO1xuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjayAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2ssIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBlbnRyeTtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2luZGV4KytdO1xuICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICB9XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuICBrZXlzOiBmdW5jdGlvbiBrZXlzKCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IodGhpcywgJ2tleXMnKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUudmFsdWVzYCBtZXRob2RcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvcih0aGlzLCAndmFsdWVzJyk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IodGhpcywgJ2VudHJpZXMnKTtcbiAgfVxufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG5kZWZpbmVCdWlsdEluKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgSVRFUkFUT1IsIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5lbnRyaWVzLCB7IG5hbWU6ICdlbnRyaWVzJyB9KTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmxzZWFyY2hwYXJhbXMtc3RyaW5naWZpY2F0aW9uLWJlaGF2aW9yXG5kZWZpbmVCdWlsdEluKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLnNlcmlhbGl6ZSgpO1xufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5zaXplYCBnZXR0ZXJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvdXJsL3B1bGwvNzM0XG5pZiAoREVTQ1JJUFRPUlMpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsICdzaXplJywge1xuICBnZXQ6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcy5sZW5ndGg7XG4gIH0sXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yLCBVUkxfU0VBUkNIX1BBUkFNUyk7XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6ICFVU0VfTkFUSVZFX1VSTCB9LCB7XG4gIFVSTFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3Jcbn0pO1xuXG4vLyBXcmFwIGBmZXRjaGAgYW5kIGBSZXF1ZXN0YCBmb3IgY29ycmVjdCB3b3JrIHdpdGggcG9seWZpbGxlZCBgVVJMU2VhcmNoUGFyYW1zYFxuaWYgKCFVU0VfTkFUSVZFX1VSTCAmJiBpc0NhbGxhYmxlKEhlYWRlcnMpKSB7XG4gIHZhciBoZWFkZXJzSGFzID0gdW5jdXJyeVRoaXMoSGVhZGVyc1Byb3RvdHlwZS5oYXMpO1xuICB2YXIgaGVhZGVyc1NldCA9IHVuY3VycnlUaGlzKEhlYWRlcnNQcm90b3R5cGUuc2V0KTtcblxuICB2YXIgd3JhcFJlcXVlc3RPcHRpb25zID0gZnVuY3Rpb24gKGluaXQpIHtcbiAgICBpZiAoaXNPYmplY3QoaW5pdCkpIHtcbiAgICAgIHZhciBib2R5ID0gaW5pdC5ib2R5O1xuICAgICAgdmFyIGhlYWRlcnM7XG4gICAgICBpZiAoY2xhc3NvZihib2R5KSA9PT0gVVJMX1NFQVJDSF9QQVJBTVMpIHtcbiAgICAgICAgaGVhZGVycyA9IGluaXQuaGVhZGVycyA/IG5ldyBIZWFkZXJzKGluaXQuaGVhZGVycykgOiBuZXcgSGVhZGVycygpO1xuICAgICAgICBpZiAoIWhlYWRlcnNIYXMoaGVhZGVycywgJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgICAgaGVhZGVyc1NldChoZWFkZXJzLCAnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZShpbml0LCB7XG4gICAgICAgICAgYm9keTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsICR0b1N0cmluZyhib2R5KSksXG4gICAgICAgICAgaGVhZGVyczogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIGhlYWRlcnMpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gcmV0dXJuIGluaXQ7XG4gIH07XG5cbiAgaWYgKGlzQ2FsbGFibGUobmF0aXZlRmV0Y2gpKSB7XG4gICAgJCh7IGdsb2JhbDogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgZG9udENhbGxHZXRTZXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBmZXRjaDogZnVuY3Rpb24gZmV0Y2goaW5wdXQgLyogLCBpbml0ICovKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVGZXRjaChpbnB1dCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyB3cmFwUmVxdWVzdE9wdGlvbnMoYXJndW1lbnRzWzFdKSA6IHt9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpc0NhbGxhYmxlKE5hdGl2ZVJlcXVlc3QpKSB7XG4gICAgdmFyIFJlcXVlc3RDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQgLyogLCBpbml0ICovKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsIFJlcXVlc3RQcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIG5ldyBOYXRpdmVSZXF1ZXN0KGlucHV0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHdyYXBSZXF1ZXN0T3B0aW9ucyhhcmd1bWVudHNbMV0pIDoge30pO1xuICAgIH07XG5cbiAgICBSZXF1ZXN0UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVxdWVzdENvbnN0cnVjdG9yO1xuICAgIFJlcXVlc3RDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBSZXF1ZXN0UHJvdG90eXBlO1xuXG4gICAgJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGRvbnRDYWxsR2V0U2V0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgUmVxdWVzdDogUmVxdWVzdENvbnN0cnVjdG9yXG4gICAgfSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFVSTFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IsXG4gIGdldFN0YXRlOiBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlXG59O1xuIiwiLy8gZW1wdHlcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHJlcGxhY2VkIHRvIG1vZHVsZSBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuY29uc3RydWN0b3InKTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIFVTRV9OQVRJVkVfVVJMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VybC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxudmFyIFVSTCA9IGdldEJ1aWx0SW4oJ1VSTCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ3NTA1XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9pc3N1ZXMvMTg4OTNcbnZhciBUSFJPV1NfV0lUSE9VVF9BUkdVTUVOVFMgPSBVU0VfTkFUSVZFX1VSTCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIFVSTC5jYW5QYXJzZSgpO1xufSk7XG5cbi8vIEJ1biB+IDEuMC4zMCBidWdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvOTI1MFxudmFyIFdST05HX0FSSVRZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gVVJMLmNhblBhcnNlLmxlbmd0aCAhPT0gMTtcbn0pO1xuXG4vLyBgVVJMLmNhblBhcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1jYW5wYXJzZVxuJCh7IHRhcmdldDogJ1VSTCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIVRIUk9XU19XSVRIT1VUX0FSR1VNRU5UUyB8fCBXUk9OR19BUklUWSB9LCB7XG4gIGNhblBhcnNlOiBmdW5jdGlvbiBjYW5QYXJzZSh1cmwpIHtcbiAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIHVybFN0cmluZyA9IHRvU3RyaW5nKHVybCk7XG4gICAgdmFyIGJhc2UgPSBsZW5ndGggPCAyIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdG9TdHJpbmcoYXJndW1lbnRzWzFdKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICEhbmV3IFVSTCh1cmxTdHJpbmcsIGJhc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IGluIGNvcmUtanNANCwgbW92ZSAvbW9kdWxlcy8gZGVwZW5kZW5jaWVzIHRvIHB1YmxpYyBlbnRyaWVzIGZvciBiZXR0ZXIgb3B0aW1pemF0aW9uIGJ5IHRvb2xzIGxpa2UgYHByZXNldC1lbnZgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBVU0VfTkFUSVZFX1VSTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24nKTtcbnZhciBhcnJheUZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBjb2RlQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNvZGVBdDtcbnZhciB0b0FTQ0lJID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1wdW55Y29kZS10by1hc2NpaScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciBVUkxTZWFyY2hQYXJhbXNNb2R1bGUgPSByZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5jb25zdHJ1Y3RvcicpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFVSTFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoJ1VSTCcpO1xudmFyIFVSTFNlYXJjaFBhcmFtcyA9IFVSTFNlYXJjaFBhcmFtc01vZHVsZS5VUkxTZWFyY2hQYXJhbXM7XG52YXIgZ2V0SW50ZXJuYWxTZWFyY2hQYXJhbXNTdGF0ZSA9IFVSTFNlYXJjaFBhcmFtc01vZHVsZS5nZXRTdGF0ZTtcblxudmFyIE5hdGl2ZVVSTCA9IGdsb2JhbFRoaXMuVVJMO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIHBhcnNlSW50ID0gZ2xvYmFsVGhpcy5wYXJzZUludDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG52YXIgcG9wID0gdW5jdXJyeVRoaXMoW10ucG9wKTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHNoaWZ0ID0gdW5jdXJyeVRoaXMoW10uc2hpZnQpO1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHRvTG93ZXJDYXNlID0gdW5jdXJyeVRoaXMoJycudG9Mb3dlckNhc2UpO1xudmFyIHVuc2hpZnQgPSB1bmN1cnJ5VGhpcyhbXS51bnNoaWZ0KTtcblxudmFyIElOVkFMSURfQVVUSE9SSVRZID0gJ0ludmFsaWQgYXV0aG9yaXR5JztcbnZhciBJTlZBTElEX1NDSEVNRSA9ICdJbnZhbGlkIHNjaGVtZSc7XG52YXIgSU5WQUxJRF9IT1NUID0gJ0ludmFsaWQgaG9zdCc7XG52YXIgSU5WQUxJRF9QT1JUID0gJ0ludmFsaWQgcG9ydCc7XG5cbnZhciBBTFBIQSA9IC9bYS16XS9pO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1vYnNjdXJlLXJhbmdlIC0tIHNhZmVcbnZhciBBTFBIQU5VTUVSSUMgPSAvW1xcZCstLmEtel0vaTtcbnZhciBESUdJVCA9IC9cXGQvO1xudmFyIEhFWF9TVEFSVCA9IC9eMHgvaTtcbnZhciBPQ1QgPSAvXlswLTddKyQvO1xudmFyIERFQyA9IC9eXFxkKyQvO1xudmFyIEhFWCA9IC9eW1xcZGEtZl0rJC9pO1xuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLWNvbnRyb2wtY2hhcmFjdGVyIC0tIHNhZmUgKi9cbnZhciBGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5UID0gL1tcXDBcXHRcXG5cXHIgIyUvOjw+P0BbXFxcXFxcXV58XS87XG52YXIgRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVF9FWENMVURJTkdfUEVSQ0VOVCA9IC9bXFwwXFx0XFxuXFxyICMvOjw+P0BbXFxcXFxcXV58XS87XG52YXIgTEVBRElOR19DMF9DT05UUk9MX09SX1NQQUNFID0gL15bXFx1MDAwMC1cXHUwMDIwXSsvO1xudmFyIFRSQUlMSU5HX0MwX0NPTlRST0xfT1JfU1BBQ0UgPSAvKF58W15cXHUwMDAwLVxcdTAwMjBdKVtcXHUwMDAwLVxcdTAwMjBdKyQvO1xudmFyIFRBQl9BTkRfTkVXX0xJTkUgPSAvW1xcdFxcblxccl0vZztcbi8qIGVzbGludC1lbmFibGUgcmVnZXhwL25vLWNvbnRyb2wtY2hhcmFjdGVyIC0tIHNhZmUgKi9cbnZhciBFT0Y7XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaXB2NC1udW1iZXItcGFyc2VyXG52YXIgcGFyc2VJUHY0ID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBwYXJ0cyA9IHNwbGl0KGlucHV0LCAnLicpO1xuICB2YXIgcGFydHNMZW5ndGgsIG51bWJlcnMsIGluZGV4LCBwYXJ0LCByYWRpeCwgbnVtYmVyLCBpcHY0O1xuICBpZiAocGFydHMubGVuZ3RoICYmIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnJykge1xuICAgIHBhcnRzLmxlbmd0aC0tO1xuICB9XG4gIHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoO1xuICBpZiAocGFydHNMZW5ndGggPiA0KSByZXR1cm4gaW5wdXQ7XG4gIG51bWJlcnMgPSBbXTtcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGFydHNMZW5ndGg7IGluZGV4KyspIHtcbiAgICBwYXJ0ID0gcGFydHNbaW5kZXhdO1xuICAgIGlmIChwYXJ0ID09PSAnJykgcmV0dXJuIGlucHV0O1xuICAgIHJhZGl4ID0gMTA7XG4gICAgaWYgKHBhcnQubGVuZ3RoID4gMSAmJiBjaGFyQXQocGFydCwgMCkgPT09ICcwJykge1xuICAgICAgcmFkaXggPSBleGVjKEhFWF9TVEFSVCwgcGFydCkgPyAxNiA6IDg7XG4gICAgICBwYXJ0ID0gc3RyaW5nU2xpY2UocGFydCwgcmFkaXggPT09IDggPyAxIDogMik7XG4gICAgfVxuICAgIGlmIChwYXJ0ID09PSAnJykge1xuICAgICAgbnVtYmVyID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFleGVjKHJhZGl4ID09PSAxMCA/IERFQyA6IHJhZGl4ID09PSA4ID8gT0NUIDogSEVYLCBwYXJ0KSkgcmV0dXJuIGlucHV0O1xuICAgICAgbnVtYmVyID0gcGFyc2VJbnQocGFydCwgcmFkaXgpO1xuICAgIH1cbiAgICBwdXNoKG51bWJlcnMsIG51bWJlcik7XG4gIH1cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGFydHNMZW5ndGg7IGluZGV4KyspIHtcbiAgICBudW1iZXIgPSBudW1iZXJzW2luZGV4XTtcbiAgICBpZiAoaW5kZXggPT09IHBhcnRzTGVuZ3RoIC0gMSkge1xuICAgICAgaWYgKG51bWJlciA+PSBwb3coMjU2LCA1IC0gcGFydHNMZW5ndGgpKSByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKG51bWJlciA+IDI1NSkgcmV0dXJuIG51bGw7XG4gIH1cbiAgaXB2NCA9IHBvcChudW1iZXJzKTtcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpcHY0ICs9IG51bWJlcnNbaW5kZXhdICogcG93KDI1NiwgMyAtIGluZGV4KTtcbiAgfVxuICByZXR1cm4gaXB2NDtcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1pcHY2LXBhcnNlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzIC0tIFRPRE9cbnZhciBwYXJzZUlQdjYgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIGFkZHJlc3MgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG4gIHZhciBwaWVjZUluZGV4ID0gMDtcbiAgdmFyIGNvbXByZXNzID0gbnVsbDtcbiAgdmFyIHBvaW50ZXIgPSAwO1xuICB2YXIgdmFsdWUsIGxlbmd0aCwgbnVtYmVyc1NlZW4sIGlwdjRQaWVjZSwgbnVtYmVyLCBzd2Fwcywgc3dhcDtcblxuICB2YXIgY2hyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjaGFyQXQoaW5wdXQsIHBvaW50ZXIpO1xuICB9O1xuXG4gIGlmIChjaHIoKSA9PT0gJzonKSB7XG4gICAgaWYgKGNoYXJBdChpbnB1dCwgMSkgIT09ICc6JykgcmV0dXJuO1xuICAgIHBvaW50ZXIgKz0gMjtcbiAgICBwaWVjZUluZGV4Kys7XG4gICAgY29tcHJlc3MgPSBwaWVjZUluZGV4O1xuICB9XG4gIHdoaWxlIChjaHIoKSkge1xuICAgIGlmIChwaWVjZUluZGV4ID09PSA4KSByZXR1cm47XG4gICAgaWYgKGNocigpID09PSAnOicpIHtcbiAgICAgIGlmIChjb21wcmVzcyAhPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgcG9pbnRlcisrO1xuICAgICAgcGllY2VJbmRleCsrO1xuICAgICAgY29tcHJlc3MgPSBwaWVjZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhbHVlID0gbGVuZ3RoID0gMDtcbiAgICB3aGlsZSAobGVuZ3RoIDwgNCAmJiBleGVjKEhFWCwgY2hyKCkpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlICogMTYgKyBwYXJzZUludChjaHIoKSwgMTYpO1xuICAgICAgcG9pbnRlcisrO1xuICAgICAgbGVuZ3RoKys7XG4gICAgfVxuICAgIGlmIChjaHIoKSA9PT0gJy4nKSB7XG4gICAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICBwb2ludGVyIC09IGxlbmd0aDtcbiAgICAgIGlmIChwaWVjZUluZGV4ID4gNikgcmV0dXJuO1xuICAgICAgbnVtYmVyc1NlZW4gPSAwO1xuICAgICAgd2hpbGUgKGNocigpKSB7XG4gICAgICAgIGlwdjRQaWVjZSA9IG51bGw7XG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA+IDApIHtcbiAgICAgICAgICBpZiAoY2hyKCkgPT09ICcuJyAmJiBudW1iZXJzU2VlbiA8IDQpIHBvaW50ZXIrKztcbiAgICAgICAgICBlbHNlIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4ZWMoRElHSVQsIGNocigpKSkgcmV0dXJuO1xuICAgICAgICB3aGlsZSAoZXhlYyhESUdJVCwgY2hyKCkpKSB7XG4gICAgICAgICAgbnVtYmVyID0gcGFyc2VJbnQoY2hyKCksIDEwKTtcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID09PSBudWxsKSBpcHY0UGllY2UgPSBudW1iZXI7XG4gICAgICAgICAgZWxzZSBpZiAoaXB2NFBpZWNlID09PSAwKSByZXR1cm47XG4gICAgICAgICAgZWxzZSBpcHY0UGllY2UgPSBpcHY0UGllY2UgKiAxMCArIG51bWJlcjtcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID4gMjU1KSByZXR1cm47XG4gICAgICAgICAgcG9pbnRlcisrO1xuICAgICAgICB9XG4gICAgICAgIGFkZHJlc3NbcGllY2VJbmRleF0gPSBhZGRyZXNzW3BpZWNlSW5kZXhdICogMjU2ICsgaXB2NFBpZWNlO1xuICAgICAgICBudW1iZXJzU2VlbisrO1xuICAgICAgICBpZiAobnVtYmVyc1NlZW4gPT09IDIgfHwgbnVtYmVyc1NlZW4gPT09IDQpIHBpZWNlSW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGlmIChudW1iZXJzU2VlbiAhPT0gNCkgcmV0dXJuO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChjaHIoKSA9PT0gJzonKSB7XG4gICAgICBwb2ludGVyKys7XG4gICAgICBpZiAoIWNocigpKSByZXR1cm47XG4gICAgfSBlbHNlIGlmIChjaHIoKSkgcmV0dXJuO1xuICAgIGFkZHJlc3NbcGllY2VJbmRleCsrXSA9IHZhbHVlO1xuICB9XG4gIGlmIChjb21wcmVzcyAhPT0gbnVsbCkge1xuICAgIHN3YXBzID0gcGllY2VJbmRleCAtIGNvbXByZXNzO1xuICAgIHBpZWNlSW5kZXggPSA3O1xuICAgIHdoaWxlIChwaWVjZUluZGV4ICE9PSAwICYmIHN3YXBzID4gMCkge1xuICAgICAgc3dhcCA9IGFkZHJlc3NbcGllY2VJbmRleF07XG4gICAgICBhZGRyZXNzW3BpZWNlSW5kZXgtLV0gPSBhZGRyZXNzW2NvbXByZXNzICsgc3dhcHMgLSAxXTtcbiAgICAgIGFkZHJlc3NbY29tcHJlc3MgKyAtLXN3YXBzXSA9IHN3YXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKHBpZWNlSW5kZXggIT09IDgpIHJldHVybjtcbiAgcmV0dXJuIGFkZHJlc3M7XG59O1xuXG52YXIgZmluZExvbmdlc3RaZXJvU2VxdWVuY2UgPSBmdW5jdGlvbiAoaXB2Nikge1xuICB2YXIgbWF4SW5kZXggPSBudWxsO1xuICB2YXIgbWF4TGVuZ3RoID0gMTtcbiAgdmFyIGN1cnJTdGFydCA9IG51bGw7XG4gIHZhciBjdXJyTGVuZ3RoID0gMDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgZm9yICg7IGluZGV4IDwgODsgaW5kZXgrKykge1xuICAgIGlmIChpcHY2W2luZGV4XSAhPT0gMCkge1xuICAgICAgaWYgKGN1cnJMZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgbWF4SW5kZXggPSBjdXJyU3RhcnQ7XG4gICAgICAgIG1heExlbmd0aCA9IGN1cnJMZW5ndGg7XG4gICAgICB9XG4gICAgICBjdXJyU3RhcnQgPSBudWxsO1xuICAgICAgY3Vyckxlbmd0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjdXJyU3RhcnQgPT09IG51bGwpIGN1cnJTdGFydCA9IGluZGV4O1xuICAgICAgKytjdXJyTGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3Vyckxlbmd0aCA+IG1heExlbmd0aCA/IGN1cnJTdGFydCA6IG1heEluZGV4O1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNob3N0LXNlcmlhbGl6aW5nXG52YXIgc2VyaWFsaXplSG9zdCA9IGZ1bmN0aW9uIChob3N0KSB7XG4gIHZhciByZXN1bHQsIGluZGV4LCBjb21wcmVzcywgaWdub3JlMDtcblxuICAvLyBpcHY0XG4gIGlmICh0eXBlb2YgaG9zdCA9PSAnbnVtYmVyJykge1xuICAgIHJlc3VsdCA9IFtdO1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDQ7IGluZGV4KyspIHtcbiAgICAgIHVuc2hpZnQocmVzdWx0LCBob3N0ICUgMjU2KTtcbiAgICAgIGhvc3QgPSBmbG9vcihob3N0IC8gMjU2KTtcbiAgICB9XG4gICAgcmV0dXJuIGpvaW4ocmVzdWx0LCAnLicpO1xuICB9XG5cbiAgLy8gaXB2NlxuICBpZiAodHlwZW9mIGhvc3QgPT0gJ29iamVjdCcpIHtcbiAgICByZXN1bHQgPSAnJztcbiAgICBjb21wcmVzcyA9IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGhvc3QpO1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDg7IGluZGV4KyspIHtcbiAgICAgIGlmIChpZ25vcmUwICYmIGhvc3RbaW5kZXhdID09PSAwKSBjb250aW51ZTtcbiAgICAgIGlmIChpZ25vcmUwKSBpZ25vcmUwID0gZmFsc2U7XG4gICAgICBpZiAoY29tcHJlc3MgPT09IGluZGV4KSB7XG4gICAgICAgIHJlc3VsdCArPSBpbmRleCA/ICc6JyA6ICc6Oic7XG4gICAgICAgIGlnbm9yZTAgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IG51bWJlclRvU3RyaW5nKGhvc3RbaW5kZXhdLCAxNik7XG4gICAgICAgIGlmIChpbmRleCA8IDcpIHJlc3VsdCArPSAnOic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnWycgKyByZXN1bHQgKyAnXSc7XG4gIH1cblxuICByZXR1cm4gaG9zdDtcbn07XG5cbnZhciBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0ID0ge307XG52YXIgZnJhZ21lbnRQZXJjZW50RW5jb2RlU2V0ID0gYXNzaWduKHt9LCBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0LCB7XG4gICcgJzogMSwgJ1wiJzogMSwgJzwnOiAxLCAnPic6IDEsICdgJzogMVxufSk7XG52YXIgcGF0aFBlcmNlbnRFbmNvZGVTZXQgPSBhc3NpZ24oe30sIGZyYWdtZW50UGVyY2VudEVuY29kZVNldCwge1xuICAnIyc6IDEsICc/JzogMSwgJ3snOiAxLCAnfSc6IDFcbn0pO1xudmFyIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCA9IGFzc2lnbih7fSwgcGF0aFBlcmNlbnRFbmNvZGVTZXQsIHtcbiAgJy8nOiAxLCAnOic6IDEsICc7JzogMSwgJz0nOiAxLCAnQCc6IDEsICdbJzogMSwgJ1xcXFwnOiAxLCAnXSc6IDEsICdeJzogMSwgJ3wnOiAxXG59KTtcblxudmFyIHBlcmNlbnRFbmNvZGUgPSBmdW5jdGlvbiAoY2hyLCBzZXQpIHtcbiAgdmFyIGNvZGUgPSBjb2RlQXQoY2hyLCAwKTtcbiAgcmV0dXJuIGNvZGUgPiAweDIwICYmIGNvZGUgPCAweDdGICYmICFoYXNPd24oc2V0LCBjaHIpID8gY2hyIDogZW5jb2RlVVJJQ29tcG9uZW50KGNocik7XG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3NwZWNpYWwtc2NoZW1lXG52YXIgc3BlY2lhbFNjaGVtZXMgPSB7XG4gIGZ0cDogMjEsXG4gIGZpbGU6IG51bGwsXG4gIGh0dHA6IDgwLFxuICBodHRwczogNDQzLFxuICB3czogODAsXG4gIHdzczogNDQzXG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3dpbmRvd3MtZHJpdmUtbGV0dGVyXG52YXIgaXNXaW5kb3dzRHJpdmVMZXR0ZXIgPSBmdW5jdGlvbiAoc3RyaW5nLCBub3JtYWxpemVkKSB7XG4gIHZhciBzZWNvbmQ7XG4gIHJldHVybiBzdHJpbmcubGVuZ3RoID09PSAyICYmIGV4ZWMoQUxQSEEsIGNoYXJBdChzdHJpbmcsIDApKVxuICAgICYmICgoc2Vjb25kID0gY2hhckF0KHN0cmluZywgMSkpID09PSAnOicgfHwgKCFub3JtYWxpemVkICYmIHNlY29uZCA9PT0gJ3wnKSk7XG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3N0YXJ0LXdpdGgtYS13aW5kb3dzLWRyaXZlLWxldHRlclxudmFyIHN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciB0aGlyZDtcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPiAxICYmIGlzV2luZG93c0RyaXZlTGV0dGVyKHN0cmluZ1NsaWNlKHN0cmluZywgMCwgMikpICYmIChcbiAgICBzdHJpbmcubGVuZ3RoID09PSAyIHx8XG4gICAgKCh0aGlyZCA9IGNoYXJBdChzdHJpbmcsIDIpKSA9PT0gJy8nIHx8IHRoaXJkID09PSAnXFxcXCcgfHwgdGhpcmQgPT09ICc/JyB8fCB0aGlyZCA9PT0gJyMnKVxuICApO1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzaW5nbGUtZG90LXBhdGgtc2VnbWVudFxudmFyIGlzU2luZ2xlRG90ID0gZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQgPT09ICcuJyB8fCB0b0xvd2VyQ2FzZShzZWdtZW50KSA9PT0gJyUyZSc7XG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvdWJsZS1kb3QtcGF0aC1zZWdtZW50XG52YXIgaXNEb3VibGVEb3QgPSBmdW5jdGlvbiAoc2VnbWVudCkge1xuICBzZWdtZW50ID0gdG9Mb3dlckNhc2Uoc2VnbWVudCk7XG4gIHJldHVybiBzZWdtZW50ID09PSAnLi4nIHx8IHNlZ21lbnQgPT09ICclMmUuJyB8fCBzZWdtZW50ID09PSAnLiUyZScgfHwgc2VnbWVudCA9PT0gJyUyZSUyZSc7XG59O1xuXG4vLyBTdGF0ZXM6XG52YXIgU0NIRU1FX1NUQVJUID0ge307XG52YXIgU0NIRU1FID0ge307XG52YXIgTk9fU0NIRU1FID0ge307XG52YXIgU1BFQ0lBTF9SRUxBVElWRV9PUl9BVVRIT1JJVFkgPSB7fTtcbnZhciBQQVRIX09SX0FVVEhPUklUWSA9IHt9O1xudmFyIFJFTEFUSVZFID0ge307XG52YXIgUkVMQVRJVkVfU0xBU0ggPSB7fTtcbnZhciBTUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTID0ge307XG52YXIgU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVMgPSB7fTtcbnZhciBBVVRIT1JJVFkgPSB7fTtcbnZhciBIT1NUID0ge307XG52YXIgSE9TVE5BTUUgPSB7fTtcbnZhciBQT1JUID0ge307XG52YXIgRklMRSA9IHt9O1xudmFyIEZJTEVfU0xBU0ggPSB7fTtcbnZhciBGSUxFX0hPU1QgPSB7fTtcbnZhciBQQVRIX1NUQVJUID0ge307XG52YXIgUEFUSCA9IHt9O1xudmFyIENBTk5PVF9CRV9BX0JBU0VfVVJMX1BBVEggPSB7fTtcbnZhciBRVUVSWSA9IHt9O1xudmFyIEZSQUdNRU5UID0ge307XG5cbnZhciBVUkxTdGF0ZSA9IGZ1bmN0aW9uICh1cmwsIGlzQmFzZSwgYmFzZSkge1xuICB2YXIgdXJsU3RyaW5nID0gJHRvU3RyaW5nKHVybCk7XG4gIHZhciBiYXNlU3RhdGUsIGZhaWx1cmUsIHNlYXJjaFBhcmFtcztcbiAgaWYgKGlzQmFzZSkge1xuICAgIGZhaWx1cmUgPSB0aGlzLnBhcnNlKHVybFN0cmluZyk7XG4gICAgaWYgKGZhaWx1cmUpIHRocm93IG5ldyBUeXBlRXJyb3IoZmFpbHVyZSk7XG4gICAgdGhpcy5zZWFyY2hQYXJhbXMgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIGlmIChiYXNlICE9PSB1bmRlZmluZWQpIGJhc2VTdGF0ZSA9IG5ldyBVUkxTdGF0ZShiYXNlLCB0cnVlKTtcbiAgICBmYWlsdXJlID0gdGhpcy5wYXJzZSh1cmxTdHJpbmcsIG51bGwsIGJhc2VTdGF0ZSk7XG4gICAgaWYgKGZhaWx1cmUpIHRocm93IG5ldyBUeXBlRXJyb3IoZmFpbHVyZSk7XG4gICAgc2VhcmNoUGFyYW1zID0gZ2V0SW50ZXJuYWxTZWFyY2hQYXJhbXNTdGF0ZShuZXcgVVJMU2VhcmNoUGFyYW1zKCkpO1xuICAgIHNlYXJjaFBhcmFtcy5iaW5kVVJMKHRoaXMpO1xuICAgIHRoaXMuc2VhcmNoUGFyYW1zID0gc2VhcmNoUGFyYW1zO1xuICB9XG59O1xuXG5VUkxTdGF0ZS5wcm90b3R5cGUgPSB7XG4gIHR5cGU6ICdVUkwnLFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybC1wYXJzaW5nXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50cyAtLSBUT0RPXG4gIHBhcnNlOiBmdW5jdGlvbiAoaW5wdXQsIHN0YXRlT3ZlcnJpZGUsIGJhc2UpIHtcbiAgICB2YXIgdXJsID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSBzdGF0ZU92ZXJyaWRlIHx8IFNDSEVNRV9TVEFSVDtcbiAgICB2YXIgcG9pbnRlciA9IDA7XG4gICAgdmFyIGJ1ZmZlciA9ICcnO1xuICAgIHZhciBzZWVuQXQgPSBmYWxzZTtcbiAgICB2YXIgc2VlbkJyYWNrZXQgPSBmYWxzZTtcbiAgICB2YXIgc2VlblBhc3N3b3JkVG9rZW4gPSBmYWxzZTtcbiAgICB2YXIgY29kZVBvaW50cywgY2hyLCBidWZmZXJDb2RlUG9pbnRzLCBmYWlsdXJlO1xuXG4gICAgaW5wdXQgPSAkdG9TdHJpbmcoaW5wdXQpO1xuXG4gICAgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICB1cmwuc2NoZW1lID0gJyc7XG4gICAgICB1cmwudXNlcm5hbWUgPSAnJztcbiAgICAgIHVybC5wYXNzd29yZCA9ICcnO1xuICAgICAgdXJsLmhvc3QgPSBudWxsO1xuICAgICAgdXJsLnBvcnQgPSBudWxsO1xuICAgICAgdXJsLnBhdGggPSBbXTtcbiAgICAgIHVybC5xdWVyeSA9IG51bGw7XG4gICAgICB1cmwuZnJhZ21lbnQgPSBudWxsO1xuICAgICAgdXJsLmNhbm5vdEJlQUJhc2VVUkwgPSBmYWxzZTtcbiAgICAgIGlucHV0ID0gcmVwbGFjZShpbnB1dCwgTEVBRElOR19DMF9DT05UUk9MX09SX1NQQUNFLCAnJyk7XG4gICAgICBpbnB1dCA9IHJlcGxhY2UoaW5wdXQsIFRSQUlMSU5HX0MwX0NPTlRST0xfT1JfU1BBQ0UsICckMScpO1xuICAgIH1cblxuICAgIGlucHV0ID0gcmVwbGFjZShpbnB1dCwgVEFCX0FORF9ORVdfTElORSwgJycpO1xuXG4gICAgY29kZVBvaW50cyA9IGFycmF5RnJvbShpbnB1dCk7XG5cbiAgICB3aGlsZSAocG9pbnRlciA8PSBjb2RlUG9pbnRzLmxlbmd0aCkge1xuICAgICAgY2hyID0gY29kZVBvaW50c1twb2ludGVyXTtcbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgY2FzZSBTQ0hFTUVfU1RBUlQ6XG4gICAgICAgICAgaWYgKGNociAmJiBleGVjKEFMUEhBLCBjaHIpKSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gdG9Mb3dlckNhc2UoY2hyKTtcbiAgICAgICAgICAgIHN0YXRlID0gU0NIRU1FO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIHN0YXRlID0gTk9fU0NIRU1FO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIHJldHVybiBJTlZBTElEX1NDSEVNRTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFNDSEVNRTpcbiAgICAgICAgICBpZiAoY2hyICYmIChleGVjKEFMUEhBTlVNRVJJQywgY2hyKSB8fCBjaHIgPT09ICcrJyB8fCBjaHIgPT09ICctJyB8fCBjaHIgPT09ICcuJykpIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSB0b0xvd2VyQ2FzZShjaHIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnOicpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlICYmIChcbiAgICAgICAgICAgICAgKHVybC5pc1NwZWNpYWwoKSAhPT0gaGFzT3duKHNwZWNpYWxTY2hlbWVzLCBidWZmZXIpKSB8fFxuICAgICAgICAgICAgICAoYnVmZmVyID09PSAnZmlsZScgJiYgKHVybC5pbmNsdWRlc0NyZWRlbnRpYWxzKCkgfHwgdXJsLnBvcnQgIT09IG51bGwpKSB8fFxuICAgICAgICAgICAgICAodXJsLnNjaGVtZSA9PT0gJ2ZpbGUnICYmICF1cmwuaG9zdClcbiAgICAgICAgICAgICkpIHJldHVybjtcbiAgICAgICAgICAgIHVybC5zY2hlbWUgPSBidWZmZXI7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkge1xuICAgICAgICAgICAgICBpZiAodXJsLmlzU3BlY2lhbCgpICYmIHNwZWNpYWxTY2hlbWVzW3VybC5zY2hlbWVdID09PSB1cmwucG9ydCkgdXJsLnBvcnQgPSBudWxsO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIGlmICh1cmwuc2NoZW1lID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBGSUxFO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmwuaXNTcGVjaWFsKCkgJiYgYmFzZSAmJiBiYXNlLnNjaGVtZSA9PT0gdXJsLnNjaGVtZSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfUkVMQVRJVkVfT1JfQVVUSE9SSVRZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmwuaXNTcGVjaWFsKCkpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnRzW3BvaW50ZXIgKyAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gUEFUSF9PUl9BVVRIT1JJVFk7XG4gICAgICAgICAgICAgIHBvaW50ZXIrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcHVzaCh1cmwucGF0aCwgJycpO1xuICAgICAgICAgICAgICBzdGF0ZSA9IENBTk5PVF9CRV9BX0JBU0VfVVJMX1BBVEg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICghc3RhdGVPdmVycmlkZSkge1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IE5PX1NDSEVNRTtcbiAgICAgICAgICAgIHBvaW50ZXIgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIHJldHVybiBJTlZBTElEX1NDSEVNRTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIE5PX1NDSEVNRTpcbiAgICAgICAgICBpZiAoIWJhc2UgfHwgKGJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjaHIgIT09ICcjJykpIHJldHVybiBJTlZBTElEX1NDSEVNRTtcbiAgICAgICAgICBpZiAoYmFzZS5jYW5ub3RCZUFCYXNlVVJMICYmIGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwuc2NoZW1lID0gYmFzZS5zY2hlbWU7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhdGUgPSBiYXNlLnNjaGVtZSA9PT0gJ2ZpbGUnID8gRklMRSA6IFJFTEFUSVZFO1xuICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIGNhc2UgU1BFQ0lBTF9SRUxBVElWRV9PUl9BVVRIT1JJVFk6XG4gICAgICAgICAgaWYgKGNociA9PT0gJy8nICYmIGNvZGVQb2ludHNbcG9pbnRlciArIDFdID09PSAnLycpIHtcbiAgICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM7XG4gICAgICAgICAgICBwb2ludGVyKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlID0gUkVMQVRJVkU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUEFUSF9PUl9BVVRIT1JJVFk6XG4gICAgICAgICAgaWYgKGNociA9PT0gJy8nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEFVVEhPUklUWTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUxBVElWRTpcbiAgICAgICAgICB1cmwuc2NoZW1lID0gYmFzZS5zY2hlbWU7XG4gICAgICAgICAgaWYgKGNociA9PT0gRU9GKSB7XG4gICAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICcvJyB8fCAoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKSkge1xuICAgICAgICAgICAgc3RhdGUgPSBSRUxBVElWRV9TTEFTSDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJz8nKSB7XG4gICAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgdXJsLnBhdGgubGVuZ3RoLS07XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUkVMQVRJVkVfU0xBU0g6XG4gICAgICAgICAgaWYgKHVybC5pc1NwZWNpYWwoKSAmJiAoY2hyID09PSAnLycgfHwgY2hyID09PSAnXFxcXCcpKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnLycpIHtcbiAgICAgICAgICAgIHN0YXRlID0gQVVUSE9SSVRZO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU1BFQ0lBTF9BVVRIT1JJVFlfU0xBU0hFUzpcbiAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTO1xuICAgICAgICAgIGlmIChjaHIgIT09ICcvJyB8fCBjaGFyQXQoYnVmZmVyLCBwb2ludGVyICsgMSkgIT09ICcvJykgY29udGludWU7XG4gICAgICAgICAgcG9pbnRlcisrO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM6XG4gICAgICAgICAgaWYgKGNociAhPT0gJy8nICYmIGNociAhPT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEFVVEhPUklUWTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBBVVRIT1JJVFk6XG4gICAgICAgICAgaWYgKGNociA9PT0gJ0AnKSB7XG4gICAgICAgICAgICBpZiAoc2VlbkF0KSBidWZmZXIgPSAnJTQwJyArIGJ1ZmZlcjtcbiAgICAgICAgICAgIHNlZW5BdCA9IHRydWU7XG4gICAgICAgICAgICBidWZmZXJDb2RlUG9pbnRzID0gYXJyYXlGcm9tKGJ1ZmZlcik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckNvZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9IGJ1ZmZlckNvZGVQb2ludHNbaV07XG4gICAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPT09ICc6JyAmJiAhc2VlblBhc3N3b3JkVG9rZW4pIHtcbiAgICAgICAgICAgICAgICBzZWVuUGFzc3dvcmRUb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGVuY29kZWRDb2RlUG9pbnRzID0gcGVyY2VudEVuY29kZShjb2RlUG9pbnQsIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgICAgICAgIGlmIChzZWVuUGFzc3dvcmRUb2tlbikgdXJsLnBhc3N3b3JkICs9IGVuY29kZWRDb2RlUG9pbnRzO1xuICAgICAgICAgICAgICBlbHNlIHVybC51c2VybmFtZSArPSBlbmNvZGVkQ29kZVBvaW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBjaHIgPT09IEVPRiB8fCBjaHIgPT09ICcvJyB8fCBjaHIgPT09ICc/JyB8fCBjaHIgPT09ICcjJyB8fFxuICAgICAgICAgICAgKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChzZWVuQXQgJiYgYnVmZmVyID09PSAnJykgcmV0dXJuIElOVkFMSURfQVVUSE9SSVRZO1xuICAgICAgICAgICAgcG9pbnRlciAtPSBhcnJheUZyb20oYnVmZmVyKS5sZW5ndGggKyAxO1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEhPU1Q7XG4gICAgICAgICAgfSBlbHNlIGJ1ZmZlciArPSBjaHI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBIT1NUOlxuICAgICAgICBjYXNlIEhPU1ROQU1FOlxuICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlICYmIHVybC5zY2hlbWUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgc3RhdGUgPSBGSUxFX0hPU1Q7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJzonICYmICFzZWVuQnJhY2tldCkge1xuICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PT0gJycpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICAgICAgICBmYWlsdXJlID0gdXJsLnBhcnNlSG9zdChidWZmZXIpO1xuICAgICAgICAgICAgaWYgKGZhaWx1cmUpIHJldHVybiBmYWlsdXJlO1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFBPUlQ7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSA9PT0gSE9TVE5BTUUpIHJldHVybjtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgY2hyID09PSBFT0YgfHwgY2hyID09PSAnLycgfHwgY2hyID09PSAnPycgfHwgY2hyID09PSAnIycgfHxcbiAgICAgICAgICAgIChjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodXJsLmlzU3BlY2lhbCgpICYmIGJ1ZmZlciA9PT0gJycpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSAmJiBidWZmZXIgPT09ICcnICYmICh1cmwuaW5jbHVkZXNDcmVkZW50aWFscygpIHx8IHVybC5wb3J0ICE9PSBudWxsKSkgcmV0dXJuO1xuICAgICAgICAgICAgZmFpbHVyZSA9IHVybC5wYXJzZUhvc3QoYnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChmYWlsdXJlKSByZXR1cm4gZmFpbHVyZTtcbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY2hyID09PSAnWycpIHNlZW5CcmFja2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNociA9PT0gJ10nKSBzZWVuQnJhY2tldCA9IGZhbHNlO1xuICAgICAgICAgICAgYnVmZmVyICs9IGNocjtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUE9SVDpcbiAgICAgICAgICBpZiAoZXhlYyhESUdJVCwgY2hyKSkge1xuICAgICAgICAgICAgYnVmZmVyICs9IGNocjtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgY2hyID09PSBFT0YgfHwgY2hyID09PSAnLycgfHwgY2hyID09PSAnPycgfHwgY2hyID09PSAnIycgfHxcbiAgICAgICAgICAgIChjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpIHx8XG4gICAgICAgICAgICBzdGF0ZU92ZXJyaWRlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoYnVmZmVyICE9PSAnJykge1xuICAgICAgICAgICAgICB2YXIgcG9ydCA9IHBhcnNlSW50KGJ1ZmZlciwgMTApO1xuICAgICAgICAgICAgICBpZiAocG9ydCA+IDB4RkZGRikgcmV0dXJuIElOVkFMSURfUE9SVDtcbiAgICAgICAgICAgICAgdXJsLnBvcnQgPSAodXJsLmlzU3BlY2lhbCgpICYmIHBvcnQgPT09IHNwZWNpYWxTY2hlbWVzW3VybC5zY2hlbWVdKSA/IG51bGwgOiBwb3J0O1xuICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEhfU1RBUlQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuIElOVkFMSURfUE9SVDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEZJTEU6XG4gICAgICAgICAgdXJsLnNjaGVtZSA9ICdmaWxlJztcbiAgICAgICAgICBpZiAoY2hyID09PSAnLycgfHwgY2hyID09PSAnXFxcXCcpIHN0YXRlID0gRklMRV9TTEFTSDtcbiAgICAgICAgICBlbHNlIGlmIChiYXNlICYmIGJhc2Uuc2NoZW1lID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hyKSB7XG4gICAgICAgICAgICAgIGNhc2UgRU9GOlxuICAgICAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJz8nOlxuICAgICAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIoam9pbihhcnJheVNsaWNlKGNvZGVQb2ludHMsIHBvaW50ZXIpLCAnJykpKSB7XG4gICAgICAgICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgICAgICAgdXJsLnNob3J0ZW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIEZJTEVfU0xBU0g6XG4gICAgICAgICAgaWYgKGNociA9PT0gJy8nIHx8IGNociA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEZJTEVfSE9TVDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmFzZSAmJiBiYXNlLnNjaGVtZSA9PT0gJ2ZpbGUnICYmICFzdGFydHNXaXRoV2luZG93c0RyaXZlTGV0dGVyKGpvaW4oYXJyYXlTbGljZShjb2RlUG9pbnRzLCBwb2ludGVyKSwgJycpKSkge1xuICAgICAgICAgICAgaWYgKGlzV2luZG93c0RyaXZlTGV0dGVyKGJhc2UucGF0aFswXSwgdHJ1ZSkpIHB1c2godXJsLnBhdGgsIGJhc2UucGF0aFswXSk7XG4gICAgICAgICAgICBlbHNlIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgY2FzZSBGSUxFX0hPU1Q6XG4gICAgICAgICAgaWYgKGNociA9PT0gRU9GIHx8IGNociA9PT0gJy8nIHx8IGNociA9PT0gJ1xcXFwnIHx8IGNociA9PT0gJz8nIHx8IGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICBpZiAoIXN0YXRlT3ZlcnJpZGUgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoYnVmZmVyKSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlciA9PT0gJycpIHtcbiAgICAgICAgICAgICAgdXJsLmhvc3QgPSAnJztcbiAgICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHJldHVybjtcbiAgICAgICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZmFpbHVyZSA9IHVybC5wYXJzZUhvc3QoYnVmZmVyKTtcbiAgICAgICAgICAgICAgaWYgKGZhaWx1cmUpIHJldHVybiBmYWlsdXJlO1xuICAgICAgICAgICAgICBpZiAodXJsLmhvc3QgPT09ICdsb2NhbGhvc3QnKSB1cmwuaG9zdCA9ICcnO1xuICAgICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkgcmV0dXJuO1xuICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgICAgfSBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgYnVmZmVyICs9IGNocjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFBBVEhfU1RBUlQ6XG4gICAgICAgICAgaWYgKHVybC5pc1NwZWNpYWwoKSkge1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgaWYgKGNociAhPT0gJy8nICYmIGNociAhPT0gJ1xcXFwnKSBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGNociA9PT0gJz8nKSB7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgfSBlbHNlIGlmICghc3RhdGVPdmVycmlkZSAmJiBjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyICE9PSBFT0YpIHtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGlmIChjaHIgIT09ICcvJykgY29udGludWU7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIFBBVEg6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY2hyID09PSBFT0YgfHwgY2hyID09PSAnLycgfHxcbiAgICAgICAgICAgIChjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpIHx8XG4gICAgICAgICAgICAoIXN0YXRlT3ZlcnJpZGUgJiYgKGNociA9PT0gJz8nIHx8IGNociA9PT0gJyMnKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChpc0RvdWJsZURvdChidWZmZXIpKSB7XG4gICAgICAgICAgICAgIHVybC5zaG9ydGVuUGF0aCgpO1xuICAgICAgICAgICAgICBpZiAoY2hyICE9PSAnLycgJiYgIShjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpKSB7XG4gICAgICAgICAgICAgICAgcHVzaCh1cmwucGF0aCwgJycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU2luZ2xlRG90KGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgaWYgKGNociAhPT0gJy8nICYmICEoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKSkge1xuICAgICAgICAgICAgICAgIHB1c2godXJsLnBhdGgsICcnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHVybC5zY2hlbWUgPT09ICdmaWxlJyAmJiAhdXJsLnBhdGgubGVuZ3RoICYmIGlzV2luZG93c0RyaXZlTGV0dGVyKGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLmhvc3QpIHVybC5ob3N0ID0gJyc7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gY2hhckF0KGJ1ZmZlciwgMCkgKyAnOic7IC8vIG5vcm1hbGl6ZSB3aW5kb3dzIGRyaXZlIGxldHRlclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHB1c2godXJsLnBhdGgsIGJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIGlmICh1cmwuc2NoZW1lID09PSAnZmlsZScgJiYgKGNociA9PT0gRU9GIHx8IGNociA9PT0gJz8nIHx8IGNociA9PT0gJyMnKSkge1xuICAgICAgICAgICAgICB3aGlsZSAodXJsLnBhdGgubGVuZ3RoID4gMSAmJiB1cmwucGF0aFswXSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBzaGlmdCh1cmwucGF0aCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaHIgPT09ICc/Jykge1xuICAgICAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSBwZXJjZW50RW5jb2RlKGNociwgcGF0aFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDQU5OT1RfQkVfQV9CQVNFX1VSTF9QQVRIOlxuICAgICAgICAgIGlmIChjaHIgPT09ICc/Jykge1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociAhPT0gRU9GKSB7XG4gICAgICAgICAgICB1cmwucGF0aFswXSArPSBwZXJjZW50RW5jb2RlKGNociwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIFFVRVJZOlxuICAgICAgICAgIGlmICghc3RhdGVPdmVycmlkZSAmJiBjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyICE9PSBFT0YpIHtcbiAgICAgICAgICAgIGlmIChjaHIgPT09IFwiJ1wiICYmIHVybC5pc1NwZWNpYWwoKSkgdXJsLnF1ZXJ5ICs9ICclMjcnO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2hyID09PSAnIycpIHVybC5xdWVyeSArPSAnJTIzJztcbiAgICAgICAgICAgIGVsc2UgdXJsLnF1ZXJ5ICs9IHBlcmNlbnRFbmNvZGUoY2hyLCBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgRlJBR01FTlQ6XG4gICAgICAgICAgaWYgKGNociAhPT0gRU9GKSB1cmwuZnJhZ21lbnQgKz0gcGVyY2VudEVuY29kZShjaHIsIGZyYWdtZW50UGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHBvaW50ZXIrKztcbiAgICB9XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaG9zdC1wYXJzaW5nXG4gIHBhcnNlSG9zdDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgdmFyIHJlc3VsdCwgY29kZVBvaW50cywgaW5kZXg7XG4gICAgaWYgKGNoYXJBdChpbnB1dCwgMCkgPT09ICdbJykge1xuICAgICAgaWYgKGNoYXJBdChpbnB1dCwgaW5wdXQubGVuZ3RoIC0gMSkgIT09ICddJykgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgIHJlc3VsdCA9IHBhcnNlSVB2NihzdHJpbmdTbGljZShpbnB1dCwgMSwgLTEpKTtcbiAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgdGhpcy5ob3N0ID0gcmVzdWx0O1xuICAgIC8vIG9wYXF1ZSBob3N0XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc1NwZWNpYWwoKSkge1xuICAgICAgaWYgKGV4ZWMoRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVF9FWENMVURJTkdfUEVSQ0VOVCwgaW5wdXQpKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgcmVzdWx0ID0gJyc7XG4gICAgICBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKGlucHV0KTtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGNvZGVQb2ludHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCArPSBwZXJjZW50RW5jb2RlKGNvZGVQb2ludHNbaW5kZXhdLCBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaG9zdCA9IHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQgPSB0b0FTQ0lJKGlucHV0KTtcbiAgICAgIGlmIChleGVjKEZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlQsIGlucHV0KSkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgIHJlc3VsdCA9IHBhcnNlSVB2NChpbnB1dCk7XG4gICAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgdGhpcy5ob3N0ID0gcmVzdWx0O1xuICAgIH1cbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjYW5ub3QtaGF2ZS1hLXVzZXJuYW1lLXBhc3N3b3JkLXBvcnRcbiAgY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICF0aGlzLmhvc3QgfHwgdGhpcy5jYW5ub3RCZUFCYXNlVVJMIHx8IHRoaXMuc2NoZW1lID09PSAnZmlsZSc7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaW5jbHVkZS1jcmVkZW50aWFsc1xuICBpbmNsdWRlc0NyZWRlbnRpYWxzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudXNlcm5hbWUgIT09ICcnIHx8IHRoaXMucGFzc3dvcmQgIT09ICcnO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2lzLXNwZWNpYWxcbiAgaXNTcGVjaWFsOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGhhc093bihzcGVjaWFsU2NoZW1lcywgdGhpcy5zY2hlbWUpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3Nob3J0ZW4tYS11cmxzLXBhdGhcbiAgc2hvcnRlblBhdGg6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGF0aCA9IHRoaXMucGF0aDtcbiAgICB2YXIgcGF0aFNpemUgPSBwYXRoLmxlbmd0aDtcbiAgICBpZiAocGF0aFNpemUgJiYgKHRoaXMuc2NoZW1lICE9PSAnZmlsZScgfHwgcGF0aFNpemUgIT09IDEgfHwgIWlzV2luZG93c0RyaXZlTGV0dGVyKHBhdGhbMF0sIHRydWUpKSkge1xuICAgICAgcGF0aC5sZW5ndGgtLTtcbiAgICB9XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtc2VyaWFsaXplclxuICBzZXJpYWxpemU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcztcbiAgICB2YXIgc2NoZW1lID0gdXJsLnNjaGVtZTtcbiAgICB2YXIgdXNlcm5hbWUgPSB1cmwudXNlcm5hbWU7XG4gICAgdmFyIHBhc3N3b3JkID0gdXJsLnBhc3N3b3JkO1xuICAgIHZhciBob3N0ID0gdXJsLmhvc3Q7XG4gICAgdmFyIHBvcnQgPSB1cmwucG9ydDtcbiAgICB2YXIgcGF0aCA9IHVybC5wYXRoO1xuICAgIHZhciBxdWVyeSA9IHVybC5xdWVyeTtcbiAgICB2YXIgZnJhZ21lbnQgPSB1cmwuZnJhZ21lbnQ7XG4gICAgdmFyIG91dHB1dCA9IHNjaGVtZSArICc6JztcbiAgICBpZiAoaG9zdCAhPT0gbnVsbCkge1xuICAgICAgb3V0cHV0ICs9ICcvLyc7XG4gICAgICBpZiAodXJsLmluY2x1ZGVzQ3JlZGVudGlhbHMoKSkge1xuICAgICAgICBvdXRwdXQgKz0gdXNlcm5hbWUgKyAocGFzc3dvcmQgPyAnOicgKyBwYXNzd29yZCA6ICcnKSArICdAJztcbiAgICAgIH1cbiAgICAgIG91dHB1dCArPSBzZXJpYWxpemVIb3N0KGhvc3QpO1xuICAgICAgaWYgKHBvcnQgIT09IG51bGwpIG91dHB1dCArPSAnOicgKyBwb3J0O1xuICAgIH0gZWxzZSBpZiAoc2NoZW1lID09PSAnZmlsZScpIG91dHB1dCArPSAnLy8nO1xuICAgIG91dHB1dCArPSB1cmwuY2Fubm90QmVBQmFzZVVSTCA/IHBhdGhbMF0gOiBwYXRoLmxlbmd0aCA/ICcvJyArIGpvaW4ocGF0aCwgJy8nKSA6ICcnO1xuICAgIGlmIChxdWVyeSAhPT0gbnVsbCkgb3V0cHV0ICs9ICc/JyArIHF1ZXJ5O1xuICAgIGlmIChmcmFnbWVudCAhPT0gbnVsbCkgb3V0cHV0ICs9ICcjJyArIGZyYWdtZW50O1xuICAgIHJldHVybiBvdXRwdXQ7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ocmVmXG4gIHNldEhyZWY6IGZ1bmN0aW9uIChocmVmKSB7XG4gICAgdmFyIGZhaWx1cmUgPSB0aGlzLnBhcnNlKGhyZWYpO1xuICAgIGlmIChmYWlsdXJlKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZhaWx1cmUpO1xuICAgIHRoaXMuc2VhcmNoUGFyYW1zLnVwZGF0ZSgpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtb3JpZ2luXG4gIGdldE9yaWdpbjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzY2hlbWUgPSB0aGlzLnNjaGVtZTtcbiAgICB2YXIgcG9ydCA9IHRoaXMucG9ydDtcbiAgICBpZiAoc2NoZW1lID09PSAnYmxvYicpIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFVSTENvbnN0cnVjdG9yKHNjaGVtZS5wYXRoWzBdKS5vcmlnaW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmIChzY2hlbWUgPT09ICdmaWxlJyB8fCAhdGhpcy5pc1NwZWNpYWwoKSkgcmV0dXJuICdudWxsJztcbiAgICByZXR1cm4gc2NoZW1lICsgJzovLycgKyBzZXJpYWxpemVIb3N0KHRoaXMuaG9zdCkgKyAocG9ydCAhPT0gbnVsbCA/ICc6JyArIHBvcnQgOiAnJyk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wcm90b2NvbFxuICBnZXRQcm90b2NvbDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtZSArICc6JztcbiAgfSxcbiAgc2V0UHJvdG9jb2w6IGZ1bmN0aW9uIChwcm90b2NvbCkge1xuICAgIHRoaXMucGFyc2UoJHRvU3RyaW5nKHByb3RvY29sKSArICc6JywgU0NIRU1FX1NUQVJUKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXVzZXJuYW1lXG4gIGdldFVzZXJuYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudXNlcm5hbWU7XG4gIH0sXG4gIHNldFVzZXJuYW1lOiBmdW5jdGlvbiAodXNlcm5hbWUpIHtcbiAgICB2YXIgY29kZVBvaW50cyA9IGFycmF5RnJvbSgkdG9TdHJpbmcodXNlcm5hbWUpKTtcbiAgICBpZiAodGhpcy5jYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQoKSkgcmV0dXJuO1xuICAgIHRoaXMudXNlcm5hbWUgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudXNlcm5hbWUgKz0gcGVyY2VudEVuY29kZShjb2RlUG9pbnRzW2ldLCB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQpO1xuICAgIH1cbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBhc3N3b3JkXG4gIGdldFBhc3N3b3JkOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFzc3dvcmQ7XG4gIH0sXG4gIHNldFBhc3N3b3JkOiBmdW5jdGlvbiAocGFzc3dvcmQpIHtcbiAgICB2YXIgY29kZVBvaW50cyA9IGFycmF5RnJvbSgkdG9TdHJpbmcocGFzc3dvcmQpKTtcbiAgICBpZiAodGhpcy5jYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQoKSkgcmV0dXJuO1xuICAgIHRoaXMucGFzc3dvcmQgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFzc3dvcmQgKz0gcGVyY2VudEVuY29kZShjb2RlUG9pbnRzW2ldLCB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQpO1xuICAgIH1cbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhvc3RcbiAgZ2V0SG9zdDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICAgIHZhciBwb3J0ID0gdGhpcy5wb3J0O1xuICAgIHJldHVybiBob3N0ID09PSBudWxsID8gJydcbiAgICAgIDogcG9ydCA9PT0gbnVsbCA/IHNlcmlhbGl6ZUhvc3QoaG9zdClcbiAgICAgIDogc2VyaWFsaXplSG9zdChob3N0KSArICc6JyArIHBvcnQ7XG4gIH0sXG4gIHNldEhvc3Q6IGZ1bmN0aW9uIChob3N0KSB7XG4gICAgaWYgKHRoaXMuY2Fubm90QmVBQmFzZVVSTCkgcmV0dXJuO1xuICAgIHRoaXMucGFyc2UoaG9zdCwgSE9TVCk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ob3N0bmFtZVxuICBnZXRIb3N0bmFtZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICAgIHJldHVybiBob3N0ID09PSBudWxsID8gJycgOiBzZXJpYWxpemVIb3N0KGhvc3QpO1xuICB9LFxuICBzZXRIb3N0bmFtZTogZnVuY3Rpb24gKGhvc3RuYW1lKSB7XG4gICAgaWYgKHRoaXMuY2Fubm90QmVBQmFzZVVSTCkgcmV0dXJuO1xuICAgIHRoaXMucGFyc2UoaG9zdG5hbWUsIEhPU1ROQU1FKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBvcnRcbiAgZ2V0UG9ydDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBwb3J0ID0gdGhpcy5wb3J0O1xuICAgIHJldHVybiBwb3J0ID09PSBudWxsID8gJycgOiAkdG9TdHJpbmcocG9ydCk7XG4gIH0sXG4gIHNldFBvcnQ6IGZ1bmN0aW9uIChwb3J0KSB7XG4gICAgaWYgKHRoaXMuY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0KCkpIHJldHVybjtcbiAgICBwb3J0ID0gJHRvU3RyaW5nKHBvcnQpO1xuICAgIGlmIChwb3J0ID09PSAnJykgdGhpcy5wb3J0ID0gbnVsbDtcbiAgICBlbHNlIHRoaXMucGFyc2UocG9ydCwgUE9SVCk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wYXRobmFtZVxuICBnZXRQYXRobmFtZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXRoID0gdGhpcy5wYXRoO1xuICAgIHJldHVybiB0aGlzLmNhbm5vdEJlQUJhc2VVUkwgPyBwYXRoWzBdIDogcGF0aC5sZW5ndGggPyAnLycgKyBqb2luKHBhdGgsICcvJykgOiAnJztcbiAgfSxcbiAgc2V0UGF0aG5hbWU6IGZ1bmN0aW9uIChwYXRobmFtZSkge1xuICAgIGlmICh0aGlzLmNhbm5vdEJlQUJhc2VVUkwpIHJldHVybjtcbiAgICB0aGlzLnBhdGggPSBbXTtcbiAgICB0aGlzLnBhcnNlKHBhdGhuYW1lLCBQQVRIX1NUQVJUKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXNlYXJjaFxuICBnZXRTZWFyY2g6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLnF1ZXJ5O1xuICAgIHJldHVybiBxdWVyeSA/ICc/JyArIHF1ZXJ5IDogJyc7XG4gIH0sXG4gIHNldFNlYXJjaDogZnVuY3Rpb24gKHNlYXJjaCkge1xuICAgIHNlYXJjaCA9ICR0b1N0cmluZyhzZWFyY2gpO1xuICAgIGlmIChzZWFyY2ggPT09ICcnKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNoYXJBdChzZWFyY2gsIDApID09PSAnPycpIHNlYXJjaCA9IHN0cmluZ1NsaWNlKHNlYXJjaCwgMSk7XG4gICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICB0aGlzLnBhcnNlKHNlYXJjaCwgUVVFUlkpO1xuICAgIH1cbiAgICB0aGlzLnNlYXJjaFBhcmFtcy51cGRhdGUoKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXNlYXJjaHBhcmFtc1xuICBnZXRTZWFyY2hQYXJhbXM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hQYXJhbXMuZmFjYWRlO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaGFzaFxuICBnZXRIYXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGZyYWdtZW50ID0gdGhpcy5mcmFnbWVudDtcbiAgICByZXR1cm4gZnJhZ21lbnQgPyAnIycgKyBmcmFnbWVudCA6ICcnO1xuICB9LFxuICBzZXRIYXNoOiBmdW5jdGlvbiAoaGFzaCkge1xuICAgIGhhc2ggPSAkdG9TdHJpbmcoaGFzaCk7XG4gICAgaWYgKGhhc2ggPT09ICcnKSB7XG4gICAgICB0aGlzLmZyYWdtZW50ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNoYXJBdChoYXNoLCAwKSA9PT0gJyMnKSBoYXNoID0gc3RyaW5nU2xpY2UoaGFzaCwgMSk7XG4gICAgdGhpcy5mcmFnbWVudCA9ICcnO1xuICAgIHRoaXMucGFyc2UoaGFzaCwgRlJBR01FTlQpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5zZWFyY2hQYXJhbXMuc2VyaWFsaXplKCkgfHwgbnVsbDtcbiAgfVxufTtcblxuLy8gYFVSTGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsLWNsYXNzXG52YXIgVVJMQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBVUkwodXJsIC8qICwgYmFzZSAqLykge1xuICB2YXIgdGhhdCA9IGFuSW5zdGFuY2UodGhpcywgVVJMUHJvdG90eXBlKTtcbiAgdmFyIGJhc2UgPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKSA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBzdGF0ZSA9IHNldEludGVybmFsU3RhdGUodGhhdCwgbmV3IFVSTFN0YXRlKHVybCwgZmFsc2UsIGJhc2UpKTtcbiAgaWYgKCFERVNDUklQVE9SUykge1xuICAgIHRoYXQuaHJlZiA9IHN0YXRlLnNlcmlhbGl6ZSgpO1xuICAgIHRoYXQub3JpZ2luID0gc3RhdGUuZ2V0T3JpZ2luKCk7XG4gICAgdGhhdC5wcm90b2NvbCA9IHN0YXRlLmdldFByb3RvY29sKCk7XG4gICAgdGhhdC51c2VybmFtZSA9IHN0YXRlLmdldFVzZXJuYW1lKCk7XG4gICAgdGhhdC5wYXNzd29yZCA9IHN0YXRlLmdldFBhc3N3b3JkKCk7XG4gICAgdGhhdC5ob3N0ID0gc3RhdGUuZ2V0SG9zdCgpO1xuICAgIHRoYXQuaG9zdG5hbWUgPSBzdGF0ZS5nZXRIb3N0bmFtZSgpO1xuICAgIHRoYXQucG9ydCA9IHN0YXRlLmdldFBvcnQoKTtcbiAgICB0aGF0LnBhdGhuYW1lID0gc3RhdGUuZ2V0UGF0aG5hbWUoKTtcbiAgICB0aGF0LnNlYXJjaCA9IHN0YXRlLmdldFNlYXJjaCgpO1xuICAgIHRoYXQuc2VhcmNoUGFyYW1zID0gc3RhdGUuZ2V0U2VhcmNoUGFyYW1zKCk7XG4gICAgdGhhdC5oYXNoID0gc3RhdGUuZ2V0SGFzaCgpO1xuICB9XG59O1xuXG52YXIgVVJMUHJvdG90eXBlID0gVVJMQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG52YXIgYWNjZXNzb3JEZXNjcmlwdG9yID0gZnVuY3Rpb24gKGdldHRlciwgc2V0dGVyKSB7XG4gIHJldHVybiB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKVtnZXR0ZXJdKCk7XG4gICAgfSxcbiAgICBzZXQ6IHNldHRlciAmJiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpW3NldHRlcl0odmFsdWUpO1xuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWVcbiAgfTtcbn07XG5cbmlmIChERVNDUklQVE9SUykge1xuICAvLyBgVVJMLnByb3RvdHlwZS5ocmVmYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaHJlZlxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnaHJlZicsIGFjY2Vzc29yRGVzY3JpcHRvcignc2VyaWFsaXplJywgJ3NldEhyZWYnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLm9yaWdpbmAgZ2V0dGVyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1vcmlnaW5cbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ29yaWdpbicsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0T3JpZ2luJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5wcm90b2NvbGAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXByb3RvY29sXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdwcm90b2NvbCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0UHJvdG9jb2wnLCAnc2V0UHJvdG9jb2wnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnVzZXJuYW1lYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtdXNlcm5hbWVcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3VzZXJuYW1lJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRVc2VybmFtZScsICdzZXRVc2VybmFtZScpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUucGFzc3dvcmRgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wYXNzd29yZFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAncGFzc3dvcmQnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFBhc3N3b3JkJywgJ3NldFBhc3N3b3JkJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5ob3N0YCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaG9zdFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnaG9zdCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0SG9zdCcsICdzZXRIb3N0JykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5ob3N0bmFtZWAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhvc3RuYW1lXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdob3N0bmFtZScsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0SG9zdG5hbWUnLCAnc2V0SG9zdG5hbWUnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnBvcnRgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wb3J0XG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdwb3J0JywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRQb3J0JywgJ3NldFBvcnQnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnBhdGhuYW1lYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcGF0aG5hbWVcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3BhdGhuYW1lJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRQYXRobmFtZScsICdzZXRQYXRobmFtZScpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUuc2VhcmNoYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtc2VhcmNoXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdzZWFyY2gnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFNlYXJjaCcsICdzZXRTZWFyY2gnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnNlYXJjaFBhcmFtc2AgZ2V0dGVyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1zZWFyY2hwYXJhbXNcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3NlYXJjaFBhcmFtcycsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0U2VhcmNoUGFyYW1zJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5oYXNoYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaGFzaFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnaGFzaCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0SGFzaCcsICdzZXRIYXNoJykpO1xufVxuXG4vLyBgVVJMLnByb3RvdHlwZS50b0pTT05gIG1ldGhvZFxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXRvanNvblxuZGVmaW5lQnVpbHRJbihVUkxQcm90b3R5cGUsICd0b0pTT04nLCBmdW5jdGlvbiB0b0pTT04oKSB7XG4gIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnNlcmlhbGl6ZSgpO1xufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4vLyBgVVJMLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI1VSTC1zdHJpbmdpZmljYXRpb24tYmVoYXZpb3JcbmRlZmluZUJ1aWx0SW4oVVJMUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGdldEludGVybmFsVVJMU3RhdGUodGhpcykuc2VyaWFsaXplKCk7XG59LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbmlmIChOYXRpdmVVUkwpIHtcbiAgdmFyIG5hdGl2ZUNyZWF0ZU9iamVjdFVSTCA9IE5hdGl2ZVVSTC5jcmVhdGVPYmplY3RVUkw7XG4gIHZhciBuYXRpdmVSZXZva2VPYmplY3RVUkwgPSBOYXRpdmVVUkwucmV2b2tlT2JqZWN0VVJMO1xuICAvLyBgVVJMLmNyZWF0ZU9iamVjdFVSTGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwvY3JlYXRlT2JqZWN0VVJMXG4gIGlmIChuYXRpdmVDcmVhdGVPYmplY3RVUkwpIGRlZmluZUJ1aWx0SW4oVVJMQ29uc3RydWN0b3IsICdjcmVhdGVPYmplY3RVUkwnLCBiaW5kKG5hdGl2ZUNyZWF0ZU9iamVjdFVSTCwgTmF0aXZlVVJMKSk7XG4gIC8vIGBVUkwucmV2b2tlT2JqZWN0VVJMYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9yZXZva2VPYmplY3RVUkxcbiAgaWYgKG5hdGl2ZVJldm9rZU9iamVjdFVSTCkgZGVmaW5lQnVpbHRJbihVUkxDb25zdHJ1Y3RvciwgJ3Jldm9rZU9iamVjdFVSTCcsIGJpbmQobmF0aXZlUmV2b2tlT2JqZWN0VVJMLCBOYXRpdmVVUkwpKTtcbn1cblxuc2V0VG9TdHJpbmdUYWcoVVJMQ29uc3RydWN0b3IsICdVUkwnKTtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogIVVTRV9OQVRJVkVfVVJMLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBVUkw6IFVSTENvbnN0cnVjdG9yXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwuY29uc3RydWN0b3InKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIFVTRV9OQVRJVkVfVVJMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VybC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxudmFyIFVSTCA9IGdldEJ1aWx0SW4oJ1VSTCcpO1xuXG4vLyBgVVJMLnBhcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1jYW5wYXJzZVxuJCh7IHRhcmdldDogJ1VSTCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIVVTRV9OQVRJVkVfVVJMIH0sIHtcbiAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKHVybCkge1xuICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgdXJsU3RyaW5nID0gdG9TdHJpbmcodXJsKTtcbiAgICB2YXIgYmFzZSA9IGxlbmd0aCA8IDIgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0b1N0cmluZyhhcmd1bWVudHNbMV0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFVSTCh1cmxTdHJpbmcsIGJhc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwva2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9kYXRlL25vdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2gnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZm9yRWFjaClcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2luY2x1ZGVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2tleXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQua2V5cztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUua2V5cylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NvbWUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc29ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS90cmltJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9hc3NpZ24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3Byb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmltbWVkaWF0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0SW1tZWRpYXRlO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRUaW1lb3V0O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3NldCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbC9pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbC90by1wcmltaXRpdmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vd2ViL3VybC1zZWFyY2gtcGFyYW1zJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vd2ViL3VybCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5kZWxldGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmhhcycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuc2l6ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi91cmwtc2VhcmNoLXBhcmFtcycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwuY2FuLXBhcnNlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwucGFyc2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC50by1qc29uJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5VUkw7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiaW1wb3J0IHsgYXBwIGFzIEVsZWN0cm9uQXBwLCBCcm93c2VyV2luZG93LCBkaWFsb2cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCBzZXJ2ZSBmcm9tIFwiZWxlY3Ryb24tc2VydmVcIjtcbmltcG9ydCBTdG9yZSBmcm9tIFwiZWxlY3Ryb24tc3RvcmVcIjtcbmltcG9ydCBEZWJ1ZyBmcm9tIFwiZGVidWdcIjtcbmltcG9ydCB7IGNyZWF0ZVdpbmRvdywgeGJveFdvcmtlciB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCBBdXRoZW50aWNhdGlvbiBmcm9tIFwiLi9hdXRoZW50aWNhdGlvblwiO1xuaW1wb3J0IElwYyBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncyB9IGZyb20gJy4uL3JlbmRlcmVyL2NvbnRleHQvdXNlckNvbnRleHQuZGVmYXVsdHMnXG5cbmltcG9ydCB4Ym94V2ViQXBpIGZyb20gXCJ4Ym94LXdlYmFwaVwiO1xuaW1wb3J0IHhDbG91ZEFwaSBmcm9tIFwiLi9oZWxwZXJzL3hjbG91ZGFwaVwiO1xuXG5pbXBvcnQgcGtnIGZyb20gXCIuLi9wYWNrYWdlLmpzb25cIjtcblxuaW50ZXJmYWNlIHN0YXJ0dXBGbGFncyB7XG4gIGZ1bGxzY3JlZW46IGJvb2xlYW47XG4gIGF1dG9TdHJlYW06IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwbGljYXRpb24ge1xuICBwcml2YXRlIF9sb2c7XG4gIHB1YmxpYyBfc3RvcmUgPSBuZXcgU3RvcmUoKTtcbiAgcHJpdmF0ZSBfc3RhcnR1cEZsYWdzOiBzdGFydHVwRmxhZ3MgPSB7XG4gICAgZnVsbHNjcmVlbjogZmFsc2UsXG4gICAgYXV0b1N0cmVhbTogXCJcIixcbiAgfTtcblxuICBwdWJsaWMgX2lzUHJvZHVjdGlvbjogYm9vbGVhbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIjtcbiAgcHJpdmF0ZSBfaXNDaTogYm9vbGVhbiA9IHByb2Nlc3MuZW52LkNJICE9PSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2lzTWFjOiBib29sZWFuID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIjtcbiAgcHJpdmF0ZSBfaXNXaW5kb3dzOiBib29sZWFuID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiO1xuICBwcml2YXRlIF9pc1F1aXR0aW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIF9tYWluV2luZG93O1xuICBwdWJsaWMgX2lwYzogSXBjO1xuICBwdWJsaWMgX2F1dGhlbnRpY2F0aW9uOiBBdXRoZW50aWNhdGlvbjtcblxuICBwdWJsaWMgc3RyZWFtaW5nVG9rZW5zOiBhbnlcblxuICBwdWJsaWMgd2ViVG9rZW46IGFueVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgX19maWxlbmFtZSArIFwiW2NvbnN0cnVjdG9yKCldIFN0YXJ0aW5nIFhTdHJlYW1pbmcgdlwiICsgcGtnLnZlcnNpb25cbiAgICApO1xuICAgIHRoaXMuX2xvZyA9IERlYnVnKFwieHN0cmVhbWluZ1wiKTtcblxuICAgIEVsZWN0cm9uQXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaChcbiAgICAgIFwiZW5hYmxlLWZlYXR1cmVzXCIsXG4gICAgICBcIlZhYXBpSWdub3JlRHJpdmVyQ2hlY2tzLFZhYXBpVmlkZW9EZWNvZGVyLFBsYXRmb3JtSEVWQ0RlY29kZXJTdXBwb3J0LENhbnZhc09vcFJhc3Rlcml6YXRpb25cIlxuICAgICk7XG4gICAgLy8gRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKCdkaXNhYmxlLWZlYXR1cmVzJywgJ1VzZUNocm9tZU9TRGlyZWN0VmlkZW9EZWNvZGVyJyk7XG4gICAgRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKFwiZW5hYmxlLWdwdS1yYXN0ZXJpemF0aW9uXCIpO1xuICAgIEVsZWN0cm9uQXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaChcImVuYWJsZS1vb3AtcmFzdGVyaXphdGlvblwiKTtcbiAgICBFbGVjdHJvbkFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goXCJhY2NlbGVyYXRlZC12aWRlby1kZWNvZGVcIik7XG4gICAgRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKFwib3pvbmUtcGxhdGZvcm0taGludFwiLCBcIngxMVwiKTtcbiAgICBFbGVjdHJvbkFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goXCJpZ25vcmUtZ3B1LWJsb2NrbGlzdFwiKTtcbiAgICAvLyBFbGVjdHJvbkFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goJ2VuYWJsZS16ZXJvLWNvcHknKTtcblxuICAgIHRoaXMucmVhZFN0YXJ0dXBGbGFncygpO1xuICAgIHRoaXMubG9hZEFwcGxpY2F0aW9uRGVmYXVsdHMoKTtcblxuICAgIC8vIEVsZWN0cm9uQXBwLnJlbW92ZUFzRGVmYXVsdFByb3RvY29sQ2xpZW50KCdtcy14YWwtcHVibGljLWJldGEtMDAwMDAwMDA0YzIwYTkwOCcpXG5cbiAgICB0aGlzLl9pcGMgPSBuZXcgSXBjKHRoaXMpO1xuICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uID0gbmV3IEF1dGhlbnRpY2F0aW9uKHRoaXMpO1xuXG4gICAgdGhpcy5faXBjLnN0YXJ0VXAoKTtcbiAgfVxuXG4gIGxvZyhuYW1lc3BhY2UgPSBcImFwcGxpY2F0aW9uXCIsIC4uLmFyZ3MpIHtcbiAgICB0aGlzLl9sb2cuZXh0ZW5kKG5hbWVzcGFjZSkoLi4uYXJncyk7XG4gIH1cblxuICBnZXRTdGFydHVwRmxhZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0dXBGbGFncztcbiAgfVxuXG4gIHJlc2V0QXV0b3N0cmVhbSgpIHtcbiAgICB0aGlzLl9zdGFydHVwRmxhZ3MuYXV0b1N0cmVhbSA9IFwiXCI7XG4gIH1cblxuICByZWFkU3RhcnR1cEZsYWdzKCkge1xuICAgIHRoaXMubG9nKFxuICAgICAgXCJhcHBsaWNhdGlvblwiLFxuICAgICAgX19maWxlbmFtZSArIFwiW3JlYWRTdGFydHVwRmxhZ3MoKV0gUHJvZ3JhbSBhcmdzIGRldGVjdGVkOlwiLFxuICAgICAgcHJvY2Vzcy5hcmd2XG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgYXJnIGluIHByb2Nlc3MuYXJndikge1xuICAgICAgaWYgKHByb2Nlc3MuYXJndlthcmddLmluY2x1ZGVzKFwiLS1mdWxsc2NyZWVuXCIpKSB7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiYXBwbGljYXRpb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgIFwiW3JlYWRTdGFydHVwRmxhZ3MoKV0gLS1mdWxsc2NyZWVuIHN3aXRjaCBmb3VuZC4gU2V0dGluZyBmdWxsc2NyZWVuIHRvIHRydWVcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdGFydHVwRmxhZ3MuZnVsbHNjcmVlbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmFyZ3ZbYXJnXS5pbmNsdWRlcyhcIi0tY29ubmVjdD1cIikpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gcHJvY2Vzcy5hcmd2W2FyZ10uc3Vic3RyaW5nKDEwKTtcblxuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImFwcGxpY2F0aW9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICBcIltyZWFkU3RhcnR1cEZsYWdzKCldIC0tY29ubmVjdCBzd2l0Y2ggZm91bmQuIFNldHRpbmcgYXV0b1N0cmVhbSB0b1wiLFxuICAgICAgICAgIGtleVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdGFydHVwRmxhZ3MuYXV0b1N0cmVhbSA9IGtleTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxvZyhcbiAgICAgIFwiYXBwbGljYXRpb25cIixcbiAgICAgIF9fZmlsZW5hbWUgKyBcIltyZWFkU3RhcnR1cEZsYWdzKCldIEVuZCByZXN1bHQgb2Ygc3RhcnR1cEZsYWdzOlwiLFxuICAgICAgdGhpcy5fc3RhcnR1cEZsYWdzXG4gICAgKTtcbiAgfVxuXG4gIGxvYWRBcHBsaWNhdGlvbkRlZmF1bHRzKCkge1xuICAgIGlmICh0aGlzLl9pc1Byb2R1Y3Rpb24gPT09IHRydWUgJiYgdGhpcy5faXNDaSA9PT0gZmFsc2UpIHtcbiAgICAgIHNlcnZlKHsgZGlyZWN0b3J5OiBcImFwcFwiIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faXNDaSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgcmFuZG9tID0gTWF0aC5yYW5kb20oKSAqIDEwMDtcbiAgICAgIEVsZWN0cm9uQXBwLnNldFBhdGgoXG4gICAgICAgIFwidXNlckRhdGFcIixcbiAgICAgICAgYCR7RWxlY3Ryb25BcHAuZ2V0UGF0aChcInVzZXJEYXRhXCIpfSAoJHtyYW5kb219KWBcbiAgICAgICk7XG4gICAgICBFbGVjdHJvbkFwcC5zZXRQYXRoKFxuICAgICAgICBcInNlc3Npb25EYXRhXCIsXG4gICAgICAgIGAke0VsZWN0cm9uQXBwLmdldFBhdGgoXCJ1c2VyRGF0YVwiKX0gKCR7cmFuZG9tfSlgXG4gICAgICApO1xuICAgICAgdGhpcy5fc3RvcmUuZGVsZXRlKFwidXNlclwiKTtcbiAgICAgIHRoaXMuX3N0b3JlLmRlbGV0ZShcImF1dGhcIik7XG5cbiAgICAgIHNlcnZlKHsgZGlyZWN0b3J5OiBcImFwcFwiIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBFbGVjdHJvbkFwcC5zZXRQYXRoKFxuICAgICAgICBcInVzZXJEYXRhXCIsXG4gICAgICAgIGAke0VsZWN0cm9uQXBwLmdldFBhdGgoXCJ1c2VyRGF0YVwiKX0gKGRldmVsb3BtZW50KWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgRWxlY3Ryb25BcHAud2hlblJlYWR5KClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgXCJbbG9hZEFwcGxpY2F0aW9uRGVmYXVsdHMoKV0gRWxlY3Ryb24gaGFzIGJlZW4gZnVsbHkgbG9hZGVkLiBSZWFkeSB0byBvcGVuIHdpbmRvd3NcIlxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub3Blbk1haW5XaW5kb3coKTtcbiAgICAgICAgdGhpcy5fYXV0aGVudGljYXRpb24uc3RhcnRXZWJ2aWV3SG9va3MoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgIFwiW2xvYWRBcHBsaWNhdGlvbkRlZmF1bHRzKCldIEVsZWN0cm9uIGhhcyBmYWlsZWQgdG8gbG9hZDpcIixcbiAgICAgICAgICBlcnJvclxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICBFbGVjdHJvbkFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc01hYyA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImVsZWN0cm9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICBcIltsb2FkQXBwbGljYXRpb25EZWZhdWx0cygpXSBFbGVjdHJvbiBkZXRlY3RlZCB0aGF0IGFsbCB3aW5kb3dzIGFyZSBjbG9zZWQuIFJ1bm5pbmcgaW4gYmFja2dyb3VuZC4uLlwiXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImVsZWN0cm9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICBcIltsb2FkQXBwbGljYXRpb25EZWZhdWx0cygpXSBFbGVjdHJvbiBkZXRlY3RlZCB0aGF0IGFsbCB3aW5kb3dzIGFyZSBjbG9zZWQuIFF1aXR0aW5nIGFwcC4uLlwiXG4gICAgICAgICk7XG4gICAgICAgIEVsZWN0cm9uQXBwLnF1aXQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIEVsZWN0cm9uQXBwLm9uKFwiYWN0aXZhdGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5fbWFpbldpbmRvdyAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gdGhpcy5fbWFpbldpbmRvdy5zaG93KClcbiAgICAgICAgOiB0aGlzLm9wZW5NYWluV2luZG93KCk7XG4gICAgfSk7XG4gICAgRWxlY3Ryb25BcHAub24oXCJiZWZvcmUtcXVpdFwiLCAoKSA9PiAodGhpcy5faXNRdWl0dGluZyA9IHRydWUpKTtcbiAgfVxuXG4gIF93ZWJBcGk6IHhib3hXZWJBcGk7XG4gIF94SG9tZUFwaTogeENsb3VkQXBpO1xuICBfeENsb3VkQXBpOiB4Q2xvdWRBcGk7XG4gIF94Ym94V29ya2VyOiB4Ym94V29ya2VyO1xuXG4gIGF1dGhlbnRpY2F0aW9uQ29tcGxldGVkKHN0cmVhbWluZ1Rva2Vucywgd2ViVG9rZW4pIHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgIF9fZmlsZW5hbWUgKyBcIlthdXRoZW50aWNhdGlvbkNvbXBsZXRlZCgpXSBhdXRoZW50aWNhdGlvbkNvbXBsZXRlZCBjYWxsZWRcIlxuICAgICk7XG4gICAgdGhpcy5sb2coXG4gICAgICBcImVsZWN0cm9uXCIsXG4gICAgICBfX2ZpbGVuYW1lICsgXCJbYXV0aGVudGljYXRpb25Db21wbGV0ZWQoKV0gc3RyZWFtaW5nVG9rZW5zOlwiLFxuICAgICAgc3RyZWFtaW5nVG9rZW5zXG4gICAgKTtcblxuICAgIHRoaXMuc3RyZWFtaW5nVG9rZW5zID0gc3RyZWFtaW5nVG9rZW5zXG4gICAgdGhpcy53ZWJUb2tlbiA9IHdlYlRva2VuXG5cbiAgICB0aGlzLl93ZWJBcGkgPSBuZXcgeGJveFdlYkFwaSh7XG4gICAgICB1c2VyVG9rZW46IHdlYlRva2VuLmRhdGEuVG9rZW4sXG4gICAgICB1aHM6IHdlYlRva2VuLmRhdGEuRGlzcGxheUNsYWltcy54dWlbMF0udWhzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fYXV0aGVudGljYXRpb24uX2lzQXV0aGVudGljYXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9hdXRoZW50aWNhdGlvbi5faXNBdXRoZW50aWNhdGVkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3dlYkFwaVxuICAgICAgLmdldFByb3ZpZGVyKFwicHJvZmlsZVwiKVxuICAgICAgLmdldChcbiAgICAgICAgXCIvdXNlcnMvbWUvcHJvZmlsZS9zZXR0aW5ncz9zZXR0aW5ncz1HYW1lRGlzcGxheU5hbWUsR2FtZURpc3BsYXlQaWNSYXcsR2FtZXJzY29yZSxHYW1lcnRhZ1wiXG4gICAgICApXG4gICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQucHJvZmlsZVVzZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHNldHRpbmcgaW4gcmVzdWx0LnByb2ZpbGVVc2Vyc1swXS5zZXR0aW5ncykge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3Nbc2V0dGluZ10uaWQgPT09IFwiR2FtZXJ0YWdcIikge1xuICAgICAgICAgICAgICB0aGlzLl9zdG9yZS5zZXQoXG4gICAgICAgICAgICAgICAgXCJ1c2VyLmdhbWVydGFnXCIsXG4gICAgICAgICAgICAgICAgcmVzdWx0LnByb2ZpbGVVc2Vyc1swXS5zZXR0aW5nc1tzZXR0aW5nXS52YWx1ZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgcmVzdWx0LnByb2ZpbGVVc2Vyc1swXS5zZXR0aW5nc1tzZXR0aW5nXS5pZCA9PT1cbiAgICAgICAgICAgICAgXCJHYW1lRGlzcGxheVBpY1Jhd1wiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5fc3RvcmUuc2V0KFxuICAgICAgICAgICAgICAgIFwidXNlci5nYW1lcnBpY1wiLFxuICAgICAgICAgICAgICAgIHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3Nbc2V0dGluZ10udmFsdWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3Nbc2V0dGluZ10uaWQgPT09IFwiR2FtZXJzY29yZVwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5fc3RvcmUuc2V0KFxuICAgICAgICAgICAgICAgIFwidXNlci5nYW1lcnNjb3JlXCIsXG4gICAgICAgICAgICAgICAgcmVzdWx0LnByb2ZpbGVVc2Vyc1swXS5zZXR0aW5nc1tzZXR0aW5nXS52YWx1ZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJ1biB3b3JrZXJzXG4gICAgICAgIHRoaXMuX3hib3hXb3JrZXIgPSBuZXcgeGJveFdvcmtlcih0aGlzKTtcbiAgICAgICAgdGhpcy5faXBjLm9uVXNlckxvYWRlZCgpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgXCJbYXV0aGVudGljYXRpb25Db21wbGV0ZWQoKV0gRmFpbGVkIHRvIHJldHJpZXZlIHVzZXIgcHJvZmlsZTpcIixcbiAgICAgICAgICBlcnJvclxuICAgICAgICApO1xuICAgICAgICBkaWFsb2cuc2hvd01lc3NhZ2VCb3goe1xuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICBcIkVycm9yOiBGYWlsZWQgdG8gcmV0cmlldmUgdXNlciBwcm9maWxlOlwiICsgSlNPTi5zdHJpbmdpZnkoZXJyb3IpLFxuICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG9wZW5NYWluV2luZG93KCkge1xuICAgIHRoaXMubG9nKFxuICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgX19maWxlbmFtZSArIFwiW29wZW5NYWluV2luZG93KCldIENyZWF0aW5nIG5ldyBtYWluIHdpbmRvd1wiXG4gICAgKTtcblxuICAgIGNvbnN0IHNldHRpbmdzOiBhbnkgPSB0aGlzLl9zdG9yZS5nZXQoJ3NldHRpbmdzJywgZGVmYXVsdFNldHRpbmdzKVxuICAgIGNvbnNvbGUubG9nKCdzZXR0aW5nczonLCBzZXR0aW5ncylcblxuICAgIGNvbnN0IHdpbmRvd09wdGlvbnM6IGFueSA9IHtcbiAgICAgIHRpdGxlOiBcIlhTdHJlYW1pbmdcIixcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJyZ2IoMjYsIDI3LCAzMClcIixcbiAgICB9O1xuXG4gICAgaWYgKHNldHRpbmdzLmZ1bGxzY3JlZW4pIHtcbiAgICAgIHdpbmRvd09wdGlvbnMuZnVsbHNjcmVlbiA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFpbldpbmRvdyA9IGNyZWF0ZVdpbmRvdyhcIm1haW5cIiwge1xuICAgICAgd2lkdGg6IDEyODAsXG4gICAgICBoZWlnaHQ6IDgwMCxcbiAgICAgIC4uLndpbmRvd09wdGlvbnMsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9tYWluV2luZG93Lm9uKFwic2hvd1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLmxvZyhcbiAgICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgICBfX2ZpbGVuYW1lICsgXCJbb3Blbk1haW5XaW5kb3coKV0gU2hvd2luZyBNYWluIHdpbmRvdy5cIlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX21haW5XaW5kb3cub24oXCJjbG9zZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc01hYyA9PT0gdHJ1ZSAmJiB0aGlzLl9pc1F1aXR0aW5nID09PSBmYWxzZSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImVsZWN0cm9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArIFwiW29wZW5NYWluV2luZG93KCldIE1haW4gd2luZG93cyBoYXMgYmVlbiBoaWRkZW5cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tYWluV2luZG93LmhpZGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICsgXCJbb3Blbk1haW5XaW5kb3coKV0gTWFpbiB3aW5kb3dzIGhhcyBiZWVuIGNsb3NlZFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX21haW5XaW5kb3cgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBcbiAgICBjb25zdCBsb2NhbGUgPSBzZXR0aW5ncy5sb2NhbGUgfHwgJ2VuJ1xuXG4gICAgaWYgKHRoaXMuX2lzUHJvZHVjdGlvbiA9PT0gdHJ1ZSAmJiB0aGlzLl9pc0NpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fbWFpbldpbmRvdy5sb2FkVVJMKGBhcHA6Ly8uLyR7bG9jYWxlfS9ob21lYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBvcnQgPSBwcm9jZXNzLmFyZ3ZbMl0gfHwgMzAwMDtcbiAgICAgIHRoaXMuX21haW5XaW5kb3cubG9hZFVSTChgaHR0cDovL2xvY2FsaG9zdDoke3BvcnR9LyR7bG9jYWxlfS9ob21lYCk7XG5cbiAgICAgIC8vIGlmKHRoaXMuX2lzQ2kgIT09IHRydWUpe1xuICAgICAgLy8gICAgIHRoaXMuX21haW5XaW5kb3cud2ViQ29udGVudHMub3BlbkRldlRvb2xzKClcbiAgICAgIC8vICAgICB0aGlzLm9wZW5HUFVXaW5kb3coKVxuICAgICAgLy8gfVxuICAgIH1cbiAgfVxuXG4gIF9ncHVXaW5kb3c7XG5cbiAgb3BlbkdQVVdpbmRvdygpIHtcbiAgICB0aGlzLl9ncHVXaW5kb3cgPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgICB3aWR0aDogODAwLFxuICAgICAgaGVpZ2h0OiA2MDAsXG4gICAgfSk7XG5cbiAgICAvLyBMb2FkIGNocm9tZTovL2dwdVxuICAgIHRoaXMuX2dwdVdpbmRvdy5sb2FkVVJMKFwiY2hyb21lOi8vZ3B1XCIpO1xuXG4gICAgLy8gT3BlbiBEZXZUb29sc1xuICAgIHRoaXMuX2dwdVdpbmRvdy53ZWJDb250ZW50cy5vcGVuRGV2VG9vbHMoKTtcbiAgfVxuXG4gIHF1aXQoKSB7XG4gICAgRWxlY3Ryb25BcHAucXVpdCgpO1xuICB9XG5cbiAgcmVzdGFydCgpIHtcbiAgICB0aGlzLnF1aXQoKTtcbiAgICBFbGVjdHJvbkFwcC5yZWxhdW5jaCgpO1xuICB9XG59XG5cbm5ldyBBcHBsaWNhdGlvbigpO1xuIl0sIm5hbWVzIjpbInNlc3Npb24iLCJkaWFsb2ciLCJjcmVhdGVXaW5kb3ciLCJYYWwiLCJBdXRoVG9rZW5TdG9yZSIsImRlZmF1bHRTZXR0aW5ncyIsIkF1dGhlbnRpY2F0aW9uIiwiY29uc3RydWN0b3IiLCJhcHBsaWNhdGlvbiIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9hcHBsaWNhdGlvbiIsIl90b2tlblN0b3JlIiwibG9hZCIsIl94YWwiLCJjaGVja0F1dGhlbnRpY2F0aW9uIiwiX2lzQXV0aGVudGljYXRpbmciLCJfaXNBdXRoZW50aWNhdGVkIiwibG9nIiwiaGFzVmFsaWRBdXRoVG9rZW5zIiwic3RhcnRTaWxlbnRGbG93IiwiZ2V0VXNlclRva2VuIiwidW5kZWZpbmVkIiwicmVmcmVzaFRva2VucyIsInRoZW4iLCJnZXRTdHJlYW1pbmdUb2tlbiIsInN0cmVhbWluZ1Rva2VucyIsInhDbG91ZFRva2VuIiwiX2FwcExldmVsIiwiZ2V0V2ViVG9rZW4iLCJ3ZWJUb2tlbiIsIl9fZmlsZW5hbWUiLCJhdXRoZW50aWNhdGlvbkNvbXBsZXRlZCIsImNhdGNoIiwiZXJyb3IiLCJzaG93TWVzc2FnZUJveCIsIm1lc3NhZ2UiLCJfSlNPTiRzdHJpbmdpZnkiLCJ0eXBlIiwiZXJyIiwiY2xlYXIiLCJzdGFydEF1dGhmbG93IiwiZ2V0UmVkaXJlY3RVcmkiLCJyZWRpcmVjdCIsIm9wZW5BdXRoV2luZG93Iiwic2lzdUF1dGgiLCJNc2FPYXV0aFJlZGlyZWN0IiwiX2F1dGhDYWxsYmFjayIsInJlZGlyZWN0VXJpIiwiYXV0aGVudGljYXRlVXNlciIsInJlc3VsdCIsInNob3dFcnJvckJveCIsInN0YXJ0V2Vidmlld0hvb2tzIiwiZGVmYXVsdFNlc3Npb24iLCJ3ZWJSZXF1ZXN0Iiwib25IZWFkZXJzUmVjZWl2ZWQiLCJ1cmxzIiwiZGV0YWlscyIsImNhbGxiYWNrIiwiX2NvbnRleHQiLCJyZXNwb25zZUhlYWRlcnMiLCJMb2NhdGlvbiIsIl9pbmNsdWRlc0luc3RhbmNlUHJvcGVydHkiLCJjYWxsIiwiX2FwcCIsIlJlZGlyZWN0VXJpIiwiX2F1dGhXaW5kb3ciLCJjbG9zZSIsImNhbmNlbCIsInVybCIsImF1dGhXaW5kb3ciLCJ3aWR0aCIsImhlaWdodCIsInRpdGxlIiwibG9hZFVSTCIsIm9uIiwidG9rZW5TdG9yZSIsImNvbnNvbGUiLCJzaXN1VG9rZW4iLCJnZXRTaXN1VG9rZW4iLCJFcnJvciIsInhzdHNUb2tlbiIsImRvWHN0c0F1dGhvcml6YXRpb24iLCJfeGhvbWVUb2tlbiIsImdldFNlY29uZHNWYWxpZCIsImdldFN0cmVhbVRva2VuIiwiX3hjbG91ZFRva2VuIiwic2V0dGluZ3MiLCJfc3RvcmUiLCJnZXQiLCJmb3JjZV9yZWdpb25faXAiLCJ4SG9tZVRva2VuIiwiYXhpb3MiLCJIdHRwIiwiaG9zdCIsInBhdGgiLCJoZWFkZXJzIiwiX1Byb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiaG9zdEhlYWRlcnMiLCJfb2JqZWN0U3ByZWFkIiwicmVzIiwic3RhdHVzIiwiZGF0YSIsInN0YXR1c2NvZGUiLCJjb2RlIiwiYm9keSIsImUiLCJwb3N0IiwiQWNoaXZlbWVudE1hbmFnZXIiLCJnZXRIaXN0b3J5QWNoaXZlbWVudHMiLCJodHRwIiwicHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2UiLCJ1aHMiLCJEaXNwbGF5Q2xhaW1zIiwieHVpIiwieGlkIiwiQXV0aG9yaXphdGlvbiIsIlRva2VuIiwidGl0bGVzIiwiZ2V0QWNoaXZlbWVudERldGFpbCIsInRpdGxlSWQiLCJhY2hpZXZlbWVudHMiLCJzY3JlZW4iLCJCcm93c2VyV2luZG93IiwiU3RvcmUiLCJ3aW5kb3dOYW1lIiwib3B0aW9ucyIsImtleSIsIm5hbWUiLCJzdG9yZSIsImRlZmF1bHRTaXplIiwic3RhdGUiLCJyZXN0b3JlIiwiZ2V0Q3VycmVudFBvc2l0aW9uIiwid2luIiwicmVtb3ZlTWVudSIsInBvc2l0aW9uIiwiZ2V0UG9zaXRpb24iLCJzaXplIiwiZ2V0U2l6ZSIsIngiLCJ5Iiwid2luZG93V2l0aGluQm91bmRzIiwid2luZG93U3RhdGUiLCJib3VuZHMiLCJyZXNldFRvRGVmYXVsdHMiLCJnZXRQcmltYXJ5RGlzcGxheSIsIl9PYmplY3QkYXNzaWduIiwiZW5zdXJlVmlzaWJsZU9uU29tZURpc3BsYXkiLCJ2aXNpYmxlIiwiX3NvbWVJbnN0YW5jZVByb3BlcnR5IiwiZ2V0QWxsRGlzcGxheXMiLCJkaXNwbGF5Iiwic2F2ZVN0YXRlIiwiaXNNaW5pbWl6ZWQiLCJpc01heGltaXplZCIsInNldCIsImJyb3dzZXJPcHRpb25zIiwid2ViUHJlZmVyZW5jZXMiLCJub2RlSW50ZWdyYXRpb24iLCJjb250ZXh0SXNvbGF0aW9uIiwiZW5hYmxlQmxpbmtGZWF0dXJlcyIsInNhbmRib3giLCJwcmVsb2FkIiwiam9pbiIsIl9fZGlybmFtZSIsImF1dG9IaWRlTWVudUJhciIsImh0dHBzIiwibWV0aG9kIiwicmVzcG9uc2VEYXRhIiwicmVxIiwicmVxdWVzdCIsInJlc3BvbnNlIiwic3RhdHVzQ29kZSIsInJldHVybkRhdGEiLCJKU09OIiwicGFyc2UiLCJfc2V0VGltZW91dCIsImVuZCIsInBvc3REYXRhIiwibWVyZ2VkSGVhZGVycyIsInN1YnN0cmluZyIsIndyaXRlIiwieENsb3VkQXBpIiwieGJveFdvcmtlciIsInNldFVwZGF0ZU5vdGlmaWNhdGlvbiIsInVwZGF0ZXIiLCJTdHJlYW1NYW5hZ2VyIiwiZ2V0QXBpIiwiZ2V0RGVmYXVsdFJlZ2lvbiIsImJhc2VVcmkiLCJnc1Rva2VuIiwiZ2V0U2Vzc2lvbiIsInNlc3Npb25JZCIsIl9zZXNzaW9ucyIsInN0YXJ0U3RyZWFtIiwidGFyZ2V0IiwicGxheVJlc3VsdCIsInNlc3Npb25QYXRoIiwic3BsaXQiLCJzdHJlYW1TZXNzaW9uIiwiaWQiLCJwbGF5ZXJTdGF0ZSIsIm1vbml0b3JTZXNzaW9uIiwic3RvcFN0cmVhbSIsInNlbmRTZHAiLCJzZHAiLCJzZW5kQ2hhdFNkcCIsInNlbmRJY2UiLCJpY2UiLCJzZW5kS2VlcGFsaXZlIiwiZ2V0U3RyZWFtU3RhdGUiLCJfYXV0aGVudGljYXRpb24iLCJnZXRNc2FsVG9rZW4iLCJtc2FsVG9rZW4iLCJzZW5kTVNBTEF1dGgiLCJscHQiLCJhbGVydCIsIndhaXRpbmdUaW1lcyIsImdldFdhaXRpbmdUaW1lcyIsImVycm9yRGV0YWlscyIsImdldEFjdGl2ZVNlc3Npb25zIiwiSFRUUCIsIlRpdGxlTWFuYWdlciIsIl9odHRwIiwiZ2V0T2ZmaWNpYWxUaXRsZXMiLCJvZmZpY2lhbFRpdGxlcyIsInRpbWVvdXQiLCJQcm9kdWN0cyIsImdldEdhbWVQYXNzUHJvZHVjdHMiLCJwcm9kdWN0SWRRdWV1ZSIsInYyVGl0bGVNYXAiLCJfQXJyYXkkaXNBcnJheSIsIl9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSIsInByb2R1Y3RJZCIsInB1c2giLCJtZXJnZVByb2R1Y3RJZHMiLCJfU2V0IiwicHJvZHVjdHMiLCJtZXJnZWRUaXRsZXMiLCJfc29ydEluc3RhbmNlUHJvcGVydHkiLCJhIiwiYiIsIlByb2R1Y3RUaXRsZSIsImxvY2FsZUNvbXBhcmUiLCJnZXROZXdUaXRsZXMiLCJUaXRsZSIsInhib3hUaXRsZUlkIiwic3VwcG9ydGVkSW5wdXRUeXBlcyIsInNldENhdGFsb2dEZXRhaWxzIiwidGl0bGVJbmZvIiwiY2F0YWxvZ0RldGFpbHMiLCJ0b1N0cmluZyIsInJlc3RvcmVGcm9tQ2FjaGUiLCJjYWNoZWRPYmoiLCJUb2tlblN0b3JlIiwiYXJncyIsInRva2VucyIsImxvYWRKc29uIiwic2F2ZSIsInVzZXJUb2tlbiIsIl91c2VyVG9rZW4iLCJfc2lzdVRva2VuIiwiand0S2V5cyIsIl9qd3RLZXlzIiwiZGVsZXRlIiwiZWxlY3Ryb24iLCJjb21wYXJlIiwiZ2giLCJwa2ciLCJkZWZhdWx0T3B0aW9ucyIsImRlYnVnIiwic2lsZW50IiwicHJlcmVsZWFzZXMiLCJsb2dnZXIiLCJ3aXRoRGVmYXVsdHMiLCJhcHAiLCJpc1JlYWR5IiwiY2hlY2tGb3JVcGRhdGVzIiwicmVwb3NpdG9yeSIsInRva2VuIiwiaXNQYWNrYWdlZCIsImdoT2JqIiwidXNlciIsInJlcG8iLCJsYXRlc3RSZWxlYXNlIiwicmVsZWFzZXMiLCJhdXRob3JpemF0aW9uIiwicmVsZWFzZSIsInByZXJlbGVhc2UiLCJzaG93RGlhbG9nIiwidGFnX25hbWUiLCJnZXRWZXJzaW9uIiwic2hvd1VwZGF0ZURpYWxvZyIsImdldE5hbWUiLCJkZXRhaWwiLCJfdHJpbUluc3RhbmNlUHJvcGVydHkiLCJidXR0b25zIiwiZGVmYXVsdElkIiwiY2FuY2VsSWQiLCJfc2V0SW1tZWRpYXRlIiwic2hlbGwiLCJvcGVuRXh0ZXJuYWwiLCJodG1sX3VybCIsImludGVydmFsRnJpZW5kcyIsInVwZGF0ZUZyaWVuZHMiLCJmcmllbmRzIiwib25saW5lRnJpZW5kcyIsImZyaWVuZCIsInByZXNlbmNlU3RhdGUiLCJfb25saW5lRnJpZW5kcyIsIl93ZWJBcGkiLCJnZXRQcm92aWRlciIsImdldEZyaWVuZHMiLCJwZW9wbGUiLCJfZnJpZW5kcyIsInh1aWQiLCJBZGRyZXNzNiIsIl9ob3N0IiwiX3Rva2VuIiwiX3R5cGUiLCJnZXRUaXRsZXMiLCJnZXRSZWNlbnRUaXRsZXMiLCJkZXZpY2VJbmZvIiwiYXBwSW5mbyIsImVudiIsImNsaWVudEFwcElkIiwiY2xpZW50QXBwVHlwZSIsImNsaWVudEFwcFZlcnNpb24iLCJjbGllbnRTZGtWZXJzaW9uIiwiaHR0cEVudmlyb25tZW50Iiwic2RrSW5zdGFsbElkIiwiZGV2IiwiaHciLCJtYWtlIiwibW9kZWwiLCJzZGt0eXBlIiwib3MiLCJyZXNvbHV0aW9uIiwidmVyIiwicGxhdGZvcm0iLCJkaXNwbGF5SW5mbyIsImRpbWVuc2lvbnMiLCJ3aWR0aEluUGl4ZWxzIiwiaGVpZ2h0SW5QaXhlbHMiLCJwaXhlbERlbnNpdHkiLCJkcGlYIiwiZHBpWSIsInN5c3RlbVVwZGF0ZUdyb3VwIiwiY2xpZW50U2Vzc2lvbklkIiwibmFub1ZlcnNpb24iLCJlbmFibGVUZXh0VG9TcGVlY2giLCJoaWdoQ29udHJhc3QiLCJsb2NhbGUiLCJ1c2VJY2VDb25uZWN0aW9uIiwidGltZXpvbmVPZmZzZXRNaW51dGVzIiwic2RrVHlwZSIsIm9zTmFtZSIsInNlcnZlcklkIiwiZmFsbGJhY2tSZWdpb25OYW1lcyIsIm1lc3NhZ2VUeXBlIiwiY29uZmlndXJhdGlvbiIsImNoYXRDb25maWd1cmF0aW9uIiwiYnl0ZXNQZXJTYW1wbGUiLCJleHBlY3RlZENsaXBEdXJhdGlvbk1zIiwiZm9ybWF0IiwiY29kZWMiLCJjb250YWluZXIiLCJudW1DaGFubmVscyIsInNhbXBsZUZyZXF1ZW5jeUh6IiwiY2hhdCIsIm1pblZlcnNpb24iLCJtYXhWZXJzaW9uIiwiY29udHJvbCIsImlucHV0Iiwic2RwUmVzdWx0IiwiZXhjaGFuZ2VTZHAiLCJleGNoYW5nZVJlc3BvbnNlIiwiaXNNZWRpYVN0cmVhbXNDaGF0UmVuZWdvdGlhdGlvbiIsImNoZWNrSWNlIiwiaWNlUmVzdWx0IiwiX2ljZVJlc3VsdCIsImV4Y2hhbmdlSWNlIiwiY29tcHV0ZWRDYW5kaWRhdGVzIiwiY2FuZGlkYXRlIiwiY2FuZGlkYXRlQWRkcmVzcyIsImxlbmd0aCIsInN1YnN0ciIsImFkZHJlc3MiLCJ0ZXJlZG8iLCJpbnNwZWN0VGVyZWRvIiwiY2xpZW50NCIsInNkcE1MaW5lSW5kZXgiLCJzZHBNaWQiLCJ1ZHBQb3J0IiwicGF0dGVybiIsIlJlZ0V4cCIsImxzdCIsIml0ZW0iLCJncm91cHMiLCJleGVjIiwiaXB2NiIsImZpcnN0SXAiLCJpcCIsInNlY29uZElwIiwibmV3Q2FuZGlkYXRlcyIsImZvdW5kYXRpb24iLCJuZXdDYW5kaWRhdGUiLCJwcmlvcml0eSIsInBvcnQiLCJ0aGVfcmVzdCIsImNhbmRpZGF0ZXMiLCJJcGNDb25zb2xlcyIsIklwY1N0cmVhbWluZyIsIklwY3hDbG91ZCIsIklwY0FwcCIsIklwY1NldHRpbmdzIiwiaXBjTWFpbiIsIklwYyIsIl9jaGFubmVscyIsInN0cmVhbWluZyIsImNvbnNvbGVzIiwieENsb3VkIiwiY2hhbm5lbCIsImV2ZW50Iiwib25FdmVudCIsInN0YXJ0VXAiLCJvblVzZXJMb2FkZWQiLCJJcGNCYXNlIiwibG9hZENhY2hlZFVzZXIiLCJnZXRVc2VyU3RhdGUiLCJnYW1lcnRhZyIsImdhbWVycGljIiwiZ2FtZXJzY29yZSIsInNpZ25lZEluIiwibGV2ZWwiLCJnZXRBdXRoU3RhdGUiLCJpc0F1dGhlbnRpY2F0aW5nIiwiaXNBdXRoZW50aWNhdGVkIiwiZ2V0QXBwTGV2ZWwiLCJsb2dpbiIsInF1aXQiLCJyZXN0YXJ0IiwiY2xlYXJEYXRhIiwiY2xlYXJTdG9yYWdlRGF0YSIsImdldE9ubGluZUZyaWVuZHMiLCJfeGJveFdvcmtlciIsIm9uVWlTaG93biIsImlzRnVsbHNjcmVlbiIsImlzRnVsbFNjcmVlbiIsIl9tYWluV2luZG93IiwidG9nZ2xlRnVsbHNjcmVlbiIsInNldEZ1bGxTY3JlZW4iLCJlbnRlckZ1bGxzY3JlZW4iLCJleGl0RnVsbHNjcmVlbiIsImFjdGlvbiIsIl9PYmplY3Qka2V5cyIsInNlbmQiLCJ3ZWJDb250ZW50cyIsIl9jb25zb2xlc0xhc3RVcGRhdGUiLCJfRGF0ZSRub3ciLCJnZXRDb25zb2xlc0xpc3QiLCJfY29uc29sZXMiLCJzZXRTZXR0aW5ncyIsIm5ld1NldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJyZXNldFNldHRpbmdzIiwiX3N0cmVhbU1hbmFnZXIiLCJfaXBjIiwiX3JlY2VudFRpdGxlc0xhc3RVcGRhdGUiLCJnZXRQbGF5ZXJTdGF0ZSIsImFjdGl2ZVNlc3Npb25zIiwiX3RpdGxlTWFuYWdlciIsIl9hY2hpdmVtZW50TWFuYWdlciIsIl94Q2xvdWRBcGkiLCJnZXRYaG9tZVRva2VuIiwic2V0WGhvbWVUb2tlbkRlZmF1bHQiLCJzZXREZWZhdWx0UmVnaW9uIiwiZ2V0WGNsb3VkVG9rZW4iLCJzZXRYY2xvdWRUb2tlbkRlZmF1bHQiLCJnZXRSZXF1ZXN0IiwiaG9zdG5hbWUiLCJIdHRwUmVzcG9uc2UiLCJwb3N0UmVxdWVzdCIsImhlYWRlciIsImNhbGN1bGF0ZVNlY29uZHNMZWZ0IiwiZGF0ZSIsImV4cGlyZXNPbiIsImN1cnJlbnREYXRlIiwiRGF0ZSIsIk1hdGgiLCJmbG9vciIsImdldFRpbWUiLCJpc1ZhbGlkIiwiZ2V0VXNlckhhc2giLCJVc2VyVG9rZW4iLCJnZXRHYW1lcnRhZyIsIkF1dGhvcml6YXRpb25Ub2tlbiIsImd0ZyIsIkRldmljZVRva2VuIiwiTm90QWZ0ZXIiLCJNc2FsVG9rZW4iLCJTaXN1VG9rZW4iLCJzZWNvbmRzTGVmdFRpdGxlIiwiVGl0bGVUb2tlbiIsInNlY29uZHNMZWZ0VXNlciIsInNlY29uZHNMZWZ0QXV0aG9yaXphdGlvbiIsIm1pbiIsIlN0cmVhbWluZ1Rva2VuIiwidG9rZW5EYXRhIiwiX29iamVjdENyZWF0ZVRpbWUiLCJkdXJhdGlvbkluU2Vjb25kcyIsInNlY29uZHNMZWZ0IiwiZ2V0TWFya2V0IiwibWFya2V0IiwiZ2V0UmVnaW9ucyIsIm9mZmVyaW5nU2V0dGluZ3MiLCJyZWdpb25zIiwiX2ZpbHRlckluc3RhbmNlUHJvcGVydHkiLCJyZWdpb24iLCJpc0RlZmF1bHQiLCJfY29udGV4dDIiLCJnZXRFbnZpcm9ubWVudHMiLCJjbGllbnRDbG91ZFNldHRpbmdzIiwiRW52aXJvbm1lbnRzIiwiZXhwaXJlc19vbiIsIlhzdHNUb2tlbiIsImZzIiwiZmlsZXBhdGgiLCJfZmlsZXBhdGgiLCJleGlzdHNTeW5jIiwiZmlsZUNvbnRlbnRzIiwicmVhZEZpbGVTeW5jIiwianNvbiIsImpzb25EYXRhIiwic2V0VXNlclRva2VuIiwiZXhwaXJlRGF0ZSIsInNldFNlY29uZHMiLCJnZXRTZWNvbmRzIiwiZXhwaXJlc19pbiIsInRvSVNPU3RyaW5nIiwic2V0U2lzdVRva2VuIiwic2V0Snd0S2V5cyIsIndyaXRlRmlsZVN5bmMiLCJyZW1vdmVBbGwiLCJjcnlwdG8iLCJzdWJ0bGUiLCJLZXlPYmplY3QiLCJleHBvcnRKV0siLCJVVUlEIiwicmVxdWlyZSIsIm5leHRVVUlEIiwidjMiLCJuYW1lc3BhY2UiLCJBcHBJZCIsIlRpdGxlSWQiLCJzZXRLZXlzIiwiand0Iiwia2V5cyIsIm9yZ0p3dEtleSIsImltcG9ydEtleSIsIm5hbWVkQ3VydmUiLCJqd3RLZXkiLCJwcml2YXRlS2V5IiwiZnJvbSIsInJhdyIsImdldEtleXMiLCJfa2V5c0luc3RhbmNlUHJvcGVydHkiLCJnZW5lcmF0ZUtleVBhaXJTeW5jIiwicHVibGljS2V5IiwiandrIiwiandrS2V5IiwiYWxnIiwidXNlIiwiandrS2V5cyIsImV4cG9ydCIsImdldENvZGVDaGFsbGFuZ2UiLCJjb2RlQ2hhbGxhbmdlIiwiY29kZV92ZXJpZmllciIsIkJ1ZmZlciIsInBzZXVkb1JhbmRvbUJ5dGVzIiwiY29kZV9jaGFsbGVuZ2UiLCJjcmVhdGVIYXNoIiwidXBkYXRlIiwiZGlnZXN0IiwidmFsdWUiLCJ2ZXJpZmllciIsImdldFJhbmRvbVN0YXRlIiwiYnl0ZXMiLCJyYW5kb21CeXRlcyIsImdldERldmljZVRva2VuSGFjayIsImdldERldmljZVRva2VuIiwiZGV2aWNlVG9rZW4iLCJwYXlsb2FkIiwiUHJvcGVydGllcyIsIkF1dGhNZXRob2QiLCJJZCIsIkRldmljZVR5cGUiLCJTZXJpYWxOdW1iZXIiLCJWZXJzaW9uIiwiUHJvb2ZLZXkiLCJSZWx5aW5nUGFydHkiLCJUb2tlblR5cGUiLCJzaWduYXR1cmUiLCJzaWduIiwiU2lnbmF0dXJlIiwiSHR0cENsaWVudCIsImRvU2lzdUF1dGhlbnRpY2F0aW9uIiwiU2FuZGJveCIsIk9mZmVycyIsIlF1ZXJ5IiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwicmVzQm9keSIsIlNlc3Npb25JZCIsImRvU2lzdUF1dGhvcml6YXRpb24iLCJBY2Nlc3NUb2tlbiIsImFjY2Vzc190b2tlbiIsIlNpdGVOYW1lIiwiVXNlTW9kZXJuR2FtZXJ0YWciLCJleGNoYW5nZUNvZGVGb3JUb2tlbiIsImNvZGVWZXJpZmllciIsIl9VUkxTZWFyY2hQYXJhbXMiLCJyZWZyZXNoVXNlclRva2VuIiwicmVmcmVzaF90b2tlbiIsInJlbHlpbmdQYXJ0eSIsIlNhbmRib3hJZCIsIlVzZXJUb2tlbnMiLCJleGNoYW5nZVJlZnJlc2hUb2tlbkZvclhjbG91ZFRyYW5zZmVyVG9rZW4iLCJjbGllbnRfaWQiLCJncmFudF90eXBlIiwic2NvcGUiLCJyZWRpcmVjdF91cmkiLCJvZmZlcmluZyIsImZvcmNlUmVnaW9uSXAiLCJhdXRob3JpemF0aW9uVG9rZW4iLCJ3aW5kb3dzVGltZXN0YW1wIiwiQmlnSW50IiwicGF0aEFuZFF1ZXJ5IiwiX1VSTCIsInBhdGhuYW1lIiwiYWxsb2NTaXplIiwiYnVmIiwiYWxsb2MiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZVVJbnQ4Iiwid3JpdGVCaWdVSW50NjRCRSIsIm9mZnNldCIsImNvcHkiLCJkc2FFbmNvZGluZyIsImN1clVzZXJUb2tlbiIsIlRva2VuUmVmcmVzaEVycm9yIiwiX3dlYlRva2VuIiwicmVkaXJlY3RPYmplY3QiLCJzZWFyY2hQYXJhbXMiLCJlcnJvcl9kZXNjcmlwdGlvbiIsImF1dGhlbnRpY2F0ZVVzZXJVc2luZ0NvZGUiLCJFbGVjdHJvbkFwcCIsInNlcnZlIiwiRGVidWciLCJ4Ym94V2ViQXBpIiwiQXBwbGljYXRpb24iLCJmdWxsc2NyZWVuIiwiYXV0b1N0cmVhbSIsInByb2Nlc3MiLCJOT0RFX0VOViIsIkNJIiwidmVyc2lvbiIsIl9sb2ciLCJjb21tYW5kTGluZSIsImFwcGVuZFN3aXRjaCIsInJlYWRTdGFydHVwRmxhZ3MiLCJsb2FkQXBwbGljYXRpb25EZWZhdWx0cyIsImV4dGVuZCIsImdldFN0YXJ0dXBGbGFncyIsIl9zdGFydHVwRmxhZ3MiLCJyZXNldEF1dG9zdHJlYW0iLCJhcmd2IiwiYXJnIiwiX2lzUHJvZHVjdGlvbiIsIl9pc0NpIiwiZGlyZWN0b3J5IiwicmFuZG9tIiwic2V0UGF0aCIsImdldFBhdGgiLCJ3aGVuUmVhZHkiLCJvcGVuTWFpbldpbmRvdyIsIl9pc01hYyIsInNob3ciLCJfaXNRdWl0dGluZyIsInByb2ZpbGVVc2VycyIsInNldHRpbmciLCJ3aW5kb3dPcHRpb25zIiwiYmFja2dyb3VuZENvbG9yIiwicHJldmVudERlZmF1bHQiLCJoaWRlIiwib3BlbkdQVVdpbmRvdyIsIl9ncHVXaW5kb3ciLCJvcGVuRGV2VG9vbHMiLCJyZWxhdW5jaCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/app/preload.js b/app/preload.js index 12afd33..82bbb1d 100644 --- a/app/preload.js +++ b/app/preload.js @@ -4647,7 +4647,7 @@ module.exports = parent; /***/ ((module) => { "use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"private":true,"name":"xstreaming","description":"xstreaming","version":"1.0.2","author":"Geocld ","main":"app/background.js","scripts":{"dev":"DEBUG=xstreaming:authenticationV2 nextron","build":"nextron build","lint":"eslint . --ext .ts && eslint renderer/ --ext .tsx","lint:fix":"eslint . --ext .ts --fix && eslint renderer/ --ext .tsx --fix","postinstall":"electron-builder install-app-deps","publish":"electron-builder -p onTag","flatpak-build":"nextron build --no-pack && electron-builder --dir"},"dependencies":{"@nextui-org/react":"^2.4.6","axios":"^1.7.7","compare-versions":"^6.1.0","debounce":"^2.1.1","debug":"^4.3.4","electron-serve":"^1.3.0","electron-store":"^8.0.1","express":"^4.18.3","express-http-proxy":"^2.0.0","express-ws":"^5.0.2","framer-motion":"^11.5.4","github-url-to-object":"^4.0.6","i18next":"23.14.0","ip-address":"^9.0.5","jose":"^5.1.0","moment":"^2.30.1","next-i18next":"^15.3.1","next-themes":"^0.3.0","react-i18next":"^15.0.1","react-query":"^3.39.3","semver":"^7.6.3","uplot":"^1.6.30","uuid-1345":"^1.0.2","xbox-webapi":"^1.4.1","xstreaming-player":"^0.2.1","xvfb-maybe":"^0.2.1"},"devDependencies":{"@babel/core":"^7.24.4","@fortawesome/fontawesome-free":"^6.5.1","@next/eslint-plugin-next":"^14.2.2","@types/node":"^20.12.7","@types/react":"^18.2.47","@typescript-eslint/eslint-plugin":"^8.6.0","@typescript-eslint/parser":"^8.6.0","autoprefixer":"^10.4.20","babel-loader":"^9.1.3","electron":"28","electron-builder":"^24.13.3","eslint":"^8.57.0","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-react-refresh":"^0.4.12","next":"^13.5.6","nextron":"^8.13.0","node-loader":"^2.0.0","postcss":"^8.4.45","react":"^18.1.0","react-dom":"^18.1.0","sass":"^1.78.0","tailwindcss":"^3.4.10","typescript":"^5.3.3"},"packageManager":"yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"}'); +module.exports = /*#__PURE__*/JSON.parse('{"private":true,"name":"xstreaming","description":"xstreaming","version":"1.0.3","author":"Geocld ","main":"app/background.js","scripts":{"dev":"DEBUG=xstreaming:authenticationV2 nextron","build":"nextron build","lint":"eslint . --ext .ts && eslint renderer/ --ext .tsx","lint:fix":"eslint . --ext .ts --fix && eslint renderer/ --ext .tsx --fix","postinstall":"electron-builder install-app-deps","publish":"electron-builder -p onTag","flatpak-build":"nextron build --no-pack && electron-builder --dir"},"dependencies":{"@nextui-org/react":"^2.4.6","axios":"^1.7.7","compare-versions":"^6.1.0","debounce":"^2.1.1","debug":"^4.3.4","electron-serve":"^1.3.0","electron-store":"^8.0.1","express":"^4.18.3","express-http-proxy":"^2.0.0","express-ws":"^5.0.2","framer-motion":"^11.5.4","github-url-to-object":"^4.0.6","i18next":"23.14.0","ip-address":"^9.0.5","jose":"^5.1.0","moment":"^2.30.1","next-i18next":"^15.3.1","next-themes":"^0.3.0","react-i18next":"^15.0.1","react-query":"^3.39.3","semver":"^7.6.3","uplot":"^1.6.30","uuid-1345":"^1.0.2","xbox-webapi":"^1.4.1","xstreaming-player":"^0.2.1","xvfb-maybe":"^0.2.1"},"devDependencies":{"@babel/core":"^7.24.4","@fortawesome/fontawesome-free":"^6.5.1","@next/eslint-plugin-next":"^14.2.2","@types/node":"^20.12.7","@types/react":"^18.2.47","@typescript-eslint/eslint-plugin":"^8.6.0","@typescript-eslint/parser":"^8.6.0","autoprefixer":"^10.4.20","babel-loader":"^9.1.3","electron":"28","electron-builder":"^24.13.3","eslint":"^8.57.0","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-react-refresh":"^0.4.12","next":"^13.5.6","nextron":"^8.13.0","node-loader":"^2.0.0","postcss":"^8.4.45","react":"^18.1.0","react-dom":"^18.1.0","sass":"^1.78.0","tailwindcss":"^3.4.10","typescript":"^5.3.3"},"packageManager":"yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"}'); /***/ }) diff --git a/main/helpers/titlemanager.ts b/main/helpers/titlemanager.ts index 1964770..d8eb8bf 100644 --- a/main/helpers/titlemanager.ts +++ b/main/helpers/titlemanager.ts @@ -72,7 +72,6 @@ export default class TitleManager { .then(res => { if (res.status === 200) { officialTitles = res.data.Products; - console.log('officialTitles:', officialTitles); } resolve(officialTitles); }) @@ -85,40 +84,55 @@ export default class TitleManager { getGamePassProducts(titles) { return new Promise((resolve, reject) => { const productIdQueue = []; + const v2TitleMap = {}; if (!Array.isArray(titles)) { resolve([]); } titles.forEach(title => { if (title.details && title.details.productId) { productIdQueue.push(title.details.productId); + v2TitleMap[title.details.productId] = title; } }); + // Get officialTitles this.getOfficialTitles().then((officialTitles: any) => { const mergeProductIds = [ ...new Set([...productIdQueue, ...officialTitles]), ]; - this._http.post('catalog.gamepass.com', '/v3/products?market=US&language=en-US&hydration=RemoteHighSapphire0', { // RemoteLowJade0 + this._http.post('catalog.gamepass.com', '/v3/products?market=US&language=en-US&hydration=RemoteLowJade0', { // RemoteLowJade0 'Products': mergeProductIds, }, { 'ms-cv': 0, 'calling-app-name': 'Xbox Cloud Gaming Web', 'calling-app-version': '24.17.63', - }).then((result:any) => { - const products = result.Products; - const mergedTitles = []; - for (const key in products) { - mergedTitles.push({ - productId: key, - ...products[key], - }); + }).then((result: any) => { + if (result && result.Products) { + const products = result.Products; + const mergedTitles = []; + for (const key in products) { + if (v2TitleMap[key]) { + mergedTitles.push({ + productId: key, + ...products[key], + ...v2TitleMap[key], + }); + } else { + mergedTitles.push({ + productId: key, + ...products[key], + }); + } + } + mergedTitles.sort((a, b) => + a.ProductTitle.localeCompare(b.ProductTitle), + ); + resolve(mergedTitles); + } else { + resolve([]); } - mergedTitles.sort((a, b) => - a.ProductTitle.localeCompare(b.ProductTitle), - ); - resolve(mergedTitles); }).catch(e => { console.log('getGamePassProducts error:', e); reject(e); diff --git a/main/xal/xal.ts b/main/xal/xal.ts index 082752d..a67c4da 100644 --- a/main/xal/xal.ts +++ b/main/xal/xal.ts @@ -129,6 +129,24 @@ export default class Xal { return crypto.randomBytes(bytes).toString('base64url') } + getDeviceTokenHack() { + console.log('getDeviceTokenHack...') + return new Promise((resolve, reject) => { + this.getDeviceToken().then(deviceToken => { + console.log('getDeviceToken success:', deviceToken) + resolve(deviceToken) + }) + .catch(error => { + if (error.statuscode == 400) { + console.log('device token get error, retry...') + return this.getDeviceTokenHack().then(resolve).catch(reject) + } else { + reject(error) + } + }) + }) + } + getDeviceToken() { console.log('getDeviceToken...') return new Promise((resolve, reject) => { @@ -444,7 +462,7 @@ export default class Xal { try { const userToken = await this.refreshUserToken(curUserToken) - const deviceToken = await this.getDeviceToken() + const deviceToken = await this.getDeviceTokenHack() const sisuToken = await this.doSisuAuthorization(userToken, deviceToken) tokenStore.setUserToken(userToken) @@ -508,7 +526,7 @@ export default class Xal { } async getRedirectUri(){ - const deviceToken = await this.getDeviceToken() + const deviceToken = await this.getDeviceTokenHack() const codeChallange = await this.getCodeChallange() const state = this.getRandomState() const sisuAuth = await this.doSisuAuthentication(deviceToken, codeChallange, state) diff --git a/package.json b/package.json index 86d1974..44651b6 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "private": true, "name": "xstreaming", "description": "xstreaming", - "version": "1.0.2", + "version": "1.0.3", "author": "Geocld ", "main": "app/background.js", "scripts": { diff --git a/renderer/components/ActionBar.tsx b/renderer/components/ActionBar.tsx index aeecf6b..fe8aac4 100644 --- a/renderer/components/ActionBar.tsx +++ b/renderer/components/ActionBar.tsx @@ -113,7 +113,7 @@ function ActionBar(props) { } { - props.connectState === CONNECTED && ( + (props.connectState === CONNECTED && props.type !== 'cloud') && ( {t("Long press Nexus")} diff --git a/renderer/components/TitleModal.tsx b/renderer/components/TitleModal.tsx index 385a261..8d7e71b 100644 --- a/renderer/components/TitleModal.tsx +++ b/renderer/components/TitleModal.tsx @@ -25,8 +25,9 @@ function TitleModal(props) { }; const handleStartGame = () => { - console.log("titleItem:", titleItem); + // console.log("titleItem:", titleItem); const titleId = titleItem.titleId || titleItem.XCloudTitleId; + console.log("titleId:", titleId) router.push({ pathname: `/${locale}/stream`, query: { serverid: XCLOUD_PREFIX + titleId } diff --git a/renderer/pages/[locale]/stream.tsx b/renderer/pages/[locale]/stream.tsx index 6a8ee53..e355642 100644 --- a/renderer/pages/[locale]/stream.tsx +++ b/renderer/pages/[locale]/stream.tsx @@ -28,6 +28,7 @@ function Stream() { const [showFailed, setShowFailed] = useState(false); const [showWarning, setShowWarning] = useState(false); const [showDisplay, setShowDisplay] = useState(false); + const [streamingType, setStreamingType] = useState(''); const connectStateRef = useRef(""); const keepaliveInterval = useRef(null); const streamStateInterval = useRef(null); @@ -41,6 +42,8 @@ function Stream() { serverId = serverId.split("_")[1]; } + setStreamingType(streamType) + if (xPlayer !== undefined) { xPlayer.bind(); @@ -418,6 +421,7 @@ function Stream() { <> { setShowPerformance(!showPerformance); diff --git a/renderer/pages/[locale]/xcloud.tsx b/renderer/pages/[locale]/xcloud.tsx index 882c31a..c55896a 100644 --- a/renderer/pages/[locale]/xcloud.tsx +++ b/renderer/pages/[locale]/xcloud.tsx @@ -75,6 +75,7 @@ function Xcloud() { } } }); + console.log("_recentTitles:", _recentTitles); setRecentNewTitles(_recentTitles); setLoading(false); });