From 583a423f808aaaf9e391ba18871ce259f9be8565 Mon Sep 17 00:00:00 2001 From: hilezir Date: Fri, 15 May 2020 11:08:08 +0800 Subject: [PATCH] chore: unused comments --- src/etoro.tsx | 7 ------- src_dist/etoro.bundle.js | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/etoro.tsx b/src/etoro.tsx index 5a5a678..db82630 100644 --- a/src/etoro.tsx +++ b/src/etoro.tsx @@ -32,13 +32,6 @@ const readyIntervalId = globalThis.setInterval(async () => { /** * 載入跳出框框增強介面的時機點 - * - * .trade-button-title // e.g. https://www.etoro.com/watchlists 的「買」「賣」按鈕 - * [automation-id="buy-sell-button-rate-value"] // e.g. https://www.etoro.com/watchlists 的買或賣的價格「7088.30」按鈕 - * [automation-id="trade-button"] // e.g. https://www.etoro.com/markets/spx500 的「交易」大藍色按鈕 - * - * (目前無法運作,原因暫不明) - * .etoro-trade-button // e.g. https://www.etoro.com/portfolio/btc 的「買 7088.30」「賣 7088.30」按鈕 */ emitter.on(Events.ready, () => { ExecutionDialog.log(`安排好按鈕`) diff --git a/src_dist/etoro.bundle.js b/src_dist/etoro.bundle.js index c3389de..e54ad45 100644 --- a/src_dist/etoro.bundle.js +++ b/src_dist/etoro.bundle.js @@ -4630,7 +4630,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _debugAPI__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./debugAPI */ \"./src/debugAPI.ts\");\n/* harmony import */ var _GM__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./GM */ \"./src/GM.ts\");\n/* harmony import */ var query_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! query-string */ \"./node_modules/query-string/index.js\");\n/* harmony import */ var query_string__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(query_string__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./emitter */ \"./src/emitter.ts\");\n/* harmony import */ var _exchange__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./exchange */ \"./src/exchange.ts\");\n/* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./storage */ \"./src/storage.ts\");\n/* harmony import */ var _toCurrency__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./toCurrency */ \"./src/toCurrency.ts\");\n/* harmony import */ var cogo_toast__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! cogo-toast */ \"./node_modules/cogo-toast/dist/index.js\");\n/* harmony import */ var cogo_toast__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(cogo_toast__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/ExecutionDialog */ \"./src/components/ExecutionDialog/index.tsx\");\n/* harmony import */ var _blueprintjs_core_lib_css_blueprint_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @blueprintjs/core/lib/css/blueprint.css */ \"./node_modules/@blueprintjs/core/lib/css/blueprint.css\");\n/* harmony import */ var _blueprintjs_core_lib_css_blueprint_css__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_blueprintjs_core_lib_css_blueprint_css__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var _components_Sidebar_Sidebar__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/components/Sidebar/Sidebar */ \"./src/components/Sidebar/Sidebar.tsx\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/lib/index.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _store_store__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @/store/_store */ \"./src/store/_store.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nglobalThis.localStorage.setItem('debug', '*');\n/** 介面更新頻率 */\n\nconst exchangeInterval = 5000;\n/**\n * 載入腳本的時機點\n */\n\nconst readyIntervalId = globalThis.setInterval(async () => {\n if ($('.w-menu-footer .e-btn-big-2').length > 0) {\n globalThis.clearInterval(readyIntervalId);\n _emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].emit(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].ready);\n }\n}, 100);\n/**\n * 載入跳出框框增強介面的時機點\n *\n * .trade-button-title // e.g. https://www.etoro.com/watchlists 的「買」「賣」按鈕\n * [automation-id=\"buy-sell-button-rate-value\"] // e.g. https://www.etoro.com/watchlists 的買或賣的價格「7088.30」按鈕\n * [automation-id=\"trade-button\"] // e.g. https://www.etoro.com/markets/spx500 的「交易」大藍色按鈕\n *\n * (目前無法運作,原因暫不明)\n * .etoro-trade-button // e.g. https://www.etoro.com/portfolio/btc 的「買 7088.30」「賣 7088.30」按鈕\n */\n\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].ready, () => {\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].log(`安排好按鈕`);\n let watchId;\n\n const construct = () => {\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].log('偵測中...', _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\n\n if (_components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].isParentConstructed && !_components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].isConstructed) {\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].construct();\n }\n\n if (_components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].isConstructed) {\n globalThis.clearInterval(watchId);\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].log(`結束偵測`);\n }\n };\n\n $('body').delegate(`.uidialog-content`, 'mouseover', () => {\n if (!_storage__WEBPACK_IMPORTED_MODULE_7__[\"storage\"].findConfig().executionMacroEnabled) {\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].log(`功能未開啟`);\n return;\n }\n\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].log(`開始偵測`);\n globalThis.clearInterval(watchId);\n construct();\n watchId = globalThis.setInterval(construct, 250);\n });\n $('body').delegate(`.uidialog-content`, 'mouseout', () => {\n globalThis.setTimeout(() => {\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].log(`結束偵測`);\n globalThis.clearInterval(watchId);\n }, 300);\n });\n});\n/**\n * 歡迎訊息\n */\n\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].ready, () => {\n cogo_toast__WEBPACK_IMPORTED_MODULE_9___default.a.success(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", null, \"\\uD83D\\uDE4F \\u611F\\u8B1D\\u60A8\\u4F7F\\u7528 better etoro UI for Taiwan \\u66F4\\u591A\\u8CC7\\u8A0A\\u8ACB\\u6070\\u8A62\\uFF1A\"), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"a\", {\n style: {\n color: 'blue'\n },\n href: 'https://www.notion.so/hilezi/4fe69cd704434ff1b82f0cd48dd219c3',\n target: '_blank'\n }, \"better-etoro-ui \\u5DE5\\u5177\\u5B98\\u65B9\\u7DB2\\u7AD9\")), {\n position: 'top-right',\n hideAfter: 5\n });\n});\n/**\n * 關注的使用者們的餘額\n */\n\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].ready, async () => {\n const log = _debugAPI__WEBPACK_IMPORTED_MODULE_2__[\"debugAPI\"].log.extend('關注的使用者們的餘額');\n _GM__WEBPACK_IMPORTED_MODULE_3__[\"GM\"].addStyle(`\n .user-meta {\n margin: 0 8px;\n font-size: 10pt;\n background: #ffcf76;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n width: 96px;\n }\n `);\n\n const updater = () => {\n log('安排好按鈕');\n $('et-user-row').each((index, element) => {\n var _$exec, _$exec$groups;\n\n const userFinder = $(element);\n const hasAppended = !!userFinder.find('.user-meta').length;\n\n if (hasAppended) {\n return;\n }\n /**\n * tests https://regexr.com/52ft5\n *\n * [PASS] https://etoro-cdn.etorostatic.com/avatars/150X150/1724726/3.jpg\n * [PASS] https://etoro-cdn.etorostatic.com/avatars/150X150/1724726.jpg\n * [PASS] https://etoro-cdn.etorostatic.com/avatars/150X150/6441059/21.jpg\n */\n\n\n const cid = (_$exec = /avatars\\/[\\d]+[xX][\\d]+\\/(?[\\d]+)\\/?/.exec($(element).find('[automation-id=\"trade-item-avatar\"]').attr('src') || '')) === null || _$exec === void 0 ? void 0 : (_$exec$groups = _$exec.groups) === null || _$exec$groups === void 0 ? void 0 : _$exec$groups.cid;\n\n if (cid && !hasAppended) {\n userFinder.prepend($(``));\n const button = userFinder.find('.user-meta');\n button.on('click', () => {\n const button = userFinder.find('.user-meta');\n button.html('讀取中');\n _GM__WEBPACK_IMPORTED_MODULE_3__[\"GM\"].ajax({\n method: 'GET',\n url: Object(query_string__WEBPACK_IMPORTED_MODULE_4__[\"stringifyUrl\"])({\n url: 'https://www.etoro.com/sapi/trade-data-real/live/public/portfolios',\n query: {\n cid\n }\n })\n }).then(event => {\n var _$exec2, _$exec2$groups, _model$CreditByRealiz;\n\n const model = JSON.parse(((_$exec2 = /var model = (?{[\\s\\S]+}),/i.exec(event.responseText)) === null || _$exec2 === void 0 ? void 0 : (_$exec2$groups = _$exec2.groups) === null || _$exec2$groups === void 0 ? void 0 : _$exec2$groups.model) || `{}`);\n button.html(`餘額 ${(_model$CreditByRealiz = model.CreditByRealizedEquity) === null || _model$CreditByRealiz === void 0 ? void 0 : _model$CreditByRealiz.toFixed(2)}%`);\n }).finally(() => {\n log(`獲取 cid=${cid} 餘額`);\n });\n });\n }\n });\n };\n\n globalThis.setInterval(updater, 2500);\n});\n/**\n * 提供左側欄入金按鈕,匯率換算結果顯示\n */\n\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].settingChange, async () => {\n const log = _debugAPI__WEBPACK_IMPORTED_MODULE_2__[\"debugAPI\"].log.extend(`提供入金匯率`);\n const target = $('.w-menu-footer .e-btn-big-2');\n\n if (target.length) {\n target.html(`入金(${_exchange__WEBPACK_IMPORTED_MODULE_6__[\"exchange\"][_storage__WEBPACK_IMPORTED_MODULE_7__[\"storage\"].findConfig().selectedExchange].sell} 銀行賣出)`);\n log('成功');\n } else {\n log('失敗,找不到元素');\n }\n});\n/**\n * 提供價值的匯率\n */\n\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].ready, () => {\n _GM__WEBPACK_IMPORTED_MODULE_3__[\"GM\"].addStyle(`\n .footer-unit[_ngcontent-qlo-c4] {\n height: 100px;\n }\n\n .footer-unit-value-exchange {\n font-size: 12pt;\n margin-left: 4px;\n }\n\n .footer-unit-value-exchange-main {\n font-weight: bold;\n }\n\n .footer-unit-value-exchange-small {\n font-size: 8pt;\n }\n `);\n});\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].settingChange, async () => {\n const log = _debugAPI__WEBPACK_IMPORTED_MODULE_2__[\"debugAPI\"].log.extend(`提供價值的匯率(每 ${exchangeInterval / 1000} 秒)`);\n provideNTD();\n globalThis.setInterval(provideNTD, exchangeInterval);\n\n async function provideNTD() {\n const exchangeSelected = _storage__WEBPACK_IMPORTED_MODULE_7__[\"storage\"].findConfig().selectedExchange;\n const unitValues = Array.from(document.querySelectorAll('.footer-unit-value'));\n unitValues.forEach(element => {\n let twdBox;\n twdBox = $(element).parent().find('.footer-unit-value-exchange');\n\n if (!twdBox.length) {\n $(element).prepend().append(``);\n }\n\n twdBox = $(element).parent().find('.footer-unit-value-exchange');\n\n if (twdBox.length) {\n var _$exec3, _$exec3$groups;\n\n const USD = Number(((_$exec3 = /\\$(?[\\d,.]+)?/.exec(element.innerHTML)) === null || _$exec3 === void 0 ? void 0 : (_$exec3$groups = _$exec3.groups) === null || _$exec3$groups === void 0 ? void 0 : _$exec3$groups.USD.replace(/,/g, '')) || 0);\n const currencyValue = USD * _exchange__WEBPACK_IMPORTED_MODULE_6__[\"exchange\"][exchangeSelected].buy;\n const displayCurrency = exchangeSelected === 'MYR' ? Object(_toCurrency__WEBPACK_IMPORTED_MODULE_8__[\"toCurrency\"])(currencyValue) : Object(_toCurrency__WEBPACK_IMPORTED_MODULE_8__[\"toCurrency\"])(Math.ceil(currencyValue));\n\n if (displayCurrency[1]) {\n twdBox.html(`${exchangeSelected} ${displayCurrency[0]}.${displayCurrency[1]}`);\n } else {\n twdBox.html(`${exchangeSelected} ${displayCurrency[0]}`);\n }\n }\n });\n log('成功');\n }\n});\n/**\n * 左側欄連結項目與設定\n */\n\nconst onSidebarUpdate = () => {\n const log = _debugAPI__WEBPACK_IMPORTED_MODULE_2__[\"debugAPI\"].log.extend('安排側邊欄');\n const selector = 'github-com-hilezir-sidebar';\n const container = $(`
`);\n\n if (!$(`#${selector}`).length) {\n $('.w-menu-main').append(container);\n }\n\n react_dom__WEBPACK_IMPORTED_MODULE_1__[\"render\"](react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react_redux__WEBPACK_IMPORTED_MODULE_13__[\"Provider\"], {\n store: _store_store__WEBPACK_IMPORTED_MODULE_14__[\"default\"]\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](_components_Sidebar_Sidebar__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null)), globalThis.document.querySelector(`#${selector}`));\n log('渲染左側欄 settings=');\n};\n\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].ready, onSidebarUpdate);\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].settingChange, onSidebarUpdate);\n/**\n * 取得匯率\n */\n\nPromise.all([Object(_exchange__WEBPACK_IMPORTED_MODULE_6__[\"getNTD\"])(), Object(_exchange__WEBPACK_IMPORTED_MODULE_6__[\"getMYR\"])()]).then(gets => {\n const ntd = gets[0];\n const myr = gets[1];\n _exchange__WEBPACK_IMPORTED_MODULE_6__[\"exchange\"].NTD = ntd;\n _exchange__WEBPACK_IMPORTED_MODULE_6__[\"exchange\"].MYR = myr;\n _emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].emit(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].settingChange);\n});\n/**\n * 修正「添加到列表」被其它元素蓋住的問題\n *\n * e.g. https://www.etoro.com/people/olivierdanvel/portfolio\n */\n\n_GM__WEBPACK_IMPORTED_MODULE_3__[\"GM\"].addStyle(`\n body .inner-header {\n z-index: 1\n }\n`);\n/**\n * 使「買入與賣出按鈕」更加立體明確\n *\n * 大多數使用者在看到買入與賣出時,時常分不清「目前勾選」項目,導致經常發生明明要買入,卻不小心賣空的狀況。\n */\n\n_GM__WEBPACK_IMPORTED_MODULE_3__[\"GM\"].addStyle(`\n .execution-head .execution-head-button.active:after {\n content: \"✅\";\n }\n`);\n/**\n * 確保 toast 不會被蓋住\n */\n\n_GM__WEBPACK_IMPORTED_MODULE_3__[\"GM\"].addStyle(`\n #ct-container {\n z-index: 1000000\n }\n`);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZXRvcm8udHN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2V0b3JvLnRzeD85ODI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgZGVidWdBUEkgfSBmcm9tICcuL2RlYnVnQVBJJ1xuaW1wb3J0IHsgR00gfSBmcm9tICcuL0dNJ1xuaW1wb3J0IHsgc3RyaW5naWZ5VXJsIH0gZnJvbSAncXVlcnktc3RyaW5nJ1xuaW1wb3J0IHsgZW1pdHRlciwgRXZlbnRzIH0gZnJvbSAnLi9lbWl0dGVyJ1xuaW1wb3J0IHsgZ2V0TlRELCBnZXRNWVIsIGV4Y2hhbmdlIH0gZnJvbSAnLi9leGNoYW5nZSdcbmltcG9ydCB7IHN0b3JhZ2UgfSBmcm9tICcuL3N0b3JhZ2UnXG5pbXBvcnQgeyB0b0N1cnJlbmN5IH0gZnJvbSAnLi90b0N1cnJlbmN5J1xuaW1wb3J0IHRvYXN0IGZyb20gJ2NvZ28tdG9hc3QnXG5pbXBvcnQgRXhlY3V0aW9uRGlhbG9nIGZyb20gJy4vY29tcG9uZW50cy9FeGVjdXRpb25EaWFsb2cnXG5pbXBvcnQgJ0BibHVlcHJpbnRqcy9jb3JlL2xpYi9jc3MvYmx1ZXByaW50LmNzcydcbmltcG9ydCBTaWRlYmFyIGZyb20gJ0AvY29tcG9uZW50cy9TaWRlYmFyL1NpZGViYXInXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ3JlYWN0LXJlZHV4J1xuaW1wb3J0IHN0b3JlIGZyb20gJ0Avc3RvcmUvX3N0b3JlJ1xuXG5pbnRlcmZhY2UgJCBleHRlbmRzIEpRdWVyeVN0YXRpYyB7fVxuZ2xvYmFsVGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCAnKicpXG5cbi8qKiDku4vpnaLmm7TmlrDpoLvnjocgKi9cbmNvbnN0IGV4Y2hhbmdlSW50ZXJ2YWwgPSA1MDAwXG5cbi8qKlxuICog6LyJ5YWl6IWz5pys55qE5pmC5qmf6bueXG4gKi9cbmNvbnN0IHJlYWR5SW50ZXJ2YWxJZCA9IGdsb2JhbFRoaXMuc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICBpZiAoJCgnLnctbWVudS1mb290ZXIgLmUtYnRuLWJpZy0yJykubGVuZ3RoID4gMCkge1xuICAgIGdsb2JhbFRoaXMuY2xlYXJJbnRlcnZhbChyZWFkeUludGVydmFsSWQpXG4gICAgZW1pdHRlci5lbWl0KEV2ZW50cy5yZWFkeSlcbiAgfVxufSwgMTAwKVxuXG4vKipcbiAqIOi8ieWFpei3s+WHuuahhuahhuWinuW8t+S7i+mdoueahOaZguapn+m7nlxuICpcbiAqIC50cmFkZS1idXR0b24tdGl0bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiBodHRwczovL3d3dy5ldG9yby5jb20vd2F0Y2hsaXN0cyDnmoTjgIzosrfjgI3jgIzos6PjgI3mjInpiJVcbiAqIFthdXRvbWF0aW9uLWlkPVwiYnV5LXNlbGwtYnV0dG9uLXJhdGUtdmFsdWVcIl0gICAvLyBlLmcuIGh0dHBzOi8vd3d3LmV0b3JvLmNvbS93YXRjaGxpc3RzIOeahOiyt+aIluizo+eahOWDueagvOOAjDcwODguMzDjgI3mjInpiJVcbiAqIFthdXRvbWF0aW9uLWlkPVwidHJhZGUtYnV0dG9uXCJdICAgICAgICAgICAgICAgICAvLyBlLmcuIGh0dHBzOi8vd3d3LmV0b3JvLmNvbS9tYXJrZXRzL3NweDUwMCDnmoTjgIzkuqTmmJPjgI3lpKfol43oibLmjInpiJVcbiAqXG4gKiDvvIjnm67liY3nhKHms5XpgYvkvZzvvIzljp/lm6DmmqvkuI3mmI7vvIlcbiAqIC5ldG9yby10cmFkZS1idXR0b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiBodHRwczovL3d3dy5ldG9yby5jb20vcG9ydGZvbGlvL2J0YyDnmoTjgIzosrcgNzA4OC4zMOOAjeOAjOizoyA3MDg4LjMw44CN5oyJ6YiVXG4gKi9cbmVtaXR0ZXIub24oRXZlbnRzLnJlYWR5LCAoKSA9PiB7XG4gIEV4ZWN1dGlvbkRpYWxvZy5sb2coYOWuieaOkuWlveaMiemIlWApXG5cbiAgbGV0IHdhdGNoSWRcblxuICBjb25zdCBjb25zdHJ1Y3QgPSAoKSA9PiB7XG4gICAgRXhlY3V0aW9uRGlhbG9nLmxvZygn5YG15ris5LitLi4uJywgRXhlY3V0aW9uRGlhbG9nKVxuXG4gICAgaWYgKEV4ZWN1dGlvbkRpYWxvZy5pc1BhcmVudENvbnN0cnVjdGVkICYmICFFeGVjdXRpb25EaWFsb2cuaXNDb25zdHJ1Y3RlZCkge1xuICAgICAgRXhlY3V0aW9uRGlhbG9nLmNvbnN0cnVjdCgpXG4gICAgfVxuXG4gICAgaWYgKEV4ZWN1dGlvbkRpYWxvZy5pc0NvbnN0cnVjdGVkKSB7XG4gICAgICBnbG9iYWxUaGlzLmNsZWFySW50ZXJ2YWwod2F0Y2hJZClcbiAgICAgIEV4ZWN1dGlvbkRpYWxvZy5sb2coYOe1kOadn+WBtea4rGApXG4gICAgfVxuICB9XG5cbiAgJCgnYm9keScpLmRlbGVnYXRlKGAudWlkaWFsb2ctY29udGVudGAsICdtb3VzZW92ZXInLCAoKSA9PiB7XG4gICAgaWYgKCFzdG9yYWdlLmZpbmRDb25maWcoKS5leGVjdXRpb25NYWNyb0VuYWJsZWQpIHtcbiAgICAgIEV4ZWN1dGlvbkRpYWxvZy5sb2coYOWKn+iDveacqumWi+WVn2ApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBFeGVjdXRpb25EaWFsb2cubG9nKGDplovlp4vlgbXmuKxgKVxuXG4gICAgZ2xvYmFsVGhpcy5jbGVhckludGVydmFsKHdhdGNoSWQpXG4gICAgY29uc3RydWN0KClcbiAgICB3YXRjaElkID0gZ2xvYmFsVGhpcy5zZXRJbnRlcnZhbChjb25zdHJ1Y3QsIDI1MClcbiAgfSlcblxuICAkKCdib2R5JykuZGVsZWdhdGUoYC51aWRpYWxvZy1jb250ZW50YCwgJ21vdXNlb3V0JywgKCkgPT4ge1xuICAgIGdsb2JhbFRoaXMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBFeGVjdXRpb25EaWFsb2cubG9nKGDntZDmnZ/lgbXmuKxgKVxuICAgICAgZ2xvYmFsVGhpcy5jbGVhckludGVydmFsKHdhdGNoSWQpXG4gICAgfSwgMzAwKVxuICB9KVxufSlcblxuLyoqXG4gKiDmraHov47oqIrmga9cbiAqL1xuZW1pdHRlci5vbihFdmVudHMucmVhZHksICgpID0+IHtcbiAgdG9hc3Quc3VjY2VzcyhcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8c3Bhbj7wn5mPIOaEn+isneaCqOS9v+eUqCBiZXR0ZXIgZXRvcm8gVUkgZm9yIFRhaXdhbiDmm7TlpJros4foqIroq4vmgbDoqaLvvJo8L3NwYW4+XG4gICAgICA8YVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGNvbG9yOiAnYmx1ZScsXG4gICAgICAgIH19XG4gICAgICAgIGhyZWY9J2h0dHBzOi8vd3d3Lm5vdGlvbi5zby9oaWxlemkvNGZlNjljZDcwNDQzNGZmMWI4MmYwY2Q0OGRkMjE5YzMnXG4gICAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgPlxuICAgICAgICBiZXR0ZXItZXRvcm8tdWkg5bel5YW35a6Y5pa557ay56uZXG4gICAgICA8L2E+XG4gICAgPC9SZWFjdC5GcmFnbWVudD4sXG4gICAgeyBwb3NpdGlvbjogJ3RvcC1yaWdodCcsIGhpZGVBZnRlcjogNSB9LFxuICApXG59KVxuXG4vKipcbiAqIOmXnOazqOeahOS9v+eUqOiAheWAkeeahOmkmOmhjVxuICovXG5lbWl0dGVyLm9uKEV2ZW50cy5yZWFkeSwgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBsb2cgPSBkZWJ1Z0FQSS5sb2cuZXh0ZW5kKCfpl5zms6jnmoTkvb/nlKjogIXlgJHnmoTppJjpoY0nKVxuXG4gIEdNLmFkZFN0eWxlKGBcbiAgICAudXNlci1tZXRhIHtcbiAgICAgIG1hcmdpbjogMCA4cHg7XG4gICAgICBmb250LXNpemU6IDEwcHQ7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZjZjc2O1xuICAgICAgcGFkZGluZzogNHB4IDhweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHdpZHRoOiA5NnB4O1xuICAgIH1cbiAgYClcblxuICBjb25zdCB1cGRhdGVyID0gKCkgPT4ge1xuICAgIGxvZygn5a6J5o6S5aW95oyJ6YiVJylcblxuICAgICQoJ2V0LXVzZXItcm93JykuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHVzZXJGaW5kZXIgPSAkKGVsZW1lbnQpXG4gICAgICBjb25zdCBoYXNBcHBlbmRlZCA9ICEhdXNlckZpbmRlci5maW5kKCcudXNlci1tZXRhJykubGVuZ3RoXG5cbiAgICAgIGlmIChoYXNBcHBlbmRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiB0ZXN0cyBodHRwczovL3JlZ2V4ci5jb20vNTJmdDVcbiAgICAgICAqXG4gICAgICAgKiBbUEFTU10gaHR0cHM6Ly9ldG9yby1jZG4uZXRvcm9zdGF0aWMuY29tL2F2YXRhcnMvMTUwWDE1MC8xNzI0NzI2LzMuanBnXG4gICAgICAgKiBbUEFTU10gaHR0cHM6Ly9ldG9yby1jZG4uZXRvcm9zdGF0aWMuY29tL2F2YXRhcnMvMTUwWDE1MC8xNzI0NzI2LmpwZ1xuICAgICAgICogW1BBU1NdIGh0dHBzOi8vZXRvcm8tY2RuLmV0b3Jvc3RhdGljLmNvbS9hdmF0YXJzLzE1MFgxNTAvNjQ0MTA1OS8yMS5qcGdcbiAgICAgICAqL1xuICAgICAgY29uc3QgY2lkID0gL2F2YXRhcnNcXC9bXFxkXStbeFhdW1xcZF0rXFwvKD88Y2lkPltcXGRdKylcXC8/Ly5leGVjKFxuICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJ1thdXRvbWF0aW9uLWlkPVwidHJhZGUtaXRlbS1hdmF0YXJcIl0nKS5hdHRyKCdzcmMnKSB8fFxuICAgICAgICAgICcnLFxuICAgICAgKT8uZ3JvdXBzPy5jaWRcblxuICAgICAgaWYgKGNpZCAmJiAhaGFzQXBwZW5kZWQpIHtcbiAgICAgICAgdXNlckZpbmRlci5wcmVwZW5kKCQoYDxidXR0b24gY2xhc3M9XCJ1c2VyLW1ldGFcIj7ppJjpoY08L2J1dHRvbj5gKSlcblxuICAgICAgICBjb25zdCBidXR0b24gPSB1c2VyRmluZGVyLmZpbmQoJy51c2VyLW1ldGEnKVxuXG4gICAgICAgIGJ1dHRvbi5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYnV0dG9uID0gdXNlckZpbmRlci5maW5kKCcudXNlci1tZXRhJylcbiAgICAgICAgICBidXR0b24uaHRtbCgn6K6A5Y+W5LitJylcblxuICAgICAgICAgIEdNLmFqYXgoe1xuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIHVybDogc3RyaW5naWZ5VXJsKHtcbiAgICAgICAgICAgICAgdXJsOlxuICAgICAgICAgICAgICAgICdodHRwczovL3d3dy5ldG9yby5jb20vc2FwaS90cmFkZS1kYXRhLXJlYWwvbGl2ZS9wdWJsaWMvcG9ydGZvbGlvcycsXG4gICAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgICAgY2lkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICAgIC92YXIgbW9kZWwgPSAoPzxtb2RlbD57W1xcc1xcU10rfSksL2kuZXhlYyhldmVudC5yZXNwb25zZVRleHQpXG4gICAgICAgICAgICAgICAgICA/Lmdyb3Vwcz8ubW9kZWwgfHwgYHt9YCxcbiAgICAgICAgICAgICAgKSBhcyB7XG4gICAgICAgICAgICAgICAgLyoqIOmkmOmhjSAqL1xuICAgICAgICAgICAgICAgIENyZWRpdEJ5UmVhbGl6ZWRFcXVpdHk/OiBudW1iZXJcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJ1dHRvbi5odG1sKGDppJjpoY0gJHttb2RlbC5DcmVkaXRCeVJlYWxpemVkRXF1aXR5Py50b0ZpeGVkKDIpfSVgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgICAgbG9nKGDnjbLlj5YgY2lkPSR7Y2lkfSDppJjpoY1gKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2xvYmFsVGhpcy5zZXRJbnRlcnZhbCh1cGRhdGVyLCAyNTAwKVxufSlcblxuLyoqXG4gKiDmj5Dkvpvlt6blgbTmrITlhaXph5HmjInpiJXvvIzljK/njofmj5vnrpfntZDmnpzpoa/npLpcbiAqL1xuZW1pdHRlci5vbihFdmVudHMuc2V0dGluZ0NoYW5nZSwgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBsb2cgPSBkZWJ1Z0FQSS5sb2cuZXh0ZW5kKGDmj5DkvpvlhaXph5HljK/njodgKVxuXG4gIGNvbnN0IHRhcmdldCA9ICQoJy53LW1lbnUtZm9vdGVyIC5lLWJ0bi1iaWctMicpXG5cbiAgaWYgKHRhcmdldC5sZW5ndGgpIHtcbiAgICB0YXJnZXQuaHRtbChcbiAgICAgIGDlhaXph5HvvIgke1xuICAgICAgICBleGNoYW5nZVtzdG9yYWdlLmZpbmRDb25maWcoKS5zZWxlY3RlZEV4Y2hhbmdlXS5zZWxsXG4gICAgICB9IOmKgOihjOizo+WHuu+8iWAsXG4gICAgKVxuICAgIGxvZygn5oiQ5YqfJylcbiAgfSBlbHNlIHtcbiAgICBsb2coJ+WkseaVl++8jOaJvuS4jeWIsOWFg+e0oCcpXG4gIH1cbn0pXG5cbi8qKlxuICog5o+Q5L6b5YO55YC855qE5Yyv546HXG4gKi9cbmVtaXR0ZXIub24oRXZlbnRzLnJlYWR5LCAoKSA9PiB7XG4gIEdNLmFkZFN0eWxlKGBcbiAgICAuZm9vdGVyLXVuaXRbX25nY29udGVudC1xbG8tYzRdIHtcbiAgICAgIGhlaWdodDogMTAwcHg7XG4gICAgfVxuXG4gICAgLmZvb3Rlci11bml0LXZhbHVlLWV4Y2hhbmdlIHtcbiAgICAgIGZvbnQtc2l6ZTogMTJwdDtcbiAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gICAgfVxuXG4gICAgLmZvb3Rlci11bml0LXZhbHVlLWV4Y2hhbmdlLW1haW4ge1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgfVxuXG4gICAgLmZvb3Rlci11bml0LXZhbHVlLWV4Y2hhbmdlLXNtYWxsIHtcbiAgICAgIGZvbnQtc2l6ZTogOHB0O1xuICAgIH1cbiAgYClcbn0pXG5lbWl0dGVyLm9uKEV2ZW50cy5zZXR0aW5nQ2hhbmdlLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGxvZyA9IGRlYnVnQVBJLmxvZy5leHRlbmQoXG4gICAgYOaPkOS+m+WDueWAvOeahOWMr+eOh++8iOavjyAke2V4Y2hhbmdlSW50ZXJ2YWwgLyAxMDAwfSDnp5LvvIlgLFxuICApXG5cbiAgcHJvdmlkZU5URCgpXG4gIGdsb2JhbFRoaXMuc2V0SW50ZXJ2YWwocHJvdmlkZU5URCwgZXhjaGFuZ2VJbnRlcnZhbClcblxuICBhc3luYyBmdW5jdGlvbiBwcm92aWRlTlREKCkge1xuICAgIGNvbnN0IGV4Y2hhbmdlU2VsZWN0ZWQgPSBzdG9yYWdlLmZpbmRDb25maWcoKS5zZWxlY3RlZEV4Y2hhbmdlXG5cbiAgICBjb25zdCB1bml0VmFsdWVzID0gQXJyYXkuZnJvbShcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5mb290ZXItdW5pdC12YWx1ZScpLFxuICAgIClcblxuICAgIHVuaXRWYWx1ZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIGxldCB0d2RCb3g6IEpRdWVyeTxIVE1MU3BhbkVsZW1lbnQ+XG5cbiAgICAgIHR3ZEJveCA9ICQoZWxlbWVudClcbiAgICAgICAgLnBhcmVudCgpXG4gICAgICAgIC5maW5kKCcuZm9vdGVyLXVuaXQtdmFsdWUtZXhjaGFuZ2UnKSBhcyBKUXVlcnk8SFRNTFNwYW5FbGVtZW50PlxuXG4gICAgICBpZiAoIXR3ZEJveC5sZW5ndGgpIHtcbiAgICAgICAgJChlbGVtZW50KVxuICAgICAgICAgIC5wcmVwZW5kKClcbiAgICAgICAgICAuYXBwZW5kKGA8c3BhbiBjbGFzcz0nZm9vdGVyLXVuaXQtdmFsdWUtZXhjaGFuZ2UnPjwvc3Bhbj5gKVxuICAgICAgfVxuXG4gICAgICB0d2RCb3ggPSAkKGVsZW1lbnQpXG4gICAgICAgIC5wYXJlbnQoKVxuICAgICAgICAuZmluZCgnLmZvb3Rlci11bml0LXZhbHVlLWV4Y2hhbmdlJykgYXMgSlF1ZXJ5PEhUTUxTcGFuRWxlbWVudD5cblxuICAgICAgaWYgKHR3ZEJveC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgVVNEID0gTnVtYmVyKFxuICAgICAgICAgIC9cXCQoPzxVU0Q+W1xcZCwuXSspPy9cbiAgICAgICAgICAgIC5leGVjKGVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICAgICAgPy5ncm91cHM/LlVTRC5yZXBsYWNlKC8sL2csICcnKSB8fCAwLFxuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgY3VycmVuY3lWYWx1ZSA9IFVTRCAqIGV4Y2hhbmdlW2V4Y2hhbmdlU2VsZWN0ZWRdLmJ1eVxuICAgICAgICBjb25zdCBkaXNwbGF5Q3VycmVuY3kgPVxuICAgICAgICAgIGV4Y2hhbmdlU2VsZWN0ZWQgPT09ICdNWVInXG4gICAgICAgICAgICA/IHRvQ3VycmVuY3koY3VycmVuY3lWYWx1ZSlcbiAgICAgICAgICAgIDogdG9DdXJyZW5jeShNYXRoLmNlaWwoY3VycmVuY3lWYWx1ZSkpXG5cbiAgICAgICAgaWYgKGRpc3BsYXlDdXJyZW5jeVsxXSkge1xuICAgICAgICAgIHR3ZEJveC5odG1sKFxuICAgICAgICAgICAgYCR7ZXhjaGFuZ2VTZWxlY3RlZH0gPHNwYW4gY2xhc3M9XCJmb290ZXItdW5pdC12YWx1ZS1leGNoYW5nZS1tYWluXCI+JHtkaXNwbGF5Q3VycmVuY3lbMF19PC9zcGFuPi48c3BhbiBjbGFzcz1cImZvb3Rlci11bml0LXZhbHVlLWV4Y2hhbmdlLXNtYWxsXCI+JHtkaXNwbGF5Q3VycmVuY3lbMV19PC9zcGFuPmAsXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHR3ZEJveC5odG1sKFxuICAgICAgICAgICAgYCR7ZXhjaGFuZ2VTZWxlY3RlZH0gPHNwYW4gY2xhc3M9XCJmb290ZXItdW5pdC12YWx1ZS1leGNoYW5nZS1tYWluXCI+JHtkaXNwbGF5Q3VycmVuY3lbMF19PC9zcGFuPmAsXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIGxvZygn5oiQ5YqfJylcbiAgfVxufSlcblxuLyoqXG4gKiDlt6blgbTmrITpgKPntZDpoIXnm67oiIfoqK3lrppcbiAqL1xuY29uc3Qgb25TaWRlYmFyVXBkYXRlID0gKCkgPT4ge1xuICBjb25zdCBsb2cgPSBkZWJ1Z0FQSS5sb2cuZXh0ZW5kKCflronmjpLlgbTpgormrIQnKVxuXG4gIGNvbnN0IHNlbGVjdG9yID0gJ2dpdGh1Yi1jb20taGlsZXppci1zaWRlYmFyJ1xuXG4gIGNvbnN0IGNvbnRhaW5lciA9ICQoYDxkaXYgaWQ9XCIke3NlbGVjdG9yfVwiPjwvZGl2PmApXG5cbiAgaWYgKCEkKGAjJHtzZWxlY3Rvcn1gKS5sZW5ndGgpIHtcbiAgICAkKCcudy1tZW51LW1haW4nKS5hcHBlbmQoY29udGFpbmVyKVxuICB9XG5cbiAgUmVhY3RET00ucmVuZGVyKFxuICAgIDxQcm92aWRlciBzdG9yZT17c3RvcmV9PlxuICAgICAgPFNpZGViYXIgLz5cbiAgICA8L1Byb3ZpZGVyPixcbiAgICBnbG9iYWxUaGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3NlbGVjdG9yfWApLFxuICApXG5cbiAgbG9nKCfmuLLmn5Plt6blgbTmrIQgc2V0dGluZ3M9Jylcbn1cbmVtaXR0ZXIub24oRXZlbnRzLnJlYWR5LCBvblNpZGViYXJVcGRhdGUpXG5lbWl0dGVyLm9uKEV2ZW50cy5zZXR0aW5nQ2hhbmdlLCBvblNpZGViYXJVcGRhdGUpXG5cbi8qKlxuICog5Y+W5b6X5Yyv546HXG4gKi9cblByb21pc2UuYWxsKFtnZXROVEQoKSwgZ2V0TVlSKCldKS50aGVuKGdldHMgPT4ge1xuICBjb25zdCBudGQgPSBnZXRzWzBdXG4gIGNvbnN0IG15ciA9IGdldHNbMV1cblxuICBleGNoYW5nZS5OVEQgPSBudGRcbiAgZXhjaGFuZ2UuTVlSID0gbXlyXG5cbiAgZW1pdHRlci5lbWl0KEV2ZW50cy5zZXR0aW5nQ2hhbmdlKVxufSlcblxuLyoqXG4gKiDkv67mraPjgIzmt7vliqDliLDliJfooajjgI3ooqvlhbblroPlhYPntKDok4vkvY/nmoTllY/poYxcbiAqXG4gKiBlLmcuIGh0dHBzOi8vd3d3LmV0b3JvLmNvbS9wZW9wbGUvb2xpdmllcmRhbnZlbC9wb3J0Zm9saW9cbiAqL1xuR00uYWRkU3R5bGUoYFxuICBib2R5IC5pbm5lci1oZWFkZXIge1xuICAgIHotaW5kZXg6IDFcbiAgfVxuYClcblxuLyoqXG4gKiDkvb/jgIzosrflhaXoiIfos6Plh7rmjInpiJXjgI3mm7TliqDnq4vpq5TmmI7norpcbiAqXG4gKiDlpKflpJrmlbjkvb/nlKjogIXlnKjnnIvliLDosrflhaXoiIfos6Plh7rmmYLvvIzmmYLluLjliIbkuI3muIXjgIznm67liY3li77pgbjjgI3poIXnm67vvIzlsI7oh7TntpPluLjnmbznlJ/mmI7mmI7opoHosrflhaXvvIzljbvkuI3lsI/lv4Pos6PnqbrnmoTni4Dms4HjgIJcbiAqL1xuR00uYWRkU3R5bGUoYFxuICAuZXhlY3V0aW9uLWhlYWQgLmV4ZWN1dGlvbi1oZWFkLWJ1dHRvbi5hY3RpdmU6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwi4pyFXCI7XG4gIH1cbmApXG5cbi8qKlxuICog56K65L+dIHRvYXN0IOS4jeacg+iiq+iTi+S9j1xuICovXG5HTS5hZGRTdHlsZShgXG4gICNjdC1jb250YWluZXIge1xuICAgIHotaW5kZXg6IDEwMDAwMDBcbiAgfVxuYClcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFBQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUlBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQVVBO0FBQUE7QUFBQTtBQUVBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBV0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFPQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFIQTtBQUZBO0FBVUE7QUFDQTtBQUFBO0FBUUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQWtCQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7OztBQUtBOzs7O0FBQUE7QUFNQTs7Ozs7O0FBS0E7Ozs7QUFBQTtBQU1BOzs7O0FBR0E7Ozs7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/etoro.tsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _debugAPI__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./debugAPI */ \"./src/debugAPI.ts\");\n/* harmony import */ var _GM__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./GM */ \"./src/GM.ts\");\n/* harmony import */ var query_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! query-string */ \"./node_modules/query-string/index.js\");\n/* harmony import */ var query_string__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(query_string__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./emitter */ \"./src/emitter.ts\");\n/* harmony import */ var _exchange__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./exchange */ \"./src/exchange.ts\");\n/* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./storage */ \"./src/storage.ts\");\n/* harmony import */ var _toCurrency__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./toCurrency */ \"./src/toCurrency.ts\");\n/* harmony import */ var cogo_toast__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! cogo-toast */ \"./node_modules/cogo-toast/dist/index.js\");\n/* harmony import */ var cogo_toast__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(cogo_toast__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/ExecutionDialog */ \"./src/components/ExecutionDialog/index.tsx\");\n/* harmony import */ var _blueprintjs_core_lib_css_blueprint_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @blueprintjs/core/lib/css/blueprint.css */ \"./node_modules/@blueprintjs/core/lib/css/blueprint.css\");\n/* harmony import */ var _blueprintjs_core_lib_css_blueprint_css__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_blueprintjs_core_lib_css_blueprint_css__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var _components_Sidebar_Sidebar__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/components/Sidebar/Sidebar */ \"./src/components/Sidebar/Sidebar.tsx\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/lib/index.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _store_store__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @/store/_store */ \"./src/store/_store.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nglobalThis.localStorage.setItem('debug', '*');\n/** 介面更新頻率 */\n\nconst exchangeInterval = 5000;\n/**\n * 載入腳本的時機點\n */\n\nconst readyIntervalId = globalThis.setInterval(async () => {\n if ($('.w-menu-footer .e-btn-big-2').length > 0) {\n globalThis.clearInterval(readyIntervalId);\n _emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].emit(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].ready);\n }\n}, 100);\n/**\n * 載入跳出框框增強介面的時機點\n */\n\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].ready, () => {\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].log(`安排好按鈕`);\n let watchId;\n\n const construct = () => {\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].log('偵測中...', _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\n\n if (_components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].isParentConstructed && !_components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].isConstructed) {\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].construct();\n }\n\n if (_components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].isConstructed) {\n globalThis.clearInterval(watchId);\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].log(`結束偵測`);\n }\n };\n\n $('body').delegate(`.uidialog-content`, 'mouseover', () => {\n if (!_storage__WEBPACK_IMPORTED_MODULE_7__[\"storage\"].findConfig().executionMacroEnabled) {\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].log(`功能未開啟`);\n return;\n }\n\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].log(`開始偵測`);\n globalThis.clearInterval(watchId);\n construct();\n watchId = globalThis.setInterval(construct, 250);\n });\n $('body').delegate(`.uidialog-content`, 'mouseout', () => {\n globalThis.setTimeout(() => {\n _components_ExecutionDialog__WEBPACK_IMPORTED_MODULE_10__[\"default\"].log(`結束偵測`);\n globalThis.clearInterval(watchId);\n }, 300);\n });\n});\n/**\n * 歡迎訊息\n */\n\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].ready, () => {\n cogo_toast__WEBPACK_IMPORTED_MODULE_9___default.a.success(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"span\", null, \"\\uD83D\\uDE4F \\u611F\\u8B1D\\u60A8\\u4F7F\\u7528 better etoro UI for Taiwan \\u66F4\\u591A\\u8CC7\\u8A0A\\u8ACB\\u6070\\u8A62\\uFF1A\"), react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](\"a\", {\n style: {\n color: 'blue'\n },\n href: 'https://www.notion.so/hilezi/4fe69cd704434ff1b82f0cd48dd219c3',\n target: '_blank'\n }, \"better-etoro-ui \\u5DE5\\u5177\\u5B98\\u65B9\\u7DB2\\u7AD9\")), {\n position: 'top-right',\n hideAfter: 5\n });\n});\n/**\n * 關注的使用者們的餘額\n */\n\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].ready, async () => {\n const log = _debugAPI__WEBPACK_IMPORTED_MODULE_2__[\"debugAPI\"].log.extend('關注的使用者們的餘額');\n _GM__WEBPACK_IMPORTED_MODULE_3__[\"GM\"].addStyle(`\n .user-meta {\n margin: 0 8px;\n font-size: 10pt;\n background: #ffcf76;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n width: 96px;\n }\n `);\n\n const updater = () => {\n log('安排好按鈕');\n $('et-user-row').each((index, element) => {\n var _$exec, _$exec$groups;\n\n const userFinder = $(element);\n const hasAppended = !!userFinder.find('.user-meta').length;\n\n if (hasAppended) {\n return;\n }\n /**\n * tests https://regexr.com/52ft5\n *\n * [PASS] https://etoro-cdn.etorostatic.com/avatars/150X150/1724726/3.jpg\n * [PASS] https://etoro-cdn.etorostatic.com/avatars/150X150/1724726.jpg\n * [PASS] https://etoro-cdn.etorostatic.com/avatars/150X150/6441059/21.jpg\n */\n\n\n const cid = (_$exec = /avatars\\/[\\d]+[xX][\\d]+\\/(?[\\d]+)\\/?/.exec($(element).find('[automation-id=\"trade-item-avatar\"]').attr('src') || '')) === null || _$exec === void 0 ? void 0 : (_$exec$groups = _$exec.groups) === null || _$exec$groups === void 0 ? void 0 : _$exec$groups.cid;\n\n if (cid && !hasAppended) {\n userFinder.prepend($(``));\n const button = userFinder.find('.user-meta');\n button.on('click', () => {\n const button = userFinder.find('.user-meta');\n button.html('讀取中');\n _GM__WEBPACK_IMPORTED_MODULE_3__[\"GM\"].ajax({\n method: 'GET',\n url: Object(query_string__WEBPACK_IMPORTED_MODULE_4__[\"stringifyUrl\"])({\n url: 'https://www.etoro.com/sapi/trade-data-real/live/public/portfolios',\n query: {\n cid\n }\n })\n }).then(event => {\n var _$exec2, _$exec2$groups, _model$CreditByRealiz;\n\n const model = JSON.parse(((_$exec2 = /var model = (?{[\\s\\S]+}),/i.exec(event.responseText)) === null || _$exec2 === void 0 ? void 0 : (_$exec2$groups = _$exec2.groups) === null || _$exec2$groups === void 0 ? void 0 : _$exec2$groups.model) || `{}`);\n button.html(`餘額 ${(_model$CreditByRealiz = model.CreditByRealizedEquity) === null || _model$CreditByRealiz === void 0 ? void 0 : _model$CreditByRealiz.toFixed(2)}%`);\n }).finally(() => {\n log(`獲取 cid=${cid} 餘額`);\n });\n });\n }\n });\n };\n\n globalThis.setInterval(updater, 2500);\n});\n/**\n * 提供左側欄入金按鈕,匯率換算結果顯示\n */\n\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].settingChange, async () => {\n const log = _debugAPI__WEBPACK_IMPORTED_MODULE_2__[\"debugAPI\"].log.extend(`提供入金匯率`);\n const target = $('.w-menu-footer .e-btn-big-2');\n\n if (target.length) {\n target.html(`入金(${_exchange__WEBPACK_IMPORTED_MODULE_6__[\"exchange\"][_storage__WEBPACK_IMPORTED_MODULE_7__[\"storage\"].findConfig().selectedExchange].sell} 銀行賣出)`);\n log('成功');\n } else {\n log('失敗,找不到元素');\n }\n});\n/**\n * 提供價值的匯率\n */\n\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].ready, () => {\n _GM__WEBPACK_IMPORTED_MODULE_3__[\"GM\"].addStyle(`\n .footer-unit[_ngcontent-qlo-c4] {\n height: 100px;\n }\n\n .footer-unit-value-exchange {\n font-size: 12pt;\n margin-left: 4px;\n }\n\n .footer-unit-value-exchange-main {\n font-weight: bold;\n }\n\n .footer-unit-value-exchange-small {\n font-size: 8pt;\n }\n `);\n});\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].settingChange, async () => {\n const log = _debugAPI__WEBPACK_IMPORTED_MODULE_2__[\"debugAPI\"].log.extend(`提供價值的匯率(每 ${exchangeInterval / 1000} 秒)`);\n provideNTD();\n globalThis.setInterval(provideNTD, exchangeInterval);\n\n async function provideNTD() {\n const exchangeSelected = _storage__WEBPACK_IMPORTED_MODULE_7__[\"storage\"].findConfig().selectedExchange;\n const unitValues = Array.from(document.querySelectorAll('.footer-unit-value'));\n unitValues.forEach(element => {\n let twdBox;\n twdBox = $(element).parent().find('.footer-unit-value-exchange');\n\n if (!twdBox.length) {\n $(element).prepend().append(``);\n }\n\n twdBox = $(element).parent().find('.footer-unit-value-exchange');\n\n if (twdBox.length) {\n var _$exec3, _$exec3$groups;\n\n const USD = Number(((_$exec3 = /\\$(?[\\d,.]+)?/.exec(element.innerHTML)) === null || _$exec3 === void 0 ? void 0 : (_$exec3$groups = _$exec3.groups) === null || _$exec3$groups === void 0 ? void 0 : _$exec3$groups.USD.replace(/,/g, '')) || 0);\n const currencyValue = USD * _exchange__WEBPACK_IMPORTED_MODULE_6__[\"exchange\"][exchangeSelected].buy;\n const displayCurrency = exchangeSelected === 'MYR' ? Object(_toCurrency__WEBPACK_IMPORTED_MODULE_8__[\"toCurrency\"])(currencyValue) : Object(_toCurrency__WEBPACK_IMPORTED_MODULE_8__[\"toCurrency\"])(Math.ceil(currencyValue));\n\n if (displayCurrency[1]) {\n twdBox.html(`${exchangeSelected} ${displayCurrency[0]}.${displayCurrency[1]}`);\n } else {\n twdBox.html(`${exchangeSelected} ${displayCurrency[0]}`);\n }\n }\n });\n log('成功');\n }\n});\n/**\n * 左側欄連結項目與設定\n */\n\nconst onSidebarUpdate = () => {\n const log = _debugAPI__WEBPACK_IMPORTED_MODULE_2__[\"debugAPI\"].log.extend('安排側邊欄');\n const selector = 'github-com-hilezir-sidebar';\n const container = $(`
`);\n\n if (!$(`#${selector}`).length) {\n $('.w-menu-main').append(container);\n }\n\n react_dom__WEBPACK_IMPORTED_MODULE_1__[\"render\"](react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](react_redux__WEBPACK_IMPORTED_MODULE_13__[\"Provider\"], {\n store: _store_store__WEBPACK_IMPORTED_MODULE_14__[\"default\"]\n }, react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"](_components_Sidebar_Sidebar__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null)), globalThis.document.querySelector(`#${selector}`));\n log('渲染左側欄 settings=');\n};\n\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].ready, onSidebarUpdate);\n_emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].on(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].settingChange, onSidebarUpdate);\n/**\n * 取得匯率\n */\n\nPromise.all([Object(_exchange__WEBPACK_IMPORTED_MODULE_6__[\"getNTD\"])(), Object(_exchange__WEBPACK_IMPORTED_MODULE_6__[\"getMYR\"])()]).then(gets => {\n const ntd = gets[0];\n const myr = gets[1];\n _exchange__WEBPACK_IMPORTED_MODULE_6__[\"exchange\"].NTD = ntd;\n _exchange__WEBPACK_IMPORTED_MODULE_6__[\"exchange\"].MYR = myr;\n _emitter__WEBPACK_IMPORTED_MODULE_5__[\"emitter\"].emit(_emitter__WEBPACK_IMPORTED_MODULE_5__[\"Events\"].settingChange);\n});\n/**\n * 修正「添加到列表」被其它元素蓋住的問題\n *\n * e.g. https://www.etoro.com/people/olivierdanvel/portfolio\n */\n\n_GM__WEBPACK_IMPORTED_MODULE_3__[\"GM\"].addStyle(`\n body .inner-header {\n z-index: 1\n }\n`);\n/**\n * 使「買入與賣出按鈕」更加立體明確\n *\n * 大多數使用者在看到買入與賣出時,時常分不清「目前勾選」項目,導致經常發生明明要買入,卻不小心賣空的狀況。\n */\n\n_GM__WEBPACK_IMPORTED_MODULE_3__[\"GM\"].addStyle(`\n .execution-head .execution-head-button.active:after {\n content: \"✅\";\n }\n`);\n/**\n * 確保 toast 不會被蓋住\n */\n\n_GM__WEBPACK_IMPORTED_MODULE_3__[\"GM\"].addStyle(`\n #ct-container {\n z-index: 1000000\n }\n`);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZXRvcm8udHN4LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2V0b3JvLnRzeD85ODI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgZGVidWdBUEkgfSBmcm9tICcuL2RlYnVnQVBJJ1xuaW1wb3J0IHsgR00gfSBmcm9tICcuL0dNJ1xuaW1wb3J0IHsgc3RyaW5naWZ5VXJsIH0gZnJvbSAncXVlcnktc3RyaW5nJ1xuaW1wb3J0IHsgZW1pdHRlciwgRXZlbnRzIH0gZnJvbSAnLi9lbWl0dGVyJ1xuaW1wb3J0IHsgZ2V0TlRELCBnZXRNWVIsIGV4Y2hhbmdlIH0gZnJvbSAnLi9leGNoYW5nZSdcbmltcG9ydCB7IHN0b3JhZ2UgfSBmcm9tICcuL3N0b3JhZ2UnXG5pbXBvcnQgeyB0b0N1cnJlbmN5IH0gZnJvbSAnLi90b0N1cnJlbmN5J1xuaW1wb3J0IHRvYXN0IGZyb20gJ2NvZ28tdG9hc3QnXG5pbXBvcnQgRXhlY3V0aW9uRGlhbG9nIGZyb20gJy4vY29tcG9uZW50cy9FeGVjdXRpb25EaWFsb2cnXG5pbXBvcnQgJ0BibHVlcHJpbnRqcy9jb3JlL2xpYi9jc3MvYmx1ZXByaW50LmNzcydcbmltcG9ydCBTaWRlYmFyIGZyb20gJ0AvY29tcG9uZW50cy9TaWRlYmFyL1NpZGViYXInXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ3JlYWN0LXJlZHV4J1xuaW1wb3J0IHN0b3JlIGZyb20gJ0Avc3RvcmUvX3N0b3JlJ1xuXG5pbnRlcmZhY2UgJCBleHRlbmRzIEpRdWVyeVN0YXRpYyB7fVxuZ2xvYmFsVGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCAnKicpXG5cbi8qKiDku4vpnaLmm7TmlrDpoLvnjocgKi9cbmNvbnN0IGV4Y2hhbmdlSW50ZXJ2YWwgPSA1MDAwXG5cbi8qKlxuICog6LyJ5YWl6IWz5pys55qE5pmC5qmf6bueXG4gKi9cbmNvbnN0IHJlYWR5SW50ZXJ2YWxJZCA9IGdsb2JhbFRoaXMuc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICBpZiAoJCgnLnctbWVudS1mb290ZXIgLmUtYnRuLWJpZy0yJykubGVuZ3RoID4gMCkge1xuICAgIGdsb2JhbFRoaXMuY2xlYXJJbnRlcnZhbChyZWFkeUludGVydmFsSWQpXG4gICAgZW1pdHRlci5lbWl0KEV2ZW50cy5yZWFkeSlcbiAgfVxufSwgMTAwKVxuXG4vKipcbiAqIOi8ieWFpei3s+WHuuahhuahhuWinuW8t+S7i+mdoueahOaZguapn+m7nlxuICovXG5lbWl0dGVyLm9uKEV2ZW50cy5yZWFkeSwgKCkgPT4ge1xuICBFeGVjdXRpb25EaWFsb2cubG9nKGDlronmjpLlpb3mjInpiJVgKVxuXG4gIGxldCB3YXRjaElkXG5cbiAgY29uc3QgY29uc3RydWN0ID0gKCkgPT4ge1xuICAgIEV4ZWN1dGlvbkRpYWxvZy5sb2coJ+WBtea4rOS4rS4uLicsIEV4ZWN1dGlvbkRpYWxvZylcblxuICAgIGlmIChFeGVjdXRpb25EaWFsb2cuaXNQYXJlbnRDb25zdHJ1Y3RlZCAmJiAhRXhlY3V0aW9uRGlhbG9nLmlzQ29uc3RydWN0ZWQpIHtcbiAgICAgIEV4ZWN1dGlvbkRpYWxvZy5jb25zdHJ1Y3QoKVxuICAgIH1cblxuICAgIGlmIChFeGVjdXRpb25EaWFsb2cuaXNDb25zdHJ1Y3RlZCkge1xuICAgICAgZ2xvYmFsVGhpcy5jbGVhckludGVydmFsKHdhdGNoSWQpXG4gICAgICBFeGVjdXRpb25EaWFsb2cubG9nKGDntZDmnZ/lgbXmuKxgKVxuICAgIH1cbiAgfVxuXG4gICQoJ2JvZHknKS5kZWxlZ2F0ZShgLnVpZGlhbG9nLWNvbnRlbnRgLCAnbW91c2VvdmVyJywgKCkgPT4ge1xuICAgIGlmICghc3RvcmFnZS5maW5kQ29uZmlnKCkuZXhlY3V0aW9uTWFjcm9FbmFibGVkKSB7XG4gICAgICBFeGVjdXRpb25EaWFsb2cubG9nKGDlip/og73mnKrplovllZ9gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgRXhlY3V0aW9uRGlhbG9nLmxvZyhg6ZaL5aeL5YG15risYClcblxuICAgIGdsb2JhbFRoaXMuY2xlYXJJbnRlcnZhbCh3YXRjaElkKVxuICAgIGNvbnN0cnVjdCgpXG4gICAgd2F0Y2hJZCA9IGdsb2JhbFRoaXMuc2V0SW50ZXJ2YWwoY29uc3RydWN0LCAyNTApXG4gIH0pXG5cbiAgJCgnYm9keScpLmRlbGVnYXRlKGAudWlkaWFsb2ctY29udGVudGAsICdtb3VzZW91dCcsICgpID0+IHtcbiAgICBnbG9iYWxUaGlzLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgRXhlY3V0aW9uRGlhbG9nLmxvZyhg57WQ5p2f5YG15risYClcbiAgICAgIGdsb2JhbFRoaXMuY2xlYXJJbnRlcnZhbCh3YXRjaElkKVxuICAgIH0sIDMwMClcbiAgfSlcbn0pXG5cbi8qKlxuICog5q2h6L+O6KiK5oGvXG4gKi9cbmVtaXR0ZXIub24oRXZlbnRzLnJlYWR5LCAoKSA9PiB7XG4gIHRvYXN0LnN1Y2Nlc3MoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPHNwYW4+8J+ZjyDmhJ/orJ3mgqjkvb/nlKggYmV0dGVyIGV0b3JvIFVJIGZvciBUYWl3YW4g5pu05aSa6LOH6KiK6KuL5oGw6Kmi77yaPC9zcGFuPlxuICAgICAgPGFcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBjb2xvcjogJ2JsdWUnLFxuICAgICAgICB9fVxuICAgICAgICBocmVmPSdodHRwczovL3d3dy5ub3Rpb24uc28vaGlsZXppLzRmZTY5Y2Q3MDQ0MzRmZjFiODJmMGNkNDhkZDIxOWMzJ1xuICAgICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgID5cbiAgICAgICAgYmV0dGVyLWV0b3JvLXVpIOW3peWFt+WumOaWuee2suermVxuICAgICAgPC9hPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+LFxuICAgIHsgcG9zaXRpb246ICd0b3AtcmlnaHQnLCBoaWRlQWZ0ZXI6IDUgfSxcbiAgKVxufSlcblxuLyoqXG4gKiDpl5zms6jnmoTkvb/nlKjogIXlgJHnmoTppJjpoY1cbiAqL1xuZW1pdHRlci5vbihFdmVudHMucmVhZHksIGFzeW5jICgpID0+IHtcbiAgY29uc3QgbG9nID0gZGVidWdBUEkubG9nLmV4dGVuZCgn6Zec5rOo55qE5L2/55So6ICF5YCR55qE6aSY6aGNJylcblxuICBHTS5hZGRTdHlsZShgXG4gICAgLnVzZXItbWV0YSB7XG4gICAgICBtYXJnaW46IDAgOHB4O1xuICAgICAgZm9udC1zaXplOiAxMHB0O1xuICAgICAgYmFja2dyb3VuZDogI2ZmY2Y3NjtcbiAgICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB3aWR0aDogOTZweDtcbiAgICB9XG4gIGApXG5cbiAgY29uc3QgdXBkYXRlciA9ICgpID0+IHtcbiAgICBsb2coJ+WuieaOkuWlveaMiemIlScpXG5cbiAgICAkKCdldC11c2VyLXJvdycpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCB1c2VyRmluZGVyID0gJChlbGVtZW50KVxuICAgICAgY29uc3QgaGFzQXBwZW5kZWQgPSAhIXVzZXJGaW5kZXIuZmluZCgnLnVzZXItbWV0YScpLmxlbmd0aFxuXG4gICAgICBpZiAoaGFzQXBwZW5kZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogdGVzdHMgaHR0cHM6Ly9yZWdleHIuY29tLzUyZnQ1XG4gICAgICAgKlxuICAgICAgICogW1BBU1NdIGh0dHBzOi8vZXRvcm8tY2RuLmV0b3Jvc3RhdGljLmNvbS9hdmF0YXJzLzE1MFgxNTAvMTcyNDcyNi8zLmpwZ1xuICAgICAgICogW1BBU1NdIGh0dHBzOi8vZXRvcm8tY2RuLmV0b3Jvc3RhdGljLmNvbS9hdmF0YXJzLzE1MFgxNTAvMTcyNDcyNi5qcGdcbiAgICAgICAqIFtQQVNTXSBodHRwczovL2V0b3JvLWNkbi5ldG9yb3N0YXRpYy5jb20vYXZhdGFycy8xNTBYMTUwLzY0NDEwNTkvMjEuanBnXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGNpZCA9IC9hdmF0YXJzXFwvW1xcZF0rW3hYXVtcXGRdK1xcLyg/PGNpZD5bXFxkXSspXFwvPy8uZXhlYyhcbiAgICAgICAgJChlbGVtZW50KS5maW5kKCdbYXV0b21hdGlvbi1pZD1cInRyYWRlLWl0ZW0tYXZhdGFyXCJdJykuYXR0cignc3JjJykgfHxcbiAgICAgICAgICAnJyxcbiAgICAgICk/Lmdyb3Vwcz8uY2lkXG5cbiAgICAgIGlmIChjaWQgJiYgIWhhc0FwcGVuZGVkKSB7XG4gICAgICAgIHVzZXJGaW5kZXIucHJlcGVuZCgkKGA8YnV0dG9uIGNsYXNzPVwidXNlci1tZXRhXCI+6aSY6aGNPC9idXR0b24+YCkpXG5cbiAgICAgICAgY29uc3QgYnV0dG9uID0gdXNlckZpbmRlci5maW5kKCcudXNlci1tZXRhJylcblxuICAgICAgICBidXR0b24ub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IHVzZXJGaW5kZXIuZmluZCgnLnVzZXItbWV0YScpXG4gICAgICAgICAgYnV0dG9uLmh0bWwoJ+iugOWPluS4rScpXG5cbiAgICAgICAgICBHTS5hamF4KHtcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICB1cmw6IHN0cmluZ2lmeVVybCh7XG4gICAgICAgICAgICAgIHVybDpcbiAgICAgICAgICAgICAgICAnaHR0cHM6Ly93d3cuZXRvcm8uY29tL3NhcGkvdHJhZGUtZGF0YS1yZWFsL2xpdmUvcHVibGljL3BvcnRmb2xpb3MnLFxuICAgICAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgICAgIGNpZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihldmVudCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgICAvdmFyIG1vZGVsID0gKD88bW9kZWw+e1tcXHNcXFNdK30pLC9pLmV4ZWMoZXZlbnQucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgICAgPy5ncm91cHM/Lm1vZGVsIHx8IGB7fWAsXG4gICAgICAgICAgICAgICkgYXMge1xuICAgICAgICAgICAgICAgIC8qKiDppJjpoY0gKi9cbiAgICAgICAgICAgICAgICBDcmVkaXRCeVJlYWxpemVkRXF1aXR5PzogbnVtYmVyXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBidXR0b24uaHRtbChg6aSY6aGNICR7bW9kZWwuQ3JlZGl0QnlSZWFsaXplZEVxdWl0eT8udG9GaXhlZCgyKX0lYClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgIGxvZyhg542y5Y+WIGNpZD0ke2NpZH0g6aSY6aGNYClcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdsb2JhbFRoaXMuc2V0SW50ZXJ2YWwodXBkYXRlciwgMjUwMClcbn0pXG5cbi8qKlxuICog5o+Q5L6b5bem5YG05qyE5YWl6YeR5oyJ6YiV77yM5Yyv546H5o+b566X57WQ5p6c6aGv56S6XG4gKi9cbmVtaXR0ZXIub24oRXZlbnRzLnNldHRpbmdDaGFuZ2UsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgbG9nID0gZGVidWdBUEkubG9nLmV4dGVuZChg5o+Q5L6b5YWl6YeR5Yyv546HYClcblxuICBjb25zdCB0YXJnZXQgPSAkKCcudy1tZW51LWZvb3RlciAuZS1idG4tYmlnLTInKVxuXG4gIGlmICh0YXJnZXQubGVuZ3RoKSB7XG4gICAgdGFyZ2V0Lmh0bWwoXG4gICAgICBg5YWl6YeR77yIJHtcbiAgICAgICAgZXhjaGFuZ2Vbc3RvcmFnZS5maW5kQ29uZmlnKCkuc2VsZWN0ZWRFeGNoYW5nZV0uc2VsbFxuICAgICAgfSDpioDooYzos6Plh7rvvIlgLFxuICAgIClcbiAgICBsb2coJ+aIkOWKnycpXG4gIH0gZWxzZSB7XG4gICAgbG9nKCflpLHmlZfvvIzmib7kuI3liLDlhYPntKAnKVxuICB9XG59KVxuXG4vKipcbiAqIOaPkOS+m+WDueWAvOeahOWMr+eOh1xuICovXG5lbWl0dGVyLm9uKEV2ZW50cy5yZWFkeSwgKCkgPT4ge1xuICBHTS5hZGRTdHlsZShgXG4gICAgLmZvb3Rlci11bml0W19uZ2NvbnRlbnQtcWxvLWM0XSB7XG4gICAgICBoZWlnaHQ6IDEwMHB4O1xuICAgIH1cblxuICAgIC5mb290ZXItdW5pdC12YWx1ZS1leGNoYW5nZSB7XG4gICAgICBmb250LXNpemU6IDEycHQ7XG4gICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgIH1cblxuICAgIC5mb290ZXItdW5pdC12YWx1ZS1leGNoYW5nZS1tYWluIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIH1cblxuICAgIC5mb290ZXItdW5pdC12YWx1ZS1leGNoYW5nZS1zbWFsbCB7XG4gICAgICBmb250LXNpemU6IDhwdDtcbiAgICB9XG4gIGApXG59KVxuZW1pdHRlci5vbihFdmVudHMuc2V0dGluZ0NoYW5nZSwgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBsb2cgPSBkZWJ1Z0FQSS5sb2cuZXh0ZW5kKFxuICAgIGDmj5Dkvpvlg7nlgLznmoTljK/njofvvIjmr48gJHtleGNoYW5nZUludGVydmFsIC8gMTAwMH0g56eS77yJYCxcbiAgKVxuXG4gIHByb3ZpZGVOVEQoKVxuICBnbG9iYWxUaGlzLnNldEludGVydmFsKHByb3ZpZGVOVEQsIGV4Y2hhbmdlSW50ZXJ2YWwpXG5cbiAgYXN5bmMgZnVuY3Rpb24gcHJvdmlkZU5URCgpIHtcbiAgICBjb25zdCBleGNoYW5nZVNlbGVjdGVkID0gc3RvcmFnZS5maW5kQ29uZmlnKCkuc2VsZWN0ZWRFeGNoYW5nZVxuXG4gICAgY29uc3QgdW5pdFZhbHVlcyA9IEFycmF5LmZyb20oXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZm9vdGVyLXVuaXQtdmFsdWUnKSxcbiAgICApXG5cbiAgICB1bml0VmFsdWVzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICBsZXQgdHdkQm94OiBKUXVlcnk8SFRNTFNwYW5FbGVtZW50PlxuXG4gICAgICB0d2RCb3ggPSAkKGVsZW1lbnQpXG4gICAgICAgIC5wYXJlbnQoKVxuICAgICAgICAuZmluZCgnLmZvb3Rlci11bml0LXZhbHVlLWV4Y2hhbmdlJykgYXMgSlF1ZXJ5PEhUTUxTcGFuRWxlbWVudD5cblxuICAgICAgaWYgKCF0d2RCb3gubGVuZ3RoKSB7XG4gICAgICAgICQoZWxlbWVudClcbiAgICAgICAgICAucHJlcGVuZCgpXG4gICAgICAgICAgLmFwcGVuZChgPHNwYW4gY2xhc3M9J2Zvb3Rlci11bml0LXZhbHVlLWV4Y2hhbmdlJz48L3NwYW4+YClcbiAgICAgIH1cblxuICAgICAgdHdkQm94ID0gJChlbGVtZW50KVxuICAgICAgICAucGFyZW50KClcbiAgICAgICAgLmZpbmQoJy5mb290ZXItdW5pdC12YWx1ZS1leGNoYW5nZScpIGFzIEpRdWVyeTxIVE1MU3BhbkVsZW1lbnQ+XG5cbiAgICAgIGlmICh0d2RCb3gubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IFVTRCA9IE51bWJlcihcbiAgICAgICAgICAvXFwkKD88VVNEPltcXGQsLl0rKT8vXG4gICAgICAgICAgICAuZXhlYyhlbGVtZW50LmlubmVySFRNTClcbiAgICAgICAgICAgID8uZ3JvdXBzPy5VU0QucmVwbGFjZSgvLC9nLCAnJykgfHwgMCxcbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbmN5VmFsdWUgPSBVU0QgKiBleGNoYW5nZVtleGNoYW5nZVNlbGVjdGVkXS5idXlcbiAgICAgICAgY29uc3QgZGlzcGxheUN1cnJlbmN5ID1cbiAgICAgICAgICBleGNoYW5nZVNlbGVjdGVkID09PSAnTVlSJ1xuICAgICAgICAgICAgPyB0b0N1cnJlbmN5KGN1cnJlbmN5VmFsdWUpXG4gICAgICAgICAgICA6IHRvQ3VycmVuY3koTWF0aC5jZWlsKGN1cnJlbmN5VmFsdWUpKVxuXG4gICAgICAgIGlmIChkaXNwbGF5Q3VycmVuY3lbMV0pIHtcbiAgICAgICAgICB0d2RCb3guaHRtbChcbiAgICAgICAgICAgIGAke2V4Y2hhbmdlU2VsZWN0ZWR9IDxzcGFuIGNsYXNzPVwiZm9vdGVyLXVuaXQtdmFsdWUtZXhjaGFuZ2UtbWFpblwiPiR7ZGlzcGxheUN1cnJlbmN5WzBdfTwvc3Bhbj4uPHNwYW4gY2xhc3M9XCJmb290ZXItdW5pdC12YWx1ZS1leGNoYW5nZS1zbWFsbFwiPiR7ZGlzcGxheUN1cnJlbmN5WzFdfTwvc3Bhbj5gLFxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0d2RCb3guaHRtbChcbiAgICAgICAgICAgIGAke2V4Y2hhbmdlU2VsZWN0ZWR9IDxzcGFuIGNsYXNzPVwiZm9vdGVyLXVuaXQtdmFsdWUtZXhjaGFuZ2UtbWFpblwiPiR7ZGlzcGxheUN1cnJlbmN5WzBdfTwvc3Bhbj5gLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBsb2coJ+aIkOWKnycpXG4gIH1cbn0pXG5cbi8qKlxuICog5bem5YG05qyE6YCj57WQ6aCF55uu6IiH6Kit5a6aXG4gKi9cbmNvbnN0IG9uU2lkZWJhclVwZGF0ZSA9ICgpID0+IHtcbiAgY29uc3QgbG9nID0gZGVidWdBUEkubG9nLmV4dGVuZCgn5a6J5o6S5YG06YKK5qyEJylcblxuICBjb25zdCBzZWxlY3RvciA9ICdnaXRodWItY29tLWhpbGV6aXItc2lkZWJhcidcblxuICBjb25zdCBjb250YWluZXIgPSAkKGA8ZGl2IGlkPVwiJHtzZWxlY3Rvcn1cIj48L2Rpdj5gKVxuXG4gIGlmICghJChgIyR7c2VsZWN0b3J9YCkubGVuZ3RoKSB7XG4gICAgJCgnLnctbWVudS1tYWluJykuYXBwZW5kKGNvbnRhaW5lcilcbiAgfVxuXG4gIFJlYWN0RE9NLnJlbmRlcihcbiAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlfT5cbiAgICAgIDxTaWRlYmFyIC8+XG4gICAgPC9Qcm92aWRlcj4sXG4gICAgZ2xvYmFsVGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtzZWxlY3Rvcn1gKSxcbiAgKVxuXG4gIGxvZygn5riy5p+T5bem5YG05qyEIHNldHRpbmdzPScpXG59XG5lbWl0dGVyLm9uKEV2ZW50cy5yZWFkeSwgb25TaWRlYmFyVXBkYXRlKVxuZW1pdHRlci5vbihFdmVudHMuc2V0dGluZ0NoYW5nZSwgb25TaWRlYmFyVXBkYXRlKVxuXG4vKipcbiAqIOWPluW+l+WMr+eOh1xuICovXG5Qcm9taXNlLmFsbChbZ2V0TlREKCksIGdldE1ZUigpXSkudGhlbihnZXRzID0+IHtcbiAgY29uc3QgbnRkID0gZ2V0c1swXVxuICBjb25zdCBteXIgPSBnZXRzWzFdXG5cbiAgZXhjaGFuZ2UuTlREID0gbnRkXG4gIGV4Y2hhbmdlLk1ZUiA9IG15clxuXG4gIGVtaXR0ZXIuZW1pdChFdmVudHMuc2V0dGluZ0NoYW5nZSlcbn0pXG5cbi8qKlxuICog5L+u5q2j44CM5re75Yqg5Yiw5YiX6KGo44CN6KKr5YW25a6D5YWD57Sg6JOL5L2P55qE5ZWP6aGMXG4gKlxuICogZS5nLiBodHRwczovL3d3dy5ldG9yby5jb20vcGVvcGxlL29saXZpZXJkYW52ZWwvcG9ydGZvbGlvXG4gKi9cbkdNLmFkZFN0eWxlKGBcbiAgYm9keSAuaW5uZXItaGVhZGVyIHtcbiAgICB6LWluZGV4OiAxXG4gIH1cbmApXG5cbi8qKlxuICog5L2/44CM6LK35YWl6IiH6LOj5Ye65oyJ6YiV44CN5pu05Yqg56uL6auU5piO56K6XG4gKlxuICog5aSn5aSa5pW45L2/55So6ICF5Zyo55yL5Yiw6LK35YWl6IiH6LOj5Ye65pmC77yM5pmC5bi45YiG5LiN5riF44CM55uu5YmN5Yu+6YG444CN6aCF55uu77yM5bCO6Ie057aT5bi455m855Sf5piO5piO6KaB6LK35YWl77yM5Y275LiN5bCP5b+D6LOj56m655qE54uA5rOB44CCXG4gKi9cbkdNLmFkZFN0eWxlKGBcbiAgLmV4ZWN1dGlvbi1oZWFkIC5leGVjdXRpb24taGVhZC1idXR0b24uYWN0aXZlOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIuKchVwiO1xuICB9XG5gKVxuXG4vKipcbiAqIOeiuuS/nSB0b2FzdCDkuI3mnIPooqvok4vkvY9cbiAqL1xuR00uYWRkU3R5bGUoYFxuICAjY3QtY29udGFpbmVyIHtcbiAgICB6LWluZGV4OiAxMDAwMDAwXG4gIH1cbmApXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQUE7QUFFQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUlBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFMQTtBQVVBO0FBQUE7QUFBQTtBQUVBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBV0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7QUFPQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFIQTtBQUZBO0FBVUE7QUFDQTtBQUFBO0FBUUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQWtCQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFDQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7OztBQUtBOzs7O0FBQUE7QUFNQTs7Ozs7O0FBS0E7Ozs7QUFBQTtBQU1BOzs7O0FBR0E7Ozs7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/etoro.tsx\n"); /***/ }),