Files
2026-01-27 17:24:48 +07:00

32 lines
135 KiB
JavaScript

/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./resources/js/service/service.js":
/*!*****************************************!*\
!*** ./resources/js/service/service.js ***!
\*****************************************/
/***/ (() => {
eval("function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\n// Global variables - NO SENSITIVE DATA (no tokens)\nvar invoiceId;\nvar invoiceOrdernum;\nvar vmId;\nvar vmHostname;\nvar csrfToken;\n\n// Initialize variables from data attributes or global variables\nfunction initializeVariables() {\n // Get data from meta tags or global variables set in Blade template\n var metaInvoiceId = document.querySelector('meta[name=\"invoice-id\"]');\n var metaInvoiceOrdernum = document.querySelector('meta[name=\"invoice-ordernum\"]');\n var metaVmId = document.querySelector('meta[name=\"vm-id\"]');\n var metaVmHostname = document.querySelector('meta[name=\"vm-hostname\"]');\n var metaCsrfToken = document.querySelector('meta[name=\"csrf-token\"]');\n invoiceId = metaInvoiceId ? metaInvoiceId.getAttribute(\"content\") : window.invoiceId;\n invoiceOrdernum = metaInvoiceOrdernum ? metaInvoiceOrdernum.getAttribute(\"content\") : window.invoiceOrdernum;\n vmId = metaVmId ? metaVmId.getAttribute(\"content\") : window.vmId;\n vmHostname = metaVmHostname ? metaVmHostname.getAttribute(\"content\") : window.vmHostname;\n csrfToken = metaCsrfToken ? metaCsrfToken.getAttribute(\"content\") : window.csrfToken;\n}\n\n// Cấu hình toast nếu có thể\nif (typeof FuiToast !== \"undefined\" && FuiToast.config) {\n FuiToast.config({\n position: \"top-center\"\n });\n}\nfunction showNotification(message) {\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"success\";\n if (type === \"success\") {\n FuiToast.success(message);\n } else {\n FuiToast.error(message);\n }\n}\nfunction createSnapshot() {\n return _createSnapshot.apply(this, arguments);\n} // Handle snapshot form submission with loading notification\nfunction _createSnapshot() {\n _createSnapshot = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {\n var snapshotBtn, requestBody, headers, snapshotPromise;\n return _regeneratorRuntime().wrap(function _callee8$(_context8) {\n while (1) switch (_context8.prev = _context8.next) {\n case 0:\n snapshotBtn = document.getElementById(\"createSnapshotButton\");\n if (!(snapshotBtn && snapshotBtn.disabled)) {\n _context8.next = 3;\n break;\n }\n return _context8.abrupt(\"return\");\n case 3:\n requestBody = {\n product_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n snapshotPromise = fetch(\"/secure/create-snapshots\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(response) {\n var data, text, errorMessage;\n return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context7.next = 2;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 2:\n if (!response.redirected) {\n _context7.next = 4;\n break;\n }\n return _context7.abrupt(\"return\", \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 4:\n _context7.prev = 4;\n _context7.next = 7;\n return response.text();\n case 7:\n text = _context7.sent;\n _context7.prev = 8;\n data = JSON.parse(text);\n _context7.next = 20;\n break;\n case 12:\n _context7.prev = 12;\n _context7.t0 = _context7[\"catch\"](8);\n if (!(text.includes(\"success\") || response.ok)) {\n _context7.next = 19;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context7.abrupt(\"return\", \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 19:\n throw new Error(\"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\");\n case 20:\n _context7.next = 25;\n break;\n case 22:\n _context7.prev = 22;\n _context7.t1 = _context7[\"catch\"](4);\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 25:\n if (!(data && !data.error)) {\n _context7.next = 30;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context7.abrupt(\"return\", data.message || \"Đã gửi yêu cầu tạo snapshot. Quá trình sẽ mất 3-5 phút, vui lòng chờ đợi.\");\n case 30:\n errorMessage = \"Có lỗi xảy ra khi tạo snapshot\";\n if (data && data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data && data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data && data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 33:\n case \"end\":\n return _context7.stop();\n }\n }, _callee7, null, [[4, 22], [8, 12]]);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n FuiToast.promise(snapshotPromise, {\n loading: \"Đang gửi yêu cầu tạo snapshot... (Quá trình mất 3-5 phút vui lòng giữ trang không tắt!)\",\n success: function success(data) {\n return data;\n },\n error: function error(_error2) {\n console.error(_error2);\n return _error2.message || \"Có lỗi xảy ra khi tạo snapshot\";\n }\n }, {\n isClose: true\n });\n case 7:\n case \"end\":\n return _context8.stop();\n }\n }, _callee8);\n }));\n return _createSnapshot.apply(this, arguments);\n}\nfunction handleSnapshotSubmit(event) {\n event.preventDefault();\n var snapshotPromise = new Promise(function (resolve, reject) {\n var form = document.getElementById(\"snapshotForm\");\n var formData = new FormData(form);\n fetch(form.action, {\n method: \"POST\",\n body: formData,\n headers: {\n \"X-CSRF-TOKEN\": csrfToken\n }\n }).then(function (response) {\n if (response.redirected) {\n resolve(\"Đã gửi yêu cầu tạo snapshot! Quá trình sẽ mất 3-5 phút.\");\n window.location.href = response.url;\n } else if (response.ok) {\n resolve(\"Đã gửi yêu cầu tạo snapshot! Quá trình sẽ mất 3-5 phút.\");\n setTimeout(function () {\n window.location.reload();\n }, 2000);\n } else {\n response.text().then(function (text) {\n reject(\"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\");\n });\n }\n })[\"catch\"](function (error) {\n reject(\"Lỗi kết nối: \" + error.message);\n });\n });\n if (typeof FuiToast !== \"undefined\" && FuiToast.promise) {\n FuiToast.promise(snapshotPromise, {\n loading: \"Đang gửi yêu cầu tạo snapshot...\",\n success: function success(data) {\n return data || \"Đã gửi yêu cầu tạo snapshot!\";\n },\n error: function error(_error) {\n return _error || \"Có lỗi xảy ra khi gửi yêu cầu tạo snapshot\";\n }\n });\n } else {\n if (typeof FuiToast !== \"undefined\") {\n FuiToast.loading(\"Đang gửi yêu cầu tạo snapshot...\", {\n duration: 0\n });\n } else {\n alert(\"Đang gửi yêu cầu tạo snapshot...\");\n }\n setTimeout(function () {\n document.getElementById(\"snapshotForm\").submit();\n }, 500);\n }\n}\nfunction startVirtualMachine() {\n return _startVirtualMachine.apply(this, arguments);\n}\nfunction _startVirtualMachine() {\n _startVirtualMachine = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee10() {\n var startBtn, requestBody, headers, startPromise;\n return _regeneratorRuntime().wrap(function _callee10$(_context10) {\n while (1) switch (_context10.prev = _context10.next) {\n case 0:\n startBtn = document.getElementById(\"startVMButton\");\n if (!(startBtn && startBtn.disabled)) {\n _context10.next = 3;\n break;\n }\n return _context10.abrupt(\"return\");\n case 3:\n requestBody = {\n vm_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n startPromise = fetch(\"/api/secure/start-vm\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9(response) {\n var data, errorMessage;\n return _regeneratorRuntime().wrap(function _callee9$(_context9) {\n while (1) switch (_context9.prev = _context9.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context9.next = 2;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 2:\n _context9.prev = 2;\n _context9.next = 5;\n return response.json();\n case 5:\n data = _context9.sent;\n _context9.next = 11;\n break;\n case 8:\n _context9.prev = 8;\n _context9.t0 = _context9[\"catch\"](2);\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 11:\n if (data.error) {\n _context9.next = 16;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context9.abrupt(\"return\", data.message);\n case 16:\n if (!(data.type === \"com.vmware.vapi.std.errors.already_in_desired_state\" || data.message && data.message.error_type === \"ALREADY_IN_DESIRED_STATE\")) {\n _context9.next = 21;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context9.abrupt(\"return\", \"Máy chủ đã được bật\");\n case 21:\n errorMessage = \"Có lỗi xảy ra\";\n if (data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 24:\n case \"end\":\n return _context9.stop();\n }\n }, _callee9, null, [[2, 8]]);\n }));\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }());\n FuiToast.promise(startPromise, {\n loading: \"Đang khởi động máy ảo...\",\n success: function success(data) {\n return data;\n },\n error: function error(_error3) {\n console.error(_error3);\n return _error3.message || \"Có lỗi xảy ra khi khởi động máy ảo\";\n }\n }, {\n isClose: true\n });\n case 7:\n case \"end\":\n return _context10.stop();\n }\n }, _callee10);\n }));\n return _startVirtualMachine.apply(this, arguments);\n}\nfunction stopVirtualMachine() {\n return _stopVirtualMachine.apply(this, arguments);\n} // DOM ready\nfunction _stopVirtualMachine() {\n _stopVirtualMachine = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee12() {\n var stopBtn, requestBody, headers, stopPromise;\n return _regeneratorRuntime().wrap(function _callee12$(_context12) {\n while (1) switch (_context12.prev = _context12.next) {\n case 0:\n stopBtn = document.getElementById(\"stopVMButton\");\n if (!(stopBtn && stopBtn.disabled)) {\n _context12.next = 3;\n break;\n }\n return _context12.abrupt(\"return\");\n case 3:\n requestBody = {\n vm_id: vmId\n };\n headers = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n // NO Authorization header - using session auth\n };\n stopPromise = fetch(\"/api/secure/stop-vm\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(requestBody),\n credentials: \"same-origin\"\n }).then(/*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11(response) {\n var data, errorMessage;\n return _regeneratorRuntime().wrap(function _callee11$(_context11) {\n while (1) switch (_context11.prev = _context11.next) {\n case 0:\n if (!(response.redirected || response.status === 401)) {\n _context11.next = 2;\n break;\n }\n throw new Error(\"Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại\");\n case 2:\n _context11.prev = 2;\n _context11.next = 5;\n return response.json();\n case 5:\n data = _context11.sent;\n _context11.next = 11;\n break;\n case 8:\n _context11.prev = 8;\n _context11.t0 = _context11[\"catch\"](2);\n throw new Error(\"Lỗi định dạng dữ liệu từ máy chủ\");\n case 11:\n if (data.error) {\n _context11.next = 16;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context11.abrupt(\"return\", data.message);\n case 16:\n if (!(data.type === \"com.vmware.vapi.std.errors.already_in_desired_state\" || data.message && data.message.error_type === \"ALREADY_IN_DESIRED_STATE\")) {\n _context11.next = 21;\n break;\n }\n setTimeout(function () {\n location.reload();\n }, 2000);\n return _context11.abrupt(\"return\", \"Máy chủ đã được tắt\");\n case 21:\n errorMessage = \"Có lỗi xảy ra\";\n if (data.message) {\n if (_typeof(data.message) === \"object\") {\n if (data.message.messages && data.message.messages.length > 0) {\n errorMessage = data.message.messages[0].default_message || data.message.messages[0].message || \"Có lỗi xảy ra\";\n } else if (data.message.error_type) {\n errorMessage = \"L\\u1ED7i: \".concat(data.message.error_type);\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.message;\n }\n } else if (data.value && data.value.messages && data.value.messages.length > 0) {\n errorMessage = data.value.messages[0].default_message;\n } else if (typeof data === \"string\") {\n errorMessage = data;\n } else if (data.error) {\n if (_typeof(data.error) === \"object\") {\n if (data.error.message) {\n errorMessage = data.error.message;\n } else if (data.error.toString && data.error.toString() !== \"[object Object]\") {\n errorMessage = data.error.toString();\n } else {\n errorMessage = \"Có lỗi xảy ra từ hệ thống\";\n }\n } else {\n errorMessage = data.error;\n }\n }\n throw new Error(errorMessage);\n case 24:\n case \"end\":\n return _context11.stop();\n }\n }, _callee11, null, [[2, 8]]);\n }));\n return function (_x3) {\n return _ref3.apply(this, arguments);\n };\n }());\n FuiToast.promise(stopPromise, {\n loading: \"Đang dừng máy ảo...\",\n success: function success(data) {\n return data;\n },\n error: function error(_error4) {\n console.error(_error4);\n return _error4.message || \"Có lỗi xảy ra khi dừng máy ảo\";\n }\n }, {\n isClose: true\n });\n case 7:\n case \"end\":\n return _context12.stop();\n }\n }, _callee12);\n }));\n return _stopVirtualMachine.apply(this, arguments);\n}\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n // Initialize variables\n initializeVariables();\n var startBtn = document.getElementById(\"startVMButton\");\n var stopBtn = document.getElementById(\"stopVMButton\");\n var restartBtn = document.getElementById(\"restartVMButton\");\n var snapshotBtn = document.getElementById(\"createSnapshotButton\");\n if (startBtn) {\n startBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n startVirtualMachine();\n });\n }\n if (stopBtn) {\n stopBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n stopVirtualMachine();\n });\n }\n if (restartBtn) {\n restartBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n restartVirtualMachine();\n });\n }\n if (snapshotBtn) {\n snapshotBtn.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n createSnapshot();\n });\n }\n});\n\n// Snapshot Table Management\nfunction snapshotTable() {\n // Constants\n var API_ENDPOINTS = {\n GET_SNAPSHOTS: \"/dich-vu-dang-ky/secure/get-snapshots\",\n REMOVE_SNAPSHOT: \"/dich-vu-dang-ky/secure/remove-snapshot\",\n REVERT_SNAPSHOT: \"/dich-vu-dang-ky/secure/revert-snapshot\"\n };\n var MESSAGES = {\n VM_ID_NOT_FOUND: \"Không tìm thấy ID máy ảo\",\n CONNECTION_ERROR: \"Không thể kết nối đến máy chủ\",\n GENERIC_ERROR: \"Có lỗi xảy ra\",\n DELETE_SUCCESS: \"Xóa snapshot thành công\",\n REVERT_SUCCESS: \"Khôi phục snapshot thành công\"\n };\n return {\n loading: false,\n snapshots: [],\n error: null,\n // Cache để tránh fetch lại không cần thiết\n _lastFetchTime: 0,\n _cacheTimeout: 30000,\n // 30 seconds\n fetchSnapshots: function fetchSnapshots() {\n var _arguments = arguments,\n _this = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var _window$vmId;\n var forceRefresh, now, vmId, data;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n forceRefresh = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : false;\n // Check cache\n now = Date.now();\n if (!(!forceRefresh && _this.snapshots.length > 0 && now - _this._lastFetchTime < _this._cacheTimeout)) {\n _context.next = 4;\n break;\n }\n return _context.abrupt(\"return\");\n case 4:\n _this.loading = true;\n _this.error = null;\n vmId = (_window$vmId = window.vmId) === null || _window$vmId === void 0 ? void 0 : _window$vmId.trim();\n if (vmId) {\n _context.next = 10;\n break;\n }\n _this._setError(MESSAGES.VM_ID_NOT_FOUND);\n return _context.abrupt(\"return\");\n case 10:\n _context.prev = 10;\n _context.next = 13;\n return _this._makeRequest(\"\".concat(API_ENDPOINTS.GET_SNAPSHOTS, \"?product_id=\").concat(encodeURIComponent(vmId)));\n case 13:\n data = _context.sent;\n _this._processSnapshotsResponse(data);\n _this._lastFetchTime = now;\n _context.next = 21;\n break;\n case 18:\n _context.prev = 18;\n _context.t0 = _context[\"catch\"](10);\n _this._handleError(\"fetching snapshots\", _context.t0);\n case 21:\n _context.prev = 21;\n _this.loading = false;\n return _context.finish(21);\n case 24:\n case \"end\":\n return _context.stop();\n }\n }, _callee, null, [[10, 18, 21, 24]]);\n }))();\n },\n formatSize: function formatSize(sizeGB, sizeMB) {\n var bytes = this._convertToBytes(sizeGB, sizeMB);\n if (bytes === 0) return \"0 B\";\n return this._formatBytes(bytes);\n },\n deleteSnapshot: function deleteSnapshot(snapshotName) {\n var _this2 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return _this2._confirmAction(\"Xác nhận xóa\", \"B\\u1EA1n c\\xF3 ch\\u1EAFc ch\\u1EAFn mu\\u1ED1n x\\xF3a snapshot \\\"\".concat(snapshotName, \"\\\"? H\\xE0nh \\u0111\\u1ED9ng n\\xE0y kh\\xF4ng th\\u1EC3 ho\\xE0n t\\xE1c.\"), \"Xóa\");\n case 2:\n if (_context2.sent) {\n _context2.next = 4;\n break;\n }\n return _context2.abrupt(\"return\");\n case 4:\n _context2.next = 6;\n return _this2._executeSnapshotAction(API_ENDPOINTS.REMOVE_SNAPSHOT, snapshotName, MESSAGES.DELETE_SUCCESS, \"deleting snapshot\");\n case 6:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }))();\n },\n revertSnapshot: function revertSnapshot(snapshotName) {\n var _this3 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return _this3._confirmAction(\"Xác nhận khôi phục\", \"B\\u1EA1n c\\xF3 ch\\u1EAFc ch\\u1EAFn mu\\u1ED1n kh\\xF4i ph\\u1EE5c v\\u1EC1 snapshot \\\"\".concat(snapshotName, \"\\\"? T\\u1EA5t c\\u1EA3 d\\u1EEF li\\u1EC7u hi\\u1EC7n t\\u1EA1i s\\u1EBD b\\u1ECB m\\u1EA5t.\"), \"Khôi phục\");\n case 2:\n if (_context3.sent) {\n _context3.next = 4;\n break;\n }\n return _context3.abrupt(\"return\");\n case 4:\n _context3.next = 6;\n return _this3._executeSnapshotAction(API_ENDPOINTS.REVERT_SNAPSHOT, snapshotName, MESSAGES.REVERT_SUCCESS, \"reverting snapshot\", 2000);\n case 6:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }))();\n },\n // Public helper methods\n refreshSnapshots: function refreshSnapshots() {\n return this.fetchSnapshots(true);\n },\n getSnapshotCount: function getSnapshotCount() {\n return this.snapshots.length;\n },\n isLoading: function isLoading() {\n return this.loading;\n },\n hasError: function hasError() {\n return this.error !== null;\n },\n // Private helper methods\n _setError: function _setError(message) {\n this.loading = false;\n this.error = message;\n this.snapshots = [];\n },\n _makeRequest: function _makeRequest(url) {\n var _arguments2 = arguments;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n var options, defaultOptions, response;\n return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n options = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : {};\n defaultOptions = {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken,\n \"Cache-Control\": \"no-cache\"\n },\n credentials: \"same-origin\"\n };\n _context4.next = 4;\n return fetch(url, _objectSpread(_objectSpread({}, defaultOptions), options));\n case 4:\n response = _context4.sent;\n if (response.ok) {\n _context4.next = 7;\n break;\n }\n throw new Error(\"HTTP error! status: \".concat(response.status));\n case 7:\n return _context4.abrupt(\"return\", response.json());\n case 8:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n }))();\n },\n _processSnapshotsResponse: function _processSnapshotsResponse(data) {\n var _data$data;\n // Handle different response structures\n if (data.error === false && (_data$data = data.data) !== null && _data$data !== void 0 && _data$data.snapshots) {\n this.snapshots = data.data.snapshots;\n } else if (data.error === true) {\n throw new Error(data.message || \"Có lỗi xảy ra khi tải danh sách snapshot\");\n } else if (data.snapshots) {\n this.snapshots = data.snapshots;\n } else {\n this.snapshots = [];\n }\n },\n _convertToBytes: function _convertToBytes(sizeGB, sizeMB) {\n if (sizeGB) {\n return parseFloat(sizeGB) * Math.pow(1024, 3); // GB to bytes\n } else if (sizeMB) {\n return parseFloat(sizeMB) * Math.pow(1024, 2); // MB to bytes\n }\n return 0;\n },\n _formatBytes: function _formatBytes(bytes) {\n var units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n var k = 1024;\n var i = Math.floor(Math.log(bytes) / Math.log(k));\n var size = parseFloat((bytes / Math.pow(k, i)).toFixed(2));\n return \"\".concat(size, \" \").concat(units[i]);\n },\n _confirmAction: function _confirmAction(title, text, confirmText) {\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {\n var result;\n return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n _context5.next = 2;\n return Swal.fire({\n title: title,\n text: text,\n icon: \"warning\",\n showCancelButton: true,\n confirmButtonColor: title.includes(\"xóa\") ? \"#d33\" : \"#3085d6\",\n cancelButtonColor: title.includes(\"xóa\") ? \"#3085d6\" : \"#d33\",\n confirmButtonText: confirmText,\n cancelButtonText: \"Hủy bỏ\",\n reverseButtons: true\n });\n case 2:\n result = _context5.sent;\n return _context5.abrupt(\"return\", result.isConfirmed);\n case 4:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5);\n }))();\n },\n _executeSnapshotAction: function _executeSnapshotAction(endpoint, snapshotName, successMessage, errorContext) {\n var _arguments3 = arguments,\n _this4 = this;\n return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {\n var delay, data;\n return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n delay = _arguments3.length > 4 && _arguments3[4] !== undefined ? _arguments3[4] : 1000;\n _context6.prev = 1;\n _context6.next = 4;\n return _this4._makeRequest(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-CSRF-TOKEN\": csrfToken\n },\n body: JSON.stringify({\n product_id: window.vmId,\n snapshot_name: snapshotName\n })\n });\n case 4:\n data = _context6.sent;\n if (!(data.error === false)) {\n _context6.next = 10;\n break;\n }\n showNotification(data.message || successMessage, \"success\");\n setTimeout(function () {\n return _this4.refreshSnapshots();\n }, delay);\n _context6.next = 11;\n break;\n case 10:\n throw new Error(data.message || \"\".concat(MESSAGES.GENERIC_ERROR, \" khi \").concat(errorContext));\n case 11:\n _context6.next = 16;\n break;\n case 13:\n _context6.prev = 13;\n _context6.t0 = _context6[\"catch\"](1);\n _this4._handleError(errorContext, _context6.t0);\n case 16:\n case \"end\":\n return _context6.stop();\n }\n }, _callee6, null, [[1, 13]]);\n }))();\n },\n _handleError: function _handleError(context, error) {\n console.error(\"Error \".concat(context, \":\"), error);\n var message = error.message || MESSAGES.CONNECTION_ERROR;\n if (context.includes(\"fetching\")) {\n this._setError(message);\n } else {\n showNotification(message, \"error\");\n }\n }\n };\n}\n\n// Make snapshotTable available globally for Alpine.js\nwindow.snapshotTable = snapshotTable;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3JSdW50aW1lIiwiZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiaW52b2ljZUlkIiwiaW52b2ljZU9yZGVybnVtIiwidm1JZCIsInZtSG9zdG5hbWUiLCJjc3JmVG9rZW4iLCJpbml0aWFsaXplVmFyaWFibGVzIiwibWV0YUludm9pY2VJZCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsIm1ldGFJbnZvaWNlT3JkZXJudW0iLCJtZXRhVm1JZCIsIm1ldGFWbUhvc3RuYW1lIiwibWV0YUNzcmZUb2tlbiIsImdldEF0dHJpYnV0ZSIsIndpbmRvdyIsIkZ1aVRvYXN0IiwiY29uZmlnIiwicG9zaXRpb24iLCJzaG93Tm90aWZpY2F0aW9uIiwibWVzc2FnZSIsInVuZGVmaW5lZCIsInN1Y2Nlc3MiLCJlcnJvciIsImNyZWF0ZVNuYXBzaG90IiwiX2NyZWF0ZVNuYXBzaG90IiwiX2NhbGxlZTgiLCJzbmFwc2hvdEJ0biIsInJlcXVlc3RCb2R5IiwiaGVhZGVycyIsInNuYXBzaG90UHJvbWlzZSIsIl9jYWxsZWU4JCIsIl9jb250ZXh0OCIsImdldEVsZW1lbnRCeUlkIiwiZGlzYWJsZWQiLCJwcm9kdWN0X2lkIiwiQWNjZXB0IiwiZmV0Y2giLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsImNyZWRlbnRpYWxzIiwiX3JlZiIsIl9jYWxsZWU3IiwicmVzcG9uc2UiLCJkYXRhIiwidGV4dCIsImVycm9yTWVzc2FnZSIsIl9jYWxsZWU3JCIsIl9jb250ZXh0NyIsInJlZGlyZWN0ZWQiLCJzdGF0dXMiLCJwYXJzZSIsInQwIiwiaW5jbHVkZXMiLCJvayIsInNldFRpbWVvdXQiLCJsb2NhdGlvbiIsInJlbG9hZCIsInQxIiwibWVzc2FnZXMiLCJkZWZhdWx0X21lc3NhZ2UiLCJlcnJvcl90eXBlIiwiY29uY2F0IiwidG9TdHJpbmciLCJfeCIsInByb21pc2UiLCJsb2FkaW5nIiwiY29uc29sZSIsImlzQ2xvc2UiLCJoYW5kbGVTbmFwc2hvdFN1Ym1pdCIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJyZWplY3QiLCJmb3JtIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImFjdGlvbiIsImhyZWYiLCJ1cmwiLCJkdXJhdGlvbiIsImFsZXJ0Iiwic3VibWl0Iiwic3RhcnRWaXJ0dWFsTWFjaGluZSIsIl9zdGFydFZpcnR1YWxNYWNoaW5lIiwiX2NhbGxlZTEwIiwic3RhcnRCdG4iLCJzdGFydFByb21pc2UiLCJfY2FsbGVlMTAkIiwiX2NvbnRleHQxMCIsInZtX2lkIiwiX3JlZjIiLCJfY2FsbGVlOSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsImpzb24iLCJfeDIiLCJzdG9wVmlydHVhbE1hY2hpbmUiLCJfc3RvcFZpcnR1YWxNYWNoaW5lIiwiX2NhbGxlZTEyIiwic3RvcEJ0biIsInN0b3BQcm9taXNlIiwiX2NhbGxlZTEyJCIsIl9jb250ZXh0MTIiLCJfcmVmMyIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gzIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlc3RhcnRCdG4iLCJzdG9wUHJvcGFnYXRpb24iLCJyZXN0YXJ0VmlydHVhbE1hY2hpbmUiLCJzbmFwc2hvdFRhYmxlIiwiQVBJX0VORFBPSU5UUyIsIkdFVF9TTkFQU0hPVFMiLCJSRU1PVkVfU05BUFNIT1QiLCJSRVZFUlRfU05BUFNIT1QiLCJNRVNTQUdFUyIsIlZNX0lEX05PVF9GT1VORCIsIkNPTk5FQ1RJT05fRVJST1IiLCJHRU5FUklDX0VSUk9SIiwiREVMRVRFX1NVQ0NFU1MiLCJSRVZFUlRfU1VDQ0VTUyIsInNuYXBzaG90cyIsIl9sYXN0RmV0Y2hUaW1lIiwiX2NhY2hlVGltZW91dCIsImZldGNoU25hcHNob3RzIiwiX2FyZ3VtZW50cyIsIl90aGlzIiwiX2NhbGxlZSIsIl93aW5kb3ckdm1JZCIsImZvcmNlUmVmcmVzaCIsIm5vdyIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJEYXRlIiwidHJpbSIsIl9zZXRFcnJvciIsIl9tYWtlUmVxdWVzdCIsImVuY29kZVVSSUNvbXBvbmVudCIsIl9wcm9jZXNzU25hcHNob3RzUmVzcG9uc2UiLCJfaGFuZGxlRXJyb3IiLCJmb3JtYXRTaXplIiwic2l6ZUdCIiwic2l6ZU1CIiwiYnl0ZXMiLCJfY29udmVydFRvQnl0ZXMiLCJfZm9ybWF0Qnl0ZXMiLCJkZWxldGVTbmFwc2hvdCIsInNuYXBzaG90TmFtZSIsIl90aGlzMiIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2NvbmZpcm1BY3Rpb24iLCJfZXhlY3V0ZVNuYXBzaG90QWN0aW9uIiwicmV2ZXJ0U25hcHNob3QiLCJfdGhpczMiLCJfY2FsbGVlMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsInJlZnJlc2hTbmFwc2hvdHMiLCJnZXRTbmFwc2hvdENvdW50IiwiaXNMb2FkaW5nIiwiaGFzRXJyb3IiLCJfYXJndW1lbnRzMiIsIl9jYWxsZWU0Iiwib3B0aW9ucyIsImRlZmF1bHRPcHRpb25zIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiX29iamVjdFNwcmVhZCIsIl9kYXRhJGRhdGEiLCJwYXJzZUZsb2F0IiwiTWF0aCIsInBvdyIsInVuaXRzIiwiayIsImZsb29yIiwibG9nIiwic2l6ZSIsInRvRml4ZWQiLCJ0aXRsZSIsImNvbmZpcm1UZXh0IiwiX2NhbGxlZTUiLCJyZXN1bHQiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJTd2FsIiwiZmlyZSIsImljb24iLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY2FuY2VsQnV0dG9uQ29sb3IiLCJjb25maXJtQnV0dG9uVGV4dCIsImNhbmNlbEJ1dHRvblRleHQiLCJyZXZlcnNlQnV0dG9ucyIsImlzQ29uZmlybWVkIiwiZW5kcG9pbnQiLCJzdWNjZXNzTWVzc2FnZSIsImVycm9yQ29udGV4dCIsIl9hcmd1bWVudHMzIiwiX3RoaXM0IiwiX2NhbGxlZTYiLCJkZWxheSIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsInNuYXBzaG90X25hbWUiLCJjb250ZXh0Il0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zZXJ2aWNlL3NlcnZpY2UuanM/YzE1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHbG9iYWwgdmFyaWFibGVzIC0gTk8gU0VOU0lUSVZFIERBVEEgKG5vIHRva2VucylcbmxldCBpbnZvaWNlSWQ7XG5sZXQgaW52b2ljZU9yZGVybnVtO1xubGV0IHZtSWQ7XG5sZXQgdm1Ib3N0bmFtZTtcbmxldCBjc3JmVG9rZW47XG5cbi8vIEluaXRpYWxpemUgdmFyaWFibGVzIGZyb20gZGF0YSBhdHRyaWJ1dGVzIG9yIGdsb2JhbCB2YXJpYWJsZXNcbmZ1bmN0aW9uIGluaXRpYWxpemVWYXJpYWJsZXMoKSB7XG4gICAgLy8gR2V0IGRhdGEgZnJvbSBtZXRhIHRhZ3Mgb3IgZ2xvYmFsIHZhcmlhYmxlcyBzZXQgaW4gQmxhZGUgdGVtcGxhdGVcbiAgICBjb25zdCBtZXRhSW52b2ljZUlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiaW52b2ljZS1pZFwiXScpO1xuICAgIGNvbnN0IG1ldGFJbnZvaWNlT3JkZXJudW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJpbnZvaWNlLW9yZGVybnVtXCJdJyk7XG4gICAgY29uc3QgbWV0YVZtSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJ2bS1pZFwiXScpO1xuICAgIGNvbnN0IG1ldGFWbUhvc3RuYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwidm0taG9zdG5hbWVcIl0nKTtcbiAgICBjb25zdCBtZXRhQ3NyZlRva2VuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpO1xuXG4gICAgaW52b2ljZUlkID0gbWV0YUludm9pY2VJZFxuICAgICAgICA/IG1ldGFJbnZvaWNlSWQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxuICAgICAgICA6IHdpbmRvdy5pbnZvaWNlSWQ7XG4gICAgaW52b2ljZU9yZGVybnVtID0gbWV0YUludm9pY2VPcmRlcm51bVxuICAgICAgICA/IG1ldGFJbnZvaWNlT3JkZXJudW0uZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxuICAgICAgICA6IHdpbmRvdy5pbnZvaWNlT3JkZXJudW07XG4gICAgdm1JZCA9IG1ldGFWbUlkID8gbWV0YVZtSWQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKSA6IHdpbmRvdy52bUlkO1xuICAgIHZtSG9zdG5hbWUgPSBtZXRhVm1Ib3N0bmFtZVxuICAgICAgICA/IG1ldGFWbUhvc3RuYW1lLmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIilcbiAgICAgICAgOiB3aW5kb3cudm1Ib3N0bmFtZTtcbiAgICBjc3JmVG9rZW4gPSBtZXRhQ3NyZlRva2VuXG4gICAgICAgID8gbWV0YUNzcmZUb2tlbi5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpXG4gICAgICAgIDogd2luZG93LmNzcmZUb2tlbjtcbn1cblxuLy8gQ+G6pXUgaMOsbmggdG9hc3QgbuG6v3UgY8OzIHRo4buDXG5pZiAodHlwZW9mIEZ1aVRvYXN0ICE9PSBcInVuZGVmaW5lZFwiICYmIEZ1aVRvYXN0LmNvbmZpZykge1xuICAgIEZ1aVRvYXN0LmNvbmZpZyh7XG4gICAgICAgIHBvc2l0aW9uOiBcInRvcC1jZW50ZXJcIixcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gc2hvd05vdGlmaWNhdGlvbihtZXNzYWdlLCB0eXBlID0gXCJzdWNjZXNzXCIpIHtcbiAgICBpZiAodHlwZSA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgRnVpVG9hc3Quc3VjY2VzcyhtZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBGdWlUb2FzdC5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNuYXBzaG90KCkge1xuICAgIGNvbnN0IHNuYXBzaG90QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcmVhdGVTbmFwc2hvdEJ1dHRvblwiKTtcbiAgICBpZiAoc25hcHNob3RCdG4gJiYgc25hcHNob3RCdG4uZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xuICAgICAgICBwcm9kdWN0X2lkOiB2bUlkLFxuICAgIH07XG5cbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxuICAgICAgICAvLyBOTyBBdXRob3JpemF0aW9uIGhlYWRlciAtIHVzaW5nIHNlc3Npb24gYXV0aFxuICAgIH07XG5cbiAgICBjb25zdCBzbmFwc2hvdFByb21pc2UgPSBmZXRjaChcIi9zZWN1cmUvY3JlYXRlLXNuYXBzaG90c1wiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RCb2R5KSxcbiAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcbiAgICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RlZCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiUGhpw6puIMSRxINuZyBuaOG6rXAgxJHDoyBo4bq/dCBo4bqhbiwgdnVpIGzDsm5nIMSRxINuZyBuaOG6rXAgbOG6oWlcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHJlc3BvbnNlIGlzIHJlZGlyZWN0ZWQgKHR5cGljYWwgZm9yIExhcmF2ZWwgcmVkaXJlY3QgcmVzcG9uc2VzKVxuICAgICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RlZCkge1xuICAgICAgICAgICAgLy8gRXh0cmFjdCBtZXNzYWdlIGZyb20gVVJMIGlmIHBvc3NpYmxlLCBvciBzaG93IGdlbmVyaWMgc3VjY2Vzc1xuICAgICAgICAgICAgcmV0dXJuIFwixJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90LiBRdcOhIHRyw6xuaCBz4bq9IG3huqV0IDMtNSBwaMO6dCwgdnVpIGzDsm5nIGNo4budIMSR4bujaS5cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcblxuICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGFzIEpTT04gZmlyc3RcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgbm90IEpTT04sIGNoZWNrIGZvciBIVE1MIHdpdGggc3VjY2Vzcy9lcnJvciBtZXNzYWdlc1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0LmluY2x1ZGVzKFwic3VjY2Vzc1wiKSB8fCByZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwixJDDoyBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90LiBRdcOhIHRyw6xuaCBz4bq9IG3huqV0IDMtNSBwaMO6dCwgdnVpIGzDsm5nIGNo4budIMSR4bujaS5cIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkPDsyBs4buXaSB44bqjeSByYSBraGkgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdFwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJM4buXaSDEkeG7i25oIGThuqFuZyBk4buvIGxp4buHdSB04burIG3DoXkgY2jhu6dcIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgSlNPTiByZXNwb25zZVxuICAgICAgICBpZiAoZGF0YSAmJiAhZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlIHx8XG4gICAgICAgICAgICAgICAgXCLEkMOjIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QuIFF1w6EgdHLDrG5oIHPhur0gbeG6pXQgMy01IHBow7p0LCB2dWkgbMOybmcgY2jhu50gxJHhu6NpLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSB04bqhbyBzbmFwc2hvdFwiO1xuICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5tZXNzYWdlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDw7MgbOG7l2kgeOG6o3kgcmFcIjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEzhu5dpOiAke2RhdGEubWVzc2FnZS5lcnJvcl90eXBlfWA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZ1wiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgZGF0YSAmJlxuICAgICAgICAgICAgICAgIGRhdGEudmFsdWUgJiZcbiAgICAgICAgICAgICAgICBkYXRhLnZhbHVlLm1lc3NhZ2VzICYmXG4gICAgICAgICAgICAgICAgZGF0YS52YWx1ZS5tZXNzYWdlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLnZhbHVlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhICYmIGRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXJyb3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZygpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmdcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIEZ1aVRvYXN0LnByb21pc2UoXG4gICAgICAgIHNuYXBzaG90UHJvbWlzZSxcbiAgICAgICAge1xuICAgICAgICAgICAgbG9hZGluZzpcbiAgICAgICAgICAgICAgICBcIsSQYW5nIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QuLi4gKFF1w6EgdHLDrG5oIG3huqV0IDMtNSBwaMO6dCB2dWkgbMOybmcgZ2nhu68gdHJhbmcga2jDtG5nIHThuq90ISlcIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlIHx8IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSB04bqhbyBzbmFwc2hvdFwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaXNDbG9zZTogdHJ1ZSxcbiAgICAgICAgfVxuICAgICk7XG59XG5cbi8vIEhhbmRsZSBzbmFwc2hvdCBmb3JtIHN1Ym1pc3Npb24gd2l0aCBsb2FkaW5nIG5vdGlmaWNhdGlvblxuZnVuY3Rpb24gaGFuZGxlU25hcHNob3RTdWJtaXQoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3Qgc25hcHNob3RQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzbmFwc2hvdEZvcm1cIik7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm0pO1xuXG4gICAgICAgIGZldGNoKGZvcm0uYWN0aW9uLCB7XG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZWRpcmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIsSQw6MgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdCEgUXXDoSB0csOsbmggc+G6vSBt4bqldCAzLTUgcGjDunQuXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZXNwb25zZS51cmw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCLEkMOjIGfhu61pIHnDqnUgY+G6p3UgdOG6oW8gc25hcHNob3QhIFF1w6EgdHLDrG5oIHPhur0gbeG6pXQgMy01IHBow7p0LlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS50ZXh0KCkudGhlbigodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90XCIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChcIkzhu5dpIGvhur90IG7hu5FpOiBcIiArIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAodHlwZW9mIEZ1aVRvYXN0ICE9PSBcInVuZGVmaW5lZFwiICYmIEZ1aVRvYXN0LnByb21pc2UpIHtcbiAgICAgICAgRnVpVG9hc3QucHJvbWlzZShzbmFwc2hvdFByb21pc2UsIHtcbiAgICAgICAgICAgIGxvYWRpbmc6IFwixJBhbmcgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4uLlwiLFxuICAgICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YSB8fCBcIsSQw6MgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdCFcIjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yIHx8IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBn4butaSB5w6p1IGPhuqd1IHThuqFvIHNuYXBzaG90XCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIEZ1aVRvYXN0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBGdWlUb2FzdC5sb2FkaW5nKFwixJBhbmcgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4uLlwiLCB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFsZXJ0KFwixJBhbmcgZ+G7rWkgecOqdSBj4bqndSB04bqhbyBzbmFwc2hvdC4uLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzbmFwc2hvdEZvcm1cIikuc3VibWl0KCk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydFZpcnR1YWxNYWNoaW5lKCkge1xuICAgIGNvbnN0IHN0YXJ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdGFydFZNQnV0dG9uXCIpO1xuICAgIGlmIChzdGFydEJ0biAmJiBzdGFydEJ0bi5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIHZtX2lkOiB2bUlkLFxuICAgIH07XG5cbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxuICAgICAgICAvLyBOTyBBdXRob3JpemF0aW9uIGhlYWRlciAtIHVzaW5nIHNlc3Npb24gYXV0aFxuICAgIH07XG5cbiAgICBjb25zdCBzdGFydFByb21pc2UgPSBmZXRjaChcIi9hcGkvc2VjdXJlL3N0YXJ0LXZtXCIsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpLFxuICAgICAgICBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuICAgIH0pLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5yZWRpcmVjdGVkIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJQaGnDqm4gxJHEg25nIG5o4bqtcCDEkcOjIGjhur90IGjhuqFuLCB2dWkgbMOybmcgxJHEg25nIG5o4bqtcCBs4bqhaVwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJM4buXaSDEkeG7i25oIGThuqFuZyBk4buvIGxp4buHdSB04burIG3DoXkgY2jhu6dcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5tZXNzYWdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGRhdGEudHlwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgXCJjb20udm13YXJlLnZhcGkuc3RkLmVycm9ycy5hbHJlYWR5X2luX2Rlc2lyZWRfc3RhdGVcIiB8fFxuICAgICAgICAgICAgICAgIChkYXRhLm1lc3NhZ2UgJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUgPT09IFwiQUxSRUFEWV9JTl9ERVNJUkVEX1NUQVRFXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiTcOheSBjaOG7pyDEkcOjIMSRxrDhu6NjIGLhuq10XCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYVwiO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UubWVzc2FnZXNbMF0ubWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkPDsyBs4buXaSB44bqjeSByYVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBM4buXaTogJHtkYXRhLm1lc3NhZ2UuZXJyb3JfdHlwZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZ1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGF0YS52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRhLnZhbHVlLm1lc3NhZ2VzICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudmFsdWUubWVzc2FnZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLnZhbHVlLm1lc3NhZ2VzWzBdLmRlZmF1bHRfbWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5lcnJvciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lcnJvci50b1N0cmluZyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZXJyb3IudG9TdHJpbmcoKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkPDsyBs4buXaSB44bqjeSByYSB04burIGjhu4cgdGjhu5FuZ1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgRnVpVG9hc3QucHJvbWlzZShcbiAgICAgICAgc3RhcnRQcm9taXNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBsb2FkaW5nOiBcIsSQYW5nIGto4bufaSDEkeG7mW5nIG3DoXkg4bqjby4uLlwiLFxuICAgICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgfHwgXCJDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGto4bufaSDEkeG7mW5nIG3DoXkg4bqjb1wiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaXNDbG9zZTogdHJ1ZSxcbiAgICAgICAgfVxuICAgICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0b3BWaXJ0dWFsTWFjaGluZSgpIHtcbiAgICBjb25zdCBzdG9wQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdG9wVk1CdXR0b25cIik7XG4gICAgaWYgKHN0b3BCdG4gJiYgc3RvcEJ0bi5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgIHZtX2lkOiB2bUlkLFxuICAgIH07XG5cbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxuICAgICAgICAvLyBOTyBBdXRob3JpemF0aW9uIGhlYWRlciAtIHVzaW5nIHNlc3Npb24gYXV0aFxuICAgIH07XG5cbiAgICBjb25zdCBzdG9wUHJvbWlzZSA9IGZldGNoKFwiL2FwaS9zZWN1cmUvc3RvcC12bVwiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RCb2R5KSxcbiAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcbiAgICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UucmVkaXJlY3RlZCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiUGhpw6puIMSRxINuZyBuaOG6rXAgxJHDoyBo4bq/dCBo4bqhbiwgdnVpIGzDsm5nIMSRxINuZyBuaOG6rXAgbOG6oWlcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTOG7l2kgxJHhu4tuaCBk4bqhbmcgZOG7ryBsaeG7h3UgdOG7qyBtw6F5IGNo4bunXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEubWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBkYXRhLnR5cGUgPT09XG4gICAgICAgICAgICAgICAgICAgIFwiY29tLnZtd2FyZS52YXBpLnN0ZC5lcnJvcnMuYWxyZWFkeV9pbl9kZXNpcmVkX3N0YXRlXCIgfHxcbiAgICAgICAgICAgICAgICAoZGF0YS5tZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5lcnJvcl90eXBlID09PSBcIkFMUkVBRFlfSU5fREVTSVJFRF9TVEFURVwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBcIk3DoXkgY2jhu6cgxJHDoyDEkcaw4bujYyB04bqvdFwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmFcIjtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5tZXNzYWdlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5tZXNzYWdlc1swXS5kZWZhdWx0X21lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLm1lc3NhZ2VzWzBdLm1lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDw7MgbOG7l2kgeOG6o3kgcmFcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tZXNzYWdlLmVycm9yX3R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgTOG7l2k6ICR7ZGF0YS5tZXNzYWdlLmVycm9yX3R5cGV9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmdcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0YS52YWx1ZS5tZXNzYWdlcyAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRhLnZhbHVlLm1lc3NhZ2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZGF0YS52YWx1ZS5tZXNzYWdlc1swXS5kZWZhdWx0X21lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuZXJyb3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZXJyb3IudG9TdHJpbmcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmVycm9yLnRvU3RyaW5nKCkgIT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3IudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJDw7MgbOG7l2kgeOG6o3kgcmEgdOG7qyBo4buHIHRo4buRbmdcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIEZ1aVRvYXN0LnByb21pc2UoXG4gICAgICAgIHN0b3BQcm9taXNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBsb2FkaW5nOiBcIsSQYW5nIGThu6tuZyBtw6F5IOG6o28uLi5cIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlIHx8IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBk4burbmcgbcOheSDhuqNvXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpc0Nsb3NlOiB0cnVlLFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuXG4vLyBET00gcmVhZHlcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBJbml0aWFsaXplIHZhcmlhYmxlc1xuICAgIGluaXRpYWxpemVWYXJpYWJsZXMoKTtcblxuICAgIGNvbnN0IHN0YXJ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdGFydFZNQnV0dG9uXCIpO1xuICAgIGNvbnN0IHN0b3BCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0b3BWTUJ1dHRvblwiKTtcbiAgICBjb25zdCByZXN0YXJ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXN0YXJ0Vk1CdXR0b25cIik7XG4gICAgY29uc3Qgc25hcHNob3RCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNyZWF0ZVNuYXBzaG90QnV0dG9uXCIpO1xuXG4gICAgaWYgKHN0YXJ0QnRuKSB7XG4gICAgICAgIHN0YXJ0QnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHN0YXJ0VmlydHVhbE1hY2hpbmUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHN0b3BCdG4pIHtcbiAgICAgICAgc3RvcEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBzdG9wVmlydHVhbE1hY2hpbmUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3RhcnRCdG4pIHtcbiAgICAgICAgcmVzdGFydEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICByZXN0YXJ0VmlydHVhbE1hY2hpbmUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHNuYXBzaG90QnRuKSB7XG4gICAgICAgIHNuYXBzaG90QnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGNyZWF0ZVNuYXBzaG90KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn0pO1xuXG4vLyBTbmFwc2hvdCBUYWJsZSBNYW5hZ2VtZW50XG5mdW5jdGlvbiBzbmFwc2hvdFRhYmxlKCkge1xuICAgIC8vIENvbnN0YW50c1xuICAgIGNvbnN0IEFQSV9FTkRQT0lOVFMgPSB7XG4gICAgICAgIEdFVF9TTkFQU0hPVFM6IFwiL2RpY2gtdnUtZGFuZy1reS9zZWN1cmUvZ2V0LXNuYXBzaG90c1wiLFxuICAgICAgICBSRU1PVkVfU05BUFNIT1Q6IFwiL2RpY2gtdnUtZGFuZy1reS9zZWN1cmUvcmVtb3ZlLXNuYXBzaG90XCIsXG4gICAgICAgIFJFVkVSVF9TTkFQU0hPVDogXCIvZGljaC12dS1kYW5nLWt5L3NlY3VyZS9yZXZlcnQtc25hcHNob3RcIixcbiAgICB9O1xuXG4gICAgY29uc3QgTUVTU0FHRVMgPSB7XG4gICAgICAgIFZNX0lEX05PVF9GT1VORDogXCJLaMO0bmcgdMOsbSB0aOG6pXkgSUQgbcOheSDhuqNvXCIsXG4gICAgICAgIENPTk5FQ1RJT05fRVJST1I6IFwiS2jDtG5nIHRo4buDIGvhur90IG7hu5FpIMSR4bq/biBtw6F5IGNo4bunXCIsXG4gICAgICAgIEdFTkVSSUNfRVJST1I6IFwiQ8OzIGzhu5dpIHjhuqN5IHJhXCIsXG4gICAgICAgIERFTEVURV9TVUNDRVNTOiBcIljDs2Egc25hcHNob3QgdGjDoG5oIGPDtG5nXCIsXG4gICAgICAgIFJFVkVSVF9TVUNDRVNTOiBcIktow7RpIHBo4bulYyBzbmFwc2hvdCB0aMOgbmggY8O0bmdcIixcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIHNuYXBzaG90czogW10sXG4gICAgICAgIGVycm9yOiBudWxsLFxuXG4gICAgICAgIC8vIENhY2hlIMSR4buDIHRyw6FuaCBmZXRjaCBs4bqhaSBraMO0bmcgY+G6p24gdGhp4bq/dFxuICAgICAgICBfbGFzdEZldGNoVGltZTogMCxcbiAgICAgICAgX2NhY2hlVGltZW91dDogMzAwMDAsIC8vIDMwIHNlY29uZHNcblxuICAgICAgICBhc3luYyBmZXRjaFNuYXBzaG90cyhmb3JjZVJlZnJlc2ggPSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgY2FjaGVcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIWZvcmNlUmVmcmVzaCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc25hcHNob3RzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICBub3cgLSB0aGlzLl9sYXN0RmV0Y2hUaW1lIDwgdGhpcy5fY2FjaGVUaW1lb3V0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgY29uc3Qgdm1JZCA9IHdpbmRvdy52bUlkPy50cmltKCk7XG4gICAgICAgICAgICBpZiAoIXZtSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvcihNRVNTQUdFUy5WTV9JRF9OT1RfRk9VTkQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5fbWFrZVJlcXVlc3QoXG4gICAgICAgICAgICAgICAgICAgIGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgQVBJX0VORFBPSU5UUy5HRVRfU05BUFNIT1RTXG4gICAgICAgICAgICAgICAgICAgIH0/cHJvZHVjdF9pZD0ke2VuY29kZVVSSUNvbXBvbmVudCh2bUlkKX1gXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NTbmFwc2hvdHNSZXNwb25zZShkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RmV0Y2hUaW1lID0gbm93O1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihcImZldGNoaW5nIHNuYXBzaG90c1wiLCBlcnJvcik7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGZvcm1hdFNpemUoc2l6ZUdCLCBzaXplTUIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5fY29udmVydFRvQnl0ZXMoc2l6ZUdCLCBzaXplTUIpO1xuICAgICAgICAgICAgaWYgKGJ5dGVzID09PSAwKSByZXR1cm4gXCIwIEJcIjtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdEJ5dGVzKGJ5dGVzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBkZWxldGVTbmFwc2hvdChzbmFwc2hvdE5hbWUpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhKGF3YWl0IHRoaXMuX2NvbmZpcm1BY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgIFwiWMOhYyBuaOG6rW4geMOzYVwiLFxuICAgICAgICAgICAgICAgICAgICBgQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIHjDs2Egc25hcHNob3QgXCIke3NuYXBzaG90TmFtZX1cIj8gSMOgbmggxJHhu5luZyBuw6B5IGtow7RuZyB0aOG7gyBob8OgbiB0w6FjLmAsXG4gICAgICAgICAgICAgICAgICAgIFwiWMOzYVwiXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVTbmFwc2hvdEFjdGlvbihcbiAgICAgICAgICAgICAgICBBUElfRU5EUE9JTlRTLlJFTU9WRV9TTkFQU0hPVCxcbiAgICAgICAgICAgICAgICBzbmFwc2hvdE5hbWUsXG4gICAgICAgICAgICAgICAgTUVTU0FHRVMuREVMRVRFX1NVQ0NFU1MsXG4gICAgICAgICAgICAgICAgXCJkZWxldGluZyBzbmFwc2hvdFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIHJldmVydFNuYXBzaG90KHNuYXBzaG90TmFtZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEoYXdhaXQgdGhpcy5fY29uZmlybUFjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgXCJYw6FjIG5o4bqtbiBraMO0aSBwaOG7pWNcIixcbiAgICAgICAgICAgICAgICAgICAgYELhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBraMO0aSBwaOG7pWMgduG7gSBzbmFwc2hvdCBcIiR7c25hcHNob3ROYW1lfVwiPyBU4bqldCBj4bqjIGThu68gbGnhu4d1IGhp4buHbiB04bqhaSBz4bq9IGLhu4sgbeG6pXQuYCxcbiAgICAgICAgICAgICAgICAgICAgXCJLaMO0aSBwaOG7pWNcIlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9leGVjdXRlU25hcHNob3RBY3Rpb24oXG4gICAgICAgICAgICAgICAgQVBJX0VORFBPSU5UUy5SRVZFUlRfU05BUFNIT1QsXG4gICAgICAgICAgICAgICAgc25hcHNob3ROYW1lLFxuICAgICAgICAgICAgICAgIE1FU1NBR0VTLlJFVkVSVF9TVUNDRVNTLFxuICAgICAgICAgICAgICAgIFwicmV2ZXJ0aW5nIHNuYXBzaG90XCIsXG4gICAgICAgICAgICAgICAgMjAwMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBQdWJsaWMgaGVscGVyIG1ldGhvZHNcbiAgICAgICAgcmVmcmVzaFNuYXBzaG90cygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoU25hcHNob3RzKHRydWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldFNuYXBzaG90Q291bnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zbmFwc2hvdHMubGVuZ3RoO1xuICAgICAgICB9LFxuXG4gICAgICAgIGlzTG9hZGluZygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGFzRXJyb3IoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvciAhPT0gbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBQcml2YXRlIGhlbHBlciBtZXRob2RzXG4gICAgICAgIF9zZXRFcnJvcihtZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBtZXNzYWdlO1xuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBbXTtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBfbWFrZVJlcXVlc3QodXJsLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiWC1DU1JGLVRPS0VOXCI6IGNzcmZUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tY2FjaGVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICAgICAgICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCBlcnJvciEgc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgfSxcblxuICAgICAgICBfcHJvY2Vzc1NuYXBzaG90c1Jlc3BvbnNlKGRhdGEpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgcmVzcG9uc2Ugc3RydWN0dXJlc1xuICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgPT09IGZhbHNlICYmIGRhdGEuZGF0YT8uc25hcHNob3RzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBkYXRhLmRhdGEuc25hcHNob3RzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmVycm9yID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UgfHwgXCJDw7MgbOG7l2kgeOG6o3kgcmEga2hpIHThuqNpIGRhbmggc8OhY2ggc25hcHNob3RcIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuc25hcHNob3RzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBkYXRhLnNuYXBzaG90cztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfY29udmVydFRvQnl0ZXMoc2l6ZUdCLCBzaXplTUIpIHtcbiAgICAgICAgICAgIGlmIChzaXplR0IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzaXplR0IpICogMTAyNCAqKiAzOyAvLyBHQiB0byBieXRlc1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaXplTUIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzaXplTUIpICogMTAyNCAqKiAyOyAvLyBNQiB0byBieXRlc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2Zvcm1hdEJ5dGVzKGJ5dGVzKSB7XG4gICAgICAgICAgICBjb25zdCB1bml0cyA9IFtcIkJcIiwgXCJLQlwiLCBcIk1CXCIsIFwiR0JcIiwgXCJUQlwiXTtcbiAgICAgICAgICAgIGNvbnN0IGsgPSAxMDI0O1xuICAgICAgICAgICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuXG4gICAgICAgICAgICBjb25zdCBzaXplID0gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSk7XG4gICAgICAgICAgICByZXR1cm4gYCR7c2l6ZX0gJHt1bml0c1tpXX1gO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIF9jb25maXJtQWN0aW9uKHRpdGxlLCB0ZXh0LCBjb25maXJtVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIGljb246IFwid2FybmluZ1wiLFxuICAgICAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiB0aXRsZS5pbmNsdWRlcyhcInjDs2FcIikgPyBcIiNkMzNcIiA6IFwiIzMwODVkNlwiLFxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiB0aXRsZS5pbmNsdWRlcyhcInjDs2FcIikgPyBcIiMzMDg1ZDZcIiA6IFwiI2QzM1wiLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBjb25maXJtVGV4dCxcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIkjhu6d5IGLhu49cIixcbiAgICAgICAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmlzQ29uZmlybWVkO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIF9leGVjdXRlU25hcHNob3RBY3Rpb24oXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHNuYXBzaG90TmFtZSxcbiAgICAgICAgICAgIHN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgZXJyb3JDb250ZXh0LFxuICAgICAgICAgICAgZGVsYXkgPSAxMDAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5fbWFrZVJlcXVlc3QoZW5kcG9pbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogY3NyZlRva2VuLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0X2lkOiB3aW5kb3cudm1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90X25hbWU6IHNuYXBzaG90TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd05vdGlmaWNhdGlvbihkYXRhLm1lc3NhZ2UgfHwgc3VjY2Vzc01lc3NhZ2UsIFwic3VjY2Vzc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlZnJlc2hTbmFwc2hvdHMoKSwgZGVsYXkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke01FU1NBR0VTLkdFTkVSSUNfRVJST1J9IGtoaSAke2Vycm9yQ29udGV4dH1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihlcnJvckNvbnRleHQsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfaGFuZGxlRXJyb3IoY29udGV4dCwgZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yICR7Y29udGV4dH06YCwgZXJyb3IpO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2UgfHwgTUVTU0FHRVMuQ09OTkVDVElPTl9FUlJPUjtcblxuICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5jbHVkZXMoXCJmZXRjaGluZ1wiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93Tm90aWZpY2F0aW9uKG1lc3NhZ2UsIFwiZXJyb3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gTWFrZSBzbmFwc2hvdFRhYmxlIGF2YWlsYWJsZSBnbG9iYWxseSBmb3IgQWxwaW5lLmpzXG53aW5kb3cuc25hcHNob3RUYWJsZSA9IHNuYXBzaG90VGFibGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OzsrQ0FDQSxxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQUMsQ0FBQSxTQUFBQyxDQUFBLEVBQUFELENBQUEsT0FBQUUsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLFNBQUEsRUFBQUMsQ0FBQSxHQUFBSCxDQUFBLENBQUFJLGNBQUEsRUFBQUMsQ0FBQSxHQUFBSixNQUFBLENBQUFLLGNBQUEsY0FBQVAsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsSUFBQUQsQ0FBQSxDQUFBRCxDQUFBLElBQUFFLENBQUEsQ0FBQU8sS0FBQSxLQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEs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QUFBO2NBQUE7WUFBQTtjQUFBeVAsU0FBQSxDQUFBOU4sSUFBQTtjQUFBOE4sU0FBQSxDQUFBMUosRUFBQSxHQUFBMEosU0FBQTtjQUdMSixNQUFJLENBQUM3RCxZQUFZLENBQUMyRCxZQUFZLEVBQUFNLFNBQUEsQ0FBQTFKLEVBQU8sQ0FBQztZQUFDO1lBQUE7Y0FBQSxPQUFBMEosU0FBQSxDQUFBM04sSUFBQTtVQUFBO1FBQUEsR0FBQXdOLFFBQUE7TUFBQTtJQUUvQyxDQUFDO0lBRUQ5RCxZQUFZLFdBQVpBLFlBQVlBLENBQUNtRSxPQUFPLEVBQUUxTCxLQUFLLEVBQUU7TUFDekI2QyxPQUFPLENBQUM3QyxLQUFLLFVBQUF3QyxNQUFBLENBQVVrSixPQUFPLFFBQUsxTCxLQUFLLENBQUM7TUFDekMsSUFBTUgsT0FBTyxHQUFHRyxLQUFLLENBQUNILE9BQU8sSUFBSWtHLFFBQVEsQ0FBQ0UsZ0JBQWdCO01BRTFELElBQUl5RixPQUFPLENBQUMzSixRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDOUIsSUFBSSxDQUFDb0YsU0FBUyxDQUFDdEgsT0FBTyxDQUFDO01BQzNCLENBQUMsTUFBTTtRQUNIRCxnQkFBZ0IsQ0FBQ0MsT0FBTyxFQUFFLE9BQU8sQ0FBQztNQUN0QztJQUNKO0VBQ0osQ0FBQztBQUNMOztBQUVBO0FBQ0FMLE1BQU0sQ0FBQ2tHLGFBQWEsR0FBR0EsYUFBYSIsImlnbm9yZUxpc3QiOltdLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvc2VydmljZS9zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/service/service.js\n");
/***/ })
/******/ });
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
/******/ var __webpack_exports__ = {};
/******/ __webpack_modules__["./resources/js/service/service.js"]();
/******/
/******/ })()
;