76 lines
349 KiB
JavaScript
76 lines
349 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/moduleJs/moduleBase.js"
|
||
/*!*********************************************!*\
|
||
!*** ./resources/js/moduleJs/moduleBase.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 _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), 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); }\nvar ModuleBase = /*#__PURE__*/function () {\n function ModuleBase(options, data) {\n _classCallCheck(this, ModuleBase);\n _defineProperty(this, \"Opts\", {\n testMode: false,\n CSSSelectorContainer: '',\n CSSSelectorForm: '',\n token: null,\n URL: {\n getDataTableContent: null,\n checkReadyToSend: null,\n index: null,\n show: null,\n edit: null,\n create: null,\n store: null,\n update: null,\n destroy: null\n },\n dataTable: {\n orderDirective: [1, 'asc'],\n CSSSelector: null,\n advanceSearchParameter: {}\n }\n });\n _defineProperty(this, \"data\", null);\n _defineProperty(this, \"root\", this);\n this.Opts.CSSSelectorContainer = '.container' + this.constructor.name;\n this.Opts.CSSSelectorForm = '.' + this.constructor.name + 'Form';\n this.Opts.dataTable.CSSSelector = this.Opts.CSSSelectorContainer + ' .dataTable';\n this.root = this;\n if (data !== \"undefined\" || data != null) {\n this.data = data;\n }\n if (options != null) {\n $.extend(this.Opts, options);\n }\n }\n return _createClass(ModuleBase, [{\n key: \"init\",\n value: function init(options, data) {\n if (data !== \"undefined\" || data != null) {\n this.data = data;\n }\n if (options != null) {\n $.extend(this.Opts, options);\n }\n }\n }, {\n key: \"datatableRowActionButtonClick\",\n value: function datatableRowActionButtonClick(event, rootObj, options) {\n debug('call ModuleBase.datatableRowActionButtonClick');\n // debug(rootObj); // Removed to avoid circular structure issues in logging\n var node = $(event[0].currentTarget);\n var row = $(rootObj.Opts.dataTable.CSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof rootObj[actionName] === \"function\") {\n return rootObj[actionName](rowData, node);\n }\n }\n }, {\n key: \"datatableRowActionAttachment\",\n value: function datatableRowActionAttachment(rowData, node, options) {\n debug('call ModuleBase.datatableRowActionAttachment ');\n var fileName = 'downloadedFile';\n if (typeof options.defaultFileName !== \"undefined\") {\n fileName = options.defaultFileName;\n }\n if (rowData.fileUrl) {\n if (rowData.fileName) {\n fileName = rowData.fileName;\n }\n $.ajax({\n url: rowData.fileUrl,\n method: 'GET',\n xhrFields: {\n responseType: 'blob'\n },\n success: function success(data) {\n var a = document.createElement('a');\n var url = window.URL.createObjectURL(data);\n a.href = url;\n a.download = fileName;\n document.body.append(a);\n a.click();\n a.remove();\n window.URL.revokeObjectURL(url);\n }\n });\n } else {\n Toast.create({\n title: \"Hiba!\",\n message: 'Nincs csatolt fájl!',\n status: TOAST_STATUS.DANGER,\n timeout: 10000\n });\n }\n }\n }, {\n key: \"datatableRowActionView\",\n value: function datatableRowActionView(rowData, node, rootObj, options) {\n debug('call ModuleBase.datatableRowActionView');\n var ajaxUrl = rootObj.Opts.URL.show.replace('%id%', rowData.id);\n /*\r\n console.log(Opts.URL);\r\n */\n console.log(ajaxUrl);\n APP.loadMainContent(ajaxUrl, rootObj.initViewShow);\n console.log('ModuleBase.datatableRowActionEdit End');\n }\n }]);\n}();\nwindow.ModuleBase = ModuleBase;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNb2R1bGVCYXNlIiwib3B0aW9ucyIsImRhdGEiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJ0ZXN0TW9kZSIsIkNTU1NlbGVjdG9yQ29udGFpbmVyIiwiQ1NTU2VsZWN0b3JGb3JtIiwidG9rZW4iLCJVUkwiLCJnZXREYXRhVGFibGVDb250ZW50IiwiY2hlY2tSZWFkeVRvU2VuZCIsImluZGV4Iiwic2hvdyIsImVkaXQiLCJjcmVhdGUiLCJzdG9yZSIsInVwZGF0ZSIsImRlc3Ryb3kiLCJkYXRhVGFibGUiLCJvcmRlckRpcmVjdGl2ZSIsIkNTU1NlbGVjdG9yIiwiYWR2YW5jZVNlYXJjaFBhcmFtZXRlciIsIk9wdHMiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJyb290IiwiJCIsImV4dGVuZCIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwiaW5pdCIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJyb290T2JqIiwiZGVidWciLCJub2RlIiwiY3VycmVudFRhcmdldCIsInJvdyIsIkRhdGFUYWJsZSIsInBhcmVudHMiLCJyb3dEYXRhIiwiYWN0aW9uTmFtZSIsImNhcGl0YWxpemUiLCJkYXRhdGFibGVSb3dBY3Rpb25BdHRhY2htZW50IiwiZmlsZU5hbWUiLCJkZWZhdWx0RmlsZU5hbWUiLCJmaWxlVXJsIiwiYWpheCIsInVybCIsIm1ldGhvZCIsInhockZpZWxkcyIsInJlc3BvbnNlVHlwZSIsInN1Y2Nlc3MiLCJhIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwid2luZG93IiwiY3JlYXRlT2JqZWN0VVJMIiwiaHJlZiIsImRvd25sb2FkIiwiYm9keSIsImFwcGVuZCIsImNsaWNrIiwicmVtb3ZlIiwicmV2b2tlT2JqZWN0VVJMIiwiVG9hc3QiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJUT0FTVF9TVEFUVVMiLCJEQU5HRVIiLCJ0aW1lb3V0IiwiZGF0YXRhYmxlUm93QWN0aW9uVmlldyIsImFqYXhVcmwiLCJyZXBsYWNlIiwiaWQiLCJjb25zb2xlIiwibG9nIiwiQVBQIiwibG9hZE1haW5Db250ZW50IiwiaW5pdFZpZXdTaG93Il0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9tb2R1bGVKcy9tb2R1bGVCYXNlLmpzP2MyMGIiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgTW9kdWxlQmFzZSB7XHJcbiAgICBPcHRzID0ge1xyXG4gICAgICAgIHRlc3RNb2RlOiBmYWxzZSxcclxuICAgICAgICBDU1NTZWxlY3RvckNvbnRhaW5lcjogJycsXHJcbiAgICAgICAgQ1NTU2VsZWN0b3JGb3JtOiAnJyxcclxuICAgICAgICB0b2tlbjogbnVsbCxcclxuICAgICAgICBVUkw6IHtcclxuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgY2hlY2tSZWFkeVRvU2VuZDogbnVsbCxcclxuICAgICAgICAgICAgaW5kZXg6IG51bGwsXHJcbiAgICAgICAgICAgIHNob3c6IG51bGwsXHJcbiAgICAgICAgICAgIGVkaXQ6IG51bGwsXHJcbiAgICAgICAgICAgIGNyZWF0ZTogbnVsbCxcclxuICAgICAgICAgICAgc3RvcmU6IG51bGwsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogbnVsbCxcclxuICAgICAgICAgICAgZGVzdHJveTogbnVsbCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGFUYWJsZToge1xyXG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZTogWzEsICdhc2MnXSxcclxuICAgICAgICAgICAgQ1NTU2VsZWN0b3I6IG51bGwsXHJcbiAgICAgICAgICAgIGFkdmFuY2VTZWFyY2hQYXJhbWV0ZXI6e31cclxuICAgICAgICB9LFxyXG4gICAgfTtcclxuICAgIGRhdGEgPSBudWxsO1xyXG4gICAgcm9vdCA9IHRoaXM7XHJcblxyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgZGF0YSkge1xyXG4gICAgICAgIHRoaXMuT3B0cy5DU1NTZWxlY3RvckNvbnRhaW5lciA9ICcuY29udGFpbmVyJyArIHRoaXMuY29uc3RydWN0b3IubmFtZTtcclxuICAgICAgICB0aGlzLk9wdHMuQ1NTU2VsZWN0b3JGb3JtID0gJy4nICsgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgJ0Zvcm0nO1xyXG4gICAgICAgIHRoaXMuT3B0cy5kYXRhVGFibGUuQ1NTU2VsZWN0b3IgPSB0aGlzLk9wdHMuQ1NTU2VsZWN0b3JDb250YWluZXIgKyAnIC5kYXRhVGFibGUnO1xyXG4gICAgICAgIHRoaXMucm9vdCA9IHRoaXM7XHJcbiAgICAgICAgaWYgKGRhdGEgIT09IFwidW5kZWZpbmVkXCIgfHwgZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgJC5leHRlbmQodGhpcy5PcHRzLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdChvcHRpb25zLCBkYXRhKSB7XHJcbiAgICAgICAgaWYgKGRhdGEgIT09IFwidW5kZWZpbmVkXCIgfHwgZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgJC5leHRlbmQodGhpcy5PcHRzLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2soZXZlbnQscm9vdE9iaixvcHRpb25zKSB7XHJcbiAgICAgICAgZGVidWcoJ2NhbGwgTW9kdWxlQmFzZS5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaycpO1xyXG4gICAgICAgIC8vIGRlYnVnKHJvb3RPYmopOyAvLyBSZW1vdmVkIHRvIGF2b2lkIGNpcmN1bGFyIHN0cnVjdHVyZSBpc3N1ZXMgaW4gbG9nZ2luZ1xyXG4gICAgICAgIGxldCBub2RlID0gJChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93ID0gJChyb290T2JqLk9wdHMuZGF0YVRhYmxlLkNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcclxuICAgICAgICBsZXQgcm93RGF0YSA9IHJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWUgPSAnZGF0YXRhYmxlUm93QWN0aW9uJyArIG5vZGUuZGF0YSgnYnV0dG9udHlwZScpLmNhcGl0YWxpemUoKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJvb3RPYmpbYWN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcm9vdE9ialthY3Rpb25OYW1lXShyb3dEYXRhLCBub2RlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkYXRhdGFibGVSb3dBY3Rpb25BdHRhY2htZW50KHJvd0RhdGEsbm9kZSxvcHRpb25zKSB7XHJcbiAgICAgICAgZGVidWcoJ2NhbGwgTW9kdWxlQmFzZS5kYXRhdGFibGVSb3dBY3Rpb25BdHRhY2htZW50ICcpO1xyXG4gICAgICAgIGxldCBmaWxlTmFtZT0nZG93bmxvYWRlZEZpbGUnO1xyXG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zLmRlZmF1bHRGaWxlTmFtZSE9PSBcInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAgICAgZmlsZU5hbWU9b3B0aW9ucy5kZWZhdWx0RmlsZU5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHJvd0RhdGEuZmlsZVVybCl7XHJcbiAgICAgICAgICAgIGlmKHJvd0RhdGEuZmlsZU5hbWUpe1xyXG4gICAgICAgICAgICAgICAgZmlsZU5hbWU9cm93RGF0YS5maWxlTmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiByb3dEYXRhLmZpbGVVcmwsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgeGhyRmllbGRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGEuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICBhLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiSGliYSFcIiwgbWVzc2FnZTogJ05pbmNzIGNzYXRvbHQgZsOhamwhJywgc3RhdHVzOiBUT0FTVF9TVEFUVVMuREFOR0VSLCB0aW1lb3V0OiAxMDAwMCB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGRhdGF0YWJsZVJvd0FjdGlvblZpZXcocm93RGF0YSxub2RlLHJvb3RPYmosb3B0aW9ucykge1xyXG4gICAgICAgIGRlYnVnKCdjYWxsIE1vZHVsZUJhc2UuZGF0YXRhYmxlUm93QWN0aW9uVmlldycpO1xyXG4gICAgICAgIGxldCBhamF4VXJsID0gcm9vdE9iai5PcHRzLlVSTC5zaG93LnJlcGxhY2UoJyVpZCUnLCByb3dEYXRhLmlkKTtcclxuICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coT3B0cy5VUkwpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheFVybCk7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLCByb290T2JqLmluaXRWaWV3U2hvdyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ01vZHVsZUJhc2UuZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBFbmQnKTtcclxuICAgIH1cclxuXHJcbn1cclxud2luZG93Lk1vZHVsZUJhc2U9TW9kdWxlQmFzZTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0lBQU1BLFVBQVU7RUEwQlosU0FBQUEsV0FBWUMsT0FBTyxFQUFFQyxJQUFJLEVBQUU7SUFBQUMsZUFBQSxPQUFBSCxVQUFBO0lBQUFJLGVBQUEsZUF6QnBCO01BQ0hDLFFBQVEsRUFBRSxLQUFLO01BQ2ZDLG9CQUFvQixFQUFFLEVBQUU7TUFDeEJDLGVBQWUsRUFBRSxFQUFFO01BQ25CQyxLQUFLLEVBQUUsSUFBSTtNQUNYQyxHQUFHLEVBQUU7UUFDREMsbUJBQW1CLEVBQUUsSUFBSTtRQUN6QkMsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QkMsS0FBSyxFQUFFLElBQUk7UUFDWEMsSUFBSSxFQUFFLElBQUk7UUFDVkMsSUFBSSxFQUFFLElBQUk7UUFDVkMsTUFBTSxFQUFFLElBQUk7UUFDWkMsS0FBSyxFQUFFLElBQUk7UUFDWEMsTUFBTSxFQUFFLElBQUk7UUFDWkMsT0FBTyxFQUFFO01BQ2IsQ0FBQztNQUNEQyxTQUFTLEVBQUU7UUFDUEMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMxQkMsV0FBVyxFQUFFLElBQUk7UUFDakJDLHNC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QUNBbkIsQ0FBQyxDQUFDc0IsSUFBSSxDQUFDO1VBQ0hDLEdBQUcsRUFBRVIsT0FBTyxDQUFDTSxPQUFPO1VBQ3BCRyxNQUFNLEVBQUUsS0FBSztVQUNiQyxTQUFTLEVBQUU7WUFDUEMsWUFBWSxFQUFFO1VBQ2xCLENBQUM7VUFDREMsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQVlwRCxJQUFJLEVBQUU7WUFDckIsSUFBSXFELENBQUMsR0FBR0MsUUFBUSxDQUFDQyxhQUFhLENBQUMsR0FBRyxDQUFDO1lBQ25DLElBQUlQLEdBQUcsR0FBR1EsTUFBTSxDQUFDakQsR0FBRyxDQUFDa0QsZUFBZSxDQUFDekQsSUFBSSxDQUFDO1lBQzFDcUQsQ0FBQyxDQUFDSyxJQUFJLEdBQUdWLEdBQUc7WUFDWkssQ0FBQyxDQUFDTSxRQUFRLEdBQUdmLFFBQVE7WUFDckJVLFFBQVEsQ0FBQ00sSUFBSSxDQUFDQyxNQUFNLENBQUNSLENBQUMsQ0FBQztZQUN2QkEsQ0FBQyxDQUFDUyxLQUFLLENBQUMsQ0FBQztZQUNUVCxDQUFDLENBQUNVLE1BQU0sQ0FBQyxDQUFDO1lBQ1ZQLE1BQU0sQ0FBQ2pELEdBQUcsQ0FBQ3lELGVBQWUsQ0FBQ2hCLEdBQUcsQ0FBQztVQUNuQztRQUNKLENBQUMsQ0FBQztNQUVOLENBQUMsTUFBSTtRQUNEaUIsS0FBSyxDQUFDcEQsTUFBTSxDQUFDO1VBQUVxRCxLQUFLLEVBQUUsT0FBTztVQUFFQyxPQUFPLEVBQUUscUJBQXFCO1VBQUVDLE1BQU0sRUFBRUMsWUFBWSxDQUFDQyxNQUFNO1VBQUVDLE9BQU8sRUFBRTtRQUFNLENBQUMsQ0FBQztNQUNqSDtJQUVKO0VBQUM7SUFBQTNDLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUEyQyxzQkFBc0JBLENBQUNoQyxPQUFPLEVBQUNMLElBQUksRUFBQ0YsT0FBTyxFQUFDbEMsT0FBTyxFQUFFO01BQ2pEbUMsS0FBSyxDQUFDLHdDQUF3QyxDQUFDO01BQy9DLElBQUl1QyxPQUFPLEdBQUd4QyxPQUFPLENBQUNaLElBQUksQ0FBQ2QsR0FBRyxDQUFDSSxJQUFJLENBQUMrRCxPQUFPLENBQUMsTUFBTSxFQUFFbEMsT0FBTyxDQUFDbUMsRUFBRSxDQUFDO01BQy9EO0FBQ1I7QUFDQTtNQUNRQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0osT0FBTyxDQUFDO01BQ3BCSyxHQUFHLENBQUNDLGVBQWUsQ0FBQ04sT0FBTyxFQUFFeEMsT0FBTyxDQUFDK0MsWUFBWSxDQUFDO01BQ2xESixPQUFPLENBQUNDLEdBQUcsQ0FBQyx1Q0FBdUMsQ0FBQztJQUN4RDtFQUFDO0FBQUE7QUFHTHJCLE1BQU0sQ0FBQzFELFVBQVUsR0FBQ0EsVUFBVSIsImlnbm9yZUxpc3QiOltdLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvbW9kdWxlSnMvbW9kdWxlQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/moduleJs/moduleBase.js\n\n}");
|
||
|
||
/***/ },
|
||
|
||
/***/ "./resources/js/moduleJs/order.js"
|
||
/*!****************************************!*\
|
||
!*** ./resources/js/moduleJs/order.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 _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), 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 _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nwindow.OrderModulDefault = {\n actionFunction: function actionFunction() {}\n};\nvar DataModelOrder = /*#__PURE__*/function (_DataModel) {\n /*\n * Constructor\n */\n function DataModelOrder(data, options) {\n var _this;\n _classCallCheck(this, DataModelOrder);\n _this = _callSuper(this, DataModelOrder, [data, options]);\n if (typeof _this.productSelected === \"undefined\") {\n _this.productSelected = {};\n }\n if (typeof _this.productComment === \"undefined\") {\n _this.productComment = {};\n }\n console.log(_this.constructor.name + ' constructor called');\n return _this;\n }\n _inherits(DataModelOrder, _DataModel);\n return _createClass(DataModelOrder);\n}(DataModel);\n;\nwindow.DataModelOrder = DataModelOrder;\nwindow.Stepper = function () {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n complete: ['supplier'],\n available: ['supplier', 'parameter', 'productSelect', 'invoice', 'send'],\n enable: ['supplier', 'invoice'],\n load: [],\n excludeLoaded: ['invoice', 'send'],\n loaded: [],\n active: false,\n URL: {\n create: ''\n },\n UrlData: false,\n onAfterLoad: function onAfterLoad() {},\n onAfterActivate: function onAfterActivate() {},\n autoCallback: {\n 'invoice': {\n onAfterActivate: function onAfterActivate() {}\n },\n 'send': {\n onAfterActivate: function onAfterActivate() {}\n }\n },\n nowLoaded: false\n };\n var root = this;\n /*\n * Constructor\n */\n this.construct = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.init = function (options) {\n $.extend(Opts, options);\n debug(Opts);\n $('.step').each(function () {\n var stepName = $(this).data('stepname');\n if (Opts.complete.includes(stepName)) {\n root.setCompleted(stepName);\n }\n if (Opts.enable.includes(stepName)) {\n root.setEnabled(stepName);\n }\n if (Opts.load.includes(stepName)) {\n root.loadStepContent(stepName);\n }\n if (Opts.active === stepName) {\n root.setActive(stepName);\n }\n });\n root.bindClickAction();\n };\n this.bindClickAction = function () {\n var stepClickButtons = $('.stepClick');\n stepClickButtons.off('click');\n stepClickButtons.on('click', root.stepClick);\n };\n this.setCompleted = function (stepName) {\n console.log(stepName + ' completed');\n $('.step[data-stepName=\"' + stepName + '\"]').addClass('completed');\n };\n this.unsetCompleted = function (stepName) {\n console.log(stepName + ' Uncompleted');\n $('.step[data-stepName=\"' + stepName + '\"]').removeClass('completed');\n Opts.complete = arrayRemove(Opts.complete, stepName);\n };\n this.unsetEnabled = function (stepName) {\n console.log(stepName + ' Un enabled');\n $('.click' + stepName).contents().unwrap();\n Opts.enable = arrayRemove(Opts.enable, stepName);\n };\n this.setEnabled = function (stepName) {\n console.log(stepName + ' enabled');\n var stepItem = $('.step[data-stepName=\"' + stepName + '\"]');\n stepItem.html('<a class=\"stepClick click' + stepName + '\" data-stepName=\"' + stepName + '\" href=\"#\">' + stepItem.html() + '</a>');\n root.bindClickAction();\n //$('.stepClick').click(root.stepClick);\n };\n this.addEnabled = function (stepName) {\n if (!Opts.enable.includes(stepName)) {\n Opts.enable.push(stepName);\n }\n root.setEnabled(stepName);\n };\n this.addCompleted = function (stepName) {\n if (!Opts.complete.includes(stepName)) {\n Opts.complete.push(stepName);\n }\n root.setCompleted(stepName);\n root.bindClickAction();\n };\n this.loadStepContent = function (stepName) {\n var data = {\n 'type': stepName\n };\n $.extend(data, Opts.UrlData);\n $.ajax({\n async: true,\n type: \"GET\",\n url: Opts.URL.create,\n data: data,\n cache: false,\n success: function success(result) {\n var container = $('.SC' + stepName.capitalize());\n if ($.inArray(stepName, Opts.excludeLoaded) == -1) {\n Opts.loaded.push(stepName);\n } else {\n console.log('excluded View');\n }\n container.html(result);\n if (Opts.nowLoaded) {\n Opts.nowLoaded(stepName);\n }\n Opts.onAfterLoad();\n }\n });\n };\n this.clearLoaded = function () {\n Opts.loaded = ['supplier'];\n $('.stepContainer').each(function () {\n /*\n console.log(this.classList);\n console.log(this.classList.contains('SCSupplier'));\n console.log($(this).attr('class'));\n */\n if (!this.classList.contains('SCSupplier')) {\n $(this).html('');\n }\n });\n };\n this.setActiveFinish = function (stepName) {\n var container = $('.SC' + stepName.capitalize());\n if (stepName === 'productSelect') {\n $('.containerStepper').addClass('activeSideBar');\n } else {\n $('.containerStepper').removeClass('activeSideBar');\n }\n debug('setActiveFinish show:' + stepName);\n container.show();\n Opts.nowLoaded = false;\n root.active = stepName;\n Opts.onAfterActivate();\n if (typeof Opts.autoCallback[stepName] !== 'undefined') {\n Opts.autoCallback[stepName].onAfterActivate();\n }\n };\n this.setActive = function (stepName) {\n $('.stepContainer').hide();\n if (!Opts.loaded.includes(stepName)) {\n root.loadStepContent(stepName);\n Opts.nowLoaded = this.setActiveFinish;\n } else {\n this.setActiveFinish(stepName);\n }\n };\n this.stepClick = function (event) {\n event.preventDefault();\n var stepName = $(event.currentTarget).data('stepname');\n console.log('setActive:' + stepName);\n root.setActive(stepName);\n };\n};\nwindow.OrderModule = function () {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n testMode: false,\n needStepper: true,\n CSSSelectorForm: '.orderParameterForm',\n defaultDeliveryDate: '',\n dataSyncPauseTime: 500,\n token: null,\n URL: {\n root: null,\n getDataTableContentProductList: null,\n checkReadyToSend: null,\n index: null,\n show: null,\n edit: null,\n create: null,\n store: null,\n update: null,\n destroy: null,\n toggleFavorites: null\n }\n };\n var PublicVar = {};\n var PublicVar2 = {\n 'asd': '21'\n };\n var ApiToken = null;\n var Order = null;\n var root = this;\n var viewInicialized = [];\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.clickOrderEdit = function (data) {\n debug('clickEdit');\n debug(data);\n var ajaxUrl = Opts.URL.edit.replace('%id%', data.id);\n APP.loadMainContent(ajaxUrl);\n /* let ajaxData={};\n ajaxData._token=Opts.token;\n $.extend(ajaxData,Order);\n let ajaxUrl=Opts.URL.edit.replace('%id%',data.id);\n $.ajax({\n url: ajaxUrl,\n method:'GET',\n data:ajaxData,\n success:function (response) {\n if(response.success){\n let orderData=response.data;\n orderData.supplierId=orderData.supplier_id;\n delete(orderData.supplier_id);\n root.initOrder(orderData);\n root.initStepper();\n //root.afterOrderSetSupplierOk(data.data);\n }\n }\n });*/\n };\n this.afterOrderDeleted = function (data) {\n if (data.success == true) {\n debug('Order delete success');\n APP.loadMainContent(Opts.URL.index);\n } else {\n Toast.create({\n title: \"Error deleted !\",\n message: '',\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n }\n };\n this.clickOrderDeleteConfirmed = function (event) {\n debug('clickOrderDeleteConfirmed');\n debug(event);\n debug(event.data);\n $('#dialogModal').modal('hide');\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var ajaxUrl = Opts.URL.destroy.replace('%id%', event.data.id);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: root.afterOrderDeleted\n //error:ajaxErrorHandler\n });\n };\n this.initViewOrderSelect = function () {\n debug('called initViewOrderSelect ');\n $('.ordersSelectTable button').off('click');\n $('.ordersSelectTable button').on('click', function () {\n var action = $(this).data('action');\n var orderId = $($(this).closest('tr')[0]).data('orderid');\n debug(action);\n debug(orderId);\n if (action == 'delete') {\n $('#dialogModal').on('show.bs.modal', function (event) {\n // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).\n // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.\n var modal = $(this);\n modal.find('.modal-title').text('Megerősítés ');\n modal.find('.modal-body').text('Biztosan törli a megrendelést?');\n modal.find('.buttonYes').off('click');\n modal.find('.buttonYes').on('click', {\n id: orderId\n }, root.clickOrderDeleteConfirmed);\n });\n $('#dialogModal').modal('show');\n } else {\n root.clickOrderEdit({\n id: orderId\n });\n }\n });\n $('.buttonNew').off('click');\n $('.buttonNew').on('click', function () {\n APP.loadMainContent(Opts.URL.index, 'force=true');\n });\n };\n this.initStepper = function () {\n debug(Order.getData());\n viewInicialized = [];\n $('.statusNamePlace').text('Nincs elküldve');\n $('.statusNamePlace').addClass('statusBlink');\n root.setDeliveryDate('-');\n root.setSupplier('-');\n var unEnabled = ['parameter', 'productSelect', 'invoice', 'send'];\n $.each(unEnabled, function (index, value) {\n root.Stepper.unsetEnabled(value);\n root.Stepper.unsetCompleted(value);\n });\n debug(root.Stepper.getOpts()['available']);\n debug(Order.getData()['orderStatus']);\n var stepActive = 'supplier';\n var stepComplete = ['supplier'];\n var stepEnable = [];\n var stepOnAfterActivate = function stepOnAfterActivate() {};\n var avalaibleSteps = root.Stepper.getOpts()['available'];\n var stepUrlData = false;\n var stepAutoCallback = [];\n var _iterator = _createForOfIteratorHelper(avalaibleSteps),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _stepName = _step.value;\n stepOnAfterActivate = this['initView' + _stepName.capitalize()];\n var item = {};\n item['onAfterActivate'] = stepOnAfterActivate;\n stepAutoCallback[_stepName] = item;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n debug(stepAutoCallback);\n debug(Order.getData()['id']);\n if (Order.getData()['id'] > 0) {\n debug('hajra');\n debug(Order.getData());\n if (Order.getData()['deliveryDate']) {\n root.setDeliveryDate(Order.getData()['deliveryDate']);\n /*\n @todo: weekly-t beallitani\n */\n }\n if (Order.getData()['supplierName']) {\n root.setSupplier(Order.getData()['supplierName']);\n }\n stepUrlData = {\n 'supplierId': Order.supplierId,\n id: Order.id\n };\n var _iterator2 = _createForOfIteratorHelper(avalaibleSteps),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var stepName = _step2.value;\n console.log(stepName);\n stepComplete.push(stepName);\n stepEnable.push(stepName);\n if (Order.getData()['orderStatus'] == stepName) {\n stepActive = stepName;\n /*\n debug('initView'+stepName.capitalize());\n if(stepName!=='invoice' && stepName!=='send'){\n stepOnAfterActivate=this['initView'+stepName.capitalize()];\n }else{\n stepOnAfterActivate=function (){};\n }\n */\n break;\n }\n }\n\n /*\n //refactored for loop\n var BreakException = {};\n try {\n avalaibleSteps.forEach(function(stepName) {\n console.log(stepName);\n stepComplete.push(stepName);\n stepEnable.push(stepName);\n if(Order.getData()['orderStatus']==stepName){\n stepActive=stepName;\n throw BreakException;\n }\n \n });\n } catch (e) {\n if (e !== BreakException) throw e;\n }*/\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n root.Stepper.init({\n complete: stepComplete,\n enable: stepEnable,\n loaded: [],\n active: stepActive,\n URL: {\n create: Opts.URL.create\n },\n UrlData: stepUrlData,\n onAfterActivate: stepOnAfterActivate,\n autoCallback: stepAutoCallback\n /*{\n invoice: {\n onAfterActivate:root.initViewInvoice\n },\n send: {\n onAfterActivate:root.initViewSend\n },\n }*/\n });\n };\n this.initOrder = function (data) {\n Order = new DataModelOrder(data);\n };\n this.init = function (options) {\n debug('OrderModul init called');\n $.extend(Opts, window.OrderModulDefault, options);\n Order = new DataModelOrder();\n if (Opts.needStepper) {\n if (typeof this.Stepper == 'undefined') {\n this.Stepper = new Stepper();\n }\n }\n if (Opts.testMode) {\n return root.testMode();\n }\n };\n this.setSupplier = function (supplierName, supplierId) {\n if (supplierName) {\n $('.supplierNamePlace').text(supplierName);\n }\n if (supplierId) {\n Order.setData({\n supplierId: supplierId\n });\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': supplierId\n }\n });\n }\n };\n this.setDeliveryDate = function (dateText, dateTextTo) {\n var dateTextHuman = dateText.replaceAll('-', '.') + '.';\n if (dateTextHuman.length < 5) {\n $('.deliveryDatePlace').text(dateText);\n return;\n }\n if (dateTextTo) {\n dateTextHuman += ' - ' + dateTextTo.replaceAll('-', '.') + '.';\n }\n $(Opts.CSSSelectorForm + ' .selectedDateText').text(dateTextHuman);\n $('.deliveryDatePlace').text(dateTextHuman);\n $(Opts.CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(dateText);\n };\n this.getData = function () {\n return Order;\n };\n this.setSupplierCompleted = function () {\n console.log('bingo');\n root.initViewParameter();\n };\n this.afterOrderSetSupplierOk = function (data) {\n Toast.create({\n title: \"Supplier selected !\",\n message: data.supplier.name,\n status: TOAST_STATUS.INFO,\n timeout: 5000\n });\n root.setSupplier(data.supplier.name, data.supplier.id);\n Order.setData({\n id: data.id\n });\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n id: Order.id\n }\n });\n //root.Stepper.setOpts({onAfterLoad:root.setSupplierCompleted})\n root.Stepper.setEnabled('parameter');\n root.Stepper.addCompleted('parameter');\n root.Stepper.setCompleted('parameter');\n root.Stepper.setActive('parameter');\n };\n this.initViewSupplier = function () {\n debug('call initViewSupplier');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n $('.supplierItem').off('click');\n $('.supplierItem').on('click', function (event) {\n console.log(Order.getData());\n event.preventDefault();\n var supplierId = $(event.currentTarget).data('id');\n var supplierName = $(event.currentTarget).find('h5.card-title').text();\n if (typeof Order.supplierId == 'undefined') {\n //new order\n\n var ajaxData = {};\n ajaxData._token = Opts.token;\n ajaxData.supplierId = supplierId;\n ajaxData.storeType = 'supplierSelect';\n $.extend(ajaxData, Order);\n $.ajax({\n url: Opts.URL.store,\n method: 'POST',\n data: ajaxData,\n success: function success(data) {\n if (data.success) {\n root.afterOrderSetSupplierOk(data.data);\n }\n }\n });\n //Order.setData({supplierId:supplierId});\n } else {\n //ide kellene egy jo kis kerdes\n if (Order.supplierId != supplierId) {\n Toast.create({\n title: \"Supplier change to!\",\n message: supplierName,\n status: TOAST_STATUS.WARNING,\n timeout: 5000\n });\n root.Stepper.clearLoaded();\n Order = new DataModelOrder();\n //Order.setData({supplierId:supplierId});\n }\n }\n return;\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n\n //$('.supplierNamePlace').text(supplierName);\n // removed by dead control flow\n\n // removed by dead control flow\n\n //@todo:ide kell egy mentes!\n //@todo:mentes eredemenyekeppen lehet valtani\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n });\n };\n this.checkContactNameField = function () {\n var CSSSelectorForm = '.orderParameterForm';\n var node = $(CSSSelectorForm + ' input[name=contactName]');\n if (node.val().length < 2) {\n node.removeClass('is-valid');\n node.addClass('is-invalid');\n return false;\n } else {\n node.addClass('is-valid');\n node.removeClass('is-invalid');\n return true;\n }\n };\n this.sendOrderDataToServer = function (updateType, callback, errorCallback) {\n var ajaxData = {};\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (Order.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', Order.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData._method = 'PUT';\n }\n ajaxData._token = Opts.token;\n ajaxData.updateType = updateType;\n $.extend(ajaxData, Order);\n debug(Order);\n debug(ajaxData);\n debug('ajaxUrl:' + ajaxUrl);\n ajaxData = jsonToFormData(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n success: function success(data) {\n debug('ajax returned data');\n debug(data);\n if (data.success) {\n //root.afterOrderSetSupplierOk(data.data);\n callback(data);\n }\n },\n error: function error(xhr, ajaxOptions, thrownError) {\n ajaxErrorHandler(xhr, ajaxOptions, thrownError);\n if (typeof errorCallback != 'undefined') {\n errorCallback(xhr.responseJSON);\n }\n }\n });\n };\n this.afterOrderSetParameterOk = function (data) {\n debug('called afterOrderSetParameterOk');\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n 'id': Order.id\n }\n });\n //root.Stepper.setOpts({onAfterLoad:root.setParameterCompleted})\n root.Stepper.setEnabled('productSelect');\n root.Stepper.addCompleted('productSelect');\n root.Stepper.setCompleted('productSelect');\n root.Stepper.setActive('productSelect');\n };\n this.selectCurrentWeek = function () {\n console.error('selectCurrentWeek');\n console.error($('.ui-datepicker').find('.ui-datepicker-current-day a'));\n $('.ui-datepicker').find('.ui-datepicker-current-selected-weekday a').addClass('ui-state-active');\n };\n this.weekHover = function () {\n console.error('hover Active');\n $('.ui-datepicker-calendar tr').off('mousemove');\n $('.ui-datepicker-calendar tr').off('mouseleave');\n $('.ui-datepicker-calendar tr').on('mousemove', function () {\n $(this).find('td a').addClass('ui-state-hover');\n });\n $('.ui-datepicker-calendar tr').on('mouseleave', function () {\n $(this).find('td a').removeClass('ui-state-hover');\n });\n };\n this.weekHoverSlow = function () {\n console.error('weekHoverSlow');\n if ($('.ui-datepicker-calendar tr').length < 1) {\n setTimeout(root.weekHoverSlow, 1);\n return;\n }\n root.weekHover();\n };\n this.initDatePicker = function (type) {\n console.error('asdasdadad');\n console.log('tipus' + type);\n var CSSSelectorForm = '.orderParameterForm';\n var startDate = new Date('1900-01-01');\n var endDate = new Date('1900-01-02');\n $(CSSSelectorForm + ' .datePicker').datepicker(\"destroy\");\n if (type == 'weekly') {\n $(CSSSelectorForm + ' .datePicker').datepicker({\n showOtherMonths: true,\n selectOtherMonths: true,\n showWeek: true,\n dateFormat: 'yy-mm-dd',\n firstDay: 1,\n minDate: new Date(),\n afterShow: function afterShow(dateText, inst) {\n root.weekHover();\n root.selectCurrentWeek();\n },\n onSelect: function onSelect(dateText, inst) {\n var date = $(this).datepicker('getDate');\n startDate = new getMonday(date);\n endDate = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay() + 7);\n root.setDeliveryDate($.datepicker.formatDate('yy-mm-dd', startDate), $.datepicker.formatDate('yy-mm-dd', endDate));\n },\n beforeShow: function beforeShow() {\n console.group('beforeShow');\n console.log(startDate);\n console.log(endDate);\n //root.weekHoverSlow();\n console.groupEnd();\n },\n beforeShowDay: function beforeShowDay(date) {\n console.group('beforeShowDay');\n console.log(date.toLocaleDateString('hu-Hu'));\n var cssClass = '';\n if (date >= startDate && date <= endDate) {\n console.error(date.toLocaleDateString('hu-Hu'));\n cssClass = 'ui-datepicker-current-selected-weekday';\n //cssClass = 'ui-state-active';\n }\n console.log(cssClass);\n console.groupEnd();\n return [true, cssClass];\n },\n onChangeMonthYear: function onChangeMonthYear(year, month, inst) {\n //root.selectCurrentWeek();\n }\n });\n } else {\n // Szállítási korlátozás adatok betöltése (csak ha hasDeliveryConstraint = true)\n var availableDates = [];\n var nextDeliveryDate = null;\n var hasDeliveryConstraint = false;\n var holidays = [];\n var workingDays = [];\n var datepickerInput = $(CSSSelectorForm + ' .datePicker');\n var calendarUrl = datepickerInput.data('delivery-calendar-url');\n var supplierId = datepickerInput.data('supplier-id');\n var profitCenterId = datepickerInput.data('profit-center-id');\n if (calendarUrl && supplierId && profitCenterId) {\n $.ajax({\n url: calendarUrl,\n data: {\n supplierId: supplierId,\n profitCenterId: profitCenterId,\n orderDateTime: new Date().toISOString()\n },\n async: false,\n success: function success(data) {\n hasDeliveryConstraint = data.hasDeliveryConstraint || false;\n // Ünnepnapok és áthelyezett munkanapok – mindig betöltjük\n holidays = (data.holidays || []).map(function (h) {\n return {\n date: h.date,\n description: h.description\n };\n });\n workingDays = (data.workingDays || []).map(function (w) {\n return {\n date: w.date,\n description: w.description\n };\n });\n if (hasDeliveryConstraint) {\n availableDates = data.availableDates || [];\n nextDeliveryDate = data.nextDeliveryDate || null;\n }\n // Ha nincs szállítási korlátozás, az availableDates és nextDeliveryDate\n // üres marad – a datepicker az eredeti módon viselkedik\n }\n });\n }\n if (hasDeliveryConstraint && nextDeliveryDate) {\n // Következő szállítási nap beállítása alapértelmezettként\n root.setDeliveryDate(nextDeliveryDate);\n $(CSSSelectorForm + ' .selectedDateText').text(nextDeliveryDate);\n $(CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(nextDeliveryDate);\n $('.deliveryDatePlace').text(nextDeliveryDate.replaceAll('-', '.') + '.');\n }\n\n // Szín jelmagyarázat megjelenítése csak szállítási korlátozás esetén\n if (hasDeliveryConstraint) {\n $('#deliveryDateLegend').show();\n }\n var datepickerOpts = {\n dateFormat: 'yy-mm-dd',\n minDate: hasDeliveryConstraint && nextDeliveryDate ? new Date(nextDeliveryDate) : new Date(),\n onSelect: function onSelect(dateText) {\n $(CSSSelectorForm + ' .selectedDateText').text(dateText);\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\n $(CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(dateText);\n }\n };\n\n // beforeShowDay: mindig aktív ha van munkanaptár adat vagy hasDeliveryConstraint\n datepickerOpts.beforeShowDay = function (date) {\n var dateStr = $.datepicker.formatDate('yy-mm-dd', date);\n var holidayEntry = holidays.find(function (h) {\n return h.date === dateStr;\n });\n var workingDayEntry = workingDays.find(function (w) {\n return w.date === dateStr;\n });\n var isDelivery = hasDeliveryConstraint && availableDates.includes(dateStr);\n var cssClasses = [];\n var tooltip = '';\n var selectable = true;\n if (holidayEntry) {\n cssClasses.push('work-calendar-holiday');\n tooltip = 'Ünnepnap' + (holidayEntry.description ? ': ' + holidayEntry.description : '');\n } else if (workingDayEntry) {\n cssClasses.push('work-calendar-working-day');\n tooltip = 'Áthelyezett munkanap' + (workingDayEntry.description ? ': ' + workingDayEntry.description : '');\n }\n if (hasDeliveryConstraint) {\n if (isDelivery) {\n cssClasses.push('delivery-day-available');\n if (!tooltip) tooltip = 'Szállítási nap';\n } else {\n cssClasses.push('delivery-day-unavailable');\n if (!tooltip) tooltip = 'Nem szállítási nap';\n selectable = false;\n }\n }\n // Ha ünnepnap és hasDeliveryConstraint nincs bekapcsolva, az ünnepnap is letiltandó\n if (holidayEntry && !hasDeliveryConstraint) {\n selectable = false;\n }\n return [selectable, cssClasses.join(' '), tooltip];\n };\n $(CSSSelectorForm + ' .datePicker').datepicker(datepickerOpts);\n }\n };\n this.callChangeOrderType = function () {\n console.log(this);\n console.log(this.value);\n root.initDatePicker(this.value);\n //enum('daily', 'weekly')\n /*let CSSSelectorForm='.orderParameterForm';\n let node=$(CSSSelectorForm+' input[name=contactName]');\n if(node.val().length<2){\n node.removeClass('is-valid');\n node.addClass('is-invalid');\n return false;\n }else{\n node.addClass('is-valid');\n node.removeClass('is-invalid');\n return true;\n }\n */\n };\n this.initViewParameter = function () {\n debug('call initViewParameter');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n var CSSSelectorForm = '.orderParameterForm';\n $(CSSSelectorForm + ' .datePickerClick').click(function () {\n $(CSSSelectorForm + ' .datePicker').datepicker('show');\n });\n $(CSSSelectorForm + ' .orderParameterDeliveryAddress').select2({}).show();\n $(CSSSelectorForm + ' input[name=contactName]').off('blur');\n $(CSSSelectorForm + ' input[name=contactName]').off('keyup');\n $(CSSSelectorForm + ' input[name=contactName]').on('blur', root.checkContactNameField);\n $(CSSSelectorForm + ' input[name=contactName]').on('keyup', root.checkContactNameField);\n $(CSSSelectorForm + ' input[name=orderType]').off('change');\n $(CSSSelectorForm + ' input[name=orderType]').on('change', root.callChangeOrderType);\n $(CSSSelectorForm + ' .orderParameterNextButton').off('click');\n if (Order.getData()['id'] > 0) {\n if (Order.getData()['orderType'] == 'weekly') {\n root.initDatePicker(Order.getData()['orderType']);\n $(CSSSelectorForm + \" input[name=orderType][value=\" + Order.getData()['orderType'] + \"]\").prop('checked', true);\n var endDate = new Date(Order.getData()['deliveryDate']);\n endDate.setDate(endDate.getDate() + 6);\n root.setDeliveryDate(Order.getData()['deliveryDate'], $.datepicker.formatDate('yy-mm-dd', endDate));\n root.initDatePicker('weekly');\n } else {\n if (Order.getData()['deliveryDate']) {\n root.setDeliveryDate(Order.getData()['deliveryDate']);\n }\n root.initDatePicker('daily');\n }\n if (Order.getData()['contactName']) {\n $(CSSSelectorForm + ' input[name=contactName]').val(Order.getData()['contactName']);\n }\n if (Order.getData()['note']) {\n $(CSSSelectorForm + ' textarea[name=note]').val(Order.getData()['note']);\n }\n if (Order.getData()['deliveryAddressId']) {\n console.log($(CSSSelectorForm + ' select[name=deliveryAddressId]'));\n $(CSSSelectorForm + ' select[name=deliveryAddressId]').val(Order.getData()['deliveryAddressId']);\n }\n if (Order.getData()['customNotificationEmail']) {\n console.log($(CSSSelectorForm + ' select[name=customNotificationEmail]'));\n $(CSSSelectorForm + ' select[name=customNotificationEmail]').val(Order.getData()['customNotificationEmail']);\n }\n } else {\n root.initDatePicker('daily');\n }\n $(CSSSelectorForm + ' .orderParameterDeliveryAddress').select2({}).show();\n $(CSSSelectorForm + ' .orderParameterCustomNotificationEmail').select2({}).show();\n $(CSSSelectorForm).submit(function (event) {\n event.preventDefault();\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n debug('validaton false');\n event.stopPropagation();\n return;\n } else {\n debug('validaton ok');\n //do your ajax submition here\n }\n $('.deliveryDatePlace').text($(CSSSelectorForm + ' input[name=deliveryDate]').val().replaceAll('-', '.') + '.');\n Order.setData({\n contactName: $(CSSSelectorForm + ' input[name=contactName]').val(),\n note: $(CSSSelectorForm + ' textarea[name=note]').val(),\n orderType: $(CSSSelectorForm + ' input:checked[name=orderType]').val(),\n deliveryDate: $(CSSSelectorForm + ' input[name=deliveryDate]').val(),\n deliveryAddressId: $(CSSSelectorForm + ' select[name=deliveryAddressId]').val(),\n deliveryAddress: $(CSSSelectorForm + ' select[name=deliveryAddress]').val(),\n customNotificationEmail: $(CSSSelectorForm + ' select[name=customNotificationEmail]').val()\n });\n console.group('parameter form submit');\n console.error($(CSSSelectorForm + ' input:checked[name=orderType]').val());\n console.error($(CSSSelectorForm + ' input[name=deliveryDate]').val());\n debug(Order.getData());\n console.groupEnd();\n root.sendOrderDataToServer('parameter', root.afterOrderSetParameterOk);\n });\n };\n this.blank = function () {};\n this.setParameterCompleted = function () {\n console.log('setParameterCompleted called');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n //root.initViewProductSelect()\n };\n this.bindRowFavoritesAction = function () {\n $('.buttonItemFavorites').off('click');\n $('.buttonItemFavorites').on('click', function () {\n var productId = $(this).data('id');\n console.log(productId);\n var ajaxUrl = Opts.URL.toggleFavorites.replace('%id%', productId);\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var button = this;\n console.log(ajaxUrl);\n $.ajax({\n url: ajaxUrl,\n method: 'POST',\n data: ajaxData,\n success: function success(response) {\n if (response.success) {\n if (response.status) {\n console.log('true');\n $(button).addClass('btn-warning');\n $(button).removeClass('btn-light');\n } else {\n $(button).removeClass('btn-warning');\n $(button).addClass('btn-light');\n console.log('false');\n }\n }\n }\n });\n /*\n $(this).toggleClass('btn-warning');\n $(this).toggleClass('btn-light');\n */\n });\n };\n this.bindRowDescriptionAction = function () {\n $('textarea.orderItemComment').on('change', function () {\n var comment = $(this).val();\n var productId = $(this).data('id');\n var productComment = Order.getData('productComment');\n if (productComment !== null) {\n if (typeof productComment[productId] == 'undefined' && comment.length === 0) {\n return;\n }\n if (productComment[productId] === comment) {\n return;\n }\n }\n productComment[productId] = comment;\n if (comment.length === 0) {\n delete Order.productComment[productId];\n }\n Order.productComment = productComment;\n queueAjax.push(Date.now());\n root.syncOrderDataToServer();\n });\n };\n this.productSelectDatatablesRowFormatter = function (d) {\n // `d` is the original data object for the row\n /**\n @todo: felszedni es updatelni az adott termek memojat az orderban\n */\n console.group('productSelectDatatablesRowFormatter');\n console.log(d);\n var templateData = d;\n templateData.comment = '';\n // debug(Order);\n if (Order.productComment && Order.productComment !== null) {\n debug(_typeof(Order.productComment[d.id]));\n if (typeof Order.productComment[d.id] != 'undefined' && Order.productComment[d.id].length > 0) {\n templateData.comment = Order.productComment[d.id];\n }\n }\n /** @typedef {boolean} d.favorites */\n if (d.favorites === true) {\n templateData.btnFavoritesClass = 'btn-warning';\n } else {\n templateData.btnFavoritesClass = 'btn-light';\n }\n var template = $('template[data-name=\"orderProductSelectDetails\"]').html();\n templateData.weekly = false;\n if (Order.getData().orderType === 'weekly') {\n templateData.weekly = true;\n /*\n \n templateData.weeklyDay=[\n {\"index\":1,\"name\":\"Hétfő\"},\n {\"index\":2,\"name\":\"Kedd\"},\n {\"index\":3,\"name\":\"Szerda\"},\n {\"index\":4,\"name\":\"Csütörtök\"},\n {\"index\":5,\"name\":\"Péntek\"},\n {\"index\":6,\"name\":\"Szombat\"},\n {\"index\":7,\"name\":\"Vasárnap\"},\n ];\n \n templateData.weeklyDay=[\n {\"index\":2,\"name\":\"Hétfő\" },\n {\"name\":\"Kedd\"},\n {\"name\":\"Szerda\"},\n {\"name\":\"Csütörtök\"},\n {\"name\":\"Péntek\"},\n {\"name\":\"Szombat\"},\n {\"name\":\"Vasárnap\"}\n ];\n */\n }\n var productSelected = Order.getData('productSelected');\n if (typeof productSelected[d.id] != 'undefined') {\n templateData.itemQuantity = productSelected[d.id];\n }\n console.log(['templateData', templateData]);\n var oldTags = Mustache.tags;\n Mustache.tags = [\"~!\", \"!~\"];\n if (templateData['specification'] == 'false' || templateData['specification'] == false) {\n templateData.specificationClass = 'd-none';\n }\n templateData.pictureImg = '';\n if (templateData['picture'] == 'false' || templateData['picture'] == false) {\n templateData.pictureClass = 'd-none';\n } else {\n templateData.pictureImg = '<img src= \"' + templateData['picture'] + '\" class=\"productPicture\" ></img>';\n }\n console.log('templateData', templateData);\n //templateData['aa_specification']=false;\n var render = Mustache.render(template, templateData);\n Mustache.tags = oldTags;\n console.groupEnd();\n return render;\n /*\n solution before template\n return '<table cellpadding=\"5\" cellspacing=\"0\" border=\"0\" style=\"padding-left:50px;\">'+\n '<tr>'+\n '<td>Info:</td>'+\n '<td>'+d.note+'</td>'+\n '</tr>'+\n '<tr>'+\n '<td>hooreyca :</td>'+\n '<td><span style=\"padding-right: 2em;\">'+d.hooreycaId+'</span>' +\n \n '<button type=\"button\"\\n' +\n ' data-id=\"'+d.id+'\"\\n' +\n ' class=\"buttonItemFavorites btn '+btnFavoritesClass+'\">\\n' +\n ' <i class=\"bi bi-star-fill pr-2\" aria-hidden=\"true\"></i>\\n' +\n ' Kedvenc\\n' +\n '</button>' +\n '</td>'+\n '</tr>'+\n /!*\n '<tr>'+\n '<td>Extension number:</td>'+\n '<td>'+d.extn+'</td>'+\n '</tr>'+\n *!/\n '<tr>'+\n '<td>Info:</td>'+\n '<td>'+d.note+'</td>'+\n '</tr>'+\n '<tr>'+\n '<td>Megjegyzés:</td>'+\n '<td><textarea class=\"orderItemComment\" data-id=\"'+d.id+'\">'+comment+'</textarea></td>'+\n '</tr>'+\n /!*\n *!/\n '</table>';\n */\n };\n this.setDatatableHeaderText = function (text) {\n $('.tableHeaderText').text(text);\n };\n this.getTreePathName = function (node) {\n var res = '';\n var items = $(node).parents('li').toArray();\n items.shift();\n items.reverse();\n for (var item in items) {\n console.log($(items[item]).children('a.categoryItem'));\n if ($(items[item]).children('a.categoryItem').length > 0) {\n res += $(items[item]).children('a.categoryItem').text() + '/';\n }\n }\n res += $(node).text();\n console.log(res);\n return res;\n };\n var selectedProductGroup = null;\n var dataTableSearchStr = null;\n var dataTableSearchKrel = false;\n this.searchProductByString = function (filterStr) {\n root.setDatatableHeaderText('Termékek szűrve:' + filterStr);\n dataTableSearchStr = filterStr;\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickSearchProduct = function () {\n debug(this);\n var filterStr = $('.sidebar-search input[name=searchValue]').val();\n debug(filterStr);\n root.searchProductByString(filterStr);\n };\n this.clickFavoritesProduct = function () {\n debug('clickFavoritesProduct');\n root.setDatatableHeaderText('Termékek szűrve: kedvencek');\n dataTableSearchStr = '**favorites**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickOftenProduct = function () {\n debug('clickOftenProduct');\n root.setDatatableHeaderText('Termékek szűrve: gyakran vásárolt');\n dataTableSearchStr = '**often**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickSpecialOffer = function () {\n debug('clickSpecialOffer');\n root.setDatatableHeaderText('Termékek szűrve: Akciós termékek');\n dataTableSearchStr = '**specialOffer**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickLastProduct = function () {\n debug('clickLastProduct');\n root.setDatatableHeaderText('Termékek szűrve: utoljára vásárolt');\n dataTableSearchStr = '**last**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickWeeklyProduct = function () {\n debug('clickWeeklyProduct');\n root.setDatatableHeaderText('Termékek szűrve: Heti termékek');\n dataTableSearchStr = '**weekly**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickKrelProduct = function () {\n debug('clickKrelProduct');\n //root.setDatatableHeaderText('Termékek szűrve: Heti termékek');\n //dataTableSearchStr='**weekly**';\n //$('.dataTableOrderProductSelect').DataTable().ajax.reload();\n $(this).parent().toggleClass('krelActive');\n dataTableSearchKrel = !dataTableSearchKrel;\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.productSelectDataTableColumnDefs = function () {\n return [{\n \"width\": \"10px\",\n \"targets\": 0\n }, {\n \"className\": \"dt-left\",\n \"targets\": 1\n },\n // { \"width\": \"120px\", \"targets\": 1 },\n {\n \"width\": \"28px\",\n \"targets\": 2\n }, {\n \"width\": \"41px\",\n \"targets\": 3\n }, {\n \"width\": \"76px\",\n \"targets\": 4\n }, {\n \"width\": \"55px\",\n \"targets\": 5\n }, {\n \"width\": \"70px\",\n \"targets\": 6\n }, {\n \"width\": \"54px\",\n \"targets\": 7\n }, {\n \"width\": \"57px\",\n \"targets\": 8\n }, {\n \"width\": \"42px\",\n \"targets\": 9\n }, {\n \"width\": \"100px\",\n \"targets\": 10\n }, {\n \"className\": \"dt-center\",\n \"targets\": \"_all\"\n }];\n };\n this.productSelectDataTableColumn = function () {\n var columnData = [{\n \"className\": 'details-control',\n \"orderable\": false,\n \"data\": null,\n \"defaultContent\": ''\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"krel\"\n }, {\n \"data\": \"packing\"\n }, {\n \"data\": \"unitValue\"\n }, {\n \"data\": \"productUnit\"\n }, {\n \"data\": \"sellerUnit\"\n }, {\n \"data\": \"unitMultiplier\"\n }, {\n \"data\": \"amountUnit\"\n }, {\n \"data\": \"price\"\n }];\n var actionColumn = {\n \"className\": 'details-control2',\n \"orderable\": false,\n \"data\": null,\n \"width\": \"100px\",\n \"defaultContent\": ''\n };\n if (Order.getData('orderType') == 'daily') {\n actionColumn.render = function (data, type, row) {\n if (row.stock_status === 'out_of_stock') {\n return '<img src=\"/images/icons/details_close.png\" title=\"Nincs raktáron\" style=\"width: 24px;\">';\n }\n return '<input type=\"number\" value=\"0\" min=\"0\" max=\"9999\" step=\"1\" data-decimals=\"1\" class=\"form-control-sm inputNumberSpinner\" style=\"width: 1em;\"/>';\n };\n }\n columnData.push(actionColumn);\n return columnData;\n };\n this.getDatatables = function (orderType) {\n console.error(orderType);\n var table = $('.dataTableOrderProductSelect').DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": {\n url: Opts.URL.getDataTableContentProductList,\n data: function data(_data) {\n _data.searchStr = dataTableSearchStr;\n _data.krel = dataTableSearchKrel;\n _data.groupId = selectedProductGroup;\n _data.supplierId = Order.supplierId;\n _data.deliveryDate = Order.deliveryDate;\n }\n },\n buttons: {\n buttons: []\n },\n \"columnDefs\": root.productSelectDataTableColumnDefs(),\n \"columns\": root.productSelectDataTableColumn(),\n \"order\": [[1, 'asc']]\n });\n return table;\n };\n this.productSelectDataTableDrawDT = function (e) {\n //debug( 'Table draw complete: '+new Date().getTime() );\n\n //$('td:contains(\"*\")').html('<i class=\"bi bi-check-circle-fill\"></i>');\n $(\"td\").filter(function () {\n return $(this).text() === '*';\n }).html('<i class=\"bi bi-check-circle-fill\"></i>');\n if (Order.getData().orderType == 'daily') {\n $(\"input[type='number'].inputNumberSpinner\").inputSpinner({\n template: '<div class=\"input-group ${groupClass}\">' + '<button style=\"min-width: ${buttonsWidth}\" class=\"btn btn-sm btn-decrement ${buttonsClass}\" type=\"button\">${decrementButton}</button>' +\n //'<input type=\"text\" inputmode=\"decimal\" style=\"text-align: ${textAlign}\" class=\"productQuantity form-control\"/>' +\n '<input type=\"text\" step=\"0.1\" data-decimals=\"2\" style=\"text-align: ${textAlign}\" class=\"productQuantity form-control\"/>' + '<button style=\"min-width: ${buttonsWidth}\" class=\"btn btn-sm btn-increment ${buttonsClass}\" type=\"button\">${incrementButton}</button>' + '</div>',\n buttonsWidth: \"0.5rem\",\n groupClass: \"\",\n // css class of the resulting input-group\n buttonsClass: \"btn-outline-secondary\"\n });\n }\n root.bindWeakUserHelper();\n /*\n ----------------------------------------------------------\n change order quantity\n */\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").off('change');\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").on('change', function (e) {\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n var rowData = $('.dataTableOrderProductSelect').DataTable().row($(this).closest('tr')).data();\n root.orderItemsChange(rowData, quantity);\n });\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").each(function () {\n //debug('ez a function2')\n var quantity = $(this).val();\n var rowData = $('.dataTableOrderProductSelect').DataTable().row($(this).closest('tr')).data();\n if (Order.productSelected[rowData.id]) {\n debug(rowData);\n debug($($(this).closest('tr').find('input[type=number]')[0]));\n debug(Order.productSelected[rowData.id]);\n var quantityCurrent = Order.productSelected[rowData.id];\n if (typeof quantityCurrent != 'string') {\n quantityCurrent += '';\n }\n $($(this).closest('tr').find('input[type=number]')[0]).val(quantityCurrent.replace(',', '.'));\n }\n });\n $(\".dataTableOrderProductSelect .details-control2 button\").off('click');\n $(\".dataTableOrderProductSelect .details-control2 button\").on('click', function () {\n // debug('.details-control2 button click ')\n // debug(this);\n $(this).parent().find('input[type=text]').trigger('change');\n });\n };\n this.initViewProductSelect = function () {\n var functionName = 'initViewProductSelect';\n console.log(functionName + ' called');\n if (viewInicialized.includes(functionName)) {\n return;\n }\n //debug(Object.getOwnPropertyNames(root));\n root.setDatatableHeaderText('');\n root.Stepper.setOpts({\n onAfterActivate: function onAfterActivate() {}\n });\n //@note: be kell kapcsolni az elonezetet\n root.Stepper.addCompleted('invoice');\n root.Stepper.addEnabled('invoice');\n var CSSSelectorForm = '.orderParameterForm';\n //console.log(Opts.URL.getDataTableContentProductList);change\n debug(CSSSelectorForm + ' .fa-search');\n $('.sidebar-search .fa-search').off('click');\n $('.sidebar-search .fa-search').on('click', root.clickSearchProduct);\n $('a.sidebar.favorites').off('click');\n $('a.sidebar.favorites').on('click', root.clickFavoritesProduct);\n $('a.sidebar.often').off('click');\n $('a.sidebar.often').on('click', root.clickOftenProduct);\n $('a.sidebar.last').off('click');\n $('a.sidebar.last').on('click', root.clickLastProduct);\n $('a.sidebar.weekly').off('click');\n $('a.sidebar.weekly').on('click', root.clickWeeklyProduct);\n $('a.sidebar.krel').off('click');\n $('a.sidebar.krel').on('click', root.clickKrelProduct);\n $('a.sidebar.specialOffer').off('click');\n $('a.sidebar.specialOffer').on('click', root.clickSpecialOffer);\n $('.sidebar-search input[name=searchValue]').off('keypress');\n $('.sidebar-search input[name=searchValue]').on('keypress', function (event) {\n if (event.which == 13) {\n event.preventDefault();\n }\n if ($(this).val().length >= 2) {\n root.searchProductByString($(this).val() + event.key);\n }\n });\n $('.sidebar-wrapper .sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').off('click');\n $('.sidebar-wrapper .sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').on('click', function () {\n var groupId = $(this).data('id');\n selectedProductGroup = groupId;\n dataTableSearchStr = null;\n console.log(groupId);\n console.log(root.getTreePathName(this));\n root.setDatatableHeaderText(root.getTreePathName(this));\n /*\n let ajaxData={\n 'groupId':groupId,\n 'supplier_id':Order.supplierId,\n };\n //$('.dataTableOrderProductSelect').DataTable().ajax.data(ajaxData).load();\n \n */\n /*\n let ajaxUrl=Opts.URL.getDataTableContentProductList+'?groupId='+groupId+'&supplier_id='+Order.supplierId;\n $('.dataTableOrderProductSelect').DataTable().ajax.url(ajaxUrl).load();\n */\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n });\n var table = root.getDatatables(Order.getData('orderType'));\n $('.dataTableOrderProductSelect').on('init.dt', function () {\n console.log('Table initialisation complete: ' + new Date().getTime());\n }).dataTable();\n $('.dataTableOrderProductSelect').on('draw.dt', root.productSelectDataTableDrawDT).dataTable();\n\n //$('.dataTableOrderProductSelect').on( 'draw.dt', ).dataTable();\n\n $('.dataTableOrderProductSelect').on('xhr.dt', function () {\n debug('Table xhr complete: ' + new Date().getTime());\n }).dataTable();\n\n //$(\"input[type='number'].inputNumberSpinner\").inputSpinner();\n\n /*\n ----------------------------------------------------------\n Add event listener for opening and closing details\n */\n\n $('.dataTableOrderProductSelect tbody').on('click', 'td.details-control', function () {\n var tr = $(this).closest('tr');\n var row = table.row(tr);\n if (row.child.isShown()) {\n // This row is already open - close it\n row.child.hide();\n tr.removeClass('shown');\n } else {\n // Open this row\n row.child(root.productSelectDatatablesRowFormatter(row.data())).show();\n tr.addClass('shown');\n root.bindProductDetailsAction();\n }\n });\n viewInicialized.push(functionName);\n };\n this.bindProductDetailsAction = function () {\n root.bindRowDescriptionAction();\n root.bindRowFavoritesAction();\n if (Order.getData()['orderType'] == 'weekly') {\n root.bindOrderItemWeekQuantity();\n }\n };\n this.bindWeakUserHelper = function () {\n $(\"input.inputNumberSpinner\").off(\"focus\");\n $(\"input.inputNumberSpinner\").on(\"focus\", function () {\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n if (quantity === 0) {\n $(this).val('');\n }\n });\n $(\"input[type=text].inputNumberSpinner\").off(\"keypress\");\n $(\"input[type=text].inputNumberSpinner\").on(\"keypress\", function (event) {\n if (event.which == 13) {\n // console.error('enter pressed');\n var actualItem = this;\n var items = $(\"input[type=text].inputNumberSpinner\");\n items.each(function (item) {\n // console.log(this);\n if (this == actualItem) {\n // console.error(item);\n if (item + 1 <= items.length) {\n // console.error(items[item+1]);\n $(items[item + 1]).focus();\n }\n return false;\n }\n });\n }\n });\n };\n this.bindOrderItemWeekQuantity = function () {\n $(\"input.productSelectDayQuantity\").off('change');\n $(\"input.productSelectDayQuantity\").on('change', function () {\n console.log(this.name);\n console.log(this.value);\n console.log($(this).data('dayindex'));\n var rowData = null;\n var rowNode = $($(this).closest('table.orderProductSelectRowDetailsTable').closest('tr')).prev();\n rowData = $('.dataTableOrderProductSelect').DataTable().row(rowNode).data();\n console.log(rowData);\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n console.log(rowData.id);\n root.orderItemsChange(rowData, quantity, $(this).data('dayindex'));\n // root.orderItemsChange\n //orderItemsChange\n //quantity[1683][1]\n });\n };\n this.afterSyncOrderDataToServer = function (data) {\n //root.toggleEnableSend();\n //console.log('most vegzett. ennyit kiszed'+batchNum);\n for (var i = 0; i < queueAjax.length; i++) {\n console.log('shiftel');\n queueAjax.shift();\n }\n //console.log('remaining left '+queueAjax.length);\n setTimeout(function () {\n syncDoing = false;\n root.syncOrderDataToServer();\n }, Opts.dataSyncPauseTime);\n };\n var queueAjax = [];\n var syncDoing = false;\n this.syncOrderDataToServer = function () {\n //debug(queueAjax);\n if (syncDoing) {\n //debug('sync in progress....');\n return false;\n }\n if (queueAjax.length < 1) {\n return;\n }\n syncDoing = true;\n root.sendOrderDataToServer('productSelect', root.afterSyncOrderDataToServer);\n return;\n };\n this.orderItemsChange = function (ItemData, quantity, dayIndex) {\n /*\n debug('-----------------');\n debug(ItemData);\n debug(quantity);\n debug(Order.getData('productSelected'));\n debug('-----------------');\n \n */\n if (isNaN(quantity)) {\n quantity = 0;\n }\n var productSelected = Order.getData('productSelected');\n console.group('orderItemsChange');\n console.log(['productSelected', productSelected]);\n console.log(['ItemData', ItemData]);\n console.log(['ItemData.id', ItemData.id]);\n console.log(['quantity', quantity]);\n console.log(['dayIndex', dayIndex]);\n console.log(productSelected[ItemData.id]);\n var productSelectedItem = productSelected[ItemData.id];\n /*\n ha 0 ertek jon es nem is volt akkor hamar kiugratjuk\n */\n if (quantity == 0) {\n console.error('quantity==0');\n if (typeof productSelectedItem == 'undefined') {\n console.error('itt lep1');\n console.groupEnd();\n return;\n }\n if (dayIndex) {\n console.log('van dayIndex');\n if (typeof productSelected[ItemData.id][dayIndex] == 'undefined') {\n console.log(['productSelectedItem', productSelectedItem]);\n console.error('itt lep2');\n console.groupEnd();\n return;\n }\n }\n }\n /*\n ha azonos az ertek kiugrunk\n */\n if (dayIndex) {\n if (typeof productSelected[ItemData.id] != 'undefined' && typeof productSelected[ItemData.id][dayIndex] != 'undefined') {\n if (productSelected[ItemData.id][dayIndex] == quantity) {\n console.error('azonos napi');\n console.groupEnd();\n return;\n }\n }\n } else {\n if (productSelected[ItemData.id] == quantity) {\n console.error('azonos');\n console.groupEnd();\n return;\n }\n }\n if (quantity == 0) {\n if (dayIndex) {\n delete Order.productSelected[ItemData.id][dayIndex];\n delete productSelected[ItemData.id][dayIndex];\n } else {\n delete Order.productSelected[ItemData.id];\n delete productSelected[ItemData.id];\n }\n } else {\n /*\n ha van ertek erteket adunk!\n */\n if (dayIndex) {\n if (typeof productSelected[ItemData.id] == 'undefined') {\n productSelected[ItemData.id] = [];\n }\n console.log('set quantity productSelected[ItemData.id][dayIndex]', quantity);\n productSelected[ItemData.id][dayIndex] = quantity;\n } else {\n productSelected[ItemData.id] = quantity;\n console.log('set quantity productSelected[ItemData.id]', quantity);\n }\n }\n console.log(['productSelected', productSelected]);\n Order.productSelected = productSelected;\n console.groupEnd();\n queueAjax.push(Date.now());\n root.syncOrderDataToServer();\n return;\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n\n /*\n debug(Order.getData('productSelected'));\n debug('*******************');\n */\n };\n this.initViewInvoice = function () {\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n if (Object.keys(Order.productSelected).length > 0) {\n root.Stepper.addCompleted('send');\n root.Stepper.addEnabled('send');\n }\n var styleStr = '<link rel=\"stylesheet\" href=\"' + Opts.URL.root + '/css/invoice.css\">';\n $('table.invoice button.printButton').off('click');\n $('table.invoice button.printButton').on('click', function () {\n window.print();\n return;\n // removed by dead control flow\n var newWin; \n // removed by dead control flow\n\n // removed by dead control flow\n var print; \n // removed by dead control flow\n\n // newWin.document.write($('table.invoice').prop('outerHTML'));\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n });\n };\n this.resetOrder = function () {\n root.init();\n root.setDeliveryDate('-');\n root.setSupplier('-');\n };\n this.afterOrderSendOk = function (data) {\n Toast.create({\n title: \"Sent!\",\n message: 'Order Sent',\n status: TOAST_STATUS.INFO,\n timeout: 5000\n });\n $('.buttonOrderSend').off('click');\n $('.buttonOrderSend').prop('disabled', true);\n $('.statusNamePlace').removeClass('statusBlink');\n $('.statusNamePlace').text('elküldve');\n $('.buttonOrderSending').toggleClass('d-none');\n $('.buttonOrderSendOk').toggleClass('d-none');\n $('div.invoiceContainer').html(data.retHTML);\n //root.resetOrder();\n };\n this.afterOrderSendError = function (data) {\n $('.buttonOrderSend').toggleClass('d-none');\n $('.buttonOrderSending').toggleClass('d-none');\n $.each(APP.OrderModule.Stepper.getOpts().available, function (index, value) {\n APP.OrderModule.Stepper.setEnabled(value);\n APP.OrderModule.Stepper.setCompleted(value);\n });\n };\n this.initViewSend = function () {\n console.log('initViewSend called 2');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n $('.buttonOrderSend').off('click');\n $('.buttonOrderSend').on('click', function () {\n console.log('Send buton clicked');\n //@todo: datasynchere and callback\n $('.buttonOrderSend').toggleClass('d-none');\n $('.buttonOrderSending').toggleClass('d-none');\n /**\n * PM158\n */\n $.each(APP.OrderModule.Stepper.getOpts().available, function (index, value) {\n root.Stepper.unsetEnabled(value);\n root.Stepper.unsetCompleted(value);\n });\n /**\n */\n root.sendOrderDataToServer('send', root.afterOrderSendOk, root.afterOrderSendError);\n\n /* let ajaxData={};\n ajaxData._token=Opts.token;\n ajaxData.send=true;\n $.extend(ajaxData,Order);\n $.ajax({\n url: Opts.URL.store,\n method:'POST',\n data:ajaxData,\n success:function (data) {\n if(data.success){\n root.afterOrderSendOk(data);\n }\n }\n });*/\n });\n };\n this.testModeSend = function () {};\n this.testMode = function () {\n console.log('testMode called ');\n Order.setData({\n id: 234,\n supplierId: 7,\n productSelected: {\n 116: 3,\n 293: 2\n },\n contactName: 'Contact Name',\n note: 'Note',\n type: 'daily',\n deliveryDate: Opts.defaultDeliveryDate,\n deliveryAddress: 12\n });\n console.log(Order.getData());\n console.log('*******************');\n //root.Stepper.setOpts({'UrlData':{'supplierId':supplierId}});\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n id: Order.id\n }\n });\n this.Stepper.init({\n URL: {\n create: Opts.URL.create\n },\n /*\n csupasz az elejerol\n complete:['supplier'],\n enable: ['supplier'],\n active: 'supplier',\n onAfterActivate:this.initViewSupplier,\n \n product select\n complete:['supplier','parameter','productSelect'],\n enable: ['supplier','parameter','productSelect'],\n active: 'productSelect',\n onAfterActivate:this.initViewProductSelect,\n \n fullos\n complete:['supplier','parameter','productSelect','invoice'],\n enable: ['supplier','parameter','productSelect','invoice','send'],\n active: 'productSelect',\n onAfterActivate:this.initViewProductSelect,\n \n send\n complete:['supplier','parameter','productSelect','invoice','send'],\n enable: ['supplier','parameter','productSelect','invoice','send'],\n active: 'send',\n onAfterActivate:this.initViewProductSelect,\n \n */\n complete: ['supplier', 'parameter', 'productSelect'],\n enable: ['supplier', 'parameter', 'productSelect'],\n active: 'productSelect',\n onAfterActivate: this.initViewProductSelect,\n autoCallback: {\n invoice: {\n onAfterActivate: root.initViewInvoice\n },\n send: {\n onAfterActivate: root.initViewSend\n }\n }\n });\n console.log('*******************');\n };\n this.toggleEnableSend = function () {\n console.log('toggleEnableSend called');\n var ajaxUrl = Opts.URL.checkReadyToSend.replace('%id%', Order.id);\n $.ajax({\n url: ajaxUrl,\n success: function success(data) {\n if (data.success) {\n if (data.readyToSend) {\n root.Stepper.addCompleted('send');\n /*\n root.Stepper.addCompleted('invoice');\n root.Stepper.addEnabled('invoice');\n */\n root.Stepper.addEnabled('send');\n } else {\n root.Stepper.unsetCompleted('send');\n /*\n root.Stepper.unsetCompleted('invoice');\n root.Stepper.unsetEnabled('invoice');\n */\n root.Stepper.unsetEnabled('send');\n }\n }\n console.log(data);\n }\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQyxNQUFNLENBQUM7VUFDbkMsQ0FBQyxNQUFJO1lBQ0Q3QixJQUFJLENBQUNoQixPQUFPLENBQUNxQyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQzNEO0FBQ0E7QUFDQTtBQUNBO1lBQ3dCckIsSUFBSSxDQUFDaEIsT0FBTyxDQUFDd0MsWUFBWSxDQUFDLE1BQU0sQ0FBQztVQUNyQztRQUNKO1FBQ0EvQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ1IsSUFBSSxDQUFDO01BQ3JCO0lBQ0osQ0FBQyxDQUFDO0VBQ04sQ0FBQztBQUVMLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbW9kdWxlSnMvb3JkZXIuanM/NTYxZiJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuT3JkZXJNb2R1bERlZmF1bHQ9e1xuICAgIGFjdGlvbkZ1bmN0aW9uOiBmdW5jdGlvbiAoKSB7fSxcbn1cbmNsYXNzIERhdGFNb2RlbE9yZGVyIGV4dGVuZHMgRGF0YU1vZGVse1xuXG4gICAgLypcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxuICAgICAgICBpZih0eXBlb2YgdGhpcy5wcm9kdWN0U2VsZWN0ZWQgPT09XCJ1bmRlZmluZWRcIil7XG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RTZWxlY3RlZD17fTtcbiAgICAgICAgfVxuICAgICAgICBpZih0eXBlb2YgdGhpcy5wcm9kdWN0Q29tbWVudCA9PT1cInVuZGVmaW5lZFwiKXtcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdENvbW1lbnQ9e307XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2codGhpcy5jb25zdHJ1Y3Rvci5uYW1lKycgY29uc3RydWN0b3IgY2FsbGVkJyk7XG4gICAgfTtcbn07XG53aW5kb3cuRGF0YU1vZGVsT3JkZXI9RGF0YU1vZGVsT3JkZXI7XG5cbndpbmRvdy5TdGVwcGVyPWZ1bmN0aW9uICgpIHtcblxuICAgIC8qXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcbiAgICAgKiBpbiB0aGUgY2xhc3NcbiAgICAgKi9cbiAgICBsZXQgT3B0cyA9IHtcbiAgICAgICAgY29tcGxldGU6IFsnc3VwcGxpZXInXSxcbiAgICAgICAgYXZhaWxhYmxlOiBbJ3N1cHBsaWVyJywgJ3BhcmFtZXRlcicsICdwcm9kdWN0U2VsZWN0JywgJ2ludm9pY2UnLCAnc2VuZCddLFxuICAgICAgICBlbmFibGU6IFsnc3VwcGxpZXInLCAnaW52b2ljZSddLFxuICAgICAgICBsb2FkOiBbXSxcbiAgICAgICAgZXhjbHVkZUxvYWRlZDpbJ2ludm9pY2UnLCdzZW5kJ10sXG4gICAgICAgIGxvYWRlZDogW10sXG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgIFVSTDoge1xuICAgICAgICAgICAgY3JlYXRlOiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgVXJsRGF0YTpmYWxzZSxcbiAgICAgICAgb25BZnRlckxvYWQ6ZnVuY3Rpb24gKCkge30sXG4gICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTpmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgYXV0b0NhbGxiYWNrOntcbiAgICAgICAgICAgICdpbnZvaWNlJzp7XG4gICAgICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOmZ1bmN0aW9uICgpIHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdzZW5kJzp7XG4gICAgICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOmZ1bmN0aW9uICgpIHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbm93TG9hZGVkOmZhbHNlLFxuXG4gICAgfTtcblxuICAgIGxldCByb290PXRoaXM7XG4gICAgLypcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0T3B0cz1mdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gT3B0cztcbiAgICB9XG4gICAgdGhpcy5zZXRPcHRzPWZ1bmN0aW9uKG9wdGlvbnMpe1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcbiAgICB9XG5cblxuXG4gICAgdGhpcy5pbml0PWZ1bmN0aW9uIChvcHRpb25zKXtcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XG5cbiAgICAgICAgZGVidWcoT3B0cyk7XG4gICAgICAgICQoJy5zdGVwJykuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAgICAgbGV0IHN0ZXBOYW1lPSQodGhpcykuZGF0YSgnc3RlcG5hbWUnKTtcbiAgICAgICAgICAgIGlmKE9wdHMuY29tcGxldGUuaW5jbHVkZXMoc3RlcE5hbWUpKXtcbiAgICAgICAgICAgICAgICByb290LnNldENvbXBsZXRlZChzdGVwTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihPcHRzLmVuYWJsZS5pbmNsdWRlcyhzdGVwTmFtZSkpe1xuICAgICAgICAgICAgICAgIHJvb3Quc2V0RW5hYmxlZChzdGVwTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihPcHRzLmxvYWQuaW5jbHVkZXMoc3RlcE5hbWUpKXtcbiAgICAgICAgICAgICAgICByb290LmxvYWRTdGVwQ29udGVudChzdGVwTmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKE9wdHMuYWN0aXZlPT09c3RlcE5hbWUpe1xuICAgICAgICAgICAgICAgIHJvb3Quc2V0QWN0aXZlKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QuYmluZENsaWNrQWN0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5iaW5kQ2xpY2tBY3Rpb249ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCBzdGVwQ2xpY2tCdXR0b25zPSQoJy5zdGVwQ2xpY2snKTtcbiAgICAgICAgc3RlcENsaWNrQnV0dG9ucy5vZmYoJ2NsaWNrJyk7XG4gICAgICAgIHN0ZXBDbGlja0J1dHRvbnMub24oJ2NsaWNrJyxyb290LnN0ZXBDbGljayk7XG5cbiAgICB9XG5cbiAgICB0aGlzLnNldENvbXBsZXRlZD1mdW5jdGlvbiAoc3RlcE5hbWUpe1xuICAgICAgICBjb25zb2xlLmxvZyhzdGVwTmFtZSsnIGNvbXBsZXRlZCcpO1xuICAgICAgICAkKCcuc3RlcFtkYXRhLXN0ZXBOYW1lPVwiJytzdGVwTmFtZSsnXCJdJykuYWRkQ2xhc3MoJ2NvbXBsZXRlZCcpO1xuICAgIH1cblxuICAgIHRoaXMudW5zZXRDb21wbGV0ZWQ9ZnVuY3Rpb24gKHN0ZXBOYW1lKXtcbiAgICAgICAgY29uc29sZS5sb2coc3RlcE5hbWUrJyBVbmNvbXBsZXRlZCcpO1xuICAgICAgICAkKCcuc3RlcFtkYXRhLXN0ZXBOYW1lPVwiJytzdGVwTmFtZSsnXCJdJykucmVtb3ZlQ2xhc3MoJ2NvbXBsZXRlZCcpO1xuICAgICAgICBPcHRzLmNvbXBsZXRlPWFycmF5UmVtb3ZlKE9wdHMuY29tcGxldGUsc3RlcE5hbWUpO1xuICAgIH1cblxuICAgIHRoaXMudW5zZXRFbmFibGVkPWZ1bmN0aW9uIChzdGVwTmFtZSl7XG4gICAgICAgIGNvbnNvbGUubG9nKHN0ZXBOYW1lKycgVW4gZW5hYmxlZCcpO1xuICAgICAgICAkKCcuY2xpY2snK3N0ZXBOYW1lKS5jb250ZW50cygpLnVud3JhcCgpO1xuICAgICAgICBPcHRzLmVuYWJsZT1hcnJheVJlbW92ZShPcHRzLmVuYWJsZSxzdGVwTmFtZSk7XG4gICAgfVxuICAgIHRoaXMuc2V0RW5hYmxlZD1mdW5jdGlvbiAoc3RlcE5hbWUpe1xuICAgICAgICBjb25zb2xlLmxvZyhzdGVwTmFtZSsnIGVuYWJsZWQnKTtcbiAgICAgICAgbGV0IHN0ZXBJdGVtPSQoJy5zdGVwW2RhdGEtc3RlcE5hbWU9XCInK3N0ZXBOYW1lKydcIl0nKTtcbiAgICAgICAgc3RlcEl0ZW0uaHRtbCgnPGEgY2xhc3M9XCJzdGVwQ2xpY2sgY2xpY2snK3N0ZXBOYW1lKydcIiBkYXRhLXN0ZXBOYW1lPVwiJytzdGVwTmFtZSsnXCIgaHJlZj1cIiNcIj4nK3N0ZXBJdGVtLmh0bWwoKSsnPC9hPicpO1xuICAgICAgICByb290LmJpbmRDbGlja0FjdGlvbigpO1xuICAgICAgICAvLyQoJy5zdGVwQ2xpY2snKS5jbGljayhyb290LnN0ZXBDbGljayk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmFkZEVuYWJsZWQ9ZnVuY3Rpb24oc3RlcE5hbWUpe1xuICAgICAgICBpZighT3B0cy5lbmFibGUuaW5jbHVkZXMoc3RlcE5hbWUpKXtcbiAgICAgICAgICAgIE9wdHMuZW5hYmxlLnB1c2goc3RlcE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJvb3Quc2V0RW5hYmxlZChzdGVwTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRDb21wbGV0ZWQ9ZnVuY3Rpb24oc3RlcE5hbWUpe1xuICAgICAgICBpZighT3B0cy5jb21wbGV0ZS5pbmNsdWRlcyhzdGVwTmFtZSkpe1xuICAgICAgICAgICAgT3B0cy5jb21wbGV0ZS5wdXNoKHN0ZXBOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByb290LnNldENvbXBsZXRlZChzdGVwTmFtZSk7XG4gICAgICAgIHJvb3QuYmluZENsaWNrQWN0aW9uKCk7XG4gICAgfVxuXG5cbiAgICB0aGlzLmxvYWRTdGVwQ29udGVudD1mdW5jdGlvbiAoc3RlcE5hbWUpe1xuICAgICAgICBsZXQgZGF0YT17J3R5cGUnOnN0ZXBOYW1lfTtcbiAgICAgICAgJC5leHRlbmQoZGF0YSwgT3B0cy5VcmxEYXRhKTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiBcIkdFVFwiLFxuICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5jcmVhdGUsXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzdWx0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCBjb250YWluZXI9JCgnLlNDJytzdGVwTmFtZS5jYXBpdGFsaXplKCkpO1xuICAgICAgICAgICAgICAgIGlmKCQuaW5BcnJheShzdGVwTmFtZSxPcHRzLmV4Y2x1ZGVMb2FkZWQpPT0tMSl7XG4gICAgICAgICAgICAgICAgICAgIE9wdHMubG9hZGVkLnB1c2goc3RlcE5hbWUpO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXhjbHVkZWQgVmlldycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250YWluZXIuaHRtbChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIGlmKE9wdHMubm93TG9hZGVkKXtcbiAgICAgICAgICAgICAgICAgICAgT3B0cy5ub3dMb2FkZWQoc3RlcE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBPcHRzLm9uQWZ0ZXJMb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXJMb2FkZWQ9ZnVuY3Rpb24gKCkge1xuICAgICAgICBPcHRzLmxvYWRlZD1bJ3N1cHBsaWVyJ107XG4gICAgICAgICQoJy5zdGVwQ29udGFpbmVyJykuZWFjaChmdW5jdGlvbigpe1xuLypcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2xhc3NMaXN0KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdTQ1N1cHBsaWVyJykpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJCh0aGlzKS5hdHRyKCdjbGFzcycpKTtcbiovXG4gICAgICAgICAgICBpZighdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoJ1NDU3VwcGxpZXInKSl7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5odG1sKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRBY3RpdmVGaW5pc2g9ZnVuY3Rpb24oc3RlcE5hbWUpe1xuICAgICAgICBsZXQgY29udGFpbmVyPSQoJy5TQycrc3RlcE5hbWUuY2FwaXRhbGl6ZSgpKTtcbiAgICAgICAgaWYoc3RlcE5hbWU9PT0ncHJvZHVjdFNlbGVjdCcpe1xuICAgICAgICAgICAgJCgnLmNvbnRhaW5lclN0ZXBwZXInKS5hZGRDbGFzcygnYWN0aXZlU2lkZUJhcicpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICQoJy5jb250YWluZXJTdGVwcGVyJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZVNpZGVCYXInKTtcbiAgICAgICAgfVxuICAgICAgICBkZWJ1Zygnc2V0QWN0aXZlRmluaXNoIHNob3c6JytzdGVwTmFtZSk7XG4gICAgICAgIGNvbnRhaW5lci5zaG93KCk7XG4gICAgICAgIE9wdHMubm93TG9hZGVkPWZhbHNlO1xuICAgICAgICByb290LmFjdGl2ZT1zdGVwTmFtZTtcbiAgICAgICAgT3B0cy5vbkFmdGVyQWN0aXZhdGUoKTtcbiAgICAgICAgaWYodHlwZW9mIE9wdHMuYXV0b0NhbGxiYWNrW3N0ZXBOYW1lXSE9PSd1bmRlZmluZWQnICl7XG4gICAgICAgICAgICBPcHRzLmF1dG9DYWxsYmFja1tzdGVwTmFtZV0ub25BZnRlckFjdGl2YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRBY3RpdmU9ZnVuY3Rpb24oc3RlcE5hbWUpe1xuICAgICAgICAkKCcuc3RlcENvbnRhaW5lcicpLmhpZGUoKTtcbiAgICAgICAgaWYoIU9wdHMubG9hZGVkLmluY2x1ZGVzKHN0ZXBOYW1lKSl7XG4gICAgICAgICAgICByb290LmxvYWRTdGVwQ29udGVudChzdGVwTmFtZSk7XG4gICAgICAgICAgICBPcHRzLm5vd0xvYWRlZD10aGlzLnNldEFjdGl2ZUZpbmlzaDtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZUZpbmlzaChzdGVwTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0ZXBDbGljaz1mdW5jdGlvbihldmVudCl7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCBzdGVwTmFtZT0kKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoJ3N0ZXBuYW1lJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzZXRBY3RpdmU6JytzdGVwTmFtZSk7XG4gICAgICAgIHJvb3Quc2V0QWN0aXZlKHN0ZXBOYW1lKTtcbiAgICB9XG59XG5cbndpbmRvdy5PcmRlck1vZHVsZSA9IGZ1bmN0aW9uICgpIHtcblxuICAgIC8qXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcbiAgICAgKiBpbiB0aGUgY2xhc3NcbiAgICAgKi9cbiAgICBsZXQgT3B0cyA9IHtcbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxuICAgICAgICBuZWVkU3RlcHBlcjp0cnVlLFxuICAgICAgICBDU1NTZWxlY3RvckZvcm06Jy5vcmRlclBhcmFtZXRlckZvcm0nLFxuICAgICAgICBkZWZhdWx0RGVsaXZlcnlEYXRlOicnLFxuICAgICAgICBkYXRhU3luY1BhdXNlVGltZTo1MDAsXG4gICAgICAgIHRva2VuOm51bGwsXG4gICAgICAgIFVSTDoge1xuICAgICAgICAgICAgcm9vdDpudWxsLFxuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudFByb2R1Y3RMaXN0Om51bGwsXG4gICAgICAgICAgICBjaGVja1JlYWR5VG9TZW5kOm51bGwsXG4gICAgICAgICAgICBpbmRleDpudWxsLFxuICAgICAgICAgICAgc2hvdzpudWxsLFxuICAgICAgICAgICAgZWRpdDpudWxsLFxuICAgICAgICAgICAgY3JlYXRlOiBudWxsLFxuICAgICAgICAgICAgc3RvcmU6IG51bGwsXG4gICAgICAgICAgICB1cGRhdGU6bnVsbCxcbiAgICAgICAgICAgIGRlc3Ryb3k6bnVsbCxcbiAgICAgICAgICAgIHRvZ2dsZUZhdm9yaXRlczpudWxsLFxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBQdWJsaWNWYXIgPSB7fTtcbiAgICBsZXQgUHVibGljVmFyMiA9IHsnYXNkJzogJzIxJ307XG4gICAgbGV0IEFwaVRva2VuID0gbnVsbDtcbiAgICBsZXQgT3JkZXI9bnVsbDtcbiAgICBsZXQgcm9vdCA9IHRoaXM7XG4gICAgbGV0IHZpZXdJbmljaWFsaXplZD1bXTtcblxuICAgIHRoaXMuc2V0T3B0cyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHRoaXMuZ2V0T3B0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIE9wdHM7XG4gICAgfVxuICAgIHRoaXMuY2xpY2tPcmRlckVkaXQ9ZnVuY3Rpb24gKGRhdGEpe1xuICAgICAgICBkZWJ1ZygnY2xpY2tFZGl0Jyk7XG4gICAgICAgIGRlYnVnKGRhdGEpO1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLGRhdGEuaWQpO1xuICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KGFqYXhVcmwpO1xuLyogICAgICAgIGxldCBhamF4RGF0YT17fTtcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XG4gICAgICAgICQuZXh0ZW5kKGFqYXhEYXRhLE9yZGVyKTtcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZWRpdC5yZXBsYWNlKCclaWQlJyxkYXRhLmlkKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogYWpheFVybCxcbiAgICAgICAgICAgIG1ldGhvZDonR0VUJyxcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN1Y2Nlc3Mpe1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3JkZXJEYXRhPXJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIG9yZGVyRGF0YS5zdXBwbGllcklkPW9yZGVyRGF0YS5zdXBwbGllcl9pZDtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlKG9yZGVyRGF0YS5zdXBwbGllcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgIHJvb3QuaW5pdE9yZGVyKG9yZGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJvb3QuaW5pdFN0ZXBwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgLy9yb290LmFmdGVyT3JkZXJTZXRTdXBwbGllck9rKGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTsqL1xuXG5cbiAgICB9XG4gICAgdGhpcy5hZnRlck9yZGVyRGVsZXRlZD1mdW5jdGlvbiAoZGF0YSl7XG4gICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XG4gICAgICAgICAgICBkZWJ1ZygnT3JkZXIgZGVsZXRlIHN1Y2Nlc3MnKTtcbiAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIkVycm9yIGRlbGV0ZWQgIVwiLCBtZXNzYWdlOiAnJywgc3RhdHVzOiBUT0FTVF9TVEFUVVMuREFOR0VSLCB0aW1lb3V0OiA1MDAwIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZD1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICBkZWJ1ZygnY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCcpO1xuICAgICAgICBkZWJ1ZyhldmVudCk7XG4gICAgICAgIGRlYnVnKGV2ZW50LmRhdGEpO1xuICAgICAgICAkKCcjZGlhbG9nTW9kYWwnKS5tb2RhbCgnaGlkZScpO1xuICAgICAgICBsZXQgYWpheERhdGE9e307XG4gICAgICAgIGFqYXhEYXRhLl90b2tlbj1PcHRzLnRva2VuO1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXN0cm95LnJlcGxhY2UoJyVpZCUnLGV2ZW50LmRhdGEuaWQpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxuICAgICAgICAgICAgbWV0aG9kOlwiREVMRVRFXCIsXG4gICAgICAgICAgICBzdWNjZXNzOnJvb3QuYWZ0ZXJPcmRlckRlbGV0ZWQsXG4gICAgICAgICAgICAvL2Vycm9yOmFqYXhFcnJvckhhbmRsZXJcbiAgICAgICAgfSk7XG5cbiAgICB9XG4gICAgdGhpcy5pbml0Vmlld09yZGVyU2VsZWN0PWZ1bmN0aW9uICgpe1xuICAgICAgICBkZWJ1ZygnY2FsbGVkIGluaXRWaWV3T3JkZXJTZWxlY3QgJyk7XG4gICAgICAgICQoJy5vcmRlcnNTZWxlY3RUYWJsZSBidXR0b24nKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5vcmRlcnNTZWxlY3RUYWJsZSBidXR0b24nKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgbGV0IGFjdGlvbj0kKHRoaXMpLmRhdGEoJ2FjdGlvbicpO1xuICAgICAgICAgICAgbGV0IG9yZGVySWQ9JCgkKHRoaXMpLmNsb3Nlc3QoJ3RyJylbMF0pLmRhdGEoJ29yZGVyaWQnKTtcbiAgICAgICAgICAgIGRlYnVnKGFjdGlvbik7XG4gICAgICAgICAgICBkZWJ1ZyhvcmRlcklkKTtcblxuICAgICAgICAgICAgaWYoYWN0aW9uPT0nZGVsZXRlJyl7XG4gICAgICAgICAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykub24oJ3Nob3cuYnMubW9kYWwnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCB5b3UgY291bGQgaW5pdGlhdGUgYW4gQUpBWCByZXF1ZXN0IGhlcmUgKGFuZCB0aGVuIGRvIHRoZSB1cGRhdGluZyBpbiBhIGNhbGxiYWNrKS5cbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBtb2RhbCdzIGNvbnRlbnQuIFdlJ2xsIHVzZSBqUXVlcnkgaGVyZSwgYnV0IHlvdSBjb3VsZCB1c2UgYSBkYXRhIGJpbmRpbmcgbGlicmFyeSBvciBvdGhlciBtZXRob2RzIGluc3RlYWQuXG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5tb2RhbC10aXRsZScpLnRleHQoJ01lZ2VyxZFzw610w6lzICcpO1xuICAgICAgICAgICAgICAgICAgICBtb2RhbC5maW5kKCcubW9kYWwtYm9keScpLnRleHQoJ0JpenRvc2FuIHTDtnJsaSBhIG1lZ3JlbmRlbMOpc3Q/Jyk7XG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5idXR0b25ZZXMnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5idXR0b25ZZXMnKS5vbignY2xpY2snLHtpZDpvcmRlcklkfSxyb290LmNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm1vZGFsKCdzaG93Jyk7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICByb290LmNsaWNrT3JkZXJFZGl0KHtpZDpvcmRlcklkfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAkKCcuYnV0dG9uTmV3Jykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCcuYnV0dG9uTmV3Jykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgsJ2ZvcmNlPXRydWUnKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG4gICAgdGhpcy5pbml0U3RlcHBlcj1mdW5jdGlvbiAoKXtcbiAgICAgICAgZGVidWcoT3JkZXIuZ2V0RGF0YSgpKTtcbiAgICAgICAgdmlld0luaWNpYWxpemVkPVtdO1xuICAgICAgICAkKCcuc3RhdHVzTmFtZVBsYWNlJykudGV4dCgnTmluY3MgZWxrw7xsZHZlJyk7XG4gICAgICAgICQoJy5zdGF0dXNOYW1lUGxhY2UnKS5hZGRDbGFzcygnc3RhdHVzQmxpbmsnKTtcbiAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoJy0nKTtcbiAgICAgICAgcm9vdC5zZXRTdXBwbGllcignLScpO1xuXG4gICAgICAgIGxldCB1bkVuYWJsZWQ9WydwYXJhbWV0ZXInLCAncHJvZHVjdFNlbGVjdCcsICdpbnZvaWNlJywgJ3NlbmQnXTtcbiAgICAgICAgJC5lYWNoKHVuRW5hYmxlZCxmdW5jdGlvbiAoaW5kZXgsdmFsdWUpIHtcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci51bnNldEVuYWJsZWQodmFsdWUpO1xuICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnVuc2V0Q29tcGxldGVkKHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVidWcocm9vdC5TdGVwcGVyLmdldE9wdHMoKVsnYXZhaWxhYmxlJ10pO1xuICAgICAgICBkZWJ1ZyhPcmRlci5nZXREYXRhKClbJ29yZGVyU3RhdHVzJ10pO1xuXG4gICAgICAgIGxldCBzdGVwQWN0aXZlPSdzdXBwbGllcic7XG4gICAgICAgIGxldCBzdGVwQ29tcGxldGU9WydzdXBwbGllciddO1xuICAgICAgICBsZXQgc3RlcEVuYWJsZT1bXTtcbiAgICAgICAgbGV0IHN0ZXBPbkFmdGVyQWN0aXZhdGU9ZnVuY3Rpb24gKCl7fTtcblxuICAgICAgICBsZXQgYXZhbGFpYmxlU3RlcHM9cm9vdC5TdGVwcGVyLmdldE9wdHMoKVsnYXZhaWxhYmxlJ107XG4gICAgICAgIGxldCBzdGVwVXJsRGF0YT1mYWxzZTtcbiAgICAgICAgbGV0IHN0ZXBBdXRvQ2FsbGJhY2s9W107XG4gICAgICAgIGZvciAobGV0IHN0ZXBOYW1lIG9mIGF2YWxhaWJsZVN0ZXBzKSB7XG4gICAgICAgICAgICBzdGVwT25BZnRlckFjdGl2YXRlPXRoaXNbJ2luaXRWaWV3JytzdGVwTmFtZS5jYXBpdGFsaXplKCldO1xuICAgICAgICAgICAgbGV0IGl0ZW09e307XG4gICAgICAgICAgICBpdGVtWydvbkFmdGVyQWN0aXZhdGUnXT1zdGVwT25BZnRlckFjdGl2YXRlO1xuICAgICAgICAgICAgc3RlcEF1dG9DYWxsYmFja1tzdGVwTmFtZV09aXRlbTtcbiAgICAgICAgfVxuICAgICAgICBkZWJ1ZyhzdGVwQXV0b0NhbGxiYWNrKTtcbiAgICAgICAgZGVidWcoT3JkZXIuZ2V0RGF0YSgpWydpZCddKTtcbiAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydpZCddPjApe1xuICAgICAgICAgICAgZGVidWcoJ2hhanJhJyk7XG4gICAgICAgICAgICBkZWJ1ZyhPcmRlci5nZXREYXRhKCkpO1xuICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSl7XG4gICAgICAgICAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSk7XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBAdG9kbzogd2Vla2x5LXQgYmVhbGxpdGFuaVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydzdXBwbGllck5hbWUnXSl7XG4gICAgICAgICAgICAgICAgcm9vdC5zZXRTdXBwbGllcihPcmRlci5nZXREYXRhKClbJ3N1cHBsaWVyTmFtZSddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0ZXBVcmxEYXRhPXsnc3VwcGxpZXJJZCc6T3JkZXIuc3VwcGxpZXJJZCxpZDpPcmRlci5pZH07XG4gICAgICAgICAgICBmb3IgKGxldCBzdGVwTmFtZSBvZiBhdmFsYWlibGVTdGVwcykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgICAgICBzdGVwQ29tcGxldGUucHVzaChzdGVwTmFtZSk7XG4gICAgICAgICAgICAgICAgc3RlcEVuYWJsZS5wdXNoKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ29yZGVyU3RhdHVzJ109PXN0ZXBOYW1lKXtcbiAgICAgICAgICAgICAgICAgICAgc3RlcEFjdGl2ZT1zdGVwTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoJ2luaXRWaWV3JytzdGVwTmFtZS5jYXBpdGFsaXplKCkpO1xuICAgICAgICAgICAgICAgICAgICBpZihzdGVwTmFtZSE9PSdpbnZvaWNlJyAmJiBzdGVwTmFtZSE9PSdzZW5kJyl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwT25BZnRlckFjdGl2YXRlPXRoaXNbJ2luaXRWaWV3JytzdGVwTmFtZS5jYXBpdGFsaXplKCldO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBPbkFmdGVyQWN0aXZhdGU9ZnVuY3Rpb24gKCl7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbi8qXG4gICAgICAgICAgICAvL3JlZmFjdG9yZWQgZm9yIGxvb3BcbiAgICAgICAgICAgIHZhciBCcmVha0V4Y2VwdGlvbiA9IHt9O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhdmFsYWlibGVTdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKHN0ZXBOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgc3RlcENvbXBsZXRlLnB1c2goc3RlcE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBzdGVwRW5hYmxlLnB1c2goc3RlcE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ29yZGVyU3RhdHVzJ109PXN0ZXBOYW1lKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBBY3RpdmU9c3RlcE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBCcmVha0V4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUgIT09IEJyZWFrRXhjZXB0aW9uKSB0aHJvdyBlO1xuICAgICAgICAgICAgfSovXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3QuU3RlcHBlci5pbml0KHtcbiAgICAgICAgICAgIGNvbXBsZXRlOnN0ZXBDb21wbGV0ZSxcbiAgICAgICAgICAgIGVuYWJsZTpzdGVwRW5hYmxlLFxuICAgICAgICAgICAgbG9hZGVkOltdLFxuICAgICAgICAgICAgYWN0aXZlOiBzdGVwQWN0aXZlLFxuICAgICAgICAgICAgVVJMOiB7XG4gICAgICAgICAgICAgICAgY3JlYXRlOiBPcHRzLlVSTC5jcmVhdGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVXJsRGF0YTpzdGVwVXJsRGF0YSxcbiAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTpzdGVwT25BZnRlckFjdGl2YXRlLFxuICAgICAgICAgICAgYXV0b0NhbGxiYWNrOiBzdGVwQXV0b0NhbGxiYWNrLFxuICAgICAgICAgICAgLyp7XG4gICAgICAgICAgICAgICAgaW52b2ljZToge1xuICAgICAgICAgICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6cm9vdC5pbml0Vmlld0ludm9pY2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnJvb3QuaW5pdFZpZXdTZW5kXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgfSovXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdE9yZGVyPWZ1bmN0aW9uIChkYXRhKXtcbiAgICAgICAgT3JkZXI9bmV3IERhdGFNb2RlbE9yZGVyKGRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIGRlYnVnKCdPcmRlck1vZHVsIGluaXQgY2FsbGVkJyk7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIHdpbmRvdy5PcmRlck1vZHVsRGVmYXVsdCwgb3B0aW9ucyk7XG4gICAgICAgIE9yZGVyPW5ldyBEYXRhTW9kZWxPcmRlcigpO1xuICAgICAgICBpZihPcHRzLm5lZWRTdGVwcGVyKXtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5TdGVwcGVyID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5TdGVwcGVyPW5ldyBTdGVwcGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoT3B0cy50ZXN0TW9kZSl7XG4gICAgICAgICAgICByZXR1cm4gcm9vdC50ZXN0TW9kZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdXBwbGllcj1mdW5jdGlvbiAoc3VwcGxpZXJOYW1lLHN1cHBsaWVySWQpe1xuICAgICAgIGlmKHN1cHBsaWVyTmFtZSl7XG4gICAgICAgICAgICQoJy5zdXBwbGllck5hbWVQbGFjZScpLnRleHQoc3VwcGxpZXJOYW1lKTtcbiAgICAgICB9XG4gICAgICAgaWYoc3VwcGxpZXJJZCl7XG4gICAgICAgICAgIE9yZGVyLnNldERhdGEoe3N1cHBsaWVySWQ6c3VwcGxpZXJJZH0pO1xuICAgICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7J1VybERhdGEnOnsnc3VwcGxpZXJJZCc6c3VwcGxpZXJJZH19KTtcbiAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0RGVsaXZlcnlEYXRlPWZ1bmN0aW9uIChkYXRlVGV4dCxkYXRlVGV4dFRvKXtcbiAgICAgICAgbGV0IGRhdGVUZXh0SHVtYW49ZGF0ZVRleHQucmVwbGFjZUFsbCgnLScsJy4nKSsnLic7XG4gICAgICAgIGlmKGRhdGVUZXh0SHVtYW4ubGVuZ3RoPDUpe1xuICAgICAgICAgICAgJCgnLmRlbGl2ZXJ5RGF0ZVBsYWNlJykudGV4dChkYXRlVGV4dCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYoZGF0ZVRleHRUbyl7XG4gICAgICAgICAgICBkYXRlVGV4dEh1bWFuKz0nIC0gJytkYXRlVGV4dFRvLnJlcGxhY2VBbGwoJy0nLCcuJykrJy4nO1xuICAgICAgICB9XG5cbiAgICAgICAgJChPcHRzLkNTU1NlbGVjdG9yRm9ybSsnIC5zZWxlY3RlZERhdGVUZXh0JykudGV4dChkYXRlVGV4dEh1bWFuKTtcbiAgICAgICAgJCgnLmRlbGl2ZXJ5RGF0ZVBsYWNlJykudGV4dChkYXRlVGV4dEh1bWFuKTtcbiAgICAgICAgJChPcHRzLkNTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9XCJkZWxpdmVyeURhdGVcIl0nKS52YWwoZGF0ZVRleHQpO1xuICAgIH1cblxuXG5cbiAgICB0aGlzLmdldERhdGE9ZnVuY3Rpb24gKCl7XG4gICAgICAgIHJldHVybiBPcmRlcjtcbiAgICB9XG5cblxuICAgIHRoaXMuc2V0U3VwcGxpZXJDb21wbGV0ZWQ9ZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnYmluZ28nKTtcbiAgICAgICAgcm9vdC5pbml0Vmlld1BhcmFtZXRlcigpXG4gICAgfVxuXG4gICAgdGhpcy5hZnRlck9yZGVyU2V0U3VwcGxpZXJPaz1mdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJTdXBwbGllciBzZWxlY3RlZCAhXCIsIG1lc3NhZ2U6IGRhdGEuc3VwcGxpZXIubmFtZSAsIHN0YXR1czogVE9BU1RfU1RBVFVTLklORk8sIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgICAgIHJvb3Quc2V0U3VwcGxpZXIoZGF0YS5zdXBwbGllci5uYW1lLGRhdGEuc3VwcGxpZXIuaWQpO1xuICAgICAgICBPcmRlci5zZXREYXRhKHtpZDpkYXRhLmlkfSk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHsnVXJsRGF0YSc6eydzdXBwbGllcklkJzpPcmRlci5zdXBwbGllcklkLGlkOk9yZGVyLmlkfX0pO1xuICAgICAgICAvL3Jvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpyb290LnNldFN1cHBsaWVyQ29tcGxldGVkfSlcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldEVuYWJsZWQoJ3BhcmFtZXRlcicpO1xuICAgICAgICByb290LlN0ZXBwZXIuYWRkQ29tcGxldGVkKCdwYXJhbWV0ZXInKTtcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldENvbXBsZXRlZCgncGFyYW1ldGVyJyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRBY3RpdmUoJ3BhcmFtZXRlcicpO1xuICAgIH1cblxuXG4gICAgdGhpcy5pbml0Vmlld1N1cHBsaWVyPWZ1bmN0aW9uICgpe1xuICAgICAgICBkZWJ1ZygnY2FsbCBpbml0Vmlld1N1cHBsaWVyJyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpmdW5jdGlvbiAoKXt9fSk7XG4gICAgICAgICQoJy5zdXBwbGllckl0ZW0nKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5zdXBwbGllckl0ZW0nKS5vbignY2xpY2snLGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKE9yZGVyLmdldERhdGEoKSk7XG5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBsZXQgc3VwcGxpZXJJZD0kKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2lkJyk7XG4gICAgICAgICAgICBsZXQgc3VwcGxpZXJOYW1lPSQoZXZlbnQuY3VycmVudFRhcmdldCkuZmluZCgnaDUuY2FyZC10aXRsZScpLnRleHQoKTtcbiAgICAgICAgICAgIGlmKHR5cGVvZiBPcmRlci5zdXBwbGllcklkPT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICAgICAgLy9uZXcgb3JkZXJcblxuICAgICAgICAgICAgICAgIGxldCBhamF4RGF0YT17fTtcbiAgICAgICAgICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcbiAgICAgICAgICAgICAgICBhamF4RGF0YS5zdXBwbGllcklkPXN1cHBsaWVySWQ7XG4gICAgICAgICAgICAgICAgYWpheERhdGEuc3RvcmVUeXBlPSdzdXBwbGllclNlbGVjdCc7XG4gICAgICAgICAgICAgICAgJC5leHRlbmQoYWpheERhdGEsT3JkZXIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHVybDogT3B0cy5VUkwuc3RvcmUsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDonUE9TVCcsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5hZnRlck9yZGVyU2V0U3VwcGxpZXJPayhkYXRhLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy9PcmRlci5zZXREYXRhKHtzdXBwbGllcklkOnN1cHBsaWVySWR9KTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIC8vaWRlIGtlbGxlbmUgZWd5IGpvIGtpcyBrZXJkZXNcbiAgICAgICAgICAgICAgICBpZihPcmRlci5zdXBwbGllcklkIT1zdXBwbGllcklkKXtcbiAgICAgICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiU3VwcGxpZXIgY2hhbmdlIHRvIVwiLCBtZXNzYWdlOiBzdXBwbGllck5hbWUsIHN0YXR1czogVE9BU1RfU1RBVFVTLldBUk5JTkcsIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJvb3QuU3RlcHBlci5jbGVhckxvYWRlZCgpO1xuICAgICAgICAgICAgICAgICAgICBPcmRlcj1uZXcgRGF0YU1vZGVsT3JkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgLy9PcmRlci5zZXREYXRhKHtzdXBwbGllcklkOnN1cHBsaWVySWR9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLScpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5TdGVwcGVyLmdldE9wdHMoKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0nKTtcblxuICAgICAgICAgICAgLy8kKCcuc3VwcGxpZXJOYW1lUGxhY2UnKS50ZXh0KHN1cHBsaWVyTmFtZSk7XG4gICAgICAgICAgICByb290LnNldFN1cHBsaWVyKHN1cHBsaWVyTmFtZSxzdXBwbGllcklkKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHN1cHBsaWVyTmFtZSlcbiAgICAgICAgICAgIC8vQHRvZG86aWRlIGtlbGwgZWd5IG1lbnRlcyFcbiAgICAgICAgICAgIC8vQHRvZG86bWVudGVzIGVyZWRlbWVueWVrZXBwZW4gbGVoZXQgdmFsdGFuaVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpyb290LnNldFN1cHBsaWVyQ29tcGxldGVkfSlcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5zZXRFbmFibGVkKCdwYXJhbWV0ZXInKTtcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5hZGRDb21wbGV0ZWQoJ3BhcmFtZXRlcicpO1xuICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnNldENvbXBsZXRlZCgncGFyYW1ldGVyJyk7XG4gICAgICAgICAgICByb290LlN0ZXBwZXIuc2V0QWN0aXZlKCdwYXJhbWV0ZXInKTtcblxuXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2hlY2tDb250YWN0TmFtZUZpZWxkPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT0nLm9yZGVyUGFyYW1ldGVyRm9ybSc7XG4gICAgICAgIGxldCBub2RlPSQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1jb250YWN0TmFtZV0nKTtcbiAgICAgICAgaWYobm9kZS52YWwoKS5sZW5ndGg8Mil7XG4gICAgICAgICAgICBub2RlLnJlbW92ZUNsYXNzKCdpcy12YWxpZCcpO1xuICAgICAgICAgICAgbm9kZS5hZGRDbGFzcygnaXMtaW52YWxpZCcpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIG5vZGUuYWRkQ2xhc3MoJ2lzLXZhbGlkJyk7XG4gICAgICAgICAgICBub2RlLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbiAgICB0aGlzLnNlbmRPcmRlckRhdGFUb1NlcnZlcj1mdW5jdGlvbiAodXBkYXRlVHlwZSxjYWxsYmFjayxlcnJvckNhbGxiYWNrKSB7XG4gICAgICAgIGxldCBhamF4RGF0YT0ge307XG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xuICAgICAgICBsZXQgYWpheE1ldGhvZD1cIlBPU1RcIjtcbiAgICAgICAgaWYoT3JkZXIuaWQpe1xuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScsT3JkZXIuaWQpO1xuICAgICAgICAgICAgLy9hamF4TWV0aG9kPVwiUFVUXCI7XG4gICAgICAgICAgICAvL2FqYXhEYXRhPW5ldyBGb3JtRGF0YSgkKENTU1NlbGVjdG9yRm9ybSlbMF0pO1xuICAgICAgICAgICAgYWpheERhdGEuX21ldGhvZD0nUFVUJztcbiAgICAgICAgfVxuICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcbiAgICAgICAgYWpheERhdGEudXBkYXRlVHlwZT11cGRhdGVUeXBlO1xuICAgICAgICAkLmV4dGVuZChhamF4RGF0YSxPcmRlcik7XG4gICAgICAgIGRlYnVnKE9yZGVyKTtcbiAgICAgICAgZGVidWcoYWpheERhdGEpO1xuICAgICAgICBkZWJ1ZygnYWpheFVybDonK2FqYXhVcmwpO1xuICAgICAgICBhamF4RGF0YT1qc29uVG9Gb3JtRGF0YShhamF4RGF0YSk7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6YWpheFVybCxcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZygnYWpheCByZXR1cm5lZCBkYXRhJyk7XG4gICAgICAgICAgICAgICAgZGVidWcoZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzKXtcbiAgICAgICAgICAgICAgICAgICAgLy9yb290LmFmdGVyT3JkZXJTZXRTdXBwbGllck9rKGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhociwgYWpheE9wdGlvbnMsIHRocm93bkVycm9yKSB7XG4gICAgICAgICAgICAgICAgYWpheEVycm9ySGFuZGxlcih4aHIsIGFqYXhPcHRpb25zLCB0aHJvd25FcnJvcik7XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGVycm9yQ2FsbGJhY2shPSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjayh4aHIucmVzcG9uc2VKU09OKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIHRoaXMuYWZ0ZXJPcmRlclNldFBhcmFtZXRlck9rPWZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGRlYnVnKCdjYWxsZWQgYWZ0ZXJPcmRlclNldFBhcmFtZXRlck9rJyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHsnVXJsRGF0YSc6eydzdXBwbGllcklkJzpPcmRlci5zdXBwbGllcklkLCdpZCc6T3JkZXIuaWR9fSk7XG4gICAgICAgIC8vcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOnJvb3Quc2V0UGFyYW1ldGVyQ29tcGxldGVkfSlcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldEVuYWJsZWQoJ3Byb2R1Y3RTZWxlY3QnKTtcbiAgICAgICAgcm9vdC5TdGVwcGVyLmFkZENvbXBsZXRlZCgncHJvZHVjdFNlbGVjdCcpO1xuICAgICAgICByb290LlN0ZXBwZXIuc2V0Q29tcGxldGVkKCdwcm9kdWN0U2VsZWN0Jyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRBY3RpdmUoJ3Byb2R1Y3RTZWxlY3QnKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RDdXJyZW50V2VlayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdzZWxlY3RDdXJyZW50V2VlaycpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCQoJy51aS1kYXRlcGlja2VyJykuZmluZCgnLnVpLWRhdGVwaWNrZXItY3VycmVudC1kYXkgYScpKTtcbiAgICAgICAgJCgnLnVpLWRhdGVwaWNrZXInKS5maW5kKCcudWktZGF0ZXBpY2tlci1jdXJyZW50LXNlbGVjdGVkLXdlZWtkYXkgYScpLmFkZENsYXNzKCd1aS1zdGF0ZS1hY3RpdmUnKVxuICAgIH1cbiAgICB0aGlzLndlZWtIb3ZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdob3ZlciBBY3RpdmUnKTtcbiAgICAgICAgJCgnLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdHInKS5vZmYoJ21vdXNlbW92ZScpO1xuICAgICAgICAkKCcudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0cicpLm9mZignbW91c2VsZWF2ZScpO1xuXG4gICAgICAgICQoJy51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRyJykub24oJ21vdXNlbW92ZScsIGZ1bmN0aW9uKCkgeyAkKHRoaXMpLmZpbmQoJ3RkIGEnKS5hZGRDbGFzcygndWktc3RhdGUtaG92ZXInKTsgfSk7XG4gICAgICAgICQoJy51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRyJykub24oJ21vdXNlbGVhdmUnLCBmdW5jdGlvbigpIHsgJCh0aGlzKS5maW5kKCd0ZCBhJykucmVtb3ZlQ2xhc3MoJ3VpLXN0YXRlLWhvdmVyJyk7IH0pO1xuXG4gICAgfVxuICAgIHRoaXMud2Vla0hvdmVyU2xvdyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd3ZWVrSG92ZXJTbG93Jyk7XG4gICAgICAgIGlmKCQoJy51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRyJykubGVuZ3RoPDEpe1xuICAgICAgICAgICAgc2V0VGltZW91dChyb290LndlZWtIb3ZlclNsb3csIDEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJvb3Qud2Vla0hvdmVyKCk7XG4gICAgfVxuICAgIHRoaXMuaW5pdERhdGVQaWNrZXI9ZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignYXNkYXNkYWRhZCcpO1xuICAgICAgICBjb25zb2xlLmxvZygndGlwdXMnICsgdHlwZSk7XG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm0gPSAnLm9yZGVyUGFyYW1ldGVyRm9ybSc7XG4gICAgICAgIGxldCBzdGFydERhdGU9bmV3IERhdGUoJzE5MDAtMDEtMDEnKTtcbiAgICAgICAgbGV0IGVuZERhdGU9bmV3IERhdGUoJzE5MDAtMDEtMDInKTtcblxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgLmRhdGVQaWNrZXInKS5kYXRlcGlja2VyKFwiZGVzdHJveVwiKTtcblxuICAgICAgICBpZiAodHlwZSA9PSAnd2Vla2x5Jykge1xuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIC5kYXRlUGlja2VyJykuZGF0ZXBpY2tlcih7XG4gICAgICAgICAgICAgICAgc2hvd090aGVyTW9udGhzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNlbGVjdE90aGVyTW9udGhzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNob3dXZWVrOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsXG4gICAgICAgICAgICAgICAgZmlyc3REYXk6IDEsXG4gICAgICAgICAgICAgICAgbWluRGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBhZnRlclNob3c6IGZ1bmN0aW9uIChkYXRlVGV4dCwgaW5zdCkge1xuICAgICAgICAgICAgICAgICAgcm9vdC53ZWVrSG92ZXIoKTtcbiAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0Q3VycmVudFdlZWsoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGUgPSAkKHRoaXMpLmRhdGVwaWNrZXIoJ2dldERhdGUnKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gbmV3IGdldE1vbmRheShkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkgKyA3KTtcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoICd5eS1tbS1kZCcsc3RhcnREYXRlKSwkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSggJ3l5LW1tLWRkJyxlbmREYXRlKSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJlZm9yZVNob3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5ncm91cCgnYmVmb3JlU2hvdycpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHN0YXJ0RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuZERhdGUpO1xuICAgICAgICAgICAgICAgICAgICAvL3Jvb3Qud2Vla0hvdmVyU2xvdygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiZWZvcmVTaG93RGF5OiBmdW5jdGlvbihkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoJ2JlZm9yZVNob3dEYXknKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2h1LUh1JykpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3NzQ2xhc3MgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0ZSA+PSBzdGFydERhdGUgJiYgZGF0ZSA8PSBlbmREYXRlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2h1LUh1JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3MgPSAndWktZGF0ZXBpY2tlci1jdXJyZW50LXNlbGVjdGVkLXdlZWtkYXknO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9jc3NDbGFzcyA9ICd1aS1zdGF0ZS1hY3RpdmUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNzc0NsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwgY3NzQ2xhc3NdO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25DaGFuZ2VNb250aFllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBpbnN0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vcm9vdC5zZWxlY3RDdXJyZW50V2VlaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTesOhbGzDrXTDoXNpIGtvcmzDoXRvesOhcyBhZGF0b2sgYmV0w7ZsdMOpc2UgKGNzYWsgaGEgaGFzRGVsaXZlcnlDb25zdHJhaW50ID0gdHJ1ZSlcbiAgICAgICAgICAgIGxldCBhdmFpbGFibGVEYXRlcyA9IFtdO1xuICAgICAgICAgICAgbGV0IG5leHREZWxpdmVyeURhdGUgPSBudWxsO1xuICAgICAgICAgICAgbGV0IGhhc0RlbGl2ZXJ5Q29uc3RyYWludCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGhvbGlkYXlzID0gW107XG4gICAgICAgICAgICBsZXQgd29ya2luZ0RheXMgPSBbXTtcbiAgICAgICAgICAgIGxldCBkYXRlcGlja2VySW5wdXQgPSAkKENTU1NlbGVjdG9yRm9ybSArICcgLmRhdGVQaWNrZXInKTtcbiAgICAgICAgICAgIGxldCBjYWxlbmRhclVybCA9IGRhdGVwaWNrZXJJbnB1dC5kYXRhKCdkZWxpdmVyeS1jYWxlbmRhci11cmwnKTtcbiAgICAgICAgICAgIGxldCBzdXBwbGllcklkID0gZGF0ZXBpY2tlcklucHV0LmRhdGEoJ3N1cHBsaWVyLWlkJyk7XG4gICAgICAgICAgICBsZXQgcHJvZml0Q2VudGVySWQgPSBkYXRlcGlja2VySW5wdXQuZGF0YSgncHJvZml0LWNlbnRlci1pZCcpO1xuXG4gICAgICAgICAgICBpZiAoY2FsZW5kYXJVcmwgJiYgc3VwcGxpZXJJZCAmJiBwcm9maXRDZW50ZXJJZCkge1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHVybDogY2FsZW5kYXJVcmwsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBsaWVySWQ6IHN1cHBsaWVySWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9maXRDZW50ZXJJZDogcHJvZml0Q2VudGVySWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlckRhdGVUaW1lOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0RlbGl2ZXJ5Q29uc3RyYWludCA9IGRhdGEuaGFzRGVsaXZlcnlDb25zdHJhaW50IHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gw5xubmVwbmFwb2sgw6lzIMOhdGhlbHllemV0dCBtdW5rYW5hcG9rIOKAkyBtaW5kaWcgYmV0w7ZsdGrDvGtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGlkYXlzID0gKGRhdGEuaG9saWRheXMgfHwgW10pLm1hcChmdW5jdGlvbihoKSB7IHJldHVybiB7IGRhdGU6IGguZGF0ZSwgZGVzY3JpcHRpb246IGguZGVzY3JpcHRpb24gfTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JraW5nRGF5cyA9IChkYXRhLndvcmtpbmdEYXlzIHx8IFtdKS5tYXAoZnVuY3Rpb24odykgeyByZXR1cm4geyBkYXRlOiB3LmRhdGUsIGRlc2NyaXB0aW9uOiB3LmRlc2NyaXB0aW9uIH07IH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGVsaXZlcnlDb25zdHJhaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlRGF0ZXMgPSBkYXRhLmF2YWlsYWJsZURhdGVzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHREZWxpdmVyeURhdGUgPSBkYXRhLm5leHREZWxpdmVyeURhdGUgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhIG5pbmNzIHN6w6FsbMOtdMOhc2kga29ybMOhdG96w6FzLCBheiBhdmFpbGFibGVEYXRlcyDDqXMgbmV4dERlbGl2ZXJ5RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gw7xyZXMgbWFyYWQg4oCTIGEgZGF0ZXBpY2tlciBheiBlcmVkZXRpIG3Ds2RvbiB2aXNlbGtlZGlrXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNEZWxpdmVyeUNvbnN0cmFpbnQgJiYgbmV4dERlbGl2ZXJ5RGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIEvDtnZldGtlesWRIHN6w6FsbMOtdMOhc2kgbmFwIGJlw6FsbMOtdMOhc2EgYWxhcMOpcnRlbG1lemV0dGvDqW50XG4gICAgICAgICAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUobmV4dERlbGl2ZXJ5RGF0ZSk7XG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIC5zZWxlY3RlZERhdGVUZXh0JykudGV4dChuZXh0RGVsaXZlcnlEYXRlKTtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgaW5wdXRbbmFtZT1cImRlbGl2ZXJ5RGF0ZVwiXScpLnZhbChuZXh0RGVsaXZlcnlEYXRlKTtcbiAgICAgICAgICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KG5leHREZWxpdmVyeURhdGUucmVwbGFjZUFsbCgnLScsICcuJykgKyAnLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTesOtbiBqZWxtYWd5YXLDoXphdCBtZWdqZWxlbsOtdMOpc2UgY3NhayBzesOhbGzDrXTDoXNpIGtvcmzDoXRvesOhcyBlc2V0w6luXG4gICAgICAgICAgICBpZiAoaGFzRGVsaXZlcnlDb25zdHJhaW50KSB7XG4gICAgICAgICAgICAgICAgJCgnI2RlbGl2ZXJ5RGF0ZUxlZ2VuZCcpLnNob3coKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRhdGVwaWNrZXJPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsXG4gICAgICAgICAgICAgICAgbWluRGF0ZTogKGhhc0RlbGl2ZXJ5Q29uc3RyYWludCAmJiBuZXh0RGVsaXZlcnlEYXRlKSA/IG5ldyBEYXRlKG5leHREZWxpdmVyeURhdGUpIDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBvblNlbGVjdDogZnVuY3Rpb24gKGRhdGVUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyAuc2VsZWN0ZWREYXRlVGV4dCcpLnRleHQoZGF0ZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KGRhdGVUZXh0LnJlcGxhY2VBbGwoJy0nLCAnLicpICsgJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIGlucHV0W25hbWU9XCJkZWxpdmVyeURhdGVcIl0nKS52YWwoZGF0ZVRleHQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBiZWZvcmVTaG93RGF5OiBtaW5kaWcgYWt0w612IGhhIHZhbiBtdW5rYW5hcHTDoXIgYWRhdCB2YWd5IGhhc0RlbGl2ZXJ5Q29uc3RyYWludFxuICAgICAgICAgICAgZGF0ZXBpY2tlck9wdHMuYmVmb3JlU2hvd0RheSA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGVTdHIgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSgneXktbW0tZGQnLCBkYXRlKTtcblxuICAgICAgICAgICAgICAgIGxldCBob2xpZGF5RW50cnkgPSBob2xpZGF5cy5maW5kKGZ1bmN0aW9uKGgpIHsgcmV0dXJuIGguZGF0ZSA9PT0gZGF0ZVN0cjsgfSk7XG4gICAgICAgICAgICAgICAgbGV0IHdvcmtpbmdEYXlFbnRyeSA9IHdvcmtpbmdEYXlzLmZpbmQoZnVuY3Rpb24odykgeyByZXR1cm4gdy5kYXRlID09PSBkYXRlU3RyOyB9KTtcblxuICAgICAgICAgICAgICAgIGxldCBpc0RlbGl2ZXJ5ID0gaGFzRGVsaXZlcnlDb25zdHJhaW50ICYmIGF2YWlsYWJsZURhdGVzLmluY2x1ZGVzKGRhdGVTdHIpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGNzc0NsYXNzZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgdG9vbHRpcCA9ICcnO1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RhYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChob2xpZGF5RW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3Nlcy5wdXNoKCd3b3JrLWNhbGVuZGFyLWhvbGlkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcCA9ICfDnG5uZXBuYXAnICsgKGhvbGlkYXlFbnRyeS5kZXNjcmlwdGlvbiA/ICc6ICcgKyBob2xpZGF5RW50cnkuZGVzY3JpcHRpb24gOiAnJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3b3JraW5nRGF5RW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3Nlcy5wdXNoKCd3b3JrLWNhbGVuZGFyLXdvcmtpbmctZGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAgPSAnw4F0aGVseWV6ZXR0IG11bmthbmFwJyArICh3b3JraW5nRGF5RW50cnkuZGVzY3JpcHRpb24gPyAnOiAnICsgd29ya2luZ0RheUVudHJ5LmRlc2NyaXB0aW9uIDogJycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChoYXNEZWxpdmVyeUNvbnN0cmFpbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVsaXZlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXMucHVzaCgnZGVsaXZlcnktZGF5LWF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b29sdGlwKSB0b29sdGlwID0gJ1N6w6FsbMOtdMOhc2kgbmFwJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXMucHVzaCgnZGVsaXZlcnktZGF5LXVuYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRvb2x0aXApIHRvb2x0aXAgPSAnTmVtIHN6w6FsbMOtdMOhc2kgbmFwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBIYSDDvG5uZXBuYXAgw6lzIGhhc0RlbGl2ZXJ5Q29uc3RyYWludCBuaW5jcyBiZWthcGNzb2x2YSwgYXogw7xubmVwbmFwIGlzIGxldGlsdGFuZMOzXG4gICAgICAgICAgICAgICAgaWYgKGhvbGlkYXlFbnRyeSAmJiAhaGFzRGVsaXZlcnlDb25zdHJhaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW3NlbGVjdGFibGUsIGNzc0NsYXNzZXMuam9pbignICcpLCB0b29sdGlwXTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoZGF0ZXBpY2tlck9wdHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2FsbENoYW5nZU9yZGVyVHlwZT1mdW5jdGlvbigpe1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy52YWx1ZSk7XG4gICAgICAgIHJvb3QuaW5pdERhdGVQaWNrZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIC8vZW51bSgnZGFpbHknLCAnd2Vla2x5JylcbiAgICAgICAgLypsZXQgQ1NTU2VsZWN0b3JGb3JtPScub3JkZXJQYXJhbWV0ZXJGb3JtJztcbiAgICAgICAgbGV0IG5vZGU9JChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpO1xuICAgICAgICBpZihub2RlLnZhbCgpLmxlbmd0aDwyKXtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2xhc3MoJ2lzLXZhbGlkJyk7XG4gICAgICAgICAgICBub2RlLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgbm9kZS5hZGRDbGFzcygnaXMtdmFsaWQnKTtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgICovXG4gICAgfVxuXG4gICAgdGhpcy5pbml0Vmlld1BhcmFtZXRlcj1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjYWxsIGluaXRWaWV3UGFyYW1ldGVyJyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpmdW5jdGlvbiAoKXt9fSk7XG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09Jy5vcmRlclBhcmFtZXRlckZvcm0nO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5kYXRlUGlja2VyQ2xpY2snKS5jbGljayhmdW5jdGlvbigpe1xuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoJ3Nob3cnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAub3JkZXJQYXJhbWV0ZXJEZWxpdmVyeUFkZHJlc3MnKS5zZWxlY3QyKHt9KS5zaG93KCk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1jb250YWN0TmFtZV0nKS5vZmYoJ2JsdXInKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpLm9mZigna2V5dXAnKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpLm9uKCdibHVyJyxyb290LmNoZWNrQ29udGFjdE5hbWVGaWVsZCk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1jb250YWN0TmFtZV0nKS5vbigna2V5dXAnLHJvb3QuY2hlY2tDb250YWN0TmFtZUZpZWxkKTtcblxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9b3JkZXJUeXBlXScpLm9mZignY2hhbmdlJyk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1vcmRlclR5cGVdJykub24oJ2NoYW5nZScscm9vdC5jYWxsQ2hhbmdlT3JkZXJUeXBlKTtcblxuXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLm9yZGVyUGFyYW1ldGVyTmV4dEJ1dHRvbicpLm9mZignY2xpY2snKTtcbiAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydpZCddPjApe1xuICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydvcmRlclR5cGUnXT09J3dlZWtseScpe1xuICAgICAgICAgICAgICAgIHJvb3QuaW5pdERhdGVQaWNrZXIoT3JkZXIuZ2V0RGF0YSgpWydvcmRlclR5cGUnXSk7XG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rXCIgaW5wdXRbbmFtZT1vcmRlclR5cGVdW3ZhbHVlPVwiICsgT3JkZXIuZ2V0RGF0YSgpWydvcmRlclR5cGUnXSArIFwiXVwiKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSk7XG4gICAgICAgICAgICAgICAgZW5kRGF0ZS5zZXREYXRlKGVuZERhdGUuZ2V0RGF0ZSgpICsgNik7XG4gICAgICAgICAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSwkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSggJ3l5LW1tLWRkJyxlbmREYXRlKSk7XG4gICAgICAgICAgICAgICAgcm9vdC5pbml0RGF0ZVBpY2tlcignd2Vla2x5Jyk7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5RGF0ZSddKXtcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJvb3QuaW5pdERhdGVQaWNrZXIoJ2RhaWx5Jyk7XG4gICAgICAgICAgICB9XG5cblxuXG4gICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2NvbnRhY3ROYW1lJ10pe1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1jb250YWN0TmFtZV0nKS52YWwoT3JkZXIuZ2V0RGF0YSgpWydjb250YWN0TmFtZSddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnbm90ZSddKXtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHRleHRhcmVhW25hbWU9bm90ZV0nKS52YWwoT3JkZXIuZ2V0RGF0YSgpWydub3RlJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeUFkZHJlc3NJZCddKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKENTU1NlbGVjdG9yRm9ybSsnIHNlbGVjdFtuYW1lPWRlbGl2ZXJ5QWRkcmVzc0lkXScpKTtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHNlbGVjdFtuYW1lPWRlbGl2ZXJ5QWRkcmVzc0lkXScpLnZhbChPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5QWRkcmVzc0lkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydjdXN0b21Ob3RpZmljYXRpb25FbWFpbCddKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKENTU1NlbGVjdG9yRm9ybSsnIHNlbGVjdFtuYW1lPWN1c3RvbU5vdGlmaWNhdGlvbkVtYWlsXScpKTtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHNlbGVjdFtuYW1lPWN1c3RvbU5vdGlmaWNhdGlvbkVtYWlsXScpLnZhbChPcmRlci5nZXREYXRhKClbJ2N1c3RvbU5vdGlmaWNhdGlvbkVtYWlsJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJvb3QuaW5pdERhdGVQaWNrZXIoJ2RhaWx5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5vcmRlclBhcmFtZXRlckRlbGl2ZXJ5QWRkcmVzcycpLnNlbGVjdDIoe30pLnNob3coKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAub3JkZXJQYXJhbWV0ZXJDdXN0b21Ob3RpZmljYXRpb25FbWFpbCcpLnNlbGVjdDIoe30pLnNob3coKTtcblxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSkuc3VibWl0KGZ1bmN0aW9uKGV2ZW50KXtcblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGRlYnVnKCd2YWxpZGF0b24gZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgZGVidWcoJ3ZhbGlkYXRvbiBvaycpO1xuICAgICAgICAgICAgICAgIC8vZG8geW91ciBhamF4IHN1Ym1pdGlvbiBoZXJlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KCQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1kZWxpdmVyeURhdGVdJykudmFsKCkucmVwbGFjZUFsbCgnLScsJy4nKSsnLicpO1xuXG4gICAgICAgICAgICBPcmRlci5zZXREYXRhKHtcbiAgICAgICAgICAgICAgICBjb250YWN0TmFtZTokKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Y29udGFjdE5hbWVdJykudmFsKCksXG4gICAgICAgICAgICAgICAgbm90ZTokKENTU1NlbGVjdG9yRm9ybSsnIHRleHRhcmVhW25hbWU9bm90ZV0nKS52YWwoKSxcbiAgICAgICAgICAgICAgICBvcmRlclR5cGU6JChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dDpjaGVja2VkW25hbWU9b3JkZXJUeXBlXScpLnZhbCgpLFxuICAgICAgICAgICAgICAgIGRlbGl2ZXJ5RGF0ZTokKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9ZGVsaXZlcnlEYXRlXScpLnZhbCgpLFxuICAgICAgICAgICAgICAgIGRlbGl2ZXJ5QWRkcmVzc0lkOiQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9ZGVsaXZlcnlBZGRyZXNzSWRdJykudmFsKCksXG4gICAgICAgICAgICAgICAgZGVsaXZlcnlBZGRyZXNzOiQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9ZGVsaXZlcnlBZGRyZXNzXScpLnZhbCgpLFxuICAgICAgICAgICAgICAgIGN1c3RvbU5vdGlmaWNhdGlvbkVtYWlsOiQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9Y3VzdG9tTm90aWZpY2F0aW9uRW1haWxdJykudmFsKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoJ3BhcmFtZXRlciBmb3JtIHN1Ym1pdCcpXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXQ6Y2hlY2tlZFtuYW1lPW9yZGVyVHlwZV0nKS52YWwoKSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1kZWxpdmVyeURhdGVdJykudmFsKCkpO1xuICAgICAgICAgICAgZGVidWcoT3JkZXIuZ2V0RGF0YSgpKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgIHJvb3Quc2VuZE9yZGVyRGF0YVRvU2VydmVyKCdwYXJhbWV0ZXInLHJvb3QuYWZ0ZXJPcmRlclNldFBhcmFtZXRlck9rKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG4gICAgdGhpcy5ibGFuaz1mdW5jdGlvbiAoKXt9O1xuICAgIHRoaXMuc2V0UGFyYW1ldGVyQ29tcGxldGVkPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3NldFBhcmFtZXRlckNvbXBsZXRlZCBjYWxsZWQnKTtcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOmZ1bmN0aW9uICgpe319KTtcbiAgICAgICAgLy9yb290LmluaXRWaWV3UHJvZHVjdFNlbGVjdCgpXG4gICAgfVxuXG4gICAgdGhpcy5iaW5kUm93RmF2b3JpdGVzQWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkKCcuYnV0dG9uSXRlbUZhdm9yaXRlcycpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnLmJ1dHRvbkl0ZW1GYXZvcml0ZXMnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgcHJvZHVjdElkID0gJCh0aGlzKS5kYXRhKCdpZCcpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocHJvZHVjdElkKTtcblxuICAgICAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwudG9nZ2xlRmF2b3JpdGVzLnJlcGxhY2UoJyVpZCUnLHByb2R1Y3RJZCk7XG4gICAgICAgICAgICBsZXQgYWpheERhdGE9e307XG4gICAgICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcbiAgICAgICAgICAgIGxldCBidXR0b249dGhpcztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGFqYXhVcmwpO1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IGFqYXhVcmwsXG4gICAgICAgICAgICAgICAgbWV0aG9kOidQT1NUJyxcbiAgICAgICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN1Y2Nlc3Mpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoYnV0dG9uKS5hZGRDbGFzcygnYnRuLXdhcm5pbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGJ1dHRvbikucmVtb3ZlQ2xhc3MoJ2J0bi1saWdodCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChidXR0b24pLnJlbW92ZUNsYXNzKCdidG4td2FybmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoYnV0dG9uKS5hZGRDbGFzcygnYnRuLWxpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoJ2J0bi13YXJuaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoJ2J0bi1saWdodCcpO1xuICAgICAgICAgICAgKi9cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5iaW5kUm93RGVzY3JpcHRpb25BY3Rpb249ZnVuY3Rpb24gKCl7XG4gICAgICAgICQoJ3RleHRhcmVhLm9yZGVySXRlbUNvbW1lbnQnKS5vbignY2hhbmdlJyxmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIGxldCBjb21tZW50PSQodGhpcykudmFsKCk7XG4gICAgICAgICAgICBsZXQgcHJvZHVjdElkPSQodGhpcykuZGF0YSgnaWQnKTtcbiAgICAgICAgICAgIGxldCBwcm9kdWN0Q29tbWVudD1PcmRlci5nZXREYXRhKCdwcm9kdWN0Q29tbWVudCcpO1xuICAgICAgICAgICAgaWYocHJvZHVjdENvbW1lbnQhPT1udWxsKXtcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdENvbW1lbnRbcHJvZHVjdElkXT09J3VuZGVmaW5lZCcgJiYgY29tbWVudC5sZW5ndGg9PT0wKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihwcm9kdWN0Q29tbWVudFtwcm9kdWN0SWRdPT09Y29tbWVudCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9kdWN0Q29tbWVudFtwcm9kdWN0SWRdPWNvbW1lbnQ7XG4gICAgICAgICAgICBpZihjb21tZW50Lmxlbmd0aD09PTApe1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBPcmRlci5wcm9kdWN0Q29tbWVudFtwcm9kdWN0SWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT3JkZXIucHJvZHVjdENvbW1lbnQ9cHJvZHVjdENvbW1lbnQ7XG4gICAgICAgICAgICBxdWV1ZUFqYXgucHVzaChEYXRlLm5vdygpKTtcbiAgICAgICAgICAgIHJvb3Quc3luY09yZGVyRGF0YVRvU2VydmVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucHJvZHVjdFNlbGVjdERhdGF0YWJsZXNSb3dGb3JtYXR0ZXI9ZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgLy8gYGRgIGlzIHRoZSBvcmlnaW5hbCBkYXRhIG9iamVjdCBmb3IgdGhlIHJvd1xuICAgICAgICAvKipcbiAgICAgICAgQHRvZG86IGZlbHN6ZWRuaSBlcyB1cGRhdGVsbmkgYXogYWRvdHQgdGVybWVrIG1lbW9qYXQgYXogb3JkZXJiYW5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnNvbGUuZ3JvdXAoJ3Byb2R1Y3RTZWxlY3REYXRhdGFibGVzUm93Rm9ybWF0dGVyJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGQpO1xuICAgICAgICBsZXQgdGVtcGxhdGVEYXRhPWQ7XG4gICAgICAgIHRlbXBsYXRlRGF0YS5jb21tZW50PScnO1xuLy8gICAgICAgIGRlYnVnKE9yZGVyKTtcbiAgICAgICAgaWYoT3JkZXIucHJvZHVjdENvbW1lbnQgJiYgT3JkZXIucHJvZHVjdENvbW1lbnQhPT1udWxsKXtcbiAgICAgICAgICAgIGRlYnVnKHR5cGVvZiBPcmRlci5wcm9kdWN0Q29tbWVudFtkLmlkXSk7XG4gICAgICAgICAgICBpZih0eXBlb2YgT3JkZXIucHJvZHVjdENvbW1lbnRbZC5pZF0hPSd1bmRlZmluZWQnICYmIE9yZGVyLnByb2R1Y3RDb21tZW50W2QuaWRdLmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZURhdGEuY29tbWVudD1PcmRlci5wcm9kdWN0Q29tbWVudFtkLmlkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKiogQHR5cGVkZWYge2Jvb2xlYW59IGQuZmF2b3JpdGVzICovXG4gICAgICAgIGlmKGQuZmF2b3JpdGVzPT09dHJ1ZSl7XG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEuYnRuRmF2b3JpdGVzQ2xhc3M9J2J0bi13YXJuaW5nJztcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEuYnRuRmF2b3JpdGVzQ2xhc3M9J2J0bi1saWdodCc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cIm9yZGVyUHJvZHVjdFNlbGVjdERldGFpbHNcIl0nKS5odG1sKClcbiAgICAgICAgdGVtcGxhdGVEYXRhLndlZWtseT1mYWxzZTtcbiAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpLm9yZGVyVHlwZT09PSd3ZWVrbHknKXtcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS53ZWVrbHk9dHJ1ZTtcbi8qXG5cbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS53ZWVrbHlEYXk9W1xuICAgICAgICAgICAgICAgIHtcImluZGV4XCI6MSxcIm5hbWVcIjpcIkjDqXRmxZFcIn0sXG4gICAgICAgICAgICB7XCJpbmRleFwiOjIsXCJuYW1lXCI6XCJLZWRkXCJ9LFxuICAgICAgICAgICAge1wiaW5kZXhcIjozLFwibmFtZVwiOlwiU3plcmRhXCJ9LFxuICAgICAgICAgICAge1wiaW5kZXhcIjo0LFwibmFtZVwiOlwiQ3PDvHTDtnJ0w7ZrXCJ9LFxuICAgICAgICAgICAge1wiaW5kZXhcIjo1LFwibmFtZVwiOlwiUMOpbnRla1wifSxcbiAgICAgICAgICAgIHtcImluZGV4XCI6NixcIm5hbWVcIjpcIlN6b21iYXRcIn0sXG4gICAgICAgICAgICB7XCJpbmRleFwiOjcsXCJuYW1lXCI6XCJWYXPDoXJuYXBcIn0sXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEud2Vla2x5RGF5PVtcbiAgICAgICAgICAgICAgICB7XCJpbmRleFwiOjIsXCJuYW1lXCI6XCJIw6l0ZsWRXCIgfSxcbiAgICAgICAgICAgICAgICB7XCJuYW1lXCI6XCJLZWRkXCJ9LFxuICAgICAgICAgICAgICAgIHtcIm5hbWVcIjpcIlN6ZXJkYVwifSxcbiAgICAgICAgICAgICAgICB7XCJuYW1lXCI6XCJDc8O8dMO2cnTDtmtcIn0sXG4gICAgICAgICAgICAgICAge1wibmFtZVwiOlwiUMOpbnRla1wifSxcbiAgICAgICAgICAgICAgICB7XCJuYW1lXCI6XCJTem9tYmF0XCJ9LFxuICAgICAgICAgICAgICAgIHtcIm5hbWVcIjpcIlZhc8Ohcm5hcFwifVxuICAgICAgICAgICAgXTtcbiovXG4gICAgICAgIH1cbiAgICAgICAgbGV0IHByb2R1Y3RTZWxlY3RlZD1PcmRlci5nZXREYXRhKCdwcm9kdWN0U2VsZWN0ZWQnKTtcbiAgICAgICAgaWYodHlwZW9mIHByb2R1Y3RTZWxlY3RlZFtkLmlkXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgdGVtcGxhdGVEYXRhLml0ZW1RdWFudGl0eT1wcm9kdWN0U2VsZWN0ZWRbZC5pZF07XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coWyd0ZW1wbGF0ZURhdGEnLHRlbXBsYXRlRGF0YV0pO1xuICAgICAgICBsZXQgb2xkVGFncz1NdXN0YWNoZS50YWdzO1xuICAgICAgICBNdXN0YWNoZS50YWdzID0gW1wifiFcIiwgXCIhflwiXTtcbiAgICAgICAgaWYodGVtcGxhdGVEYXRhWydzcGVjaWZpY2F0aW9uJ109PSdmYWxzZScgfHwgdGVtcGxhdGVEYXRhWydzcGVjaWZpY2F0aW9uJ109PWZhbHNlKXtcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5zcGVjaWZpY2F0aW9uQ2xhc3M9J2Qtbm9uZSc7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcGxhdGVEYXRhLnBpY3R1cmVJbWc9Jyc7XG4gICAgICAgIGlmKHRlbXBsYXRlRGF0YVsncGljdHVyZSddPT0nZmFsc2UnIHx8IHRlbXBsYXRlRGF0YVsncGljdHVyZSddPT1mYWxzZSl7XG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEucGljdHVyZUNsYXNzPSdkLW5vbmUnO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5waWN0dXJlSW1nPSc8aW1nIHNyYz0gXCInK3RlbXBsYXRlRGF0YVsncGljdHVyZSddKydcIiBjbGFzcz1cInByb2R1Y3RQaWN0dXJlXCIgPjwvaW1nPic7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ3RlbXBsYXRlRGF0YScsdGVtcGxhdGVEYXRhKTtcbiAgICAgICAgLy90ZW1wbGF0ZURhdGFbJ2FhX3NwZWNpZmljYXRpb24nXT1mYWxzZTtcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsdGVtcGxhdGVEYXRhKTtcbiAgICAgICAgTXVzdGFjaGUudGFncyA9b2xkVGFncztcbiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuLypcbnNvbHV0aW9uIGJlZm9yZSB0ZW1wbGF0ZVxuICAgICAgICByZXR1cm4gJzx0YWJsZSBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIiBib3JkZXI9XCIwXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6NTBweDtcIj4nK1xuICAgICAgICAgICAgJzx0cj4nK1xuICAgICAgICAgICAgJzx0ZD5JbmZvOjwvdGQ+JytcbiAgICAgICAgICAgICc8dGQ+JytkLm5vdGUrJzwvdGQ+JytcbiAgICAgICAgICAgICc8L3RyPicrXG4gICAgICAgICAgICAnPHRyPicrXG4gICAgICAgICAgICAnPHRkPmhvb3JleWNhIDo8L3RkPicrXG4gICAgICAgICAgICAnPHRkPjxzcGFuIHN0eWxlPVwicGFkZGluZy1yaWdodDogMmVtO1wiPicrZC5ob29yZXljYUlkKyc8L3NwYW4+JyArXG5cbiAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxcbicgK1xuICAgICAgICAgICAgJyAgICAgICAgZGF0YS1pZD1cIicrZC5pZCsnXCJcXG4nICtcbiAgICAgICAgICAgICcgICAgICAgIGNsYXNzPVwiYnV0dG9uSXRlbUZhdm9yaXRlcyBidG4gJytidG5GYXZvcml0ZXNDbGFzcysnXCI+XFxuJyArXG4gICAgICAgICAgICAnICAgIDxpIGNsYXNzPVwiYmkgYmktc3Rhci1maWxsIHByLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XFxuJyArXG4gICAgICAgICAgICAnICAgIEtlZHZlbmNcXG4nICtcbiAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICc8L3RkPicrXG4gICAgICAgICAgICAnPC90cj4nK1xuICAgICAgICAgICAgLyEqXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHRyPicrXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHRkPkV4dGVuc2lvbiBudW1iZXI6PC90ZD4nK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZD4nK2QuZXh0bisnPC90ZD4nK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzwvdHI+JytcbiAgICAgICAgICAgICohL1xuICAgICAgICAgICAgJzx0cj4nK1xuICAgICAgICAgICAgJzx0ZD5JbmZvOjwvdGQ+JytcbiAgICAgICAgICAgICc8dGQ+JytkLm5vdGUrJzwvdGQ+JytcbiAgICAgICAgICAgICc8L3RyPicrXG4gICAgICAgICAgICAnPHRyPicrXG4gICAgICAgICAgICAnPHRkPk1lZ2plZ3l6w6lzOjwvdGQ+JytcbiAgICAgICAgICAgICc8dGQ+PHRleHRhcmVhIGNsYXNzPVwib3JkZXJJdGVtQ29tbWVudFwiIGRhdGEtaWQ9XCInK2QuaWQrJ1wiPicrY29tbWVudCsnPC90ZXh0YXJlYT48L3RkPicrXG4gICAgICAgICAgICAnPC90cj4nK1xuICAgICAgICAgICAgLyEqXG4gICAgICAgICAgICAqIS9cbiAgICAgICAgICAgICc8L3RhYmxlPic7XG4qL1xuICAgIH1cblxuICAgIHRoaXMuc2V0RGF0YXRhYmxlSGVhZGVyVGV4dD1mdW5jdGlvbih0ZXh0KXtcbiAgICAgICAgJCgnLnRhYmxlSGVhZGVyVGV4dCcpLnRleHQodGV4dCk7XG4gICAgfVxuXG4gICAgdGhpcy5nZXRUcmVlUGF0aE5hbWU9ZnVuY3Rpb24gKG5vZGUpe1xuICAgICAgICBsZXQgcmVzPScnO1xuICAgICAgICBsZXQgaXRlbXM9JChub2RlKS5wYXJlbnRzKCdsaScpLnRvQXJyYXkoKTtcbiAgICAgICAgaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgaXRlbXMucmV2ZXJzZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gaW4gaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoaXRlbXNbaXRlbV0pLmNoaWxkcmVuKCdhLmNhdGVnb3J5SXRlbScpKTtcbiAgICAgICAgICAgIGlmKCQoaXRlbXNbaXRlbV0pLmNoaWxkcmVuKCdhLmNhdGVnb3J5SXRlbScpLmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICByZXMrPSQoaXRlbXNbaXRlbV0pLmNoaWxkcmVuKCdhLmNhdGVnb3J5SXRlbScpLnRleHQoKSsnLydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXMrPSQobm9kZSkudGV4dCgpO1xuICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGxldCBzZWxlY3RlZFByb2R1Y3RHcm91cD1udWxsO1xuICAgIGxldCBkYXRhVGFibGVTZWFyY2hTdHI9bnVsbDtcbiAgICBsZXQgZGF0YVRhYmxlU2VhcmNoS3JlbD1mYWxzZTtcblxuICAgIHRoaXMuc2VhcmNoUHJvZHVjdEJ5U3RyaW5nPWZ1bmN0aW9uIChmaWx0ZXJTdHIpe1xuICAgICAgICByb290LnNldERhdGF0YWJsZUhlYWRlclRleHQoJ1Rlcm3DqWtlayBzesWxcnZlOicrZmlsdGVyU3RyKTtcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPWZpbHRlclN0cjtcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja1NlYXJjaFByb2R1Y3Q9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGRlYnVnKHRoaXMpO1xuICAgICAgICBsZXQgZmlsdGVyU3RyPSQoJy5zaWRlYmFyLXNlYXJjaCBpbnB1dFtuYW1lPXNlYXJjaFZhbHVlXScpLnZhbCgpXG4gICAgICAgIGRlYnVnKGZpbHRlclN0cik7XG4gICAgICAgIHJvb3Quc2VhcmNoUHJvZHVjdEJ5U3RyaW5nKGZpbHRlclN0cik7XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja0Zhdm9yaXRlc1Byb2R1Y3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjbGlja0Zhdm9yaXRlc1Byb2R1Y3QnKTtcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZToga2VkdmVuY2VrJyk7XG4gICAgICAgIGRhdGFUYWJsZVNlYXJjaFN0cj0nKipmYXZvcml0ZXMqKic7XG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgIH1cbiAgICB0aGlzLmNsaWNrT2Z0ZW5Qcm9kdWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWJ1ZygnY2xpY2tPZnRlblByb2R1Y3QnKTtcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogZ3lha3JhbiB2w6Fzw6Fyb2x0Jyk7XG4gICAgICAgIGRhdGFUYWJsZVNlYXJjaFN0cj0nKipvZnRlbioqJztcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja1NwZWNpYWxPZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVidWcoJ2NsaWNrU3BlY2lhbE9mZmVyJyk7XG4gICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dCgnVGVybcOpa2VrIHN6xbFydmU6IEFrY2nDs3MgdGVybcOpa2VrJyk7XG4gICAgICAgIGRhdGFUYWJsZVNlYXJjaFN0cj0nKipzcGVjaWFsT2ZmZXIqKic7XG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgIH1cblxuXG5cblxuICAgIHRoaXMuY2xpY2tMYXN0UHJvZHVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVidWcoJ2NsaWNrTGFzdFByb2R1Y3QnKTtcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogdXRvbGrDoXJhIHbDoXPDoXJvbHQnKTtcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPScqKmxhc3QqKic7XG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuXG4gICAgfVxuXG4gICAgdGhpcy5jbGlja1dlZWtseVByb2R1Y3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjbGlja1dlZWtseVByb2R1Y3QnKTtcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogSGV0aSB0ZXJtw6lrZWsnKTtcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPScqKndlZWtseSoqJztcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmNsaWNrS3JlbFByb2R1Y3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjbGlja0tyZWxQcm9kdWN0Jyk7XG4gICAgICAgIC8vcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogSGV0aSB0ZXJtw6lrZWsnKTtcbiAgICAgICAgLy9kYXRhVGFibGVTZWFyY2hTdHI9Jyoqd2Vla2x5KionO1xuICAgICAgICAvLyQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnRvZ2dsZUNsYXNzKCdrcmVsQWN0aXZlJyk7XG4gICAgICAgIGRhdGFUYWJsZVNlYXJjaEtyZWw9IWRhdGFUYWJsZVNlYXJjaEtyZWw7XG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbkRlZnM9ZnVuY3Rpb24gKCl7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7XCJ3aWR0aFwiOiBcIjEwcHhcIiwgXCJ0YXJnZXRzXCI6IDAgfSxcbiAgICAgICAgICAgIHsgXCJjbGFzc05hbWVcIjogXCJkdC1sZWZ0XCIsIFwidGFyZ2V0c1wiOiAxIH0sXG4vLyAgICAgICAgICAgICAgICB7IFwid2lkdGhcIjogXCIxMjBweFwiLCBcInRhcmdldHNcIjogMSB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiMjhweFwiLCBcInRhcmdldHNcIjogMiB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNDFweFwiLCBcInRhcmdldHNcIjogMyB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNzZweFwiLCBcInRhcmdldHNcIjogNCB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNTVweFwiLCBcInRhcmdldHNcIjogNSB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNzBweFwiLCBcInRhcmdldHNcIjogNiB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNTRweFwiLCBcInRhcmdldHNcIjogNyB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNTdweFwiLCBcInRhcmdldHNcIjogOCB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNDJweFwiLCBcInRhcmdldHNcIjogOSB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiMTAwcHhcIiwgXCJ0YXJnZXRzXCI6IDEwfSxcbiAgICAgICAgICAgIHtcImNsYXNzTmFtZVwiOiBcImR0LWNlbnRlclwiLCBcInRhcmdldHNcIjogXCJfYWxsXCJ9LFxuICAgICAgICBdO1xuICAgIH1cbiAgICB0aGlzLnByb2R1Y3RTZWxlY3REYXRhVGFibGVDb2x1bW49ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCBjb2x1bW5EYXRhPVtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImNsYXNzTmFtZVwiOiAgICAgICdkZXRhaWxzLWNvbnRyb2wnLFxuICAgICAgICAgICAgICAgIFwib3JkZXJhYmxlXCI6ICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6ICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIFwiZGVmYXVsdENvbnRlbnRcIjogJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVcIiB9LFxuICAgICAgICAgICAgeyBcImRhdGFcIjogXCJrcmVsXCIgfSxcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwicGFja2luZ1wifSxcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwidW5pdFZhbHVlXCIgfSxcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwicHJvZHVjdFVuaXRcIn0sXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcInNlbGxlclVuaXRcIiB9LFxuICAgICAgICAgICAgeyBcImRhdGFcIjogXCJ1bml0TXVsdGlwbGllclwifSxcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiYW1vdW50VW5pdFwiIH0sXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcInByaWNlXCIgfSxcblxuICAgICAgICBdO1xuXG4gICAgICAgIGxldCBhY3Rpb25Db2x1bW49eyAgICAgICAgICAgICAgICBcImNsYXNzTmFtZVwiOiAgICAgICdkZXRhaWxzLWNvbnRyb2wyJyxcbiAgICAgICAgICAgIFwib3JkZXJhYmxlXCI6ICAgICAgZmFsc2UsXG4gICAgICAgICAgICBcImRhdGFcIjogICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBcIndpZHRoXCI6IFwiMTAwcHhcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdENvbnRlbnRcIjonJ1xuICAgICAgICB9O1xuICAgICAgICBpZihPcmRlci5nZXREYXRhKCdvcmRlclR5cGUnKT09J2RhaWx5Jyl7XG4gICAgICAgICAgICBhY3Rpb25Db2x1bW4ucmVuZGVyID0gZnVuY3Rpb24gKGRhdGEsIHR5cGUsIHJvdykge1xuICAgICAgICAgICAgICAgIGlmIChyb3cuc3RvY2tfc3RhdHVzID09PSAnb3V0X29mX3N0b2NrJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzxpbWcgc3JjPVwiL2ltYWdlcy9pY29ucy9kZXRhaWxzX2Nsb3NlLnBuZ1wiIHRpdGxlPVwiTmluY3MgcmFrdMOhcm9uXCIgc3R5bGU9XCJ3aWR0aDogMjRweDtcIj4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJzxpbnB1dCB0eXBlPVwibnVtYmVyXCIgdmFsdWU9XCIwXCIgbWluPVwiMFwiIG1heD1cIjk5OTlcIiBzdGVwPVwiMVwiIGRhdGEtZGVjaW1hbHM9XCIxXCIgIGNsYXNzPVwiZm9ybS1jb250cm9sLXNtIGlucHV0TnVtYmVyU3Bpbm5lclwiIHN0eWxlPVwid2lkdGg6IDFlbTtcIi8+JztcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29sdW1uRGF0YS5wdXNoKGFjdGlvbkNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW5EYXRhO1xuICAgIH1cbiAgICB0aGlzLmdldERhdGF0YWJsZXM9ZnVuY3Rpb24gKG9yZGVyVHlwZSl7XG4gICAgICAgIGNvbnNvbGUuZXJyb3Iob3JkZXJUeXBlKTtcbiAgICAgICAgdmFyIHRhYmxlID0gJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgge1xuICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXG4gICAgICAgICAgICBcImFqYXhcIjoge1xuICAgICAgICAgICAgICAgIHVybDpPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50UHJvZHVjdExpc3QsXG4gICAgICAgICAgICAgICAgZGF0YTpmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnNlYXJjaFN0cj1kYXRhVGFibGVTZWFyY2hTdHI7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEua3JlbD1kYXRhVGFibGVTZWFyY2hLcmVsO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmdyb3VwSWQ9c2VsZWN0ZWRQcm9kdWN0R3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuc3VwcGxpZXJJZD1PcmRlci5zdXBwbGllcklkO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmRlbGl2ZXJ5RGF0ZT1PcmRlci5kZWxpdmVyeURhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiByb290LnByb2R1Y3RTZWxlY3REYXRhVGFibGVDb2x1bW5EZWZzKCksXG4gICAgICAgICAgICBcImNvbHVtbnNcIjogcm9vdC5wcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uKCksXG4gICAgICAgICAgICBcIm9yZGVyXCI6IFtbMSwgJ2FzYyddXSxcbiAgICAgICAgfSApO1xuICAgICAgICByZXR1cm4gdGFibGU7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9kdWN0U2VsZWN0RGF0YVRhYmxlRHJhd0RUPWZ1bmN0aW9uIChlKSB7XG4gICAgICAgIC8vZGVidWcoICdUYWJsZSBkcmF3IGNvbXBsZXRlOiAnK25ldyBEYXRlKCkuZ2V0VGltZSgpICk7XG5cbiAgICAgICAgLy8kKCd0ZDpjb250YWlucyhcIipcIiknKS5odG1sKCc8aSBjbGFzcz1cImJpIGJpLWNoZWNrLWNpcmNsZS1maWxsXCI+PC9pPicpO1xuICAgICAgICAkKFwidGRcIikuZmlsdGVyKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICByZXR1cm4gJCh0aGlzKS50ZXh0KCkgPT09ICcqJztcbiAgICAgICAgfSkuaHRtbCgnPGkgY2xhc3M9XCJiaSBiaS1jaGVjay1jaXJjbGUtZmlsbFwiPjwvaT4nKTtcbiAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpLm9yZGVyVHlwZT09J2RhaWx5Jyl7XG4gICAgICAgICAgICAkKFwiaW5wdXRbdHlwZT0nbnVtYmVyJ10uaW5wdXROdW1iZXJTcGlubmVyXCIpLmlucHV0U3Bpbm5lcih7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6XG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgJHtncm91cENsYXNzfVwiPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBzdHlsZT1cIm1pbi13aWR0aDogJHtidXR0b25zV2lkdGh9XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kZWNyZW1lbnQgJHtidXR0b25zQ2xhc3N9XCIgdHlwZT1cImJ1dHRvblwiPiR7ZGVjcmVtZW50QnV0dG9ufTwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICAgICAvLyc8aW5wdXQgdHlwZT1cInRleHRcIiBpbnB1dG1vZGU9XCJkZWNpbWFsXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiAke3RleHRBbGlnbn1cIiBjbGFzcz1cInByb2R1Y3RRdWFudGl0eSBmb3JtLWNvbnRyb2xcIi8+JyArXG4gICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT1cInRleHRcIiBzdGVwPVwiMC4xXCIgZGF0YS1kZWNpbWFscz1cIjJcIiBzdHlsZT1cInRleHQtYWxpZ246ICR7dGV4dEFsaWdufVwiIGNsYXNzPVwicHJvZHVjdFF1YW50aXR5IGZvcm0tY29udHJvbFwiLz4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gc3R5bGU9XCJtaW4td2lkdGg6ICR7YnV0dG9uc1dpZHRofVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taW5jcmVtZW50ICR7YnV0dG9uc0NsYXNzfVwiIHR5cGU9XCJidXR0b25cIj4ke2luY3JlbWVudEJ1dHRvbn08L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicsXG4gICAgICAgICAgICAgICAgYnV0dG9uc1dpZHRoOiBcIjAuNXJlbVwiLFxuICAgICAgICAgICAgICAgIGdyb3VwQ2xhc3M6IFwiXCIsIC8vIGNzcyBjbGFzcyBvZiB0aGUgcmVzdWx0aW5nIGlucHV0LWdyb3VwXG4gICAgICAgICAgICAgICAgYnV0dG9uc0NsYXNzOiBcImJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcm9vdC5iaW5kV2Vha1VzZXJIZWxwZXIoKTtcbiAgICAgICAgLypcbiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICBjaGFuZ2Ugb3JkZXIgcXVhbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgICQoXCIuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0IC5kZXRhaWxzLWNvbnRyb2wyIGlucHV0W3R5cGU9dGV4dF1cIikub2ZmKCdjaGFuZ2UnKTtcbiAgICAgICAgJChcIi5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QgLmRldGFpbHMtY29udHJvbDIgaW5wdXRbdHlwZT10ZXh0XVwiKS5vbignY2hhbmdlJyxmdW5jdGlvbiAoZSl7XG4gICAgICAgICAgICBsZXQgcXVhbnRpdHk9JCh0aGlzKS52YWwoKTtcbiAgICAgICAgICAgIHF1YW50aXR5PXF1YW50aXR5LnJlcGxhY2UoJywnLCcuJyk7XG4gICAgICAgICAgICBxdWFudGl0eT1wYXJzZUZsb2F0KHF1YW50aXR5KTtcbiAgICAgICAgICAgIGxldCByb3dEYXRhPSQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5yb3coJCh0aGlzKS5jbG9zZXN0KCd0cicpKS5kYXRhKCk7XG4gICAgICAgICAgICByb290Lm9yZGVySXRlbXNDaGFuZ2Uocm93RGF0YSxxdWFudGl0eSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJChcIi5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QgLmRldGFpbHMtY29udHJvbDIgaW5wdXRbdHlwZT10ZXh0XVwiKS5lYWNoKGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgLy9kZWJ1ZygnZXogYSBmdW5jdGlvbjInKVxuICAgICAgICAgICAgbGV0IHF1YW50aXR5PSQodGhpcykudmFsKCk7XG4gICAgICAgICAgICBsZXQgcm93RGF0YT0kKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkucm93KCQodGhpcykuY2xvc2VzdCgndHInKSkuZGF0YSgpO1xuXG4gICAgICAgICAgICBpZihPcmRlci5wcm9kdWN0U2VsZWN0ZWRbcm93RGF0YS5pZF0pe1xuICAgICAgICAgICAgICAgIGRlYnVnKHJvd0RhdGEpO1xuICAgICAgICAgICAgICAgIGRlYnVnKCQoJCh0aGlzKS5jbG9zZXN0KCd0cicpLmZpbmQoJ2lucHV0W3R5cGU9bnVtYmVyXScpWzBdKSk7XG4gICAgICAgICAgICAgICAgZGVidWcoT3JkZXIucHJvZHVjdFNlbGVjdGVkW3Jvd0RhdGEuaWRdKTtcbiAgICAgICAgICAgICAgICBsZXQgcXVhbnRpdHlDdXJyZW50PU9yZGVyLnByb2R1Y3RTZWxlY3RlZFtyb3dEYXRhLmlkXTtcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgcXVhbnRpdHlDdXJyZW50IT0nc3RyaW5nJyl7XG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5Q3VycmVudCs9Jyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQoJCh0aGlzKS5jbG9zZXN0KCd0cicpLmZpbmQoJ2lucHV0W3R5cGU9bnVtYmVyXScpWzBdKS52YWwocXVhbnRpdHlDdXJyZW50LnJlcGxhY2UoJywnLCcuJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuXG4gICAgICAgICQoXCIuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0IC5kZXRhaWxzLWNvbnRyb2wyIGJ1dHRvblwiKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoXCIuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0IC5kZXRhaWxzLWNvbnRyb2wyIGJ1dHRvblwiKS5vbignY2xpY2snLGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIGRlYnVnKCcuZGV0YWlscy1jb250cm9sMiBidXR0b24gY2xpY2sgJylcbiAgICAgICAgICAgIC8vIGRlYnVnKHRoaXMpO1xuICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5maW5kKCdpbnB1dFt0eXBlPXRleHRdJykudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgdGhpcy5pbml0Vmlld1Byb2R1Y3RTZWxlY3Q9ZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgZnVuY3Rpb25OYW1lPSdpbml0Vmlld1Byb2R1Y3RTZWxlY3QnO1xuICAgICAgICBjb25zb2xlLmxvZyhmdW5jdGlvbk5hbWUrJyBjYWxsZWQnKTtcbiAgICAgICAgaWYodmlld0luaWNpYWxpemVkLmluY2x1ZGVzKGZ1bmN0aW9uTmFtZSkpe1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVidWcoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocm9vdCkpO1xuICAgICAgICByb290LnNldERhdGF0YWJsZUhlYWRlclRleHQoJycpO1xuICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7b25BZnRlckFjdGl2YXRlOmZ1bmN0aW9uICgpe319KTtcbiAgICAgICAgLy9Abm90ZTogYmUga2VsbCBrYXBjc29sbmkgYXogZWxvbmV6ZXRldFxuICAgICAgICByb290LlN0ZXBwZXIuYWRkQ29tcGxldGVkKCdpbnZvaWNlJyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5hZGRFbmFibGVkKCdpbnZvaWNlJyk7XG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09Jy5vcmRlclBhcmFtZXRlckZvcm0nO1xuICAgICAgICAvL2NvbnNvbGUubG9nKE9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnRQcm9kdWN0TGlzdCk7Y2hhbmdlXG4gICAgICAgIGRlYnVnKChDU1NTZWxlY3RvckZvcm0rJyAuZmEtc2VhcmNoJykpO1xuXG4gICAgICAgICQoJy5zaWRlYmFyLXNlYXJjaCAuZmEtc2VhcmNoJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCcuc2lkZWJhci1zZWFyY2ggLmZhLXNlYXJjaCcpLm9uKCdjbGljaycscm9vdC5jbGlja1NlYXJjaFByb2R1Y3QpO1xuXG4gICAgICAgICQoJ2Euc2lkZWJhci5mYXZvcml0ZXMnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJ2Euc2lkZWJhci5mYXZvcml0ZXMnKS5vbignY2xpY2snLHJvb3QuY2xpY2tGYXZvcml0ZXNQcm9kdWN0KTtcblxuICAgICAgICAkKCdhLnNpZGViYXIub2Z0ZW4nKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJ2Euc2lkZWJhci5vZnRlbicpLm9uKCdjbGljaycscm9vdC5jbGlja09mdGVuUHJvZHVjdCk7XG5cbiAgICAgICAgJCgnYS5zaWRlYmFyLmxhc3QnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJ2Euc2lkZWJhci5sYXN0Jykub24oJ2NsaWNrJyxyb290LmNsaWNrTGFzdFByb2R1Y3QpO1xuXG4gICAgICAgICQoJ2Euc2lkZWJhci53ZWVrbHknKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJ2Euc2lkZWJhci53ZWVrbHknKS5vbignY2xpY2snLHJvb3QuY2xpY2tXZWVrbHlQcm9kdWN0KTtcblxuICAgICAgICAkKCdhLnNpZGViYXIua3JlbCcpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnYS5zaWRlYmFyLmtyZWwnKS5vbignY2xpY2snLHJvb3QuY2xpY2tLcmVsUHJvZHVjdCk7XG5cbiAgICAgICAgJCgnYS5zaWRlYmFyLnNwZWNpYWxPZmZlcicpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnYS5zaWRlYmFyLnNwZWNpYWxPZmZlcicpLm9uKCdjbGljaycscm9vdC5jbGlja1NwZWNpYWxPZmZlcik7XG5cblxuICAgICAgICAkKCcuc2lkZWJhci1zZWFyY2ggaW5wdXRbbmFtZT1zZWFyY2hWYWx1ZV0nKS5vZmYoJ2tleXByZXNzJyk7XG4gICAgICAgICQoJy5zaWRlYmFyLXNlYXJjaCBpbnB1dFtuYW1lPXNlYXJjaFZhbHVlXScpLm9uKCdrZXlwcmVzcycsZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIGV2ZW50LndoaWNoID09IDEzICkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZigkKHRoaXMpLnZhbCgpLmxlbmd0aD49Mil7XG4gICAgICAgICAgICAgICAgcm9vdC5zZWFyY2hQcm9kdWN0QnlTdHJpbmcoJCh0aGlzKS52YWwoKStldmVudC5rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuXG5cbiAgICAgICAgJCgnLnNpZGViYXItd3JhcHBlciAuc2lkZWJhci1tZW51IC5zaWRlYmFyLWRyb3Bkb3duIC5zaWRlYmFyLXN1Ym1lbnUgbGkgYS5jYXRlZ29yeUl0ZW0uY2xpY2thYmxlJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCcuc2lkZWJhci13cmFwcGVyIC5zaWRlYmFyLW1lbnUgLnNpZGViYXItZHJvcGRvd24gLnNpZGViYXItc3VibWVudSBsaSBhLmNhdGVnb3J5SXRlbS5jbGlja2FibGUnKS5vbignY2xpY2snLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBncm91cElkPSQodGhpcykuZGF0YSgnaWQnKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFByb2R1Y3RHcm91cD1ncm91cElkO1xuICAgICAgICAgICAgICAgIGRhdGFUYWJsZVNlYXJjaFN0cj1udWxsO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGdyb3VwSWQpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJvb3QuZ2V0VHJlZVBhdGhOYW1lKHRoaXMpKTtcbiAgICAgICAgICAgICAgICByb290LnNldERhdGF0YWJsZUhlYWRlclRleHQocm9vdC5nZXRUcmVlUGF0aE5hbWUodGhpcykpO1xuLypcbiAgICAgICAgICAgICAgICBsZXQgYWpheERhdGE9e1xuICAgICAgICAgICAgICAgICAgICAnZ3JvdXBJZCc6Z3JvdXBJZCxcbiAgICAgICAgICAgICAgICAgICAgJ3N1cHBsaWVyX2lkJzpPcmRlci5zdXBwbGllcklkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8kKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5kYXRhKGFqYXhEYXRhKS5sb2FkKCk7XG5cbiovXG4vKlxuICAgICAgICAgICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnRQcm9kdWN0TGlzdCsnP2dyb3VwSWQ9Jytncm91cElkKycmc3VwcGxpZXJfaWQ9JytPcmRlci5zdXBwbGllcklkO1xuICAgICAgICAgICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnVybChhamF4VXJsKS5sb2FkKCk7XG4qL1xuICAgICAgICAgICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICBsZXQgdGFibGUgPSByb290LmdldERhdGF0YWJsZXMoT3JkZXIuZ2V0RGF0YSgnb3JkZXJUeXBlJykpO1xuXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5vbiggJ2luaXQuZHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyggJ1RhYmxlIGluaXRpYWxpc2F0aW9uIGNvbXBsZXRlOiAnK25ldyBEYXRlKCkuZ2V0VGltZSgpICk7XG4gICAgICAgIH0gKS5kYXRhVGFibGUoKTtcblxuXG5cbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLm9uKCAnZHJhdy5kdCcscm9vdC5wcm9kdWN0U2VsZWN0RGF0YVRhYmxlRHJhd0RUKS5kYXRhVGFibGUoKTtcblxuICAgICAgICAvLyQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5vbiggJ2RyYXcuZHQnLCAgKS5kYXRhVGFibGUoKTtcblxuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0Jykub24oICd4aHIuZHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkZWJ1ZyggJ1RhYmxlIHhociBjb21wbGV0ZTogJytuZXcgRGF0ZSgpLmdldFRpbWUoKSApO1xuICAgICAgICB9ICkuZGF0YVRhYmxlKCk7XG5cbiAgICAgICAgLy8kKFwiaW5wdXRbdHlwZT0nbnVtYmVyJ10uaW5wdXROdW1iZXJTcGlubmVyXCIpLmlucHV0U3Bpbm5lcigpO1xuXG4vKlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIEFkZCBldmVudCBsaXN0ZW5lciBmb3Igb3BlbmluZyBhbmQgY2xvc2luZyBkZXRhaWxzXG4gKi9cblxuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0IHRib2R5Jykub24oJ2NsaWNrJywgJ3RkLmRldGFpbHMtY29udHJvbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ciA9ICQodGhpcykuY2xvc2VzdCgndHInKTtcbiAgICAgICAgICAgIGxldCByb3cgPSB0YWJsZS5yb3coIHRyICk7XG5cbiAgICAgICAgICAgIGlmICggcm93LmNoaWxkLmlzU2hvd24oKSApIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIHJvdyBpcyBhbHJlYWR5IG9wZW4gLSBjbG9zZSBpdFxuICAgICAgICAgICAgICAgIHJvdy5jaGlsZC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgdHIucmVtb3ZlQ2xhc3MoJ3Nob3duJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBPcGVuIHRoaXMgcm93XG4gICAgICAgICAgICAgICAgcm93LmNoaWxkKCByb290LnByb2R1Y3RTZWxlY3REYXRhdGFibGVzUm93Rm9ybWF0dGVyKHJvdy5kYXRhKCkpICkuc2hvdygpO1xuICAgICAgICAgICAgICAgIHRyLmFkZENsYXNzKCdzaG93bicpO1xuICAgICAgICAgICAgICAgIHJvb3QuYmluZFByb2R1Y3REZXRhaWxzQWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gKTtcbiAgICAgICAgdmlld0luaWNpYWxpemVkLnB1c2goZnVuY3Rpb25OYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLmJpbmRQcm9kdWN0RGV0YWlsc0FjdGlvbj1mdW5jdGlvbiAoKXtcbiAgICAgICAgcm9vdC5iaW5kUm93RGVzY3JpcHRpb25BY3Rpb24oKTtcbiAgICAgICAgcm9vdC5iaW5kUm93RmF2b3JpdGVzQWN0aW9uKCk7XG4gICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnb3JkZXJUeXBlJ109PSd3ZWVrbHknKXtcbiAgICAgICAgICAgIHJvb3QuYmluZE9yZGVySXRlbVdlZWtRdWFudGl0eSgpO1xuICAgICAgICB9XG4gICB9XG5cbiAgICB0aGlzLmJpbmRXZWFrVXNlckhlbHBlcj1mdW5jdGlvbiAoKXtcbiAgICAgICAgJCggXCJpbnB1dC5pbnB1dE51bWJlclNwaW5uZXJcIiApLm9mZiggXCJmb2N1c1wiKTtcbiAgICAgICAgJCggXCJpbnB1dC5pbnB1dE51bWJlclNwaW5uZXJcIiApLm9uKCBcImZvY3VzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgbGV0IHF1YW50aXR5PSQodGhpcykudmFsKCk7XG4gICAgICAgICAgICBxdWFudGl0eT1xdWFudGl0eS5yZXBsYWNlKCcsJywnLicpO1xuICAgICAgICAgICAgcXVhbnRpdHk9cGFyc2VGbG9hdChxdWFudGl0eSk7XG4gICAgICAgICAgICBpZihxdWFudGl0eT09PTApe1xuICAgICAgICAgICAgICAgICQodGhpcykudmFsKCcnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgJCggXCJpbnB1dFt0eXBlPXRleHRdLmlucHV0TnVtYmVyU3Bpbm5lclwiICkub2ZmKCBcImtleXByZXNzXCIpO1xuICAgICAgICAkKCBcImlucHV0W3R5cGU9dGV4dF0uaW5wdXROdW1iZXJTcGlubmVyXCIgKS5vbiggXCJrZXlwcmVzc1wiLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKCBldmVudC53aGljaCA9PSAxMyApIHtcbi8vICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2VudGVyIHByZXNzZWQnKTtcbiAgICAgICAgICAgICAgICBsZXQgYWN0dWFsSXRlbT10aGlzO1xuICAgICAgICAgICAgICAgIGxldCBpdGVtcz0kKCBcImlucHV0W3R5cGU9dGV4dF0uaW5wdXROdW1iZXJTcGlubmVyXCIgKTtcbiAgICAgICAgICAgICAgICBpdGVtcy5lYWNoKGZ1bmN0aW9uIChpdGVtKXtcbi8vICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcz09YWN0dWFsSXRlbSl7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpdGVtKzE8PWl0ZW1zLmxlbmd0aCl7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGl0ZW1zW2l0ZW0rMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaXRlbXNbaXRlbSsxXSkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmJpbmRPcmRlckl0ZW1XZWVrUXVhbnRpdHk9ZnVuY3Rpb24gKCl7XG4gICAgICAgICQoXCJpbnB1dC5wcm9kdWN0U2VsZWN0RGF5UXVhbnRpdHlcIikub2ZmKCdjaGFuZ2UnKTtcbiAgICAgICAgJChcImlucHV0LnByb2R1Y3RTZWxlY3REYXlRdWFudGl0eVwiKS5vbignY2hhbmdlJyxmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm5hbWUpO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy52YWx1ZSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmRhdGEoJ2RheWluZGV4JykpO1xuXG4gICAgICAgICAgICBsZXQgcm93RGF0YT1udWxsO1xuICAgICAgICAgICAgbGV0IHJvd05vZGU9JCgkKHRoaXMpLmNsb3Nlc3QoJ3RhYmxlLm9yZGVyUHJvZHVjdFNlbGVjdFJvd0RldGFpbHNUYWJsZScpLmNsb3Nlc3QoJ3RyJykpLnByZXYoKTtcbiAgICAgICAgICAgIHJvd0RhdGE9JCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLnJvdyhyb3dOb2RlKS5kYXRhKCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyb3dEYXRhKTtcbiAgICAgICAgICAgIGxldCBxdWFudGl0eT0kKHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgcXVhbnRpdHk9cXVhbnRpdHkucmVwbGFjZSgnLCcsJy4nKTtcbiAgICAgICAgICAgIHF1YW50aXR5PXBhcnNlRmxvYXQocXVhbnRpdHkpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocm93RGF0YS5pZCk7XG4gICAgICAgICAgICByb290Lm9yZGVySXRlbXNDaGFuZ2Uocm93RGF0YSxxdWFudGl0eSwkKHRoaXMpLmRhdGEoJ2RheWluZGV4JykpO1xuLy8gICAgICAgICAgICByb290Lm9yZGVySXRlbXNDaGFuZ2VcbiAgICAgICAgICAgIC8vb3JkZXJJdGVtc0NoYW5nZVxuICAgICAgICAgICAgLy9xdWFudGl0eVsxNjgzXVsxXVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHRoaXMuYWZ0ZXJTeW5jT3JkZXJEYXRhVG9TZXJ2ZXI9ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgLy9yb290LnRvZ2dsZUVuYWJsZVNlbmQoKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnbW9zdCB2ZWd6ZXR0LiBlbm55aXQga2lzemVkJytiYXRjaE51bSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDxxdWV1ZUFqYXgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzaGlmdGVsJylcbiAgICAgICAgICAgIHF1ZXVlQWpheC5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vY29uc29sZS5sb2coJ3JlbWFpbmluZyBsZWZ0ICcrcXVldWVBamF4Lmxlbmd0aCk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHN5bmNEb2luZz1mYWxzZTtcbiAgICAgICAgICAgIHJvb3Quc3luY09yZGVyRGF0YVRvU2VydmVyKCk7XG4gICAgICAgIH0sIE9wdHMuZGF0YVN5bmNQYXVzZVRpbWUpO1xuICAgIH1cbiAgICBsZXQgcXVldWVBamF4PVtdO1xuICAgIGxldCBzeW5jRG9pbmc9ZmFsc2U7XG5cbiAgICB0aGlzLnN5bmNPcmRlckRhdGFUb1NlcnZlcj1mdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vZGVidWcocXVldWVBamF4KTtcbiAgICAgICAgaWYoc3luY0RvaW5nKXtcbiAgICAgICAgICAgIC8vZGVidWcoJ3N5bmMgaW4gcHJvZ3Jlc3MuLi4uJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYocXVldWVBamF4Lmxlbmd0aDwxKXtcbiAgICAgICAgICAgIHJldHVybiA7XG4gICAgICAgIH1cbiAgICAgICAgc3luY0RvaW5nPXRydWU7XG5cbiAgICAgICAgcm9vdC5zZW5kT3JkZXJEYXRhVG9TZXJ2ZXIoJ3Byb2R1Y3RTZWxlY3QnLHJvb3QuYWZ0ZXJTeW5jT3JkZXJEYXRhVG9TZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIHRoaXMub3JkZXJJdGVtc0NoYW5nZT1mdW5jdGlvbihJdGVtRGF0YSxxdWFudGl0eSxkYXlJbmRleCl7XG5cbi8qXG4gICAgICAgIGRlYnVnKCctLS0tLS0tLS0tLS0tLS0tLScpO1xuICAgICAgICBkZWJ1ZyhJdGVtRGF0YSk7XG4gICAgICAgIGRlYnVnKHF1YW50aXR5KTtcbiAgICAgICAgZGVidWcoT3JkZXIuZ2V0RGF0YSgncHJvZHVjdFNlbGVjdGVkJykpO1xuICAgICAgICBkZWJ1ZygnLS0tLS0tLS0tLS0tLS0tLS0nKTtcblxuKi9cbiAgICAgICAgaWYoaXNOYU4ocXVhbnRpdHkpKXtcbiAgICAgICAgICAgIHF1YW50aXR5PTA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHByb2R1Y3RTZWxlY3RlZD1PcmRlci5nZXREYXRhKCdwcm9kdWN0U2VsZWN0ZWQnKTtcbiAgICAgICAgY29uc29sZS5ncm91cCgnb3JkZXJJdGVtc0NoYW5nZScpO1xuICAgICAgICBjb25zb2xlLmxvZyhbJ3Byb2R1Y3RTZWxlY3RlZCcscHJvZHVjdFNlbGVjdGVkXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFsnSXRlbURhdGEnLEl0ZW1EYXRhXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFsnSXRlbURhdGEuaWQnLEl0ZW1EYXRhLmlkXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFsncXVhbnRpdHknLHF1YW50aXR5XSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFsnZGF5SW5kZXgnLGRheUluZGV4XSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF0pO1xuXG4gICAgICAgIGxldCBwcm9kdWN0U2VsZWN0ZWRJdGVtPXByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF07XG4gICAgICAgIC8qXG4gICAgICAgIGhhIDAgZXJ0ZWsgam9uIGVzIG5lbSBpcyB2b2x0IGFra29yIGhhbWFyIGtpdWdyYXRqdWtcbiAgICAgICAgICovXG4gICAgICAgIGlmKHF1YW50aXR5PT0wKXtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3F1YW50aXR5PT0wJyk7XG4gICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdFNlbGVjdGVkSXRlbT09J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignaXR0IGxlcDEnKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXlJbmRleCl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbiBkYXlJbmRleCcpXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF1bZGF5SW5kZXhdPT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFsncHJvZHVjdFNlbGVjdGVkSXRlbScscHJvZHVjdFNlbGVjdGVkSXRlbV0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdpdHQgbGVwMicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLypcbiAgICAgICAgaGEgYXpvbm9zIGF6IGVydGVrIGtpdWdydW5rXG4gICAgICAgICAqL1xuICAgICAgICBpZihkYXlJbmRleCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXSE9J3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAmJiB0eXBlb2YgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXVtkYXlJbmRleF0hPSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICBpZihwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XT09cXVhbnRpdHkpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdhem9ub3MgbmFwaScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYocHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXT09cXVhbnRpdHkpe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2F6b25vcycpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWFudGl0eT09MCl7XG4gICAgICAgICAgICBpZihkYXlJbmRleCl7XG4gICAgICAgICAgICAgICAgZGVsZXRlIE9yZGVyLnByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF1bZGF5SW5kZXhdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBPcmRlci5wcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICBoYSB2YW4gZXJ0ZWsgZXJ0ZWtldCBhZHVuayFcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYoZGF5SW5kZXgpe1xuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdPT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF09W107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzZXQgcXVhbnRpdHkgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXVtkYXlJbmRleF0nLHF1YW50aXR5KTtcbiAgICAgICAgICAgICAgICBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XT1xdWFudGl0eTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF09cXVhbnRpdHk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3NldCBxdWFudGl0eSBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdJyxxdWFudGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coWydwcm9kdWN0U2VsZWN0ZWQnLHByb2R1Y3RTZWxlY3RlZF0pO1xuICAgICAgICBPcmRlci5wcm9kdWN0U2VsZWN0ZWQ9cHJvZHVjdFNlbGVjdGVkO1xuXG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgcXVldWVBamF4LnB1c2goRGF0ZS5ub3coKSk7XG4gICAgICAgIHJvb3Quc3luY09yZGVyRGF0YVRvU2VydmVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuXG5cbiAgICAgICAgaWYocHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXT09cXVhbnRpdHkpe1xuICAgICAgICAgICAgZGVidWcoJ2l0dCBsZXAxMicpO1xuICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF09cXVhbnRpdHk7XG4gICAgICAgIGlmKHF1YW50aXR5PT0wKXtcbiAgICAgICAgICAgIGRlbGV0ZSBPcmRlci5wcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdO1xuICAgICAgICB9XG4gICAgICAgIE9yZGVyLnByb2R1Y3RTZWxlY3RlZD1wcm9kdWN0U2VsZWN0ZWQ7XG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHF1ZXVlQWpheC5wdXNoKERhdGUubm93KCkpO1xuICAgICAgICByb290LnN5bmNPcmRlckRhdGFUb1NlcnZlcigpO1xuXG4gICAgICAgIC8qXG4gICAgICAgIGRlYnVnKE9yZGVyLmdldERhdGEoJ3Byb2R1Y3RTZWxlY3RlZCcpKTtcbiAgICAgICAgZGVidWcoJyoqKioqKioqKioqKioqKioqKionKTtcbiovXG4gICAgfVxuICAgIHRoaXMuaW5pdFZpZXdJbnZvaWNlPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOmZ1bmN0aW9uICgpe319KTtcblxuICAgICAgICBpZihPYmplY3Qua2V5cyhPcmRlci5wcm9kdWN0U2VsZWN0ZWQpLmxlbmd0aD4wKXtcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5hZGRDb21wbGV0ZWQoJ3NlbmQnKTtcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5hZGRFbmFibGVkKCdzZW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0eWxlU3RyPSc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIicrT3B0cy5VUkwucm9vdCsnL2Nzcy9pbnZvaWNlLmNzc1wiPic7XG4gICAgICAgICQoJ3RhYmxlLmludm9pY2UgYnV0dG9uLnByaW50QnV0dG9uJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCd0YWJsZS5pbnZvaWNlIGJ1dHRvbi5wcmludEJ1dHRvbicpLm9uKCdjbGljaycsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93LnByaW50KCk7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGxldCBuZXdXaW49IHdpbmRvdy5vcGVuKFwiXCIpO1xuICAgICAgICAgICAgbmV3V2luLmRvY3VtZW50LndyaXRlKHN0eWxlU3RyKTtcbiAgICAgICAgICAgIGxldCBwcmludD0kKCd0YWJsZS5pbnZvaWNlJykuY2xvbmUoKTtcbiAgICAgICAgICAgIHByaW50LmZpbmQoJ2J1dHRvbi5wcmludEJ1dHRvbicpLnJlbW92ZSgpO1xuLy8gICAgICAgICAgICBuZXdXaW4uZG9jdW1lbnQud3JpdGUoJCgndGFibGUuaW52b2ljZScpLnByb3AoJ291dGVySFRNTCcpKTtcbiAgICAgICAgICAgIG5ld1dpbi5kb2N1bWVudC53cml0ZShwcmludC5wcm9wKCdvdXRlckhUTUwnKSk7XG4gICAgICAgICAgICBuZXdXaW4ucHJpbnQoKTtcbiAgICAgICAgICAgbmV3V2luLmNsb3NlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRPcmRlcj1mdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuaW5pdCgpO1xuICAgICAgICByb290LnNldERlbGl2ZXJ5RGF0ZSgnLScpO1xuICAgICAgICByb290LnNldFN1cHBsaWVyKCctJyk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmFmdGVyT3JkZXJTZW5kT2s9ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiU2VudCFcIiwgbWVzc2FnZTogJ09yZGVyIFNlbnQnICwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuSU5GTywgdGltZW91dDogNTAwMCB9KTtcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZCcpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZCcpLnByb3AoJ2Rpc2FibGVkJyx0cnVlKTtcbiAgICAgICAgJCgnLnN0YXR1c05hbWVQbGFjZScpLnJlbW92ZUNsYXNzKCdzdGF0dXNCbGluaycpO1xuICAgICAgICAkKCcuc3RhdHVzTmFtZVBsYWNlJykudGV4dCgnZWxrw7xsZHZlJyk7XG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmRpbmcnKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmRPaycpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgJCgnZGl2Lmludm9pY2VDb250YWluZXInKS5odG1sKGRhdGEucmV0SFRNTCk7XG4gICAgICAgIC8vcm9vdC5yZXNldE9yZGVyKCk7XG4gICAgfVxuICAgIHRoaXMuYWZ0ZXJPcmRlclNlbmRFcnJvcj1mdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kaW5nJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAkLmVhY2goQVBQLk9yZGVyTW9kdWxlLlN0ZXBwZXIuZ2V0T3B0cygpLmF2YWlsYWJsZSxmdW5jdGlvbiAoaW5kZXgsdmFsdWUpIHtcbiAgICAgICAgICAgIEFQUC5PcmRlck1vZHVsZS5TdGVwcGVyLnNldEVuYWJsZWQodmFsdWUpO1xuICAgICAgICAgICAgQVBQLk9yZGVyTW9kdWxlLlN0ZXBwZXIuc2V0Q29tcGxldGVkKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0Vmlld1NlbmQ9ZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnaW5pdFZpZXdTZW5kIGNhbGxlZCAyJyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpmdW5jdGlvbiAoKXt9fSk7XG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZW5kIGJ1dG9uIGNsaWNrZWQnKTtcbiAgICAgICAgICAgIC8vQHRvZG86IGRhdGFzeW5jaGVyZSBhbmQgY2FsbGJhY2tcbiAgICAgICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kaW5nJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBQTTE1OFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAkLmVhY2goQVBQLk9yZGVyTW9kdWxlLlN0ZXBwZXIuZ2V0T3B0cygpLmF2YWlsYWJsZSxmdW5jdGlvbiAoaW5kZXgsdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIudW5zZXRFbmFibGVkKHZhbHVlKTtcbiAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIudW5zZXRDb21wbGV0ZWQodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvKipcblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICByb290LnNlbmRPcmRlckRhdGFUb1NlcnZlcignc2VuZCcscm9vdC5hZnRlck9yZGVyU2VuZE9rLHJvb3QuYWZ0ZXJPcmRlclNlbmRFcnJvcik7XG5cbi8qICAgICAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xuICAgICAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XG4gICAgICAgICAgICBhamF4RGF0YS5zZW5kPXRydWU7XG4gICAgICAgICAgICAkLmV4dGVuZChhamF4RGF0YSxPcmRlcik7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5zdG9yZSxcbiAgICAgICAgICAgICAgICBtZXRob2Q6J1BPU1QnLFxuICAgICAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3Mpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5hZnRlck9yZGVyU2VuZE9rKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7Ki9cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICB0aGlzLnRlc3RNb2RlU2VuZD1mdW5jdGlvbiAoKSB7XG5cbiAgICB9XG5cblxuICAgIHRoaXMudGVzdE1vZGU9ZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZygndGVzdE1vZGUgY2FsbGVkICcpXG4gICAgICAgIE9yZGVyLnNldERhdGEoe1xuICAgICAgICAgICAgaWQ6MjM0LFxuICAgICAgICAgICAgc3VwcGxpZXJJZDo3LFxuICAgICAgICAgICAgcHJvZHVjdFNlbGVjdGVkOntcbiAgICAgICAgICAgICAgICAxMTYgOiAzLFxuICAgICAgICAgICAgICAgIDI5MyA6IDIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFjdE5hbWU6J0NvbnRhY3QgTmFtZScsXG4gICAgICAgICAgICBub3RlOidOb3RlJyxcbiAgICAgICAgICAgIHR5cGU6J2RhaWx5JyxcbiAgICAgICAgICAgIGRlbGl2ZXJ5RGF0ZTpPcHRzLmRlZmF1bHREZWxpdmVyeURhdGUsXG4gICAgICAgICAgICBkZWxpdmVyeUFkZHJlc3M6MTIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmxvZyhPcmRlci5nZXREYXRhKCkpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcqKioqKioqKioqKioqKioqKioqJyk7XG4gICAgICAgIC8vcm9vdC5TdGVwcGVyLnNldE9wdHMoeydVcmxEYXRhJzp7J3N1cHBsaWVySWQnOnN1cHBsaWVySWR9fSk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHsnVXJsRGF0YSc6eydzdXBwbGllcklkJzpPcmRlci5zdXBwbGllcklkLGlkOk9yZGVyLmlkfX0pO1xuICAgICAgICB0aGlzLlN0ZXBwZXIuaW5pdCh7XG4gICAgICAgICAgICBVUkw6IHtcbiAgICAgICAgICAgICAgICBjcmVhdGU6IE9wdHMuVVJMLmNyZWF0ZSxcbiAgICAgICAgICAgIH0sXG4vKlxuY3N1cGFzeiBheiBlbGVqZXJvbFxuICAgICAgICAgICAgY29tcGxldGU6WydzdXBwbGllciddLFxuICAgICAgICAgICAgZW5hYmxlOiBbJ3N1cHBsaWVyJ10sXG4gICAgICAgICAgICBhY3RpdmU6ICdzdXBwbGllcicsXG4gICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6dGhpcy5pbml0Vmlld1N1cHBsaWVyLFxuXG5wcm9kdWN0IHNlbGVjdFxuICAgICAgICAgICAgY29tcGxldGU6WydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnXSxcbiAgICAgICAgICAgIGVuYWJsZTogWydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnXSxcbiAgICAgICAgICAgIGFjdGl2ZTogJ3Byb2R1Y3RTZWxlY3QnLFxuICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnRoaXMuaW5pdFZpZXdQcm9kdWN0U2VsZWN0LFxuXG5mdWxsb3NcbiAgICAgICAgICAgIGNvbXBsZXRlOlsnc3VwcGxpZXInLCdwYXJhbWV0ZXInLCdwcm9kdWN0U2VsZWN0JywnaW52b2ljZSddLFxuICAgICAgICAgICAgZW5hYmxlOiBbJ3N1cHBsaWVyJywncGFyYW1ldGVyJywncHJvZHVjdFNlbGVjdCcsJ2ludm9pY2UnLCdzZW5kJ10sXG4gICAgICAgICAgICBhY3RpdmU6ICdwcm9kdWN0U2VsZWN0JyxcbiAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTp0aGlzLmluaXRWaWV3UHJvZHVjdFNlbGVjdCxcblxuc2VuZFxuICAgICAgICAgICAgY29tcGxldGU6WydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnLCdpbnZvaWNlJywnc2VuZCddLFxuICAgICAgICAgICAgZW5hYmxlOiBbJ3N1cHBsaWVyJywncGFyYW1ldGVyJywncHJvZHVjdFNlbGVjdCcsJ2ludm9pY2UnLCdzZW5kJ10sXG4gICAgICAgICAgICBhY3RpdmU6ICdzZW5kJyxcbiAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTp0aGlzLmluaXRWaWV3UHJvZHVjdFNlbGVjdCxcblxuKi9cbiAgICAgICAgICAgIGNvbXBsZXRlOlsnc3VwcGxpZXInLCdwYXJhbWV0ZXInLCdwcm9kdWN0U2VsZWN0J10sXG4gICAgICAgICAgICBlbmFibGU6IFsnc3VwcGxpZXInLCdwYXJhbWV0ZXInLCdwcm9kdWN0U2VsZWN0J10sXG4gICAgICAgICAgICBhY3RpdmU6ICdwcm9kdWN0U2VsZWN0JyxcbiAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTp0aGlzLmluaXRWaWV3UHJvZHVjdFNlbGVjdCxcblxuXG4gICAgICAgICAgICBhdXRvQ2FsbGJhY2s6IHtcbiAgICAgICAgICAgICAgICBpbnZvaWNlOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTpyb290LmluaXRWaWV3SW52b2ljZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VuZDoge1xuICAgICAgICAgICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6cm9vdC5pbml0Vmlld1NlbmRcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcqKioqKioqKioqKioqKioqKioqJyk7XG5cbiAgICB9XG4gICAgdGhpcy50b2dnbGVFbmFibGVTZW5kPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3RvZ2dsZUVuYWJsZVNlbmQgY2FsbGVkJyk7XG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmNoZWNrUmVhZHlUb1NlbmQucmVwbGFjZSgnJWlkJScsT3JkZXIuaWQpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzKXtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5yZWFkeVRvU2VuZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIuYWRkQ29tcGxldGVkKCdzZW5kJyk7XG4vKlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5TdGVwcGVyLmFkZENvbXBsZXRlZCgnaW52b2ljZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5TdGVwcGVyLmFkZEVuYWJsZWQoJ2ludm9pY2UnKTtcbiovXG4gICAgICAgICAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIuYWRkRW5hYmxlZCgnc2VuZCcpO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuU3RlcHBlci51bnNldENvbXBsZXRlZCgnc2VuZCcpO1xuLypcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuU3RlcHBlci51bnNldENvbXBsZXRlZCgnaW52b2ljZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnVuc2V0RW5hYmxlZCgnaW52b2ljZScpO1xuKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuU3RlcHBlci51bnNldEVuYWJsZWQoJ3NlbmQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG59XG4iXSwibmFtZXMiOlsid2luZG93IiwiT3JkZXJNb2R1bERlZmF1bHQiLCJhY3Rpb25GdW5jdGlvbiIsIkRhdGFNb2RlbE9yZGVyIiwiX0RhdGFNb2RlbCIsImRhdGEiLCJvcHRpb25zIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY2FsbFN1cGVyIiwicHJvZHVjdFNlbGVjdGVkIiwicHJvZHVjdENvbW1lbnQiLCJjb25zb2xlIiwibG9nIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwiRGF0YU1vZGVsIiwiU3RlcHBlciIsIk9wdHMiLCJjb21wbGV0ZSIsImF2YWlsYWJsZSIsImVuYWJsZSIsImxvYWQiLCJleGNsdWRlTG9hZGVkIiwibG9hZGVkIiwiYWN0aXZlIiwiVVJMIiwiY3JlYXRlIiwiVXJsRGF0YSIsIm9uQWZ0ZXJMb2FkIiwib25BZnRlckFjdGl2YXRlIiwiYXV0b0NhbGxiYWNrIiwibm93TG9hZGVkIiwicm9vdCIsImNvbnN0cnVjdCIsIiQiLCJleHRlbmQiLCJnZXRPcHRzIiwic2V0T3B0cyIsImluaXQiLCJkZWJ1ZyIsImVhY2giLCJzdGVwTmFtZSIsImluY2x1ZGVzIiwic2V0Q29tcGxldGVkIiwic2V0RW5hYmxlZCIsImxvYWRTdGVwQ29udGVudCIsInNldEFjdGl2ZSIsImJpbmRDbGlja0FjdGlvbiIsInN0ZXBDbGlja0J1dHRvbnMiLCJvZmYiLCJvbiIsInN0ZXBDbGljayIsImFkZENsYXNzIiwidW5zZXRDb21wbGV0ZWQiLCJyZW1vdmVDbGFzcyIsImFycmF5UmVtb3ZlIiwidW5zZXRFbmFibGVkIiwiY29udGVudHMiLCJ1bndyYXAiLCJzdGVwSXRlbSIsImh0bWwiLCJhZGRFbmFibGVkIiwicHVzaCIsImFkZENvbXBsZXRlZCIsImFqYXgiLCJhc3luYyIsInR5cGUiLCJ1cmwiLCJjYWNoZSIsInN1Y2Nlc3MiLCJyZXN1bHQiLCJjb250YWluZXIiLCJjYXBpdGFsaXplIiwiaW5BcnJheSIsImNsZWFyTG9hZGVkIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJzZXRBY3RpdmVGaW5pc2giLCJzaG93IiwiaGlkZSIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJjdXJyZW50VGFyZ2V0IiwiT3JkZXJNb2R1bGUiLCJ0ZXN0TW9kZSIsIm5lZWRTdGVwcGVyIiwiQ1NTU2VsZWN0b3JGb3JtIiwiZGVmYXVsdERlbGl2ZXJ5RGF0ZSIsImRhdGFTeW5jUGF1c2VUaW1lIiwidG9rZW4iLCJnZXREYXRhVGFibGVDb250ZW50UHJvZHVjdExpc3QiLCJjaGVja1JlYWR5VG9TZW5kIiwiaW5kZXgiLCJlZGl0Iiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwidG9nZ2xlRmF2b3JpdGVzIiwiUHVibGljVmFyIiwiUHVibGljVmFyMiIsIkFwaVRva2VuIiwiT3JkZXIiLCJ2aWV3SW5pY2lhbGl6ZWQiLCJjbGlja09yZGVyRWRpdCIsImFqYXhVcmwiLCJyZXBsYWNlIiwiaWQiLCJBUFAiLCJsb2FkTWFpbkNvbnRlbnQiLCJhZnRlck9yZGVyRGVsZXRlZCIsIlRvYXN0IiwidGl0bGUiLCJtZXNzYWdlIiwic3RhdHVzIiwiVE9BU1RfU1RBVFVTIiwiREFOR0VSIiwidGltZW91dCIsImNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQiLCJtb2RhbCIsImFqYXhEYXRhIiwiX3Rva2VuIiwibWV0aG9kIiwiaW5pdFZpZXdPcmRlclNlbGVjdCIsImFjdGlvbiIsIm9yZGVySWQiLCJjbG9zZXN0IiwiZmluZCIsInRleHQiLCJpbml0U3RlcHBlciIsImdldERhdGEiLCJzZXREZWxpdmVyeURhdGUiLCJzZXRTdXBwbGllciIsInVuRW5hYmxlZCIsInZhbHVlIiwic3RlcEFjdGl2ZSIsInN0ZXBDb21wbGV0ZSIsInN0ZXBFbmFibGUiLCJzdGVwT25BZnRlckFjdGl2YXRlIiwiYXZhbGFpYmxlU3RlcHMiLCJzdGVwVXJsRGF0YSIsInN0ZXBBdXRvQ2FsbGJhY2siLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwiaXRlbSIsImVyciIsImUiLCJmIiwic3VwcGxpZXJJZCIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpbml0T3JkZXIiLCJzdXBwbGllck5hbWUiLCJzZXREYXRhIiwiZGF0ZVRleHQiLCJkYXRlVGV4dFRvIiwiZGF0ZVRleHRIdW1hbiIsInJlcGxhY2VBbGwiLCJsZW5ndGgiLCJ2YWwiLCJzZXRTdXBwbGllckNvbXBsZXRlZCIsImluaXRWaWV3UGFyYW1ldGVyIiwiYWZ0ZXJPcmRlclNldFN1cHBsaWVyT2siLCJzdXBwbGllciIsIklORk8iLCJpbml0Vmlld1N1cHBsaWVyIiwic3RvcmVUeXBlIiwiV0FSTklORyIsImNoZWNrQ29udGFjdE5hbWVGaWVsZCIsIm5vZGUiLCJzZW5kT3JkZXJEYXRhVG9TZXJ2ZXIiLCJ1cGRhdGVUeXBlIiwiY2FsbGJhY2siLCJlcnJvckNhbGxiYWNrIiwiYWpheE1ldGhvZCIsIl9tZXRob2QiLCJqc29uVG9Gb3JtRGF0YSIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJlcnJvciIsInhociIsImFqYXhPcHRpb25zIiwidGhyb3duRXJyb3IiLCJhamF4RXJyb3JIYW5kbGVyIiwicmVzcG9uc2VKU09OIiwiYWZ0ZXJPcmRlclNldFBhcmFtZXRlck9rIiwic2VsZWN0Q3VycmVudFdlZWsiLCJ3ZWVrSG92ZXIiLCJ3ZWVrSG92ZXJTbG93Iiwic2V0VGltZW91dCIsImluaXREYXRlUGlja2VyIiwic3RhcnREYXRlIiwiRGF0ZSIsImVuZERhdGUiLCJkYXRlcGlja2VyIiwic2hvd090aGVyTW9udGhzIiwic2VsZWN0T3RoZXJNb250aHMiLCJzaG93V2VlayIsImRhdGVGb3JtYXQiLCJmaXJzdERheSIsIm1pbkRhdGUiLCJhZnRlclNob3ciLCJpbnN0Iiwib25TZWxlY3QiLCJkYXRlIiwiZ2V0TW9uZGF5IiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXREYXkiLCJmb3JtYXREYXRlIiwiYmVmb3JlU2hvdyIsImdyb3VwIiwiZ3JvdXBFbmQiLCJiZWZvcmVTaG93RGF5IiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwiY3NzQ2xhc3MiLCJvbkNoYW5nZU1vbnRoWWVhciIsInllYXIiLCJtb250aCIsImF2YWlsYWJsZURhdGVzIiwibmV4dERlbGl2ZXJ5RGF0ZSIsImhhc0RlbGl2ZXJ5Q29uc3RyYWludCIsImhvbGlkYXlzIiwid29ya2luZ0RheXMiLCJkYXRlcGlja2VySW5wdXQiLCJjYWxlbmRhclVybCIsInByb2ZpdENlbnRlcklkIiwib3JkZXJEYXRlVGltZSIsInRvSVNPU3RyaW5nIiwibWFwIiwiaCIsImRlc2NyaXB0aW9uIiwidyIsImRhdGVwaWNrZXJPcHRzIiwiZGF0ZVN0ciIsImhvbGlkYXlFbnRyeSIsIndvcmtpbmdEYXlFbnRyeSIsImlzRGVsaXZlcnkiLCJjc3NDbGFzc2VzIiwidG9vbHRpcCIsInNlbGVjdGFibGUiLCJqb2luIiwiY2FsbENoYW5nZU9yZGVyVHlwZSIsImNsaWNrIiwic2VsZWN0MiIsInByb3AiLCJzZXREYXRlIiwic3VibWl0IiwiY2hlY2tWYWxpZGl0eSIsInN0b3BQcm9wYWdhdGlvbiIsImNvbnRhY3ROYW1lIiwibm90ZSIsIm9yZGVyVHlwZSIsImRlbGl2ZXJ5RGF0ZSIsImRlbGl2ZXJ5QWRkcmVzc0lkIiwiZGVsaXZlcnlBZGRyZXNzIiwiY3VzdG9tTm90aWZpY2F0aW9uRW1haWwiLCJibGFuayIsInNldFBhcmFtZXRlckNvbXBsZXRlZCIsImJpbmRSb3dGYXZvcml0ZXNBY3Rpb24iLCJwcm9kdWN0SWQiLCJidXR0b24iLCJyZXNwb25zZSIsImJpbmRSb3dEZXNjcmlwdGlvbkFjdGlvbiIsImNvbW1lbnQiLCJxdWV1ZUFqYXgiLCJub3ciLCJzeW5jT3JkZXJEYXRhVG9TZXJ2ZXIiLCJwcm9kdWN0U2VsZWN0RGF0YXRhYmxlc1Jvd0Zvcm1hdHRlciIsImQiLCJ0ZW1wbGF0ZURhdGEiLCJfdHlwZW9mIiwiZmF2b3JpdGVzIiwiYnRuRmF2b3JpdGVzQ2xhc3MiLCJ0ZW1wbGF0ZSIsIndlZWtseSIsIml0ZW1RdWFudGl0eSIsIm9sZFRhZ3MiLCJNdXN0YWNoZSIsInRhZ3MiLCJzcGVjaWZpY2F0aW9uQ2xhc3MiLCJwaWN0dXJlSW1nIiwicGljdHVyZUNsYXNzIiwicmVuZGVyIiwic2V0RGF0YXRhYmxlSGVhZGVyVGV4dCIsImdldFRyZWVQYXRoTmFtZSIsInJlcyIsIml0ZW1zIiwicGFyZW50cyIsInRvQXJyYXkiLCJzaGlmdCIsInJldmVyc2UiLCJjaGlsZHJlbiIsInNlbGVjdGVkUHJvZHVjdEdyb3VwIiwiZGF0YVRhYmxlU2VhcmNoU3RyIiwiZGF0YVRhYmxlU2VhcmNoS3JlbCIsInNlYXJjaFByb2R1Y3RCeVN0cmluZyIsImZpbHRlclN0ciIsIkRhdGFUYWJsZSIsInJlbG9hZCIsImNsaWNrU2VhcmNoUHJvZHVjdCIsImNsaWNrRmF2b3JpdGVzUHJvZHVjdCIsImNsaWNrT2Z0ZW5Qcm9kdWN0IiwiY2xpY2tTcGVjaWFsT2ZmZXIiLCJjbGlja0xhc3RQcm9kdWN0IiwiY2xpY2tXZWVrbHlQcm9kdWN0IiwiY2xpY2tLcmVsUHJvZHVjdCIsInBhcmVudCIsInRvZ2dsZUNsYXNzIiwicHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbkRlZnMiLCJwcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uIiwiY29sdW1uRGF0YSIsImFjdGlvbkNvbHVtbiIsInJvdyIsInN0b2NrX3N0YXR1cyIsImdldERhdGF0YWJsZXMiLCJ0YWJsZSIsImxhbmd1YWdlIiwic2VhcmNoU3RyIiwia3JlbCIsImdyb3VwSWQiLCJidXR0b25zIiwicHJvZHVjdFNlbGVjdERhdGFUYWJsZURyYXdEVCIsImZpbHRlciIsImlucHV0U3Bpbm5lciIsImJ1dHRvbnNXaWR0aCIsImdyb3VwQ2xhc3MiLCJidXR0b25zQ2xhc3MiLCJiaW5kV2Vha1VzZXJIZWxwZXIiLCJxdWFudGl0eSIsInBhcnNlRmxvYXQiLCJyb3dEYXRhIiwib3JkZXJJdGVtc0NoYW5nZSIsInF1YW50aXR5Q3VycmVudCIsInRyaWdnZXIiLCJpbml0Vmlld1Byb2R1Y3RTZWxlY3QiLCJmdW5jdGlvbk5hbWUiLCJ3aGljaCIsImtleSIsImdldFRpbWUiLCJkYXRhVGFibGUiLCJ0ciIsImNoaWxkIiwiaXNTaG93biIsImJpbmRQcm9kdWN0RGV0YWlsc0FjdGlvbiIsImJpbmRPcmRlckl0ZW1XZWVrUXVhbnRpdHkiLCJhY3R1YWxJdGVtIiwiZm9jdXMiLCJyb3dOb2RlIiwicHJldiIsImFmdGVyU3luY09yZGVyRGF0YVRvU2VydmVyIiwiaSIsInN5bmNEb2luZyIsIkl0ZW1EYXRhIiwiZGF5SW5kZXgiLCJpc05hTiIsInByb2R1Y3RTZWxlY3RlZEl0ZW0iLCJpbml0Vmlld0ludm9pY2UiLCJPYmplY3QiLCJrZXlzIiwic3R5bGVTdHIiLCJwcmludCIsIm5ld1dpbiIsIm9wZW4iLCJkb2N1bWVudCIsIndyaXRlIiwiY2xvbmUiLCJyZW1vdmUiLCJjbG9zZSIsInJlc2V0T3JkZXIiLCJhZnRlck9yZGVyU2VuZE9rIiwicmV0SFRNTCIsImFmdGVyT3JkZXJTZW5kRXJyb3IiLCJpbml0Vmlld1NlbmQiLCJ0ZXN0TW9kZVNlbmQiLCJpbnZvaWNlIiwic2VuZCIsInRvZ2dsZUVuYWJsZVNlbmQiLCJyZWFkeVRvU2VuZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/moduleJs/order.js\n\n}");
|
||
|
||
/***/ },
|
||
|
||
/***/ "./resources/js/moduleJs/orderArchive.js"
|
||
/*!***********************************************!*\
|
||
!*** ./resources/js/moduleJs/orderArchive.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 _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\nfunction _get() { return _get = \"undefined\" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); }\nfunction _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), 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 _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof window.DataModelOrderArchive === \"undefined\") {\n window.OrderArchiveModulDefault = {\n actionFunction: function actionFunction() {}\n };\n var _DataModelOrderArchive = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function _DataModelOrderArchive(data, options) {\n var _this;\n _classCallCheck(this, _DataModelOrderArchive);\n _this = _callSuper(this, _DataModelOrderArchive, [data, options]);\n if (typeof _this.items === \"undefined\") {\n _this.items = {};\n }\n console.log(_this.constructor.name + ' constructor called');\n return _this;\n }\n _inherits(_DataModelOrderArchive, _DataModel);\n return _createClass(_DataModelOrderArchive);\n }(DataModel);\n ;\n window.DataModelOrderArchive = _DataModelOrderArchive;\n}\nif (typeof window.OrderArchiveModule === \"undefined\") {\n var OrderArchiveModule = /*#__PURE__*/function (_ModuleBase) {\n function OrderArchiveModule(options, data) {\n var _this2;\n _classCallCheck(this, OrderArchiveModule);\n _this2 = _callSuper(this, OrderArchiveModule, [options, data]);\n if (data !== \"undefined\" || data != null) {} else {\n _this2.data = new DataModelOrderArchive();\n }\n _this2.dataTable = null;\n _this2.Opts.dataTable.advanceSearchParameter = {\n deliveryDateFrom: null,\n deliveryDateTo: null,\n profitCenterId: null,\n supplierId: null\n };\n return _this2;\n }\n _inherits(OrderArchiveModule, _ModuleBase);\n return _createClass(OrderArchiveModule, [{\n key: \"datatableRowActionAttachment\",\n value: function datatableRowActionAttachment(rowData, node) {\n debug('call datatableRowActionAttachment');\n _superPropGet(OrderArchiveModule, \"datatableRowActionAttachment\", this, 3)([rowData, node, {\n defaultFileName: \"order\"\n }]);\n }\n }, {\n key: \"datatableRowActionView\",\n value: function datatableRowActionView(rowData, node) {\n debug('call datatableRowActionView');\n _superPropGet(OrderArchiveModule, \"datatableRowActionView\", this, 3)([rowData, node, APP.OrderArchiveModule]);\n console.log('datatableRowActionEdit End');\n }\n }, {\n key: \"datatableRowActionButtonClick\",\n value: function datatableRowActionButtonClick(event) {\n debug('datatableRowActionButtonClick');\n _superPropGet(OrderArchiveModule, \"datatableRowActionButtonClick\", this, 3)([event, APP.OrderArchiveModule]);\n }\n /*\r\n datatableRowActionButtonClick (event){\r\n debug('datatableRowActionButtonClick');\r\n let node=$(event[0].currentTarget);\r\n let row=$(dataTableCSSSelector).DataTable().row(node.parents('tr'));\r\n let rowData=row.data();\r\n let actionName='datatableRowAction'+node.data('buttontype').capitalize();\r\n if (typeof root[actionName] === \"function\") {\r\n return root[actionName](rowData,node)\r\n }\r\n }\r\n */\n }, {\n key: \"datatableRowActionEdit\",\n value: function datatableRowActionEdit(rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = this.Opts.URL.edit.replace('%id%', rowData.id);\n console.log(this.Opts.URL);\n console.log(ajaxUrl);\n /*\r\n */\n APP.loadMainContent(ajaxUrl);\n console.log('datatableRowActionEdit End');\n }\n }, {\n key: \"initViewShow\",\n value: function initViewShow() {\n debug('call initViewShow');\n var root = APP.OrderArchiveModule;\n var styleStr = '<link rel=\"stylesheet\" href=\"' + root.Opts.URL.root + '/css/invoice.css\">';\n $('table.invoice button.printButton').off('click');\n $('table.invoice button.printButton').on('click', function () {\n window.print();\n return;\n // removed by dead control flow\n var newWin; \n // removed by dead control flow\n\n // removed by dead control flow\n var print; \n // removed by dead control flow\n\n // newWin.document.write($('table.invoice').prop('outerHTML'));\n // removed by dead control flow\n\n // removed by dead control flow\n\n // newWin.close();\n });\n }\n }, {\n key: \"datatableCustomHeadButtonClickCallBack\",\n value: function datatableCustomHeadButtonClickCallBack() {\n console.info('hello itt vagyok');\n $('.advanceSearchModal').modal('show');\n }\n }, {\n key: \"initAdvancedSearch\",\n value: function initAdvancedSearch() {\n console.log('initAdvancedSearch');\n window.datePickerTarget = '';\n $('.deliveryDateFrom,.deliveryDateTo').datepicker({\n dateFormat: 'yy-mm-dd',\n //minDate:new Date(),\n onSelect: function onSelect(dateText) {\n debug('target:' + window.datePickerTarget);\n $('.' + window.datePickerTarget + 'SelectedDateText').text(dateText);\n debug($(' input[name=\"' + window.datePickerTarget + '\"]'));\n $(' input[name=\"' + window.datePickerTarget + '\"]').val(dateText);\n }\n });\n $('.datePickerClick').click(function () {\n debug($(this).data('target'));\n datePickerTarget = $(this).data('target');\n //$('.datePicker .'+datePickerTarget).datepicker('show');\n $('.' + datePickerTarget).datepicker('show');\n });\n $(\".selectProfitCenter,.selectSupplier\").select2({\n maximumSelectionLength: 1\n });\n /*\r\n stored advanceSearchParameter restoring\r\n */\n var advanceFiltered = false;\n $.each(this.Opts.dataTable.advanceSearchParameter, function (k, v) {\n if (v != null) {\n advanceFiltered = true;\n console.log(k + ' > ' + v);\n $('.advanceSearchModal input[name=' + k + '],.advanceSearchModal select[name=' + k + ']').val(v).trigger('change');\n $('.' + k + 'SelectedDateText').text(v);\n }\n });\n if (advanceFiltered) {\n $('.dt-button.btn-advanceSearchParameter').addClass('btn-success');\n }\n /*\r\n clearing advanceSearchParameter\r\n */\n $('.advanceSearchModal .buttonClear').off('click');\n $('.advanceSearchModal .buttonClear').on('click', function () {\n $('.advanceSearchModal input,.advanceSearchModal select').val('').trigger('change');\n $('.SelectedDateText').text('\\xa0');\n var root = APP.OrderArchiveModule;\n $.each(root.Opts.dataTable.advanceSearchParameter, function (k, v) {\n root.Opts.dataTable.advanceSearchParameter[k] = null;\n });\n $('.dt-button.btn-advanceSearchParameter').removeClass('btn-success');\n var dataTableCSSSelector = root.Opts.CSSSelectorContainer + ' .dataTable';\n $(dataTableCSSSelector).DataTable().ajax.reload();\n $('.advanceSearchModal').modal('hide');\n });\n\n /*\r\n process advanceSearchParameter\r\n */\n $('.advanceSearchModal .buttonSave').off('click');\n $('.advanceSearchModal .buttonSave').on('click', function () {\n console.log('clicked advanced search ');\n var root = APP.OrderArchiveModule;\n var dataSearch = $('.advanceSearchModalForm').find('input,select').serializeArray();\n console.log(dataSearch);\n console.log(root.Opts);\n console.log(root.Opts.dataTable.advanceSearchParameter);\n $.each(root.Opts.dataTable.advanceSearchParameter, function (k, v) {\n root.Opts.dataTable.advanceSearchParameter[k] = null;\n });\n $.each(dataSearch, function (k, item) {\n console.log(item['name']);\n console.log(item['value']);\n if (typeof root.Opts.dataTable.advanceSearchParameter[item['name']] != 'undefined' && item['value'].length > 0) {\n root.Opts.dataTable.advanceSearchParameter[item['name']] = item['value'];\n }\n });\n console.log(root.Opts.dataTable.advanceSearchParameter);\n var dataTableCSSSelector = root.Opts.CSSSelectorContainer + ' .dataTable';\n $(dataTableCSSSelector).DataTable().ajax.reload();\n $('.dt-button.btn-advanceSearchParameter').addClass('btn-success');\n $('.advanceSearchModal').modal('hide');\n });\n }\n }, {\n key: \"initViewList\",\n value: function initViewList() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n if (APP.IsUserAdmin) {\n this.DtColumns = [{\n \"data\": \"supplier_name\"\n }, {\n \"data\": \"deliveryDate\"\n }, {\n \"data\": \"profit_center.name\"\n }, {\n \"data\": \"deliveryAddressName\"\n }, {\n \"data\": \"sentTime\"\n }, {\n \"data\": \"humanId\"\n }, {\n \"data\": \"confirmed\"\n }, null];\n } else {\n this.DtColumns = [{\n \"data\": \"supplier_name\"\n }, {\n \"data\": \"deliveryDate\"\n }, {\n \"data\": \"deliveryAddressName\"\n }, {\n \"data\": \"sentTime\"\n }, {\n \"data\": \"humanId\"\n }, {\n \"data\": \"confirmed\"\n }, null];\n }\n var dataTableCSSSelector = this.Opts.CSSSelectorContainer + ' .dataTable'; //\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n //datatableRowActionButtonClickCallBack:this.datatableRowActionButtonClick,\n datatableRowActionButtonClickCallBack: this.datatableRowActionButtonClick,\n datatableCustomHeadButtonClickCallBack: this.datatableCustomHeadButtonClickCallBack\n });\n var orderDirective = this.Opts.dataTable.orderDirective;\n var advanceSearchParameter = this.Opts.dataTable.advanceSearchParameter;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n //let ajaxUrl=this.Opts.URL.getDataTableContent;\n this.dataTable = $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": {\n url: this.Opts.URL.getDataTableContent,\n data: function data(_data) {\n _data.advanceSearchParameter = advanceSearchParameter;\n /*\r\n data.searchParam=this.Opts.dataTable.advanceSearchParameter\r\n data.searchStr=dataTableSearchStr;\r\n data.groupId=selectedProductGroup;\r\n data.supplierId=Order.supplierId;\r\n data.deliveryDate=Order.deliveryDate;\r\n */\n }\n },\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowViewButton(0, arguments);\n buttons += APP.datatableAddRowAttachmentButton(0, arguments);\n //buttons+=APP.datatableAddRowEditButton(0, arguments);\n if (row.canEditable) {\n buttons += APP.datatableAddRowEditButton(0, {\n title: \"módosítás\"\n });\n }\n return buttons;\n }\n }, {\n \"targets\": colNum - 2,\n \"render\": function render(data, type, row) {\n if (row.confirmed == null) {\n return '<span class=\"badge badge-pill badge-danger\"><i class=\"fas fa-handshake-slash\"></i></span>';\n } else {\n return row.confirmed;\n }\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n row = null;\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }, {\n text: 'Szürők',\n action: function action(e, dt, node, config) {\n APP.datatableCustomHeadButtonClickCallBack();\n },\n className: 'btn-advanceSearchParameter'\n }\n /**/]\n },\n \"columns\": this.DtColumns,\n \"order\": orderDirective,\n \"stateSave\": false,\n \"drawCallback\": function drawCallback(settings) {\n settings = null;\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n this.initAdvancedSearch();\n debug('listview end');\n }\n }]);\n }(ModuleBase);\n window.OrderArchiveModule = OrderArchiveModule;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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NEYsVUFBVTtFQXdTM0M5SCxNQUFNLENBQUNtQixrQkFBa0IsR0FBQ0Esa0JBQWtCO0FBQ2hEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL21vZHVsZUpzL29yZGVyQXJjaGl2ZS5qcz9mMGE4Il0sInNvdXJjZXNDb250ZW50IjpbIlxyXG5cclxuaWYodHlwZW9mIHdpbmRvdy5EYXRhTW9kZWxPcmRlckFyY2hpdmUgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICB3aW5kb3cuT3JkZXJBcmNoaXZlTW9kdWxEZWZhdWx0PXtcclxuICAgICAgICBhY3Rpb25GdW5jdGlvbjogZnVuY3Rpb24gKCkge30sXHJcbiAgICB9XHJcbiAgICBjbGFzcyBEYXRhTW9kZWxPcmRlckFyY2hpdmUgZXh0ZW5kcyBEYXRhTW9kZWx7XHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogQ29uc3RydWN0b3JcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdHJ1Y3RvciAoZGF0YSxvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHN1cGVyKGRhdGEsb3B0aW9ucylcclxuICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMuaXRlbXMgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zPXt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY29uc3RydWN0b3IubmFtZSsnIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgd2luZG93LkRhdGFNb2RlbE9yZGVyQXJjaGl2ZT1EYXRhTW9kZWxPcmRlckFyY2hpdmU7XHJcbn1cclxuXHJcblxyXG5pZih0eXBlb2Ygd2luZG93Lk9yZGVyQXJjaGl2ZU1vZHVsZSA9PT1cInVuZGVmaW5lZFwiKSB7XHJcbiAgICBjbGFzcyBPcmRlckFyY2hpdmVNb2R1bGUgZXh0ZW5kcyBNb2R1bGVCYXNle1xyXG4gICAgICAgIGNvbnN0cnVjdG9yIChvcHRpb25zLGRhdGEpIHtcclxuICAgICAgICAgICAgc3VwZXIob3B0aW9ucyxkYXRhKVxyXG4gICAgICAgICAgICBpZihkYXRhIT09XCJ1bmRlZmluZWRcIiB8fCBkYXRhIT1udWxsKXtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGE9bmV3IERhdGFNb2RlbE9yZGVyQXJjaGl2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlPW51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuT3B0cy5kYXRhVGFibGUuYWR2YW5jZVNlYXJjaFBhcmFtZXRlcj17XHJcbiAgICAgICAgICAgICAgICBkZWxpdmVyeURhdGVGcm9tOm51bGwsXHJcbiAgICAgICAgICAgICAgICBkZWxpdmVyeURhdGVUbzpudWxsLFxyXG4gICAgICAgICAgICAgICAgcHJvZml0Q2VudGVySWQ6bnVsbCxcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVySWQ6bnVsbCxcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkF0dGFjaG1lbnQocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgICAgIGRlYnVnKCdjYWxsIGRhdGF0YWJsZVJvd0FjdGlvbkF0dGFjaG1lbnQnKTtcclxuICAgICAgICAgICAgc3VwZXIuZGF0YXRhYmxlUm93QWN0aW9uQXR0YWNobWVudChyb3dEYXRhLG5vZGUse2RlZmF1bHRGaWxlTmFtZTpcIm9yZGVyXCJ9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvblZpZXcocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgICAgIGRlYnVnKCdjYWxsIGRhdGF0YWJsZVJvd0FjdGlvblZpZXcnKTtcclxuICAgICAgICAgICAgc3VwZXIuZGF0YXRhYmxlUm93QWN0aW9uVmlldyhyb3dEYXRhLG5vZGUsQVBQLk9yZGVyQXJjaGl2ZU1vZHVsZSlcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayhldmVudCkge1xyXG4gICAgICAgICAgICBkZWJ1ZygnZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2snKTtcclxuICAgICAgICAgICAgc3VwZXIuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2soZXZlbnQsQVBQLk9yZGVyQXJjaGl2ZU1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2sgKGV2ZW50KXtcclxuICAgICAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgICAgIGxldCBub2RlPSQoZXZlbnRbMF0uY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KG5vZGUucGFyZW50cygndHInKSk7XHJcbiAgICAgICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgICAgIGxldCBhY3Rpb25OYW1lPSdkYXRhdGFibGVSb3dBY3Rpb24nK25vZGUuZGF0YSgnYnV0dG9udHlwZScpLmNhcGl0YWxpemUoKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByb290W2FjdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG4gICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkVkaXQocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xyXG4gICAgICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcclxuICAgICAgICAgICAgbGV0IGFqYXhVcmw9dGhpcy5PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuT3B0cy5VUkwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGFqYXhVcmwpO1xyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KGFqYXhVcmwpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBFbmQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGluaXRWaWV3U2hvdygpe1xyXG4gICAgICAgICAgICBkZWJ1ZygnY2FsbCBpbml0Vmlld1Nob3cnKTtcclxuICAgICAgICAgICAgbGV0IHJvb3Q9QVBQLk9yZGVyQXJjaGl2ZU1vZHVsZTtcclxuICAgICAgICAgICAgbGV0IHN0eWxlU3RyPSc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIicrcm9vdC5PcHRzLlVSTC5yb290KycvY3NzL2ludm9pY2UuY3NzXCI+JztcclxuICAgICAgICAgICAgJCgndGFibGUuaW52b2ljZSBidXR0b24ucHJpbnRCdXR0b24nKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgICAgICQoJ3RhYmxlLmludm9pY2UgYnV0dG9uLnByaW50QnV0dG9uJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cucHJpbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGxldCBuZXdXaW49IHdpbmRvdy5vcGVuKFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgbmV3V2luLmRvY3VtZW50LndyaXRlKHN0eWxlU3RyKTtcclxuICAgICAgICAgICAgICAgIGxldCBwcmludD0kKCd0YWJsZS5pbnZvaWNlJykuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIHByaW50LmZpbmQoJ2J1dHRvbi5wcmludEJ1dHRvbicpLnJlbW92ZSgpO1xyXG4vLyAgICAgICAgICAgIG5ld1dpbi5kb2N1bWVudC53cml0ZSgkKCd0YWJsZS5pbnZvaWNlJykucHJvcCgnb3V0ZXJIVE1MJykpO1xyXG4gICAgICAgICAgICAgICAgbmV3V2luLmRvY3VtZW50LndyaXRlKHByaW50LnByb3AoJ291dGVySFRNTCcpKTtcclxuICAgICAgICAgICAgICAgIG5ld1dpbi5wcmludCgpO1xyXG4vLyAgICAgICAgICAgICAgICBuZXdXaW4uY2xvc2UoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkYXRhdGFibGVDdXN0b21IZWFkQnV0dG9uQ2xpY2tDYWxsQmFjaygpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oJ2hlbGxvIGl0dCB2YWd5b2snKTtcclxuICAgICAgICAgICAgJCgnLmFkdmFuY2VTZWFyY2hNb2RhbCcpLm1vZGFsKCdzaG93Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbml0QWR2YW5jZWRTZWFyY2goKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2luaXRBZHZhbmNlZFNlYXJjaCcpO1xyXG4gICAgICAgICAgICB3aW5kb3cuZGF0ZVBpY2tlclRhcmdldD0nJztcclxuICAgICAgICAgICAgJCgnLmRlbGl2ZXJ5RGF0ZUZyb20sLmRlbGl2ZXJ5RGF0ZVRvJykuZGF0ZXBpY2tlcih7XHJcbiAgICAgICAgICAgICAgICBkYXRlRm9ybWF0OiAneXktbW0tZGQnLFxyXG4gICAgICAgICAgICAgICAgLy9taW5EYXRlOm5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgICAgICBvblNlbGVjdDpmdW5jdGlvbiAoZGF0ZVRleHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKCd0YXJnZXQ6Jyt3aW5kb3cuZGF0ZVBpY2tlclRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnLicrd2luZG93LmRhdGVQaWNrZXJUYXJnZXQrJ1NlbGVjdGVkRGF0ZVRleHQnKS50ZXh0KGRhdGVUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICBkZWJ1ZygkKCcgaW5wdXRbbmFtZT1cIicrd2luZG93LmRhdGVQaWNrZXJUYXJnZXQrJ1wiXScpKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCcgaW5wdXRbbmFtZT1cIicrd2luZG93LmRhdGVQaWNrZXJUYXJnZXQrJ1wiXScpLnZhbChkYXRlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgJCgnLmRhdGVQaWNrZXJDbGljaycpLmNsaWNrKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZygkKHRoaXMpLmRhdGEoJ3RhcmdldCcpKTtcclxuICAgICAgICAgICAgICAgIGRhdGVQaWNrZXJUYXJnZXQ9JCh0aGlzKS5kYXRhKCd0YXJnZXQnKTtcclxuICAgICAgICAgICAgICAgIC8vJCgnLmRhdGVQaWNrZXIgLicrZGF0ZVBpY2tlclRhcmdldCkuZGF0ZXBpY2tlcignc2hvdycpO1xyXG4gICAgICAgICAgICAgICAgJCgnLicrZGF0ZVBpY2tlclRhcmdldCkuZGF0ZXBpY2tlcignc2hvdycpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgJChcIi5zZWxlY3RQcm9maXRDZW50ZXIsLnNlbGVjdFN1cHBsaWVyXCIpLnNlbGVjdDIoe1xyXG4gICAgICAgICAgICAgICAgbWF4aW11bVNlbGVjdGlvbkxlbmd0aDogMSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgIHN0b3JlZCBhZHZhbmNlU2VhcmNoUGFyYW1ldGVyIHJlc3RvcmluZ1xyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBsZXQgYWR2YW5jZUZpbHRlcmVkPWZhbHNlO1xyXG4gICAgICAgICAgICQuZWFjaCh0aGlzLk9wdHMuZGF0YVRhYmxlLmFkdmFuY2VTZWFyY2hQYXJhbWV0ZXIsZnVuY3Rpb24gKGssdikge1xyXG4gICAgICAgICAgICAgICAgaWYodiE9bnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZUZpbHRlcmVkPXRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coaysnID4gJyt2KTtcclxuICAgICAgICAgICAgICAgICAgICAkKCcuYWR2YW5jZVNlYXJjaE1vZGFsIGlucHV0W25hbWU9JytrKyddLC5hZHZhbmNlU2VhcmNoTW9kYWwgc2VsZWN0W25hbWU9JytrKyddJykudmFsKHYpLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoJy4nK2srJ1NlbGVjdGVkRGF0ZVRleHQnKS50ZXh0KHYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgaWYoYWR2YW5jZUZpbHRlcmVkKXtcclxuICAgICAgICAgICAgICAgJCgnLmR0LWJ1dHRvbi5idG4tYWR2YW5jZVNlYXJjaFBhcmFtZXRlcicpLmFkZENsYXNzKCdidG4tc3VjY2VzcycpO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgY2xlYXJpbmcgYWR2YW5jZVNlYXJjaFBhcmFtZXRlclxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAkKCcuYWR2YW5jZVNlYXJjaE1vZGFsIC5idXR0b25DbGVhcicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAgICAgJCgnLmFkdmFuY2VTZWFyY2hNb2RhbCAuYnV0dG9uQ2xlYXInKS5vbignY2xpY2snLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICQoJy5hZHZhbmNlU2VhcmNoTW9kYWwgaW5wdXQsLmFkdmFuY2VTZWFyY2hNb2RhbCBzZWxlY3QnKS52YWwoJycpLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgICAgICAgICAgICAgJCgnLlNlbGVjdGVkRGF0ZVRleHQnKS50ZXh0KCdcXHhhMCcpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJvb3Q9QVBQLk9yZGVyQXJjaGl2ZU1vZHVsZTtcclxuICAgICAgICAgICAgICAgICQuZWFjaChyb290Lk9wdHMuZGF0YVRhYmxlLmFkdmFuY2VTZWFyY2hQYXJhbWV0ZXIsZnVuY3Rpb24gKGssdikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QuT3B0cy5kYXRhVGFibGUuYWR2YW5jZVNlYXJjaFBhcmFtZXRlcltrXT1udWxsO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAkKCcuZHQtYnV0dG9uLmJ0bi1hZHZhbmNlU2VhcmNoUGFyYW1ldGVyJykucmVtb3ZlQ2xhc3MoJ2J0bi1zdWNjZXNzJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9cm9vdC5PcHRzLkNTU1NlbGVjdG9yQ29udGFpbmVyKycgLmRhdGFUYWJsZSc7XHJcbiAgICAgICAgICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgJCgnLmFkdmFuY2VTZWFyY2hNb2RhbCcpLm1vZGFsKCdoaWRlJyk7XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgIHByb2Nlc3MgYWR2YW5jZVNlYXJjaFBhcmFtZXRlclxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAkKCcuYWR2YW5jZVNlYXJjaE1vZGFsIC5idXR0b25TYXZlJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICAgICAkKCcuYWR2YW5jZVNlYXJjaE1vZGFsIC5idXR0b25TYXZlJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjbGlja2VkIGFkdmFuY2VkIHNlYXJjaCAnKTtcclxuICAgICAgICAgICAgICAgIGxldCByb290PUFQUC5PcmRlckFyY2hpdmVNb2R1bGU7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVNlYXJjaD0kKCcuYWR2YW5jZVNlYXJjaE1vZGFsRm9ybScpLmZpbmQoJ2lucHV0LHNlbGVjdCcpLnNlcmlhbGl6ZUFycmF5KCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhU2VhcmNoKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJvb3QuT3B0cyk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyb290Lk9wdHMuZGF0YVRhYmxlLmFkdmFuY2VTZWFyY2hQYXJhbWV0ZXIpO1xyXG4gICAgICAgICAgICAgICAgJC5lYWNoKHJvb3QuT3B0cy5kYXRhVGFibGUuYWR2YW5jZVNlYXJjaFBhcmFtZXRlcixmdW5jdGlvbiAoayx2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5PcHRzLmRhdGFUYWJsZS5hZHZhbmNlU2VhcmNoUGFyYW1ldGVyW2tdPW51bGw7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhU2VhcmNoLGZ1bmN0aW9uIChrLGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpdGVtWyduYW1lJ10pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGl0ZW1bJ3ZhbHVlJ10pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCB0eXBlb2Ygcm9vdC5PcHRzLmRhdGFUYWJsZS5hZHZhbmNlU2VhcmNoUGFyYW1ldGVyW2l0ZW1bJ25hbWUnXV0hPSAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBpdGVtWyd2YWx1ZSddLmxlbmd0aD4wXHJcbiAgICAgICAgICAgICAgICAgICAgKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5PcHRzLmRhdGFUYWJsZS5hZHZhbmNlU2VhcmNoUGFyYW1ldGVyW2l0ZW1bJ25hbWUnXV09aXRlbVsndmFsdWUnXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5PcHRzLmRhdGFUYWJsZS5hZHZhbmNlU2VhcmNoUGFyYW1ldGVyKTtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhVGFibGVDU1NTZWxlY3Rvcj1yb290Lk9wdHMuQ1NTU2VsZWN0b3JDb250YWluZXIrJyAuZGF0YVRhYmxlJztcclxuICAgICAgICAgICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAkKCcuZHQtYnV0dG9uLmJ0bi1hZHZhbmNlU2VhcmNoUGFyYW1ldGVyJykuYWRkQ2xhc3MoJ2J0bi1zdWNjZXNzJyk7XHJcbiAgICAgICAgICAgICAgICAkKCcuYWR2YW5jZVNlYXJjaE1vZGFsJykubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5pdFZpZXdMaXN0KG9wdGlvbnM9e30pIHtcclxuICAgICAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XHJcblxyXG4gICAgICAgICAgICBpZihBUFAuSXNVc2VyQWRtaW4pe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5EdENvbHVtbnM9W1xyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwic3VwcGxpZXJfbmFtZVwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJkZWxpdmVyeURhdGVcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwicHJvZml0X2NlbnRlci5uYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImRlbGl2ZXJ5QWRkcmVzc05hbWVcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwic2VudFRpbWVcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaHVtYW5JZFwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjb25maXJtZWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMuRHRDb2x1bW5zPVtcclxuICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcInN1cHBsaWVyX25hbWVcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiZGVsaXZlcnlEYXRlXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImRlbGl2ZXJ5QWRkcmVzc05hbWVcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwic2VudFRpbWVcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaHVtYW5JZFwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjb25maXJtZWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9dGhpcy5PcHRzLkNTU1NlbGVjdG9yQ29udGFpbmVyKycgLmRhdGFUYWJsZSc7IC8vXHJcbiAgICAgICAgICAgIGxldCBjb2xOdW09JChkYXRhVGFibGVDU1NTZWxlY3RvcisnIHRoZWFkIHRoJykubGVuZ3RoOyAvL2J1dHRvbnMgaW5zZXJ0IHBvc2l0aW9uIG5lZWRcclxuICAgICAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICAgICAgLy9kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnRoaXMuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcbiAgICAgICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnRoaXMuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcbiAgICAgICAgICAgICAgICBkYXRhdGFibGVDdXN0b21IZWFkQnV0dG9uQ2xpY2tDYWxsQmFjazp0aGlzLmRhdGF0YWJsZUN1c3RvbUhlYWRCdXR0b25DbGlja0NhbGxCYWNrLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9dGhpcy5PcHRzLmRhdGFUYWJsZS5vcmRlckRpcmVjdGl2ZTtcclxuICAgICAgICAgICAgbGV0IGFkdmFuY2VTZWFyY2hQYXJhbWV0ZXI9dGhpcy5PcHRzLmRhdGFUYWJsZS5hZHZhbmNlU2VhcmNoUGFyYW1ldGVyO1xyXG5cclxuICAgICAgICAgICAgaWYodHlwZW9mIG9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlPW9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9sZXQgYWpheFVybD10aGlzLk9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8vXCJhamF4XCI6IFwie3thc3NldCgnZXhhcG1sZTIuanNvbicpfX1cIixcclxuICAgICAgICAgICAgICAgIFwiYWpheFwiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOnRoaXMuT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOmZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYWR2YW5jZVNlYXJjaFBhcmFtZXRlcj1hZHZhbmNlU2VhcmNoUGFyYW1ldGVyO1xyXG4vKlxyXG5kYXRhLnNlYXJjaFBhcmFtPXRoaXMuT3B0cy5kYXRhVGFibGUuYWR2YW5jZVNlYXJjaFBhcmFtZXRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNlYXJjaFN0cj1kYXRhVGFibGVTZWFyY2hTdHI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZ3JvdXBJZD1zZWxlY3RlZFByb2R1Y3RHcm91cDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdXBwbGllcklkPU9yZGVyLnN1cHBsaWVySWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZGVsaXZlcnlEYXRlPU9yZGVyLmRlbGl2ZXJ5RGF0ZTtcclxuKi9cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnV0dG9ucz1BUFAuZGF0YXRhYmxlQWRkUm93Vmlld0J1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zKz1BUFAuZGF0YXRhYmxlQWRkUm93QXR0YWNobWVudEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2J1dHRvbnMrPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyb3cuY2FuRWRpdGFibGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMrPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsIHt0aXRsZTpcIm3Ds2Rvc8OtdMOhc1wifSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IGNvbE51bS0yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJvdy5jb25maXJtZWQ9PW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1waWxsIGJhZGdlLWRhbmdlclwiPjxpIGNsYXNzPVwiZmFzIGZhLWhhbmRzaGFrZS1zbGFzaFwiPjwvaT48L3NwYW4+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb3cuY29uZmlybWVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93PW51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJzb3J0XCIgPyBkYXRhLmxhdGluaXNlKCkgOiBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLy97IFwidmlzaWJsZVwiOiBmYWxzZSwgIFwidGFyZ2V0c1wiOiBbIDAgXSB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uczp7XHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQ6ICdwcmludCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlVG9wJzogJ01lc3NhZ2UgT24gVG9wJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnU3rDvHLFkWsnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBub2RlLCBjb25maWcgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUN1c3RvbUhlYWRCdXR0b25DbGlja0NhbGxCYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuLWFkdmFuY2VTZWFyY2hQYXJhbWV0ZXInXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqL1xyXG4gICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBcImNvbHVtbnNcIjogdGhpcy5EdENvbHVtbnMsXHJcbiAgICAgICAgICAgICAgICBcIm9yZGVyXCI6IG9yZGVyRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgXCJzdGF0ZVNhdmVcIjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3M9bnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pbml0QWR2YW5jZWRTZWFyY2goKTtcclxuICAgICAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGVuZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHdpbmRvdy5PcmRlckFyY2hpdmVNb2R1bGU9T3JkZXJBcmNoaXZlTW9kdWxlO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJ3aW5kb3ciLCJEYXRhTW9kZWxPcmRlckFyY2hpdmUiLCJPcmRlckFyY2hpdmVNb2R1bERlZmF1bHQiLCJhY3Rpb25GdW5jdGlvbiIsIl9EYXRhTW9kZWwiLCJfRGF0YU1vZGVsT3JkZXJBcmNoaXZlIiwiZGF0YSIsIm9wdGlvbnMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJpdGVtcyIsImNvbnNvbGUiLCJsb2ciLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJfaW5oZXJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJEYXRhTW9kZWwiLCJPcmRlckFyY2hpdmVNb2R1bGUiLCJfTW9kdWxlQmFzZSIsIl90aGlzMiIsImRhdGFUYWJsZSIsIk9wdHMiLCJhZHZhbmNlU2VhcmNoUGFyYW1ldGVyIiwiZGVsaXZlcnlEYXRlRnJvbSIsImRlbGl2ZXJ5RGF0ZVRvIiwicHJvZml0Q2VudGVySWQiLCJzdXBwbGllcklkIiwia2V5IiwidmFsdWUiLCJkYXRhdGFibGVSb3dBY3Rpb25BdHRhY2htZW50Iiwicm93RGF0YSIsIm5vZGUiLCJkZWJ1ZyIsIl9zdXBlclByb3BHZXQiLCJkZWZhdWx0RmlsZU5hbWUiLCJkYXRhdGFibGVSb3dBY3Rpb25WaWV3IiwiQVBQIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJldmVudCIsImRhdGF0YWJsZVJvd0FjdGlvbkVkaXQiLCJhamF4VXJsIiwiVVJMIiwiZWRpdCIsInJlcGxhY2UiLCJpZCIsImxvYWRNYWluQ29udGVudCIsImluaXRWaWV3U2hvdyIsInJvb3QiLCJzdHlsZVN0ciIsIiQiLCJvZmYiLCJvbiIsInByaW50IiwibmV3V2luIiwib3BlbiIsImRvY3VtZW50Iiwid3JpdGUiLCJjbG9uZSIsImZpbmQiLCJyZW1vdmUiLCJwcm9wIiwiZGF0YXRhYmxlQ3VzdG9tSGVhZEJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJpbmZvIiwibW9kYWwiLCJpbml0QWR2YW5jZWRTZWFyY2giLCJkYXRlUGlja2VyVGFyZ2V0IiwiZGF0ZXBpY2tlciIsImRhdGVGb3JtYXQiLCJvblNlbGVjdCIsImRhdGVUZXh0IiwidGV4dCIsInZhbCIsImNsaWNrIiwic2VsZWN0MiIsIm1heGltdW1TZWxlY3Rpb25MZW5ndGgiLCJhZHZhbmNlRmlsdGVyZWQiLCJlYWNoIiwiayIsInYiLCJ0cmlnZ2VyIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsImRhdGFUYWJsZUNTU1NlbGVjdG9yIiwiQ1NTU2VsZWN0b3JDb250YWluZXIiLCJEYXRhVGFibGUiLCJhamF4IiwicmVsb2FkIiwiZGF0YVNlYXJjaCIsInNlcmlhbGl6ZUFycmF5IiwiaXRlbSIsImxlbmd0aCIsImluaXRWaWV3TGlzdCIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIklzVXNlckFkbWluIiwiRHRDb2x1bW5zIiwiY29sTnVtIiwic2V0T3B0cyIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJvcmRlckRpcmVjdGl2ZSIsImxhbmd1YWdlIiwidXJsIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsInJlbmRlciIsInR5cGUiLCJyb3ciLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93Vmlld0J1dHRvbiIsImRhdGF0YWJsZUFkZFJvd0F0dGFjaG1lbnRCdXR0b24iLCJjYW5FZGl0YWJsZSIsImRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24iLCJ0aXRsZSIsImNvbmZpcm1lZCIsImxhdGluaXNlIiwiZXh0ZW5kIiwiYXV0b1ByaW50IiwiYWN0aW9uIiwiZSIsImR0IiwiY29uZmlnIiwiY2xhc3NOYW1lIiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJNb2R1bGVCYXNlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/moduleJs/orderArchive.js\n\n}");
|
||
|
||
/***/ },
|
||
|
||
/***/ "./resources/js/moduleJs/priceList.js"
|
||
/*!********************************************!*\
|
||
!*** ./resources/js/moduleJs/priceList.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 _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), 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 _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\nfunction _get() { return _get = \"undefined\" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); }\nfunction _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof window.PriceListModule === \"undefined\") {\n var PriceListModule = /*#__PURE__*/function (_ModuleBase) {\n function PriceListModule() {\n _classCallCheck(this, PriceListModule);\n return _callSuper(this, PriceListModule, arguments);\n }\n _inherits(PriceListModule, _ModuleBase);\n return _createClass(PriceListModule, [{\n key: \"datatableRowActionAttachment\",\n value: function datatableRowActionAttachment(rowData, node) {\n debug('call datatableRowActionAttachment');\n _superPropGet(PriceListModule, \"datatableRowActionAttachment\", this, 3)([rowData, node, {\n defaultFileName: \"arlista.xls\"\n }]);\n }\n }, {\n key: \"datatableRowActionView\",\n value: function datatableRowActionView(rowData, node) {\n debug('call datatableRowActionView');\n }\n }, {\n key: \"datatableRowActionButtonClick\",\n value: function datatableRowActionButtonClick(event) {\n debug('datatableRowActionButtonClick');\n var rootObj = APP.PriceListModule;\n var node = $(event[0].currentTarget);\n var row = $(rootObj.Opts.dataTable.CSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof rootObj[actionName] === \"function\") {\n return rootObj[actionName](rowData, node);\n }\n }\n }, {\n key: \"initViewList\",\n value: function initViewList() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n var dataTableCSSSelector = this.Opts.CSSSelectorContainer + ' .dataTable'; //\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n //datatableRowActionButtonClickCallBack:this.datatableRowActionButtonClick,\n datatableRowActionButtonClickCallBack: this.datatableRowActionButtonClick\n });\n var orderDirective = this.Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n //let ajaxUrl=this.Opts.URL.getDataTableContent;\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": {\n url: this.Opts.URL.getDataTableContent,\n data: function data(_data) {\n /*\r\n data.searchStr=dataTableSearchStr;\r\n data.groupId=selectedProductGroup;\r\n data.supplierId=Order.supplierId;\r\n data.deliveryDate=Order.deliveryDate;\r\n */\n }\n },\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n if (row.fileUrl) {\n var buttons = APP.datatableAddRowAttachmentButton(0, arguments);\n return buttons;\n } else {\n return '';\n }\n }\n }\n /* {\r\n \"targets\": 1,\r\n \"render\": function ( data, type, row ) {\r\n row=null;\r\n return type === \"sort\" ? data.latinise() : data;\r\n },\r\n },*/\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: [\n /* 'excel','pdf',\r\n {\r\n extend: 'print',\r\n //text: 'Print current page',\r\n 'title': 'title custom text',\r\n 'messageTop': 'Message On Top',\r\n autoPrint: true\r\n },\r\n */ /**/\n ]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"supplierName\"\n }, {\n \"data\": \"available\"\n }, {\n \"data\": \"created_at\"\n }, {\n \"data\": \"note\"\n }, null],\n \"order\": orderDirective,\n //\"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n settings = null;\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\n }\n }]);\n }(ModuleBase);\n ;\n window.PriceListModule = PriceListModule;\n}\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJQcmljZUxpc3RNb2R1bGUiLCJfTW9kdWxlQmFzZSIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJ2YWx1ZSIsImRhdGF0YWJsZVJvd0FjdGlvbkF0dGFjaG1lbnQiLCJyb3dEYXRhIiwibm9kZSIsImRlYnVnIiwiX3N1cGVyUHJvcEdldCIsImRlZmF1bHRGaWxlTmFtZSIsImRhdGF0YWJsZVJvd0FjdGlvblZpZXciLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayIsImV2ZW50Iiwicm9vdE9iaiIsIkFQUCIsIiQiLCJjdXJyZW50VGFyZ2V0Iiwicm93IiwiT3B0cyIsImRhdGFUYWJsZSIsIkNTU1NlbGVjdG9yIiwiRGF0YVRhYmxlIiwicGFyZW50cyIsImRhdGEiLCJhY3Rpb25OYW1lIiwiY2FwaXRhbGl6ZSIsImluaXRWaWV3TGlzdCIsIm9wdGlvbnMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJkYXRhVGFibGVDU1NTZWxlY3RvciIsIkNTU1NlbGVjdG9yQ29udGFpbmVyIiwiY29sTnVtIiwic2V0T3B0cyIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJvcmRlckRpcmVjdGl2ZSIsImxhbmd1YWdlIiwidXJsIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsInJlbmRlciIsInR5cGUiLCJmaWxlVXJsIiwiYnV0dG9ucyIsImRhdGF0YWJsZUFkZFJvd0F0dGFjaG1lbnRCdXR0b24iLCJkcmF3Q2FsbGJhY2siLCJzZXR0aW5ncyIsImRhdGF0YWJsZUFkZFJvd0FjdGlvbiIsIk1vZHVsZUJhc2UiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL21vZHVsZUpzL3ByaWNlTGlzdC5qcz8yYzNmIl0sInNvdXJjZXNDb250ZW50IjpbImlmKHR5cGVvZiB3aW5kb3cuUHJpY2VMaXN0TW9kdWxlID09PVwidW5kZWZpbmVkXCIpIHtcclxuICAgIGNsYXNzIFByaWNlTGlzdE1vZHVsZSBleHRlbmRzIE1vZHVsZUJhc2V7XHJcblxyXG4gICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkF0dGFjaG1lbnQocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgICAgIGRlYnVnKCdjYWxsIGRhdGF0YWJsZVJvd0FjdGlvbkF0dGFjaG1lbnQnKTtcclxuICAgICAgICAgICAgc3VwZXIuZGF0YXRhYmxlUm93QWN0aW9uQXR0YWNobWVudChyb3dEYXRhLG5vZGUse2RlZmF1bHRGaWxlTmFtZTpcImFybGlzdGEueGxzXCJ9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uVmlldyhyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICAgICAgZGVidWcoJ2NhbGwgZGF0YXRhYmxlUm93QWN0aW9uVmlldycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2soZXZlbnQpIHtcclxuICAgICAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgICAgIGxldCByb290T2JqPUFQUC5QcmljZUxpc3RNb2R1bGU7XHJcbiAgICAgICAgICAgIGxldCBub2RlID0gJChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICAgICAgbGV0IHJvdyA9ICQocm9vdE9iai5PcHRzLmRhdGFUYWJsZS5DU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KG5vZGUucGFyZW50cygndHInKSk7XHJcbiAgICAgICAgICAgIGxldCByb3dEYXRhID0gcm93LmRhdGEoKTtcclxuICAgICAgICAgICAgbGV0IGFjdGlvbk5hbWUgPSAnZGF0YXRhYmxlUm93QWN0aW9uJyArIG5vZGUuZGF0YSgnYnV0dG9udHlwZScpLmNhcGl0YWxpemUoKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByb290T2JqW2FjdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByb290T2JqW2FjdGlvbk5hbWVdKHJvd0RhdGEsIG5vZGUpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaW5pdFZpZXdMaXN0KG9wdGlvbnM9e30pIHtcclxuICAgICAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XHJcbiAgICAgICAgICAgIGxldCBkYXRhVGFibGVDU1NTZWxlY3Rvcj10aGlzLk9wdHMuQ1NTU2VsZWN0b3JDb250YWluZXIrJyAuZGF0YVRhYmxlJzsgLy9cclxuICAgICAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxyXG4gICAgICAgICAgICBBUFAuc2V0T3B0cyh7XHJcbiAgICAgICAgICAgICAgICAvL2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6dGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcclxuICAgICAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6dGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPXRoaXMuT3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XHJcblxyXG4gICAgICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2xldCBhamF4VXJsPXRoaXMuT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudDtcclxuICAgICAgICAgICAgJChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJy8vY2RuLmRhdGF0YWJsZXMubmV0L3BsdWctaW5zLzEuMTAuMjQvaTE4bi9IdW5nYXJpYW4uanNvbidcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxyXG4gICAgICAgICAgICAgICAgXCJhamF4XCI6IHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6dGhpcy5PcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6ZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zZWFyY2hTdHI9ZGF0YVRhYmxlU2VhcmNoU3RyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmdyb3VwSWQ9c2VsZWN0ZWRQcm9kdWN0R3JvdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3VwcGxpZXJJZD1PcmRlci5zdXBwbGllcklkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmRlbGl2ZXJ5RGF0ZT1PcmRlci5kZWxpdmVyeURhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocm93LmZpbGVVcmwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dBdHRhY2htZW50QnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgLyoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c9bnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSwqL1xyXG4gICAgICAgICAgICAgICAgICAgIC8veyBcInZpc2libGVcIjogZmFsc2UsICBcInRhcmdldHNcIjogWyAwIF0gfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6e1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgLyogICAgICAnZXhjZWwnLCdwZGYnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQ6ICdwcmludCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlVG9wJzogJ01lc3NhZ2UgT24gVG9wJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAqLyAgICAgIC8qKi9cclxuICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcInN1cHBsaWVyTmFtZVwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJhdmFpbGFibGVcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiY3JlYXRlZF9hdFwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJub3RlXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgICAgICAvL1wic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3M9bnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSApO1xyXG4gICAgICAgICAgICBkZWJ1ZygnbGlzdHZpZXcgZW5kJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcbiAgICB3aW5kb3cuUHJpY2VMaXN0TW9kdWxlPVByaWNlTGlzdE1vZHVsZTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBRyxPQUFPQSxNQUFNLENBQUNDLGVBQWUsS0FBSSxXQUFXLEVBQUU7RUFBQSxJQUN2Q0EsZUFBZSwwQkFBQUMsV0FBQTtJQUFBLFNBQUFELGdCQUFBO01BQUFFLGVBQUEsT0FBQUYsZUFBQTtNQUFBLE9BQUFHLFVBQUEsT0FBQUgsZUFBQSxFQUFBSSxTQUFBO0lBQUE7SUFBQUMsU0FBQSxDQUFBTCxlQUFBLEVBQUFDLFdBQUE7SUFBQSxPQUFBSyxZQUFBLENBQUFOLGVBQUE7TUFBQU8sR0FBQTtNQUFBQyxLQUFBLEVBRWpCLFNBQUFDLDRCQUE0QkEsQ0FBQ0MsT0FBTyxFQUFDQyxJQUFJLEVBQUU7UUFDdkNDLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQztRQUMxQ0MsYUFBQSxDQUFBYixlQUFBLDRDQUFtQ1UsT0FBTyxFQUFDQyxJQUFJLEVBQUM7VUFBQ0csZUFBZSxFQUFDO1FBQWEsQ0FBQztNQUNuRjtJQUFDO01BQUFQLEdBQUE7TUFBQUMsS0FBQSxFQUNELFNBQUFPLHNCQUFzQkEsQ0FBQ0wsT0FBTyxFQUFDQyxJQUFJLEVBQUU7UUFDakNDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQztNQUN4QztJQUFDO01BQUFMLEdBQUE7TUFBQUMsS0FBQSxFQUVELFNBQUFRLDZCQUE2QkEsQ0FBQ0MsS0FBSyxFQUFFO1FBQ2pDTCxLQUFLLENBQUMsK0JBQStCLENBQUM7UUFDdEMsSUFBSU0sT0FBTyxHQUFDQyxHQUFHLENBQUNuQixlQUFlO1FBQy9CLElBQUlXLElBQUksR0FBR1MsQ0FBQyxDQUFDSCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNJLGFBQWEsQ0FBQztRQUNwQyxJQUFJQyxHQUFHLEdBQUdGLENBQUMsQ0FBQ0YsT0FBTyxDQUFDSyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0MsV0FBVyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUNKLEdBQUcsQ0FBQ1gsSUFBSSxDQUFDZ0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25GLElBQUlqQixPQUFPLEdBQUdZLEdBQUcsQ0FBQ00sSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSUMsVUFBVSxHQUFHLG9CQUFvQixHQUFHbEIsSUFBSSxDQUFDaUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDRSxVQUFVLENBQUMsQ0FBQztRQUM1RSxJQUFJLE9BQU9aLE9BQU8sQ0FBQ1csVUFBVSxDQUFDLEtBQUssVUFBVSxFQUFFO1VBQzNDLE9BQU9YLE9BQU8sQ0FBQ1csVUFBVSxDQUFDLENBQUNuQixPQUFPLEVBQUVDLElBQUksQ0FBQztRQUM3QztNQUNKO0lBQUM7TUFBQUosR0FBQTtNQUFBQyxLQUFBLEVBQ0QsU0FBQXVCLFlBQVlBLENBQUEsRUFBYTtRQUFBLElBQVpDLE9BQU8sR0FBQTVCLFNBQUEsQ0FBQTZCLE1BQUEsUUFBQTdCLFNBQUEsUUFBQThCLFNBQUEsR0FBQTlCLFNBQUEsTUFBQyxDQUFDLENBQUM7UUFDbkJRLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQztRQUNoQyxJQUFJdUIsb0JBQW9CLEdBQUMsSUFBSSxDQUFDWixJQUFJLENBQUNhLG9CQUFvQixHQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZFLElBQUlDLE1BQU0sR0FBQ2pCLENBQUMsQ0FBQ2Usb0JBQW9CLEdBQUMsV0FBVyxDQUFDLENBQUNGLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZEZCxHQUFHLENBQUNtQixPQUFPLENBQUM7VUFDUjtVQUNBQyxxQ0FBcUMsRUFBQyxJQUFJLENBQUN2QjtRQUMvQyxDQUFDLENBQUM7UUFDRixJQUFJd0IsY0FBYyxHQUFDLElBQUksQ0FBQ2pCLElBQUksQ0FBQ0MsU0FBUyxDQUFDZ0IsY0FBYztRQUVyRCxJQUFHLE9BQU9SLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFFLFdBQVcsRUFBQztVQUM3Q1EsY0FBYyxHQUFDUixPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDNUM7UUFDQTtRQUNBWixDQUFDLENBQUNlLG9CQUFvQixDQUFDLENBQUNULFNBQVMsQ0FBRTtVQUMvQmUsUUFBUSxFQUFFO1lBQ05DLEdBQUcsRUFBRTtVQUNULENBQUM7VUFFRDtVQUNBLE1BQU0sRUFBRTtZQUNKQSxHQUFHLEVBQUMsSUFBSSxDQUFDbkIsSUFBSSxDQUFDb0IsR0FBRyxDQUFDQyxtQkFBbUI7WUFDckNoQixJQUFJLEVBQUMsU0FBTEEsSUFBSUEsQ0FBV0EsS0FBSSxFQUFFO2NBQ2pCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7WUFMd0I7VUFPUixDQUFDO1VBQ0QsWUFBWSxFQUFFLENBQ1Y7WUFDSSxTQUFTLEVBQUVTLE1BQU0sR0FBQyxDQUFDO1lBQ25CLFFBQVEsRUFBRSxTQUFWUSxNQUFRQSxDQUFhakIsSUFBSSxFQUFFa0IsSUFBSSxFQUFFeEIsR0FBRyxFQUFHO2NBQ25DLElBQUdBLEdBQUcsQ0FBQ3lCLE9BQU8sRUFBQztnQkFDWCxJQUFJQyxPQUFPLEdBQUM3QixHQUFHLENBQUM4QiwrQkFBK0IsQ0FBQyxDQUFDLEVBQUM3QyxTQUFTLENBQUM7Z0JBQzVELE9BQU80QyxPQUFPO2NBQ2xCLENBQUMsTUFBSTtnQkFDRCxPQUFPLEVBQUU7Y0FDYjtZQUNKO1VBQ0o7VUFDRDtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7VUFDb0I7VUFBQSxDQUNIO1VBQ0RBLE9BQU8sRUFBQztZQUNKQSxPQUFPLEVBQUU7Y0FDWDtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQVJrQixDQVFRO1lBQUE7VUFFVixDQUFDO1VBQ0QsU0FBUyxFQUFFLENBQ1A7WUFBRSxNQUFNLEVBQUU7VUFBSyxDQUFDLEVBQ2hCO1lBQUUsTUFBTSxFQUFFO1VBQWUsQ0FBQyxFQUMxQjtZQUFFLE1BQU0sRUFBRTtVQUFZLENBQUMsRUFDdkI7WUFBRSxNQUFNLEVBQUU7VUFBYSxDQUFDLEVBQ3hCO1lBQUUsTUFBTSxFQUFFO1VBQU8sQ0FBQyxFQUNsQixJQUFJLENBQ1A7VUFDRCxPQUFPLEVBQUVSLGNBQWM7VUFDdkI7VUFDQSxjQUFjLEVBQUUsU0FBaEJVLFlBQWNBLENBQVlDLFFBQVEsRUFBRztZQUNqQ0EsUUFBUSxHQUFDLElBQUk7WUFDYmhDLEdBQUcsQ0FBQ2lDLHFCQUFxQixDQUFDakIsb0JBQW9CLENBQUM7VUFDbkQ7UUFDSixDQUFFLENBQUM7UUFDSHZCLEtBQUssQ0FBQyxjQUFjLENBQUM7TUFDekI7SUFBQztFQUFBLEVBdEd5QnlDLFVBQVU7RUF3R3ZDO0VBQ0R0RCxNQUFNLENBQUNDLGVBQWUsR0FBQ0EsZUFBZTtBQUMxQztBQUFDIiwiaWdub3JlTGlzdCI6W10sImZpbGUiOiIuL3Jlc291cmNlcy9qcy9tb2R1bGVKcy9wcmljZUxpc3QuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/moduleJs/priceList.js\n\n}");
|
||
|
||
/***/ },
|
||
|
||
/***/ "./resources/js/moduleJs/supplier.js"
|
||
/*!*******************************************!*\
|
||
!*** ./resources/js/moduleJs/supplier.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 _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), 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 _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\nfunction _get() { return _get = \"undefined\" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); }\nfunction _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof window.SupplierModule === \"undefined\") {\n var SupplierModule = /*#__PURE__*/function (_ModuleBase) {\n function SupplierModule() {\n _classCallCheck(this, SupplierModule);\n return _callSuper(this, SupplierModule, arguments);\n }\n _inherits(SupplierModule, _ModuleBase);\n return _createClass(SupplierModule, [{\n key: \"datatableRowActionAttachment\",\n value: function datatableRowActionAttachment(rowData, node) {\n debug('call datatableRowActionAttachment');\n _superPropGet(SupplierModule, \"datatableRowActionAttachment\", this, 3)([rowData, node, {\n defaultFileName: \"arlista.xls\"\n }]);\n }\n }, {\n key: \"datatableRowActionView\",\n value: function datatableRowActionView(rowData, node) {\n debug('call datatableRowActionView');\n _superPropGet(SupplierModule, \"datatableRowActionView\", this, 3)([rowData, node, APP.SupplierModule]);\n }\n }, {\n key: \"datatableRowActionButtonClick\",\n value: function datatableRowActionButtonClick(event) {\n debug('datatableRowActionButtonClick');\n var rootObj = APP.SupplierModule;\n var node = $(event[0].currentTarget);\n var row = $(rootObj.Opts.dataTable.CSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof rootObj[actionName] === \"function\") {\n return rootObj[actionName](rowData, node);\n }\n }\n }, {\n key: \"initViewShow\",\n value: function initViewShow() {\n $('.productCategorySelect').select2({\n disabled: true\n });\n $('.serviceSelect').select2({\n disabled: true\n });\n APP.SupplierModule.renderContact();\n }\n }, {\n key: \"initViewList\",\n value: function initViewList() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n var dataTableCSSSelector = this.Opts.CSSSelectorContainer + ' .dataTable'; //\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n //datatableRowActionButtonClickCallBack:this.datatableRowActionButtonClick,\n datatableRowActionButtonClickCallBack: this.datatableRowActionButtonClick\n });\n var orderDirective = this.Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n //let ajaxUrl=this.Opts.URL.getDataTableContent;\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n \"ajax\": {\n url: this.Opts.URL.getDataTableContent,\n data: function data(_data) {}\n },\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowViewButton(0, arguments);\n return buttons;\n }\n }],\n buttons: {\n buttons: []\n },\n \"columns\": [{\n \"data\": \"name\"\n }, {\n \"data\": \"product_group\"\n }, {\n \"data\": \"service\"\n }, {\n \"data\": \"canSeeInOrder\",\n \"render\": function render(data) {\n return data == 1 ? \"<i class=\\\"fas fa-check text-success\\\"></i>\" : \"<i class=\\\"fas fa-times text-danger\\\"></i>\";\n }\n }, null],\n \"order\": orderDirective,\n //\"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\n }\n }, {\n key: \"renderContact\",\n value: function renderContact() {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(APP.Supplier.getData('contact'), function () {\n var contactData = this;\n contactData.rowNum = rowNum;\n //console.log(contactData);\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n rowNum++;\n });\n }\n }]);\n }(ModuleBase);\n ;\n window.SupplierModule = SupplierModule;\n}\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvbW9kdWxlSnMvc3VwcGxpZXIuanMiLCJuYW1lcyI6WyJ3aW5kb3ciLCJTdXBwbGllck1vZHVsZSIsIl9Nb2R1bGVCYXNlIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImFyZ3VtZW50cyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwiZGF0YXRhYmxlUm93QWN0aW9uQXR0YWNobWVudCIsInJvd0RhdGEiLCJub2RlIiwiZGVidWciLCJfc3VwZXJQcm9wR2V0IiwiZGVmYXVsdEZpbGVOYW1lIiwiZGF0YXRhYmxlUm93QWN0aW9uVmlldyIsIkFQUCIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJyb290T2JqIiwiJCIsImN1cnJlbnRUYXJnZXQiLCJyb3ciLCJPcHRzIiwiZGF0YVRhYmxlIiwiQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJwYXJlbnRzIiwiZGF0YSIsImFjdGlvbk5hbWUiLCJjYXBpdGFsaXplIiwiaW5pdFZpZXdTaG93Iiwic2VsZWN0MiIsImRpc2FibGVkIiwicmVuZGVyQ29udGFjdCIsImluaXRWaWV3TGlzdCIsIm9wdGlvbnMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJkYXRhVGFibGVDU1NTZWxlY3RvciIsIkNTU1NlbGVjdG9yQ29udGFpbmVyIiwiY29sTnVtIiwic2V0T3B0cyIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJvcmRlckRpcmVjdGl2ZSIsImxhbmd1YWdlIiwidXJsIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsInJlbmRlciIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93Vmlld0J1dHRvbiIsImRyYXdDYWxsYmFjayIsInNldHRpbmdzIiwiZGF0YXRhYmxlQWRkUm93QWN0aW9uIiwicm93TnVtIiwiY29uc29sZSIsImxvZyIsImVhY2giLCJTdXBwbGllciIsImdldERhdGEiLCJjb250YWN0RGF0YSIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYXBwZW5kIiwiTW9kdWxlQmFzZSJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL21vZHVsZUpzL3N1cHBsaWVyLmpzP2ZmNjQiXSwic291cmNlc0NvbnRlbnQiOlsiaWYodHlwZW9mIHdpbmRvdy5TdXBwbGllck1vZHVsZSA9PT1cInVuZGVmaW5lZFwiKSB7XHJcbiAgICBjbGFzcyBTdXBwbGllck1vZHVsZSBleHRlbmRzIE1vZHVsZUJhc2V7XHJcblxyXG4gICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkF0dGFjaG1lbnQocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgICAgIGRlYnVnKCdjYWxsIGRhdGF0YWJsZVJvd0FjdGlvbkF0dGFjaG1lbnQnKTtcclxuICAgICAgICAgICAgc3VwZXIuZGF0YXRhYmxlUm93QWN0aW9uQXR0YWNobWVudChyb3dEYXRhLG5vZGUse2RlZmF1bHRGaWxlTmFtZTpcImFybGlzdGEueGxzXCJ9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uVmlldyhyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICAgICAgZGVidWcoJ2NhbGwgZGF0YXRhYmxlUm93QWN0aW9uVmlldycpO1xyXG4gICAgICAgICAgICBzdXBlci5kYXRhdGFibGVSb3dBY3Rpb25WaWV3KHJvd0RhdGEsbm9kZSxBUFAuU3VwcGxpZXJNb2R1bGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2soZXZlbnQpIHtcclxuICAgICAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgICAgIGxldCByb290T2JqPUFQUC5TdXBwbGllck1vZHVsZTtcclxuICAgICAgICAgICAgbGV0IG5vZGUgPSAkKGV2ZW50WzBdLmN1cnJlbnRUYXJnZXQpO1xyXG4gICAgICAgICAgICBsZXQgcm93ID0gJChyb290T2JqLk9wdHMuZGF0YVRhYmxlLkNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcclxuICAgICAgICAgICAgbGV0IHJvd0RhdGEgPSByb3cuZGF0YSgpO1xyXG4gICAgICAgICAgICBsZXQgYWN0aW9uTmFtZSA9ICdkYXRhdGFibGVSb3dBY3Rpb24nICsgbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJvb3RPYmpbYWN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RPYmpbYWN0aW9uTmFtZV0ocm93RGF0YSwgbm9kZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpbml0Vmlld1Nob3coKXtcclxuICAgICAgICAgICAgJCgnLnByb2R1Y3RDYXRlZ29yeVNlbGVjdCcpLnNlbGVjdDIoXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgJCgnLnNlcnZpY2VTZWxlY3QnKS5zZWxlY3QyKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOnRydWUsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBBUFAuU3VwcGxpZXJNb2R1bGUucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbml0Vmlld0xpc3Qob3B0aW9ucz17fSkge1xyXG4gICAgICAgICAgICBkZWJ1ZygnbGlzdHZpZXcgaW5pY2lhbGl6YXRpb24nKTtcclxuICAgICAgICAgICAgbGV0IGRhdGFUYWJsZUNTU1NlbGVjdG9yPXRoaXMuT3B0cy5DU1NTZWxlY3RvckNvbnRhaW5lcisnIC5kYXRhVGFibGUnOyAvL1xyXG4gICAgICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgICAgIEFQUC5zZXRPcHRzKHtcclxuICAgICAgICAgICAgICAgIC8vZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazp0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrLFxyXG4gICAgICAgICAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazp0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9dGhpcy5PcHRzLmRhdGFUYWJsZS5vcmRlckRpcmVjdGl2ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgICAgICBvcmRlckRpcmVjdGl2ZT1vcHRpb25zWydvcmRlckRpcmVjdGl2ZSddO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vbGV0IGFqYXhVcmw9dGhpcy5PcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50O1xyXG4gICAgICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFwiYWpheFwiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOnRoaXMuT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOmZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbnM9QVBQLmRhdGF0YWJsZUFkZFJvd1ZpZXdCdXR0b24oMCxhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBidXR0b25zOntcclxuICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcInByb2R1Y3RfZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwic2VydmljZVwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjYW5TZWVJbk9yZGVyXCIsIFwicmVuZGVyXCI6IGZ1bmN0aW9uKGRhdGEpIHsgcmV0dXJuIGRhdGEgPT0gMSA/IFwiPGkgY2xhc3M9XFxcImZhcyBmYS1jaGVjayB0ZXh0LXN1Y2Nlc3NcXFwiPjwvaT5cIiA6IFwiPGkgY2xhc3M9XFxcImZhcyBmYS10aW1lcyB0ZXh0LWRhbmdlclxcXCI+PC9pPlwiOyB9IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBcIm9yZGVyXCI6IG9yZGVyRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgLy9cInN0YXRlU2F2ZVwiOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG4gICAgICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ICk7XHJcbiAgICAgICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyQ29udGFjdCgpe1xyXG4gICAgICAgICAgICBsZXQgcm93TnVtPTE7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdDb250YWN0cycpO1xyXG4gICAgICAgICAgICAkLmVhY2goQVBQLlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgICAgIGxldCBjb250YWN0RGF0YT10aGlzO1xyXG4gICAgICAgICAgICAgICAgY29udGFjdERhdGEucm93TnVtPXJvd051bTtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcbiAgICB3aW5kb3cuU3VwcGxpZXJNb2R1bGU9U3VwcGxpZXJNb2R1bGU7XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUcsT0FBT0EsTUFBTSxDQUFDQyxjQUFjLEtBQUksV0FBVyxFQUFFO0VBQUEsSUFDdENBLGNBQWMsMEJBQUFDLFdBQUE7SUFBQSxTQUFBRCxlQUFBO01BQUFFLGVBQUEsT0FBQUYsY0FBQTtNQUFBLE9BQUFHLFVBQUEsT0FBQUgsY0FBQSxFQUFBSSxTQUFBO0lBQUE7SUFBQUMsU0FBQSxDQUFBTCxjQUFBLEVBQUFDLFdBQUE7SUFBQSxPQUFBSyxZQUFBLENBQUFOLGNBQUE7TUFBQU8sR0FBQTtNQUFBQyxLQUFBLEVBRWhCLFNBQUFDLDRCQUE0QkEsQ0FBQ0MsT0FBTyxFQUFDQyxJQUFJLEVBQUU7UUFDdkNDLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQztRQUMxQ0MsYUFBQSxDQUFBYixjQUFBLDRDQUFtQ1UsT0FBTyxFQUFDQyxJQUFJLEVBQUM7VUFBQ0csZUFBZSxFQUFDO1FBQWEsQ0FBQztNQUNuRjtJQUFDO01BQUFQLEdBQUE7TUFBQUMsS0FBQSxFQUNELFNBQUFPLHNCQUFzQkEsQ0FBQ0wsT0FBTyxFQUFDQyxJQUFJLEVBQUU7UUFDakNDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQztRQUNwQ0MsYUFBQSxDQUFBYixjQUFBLHNDQUE2QlUsT0FBTyxFQUFDQyxJQUFJLEVBQUNLLEdBQUcsQ0FBQ2hCLGNBQWM7TUFDaEU7SUFBQztNQUFBTyxHQUFBO01B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\n//# sourceURL=webpack-internal:///./resources/js/moduleJs/supplier.js\n\n}");
|
||
|
||
/***/ }
|
||
|
||
/******/ });
|
||
/************************************************************************/
|
||
/******/
|
||
/******/ // startup
|
||
/******/ // Load entry module and return exports
|
||
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
|
||
/******/ __webpack_modules__["./resources/js/moduleJs/moduleBase.js"]();
|
||
/******/ __webpack_modules__["./resources/js/moduleJs/order.js"]();
|
||
/******/ __webpack_modules__["./resources/js/moduleJs/orderArchive.js"]();
|
||
/******/ __webpack_modules__["./resources/js/moduleJs/priceList.js"]();
|
||
/******/ var __webpack_exports__ = {};
|
||
/******/ __webpack_modules__["./resources/js/moduleJs/supplier.js"]();
|
||
/******/
|
||
/******/ })()
|
||
; |