sdc_client 0.56.4 → 0.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@
14
14
  \**********************/
15
15
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
16
16
 
17
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* reexport safe */ _simpleDomControl_AbstractSDC_js__WEBPACK_IMPORTED_MODULE_1__.AbstractSDC),\n/* harmony export */ allOff: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.allOff),\n/* harmony export */ app: () => (/* reexport safe */ _simpleDomControl_sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app),\n/* harmony export */ checkIfParamNumberBoolOrString: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.clearErrorsInForm),\n/* harmony export */ controllerFactory: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__.controllerFactory),\n/* harmony export */ on: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.on),\n/* harmony export */ runControlFlowFunctions: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__.runControlFlowFunctions),\n/* harmony export */ setErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.setErrorsInForm),\n/* harmony export */ setEvent: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.setEvent),\n/* harmony export */ socketReconnect: () => (/* binding */ socketReconnect),\n/* harmony export */ test_utils: () => (/* binding */ test_utils),\n/* harmony export */ trigger: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.trigger)\n/* harmony export */ });\n/* harmony import */ var _simpleDomControl_sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./simpleDomControl/sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _simpleDomControl_AbstractSDC_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./simpleDomControl/AbstractSDC.js */ \"./src/simpleDomControl/AbstractSDC.js\");\n/* harmony import */ var _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./simpleDomControl/sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./simpleDomControl/sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./simpleDomControl/sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _simpleDomControl_sdc_socket_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./simpleDomControl/sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./simpleDomControl/sdc_test_utils.js */ \"./src/simpleDomControl/sdc_test_utils.js\");\n\n\n\n\n\n\n\nconst socketReconnect = _simpleDomControl_sdc_socket_js__WEBPACK_IMPORTED_MODULE_5__.close;\nconst test_utils = {\n get_controller: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.get_controller\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBbUQ7QUFDVztBQUNpQjtBQUNvQztBQUNuQjtBQUMxQztBQUNhO0FBRW5FLE1BQU1hLGVBQWUsR0FBR0Ysa0VBQUs7QUFDN0IsTUFBTUcsVUFBVSxHQUFHO0VBQUNGLGNBQWNBLGlGQUFBQTtBQUFBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL2luZGV4LmpzP2I2MzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthcHB9IGZyb20gJy4vc2ltcGxlRG9tQ29udHJvbC9zZGNfbWFpbi5qcyc7XG5pbXBvcnQge0Fic3RyYWN0U0RDfSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvQWJzdHJhY3RTREMuanMnO1xuaW1wb3J0IHtvbiwgdHJpZ2dlciwgYWxsT2ZmLCBzZXRFdmVudH0gZnJvbSAnLi9zaW1wbGVEb21Db250cm9sL3NkY19ldmVudHMuanMnO1xuaW1wb3J0IHtjbGVhckVycm9yc0luRm9ybSwgc2V0RXJyb3JzSW5Gb3JtLCBjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmd9IGZyb20gJy4vc2ltcGxlRG9tQ29udHJvbC9zZGNfdXRpbHMuanMnO1xuaW1wb3J0IHtjb250cm9sbGVyRmFjdG9yeSwgcnVuQ29udHJvbEZsb3dGdW5jdGlvbnN9IGZyb20gJy4vc2ltcGxlRG9tQ29udHJvbC9zZGNfY29udHJvbGxlci5qcyc7XG5pbXBvcnQge2Nsb3NlfSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvc2RjX3NvY2tldC5qcydcbmltcG9ydCB7Z2V0X2NvbnRyb2xsZXJ9IGZyb20gJy4vc2ltcGxlRG9tQ29udHJvbC9zZGNfdGVzdF91dGlscy5qcydcblxuY29uc3Qgc29ja2V0UmVjb25uZWN0ID0gY2xvc2VcbmNvbnN0IHRlc3RfdXRpbHMgPSB7Z2V0X2NvbnRyb2xsZXJ9O1xuXG5leHBvcnQge1xuICAgIGFwcCwgQWJzdHJhY3RTREMsIG9uLCB0cmlnZ2VyLCBhbGxPZmYsIHNldEV2ZW50LCBjbGVhckVycm9yc0luRm9ybSwgc2V0RXJyb3JzSW5Gb3JtLCBjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmcsXG4gICAgY29udHJvbGxlckZhY3RvcnksIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zLCBzb2NrZXRSZWNvbm5lY3QsIHRlc3RfdXRpbHNcbn1cbiJdLCJuYW1lcyI6WyJhcHAiLCJBYnN0cmFjdFNEQyIsIm9uIiwidHJpZ2dlciIsImFsbE9mZiIsInNldEV2ZW50IiwiY2xlYXJFcnJvcnNJbkZvcm0iLCJzZXRFcnJvcnNJbkZvcm0iLCJjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmciLCJjb250cm9sbGVyRmFjdG9yeSIsInJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zIiwiY2xvc2UiLCJnZXRfY29udHJvbGxlciIsInNvY2tldFJlY29ubmVjdCIsInRlc3RfdXRpbHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/index.js\n");
17
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* reexport safe */ _simpleDomControl_AbstractSDC_js__WEBPACK_IMPORTED_MODULE_1__.AbstractSDC),\n/* harmony export */ allOff: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.allOff),\n/* harmony export */ app: () => (/* reexport safe */ _simpleDomControl_sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app),\n/* harmony export */ checkIfParamNumberBoolOrString: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.clearErrorsInForm),\n/* harmony export */ controllerFactory: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__.controllerFactory),\n/* harmony export */ on: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.on),\n/* harmony export */ runControlFlowFunctions: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__.runControlFlowFunctions),\n/* harmony export */ setErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.setErrorsInForm),\n/* harmony export */ setEvent: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.setEvent),\n/* harmony export */ socketReconnect: () => (/* binding */ socketReconnect),\n/* harmony export */ test_utils: () => (/* binding */ test_utils),\n/* harmony export */ trigger: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.trigger)\n/* harmony export */ });\n/* harmony import */ var _simpleDomControl_sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./simpleDomControl/sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _simpleDomControl_AbstractSDC_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./simpleDomControl/AbstractSDC.js */ \"./src/simpleDomControl/AbstractSDC.js\");\n/* harmony import */ var _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./simpleDomControl/sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./simpleDomControl/sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./simpleDomControl/sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./simpleDomControl/sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n/* harmony import */ var _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./simpleDomControl/sdc_test_utils.js */ \"./src/simpleDomControl/sdc_test_utils.js\");\n\n\n\n\n\n\n\nconst socketReconnect = _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_5__.close;\nconst test_utils = {\n get_controller: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.get_controller,\n getCsrfToken: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.getCsrfToken\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBbUQ7QUFDVztBQUNpQjtBQUNvQztBQUNuQjtBQUNyQztBQUNzQjtBQUVqRixNQUFNYyxlQUFlLEdBQUdILHVFQUFLO0FBQzdCLE1BQU1JLFVBQVUsR0FBRztFQUFDSCxjQUFjO0VBQUVDLFlBQVlBLCtFQUFBQTtBQUFBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL2luZGV4LmpzP2I2MzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthcHB9IGZyb20gJy4vc2ltcGxlRG9tQ29udHJvbC9zZGNfbWFpbi5qcyc7XG5pbXBvcnQge0Fic3RyYWN0U0RDfSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvQWJzdHJhY3RTREMuanMnO1xuaW1wb3J0IHtvbiwgdHJpZ2dlciwgYWxsT2ZmLCBzZXRFdmVudH0gZnJvbSAnLi9zaW1wbGVEb21Db250cm9sL3NkY19ldmVudHMuanMnO1xuaW1wb3J0IHtjbGVhckVycm9yc0luRm9ybSwgc2V0RXJyb3JzSW5Gb3JtLCBjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmd9IGZyb20gJy4vc2ltcGxlRG9tQ29udHJvbC9zZGNfdXRpbHMuanMnO1xuaW1wb3J0IHtjb250cm9sbGVyRmFjdG9yeSwgcnVuQ29udHJvbEZsb3dGdW5jdGlvbnN9IGZyb20gJy4vc2ltcGxlRG9tQ29udHJvbC9zZGNfY29udHJvbGxlci5qcyc7XG5pbXBvcnQge2Nsb3NlfSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvc2RjX3NlcnZlcl9jYWxsLmpzJ1xuaW1wb3J0IHtnZXRfY29udHJvbGxlciwgZ2V0Q3NyZlRva2VufSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvc2RjX3Rlc3RfdXRpbHMuanMnXG5cbmNvbnN0IHNvY2tldFJlY29ubmVjdCA9IGNsb3NlXG5jb25zdCB0ZXN0X3V0aWxzID0ge2dldF9jb250cm9sbGVyLCBnZXRDc3JmVG9rZW59O1xuXG5leHBvcnQge1xuICAgIGFwcCwgQWJzdHJhY3RTREMsIG9uLCB0cmlnZ2VyLCBhbGxPZmYsIHNldEV2ZW50LCBjbGVhckVycm9yc0luRm9ybSwgc2V0RXJyb3JzSW5Gb3JtLCBjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmcsXG4gICAgY29udHJvbGxlckZhY3RvcnksIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zLCBzb2NrZXRSZWNvbm5lY3QsIHRlc3RfdXRpbHNcbn1cbiJdLCJuYW1lcyI6WyJhcHAiLCJBYnN0cmFjdFNEQyIsIm9uIiwidHJpZ2dlciIsImFsbE9mZiIsInNldEV2ZW50IiwiY2xlYXJFcnJvcnNJbkZvcm0iLCJzZXRFcnJvcnNJbkZvcm0iLCJjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmciLCJjb250cm9sbGVyRmFjdG9yeSIsInJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zIiwiY2xvc2UiLCJnZXRfY29udHJvbGxlciIsImdldENzcmZUb2tlbiIsInNvY2tldFJlY29ubmVjdCIsInRlc3RfdXRpbHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/index.js\n");
18
18
 
19
19
  /***/ }),
20
20
 
@@ -24,7 +24,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
24
24
  \*********************************************/
25
25
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
26
26
 
27
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* binding */ AbstractSDC)\n/* harmony export */ });\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\n\nclass AbstractSDC {\n constructor() {\n this._uuid = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.uuidv4)();\n this.contentUrl = '';\n this.contentReload = false;\n this.events = [];\n this.load_async = false;\n this._isEventsSet = false;\n this._allEvents = null;\n this._urlParams = [];\n this._models = [];\n\n // ------------------ Old deprecated properties ----------------------\n this._cssUrls = [];\n this.afterShow = () => {\n console.warn('afterShow is deprecated!!');\n };\n // -------------- End old deprecated properties ----------------------\n\n /**\n *\n * @type {{string: AbstractSDC}}\n */\n this._mixins = {};\n\n /**\n * @type {string}\n */\n this._tagName = '';\n\n /**\n * @type {{string:AbstractSDC}}\n */\n this._childController = {};\n\n /**\n * @type {AbstractSDC}\n */\n this._parentController = null;\n\n /**\n * @type {boolean}\n */\n this._onLoadDone = false;\n\n /**\n * @type {jquery}\n */\n this.$container = null;\n\n /**\n *\n * @type {boolean}\n */\n this._isMixin = false;\n }\n\n /**\n *\n * @param {string} method must be in {}\n * @param {Array} args in arguments of\n *\n */\n _runLifecycle(method, args) {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG) {\n console.debug(method, this._tagName);\n }\n let returnPromisses = [];\n if (this._isMixin) {\n return;\n }\n this._isMixin = true;\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (typeof mixin[method] === 'function') {\n returnPromisses.push(mixin[method].apply(this, args));\n }\n }\n return Promise.all(returnPromisses).then(() => {\n this._isMixin = false;\n });\n }\n onInit() {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG) {\n console.DEBUG(Array.apply(null, arguments), this._tagName);\n }\n }\n get parentController() {\n return this._parentController;\n }\n get childController() {\n return this._childController;\n }\n onLoad() {\n return this._runLifecycle('onLoad', arguments);\n }\n willShow() {\n return this._runLifecycle('willShow', arguments);\n }\n onRefresh() {\n return this._runLifecycle('onRefresh', arguments);\n }\n onRemove() {\n this._runLifecycle('onRemove', arguments);\n return true;\n }\n remove() {\n for (const model of this._models) {\n model.close();\n }\n let _childController = this._childController;\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n if (!cc.remove()) {\n return false;\n }\n }\n }\n }\n if (!this.onRemove || this.onRemove()) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_0__.allOff)(this);\n const c_name = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.tagNameToCamelCase)(this._tagName);\n if (this._parentController._childController[c_name]) {\n let arr = this._parentController._childController[c_name];\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] === this) {\n arr.splice(i, 1);\n }\n }\n }\n this.$container.remove();\n delete this;\n return true;\n }\n return false;\n }\n controller_name() {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.tagNameToReadableName)(this._tagName);\n }\n addEvent(event, selector, handler) {\n this.getEvents();\n this._allEvents[event] = this._allEvents[event] || {};\n this._allEvents[event][selector] = handler;\n }\n getEvents() {\n if (this._allEvents) return this._allEvents;\n let allEvents = [];\n allEvents = allEvents.concat(this.events);\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (Array.isArray(mixin.events)) {\n allEvents = allEvents.concat(mixin.events);\n }\n }\n return this._allEvents = _.merge(...allEvents);\n }\n post(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.post(this, url, args);\n }\n get(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.get(this, url, args);\n }\n submitForm(form, url, method) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.submitFormAndUpdateView(this, form, url, method);\n }\n serverCall(methode, args) {\n let re = /sdc_view\\/([^/]+)/i;\n let app = this.contentUrl.match(re);\n if (!app || app.length < 2) {\n console.error('To use the serverCall function the contentUrl must be set: ' + this.name);\n return;\n }\n return (0,_sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.callServer)(app[1], this._tagName, methode, args);\n }\n\n /**\n *\n * @param model_name {string | Number}\n * @param model_query {Object}\n * @constructor\n */\n newModel(model_name, model_query = {}) {\n if (model_name instanceof Number && model_name.hasOwnProperty('load')) {\n return model_name.load(this);\n }\n const model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n this._models.push(model);\n return model;\n }\n\n /**\n *\n * @param model_name {string}\n * @param model_query {Object}\n * @param values {Object}\n * @constructor\n */\n updateModel(model_name, model_query = {}, values) {\n let model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n return model.load().then(() => {\n model.values |= values;\n model.save().then(() => {\n model.close();\n return model.values;\n });\n });\n }\n\n /**\n * Adapter to this.$container.find\n * @param {string} domSelector\n */\n find(domSelector) {\n return this.$container.find(domSelector);\n }\n refresh() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.refresh(this.$container, this);\n }\n reload() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reloadController(this);\n }\n submitModelFormDistributor($form, e) {\n if (typeof this._submitModelForm === 'function') {\n return this._submitModelForm($form, e);\n }\n if (typeof this.submitModelForm === 'function') {\n return this.submitModelForm($form, e);\n }\n return this.defaultSubmitModelForm($form, e);\n }\n iterateAllChildren() {\n let _childController = this._childController;\n let res = [];\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n res.push(cc);\n res.push(...cc.iterateAllChildren());\n }\n }\n }\n return res;\n }\n\n /**\n * Model Form Events\n */\n defaultSubmitModelForm($form, e) {\n let p_list = [];\n if (!this._isMixin) {\n e.stopPropagation();\n e.preventDefault();\n let model = $form.data('model');\n const values = model.syncForm($form);\n for (let instance_value of values) {\n p_list.push(new Promise((resolve, reject) => {\n let prom;\n if (instance_value.pk !== null && instance_value.pk >= 0) {\n prom = model.save(instance_value.pk);\n } else {\n prom = model.create(instance_value);\n }\n prom.then(res => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.clearErrorsInForm)($form);\n this.submit_model_form_success && this.submit_model_form_success(res[0]);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_success && controller.submit_model_form_success(res[0]);\n }\n resolve(res);\n }).catch(data => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.setErrorsInForm)($form, $(data.html));\n this.submit_model_form_error && this.submit_model_form_error(data);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_error && controller.submit_model_form_error(data);\n }\n reject(data);\n });\n }));\n }\n }\n return Promise.all(p_list).then(res => {\n return Object.assign({}, ...res.flat());\n });\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SyxDQUFDO1lBQ3hCLElBQUksQ0FBQ2tCLHlCQUF5QixJQUFJLElBQUksQ0FBQ0EseUJBQXlCLENBQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RSxLQUFJLE1BQU1hLFVBQVUsSUFBSSxJQUFJLENBQUNkLGtCQUFrQixDQUFDLENBQUMsRUFBRTtjQUMvQ2MsVUFBVSxDQUFDRCx5QkFBeUIsSUFBSUMsVUFBVSxDQUFDRCx5QkFBeUIsQ0FBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hGO1lBQ0FPLE9BQU8sQ0FBQ1AsR0FBRyxDQUFDO1VBQ2hCLENBQUMsQ0FBQyxDQUFDYyxLQUFLLENBQUVWLElBQUksSUFBSztZQUNmekcsOERBQWUsQ0FBQytGLEtBQUssRUFBRXFCLENBQUMsQ0FBQ1gsSUFBSSxDQUFDWSxJQUFJLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUNDLHVCQUF1QixJQUFJLElBQUksQ0FBQ0EsdUJBQXVCLENBQUNiLElBQUksQ0FBQztZQUNsRSxLQUFJLE1BQU1TLFVBQVUsSUFBSSxJQUFJLENBQUNkLGtCQUFrQixDQUFDLENBQUMsRUFBRTtjQUMvQ2MsVUFBVSxDQUFDSSx1QkFBdUIsSUFBSUosVUFBVSxDQUFDSSx1QkFBdUIsQ0FBQ2IsSUFBSSxDQUFDO1lBQ2xGO1lBQ0FJLE1BQU0sQ0FBQ0osSUFBSSxDQUFDO1VBQ2hCLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO01BQ1A7SUFDSjtJQUVBLE9BQU9yRSxPQUFPLENBQUNDLEdBQUcsQ0FBQ2lFLE1BQU0sQ0FBQyxDQUFDaEUsSUFBSSxDQUFFK0QsR0FBRyxJQUFLO01BQ3JDLE9BQU9rQixNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHbkIsR0FBRyxDQUFDb0IsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUM7RUFDTjtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL0Fic3RyYWN0U0RDLmpzP2Q3ZjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthbGxPZmZ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcbmltcG9ydCB7YXBwfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuaW1wb3J0IHtjYWxsU2VydmVyLCBNb2RlbH0gZnJvbSBcIi4vc2RjX3NvY2tldC5qc1wiO1xuaW1wb3J0IHt1dWlkdjQsIHNldEVycm9yc0luRm9ybSwgY2xlYXJFcnJvcnNJbkZvcm0sIHRhZ05hbWVUb0NhbWVsQ2FzZSwgdGFnTmFtZVRvUmVhZGFibGVOYW1lfSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0U0RDIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fdXVpZCA9IHV1aWR2NCgpO1xuICAgICAgICB0aGlzLmNvbnRlbnRVcmwgPSAnJztcbiAgICAgICAgdGhpcy5jb250ZW50UmVsb2FkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgICAgIHRoaXMubG9hZF9hc3luYyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hbGxFdmVudHMgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3VybFBhcmFtcyA9IFtdO1xuICAgICAgICB0aGlzLl9tb2RlbHMgPSBbXTtcblxuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gT2xkIGRlcHJlY2F0ZWQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIHRoaXMuX2Nzc1VybHMgPSBbXTtcbiAgICAgICAgdGhpcy5hZnRlclNob3cgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2FmdGVyU2hvdyBpcyBkZXByZWNhdGVkISEnKVxuICAgICAgICB9O1xuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLSBFbmQgb2xkIGRlcHJlY2F0ZWQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge3tzdHJpbmc6IEFic3RyYWN0U0RDfX1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX21peGlucyA9IHt9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fdGFnTmFtZSA9ICcnO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7e3N0cmluZzpBYnN0cmFjdFNEQ319XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0Fic3RyYWN0U0RDfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fcGFyZW50Q29udHJvbGxlciA9IG51bGw7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fb25Mb2FkRG9uZSA9IGZhbHNlO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7anF1ZXJ5fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy4kY29udGFpbmVyID0gbnVsbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIG11c3QgYmUgaW4ge31cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIGluIGFyZ3VtZW50cyBvZlxuICAgICAqXG4gICAgICovXG4gICAgX3J1bkxpZmVjeWNsZShtZXRob2QsIGFyZ3MpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRykge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhtZXRob2QsIHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJldHVyblByb21pc3NlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzTWl4aW4gPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgICAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1peGluW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgICAgICAgICAgIHJldHVyblByb21pc3Nlcy5wdXNoKG1peGluW21ldGhvZF0uYXBwbHkodGhpcywgYXJncykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJldHVyblByb21pc3NlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uSW5pdCgpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRykge1xuICAgICAgICAgICAgY29uc29sZS5ERUJVRyhBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLCB0aGlzLl90YWdOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBwYXJlbnRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50Q29udHJvbGxlcjtcbiAgICB9XG5cbiAgICBnZXQgY2hpbGRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgIH1cblxuICAgIG9uTG9hZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25Mb2FkJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICB3aWxsU2hvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnd2lsbFNob3cnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIG9uUmVmcmVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25SZWZyZXNoJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcnVuTGlmZWN5Y2xlKCdvblJlbW92ZScsIGFyZ3VtZW50cylcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMuX21vZGVscykge1xuICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgX2NoaWxkQ29udHJvbGxlciA9IHRoaXMuX2NoaWxkQ29udHJvbGxlcjtcbiAgICAgICAgZm9yIChsZXQgaSBpbiBfY2hpbGRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBpZiAoX2NoaWxkQ29udHJvbGxlci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNjIG9mIF9jaGlsZENvbnRyb2xsZXJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYy5yZW1vdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm9uUmVtb3ZlIHx8IHRoaXMub25SZW1vdmUoKSkge1xuICAgICAgICAgICAgYWxsT2ZmKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgY19uYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29udHJvbGxlcl9uYW1lKCkge1xuICAgICAgICByZXR1cm4gdGFnTmFtZVRvUmVhZGFibGVOYW1lKHRoaXMuX3RhZ05hbWUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGV2ZW50LCBzZWxlY3RvciwgaGFuZGxlcikge1xuICAgICAgICB0aGlzLmdldEV2ZW50cygpO1xuICAgICAgICB0aGlzLl9hbGxFdmVudHNbZXZlbnRdID0gdGhpcy5fYWxsRXZlbnRzW2V2ZW50XSB8fCB7fTtcbiAgICAgICAgdGhpcy5fYWxsRXZlbnRzW2V2ZW50XVtzZWxlY3Rvcl0gPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FsbEV2ZW50cykgcmV0dXJuIHRoaXMuX2FsbEV2ZW50cztcbiAgICAgICAgbGV0IGFsbEV2ZW50cyA9IFtdO1xuICAgICAgICBhbGxFdmVudHMgPSBhbGxFdmVudHMuY29uY2F0KHRoaXMuZXZlbnRzKTtcbiAgICAgICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gdGhpcy5fbWl4aW5zKSB7XG4gICAgICAgICAgICBsZXQgbWl4aW4gPSB0aGlzLl9taXhpbnNbbWl4aW5LZXldO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWl4aW4uZXZlbnRzKSkge1xuICAgICAgICAgICAgICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQobWl4aW4uZXZlbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICByZXR1cm4gKHRoaXMuX2FsbEV2ZW50cyA9IF8ubWVyZ2UoLi4uYWxsRXZlbnRzKSk7XG4gICAgfVxuXG4gICAgcG9zdCh1cmwsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5wb3N0KHRoaXMsIHVybCwgYXJncyk7XG4gICAgfVxuXG4gICAgZ2V0KHVybCwgYXJncykge1xuICAgICAgICByZXR1cm4gYXBwLmdldCh0aGlzLCB1cmwsIGFyZ3MpO1xuICAgIH1cblxuICAgIHN1Ym1pdEZvcm0oZm9ybSwgdXJsLCBtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5zdWJtaXRGb3JtQW5kVXBkYXRlVmlldyh0aGlzLCBmb3JtLCB1cmwsIG1ldGhvZCk7XG4gICAgfVxuXG4gICAgc2VydmVyQ2FsbChtZXRob2RlLCBhcmdzKSB7XG4gICAgICAgIGxldCByZSA9IC9zZGNfdmlld1xcLyhbXi9dKykvaTtcbiAgICAgICAgbGV0IGFwcCA9IHRoaXMuY29udGVudFVybC5tYXRjaChyZSk7XG4gICAgICAgIGlmICghYXBwIHx8IGFwcC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUbyB1c2UgdGhlIHNlcnZlckNhbGwgZnVuY3Rpb24gdGhlIGNvbnRlbnRVcmwgbXVzdCBiZSBzZXQ6ICcgKyB0aGlzLm5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbGxTZXJ2ZXIoYXBwWzFdLCB0aGlzLl90YWdOYW1lLCBtZXRob2RlLCBhcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtb2RlbF9uYW1lIHtzdHJpbmcgfCBOdW1iZXJ9XG4gICAgICogQHBhcmFtIG1vZGVsX3F1ZXJ5IHtPYmplY3R9XG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgbmV3TW9kZWwobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSkge1xuICAgICAgICBpZihtb2RlbF9uYW1lIGluc3RhbmNlb2YgTnVtYmVyICYmIG1vZGVsX25hbWUuaGFzT3duUHJvcGVydHkoJ2xvYWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVsX25hbWUubG9hZCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IE1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5KTtcbiAgICAgICAgdGhpcy5fbW9kZWxzLnB1c2gobW9kZWwpO1xuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW9kZWxfbmFtZSB7c3RyaW5nfVxuICAgICAqIEBwYXJhbSBtb2RlbF9xdWVyeSB7T2JqZWN0fVxuICAgICAqIEBwYXJhbSB2YWx1ZXMge09iamVjdH1cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICB1cGRhdGVNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSA9IHt9LCB2YWx1ZXMpIHtcbiAgICAgICAgbGV0IG1vZGVsID0gbmV3IE1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5KTtcbiAgICAgICAgcmV0dXJuIG1vZGVsLmxvYWQoKS50aGVuKCgpPT57XG4gICAgICAgICAgICBtb2RlbC52YWx1ZXMgfD0gdmFsdWVzO1xuICAgICAgICAgICAgbW9kZWwuc2F2ZSgpLnRoZW4oKCk9PiB7XG4gICAgICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kZWwudmFsdWVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRhcHRlciB0byB0aGlzLiRjb250YWluZXIuZmluZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkb21TZWxlY3RvclxuICAgICAqL1xuICAgIGZpbmQoZG9tU2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbnRhaW5lci5maW5kKGRvbVNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICByZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gYXBwLnJlZnJlc2godGhpcy4kY29udGFpbmVyLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIHJldHVybiBhcHAucmVsb2FkQ29udHJvbGxlcih0aGlzKTtcbiAgICB9XG5cbiAgICBzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvcigkZm9ybSwgZSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1Ym1pdE1vZGVsRm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0U3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICB9XG5cbiAgICBpdGVyYXRlQWxsQ2hpbGRyZW4oKSB7XG4gICAgICAgIGxldCBfY2hpbGRDb250cm9sbGVyID0gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgICAgICBsZXQgcmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgaW4gX2NoaWxkQ29udHJvbGxlcikge1xuICAgICAgICAgICAgaWYgKF9jaGlsZENvbnRyb2xsZXIuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYyBvZiBfY2hpbGRDb250cm9sbGVyW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGNjKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goLi4uY2MuaXRlcmF0ZUFsbENoaWxkcmVuKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vZGVsIEZvcm0gRXZlbnRzXG4gICAgICovXG4gICAgZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSkge1xuICAgICAgICBsZXQgcF9saXN0ID0gW107XG4gICAgICAgIGlmICghdGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxldCBtb2RlbCA9ICRmb3JtLmRhdGEoJ21vZGVsJyk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBtb2RlbC5zeW5jRm9ybSgkZm9ybSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbnN0YW5jZV92YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwX2xpc3QucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9tO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VfdmFsdWUucGsgIT09IG51bGwgJiYgaW5zdGFuY2VfdmFsdWUucGsgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbSA9IG1vZGVsLnNhdmUoaW5zdGFuY2VfdmFsdWUucGspO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbSA9IG1vZGVsLmNyZWF0ZShpbnN0YW5jZV92YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwcm9tLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJFcnJvcnNJbkZvcm0oJGZvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzICYmIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyhyZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNvbnRyb2xsZXIgb2YgdGhpcy5pdGVyYXRlQWxsQ2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyAmJiBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MocmVzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yc0luRm9ybSgkZm9ybSwgJChkYXRhLmh0bWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IgJiYgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvcihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBjb250cm9sbGVyIG9mIHRoaXMuaXRlcmF0ZUFsbENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yICYmIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwX2xpc3QpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIC4uLnJlcy5mbGF0KCkpO1xuICAgICAgICB9KTtcbiAgICB9XG59Il0sIm5hbWVzIjpbImFsbE9mZiIsImFwcCIsImNhbGxTZXJ2ZXIiLCJNb2RlbCIsInV1aWR2NCIsInNldEVycm9yc0luRm9ybSIsImNsZWFyRXJyb3JzSW5Gb3JtIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwidGFnTmFtZVRvUmVhZGFibGVOYW1lIiwiQWJzdHJhY3RTREMiLCJjb25zdHJ1Y3RvciIsIl91dWlkIiwiY29udGVudFVybCIsImNvbnRlbnRSZWxvYWQiLCJldmVudHMiLCJsb2FkX2FzeW5jIiwiX2lzRXZlbnRzU2V0IiwiX2FsbEV2ZW50cyIsIl91cmxQYXJhbXMiLCJfbW9kZWxzIiwiX2Nzc1VybHMiLCJhZnRlclNob3ciLCJjb25zb2xlIiwid2FybiIsIl9taXhpbnMiLCJfdGFnTmFtZSIsIl9jaGlsZENvbnRyb2xsZXIiLCJfcGFyZW50Q29udHJvbGxlciIsIl9vbkxvYWREb25lIiwiJGNvbnRhaW5lciIsIl9pc01peGluIiwiX3J1bkxpZmVjeWNsZSIsIm1ldGhvZCIsImFyZ3MiLCJERUJVRyIsImRlYnVnIiwicmV0dXJuUHJvbWlzc2VzIiwibWl4aW5LZXkiLCJtaXhpbiIsInB1c2giLCJhcHBseSIsIlByb21pc2UiLCJhbGwiLCJ0aGVuIiwib25Jbml0IiwiQXJyYXkiLCJhcmd1bWVudHMiLCJwYXJlbnRDb250cm9sbGVyIiwiY2hpbGRDb250cm9sbGVyIiwib25Mb2FkIiwid2lsbFNob3ciLCJvblJlZnJlc2giLCJvblJlbW92ZSIsInJlbW92ZSIsIm1vZGVsIiwiY2xvc2UiLCJpIiwiaGFzT3duUHJvcGVydHkiLCJjYyIsImNfbmFtZSIsImFyciIsImxlbmd0aCIsInNwbGljZSIsImNvbnRyb2xsZXJfbmFtZSIsImFkZEV2ZW50IiwiZXZlbnQiLCJzZWxlY3RvciIsImhhbmRsZXIiLCJnZXRFdmVudHMiLCJhbGxFdmVudHMiLCJjb25jYXQiLCJpc0FycmF5IiwiXyIsIm1lcmdlIiwicG9zdCIsInVybCIsImdldCIsInN1Ym1pdEZvcm0iLCJmb3JtIiwic3VibWl0Rm9ybUFuZFVwZGF0ZVZpZXciLCJzZXJ2ZXJDYWxsIiwibWV0aG9kZSIsInJlIiwibWF0Y2giLCJlcnJvciIsIm5hbWUiLCJuZXdNb2RlbCIsIm1vZGVsX25hbWUiLCJtb2RlbF9xdWVyeSIsIk51bWJlciIsImxvYWQiLCJ1cGRhdGVNb2RlbCIsInZhbHVlcyIsInNhdmUiLCJmaW5kIiwiZG9tU2VsZWN0b3IiLCJyZWZyZXNoIiwicmVsb2FkIiwicmVsb2FkQ29udHJvbGxlciIsInN1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yIiwiJGZvcm0iLCJlIiwiX3N1Ym1pdE1vZGVsRm9ybSIsInN1Ym1pdE1vZGVsRm9ybSIsImRlZmF1bHRTdWJtaXRNb2RlbEZvcm0iLCJpdGVyYXRlQWxsQ2hpbGRyZW4iLCJyZXMiLCJwX2xpc3QiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsImRhdGEiLCJzeW5jRm9ybSIsImluc3RhbmNlX3ZhbHVlIiwicmVzb2x2ZSIsInJlamVjdCIsInByb20iLCJwayIsImNyZWF0ZSIsInN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MiLCJjb250cm9sbGVyIiwiY2F0Y2giLCIkIiwiaHRtbCIsInN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yIiwiT2JqZWN0IiwiYXNzaWduIiwiZmxhdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/AbstractSDC.js\n");
27
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* binding */ AbstractSDC)\n/* harmony export */ });\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\n\n\nclass AbstractSDC {\n constructor() {\n this._uuid = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.uuidv4)();\n this.contentUrl = '';\n this.contentReload = false;\n this.events = [];\n this.load_async = false;\n this._isEventsSet = false;\n this._allEvents = null;\n this._urlParams = [];\n this._models = [];\n\n // ------------------ Old deprecated properties ----------------------\n this._cssUrls = [];\n this.afterShow = () => {\n console.warn('afterShow is deprecated!!');\n };\n // -------------- End old deprecated properties ----------------------\n\n /**\n *\n * @type {{string: AbstractSDC}}\n */\n this._mixins = {};\n\n /**\n * @type {string}\n */\n this._tagName = '';\n\n /**\n * @type {{string:AbstractSDC}}\n */\n this._childController = {};\n\n /**\n * @type {AbstractSDC}\n */\n this._parentController = null;\n\n /**\n * @type {boolean}\n */\n this._onLoadDone = false;\n\n /**\n * @type {jquery}\n */\n this.$container = null;\n\n /**\n *\n * @type {boolean}\n */\n this._isMixin = false;\n }\n\n /**\n *\n * @param {string} method must be in {}\n * @param {Array} args in arguments of\n *\n */\n _runLifecycle(method, args) {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG) {\n console.debug(method, this._tagName);\n }\n let returnPromisses = [];\n if (this._isMixin) {\n return;\n }\n this._isMixin = true;\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (typeof mixin[method] === 'function') {\n returnPromisses.push(mixin[method].apply(this, args));\n }\n }\n return Promise.all(returnPromisses).then(() => {\n this._isMixin = false;\n });\n }\n onInit() {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG) {\n console.DEBUG(Array.apply(null, arguments), this._tagName);\n }\n }\n get parentController() {\n return this._parentController;\n }\n get childController() {\n return this._childController;\n }\n onLoad() {\n return this._runLifecycle('onLoad', arguments);\n }\n willShow() {\n return this._runLifecycle('willShow', arguments);\n }\n onRefresh() {\n return this._runLifecycle('onRefresh', arguments);\n }\n onRemove() {\n this._runLifecycle('onRemove', arguments);\n return true;\n }\n remove() {\n for (const model of this._models) {\n model.close();\n }\n let _childController = this._childController;\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n if (!cc.remove()) {\n return false;\n }\n }\n }\n }\n if (!this.onRemove || this.onRemove()) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_0__.allOff)(this);\n const c_name = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToCamelCase)(this._tagName);\n if (this._parentController._childController[c_name]) {\n let arr = this._parentController._childController[c_name];\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] === this) {\n arr.splice(i, 1);\n }\n }\n }\n this.$container.remove();\n delete this;\n return true;\n }\n return false;\n }\n controller_name() {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToReadableName)(this._tagName);\n }\n addEvent(event, selector, handler) {\n this.getEvents();\n this._allEvents[event] = this._allEvents[event] || {};\n this._allEvents[event][selector] = handler;\n }\n getEvents() {\n if (this._allEvents) return this._allEvents;\n let allEvents = [];\n allEvents = allEvents.concat(this.events);\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (Array.isArray(mixin.events)) {\n allEvents = allEvents.concat(mixin.events);\n }\n }\n return this._allEvents = _.merge(...allEvents);\n }\n post(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.post(this, url, args);\n }\n get(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.get(this, url, args);\n }\n submitForm(form, url, method) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.submitFormAndUpdateView(this, form, url, method);\n }\n serverCall(methode, args) {\n let re = /sdc_view\\/([^/]+)/i;\n let app = this.contentUrl.match(re);\n if (!app || app.length < 2) {\n console.error('To use the serverCall function the contentUrl must be set: ' + this.name);\n return;\n }\n return (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__.callServer)(app[1], this._tagName, this.parsedContentUrl, methode, args);\n }\n\n /**\n *\n * @param model_name {string | Number}\n * @param model_query {Object}\n * @constructor\n */\n newModel(model_name, model_query = {}) {\n if (model_name instanceof Number && model_name.hasOwnProperty('load')) {\n return model_name.load(this);\n }\n const model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n this._models.push(model);\n return model;\n }\n\n /**\n *\n * @param model_name {string}\n * @param model_query {Object}\n * @param values {Object}\n * @constructor\n */\n updateModel(model_name, model_query = {}, values) {\n let model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n return model.load().then(() => {\n model.values |= values;\n model.save().then(() => {\n model.close();\n return model.values;\n });\n });\n }\n\n /**\n * Adapter to this.$container.find\n * @param {string} domSelector\n */\n find(domSelector) {\n return this.$container.find(domSelector);\n }\n refresh() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.refresh(this.$container, this);\n }\n reload() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reloadController(this);\n }\n submitModelFormDistributor($form, e) {\n if (typeof this._submitModelForm === 'function') {\n return this._submitModelForm($form, e);\n }\n if (typeof this.submitModelForm === 'function') {\n return this.submitModelForm($form, e);\n }\n return this.defaultSubmitModelForm($form, e);\n }\n iterateAllChildren() {\n let _childController = this._childController;\n let res = [];\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n res.push(cc);\n res.push(...cc.iterateAllChildren());\n }\n }\n }\n return res;\n }\n\n /**\n * Model Form Events\n */\n defaultSubmitModelForm($form, e) {\n let p_list = [];\n if (!this._isMixin) {\n e.stopPropagation();\n e.preventDefault();\n let model = $form.data('model');\n const values = model.syncForm($form);\n for (let instance_value of values) {\n p_list.push(new Promise((resolve, reject) => {\n let prom;\n if (instance_value.pk !== null && instance_value.pk >= 0) {\n prom = model.save(instance_value.pk);\n } else {\n prom = model.create(instance_value);\n }\n prom.then(res => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.clearErrorsInForm)($form);\n this.submit_model_form_success && this.submit_model_form_success(res[0]);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_success && controller.submit_model_form_success(res[0]);\n }\n resolve(res);\n }).catch(data => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.setErrorsInForm)($form, $(data.html));\n this.submit_model_form_error && this.submit_model_form_error(data);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_error && controller.submit_model_form_error(data);\n }\n reject(data);\n });\n }));\n }\n }\n return Promise.all(p_list).then(res => {\n return Object.assign({}, ...res.flat());\n });\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9BYnN0cmFjdFNEQy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBdUM7QUFDTDtBQUNJO0FBQ1U7QUFDcUU7QUFFOUcsTUFBTVMsV0FBVyxDQUFDO0VBQ3JCQyxXQUFXQSxDQUFBLEVBQUc7SUFDVixJQUFJLENBQUNDLEtBQUssR0FBR1AscURBQU0sQ0FBQyxDQUFDO0lBQ3JCLElBQUksQ0FBQ1EsVUFBVSxHQUFHLEVBQUU7SUFDcEIsSUFBSSxDQUFDQyxhQUFhLEdBQUcsS0FBSztJQUMxQixJQUFJLENBQUNDLE1BQU0sR0FBRyxFQUFFO0lBQ2hCLElBQUksQ0FBQ0MsVUFBVSxHQUFHLEtBQUs7SUFDdkIsSUFBSSxDQUFDQyxZQUFZLEdBQUcsS0FBSztJQUN6QixJQUFJLENBQUNDLFVBQVUsR0FBRyxJQUFJO0lBRXRCLElBQUksQ0FBQ0MsVUFBVSxHQUFHLEVBQUU7SUFDcEIsSUFBSSxDQUFDQyxPQUFPLEdBQUcsRUFBRTs7SUFFakI7SUFDQSxJQUFJLENBQUNDLFFBQVEsR0FBRyxFQUFFO0lBQ2xCLElBQUksQ0FBQ0MsU0FBUyxHQUFHLE1BQU07TUFDbkJDLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDJCQUEyQixDQUFDO0lBQzdDLENBQUM7SUFDRDs7SUFHQTtBQUNSO0FBQ0E7QUFDQTtJQUNRLElBQUksQ0FBQ0MsT0FBTyxHQUFHLENBQUMsQ0FBQzs7SUFFakI7QUFDUjtBQUNBO0lBQ1EsSUFBSSxDQUFDQyxRQUFRLEdBQUcsRUFBRTs7SUFFbEI7QUFDUjtBQUNBO0lBQ1EsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7O0lBRTFCO0FBQ1I7QUFDQTtJQUNRLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUcsSUFBSTs7SUFFN0I7QUFDUjtBQUNBO0lBQ1EsSUFBSSxDQUFDQyxXQUFXLEdBQUcsS0FBSzs7SUFFeEI7QUFDUjtBQUNBO0lBQ1EsSUFBSSxDQUFDQyxVQUFVLEdBQUcsSUFBSTs7SUFFdEI7QUFDUjtBQUNBO0FBQ0E7SUFDUSxJQUFJLENBQUNDLFFBQVEsR0FBRyxLQUFLO0VBQ3pCOztFQUVBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxhQUFhQSxDQUFDQyxNQUFNLEVBQUVDLElBQUksRUFBRTtJQUN4QixJQUFJaEMsNkNBQUcsQ0FBQ2lDLEtBQUssRUFBRTtNQUNYWixPQUFPLENBQUNhLEtBQUssQ0FBQ0gsTUFBTSxFQUFFLElBQUksQ0FBQ1AsUUFBUSxDQUFDO0lBQ3hDO0lBRUEsSUFBSVcsZUFBZSxHQUFHLEVBQUU7SUFDeEIsSUFBSSxJQUFJLENBQUNOLFFBQVEsRUFBRTtNQUNmO0lBQ0o7SUFDQSxJQUFJLENBQUNBLFFBQVEsR0FBRyxJQUFJO0lBQ3BCLEtBQUssSUFBSU8sUUFBUSxJQUFJLElBQUksQ0FBQ2IsT0FBTyxFQUFFO01BQy9CLElBQUljLEtBQUssR0FBRyxJQUFJLENBQUNkLE9BQU8sQ0FBQ2EsUUFBUSxDQUFDO01BQ2xDLElBQUksT0FBT0MsS0FBSyxDQUFDTixNQUFNLENBQUMsS0FBSyxVQUFVLEVBQUU7UUFFckNJLGVBQWUsQ0FBQ0csSUFBSSxDQUFDRCxLQUFLLENBQUNOLE1BQU0sQ0FBQyxDQUFDUSxLQUFLLENBQUMsSUFBSSxFQUFFUCxJQUFJLENBQUMsQ0FBQztNQUN6RDtJQUNKO0lBRUEsT0FBT1EsT0FBTyxDQUFDQyxHQUFHLENBQUNOLGVBQWUsQ0FBQyxDQUFDTyxJQUFJLENBQUMsTUFBTTtNQUMzQyxJQUFJLENBQUNiLFFBQVEsR0FBRyxLQUFLO0lBQ3pCLENBQUMsQ0FBQztFQUNOO0VBRUFjLE1BQU1BLENBQUEsRUFBRztJQUNMLElBQUkzQyw2Q0FBRyxDQUFDaUMsS0FBSyxFQUFFO01BQ1haLE9BQU8sQ0FBQ1ksS0FBSyxDQUFDVyxLQUFLLENBQUNMLEtBQUssQ0FBQyxJQUFJLEVBQUVNLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQ3JCLFFBQVEsQ0FBQztJQUM5RDtFQUNKO0VBRUEsSUFBSXNCLGdCQUFnQkEsQ0FBQSxFQUFHO0lBQ25CLE9BQU8sSUFBSSxDQUFDcEIsaUJBQWlCO0VBQ2pDO0VBRUEsSUFBSXFCLGVBQWVBLENBQUEsRUFBRztJQUNsQixPQUFPLElBQUksQ0FBQ3RCLGdCQUFnQjtFQUNoQztFQUVBdUIsTUFBTUEsQ0FBQSxFQUFHO0lBQ0wsT0FBTyxJQUFJLENBQUNsQixhQUFhLENBQUMsUUFBUSxFQUFFZSxTQUFTLENBQUM7RUFDbEQ7RUFFQUksUUFBUUEsQ0FBQSxFQUFHO0lBQ1AsT0FBTyxJQUFJLENBQUNuQixhQUFhLENBQUMsVUFBVSxFQUFFZSxTQUFTLENBQUM7RUFDcEQ7RUFFQUssU0FBU0EsQ0FBQSxFQUFHO0lBQ1IsT0FBTyxJQUFJLENBQUNwQixhQUFhLENBQUMsV0FBVyxFQUFFZSxTQUFTLENBQUM7RUFDckQ7RUFFQU0sUUFBUUEsQ0FBQSxFQUFHO0lBQ1AsSUFBSSxDQUFDckIsYUFBYSxDQUFDLFVBQVUsRUFBRWUsU0FBUyxDQUFDO0lBQ3pDLE9BQU8sSUFBSTtFQUNmO0VBRUFPLE1BQU1BLENBQUEsRUFBRztJQUNMLEtBQUssTUFBTUMsS0FBSyxJQUFJLElBQUksQ0FBQ25DLE9BQU8sRUFBRTtNQUM5Qm1DLEtBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7SUFDakI7SUFDQSxJQUFJN0IsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDQSxnQkFBZ0I7SUFDNUMsS0FBSyxJQUFJOEIsQ0FBQyxJQUFJOUIsZ0JBQWdCLEVBQUU7TUFDNUIsSUFBSUEsZ0JBQWdCLENBQUMrQixjQUFjLENBQUNELENBQUMsQ0FBQyxFQUFFO1FBQ3BDLEtBQUssSUFBSUUsRUFBRSxJQUFJaEMsZ0JBQWdCLENBQUM4QixDQUFDLENBQUMsRUFBRTtVQUNoQyxJQUFJLENBQUNFLEVBQUUsQ0FBQ0wsTUFBTSxDQUFDLENBQUMsRUFBRTtZQUNkLE9BQU8sS0FBSztVQUNoQjtRQUNKO01BQ0o7SUFDSjtJQUVBLElBQUksQ0FBQyxJQUFJLENBQUNELFFBQVEsSUFBSSxJQUFJLENBQUNBLFFBQVEsQ0FBQyxDQUFDLEVBQUU7TUFDbkNwRCxzREFBTSxDQUFDLElBQUksQ0FBQztNQUNaLE1BQU0yRCxNQUFNLEdBQUdwRCxpRUFBa0IsQ0FBQyxJQUFJLENBQUNrQixRQUFRLENBQUM7TUFDaEQsSUFBSSxJQUFJLENBQUNFLGlCQUFpQixDQUFDRCxnQkFBZ0IsQ0FBQ2lDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pELElBQUlDLEdBQUcsR0FBRyxJQUFJLENBQUNqQyxpQkFBaUIsQ0FBQ0QsZ0JBQWdCLENBQUNpQyxNQUFNLENBQUM7UUFDekQsS0FBSyxJQUFJSCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdJLEdBQUcsQ0FBQ0MsTUFBTSxFQUFFTCxDQUFDLEVBQUUsRUFBRTtVQUNqQyxJQUFJSSxHQUFHLENBQUNKLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNqQkksR0FBRyxDQUFDRSxNQUFNLENBQUNOLENBQUMsRUFBRSxDQUFDLENBQUM7VUFDcEI7UUFDSjtNQUNKO01BRUEsSUFBSSxDQUFDM0IsVUFBVSxDQUFDd0IsTUFBTSxDQUFDLENBQUM7TUFDeEIsT0FBTyxJQUFJO01BQ1gsT0FBTyxJQUFJO0lBQ2Y7SUFFQSxPQUFPLEtBQUs7RUFDaEI7RUFFQVUsZUFBZUEsQ0FBQSxFQUFHO0lBQ2QsT0FBT3ZELG9FQUFxQixDQUFDLElBQUksQ0FBQ2lCLFFBQVEsQ0FBQztFQUMvQztFQUVBdUMsUUFBUUEsQ0FBQ0MsS0FBSyxFQUFFQyxRQUFRLEVBQUVDLE9BQU8sRUFBRTtJQUMvQixJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hCLElBQUksQ0FBQ25ELFVBQVUsQ0FBQ2dELEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQ2hELFVBQVUsQ0FBQ2dELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRCxJQUFJLENBQUNoRCxVQUFVLENBQUNnRCxLQUFLLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLEdBQUdDLE9BQU87RUFDOUM7RUFFQUMsU0FBU0EsQ0FBQSxFQUFHO0lBQ1IsSUFBSSxJQUFJLENBQUNuRCxVQUFVLEVBQUUsT0FBTyxJQUFJLENBQUNBLFVBQVU7SUFDM0MsSUFBSW9ELFNBQVMsR0FBRyxFQUFFO0lBQ2xCQSxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDLElBQUksQ0FBQ3hELE1BQU0sQ0FBQztJQUN6QyxLQUFLLElBQUl1QixRQUFRLElBQUksSUFBSSxDQUFDYixPQUFPLEVBQUU7TUFDL0IsSUFBSWMsS0FBSyxHQUFHLElBQUksQ0FBQ2QsT0FBTyxDQUFDYSxRQUFRLENBQUM7TUFDbEMsSUFBSVEsS0FBSyxDQUFDMEIsT0FBTyxDQUFDakMsS0FBSyxDQUFDeEIsTUFBTSxDQUFDLEVBQUU7UUFDN0J1RCxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDaEMsS0FBSyxDQUFDeEIsTUFBTSxDQUFDO01BQzlDO0lBQ0o7SUFHQSxPQUFRLElBQUksQ0FBQ0csVUFBVSxHQUFHdUQsQ0FBQyxDQUFDQyxLQUFLLENBQUMsR0FBR0osU0FBUyxDQUFDO0VBQ25EO0VBRUFLLElBQUlBLENBQUNDLEdBQUcsRUFBRTFDLElBQUksRUFBRTtJQUNaLE9BQU9oQyw2Q0FBRyxDQUFDeUUsSUFBSSxDQUFDLElBQUksRUFBRUMsR0FBRyxFQUFFMUMsSUFBSSxDQUFDO0VBQ3BDO0VBRUEyQyxHQUFHQSxDQUFDRCxHQUFHLEVBQUUxQyxJQUFJLEVBQUU7SUFDWCxPQUFPaEMsNkNBQUcsQ0FBQzJFLEdBQUcsQ0FBQyxJQUFJLEVBQUVELEdBQUcsRUFBRTFDLElBQUksQ0FBQztFQUNuQztFQUVBNEMsVUFBVUEsQ0FBQ0MsSUFBSSxFQUFFSCxHQUFHLEVBQUUzQyxNQUFNLEVBQUU7SUFDMUIsT0FBTy9CLDZDQUFHLENBQUM4RSx1QkFBdUIsQ0FBQyxJQUFJLEVBQUVELElBQUksRUFBRUgsR0FBRyxFQUFFM0MsTUFBTSxDQUFDO0VBQy9EO0VBRUFnRCxVQUFVQSxDQUFDQyxPQUFPLEVBQUVoRCxJQUFJLEVBQUU7SUFDdEIsSUFBSWlELEVBQUUsR0FBRyxvQkFBb0I7SUFDN0IsSUFBSWpGLEdBQUcsR0FBRyxJQUFJLENBQUNXLFVBQVUsQ0FBQ3VFLEtBQUssQ0FBQ0QsRUFBRSxDQUFDO0lBQ25DLElBQUksQ0FBQ2pGLEdBQUcsSUFBSUEsR0FBRyxDQUFDNEQsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN4QnZDLE9BQU8sQ0FBQzhELEtBQUssQ0FBQyw2REFBNkQsR0FBRyxJQUFJLENBQUNDLElBQUksQ0FBQztNQUN4RjtJQUNKO0lBRUEsT0FBT2xGLCtEQUFVLENBQUNGLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUN3QixRQUFRLEVBQUUsSUFBSSxDQUFDNkQsZ0JBQWdCLEVBQUVMLE9BQU8sRUFBRWhELElBQUksQ0FBQztFQUNsRjs7RUFFQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSXNELFFBQVFBLENBQUNDLFVBQVUsRUFBRUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ25DLElBQUdELFVBQVUsWUFBWUUsTUFBTSxJQUFJRixVQUFVLENBQUMvQixjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7TUFDbEUsT0FBTytCLFVBQVUsQ0FBQ0csSUFBSSxDQUFDLElBQUksQ0FBQztJQUNoQztJQUVBLE1BQU1yQyxLQUFLLEdBQUcsSUFBSXBELGlEQUFLLENBQUNzRixVQUFVLEVBQUVDLFdBQVcsQ0FBQztJQUNoRCxJQUFJLENBQUN0RSxPQUFPLENBQUNvQixJQUFJLENBQUNlLEtBQUssQ0FBQztJQUN4QixPQUFPQSxLQUFLO0VBQ2hCOztFQUVBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0lzQyxXQUFXQSxDQUFDSixVQUFVLEVBQUVDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRUksTUFBTSxFQUFFO0lBQzlDLElBQUl2QyxLQUFLLEdBQUcsSUFBSXBELGlEQUFLLENBQUNzRixVQUFVLEVBQUVDLFdBQVcsQ0FBQztJQUM5QyxPQUFPbkMsS0FBSyxDQUFDcUMsSUFBSSxDQUFDLENBQUMsQ0FBQ2hELElBQUksQ0FBQyxNQUFJO01BQ3pCVyxLQUFLLENBQUN1QyxNQUFNLElBQUlBLE1BQU07TUFDdEJ2QyxLQUFLLENBQUN3QyxJQUFJLENBQUMsQ0FBQyxDQUFDbkQsSUFBSSxDQUFDLE1BQUs7UUFDbkJXLEtBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7UUFDYixPQUFPRCxLQUFLLENBQUN1QyxNQUFNO01BQ3ZCLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOOztFQUVBO0FBQ0o7QUFDQTtBQUNBO0VBQ0lFLElBQUlBLENBQUNDLFdBQVcsRUFBRTtJQUNkLE9BQU8sSUFBSSxDQUFDbkUsVUFBVSxDQUFDa0UsSUFBSSxDQUFDQyxXQUFXLENBQUM7RUFDNUM7RUFFQUMsT0FBT0EsQ0FBQSxFQUFHO0lBQ04sT0FBT2hHLDZDQUFHLENBQUNnRyxPQUFPLENBQUMsSUFBSSxDQUFDcEUsVUFBVSxFQUFFLElBQUksQ0FBQztFQUM3QztFQUVBcUUsTUFBTUEsQ0FBQSxFQUFHO0lBQ0wsT0FBT2pHLDZDQUFHLENBQUNrRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7RUFDckM7RUFFQUMsMEJBQTBCQSxDQUFDQyxLQUFLLEVBQUVDLENBQUMsRUFBRTtJQUNqQyxJQUFJLE9BQU8sSUFBSSxDQUFDQyxnQkFBZ0IsS0FBSyxVQUFVLEVBQUU7TUFDN0MsT0FBTyxJQUFJLENBQUNBLGdCQUFnQixDQUFDRixLQUFLLEVBQUVDLENBQUMsQ0FBQztJQUMxQztJQUNBLElBQUksT0FBTyxJQUFJLENBQUNFLGVBQWUsS0FBSyxVQUFVLEVBQUU7TUFDNUMsT0FBTyxJQUFJLENBQUNBLGVBQWUsQ0FBQ0gsS0FBSyxFQUFFQyxDQUFDLENBQUM7SUFDekM7SUFDQSxPQUFPLElBQUksQ0FBQ0csc0JBQXNCLENBQUNKLEtBQUssRUFBRUMsQ0FBQyxDQUFDO0VBQ2hEO0VBRUFJLGtCQUFrQkEsQ0FBQSxFQUFHO0lBQ2pCLElBQUloRixnQkFBZ0IsR0FBRyxJQUFJLENBQUNBLGdCQUFnQjtJQUM1QyxJQUFJaUYsR0FBRyxHQUFHLEVBQUU7SUFDWixLQUFLLElBQUluRCxDQUFDLElBQUk5QixnQkFBZ0IsRUFBRTtNQUM1QixJQUFJQSxnQkFBZ0IsQ0FBQytCLGNBQWMsQ0FBQ0QsQ0FBQyxDQUFDLEVBQUU7UUFDcEMsS0FBSyxJQUFJRSxFQUFFLElBQUloQyxnQkFBZ0IsQ0FBQzhCLENBQUMsQ0FBQyxFQUFFO1VBQ2hDbUQsR0FBRyxDQUFDcEUsSUFBSSxDQUFDbUIsRUFBRSxDQUFDO1VBQ1ppRCxHQUFHLENBQUNwRSxJQUFJLENBQUMsR0FBR21CLEVBQUUsQ0FBQ2dELGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUN4QztNQUNKO0lBQ0o7SUFDQSxPQUFPQyxHQUFHO0VBQ2Q7O0VBRUE7QUFDSjtBQUNBO0VBQ0lGLHNCQUFzQkEsQ0FBQ0osS0FBSyxFQUFFQyxDQUFDLEVBQUU7SUFDN0IsSUFBSU0sTUFBTSxHQUFHLEVBQUU7SUFDZixJQUFJLENBQUMsSUFBSSxDQUFDOUUsUUFBUSxFQUFFO01BQ2hCd0UsQ0FBQyxDQUFDTyxlQUFlLENBQUMsQ0FBQztNQUNuQlAsQ0FBQyxDQUFDUSxjQUFjLENBQUMsQ0FBQztNQUNsQixJQUFJeEQsS0FBSyxHQUFHK0MsS0FBSyxDQUFDVSxJQUFJLENBQUMsT0FBTyxDQUFDO01BQy9CLE1BQU1sQixNQUFNLEdBQUd2QyxLQUFLLENBQUMwRCxRQUFRLENBQUNYLEtBQUssQ0FBQztNQUNwQyxLQUFLLElBQUlZLGNBQWMsSUFBSXBCLE1BQU0sRUFBRTtRQUMvQmUsTUFBTSxDQUFDckUsSUFBSSxDQUFDLElBQUlFLE9BQU8sQ0FBQyxDQUFDeUUsT0FBTyxFQUFFQyxNQUFNLEtBQUs7VUFDekMsSUFBSUMsSUFBSTtVQUNSLElBQUlILGNBQWMsQ0FBQ0ksRUFBRSxLQUFLLElBQUksSUFBSUosY0FBYyxDQUFDSSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3RERCxJQUFJLEdBQUc5RCxLQUFLLENBQUN3QyxJQUFJLENBQUNtQixjQUFjLENBQUNJLEVBQUUsQ0FBQztVQUN4QyxDQUFDLE1BQU07WUFDSEQsSUFBSSxHQUFHOUQsS0FBSyxDQUFDZ0UsTUFBTSxDQUFDTCxjQUFjLENBQUM7VUFDdkM7VUFFQUcsSUFBSSxDQUFDekUsSUFBSSxDQUFFZ0UsR0FBRyxJQUFLO1lBQ2ZyRyxnRUFBaUIsQ0FBQytGLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUNrQix5QkFBeUIsSUFBSSxJQUFJLENBQUNBLHlCQUF5QixDQUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEUsS0FBSSxNQUFNYSxVQUFVLElBQUksSUFBSSxDQUFDZCxrQkFBa0IsQ0FBQyxDQUFDLEVBQUU7Y0FDL0NjLFVBQVUsQ0FBQ0QseUJBQXlCLElBQUlDLFVBQVUsQ0FBQ0QseUJBQXlCLENBQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RjtZQUNBTyxPQUFPLENBQUNQLEdBQUcsQ0FBQztVQUNoQixDQUFDLENBQUMsQ0FBQ2MsS0FBSyxDQUFFVixJQUFJLElBQUs7WUFDZjFHLDhEQUFlLENBQUNnRyxLQUFLLEVBQUVxQixDQUFDLENBQUNYLElBQUksQ0FBQ1ksSUFBSSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDQyx1QkFBdUIsSUFBSSxJQUFJLENBQUNBLHVCQUF1QixDQUFDYixJQUFJLENBQUM7WUFDbEUsS0FBSSxNQUFNUyxVQUFVLElBQUksSUFBSSxDQUFDZCxrQkFBa0IsQ0FBQyxDQUFDLEVBQUU7Y0FDL0NjLFVBQVUsQ0FBQ0ksdUJBQXVCLElBQUlKLFVBQVUsQ0FBQ0ksdUJBQXVCLENBQUNiLElBQUksQ0FBQztZQUNsRjtZQUNBSSxNQUFNLENBQUNKLElBQUksQ0FBQztVQUNoQixDQUFDLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztNQUNQO0lBQ0o7SUFFQSxPQUFPdEUsT0FBTyxDQUFDQyxHQUFHLENBQUNrRSxNQUFNLENBQUMsQ0FBQ2pFLElBQUksQ0FBRWdFLEdBQUcsSUFBSztNQUNyQyxPQUFPa0IsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBR25CLEdBQUcsQ0FBQ29CLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0VBQ047QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9BYnN0cmFjdFNEQy5qcz9kN2Y3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YWxsT2ZmfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5pbXBvcnQge2FwcH0gZnJvbSBcIi4vc2RjX21haW4uanNcIjtcbmltcG9ydCB7TW9kZWx9IGZyb20gXCIuL3NkY19zb2NrZXQuanNcIjtcbmltcG9ydCB7Y2FsbFNlcnZlcn0gZnJvbSBcIi4vc2RjX3NlcnZlcl9jYWxsLmpzXCI7XG5pbXBvcnQge3V1aWR2NCwgc2V0RXJyb3JzSW5Gb3JtLCBjbGVhckVycm9yc0luRm9ybSwgdGFnTmFtZVRvQ2FtZWxDYXNlLCB0YWdOYW1lVG9SZWFkYWJsZU5hbWV9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RTREMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl91dWlkID0gdXVpZHY0KCk7XG4gICAgICAgIHRoaXMuY29udGVudFVybCA9ICcnO1xuICAgICAgICB0aGlzLmNvbnRlbnRSZWxvYWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5sb2FkX2FzeW5jID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzRXZlbnRzU2V0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FsbEV2ZW50cyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fdXJsUGFyYW1zID0gW107XG4gICAgICAgIHRoaXMuX21vZGVscyA9IFtdO1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBPbGQgZGVwcmVjYXRlZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgdGhpcy5fY3NzVXJscyA9IFtdO1xuICAgICAgICB0aGlzLmFmdGVyU2hvdyA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignYWZ0ZXJTaG93IGlzIGRlcHJlY2F0ZWQhIScpXG4gICAgICAgIH07XG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tIEVuZCBvbGQgZGVwcmVjYXRlZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKiBAdHlwZSB7e3N0cmluZzogQWJzdHJhY3RTREN9fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fbWl4aW5zID0ge307XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl90YWdOYW1lID0gJyc7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHt7c3RyaW5nOkFic3RyYWN0U0RDfX1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2NoaWxkQ29udHJvbGxlciA9IHt9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7QWJzdHJhY3RTREN9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9wYXJlbnRDb250cm9sbGVyID0gbnVsbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9vbkxvYWREb25lID0gZmFsc2U7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtqcXVlcnl9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLiRjb250YWluZXIgPSBudWxsO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2lzTWl4aW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgbXVzdCBiZSBpbiB7fVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgaW4gYXJndW1lbnRzIG9mXG4gICAgICpcbiAgICAgKi9cbiAgICBfcnVuTGlmZWN5Y2xlKG1ldGhvZCwgYXJncykge1xuICAgICAgICBpZiAoYXBwLkRFQlVHKSB7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKG1ldGhvZCwgdGhpcy5fdGFnTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmV0dXJuUHJvbWlzc2VzID0gW107XG4gICAgICAgIGlmICh0aGlzLl9pc01peGluKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNNaXhpbiA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IG1peGluS2V5IGluIHRoaXMuX21peGlucykge1xuICAgICAgICAgICAgbGV0IG1peGluID0gdGhpcy5fbWl4aW5zW21peGluS2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWl4aW5bbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJykge1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuUHJvbWlzc2VzLnB1c2gobWl4aW5bbWV0aG9kXS5hcHBseSh0aGlzLCBhcmdzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmV0dXJuUHJvbWlzc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lzTWl4aW4gPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Jbml0KCkge1xuICAgICAgICBpZiAoYXBwLkRFQlVHKSB7XG4gICAgICAgICAgICBjb25zb2xlLkRFQlVHKEFycmF5LmFwcGx5KG51bGwsIGFyZ3VtZW50cyksIHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHBhcmVudENvbnRyb2xsZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnRDb250cm9sbGVyO1xuICAgIH1cblxuICAgIGdldCBjaGlsZENvbnRyb2xsZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZENvbnRyb2xsZXI7XG4gICAgfVxuXG4gICAgb25Mb2FkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKCdvbkxvYWQnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHdpbGxTaG93KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKCd3aWxsU2hvdycsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgb25SZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKCdvblJlZnJlc2gnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICB0aGlzLl9ydW5MaWZlY3ljbGUoJ29uUmVtb3ZlJywgYXJndW1lbnRzKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5fbW9kZWxzKSB7XG4gICAgICAgICAgICBtb2RlbC5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBfY2hpbGRDb250cm9sbGVyID0gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgICAgICBmb3IgKGxldCBpIGluIF9jaGlsZENvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGlmIChfY2hpbGRDb250cm9sbGVyLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2Mgb2YgX2NoaWxkQ29udHJvbGxlcltpXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNjLnJlbW92ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMub25SZW1vdmUgfHwgdGhpcy5vblJlbW92ZSgpKSB7XG4gICAgICAgICAgICBhbGxPZmYodGhpcyk7XG4gICAgICAgICAgICBjb25zdCBjX25hbWUgPSB0YWdOYW1lVG9DYW1lbENhc2UodGhpcy5fdGFnTmFtZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NfbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5fcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NfbmFtZV07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gdGhpcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy4kY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb250cm9sbGVyX25hbWUoKSB7XG4gICAgICAgIHJldHVybiB0YWdOYW1lVG9SZWFkYWJsZU5hbWUodGhpcy5fdGFnTmFtZSk7XG4gICAgfVxuXG4gICAgYWRkRXZlbnQoZXZlbnQsIHNlbGVjdG9yLCBoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuZ2V0RXZlbnRzKCk7XG4gICAgICAgIHRoaXMuX2FsbEV2ZW50c1tldmVudF0gPSB0aGlzLl9hbGxFdmVudHNbZXZlbnRdIHx8IHt9O1xuICAgICAgICB0aGlzLl9hbGxFdmVudHNbZXZlbnRdW3NlbGVjdG9yXSA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgZ2V0RXZlbnRzKCkge1xuICAgICAgICBpZiAodGhpcy5fYWxsRXZlbnRzKSByZXR1cm4gdGhpcy5fYWxsRXZlbnRzO1xuICAgICAgICBsZXQgYWxsRXZlbnRzID0gW107XG4gICAgICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQodGhpcy5ldmVudHMpO1xuICAgICAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgICAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtaXhpbi5ldmVudHMpKSB7XG4gICAgICAgICAgICAgICAgYWxsRXZlbnRzID0gYWxsRXZlbnRzLmNvbmNhdChtaXhpbi5ldmVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIHJldHVybiAodGhpcy5fYWxsRXZlbnRzID0gXy5tZXJnZSguLi5hbGxFdmVudHMpKTtcbiAgICB9XG5cbiAgICBwb3N0KHVybCwgYXJncykge1xuICAgICAgICByZXR1cm4gYXBwLnBvc3QodGhpcywgdXJsLCBhcmdzKTtcbiAgICB9XG5cbiAgICBnZXQodXJsLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBhcHAuZ2V0KHRoaXMsIHVybCwgYXJncyk7XG4gICAgfVxuXG4gICAgc3VibWl0Rm9ybShmb3JtLCB1cmwsIG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gYXBwLnN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3KHRoaXMsIGZvcm0sIHVybCwgbWV0aG9kKTtcbiAgICB9XG5cbiAgICBzZXJ2ZXJDYWxsKG1ldGhvZGUsIGFyZ3MpIHtcbiAgICAgICAgbGV0IHJlID0gL3NkY192aWV3XFwvKFteL10rKS9pO1xuICAgICAgICBsZXQgYXBwID0gdGhpcy5jb250ZW50VXJsLm1hdGNoKHJlKTtcbiAgICAgICAgaWYgKCFhcHAgfHwgYXBwLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RvIHVzZSB0aGUgc2VydmVyQ2FsbCBmdW5jdGlvbiB0aGUgY29udGVudFVybCBtdXN0IGJlIHNldDogJyArIHRoaXMubmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FsbFNlcnZlcihhcHBbMV0sIHRoaXMuX3RhZ05hbWUsIHRoaXMucGFyc2VkQ29udGVudFVybCwgbWV0aG9kZSwgYXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW9kZWxfbmFtZSB7c3RyaW5nIHwgTnVtYmVyfVxuICAgICAqIEBwYXJhbSBtb2RlbF9xdWVyeSB7T2JqZWN0fVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIG5ld01vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5ID0ge30pIHtcbiAgICAgICAgaWYobW9kZWxfbmFtZSBpbnN0YW5jZW9mIE51bWJlciAmJiBtb2RlbF9uYW1lLmhhc093blByb3BlcnR5KCdsb2FkJykpIHtcbiAgICAgICAgICAgIHJldHVybiBtb2RlbF9uYW1lLmxvYWQodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSk7XG4gICAgICAgIHRoaXMuX21vZGVscy5wdXNoKG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIG1vZGVsX25hbWUge3N0cmluZ31cbiAgICAgKiBAcGFyYW0gbW9kZWxfcXVlcnkge09iamVjdH1cbiAgICAgKiBAcGFyYW0gdmFsdWVzIHtPYmplY3R9XG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgdXBkYXRlTW9kZWwobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSwgdmFsdWVzKSB7XG4gICAgICAgIGxldCBtb2RlbCA9IG5ldyBNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSk7XG4gICAgICAgIHJldHVybiBtb2RlbC5sb2FkKCkudGhlbigoKT0+e1xuICAgICAgICAgICAgbW9kZWwudmFsdWVzIHw9IHZhbHVlcztcbiAgICAgICAgICAgIG1vZGVsLnNhdmUoKS50aGVuKCgpPT4ge1xuICAgICAgICAgICAgICAgIG1vZGVsLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsLnZhbHVlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkYXB0ZXIgdG8gdGhpcy4kY29udGFpbmVyLmZpbmRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZG9tU2VsZWN0b3JcbiAgICAgKi9cbiAgICBmaW5kKGRvbVNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjb250YWluZXIuZmluZChkb21TZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5yZWZyZXNoKHRoaXMuJGNvbnRhaW5lciwgdGhpcyk7XG4gICAgfVxuXG4gICAgcmVsb2FkKCkge1xuICAgICAgICByZXR1cm4gYXBwLnJlbG9hZENvbnRyb2xsZXIodGhpcyk7XG4gICAgfVxuXG4gICAgc3VibWl0TW9kZWxGb3JtRGlzdHJpYnV0b3IoJGZvcm0sIGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zdWJtaXRNb2RlbEZvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRNb2RlbEZvcm0oJGZvcm0sIGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWJtaXRNb2RlbEZvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgfVxuXG4gICAgaXRlcmF0ZUFsbENoaWxkcmVuKCkge1xuICAgICAgICBsZXQgX2NoaWxkQ29udHJvbGxlciA9IHRoaXMuX2NoaWxkQ29udHJvbGxlcjtcbiAgICAgICAgbGV0IHJlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpIGluIF9jaGlsZENvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGlmIChfY2hpbGRDb250cm9sbGVyLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2Mgb2YgX2NoaWxkQ29udHJvbGxlcltpXSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChjYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKC4uLmNjLml0ZXJhdGVBbGxDaGlsZHJlbigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb2RlbCBGb3JtIEV2ZW50c1xuICAgICAqL1xuICAgIGRlZmF1bHRTdWJtaXRNb2RlbEZvcm0oJGZvcm0sIGUpIHtcbiAgICAgICAgbGV0IHBfbGlzdCA9IFtdO1xuICAgICAgICBpZiAoIXRoaXMuX2lzTWl4aW4pIHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBsZXQgbW9kZWwgPSAkZm9ybS5kYXRhKCdtb2RlbCcpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gbW9kZWwuc3luY0Zvcm0oJGZvcm0pO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5zdGFuY2VfdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcF9saXN0LnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlX3ZhbHVlLnBrICE9PSBudWxsICYmIGluc3RhbmNlX3ZhbHVlLnBrID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb20gPSBtb2RlbC5zYXZlKGluc3RhbmNlX3ZhbHVlLnBrKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb20gPSBtb2RlbC5jcmVhdGUoaW5zdGFuY2VfdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcHJvbS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyRXJyb3JzSW5Gb3JtKCRmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyAmJiB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MocmVzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBjb250cm9sbGVyIG9mIHRoaXMuaXRlcmF0ZUFsbENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MgJiYgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzKHJlc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcnNJbkZvcm0oJGZvcm0sICQoZGF0YS5odG1sKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yICYmIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgY29udHJvbGxlciBvZiB0aGlzLml0ZXJhdGVBbGxDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvciAmJiBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocF9saXN0KS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCAuLi5yZXMuZmxhdCgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufSJdLCJuYW1lcyI6WyJhbGxPZmYiLCJhcHAiLCJNb2RlbCIsImNhbGxTZXJ2ZXIiLCJ1dWlkdjQiLCJzZXRFcnJvcnNJbkZvcm0iLCJjbGVhckVycm9yc0luRm9ybSIsInRhZ05hbWVUb0NhbWVsQ2FzZSIsInRhZ05hbWVUb1JlYWRhYmxlTmFtZSIsIkFic3RyYWN0U0RDIiwiY29uc3RydWN0b3IiLCJfdXVpZCIsImNvbnRlbnRVcmwiLCJjb250ZW50UmVsb2FkIiwiZXZlbnRzIiwibG9hZF9hc3luYyIsIl9pc0V2ZW50c1NldCIsIl9hbGxFdmVudHMiLCJfdXJsUGFyYW1zIiwiX21vZGVscyIsIl9jc3NVcmxzIiwiYWZ0ZXJTaG93IiwiY29uc29sZSIsIndhcm4iLCJfbWl4aW5zIiwiX3RhZ05hbWUiLCJfY2hpbGRDb250cm9sbGVyIiwiX3BhcmVudENvbnRyb2xsZXIiLCJfb25Mb2FkRG9uZSIsIiRjb250YWluZXIiLCJfaXNNaXhpbiIsIl9ydW5MaWZlY3ljbGUiLCJtZXRob2QiLCJhcmdzIiwiREVCVUciLCJkZWJ1ZyIsInJldHVyblByb21pc3NlcyIsIm1peGluS2V5IiwibWl4aW4iLCJwdXNoIiwiYXBwbHkiLCJQcm9taXNlIiwiYWxsIiwidGhlbiIsIm9uSW5pdCIsIkFycmF5IiwiYXJndW1lbnRzIiwicGFyZW50Q29udHJvbGxlciIsImNoaWxkQ29udHJvbGxlciIsIm9uTG9hZCIsIndpbGxTaG93Iiwib25SZWZyZXNoIiwib25SZW1vdmUiLCJyZW1vdmUiLCJtb2RlbCIsImNsb3NlIiwiaSIsImhhc093blByb3BlcnR5IiwiY2MiLCJjX25hbWUiLCJhcnIiLCJsZW5ndGgiLCJzcGxpY2UiLCJjb250cm9sbGVyX25hbWUiLCJhZGRFdmVudCIsImV2ZW50Iiwic2VsZWN0b3IiLCJoYW5kbGVyIiwiZ2V0RXZlbnRzIiwiYWxsRXZlbnRzIiwiY29uY2F0IiwiaXNBcnJheSIsIl8iLCJtZXJnZSIsInBvc3QiLCJ1cmwiLCJnZXQiLCJzdWJtaXRGb3JtIiwiZm9ybSIsInN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3Iiwic2VydmVyQ2FsbCIsIm1ldGhvZGUiLCJyZSIsIm1hdGNoIiwiZXJyb3IiLCJuYW1lIiwicGFyc2VkQ29udGVudFVybCIsIm5ld01vZGVsIiwibW9kZWxfbmFtZSIsIm1vZGVsX3F1ZXJ5IiwiTnVtYmVyIiwibG9hZCIsInVwZGF0ZU1vZGVsIiwidmFsdWVzIiwic2F2ZSIsImZpbmQiLCJkb21TZWxlY3RvciIsInJlZnJlc2giLCJyZWxvYWQiLCJyZWxvYWRDb250cm9sbGVyIiwic3VibWl0TW9kZWxGb3JtRGlzdHJpYnV0b3IiLCIkZm9ybSIsImUiLCJfc3VibWl0TW9kZWxGb3JtIiwic3VibWl0TW9kZWxGb3JtIiwiZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSIsIml0ZXJhdGVBbGxDaGlsZHJlbiIsInJlcyIsInBfbGlzdCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiZGF0YSIsInN5bmNGb3JtIiwiaW5zdGFuY2VfdmFsdWUiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbSIsInBrIiwiY3JlYXRlIiwic3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyIsImNvbnRyb2xsZXIiLCJjYXRjaCIsIiQiLCJodG1sIiwic3VibWl0X21vZGVsX2Zvcm1fZXJyb3IiLCJPYmplY3QiLCJhc3NpZ24iLCJmbGF0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/AbstractSDC.js\n");
28
28
 
29
29
  /***/ }),
30
30
 
@@ -64,7 +64,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
64
64
  \******************************************/
65
65
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
66
66
 
67
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ app: () => (/* binding */ app)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AbstractSDC.js */ \"./src/simpleDomControl/AbstractSDC.js\");\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_socket_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n\n\n\n\n\n\n\nconst PROPERTIES_UPDATE = {\n 'classname': 'class'\n};\nlet sdcDomFragment = function (element, props) {\n let $new_elem,\n is_self = false;\n if (typeof element === 'string') {\n $new_elem = $(document.createElement(element));\n } else {\n const tagName = `this.${element.name}`;\n $new_elem = $(document.createElement(tagName));\n $new_elem.data('handler', element);\n is_self = true;\n }\n if (props) {\n Object.entries(props).forEach(([k, v]) => {\n if (k.startsWith('on')) {\n $new_elem[0].addEventListener(k.substring(2).toLowerCase(), v);\n } else {\n if (PROPERTIES_UPDATE[k.toLowerCase()]) {\n k = PROPERTIES_UPDATE[k.toLowerCase()];\n }\n $new_elem[0].setAttribute(k, v);\n }\n });\n }\n if (is_self) {\n $new_elem.addClass('_bind_to_update_handler _with_handler');\n }\n return $new_elem;\n};\nwindow.sdcDom = function (tagName, props, ...children) {\n if (!tagName) {\n return '';\n }\n const $new_elem = sdcDomFragment(tagName, props);\n for (const c of children) {\n $new_elem.append(c);\n }\n return $new_elem;\n};\nlet app = {\n CSRF_TOKEN: window.CSRF_TOKEN || '',\n LANGUAGE_CODE: window.LANGUAGE_CODE || 'en',\n DEBUG: window.DEBUG || false,\n VERSION: window.VERSION || '0.0',\n tagNames: [],\n Global: _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global,\n rootController: null,\n _isInit: false,\n _origin_trigger: null,\n init_sdc: () => {\n if (!app._isInit) {\n app._isInit = true;\n if (!app._origin_trigger) {\n app._origin_trigger = $.fn.trigger;\n $.fn.trigger = function (event) {\n const ev_type = {}.hasOwnProperty.call(event, \"type\") ? event.type : event;\n if (!_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.includes(ev_type)) {\n _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.push(ev_type);\n $(window).on(ev_type, _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.windowEventHandler);\n }\n return app._origin_trigger.call(this, event);\n };\n app.updateJquery();\n } else {\n (0,_sdc_socket_js__WEBPACK_IMPORTED_MODULE_6__.close)();\n }\n (0,_sdc_socket_js__WEBPACK_IMPORTED_MODULE_6__.isConnected)();\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.initEvents)();\n app.rootController = app.rootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n }\n app.tagNames = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.tagList)();\n for (let [tag, controller] of Object.entries(app.Global)) {\n if (!controller.$container) _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global[tag].$container = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)();\n }\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)(), app.rootController);\n },\n updateJquery: () => {\n $.fn.safeReplace = function ($elem) {\n return app.safeReplace($(this), $elem);\n };\n $.fn.safeEmpty = function () {\n return app.safeEmpty($(this));\n };\n $.fn.safeRemove = function () {\n return app.safeRemove($(this));\n };\n },\n controllerToTag: Controller => {\n let tagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(Controller.name);\n return tagName.replace(/-controller$/, '');\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n registerGlobal: Controller => {\n let tagName = app.controllerToTag(Controller);\n let globalController = new Controller();\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [globalController, []];\n globalController._tagName = tagName;\n window[(0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName)] = _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global[(0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName)] = globalController;\n },\n cleanCache: () => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.cleanCache)();\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n register: Controller => {\n let tagName = app.controllerToTag(Controller);\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [Controller, []];\n Controller.prototype._tagName = tagName;\n return {\n /**\n *\n * @param {Array<string>} mixins Controller tag names\n */\n addMixin: (...mixins) => {\n for (let mixin of mixins) {\n let mixinName;\n if (typeof mixin === \"string\") {\n mixinName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(mixin);\n } else if (mixin) {\n mixinName = app.controllerToTag(mixin);\n }\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][1].push(mixinName);\n }\n }\n };\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n post: (controller, url, args) => {\n if (!args) {\n args = {};\n }\n args.CSRF_TOKEN = app.CSRF_TOKEN;\n return app.ajax(controller, url, params, $.post);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n get: (controller, url, args) => {\n return app.ajax(controller, url, args, $.get);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @param {function} method $.get or $.post\n * @return {Promise}\n */\n ajax: (controller, url, args, method) => {\n if (!args) {\n args = {};\n }\n args.VERSION = app.VERSION;\n args._method = args._method || 'api';\n const p = new Promise((resolve, reject) => {\n return method(url, args).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n p.then(() => {\n app.refresh(controller.$container);\n });\n }\n }).catch(reject);\n });\n return p;\n },\n submitFormAndUpdateView: (controller, form, url, method) => {\n let formData = new FormData(form);\n const redirector = a => {\n if (a['url-link']) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n window.location.href = a['url'];\n }\n };\n const p = new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n redirector(a);\n } else {\n p.then(() => {\n app.refresh(controller.$container);\n });\n }\n }).catch((a, b, c) => {\n if (a.status === 301) {\n a = a.responseJSON;\n redirector(a);\n resolve(a, b, c);\n } else {\n reject(a, b, c);\n }\n });\n });\n return p;\n },\n submitForm: (form, url, method) => {\n let formData = new FormData(form);\n return new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then(resolve).catch(reject);\n });\n },\n /**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\n getController: $elem => (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($elem),\n /**\n * safeEmpty removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM container to be emptyed\n */\n safeEmpty: $elem => {\n let $children = $elem.children();\n $children.each(function (_, element) {\n let $element = $(element);\n app.safeRemove($element);\n });\n return $elem;\n },\n /**\n * safeReplace removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM to be repleaced\n * @param $new - jQuery new DOM container\n */\n safeReplace: ($elem, $new) => {\n $new.insertBefore($elem);\n return app.safeRemove($elem);\n },\n /**\n * safeRemove removes a dom and deletes all child controller safely.\n *\n * @param $elem - jQuery Dom\n */\n safeRemove: $elem => {\n $elem.each(function () {\n let $this = $(this);\n if ($this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`)) {\n $this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`).remove();\n }\n });\n $elem.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const controller = $(this).data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`);\n controller && controller.remove();\n });\n return $elem.remove();\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @return {Promise<jQuery>}\n */\n reloadController: controller => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadHTMLController)(controller).then(html => {\n let $html = $(html);\n controller._childController = {};\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, $html, controller).then(() => {\n app.safeEmpty(controller.$container);\n controller.$container.append($html);\n app.refresh(controller.$container, controller);\n });\n });\n },\n /**\n *\n * @param {jquery} $container\n * @param {AbstractSDC} leafController\n * @return {Promise<jQuery>}\n */\n refresh: ($container, leafController) => {\n if (!leafController) {\n leafController = app.getController($container);\n }\n if (!leafController) {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)();\n }\n let controller = leafController;\n let controllerList = [];\n while (controller) {\n controller._isEventsSet = false;\n controllerList.unshift(controller);\n controller = controller._parentController;\n }\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, leafController.$container, leafController).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadMethodHTML)(leafController).then(() => {\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.setControllerEvents)(con);\n }\n leafController.onRefresh($container);\n });\n });\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTtFQUNJa0MsT0FBTyxFQUFFQSxDQUFDakMsVUFBVSxFQUFFMEQsY0FBYyxLQUFLO0lBQ3JDLElBQUksQ0FBQ0EsY0FBYyxFQUFFO01BQ2pCQSxjQUFjLEdBQUdoRixHQUFHLENBQUMxQyxhQUFhLENBQUNnRSxVQUFVLENBQUM7SUFDbEQ7SUFFQSxJQUFJLENBQUMwRCxjQUFjLEVBQUU7TUFDakIsT0FBTy9ILGtFQUFtQixDQUFDLENBQUM7SUFDaEM7SUFFQSxJQUFJb0UsVUFBVSxHQUFHMkQsY0FBYztJQUMvQixJQUFJckgsY0FBYyxHQUFHLEVBQUU7SUFDdkIsT0FBTzBELFVBQVUsRUFBRTtNQUNmQSxVQUFVLENBQUM0RCxZQUFZLEdBQUcsS0FBSztNQUMvQnRILGNBQWMsQ0FBQ3VILE9BQU8sQ0FBQzdELFVBQVUsQ0FBQztNQUNsQ0EsVUFBVSxHQUFHQSxVQUFVLENBQUM4RCxpQkFBaUI7SUFDN0M7SUFFQSxPQUFPakksMkVBQTZCLENBQUM4QyxHQUFHLENBQUNLLFFBQVEsRUFBRTJFLGNBQWMsQ0FBQzFELFVBQVUsRUFBRTBELGNBQWMsQ0FBQyxDQUFDN0IsSUFBSSxDQUFDLE1BQU07TUFDckczRiw4REFBZ0IsQ0FBQ3dILGNBQWMsQ0FBQyxDQUFDN0IsSUFBSSxDQUFDLE1BQU07UUFDeEMsS0FBSyxJQUFJaUMsR0FBRyxJQUFJekgsY0FBYyxFQUFFO1VBQzVCRyx1RUFBbUIsQ0FBQ3NILEdBQUcsQ0FBQztRQUM1QjtRQUVBSixjQUFjLENBQUNLLFNBQVMsQ0FBQy9ELFVBQVUsQ0FBQztNQUN4QyxDQUFDLENBQUM7SUFFTixDQUFDLENBQUM7RUFDTjtBQUNKLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX21haW4uanM/MDhmYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGNhbWVsQ2FzZVRvVGFnTmFtZSxcbiAgICB0YWdOYW1lVG9DYW1lbENhc2UsXG4gICAgZ2V0Qm9keSxcbiAgICB1cGxvYWRGaWxlRm9ybURhdGEsXG4gICAgcHJvbWlzZUR1bW15RmFjdG9yeVxufSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gICAgcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIsXG4gICAgcmVsb2FkSFRNTENvbnRyb2xsZXIsXG4gICAgREFUQV9DT05UUk9MTEVSX0tFWSxcbiAgICBDT05UUk9MTEVSX0NMQVNTLCBnZXRDb250cm9sbGVyLCBjbGVhbkNhY2hlLCByZWxvYWRNZXRob2RIVE1MXG59IGZyb20gXCIuL3NkY192aWV3LmpzXCI7XG5pbXBvcnQge0Fic3RyYWN0U0RDfSBmcm9tIFwiLi9BYnN0cmFjdFNEQy5qc1wiO1xuaW1wb3J0IHtHbG9iYWwsIGNvbnRyb2xsZXJMaXN0LCB0YWdMaXN0fSBmcm9tIFwiLi9zZGNfY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IHtpbml0RXZlbnRzLCBzZXRDb250cm9sbGVyRXZlbnRzLCBTVERfRVZFTlRfTElTVCwgd2luZG93RXZlbnRIYW5kbGVyfSBmcm9tIFwiLi9zZGNfZG9tX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHt0cmlnZ2VyfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5pbXBvcnQge2lzQ29ubmVjdGVkLCBjbG9zZX0gZnJvbSBcIi4vc2RjX3NvY2tldC5qc1wiO1xuXG5jb25zdCBQUk9QRVJUSUVTX1VQREFURSA9IHsnY2xhc3NuYW1lJzogJ2NsYXNzJ31cblxubGV0IHNkY0RvbUZyYWdtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHByb3BzKSB7XG4gICAgbGV0ICRuZXdfZWxlbSwgaXNfc2VsZiA9IGZhbHNlO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsZW1lbnQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gYHRoaXMuJHtlbGVtZW50Lm5hbWV9YDtcbiAgICAgICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpKTtcbiAgICAgICAgJG5ld19lbGVtLmRhdGEoJ2hhbmRsZXInLCBlbGVtZW50KTtcbiAgICAgICAgaXNfc2VsZiA9IHRydWVcbiAgICB9XG5cblxuICAgIGlmIChwcm9wcykge1xuICAgICAgICBPYmplY3QuZW50cmllcyhwcm9wcykuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBpZiAoay5zdGFydHNXaXRoKCdvbicpKSB7XG4gICAgICAgICAgICAgICAgJG5ld19lbGVtWzBdLmFkZEV2ZW50TGlzdGVuZXIoay5zdWJzdHJpbmcoMikudG9Mb3dlckNhc2UoKSwgdik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRuZXdfZWxlbVswXS5zZXRBdHRyaWJ1dGUoaywgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc19zZWxmKSB7XG4gICAgICAgICRuZXdfZWxlbS5hZGRDbGFzcygnX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgX3dpdGhfaGFuZGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiAkbmV3X2VsZW07XG59XG5cbndpbmRvdy5zZGNEb20gPSBmdW5jdGlvbiAodGFnTmFtZSwgcHJvcHMsIC4uLmNoaWxkcmVuKSB7XG4gICAgaWYgKCF0YWdOYW1lKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgJG5ld19lbGVtID0gc2RjRG9tRnJhZ21lbnQodGFnTmFtZSwgcHJvcHMpO1xuICAgIGZvciAoY29uc3QgYyBvZiBjaGlsZHJlbikge1xuICAgICAgICAkbmV3X2VsZW0uYXBwZW5kKGMpO1xuICAgIH1cbiAgICByZXR1cm4gJG5ld19lbGVtO1xuXG59XG5cbmV4cG9ydCBsZXQgYXBwID0ge1xuICAgIENTUkZfVE9LRU46IHdpbmRvdy5DU1JGX1RPS0VOIHx8ICcnLFxuICAgIExBTkdVQUdFX0NPREU6IHdpbmRvdy5MQU5HVUFHRV9DT0RFIHx8ICdlbicsXG4gICAgREVCVUc6IHdpbmRvdy5ERUJVRyB8fCBmYWxzZSxcbiAgICBWRVJTSU9OOiB3aW5kb3cuVkVSU0lPTiB8fCAnMC4wJyxcbiAgICB0YWdOYW1lczogW10sXG4gICAgR2xvYmFsOiBHbG9iYWwsXG4gICAgcm9vdENvbnRyb2xsZXI6IG51bGwsXG4gICAgX2lzSW5pdDogZmFsc2UsXG4gICAgX29yaWdpbl90cmlnZ2VyOiBudWxsLFxuXG4gICAgaW5pdF9zZGM6ICgpID0+IHtcbiAgICAgICAgaWYgKCFhcHAuX2lzSW5pdCkge1xuICAgICAgICAgICAgYXBwLl9pc0luaXQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFhcHAuX29yaWdpbl90cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgYXBwLl9vcmlnaW5fdHJpZ2dlciA9ICQuZm4udHJpZ2dlcjtcbiAgICAgICAgICAgICAgICAkLmZuLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZfdHlwZSA9IHt9Lmhhc093blByb3BlcnR5LmNhbGwoZXZlbnQsIFwidHlwZVwiKSA/IGV2ZW50LnR5cGUgOiBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFTVERfRVZFTlRfTElTVC5pbmNsdWRlcyhldl90eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgU1REX0VWRU5UX0xJU1QucHVzaChldl90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQod2luZG93KS5vbihldl90eXBlLCB3aW5kb3dFdmVudEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHAuX29yaWdpbl90cmlnZ2VyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcbiAgICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpc0Nvbm5lY3RlZCgpO1xuXG4gICAgICAgICAgICBpbml0RXZlbnRzKCk7XG5cbiAgICAgICAgICAgIGFwcC5yb290Q29udHJvbGxlciA9IGFwcC5yb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcC50YWdOYW1lcyA9IHRhZ0xpc3QoKTtcblxuICAgICAgICBmb3IobGV0IFt0YWcsIGNvbnRyb2xsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGFwcC5HbG9iYWwpKSB7XG4gICAgICAgICAgICBpZighY29udHJvbGxlci4kY29udGFpbmVyKSBHbG9iYWxbdGFnXS4kY29udGFpbmVyID0gZ2V0Qm9keSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgZ2V0Qm9keSgpLCBhcHAucm9vdENvbnRyb2xsZXIpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVKcXVlcnk6ICgpPT4ge1xuICAgICAgICAkLmZuLnNhZmVSZXBsYWNlID0gZnVuY3Rpb24gKCRlbGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnNhZmVSZXBsYWNlKCQodGhpcyksICRlbGVtKTtcbiAgICAgICAgfVxuICAgICAgICAkLmZuLnNhZmVFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHAuc2FmZUVtcHR5KCQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgICQuZm4uc2FmZVJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjb250cm9sbGVyVG9UYWc6IChDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGxldCB0YWdOYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKENvbnRyb2xsZXIubmFtZSk7XG4gICAgICAgIHJldHVybiB0YWdOYW1lLnJlcGxhY2UoLy1jb250cm9sbGVyJC8sICcnKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAgICovXG4gICAgcmVnaXN0ZXJHbG9iYWw6IChDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGxldCB0YWdOYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhDb250cm9sbGVyKTtcbiAgICAgICAgbGV0IGdsb2JhbENvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICBjb250cm9sbGVyTGlzdFt0YWdOYW1lXSA9IFtnbG9iYWxDb250cm9sbGVyLCBbXV07XG4gICAgICAgIGdsb2JhbENvbnRyb2xsZXIuX3RhZ05hbWUgPSB0YWdOYW1lO1xuICAgICAgICB3aW5kb3dbdGFnTmFtZVRvQ2FtZWxDYXNlKHRhZ05hbWUpXSA9IEdsb2JhbFt0YWdOYW1lVG9DYW1lbENhc2UodGFnTmFtZSldID0gZ2xvYmFsQ29udHJvbGxlcjtcbiAgICB9LFxuXG4gICAgY2xlYW5DYWNoZTogKCkgPT4ge1xuICAgICAgICBjbGVhbkNhY2hlKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gQ29udHJvbGxlclxuICAgICAqL1xuICAgIHJlZ2lzdGVyOiAoQ29udHJvbGxlcikgPT4ge1xuICAgICAgICBsZXQgdGFnTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcoQ29udHJvbGxlcik7XG4gICAgICAgIGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdID0gW0NvbnRyb2xsZXIsIFtdXTtcbiAgICAgICAgQ29udHJvbGxlci5wcm90b3R5cGUuX3RhZ05hbWUgPSB0YWdOYW1lO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBtaXhpbnMgQ29udHJvbGxlciB0YWcgbmFtZXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYWRkTWl4aW46ICguLi5taXhpbnMpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBtaXhpbiBvZiBtaXhpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1peGluTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtaXhpbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW5OYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKG1peGluKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtaXhpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW5OYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhtaXhpbilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyTGlzdFt0YWdOYW1lXVsxXS5wdXNoKG1peGluTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgcG9zdDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MuQ1NSRl9UT0tFTiA9IGFwcC5DU1JGX1RPS0VOO1xuICAgICAgICByZXR1cm4gYXBwLmFqYXgoY29udHJvbGxlciwgdXJsLCBwYXJhbXMsICQucG9zdCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgZ2V0OiAoY29udHJvbGxlciwgdXJsLCBhcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBhcHAuYWpheChjb250cm9sbGVyLCB1cmwsIGFyZ3MsICQuZ2V0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kICQuZ2V0IG9yICQucG9zdFxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgYWpheDogKGNvbnRyb2xsZXIsIHVybCwgYXJncywgbWV0aG9kKSA9PiB7XG4gICAgICAgIGlmICghYXJncykge1xuICAgICAgICAgICAgYXJncyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncy5WRVJTSU9OID0gYXBwLlZFUlNJT047XG4gICAgICAgIGFyZ3MuX21ldGhvZCA9IGFyZ3MuX21ldGhvZCB8fCAnYXBpJztcblxuICAgICAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG1ldGhvZCh1cmwsIGFyZ3MpLnRoZW4oKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gJ3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfSxcblxuICAgIHN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3OiAoY29udHJvbGxlciwgZm9ybSwgdXJsLCBtZXRob2QpID0+IHtcbiAgICAgICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm0pO1xuICAgICAgICBjb25zdCByZWRpcmVjdG9yID0gKGEpPT4ge1xuICAgICAgICAgICAgaWYgKGFbJ3VybC1saW5rJ10pIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBhWyd1cmwnXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHVwbG9hZEZpbGVGb3JtRGF0YShmb3JtRGF0YSwgKHVybCB8fCBmb3JtLmFjdGlvbiksIChtZXRob2QgfHwgZm9ybS5tZXRob2QpKVxuICAgICAgICAgICAgICAgIC50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gJ3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RvcihhKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGEsYixjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGEuc3RhdHVzID09PSAzMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBhLnJlc3BvbnNlSlNPTjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0b3IoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHA7XG5cbiAgICB9LFxuICAgIHN1Ym1pdEZvcm06IChmb3JtLCB1cmwsIG1ldGhvZCkgPT4ge1xuICAgICAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB1cGxvYWRGaWxlRm9ybURhdGEoZm9ybURhdGEsICh1cmwgfHwgZm9ybS5hY3Rpb24pLCAobWV0aG9kIHx8IGZvcm0ubWV0aG9kKSlcbiAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1cbiAgICAgKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAgICAgKi9cbiAgICBnZXRDb250cm9sbGVyOiAoJGVsZW0pID0+IGdldENvbnRyb2xsZXIoJGVsZW0pLFxuXG4gICAgLyoqXG4gICAgICogc2FmZUVtcHR5IHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIGNvbnRhaW5lciB0byBiZSBlbXB0eWVkXG4gICAgICovXG4gICAgc2FmZUVtcHR5OiAoJGVsZW0pID0+IHtcbiAgICAgICAgbGV0ICRjaGlsZHJlbiA9ICRlbGVtLmNoaWxkcmVuKCk7XG4gICAgICAgICRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uIChfLCBlbGVtZW50KSB7XG4gICAgICAgICAgICBsZXQgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYXBwLnNhZmVSZW1vdmUoJGVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGVsZW07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHNhZmVSZXBsYWNlIHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIHRvIGJlIHJlcGxlYWNlZFxuICAgICAqIEBwYXJhbSAkbmV3IC0galF1ZXJ5IG5ldyBET00gY29udGFpbmVyXG4gICAgICovXG4gICAgc2FmZVJlcGxhY2U6ICgkZWxlbSwgJG5ldykgPT4ge1xuICAgICAgICAkbmV3Lmluc2VydEJlZm9yZSgkZWxlbSk7XG4gICAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkZWxlbSk7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogc2FmZVJlbW92ZSByZW1vdmVzIGEgZG9tIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBEb21cbiAgICAgKi9cbiAgICBzYWZlUmVtb3ZlOiAoJGVsZW0pID0+IHtcbiAgICAgICAgJGVsZW0uZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICAgICAgaWYgKCR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGVsZW0uZmluZChgLiR7Q09OVFJPTExFUl9DTEFTU31gKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSAkKHRoaXMpLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuICRlbGVtLnJlbW92ZSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAgICovXG4gICAgcmVsb2FkQ29udHJvbGxlcjogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgICAgICAgIGxldCAkaHRtbCA9ICQoaHRtbCk7XG4gICAgICAgICAgICBjb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcbiAgICAgICAgICAgIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgJGh0bWwsIGNvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFwcC5zYWZlRW1wdHkoY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXBwZW5kKCRodG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaChjb250cm9sbGVyLiRjb250YWluZXIsIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gbGVhZkNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAgICovXG4gICAgcmVmcmVzaDogKCRjb250YWluZXIsIGxlYWZDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGxlYWZDb250cm9sbGVyID0gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRhaW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWxlYWZDb250cm9sbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZUR1bW15RmFjdG9yeSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBsZWFmQ29udHJvbGxlcjtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXJMaXN0ID0gW107XG4gICAgICAgIHdoaWxlIChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgICAgICAgICAgY29udHJvbGxlckxpc3QudW5zaGlmdChjb250cm9sbGVyKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyLl9wYXJlbnRDb250cm9sbGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgbGVhZkNvbnRyb2xsZXIuJGNvbnRhaW5lciwgbGVhZkNvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmVsb2FkTWV0aG9kSFRNTChsZWFmQ29udHJvbGxlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY29uIG9mIGNvbnRyb2xsZXJMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbnRyb2xsZXJFdmVudHMoY29uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZWFmQ29udHJvbGxlci5vblJlZnJlc2goJGNvbnRhaW5lcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9LFxufTsiXSwibmFtZXMiOlsiY2FtZWxDYXNlVG9UYWdOYW1lIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwiZ2V0Qm9keSIsInVwbG9hZEZpbGVGb3JtRGF0YSIsInByb21pc2VEdW1teUZhY3RvcnkiLCJyZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lciIsInJlbG9hZEhUTUxDb250cm9sbGVyIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsIkNPTlRST0xMRVJfQ0xBU1MiLCJnZXRDb250cm9sbGVyIiwiY2xlYW5DYWNoZSIsInJlbG9hZE1ldGhvZEhUTUwiLCJBYnN0cmFjdFNEQyIsIkdsb2JhbCIsImNvbnRyb2xsZXJMaXN0IiwidGFnTGlzdCIsImluaXRFdmVudHMiLCJzZXRDb250cm9sbGVyRXZlbnRzIiwiU1REX0VWRU5UX0xJU1QiLCJ3aW5kb3dFdmVudEhhbmRsZXIiLCJ0cmlnZ2VyIiwiaXNDb25uZWN0ZWQiLCJjbG9zZSIsIlBST1BFUlRJRVNfVVBEQVRFIiwic2RjRG9tRnJhZ21lbnQiLCJlbGVtZW50IiwicHJvcHMiLCIkbmV3X2VsZW0iLCJpc19zZWxmIiwiJCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInRhZ05hbWUiLCJuYW1lIiwiZGF0YSIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwiayIsInYiLCJzdGFydHNXaXRoIiwiYWRkRXZlbnRMaXN0ZW5lciIsInN1YnN0cmluZyIsInRvTG93ZXJDYXNlIiwic2V0QXR0cmlidXRlIiwiYWRkQ2xhc3MiLCJ3aW5kb3ciLCJzZGNEb20iLCJjaGlsZHJlbiIsImMiLCJhcHBlbmQiLCJhcHAiLCJDU1JGX1RPS0VOIiwiTEFOR1VBR0VfQ09ERSIsIkRFQlVHIiwiVkVSU0lPTiIsInRhZ05hbWVzIiwicm9vdENvbnRyb2xsZXIiLCJfaXNJbml0IiwiX29yaWdpbl90cmlnZ2VyIiwiaW5pdF9zZGMiLCJmbiIsImV2ZW50IiwiZXZfdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInR5cGUiLCJpbmNsdWRlcyIsInB1c2giLCJvbiIsInVwZGF0ZUpxdWVyeSIsInRhZyIsImNvbnRyb2xsZXIiLCIkY29udGFpbmVyIiwic2FmZVJlcGxhY2UiLCIkZWxlbSIsInNhZmVFbXB0eSIsInNhZmVSZW1vdmUiLCJjb250cm9sbGVyVG9UYWciLCJDb250cm9sbGVyIiwicmVwbGFjZSIsInJlZ2lzdGVyR2xvYmFsIiwiZ2xvYmFsQ29udHJvbGxlciIsIl90YWdOYW1lIiwicmVnaXN0ZXIiLCJwcm90b3R5cGUiLCJhZGRNaXhpbiIsIm1peGlucyIsIm1peGluIiwibWl4aW5OYW1lIiwicG9zdCIsInVybCIsImFyZ3MiLCJhamF4IiwicGFyYW1zIiwiZ2V0IiwibWV0aG9kIiwiX21ldGhvZCIsInAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInRoZW4iLCJhIiwiYiIsInN0YXR1cyIsInJlZnJlc2giLCJjYXRjaCIsInN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3IiwiZm9ybSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJyZWRpcmVjdG9yIiwibG9jYXRpb24iLCJocmVmIiwiYWN0aW9uIiwicmVzcG9uc2VKU09OIiwic3VibWl0Rm9ybSIsIiRjaGlsZHJlbiIsImVhY2giLCJfIiwiJGVsZW1lbnQiLCIkbmV3IiwiaW5zZXJ0QmVmb3JlIiwiJHRoaXMiLCJyZW1vdmUiLCJmaW5kIiwicmVsb2FkQ29udHJvbGxlciIsImh0bWwiLCIkaHRtbCIsIl9jaGlsZENvbnRyb2xsZXIiLCJsZWFmQ29udHJvbGxlciIsIl9pc0V2ZW50c1NldCIsInVuc2hpZnQiLCJfcGFyZW50Q29udHJvbGxlciIsImNvbiIsIm9uUmVmcmVzaCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_main.js\n");
67
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ app: () => (/* binding */ app)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AbstractSDC.js */ \"./src/simpleDomControl/AbstractSDC.js\");\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n\n\n\n\n\n\n\nconst PROPERTIES_UPDATE = {\n 'classname': 'class'\n};\nlet sdcDomFragment = function (element, props) {\n let $new_elem,\n is_self = false;\n if (typeof element === 'string') {\n $new_elem = $(document.createElement(element));\n } else {\n const tagName = `this.${element.name}`;\n $new_elem = $(document.createElement(tagName));\n $new_elem.data('handler', element);\n is_self = true;\n }\n if (props) {\n Object.entries(props).forEach(([k, v]) => {\n if (k.startsWith('on')) {\n $new_elem[0].addEventListener(k.substring(2).toLowerCase(), v);\n } else {\n if (PROPERTIES_UPDATE[k.toLowerCase()]) {\n k = PROPERTIES_UPDATE[k.toLowerCase()];\n }\n $new_elem[0].setAttribute(k, v);\n }\n });\n }\n if (is_self) {\n $new_elem.addClass('_bind_to_update_handler _with_handler');\n }\n return $new_elem;\n};\nwindow.sdcDom = function (tagName, props, ...children) {\n if (!tagName) {\n return '';\n }\n const $new_elem = sdcDomFragment(tagName, props);\n for (const c of children) {\n $new_elem.append(c);\n }\n return $new_elem;\n};\nlet app = {\n CSRF_TOKEN: window.CSRF_TOKEN || '',\n LANGUAGE_CODE: window.LANGUAGE_CODE || 'en',\n DEBUG: window.DEBUG || false,\n VERSION: window.VERSION || '0.0',\n tagNames: [],\n Global: _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global,\n rootController: null,\n _isInit: false,\n _origin_trigger: null,\n init_sdc: () => {\n if (!app._isInit) {\n app._isInit = true;\n if (!app._origin_trigger) {\n app._origin_trigger = $.fn.trigger;\n $.fn.trigger = function (event) {\n const ev_type = {}.hasOwnProperty.call(event, \"type\") ? event.type : event;\n if (!_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.includes(ev_type)) {\n _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.push(ev_type);\n $(window).on(ev_type, _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.windowEventHandler);\n }\n return app._origin_trigger.call(this, event);\n };\n app.updateJquery();\n } else {\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.close)();\n }\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.isConnected)();\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.initEvents)();\n app.rootController = app.rootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n }\n app.tagNames = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.tagList)();\n for (let [tag, controller] of Object.entries(app.Global)) {\n if (!controller.$container) _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global[tag].$container = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)();\n }\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)(), app.rootController);\n },\n updateJquery: () => {\n $.fn.safeReplace = function ($elem) {\n return app.safeReplace($(this), $elem);\n };\n $.fn.safeEmpty = function () {\n return app.safeEmpty($(this));\n };\n $.fn.safeRemove = function () {\n return app.safeRemove($(this));\n };\n },\n controllerToTag: Controller => {\n let tagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(Controller.name);\n return tagName.replace(/-controller$/, '');\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n registerGlobal: Controller => {\n let tagName = app.controllerToTag(Controller);\n let globalController = new Controller();\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [globalController, []];\n globalController._tagName = tagName;\n window[(0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName)] = _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global[(0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName)] = globalController;\n },\n cleanCache: () => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.cleanCache)();\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n register: Controller => {\n let tagName = app.controllerToTag(Controller);\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [Controller, []];\n Controller.prototype._tagName = tagName;\n return {\n /**\n *\n * @param {Array<string>} mixins Controller tag names\n */\n addMixin: (...mixins) => {\n for (let mixin of mixins) {\n let mixinName;\n if (typeof mixin === \"string\") {\n mixinName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(mixin);\n } else if (mixin) {\n mixinName = app.controllerToTag(mixin);\n }\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][1].push(mixinName);\n }\n }\n };\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n post: (controller, url, args) => {\n if (!args) {\n args = {};\n }\n args.CSRF_TOKEN = app.CSRF_TOKEN;\n return app.ajax(controller, url, params, $.post);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n get: (controller, url, args) => {\n return app.ajax(controller, url, args, $.get);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @param {function} method $.get or $.post\n * @return {Promise}\n */\n ajax: (controller, url, args, method) => {\n if (!args) {\n args = {};\n }\n args.VERSION = app.VERSION;\n args._method = args._method || 'api';\n const p = new Promise((resolve, reject) => {\n return method(url, args).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n p.then(() => {\n app.refresh(controller.$container);\n });\n }\n }).catch(reject);\n });\n return p;\n },\n submitFormAndUpdateView: (controller, form, url, method) => {\n let formData = new FormData(form);\n const redirector = a => {\n if (a['url-link']) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n window.location.href = a['url'];\n }\n };\n const p = new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n redirector(a);\n } else {\n p.then(() => {\n app.refresh(controller.$container);\n });\n }\n }).catch((a, b, c) => {\n if (a.status === 301) {\n a = a.responseJSON;\n redirector(a);\n resolve(a, b, c);\n } else {\n reject(a, b, c);\n }\n });\n });\n return p;\n },\n submitForm: (form, url, method) => {\n let formData = new FormData(form);\n return new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then(resolve).catch(reject);\n });\n },\n /**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\n getController: $elem => (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($elem),\n /**\n * safeEmpty removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM container to be emptyed\n */\n safeEmpty: $elem => {\n let $children = $elem.children();\n $children.each(function (_, element) {\n let $element = $(element);\n app.safeRemove($element);\n });\n return $elem;\n },\n /**\n * safeReplace removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM to be repleaced\n * @param $new - jQuery new DOM container\n */\n safeReplace: ($elem, $new) => {\n $new.insertBefore($elem);\n return app.safeRemove($elem);\n },\n /**\n * safeRemove removes a dom and deletes all child controller safely.\n *\n * @param $elem - jQuery Dom\n */\n safeRemove: $elem => {\n $elem.each(function () {\n let $this = $(this);\n if ($this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`)) {\n $this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`).remove();\n }\n });\n $elem.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const controller = $(this).data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`);\n controller && controller.remove();\n });\n return $elem.remove();\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @return {Promise<jQuery>}\n */\n reloadController: controller => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadHTMLController)(controller).then(html => {\n let $html = $(html);\n controller._childController = {};\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, $html, controller).then(() => {\n app.safeEmpty(controller.$container);\n controller.$container.append($html);\n app.refresh(controller.$container, controller);\n });\n });\n },\n /**\n *\n * @param {jquery} $container\n * @param {AbstractSDC} leafController\n * @return {Promise<jQuery>}\n */\n refresh: ($container, leafController) => {\n if (!leafController) {\n leafController = app.getController($container);\n }\n if (!leafController) {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)();\n }\n let controller = leafController;\n let controllerList = [];\n while (controller) {\n controller._isEventsSet = false;\n controllerList.unshift(controller);\n controller = controller._parentController;\n }\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, leafController.$container, leafController).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadMethodHTML)(leafController).then(() => {\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.setControllerEvents)(con);\n }\n leafController.onRefresh($container);\n });\n });\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7RUFDSWtDLE9BQU8sRUFBRUEsQ0FBQ2pDLFVBQVUsRUFBRTBELGNBQWMsS0FBSztJQUNyQyxJQUFJLENBQUNBLGNBQWMsRUFBRTtNQUNqQkEsY0FBYyxHQUFHaEYsR0FBRyxDQUFDMUMsYUFBYSxDQUFDZ0UsVUFBVSxDQUFDO0lBQ2xEO0lBRUEsSUFBSSxDQUFDMEQsY0FBYyxFQUFFO01BQ2pCLE9BQU8vSCxrRUFBbUIsQ0FBQyxDQUFDO0lBQ2hDO0lBRUEsSUFBSW9FLFVBQVUsR0FBRzJELGNBQWM7SUFDL0IsSUFBSXJILGNBQWMsR0FBRyxFQUFFO0lBQ3ZCLE9BQU8wRCxVQUFVLEVBQUU7TUFDZkEsVUFBVSxDQUFDNEQsWUFBWSxHQUFHLEtBQUs7TUFDL0J0SCxjQUFjLENBQUN1SCxPQUFPLENBQUM3RCxVQUFVLENBQUM7TUFDbENBLFVBQVUsR0FBR0EsVUFBVSxDQUFDOEQsaUJBQWlCO0lBQzdDO0lBRUEsT0FBT2pJLDJFQUE2QixDQUFDOEMsR0FBRyxDQUFDSyxRQUFRLEVBQUUyRSxjQUFjLENBQUMxRCxVQUFVLEVBQUUwRCxjQUFjLENBQUMsQ0FBQzdCLElBQUksQ0FBQyxNQUFNO01BQ3JHM0YsOERBQWdCLENBQUN3SCxjQUFjLENBQUMsQ0FBQzdCLElBQUksQ0FBQyxNQUFNO1FBQ3hDLEtBQUssSUFBSWlDLEdBQUcsSUFBSXpILGNBQWMsRUFBRTtVQUM1QkcsdUVBQW1CLENBQUNzSCxHQUFHLENBQUM7UUFDNUI7UUFFQUosY0FBYyxDQUFDSyxTQUFTLENBQUMvRCxVQUFVLENBQUM7TUFDeEMsQ0FBQyxDQUFDO0lBRU4sQ0FBQyxDQUFDO0VBQ047QUFDSixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19tYWluLmpzPzA4ZmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBjYW1lbENhc2VUb1RhZ05hbWUsXG4gICAgdGFnTmFtZVRvQ2FtZWxDYXNlLFxuICAgIGdldEJvZHksXG4gICAgdXBsb2FkRmlsZUZvcm1EYXRhLFxuICAgIHByb21pc2VEdW1teUZhY3Rvcnlcbn0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5pbXBvcnQge1xuICAgIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyLFxuICAgIHJlbG9hZEhUTUxDb250cm9sbGVyLFxuICAgIERBVEFfQ09OVFJPTExFUl9LRVksXG4gICAgQ09OVFJPTExFUl9DTEFTUywgZ2V0Q29udHJvbGxlciwgY2xlYW5DYWNoZSwgcmVsb2FkTWV0aG9kSFRNTFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuaW1wb3J0IHtBYnN0cmFjdFNEQ30gZnJvbSBcIi4vQWJzdHJhY3RTREMuanNcIjtcbmltcG9ydCB7R2xvYmFsLCBjb250cm9sbGVyTGlzdCwgdGFnTGlzdH0gZnJvbSBcIi4vc2RjX2NvbnRyb2xsZXIuanNcIjtcbmltcG9ydCB7aW5pdEV2ZW50cywgc2V0Q29udHJvbGxlckV2ZW50cywgU1REX0VWRU5UX0xJU1QsIHdpbmRvd0V2ZW50SGFuZGxlcn0gZnJvbSBcIi4vc2RjX2RvbV9ldmVudHMuanNcIjtcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHtpc0Nvbm5lY3RlZCwgY2xvc2V9IGZyb20gXCIuL3NkY19zZXJ2ZXJfY2FsbC5qc1wiO1xuXG5jb25zdCBQUk9QRVJUSUVTX1VQREFURSA9IHsnY2xhc3NuYW1lJzogJ2NsYXNzJ31cblxubGV0IHNkY0RvbUZyYWdtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHByb3BzKSB7XG4gICAgbGV0ICRuZXdfZWxlbSwgaXNfc2VsZiA9IGZhbHNlO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsZW1lbnQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gYHRoaXMuJHtlbGVtZW50Lm5hbWV9YDtcbiAgICAgICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpKTtcbiAgICAgICAgJG5ld19lbGVtLmRhdGEoJ2hhbmRsZXInLCBlbGVtZW50KTtcbiAgICAgICAgaXNfc2VsZiA9IHRydWVcbiAgICB9XG5cblxuICAgIGlmIChwcm9wcykge1xuICAgICAgICBPYmplY3QuZW50cmllcyhwcm9wcykuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBpZiAoay5zdGFydHNXaXRoKCdvbicpKSB7XG4gICAgICAgICAgICAgICAgJG5ld19lbGVtWzBdLmFkZEV2ZW50TGlzdGVuZXIoay5zdWJzdHJpbmcoMikudG9Mb3dlckNhc2UoKSwgdik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRuZXdfZWxlbVswXS5zZXRBdHRyaWJ1dGUoaywgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc19zZWxmKSB7XG4gICAgICAgICRuZXdfZWxlbS5hZGRDbGFzcygnX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgX3dpdGhfaGFuZGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiAkbmV3X2VsZW07XG59XG5cbndpbmRvdy5zZGNEb20gPSBmdW5jdGlvbiAodGFnTmFtZSwgcHJvcHMsIC4uLmNoaWxkcmVuKSB7XG4gICAgaWYgKCF0YWdOYW1lKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgJG5ld19lbGVtID0gc2RjRG9tRnJhZ21lbnQodGFnTmFtZSwgcHJvcHMpO1xuICAgIGZvciAoY29uc3QgYyBvZiBjaGlsZHJlbikge1xuICAgICAgICAkbmV3X2VsZW0uYXBwZW5kKGMpO1xuICAgIH1cbiAgICByZXR1cm4gJG5ld19lbGVtO1xuXG59XG5cbmV4cG9ydCBsZXQgYXBwID0ge1xuICAgIENTUkZfVE9LRU46IHdpbmRvdy5DU1JGX1RPS0VOIHx8ICcnLFxuICAgIExBTkdVQUdFX0NPREU6IHdpbmRvdy5MQU5HVUFHRV9DT0RFIHx8ICdlbicsXG4gICAgREVCVUc6IHdpbmRvdy5ERUJVRyB8fCBmYWxzZSxcbiAgICBWRVJTSU9OOiB3aW5kb3cuVkVSU0lPTiB8fCAnMC4wJyxcbiAgICB0YWdOYW1lczogW10sXG4gICAgR2xvYmFsOiBHbG9iYWwsXG4gICAgcm9vdENvbnRyb2xsZXI6IG51bGwsXG4gICAgX2lzSW5pdDogZmFsc2UsXG4gICAgX29yaWdpbl90cmlnZ2VyOiBudWxsLFxuXG4gICAgaW5pdF9zZGM6ICgpID0+IHtcbiAgICAgICAgaWYgKCFhcHAuX2lzSW5pdCkge1xuICAgICAgICAgICAgYXBwLl9pc0luaXQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFhcHAuX29yaWdpbl90cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgYXBwLl9vcmlnaW5fdHJpZ2dlciA9ICQuZm4udHJpZ2dlcjtcbiAgICAgICAgICAgICAgICAkLmZuLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZfdHlwZSA9IHt9Lmhhc093blByb3BlcnR5LmNhbGwoZXZlbnQsIFwidHlwZVwiKSA/IGV2ZW50LnR5cGUgOiBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFTVERfRVZFTlRfTElTVC5pbmNsdWRlcyhldl90eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgU1REX0VWRU5UX0xJU1QucHVzaChldl90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQod2luZG93KS5vbihldl90eXBlLCB3aW5kb3dFdmVudEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHAuX29yaWdpbl90cmlnZ2VyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcbiAgICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpc0Nvbm5lY3RlZCgpO1xuXG4gICAgICAgICAgICBpbml0RXZlbnRzKCk7XG5cbiAgICAgICAgICAgIGFwcC5yb290Q29udHJvbGxlciA9IGFwcC5yb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcC50YWdOYW1lcyA9IHRhZ0xpc3QoKTtcblxuICAgICAgICBmb3IobGV0IFt0YWcsIGNvbnRyb2xsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGFwcC5HbG9iYWwpKSB7XG4gICAgICAgICAgICBpZighY29udHJvbGxlci4kY29udGFpbmVyKSBHbG9iYWxbdGFnXS4kY29udGFpbmVyID0gZ2V0Qm9keSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgZ2V0Qm9keSgpLCBhcHAucm9vdENvbnRyb2xsZXIpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVKcXVlcnk6ICgpPT4ge1xuICAgICAgICAkLmZuLnNhZmVSZXBsYWNlID0gZnVuY3Rpb24gKCRlbGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnNhZmVSZXBsYWNlKCQodGhpcyksICRlbGVtKTtcbiAgICAgICAgfVxuICAgICAgICAkLmZuLnNhZmVFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHAuc2FmZUVtcHR5KCQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgICQuZm4uc2FmZVJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjb250cm9sbGVyVG9UYWc6IChDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGxldCB0YWdOYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKENvbnRyb2xsZXIubmFtZSk7XG4gICAgICAgIHJldHVybiB0YWdOYW1lLnJlcGxhY2UoLy1jb250cm9sbGVyJC8sICcnKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAgICovXG4gICAgcmVnaXN0ZXJHbG9iYWw6IChDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGxldCB0YWdOYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhDb250cm9sbGVyKTtcbiAgICAgICAgbGV0IGdsb2JhbENvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICBjb250cm9sbGVyTGlzdFt0YWdOYW1lXSA9IFtnbG9iYWxDb250cm9sbGVyLCBbXV07XG4gICAgICAgIGdsb2JhbENvbnRyb2xsZXIuX3RhZ05hbWUgPSB0YWdOYW1lO1xuICAgICAgICB3aW5kb3dbdGFnTmFtZVRvQ2FtZWxDYXNlKHRhZ05hbWUpXSA9IEdsb2JhbFt0YWdOYW1lVG9DYW1lbENhc2UodGFnTmFtZSldID0gZ2xvYmFsQ29udHJvbGxlcjtcbiAgICB9LFxuXG4gICAgY2xlYW5DYWNoZTogKCkgPT4ge1xuICAgICAgICBjbGVhbkNhY2hlKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gQ29udHJvbGxlclxuICAgICAqL1xuICAgIHJlZ2lzdGVyOiAoQ29udHJvbGxlcikgPT4ge1xuICAgICAgICBsZXQgdGFnTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcoQ29udHJvbGxlcik7XG4gICAgICAgIGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdID0gW0NvbnRyb2xsZXIsIFtdXTtcbiAgICAgICAgQ29udHJvbGxlci5wcm90b3R5cGUuX3RhZ05hbWUgPSB0YWdOYW1lO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBtaXhpbnMgQ29udHJvbGxlciB0YWcgbmFtZXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYWRkTWl4aW46ICguLi5taXhpbnMpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBtaXhpbiBvZiBtaXhpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1peGluTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtaXhpbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW5OYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKG1peGluKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtaXhpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW5OYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhtaXhpbilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyTGlzdFt0YWdOYW1lXVsxXS5wdXNoKG1peGluTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgcG9zdDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MuQ1NSRl9UT0tFTiA9IGFwcC5DU1JGX1RPS0VOO1xuICAgICAgICByZXR1cm4gYXBwLmFqYXgoY29udHJvbGxlciwgdXJsLCBwYXJhbXMsICQucG9zdCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgZ2V0OiAoY29udHJvbGxlciwgdXJsLCBhcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBhcHAuYWpheChjb250cm9sbGVyLCB1cmwsIGFyZ3MsICQuZ2V0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kICQuZ2V0IG9yICQucG9zdFxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgYWpheDogKGNvbnRyb2xsZXIsIHVybCwgYXJncywgbWV0aG9kKSA9PiB7XG4gICAgICAgIGlmICghYXJncykge1xuICAgICAgICAgICAgYXJncyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncy5WRVJTSU9OID0gYXBwLlZFUlNJT047XG4gICAgICAgIGFyZ3MuX21ldGhvZCA9IGFyZ3MuX21ldGhvZCB8fCAnYXBpJztcblxuICAgICAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG1ldGhvZCh1cmwsIGFyZ3MpLnRoZW4oKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gJ3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfSxcblxuICAgIHN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3OiAoY29udHJvbGxlciwgZm9ybSwgdXJsLCBtZXRob2QpID0+IHtcbiAgICAgICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm0pO1xuICAgICAgICBjb25zdCByZWRpcmVjdG9yID0gKGEpPT4ge1xuICAgICAgICAgICAgaWYgKGFbJ3VybC1saW5rJ10pIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBhWyd1cmwnXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHVwbG9hZEZpbGVGb3JtRGF0YShmb3JtRGF0YSwgKHVybCB8fCBmb3JtLmFjdGlvbiksIChtZXRob2QgfHwgZm9ybS5tZXRob2QpKVxuICAgICAgICAgICAgICAgIC50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gJ3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RvcihhKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGEsYixjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGEuc3RhdHVzID09PSAzMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBhLnJlc3BvbnNlSlNPTjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0b3IoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHA7XG5cbiAgICB9LFxuICAgIHN1Ym1pdEZvcm06IChmb3JtLCB1cmwsIG1ldGhvZCkgPT4ge1xuICAgICAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB1cGxvYWRGaWxlRm9ybURhdGEoZm9ybURhdGEsICh1cmwgfHwgZm9ybS5hY3Rpb24pLCAobWV0aG9kIHx8IGZvcm0ubWV0aG9kKSlcbiAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1cbiAgICAgKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAgICAgKi9cbiAgICBnZXRDb250cm9sbGVyOiAoJGVsZW0pID0+IGdldENvbnRyb2xsZXIoJGVsZW0pLFxuXG4gICAgLyoqXG4gICAgICogc2FmZUVtcHR5IHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIGNvbnRhaW5lciB0byBiZSBlbXB0eWVkXG4gICAgICovXG4gICAgc2FmZUVtcHR5OiAoJGVsZW0pID0+IHtcbiAgICAgICAgbGV0ICRjaGlsZHJlbiA9ICRlbGVtLmNoaWxkcmVuKCk7XG4gICAgICAgICRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uIChfLCBlbGVtZW50KSB7XG4gICAgICAgICAgICBsZXQgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYXBwLnNhZmVSZW1vdmUoJGVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGVsZW07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHNhZmVSZXBsYWNlIHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIHRvIGJlIHJlcGxlYWNlZFxuICAgICAqIEBwYXJhbSAkbmV3IC0galF1ZXJ5IG5ldyBET00gY29udGFpbmVyXG4gICAgICovXG4gICAgc2FmZVJlcGxhY2U6ICgkZWxlbSwgJG5ldykgPT4ge1xuICAgICAgICAkbmV3Lmluc2VydEJlZm9yZSgkZWxlbSk7XG4gICAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkZWxlbSk7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogc2FmZVJlbW92ZSByZW1vdmVzIGEgZG9tIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBEb21cbiAgICAgKi9cbiAgICBzYWZlUmVtb3ZlOiAoJGVsZW0pID0+IHtcbiAgICAgICAgJGVsZW0uZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICAgICAgaWYgKCR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGVsZW0uZmluZChgLiR7Q09OVFJPTExFUl9DTEFTU31gKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSAkKHRoaXMpLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuICRlbGVtLnJlbW92ZSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAgICovXG4gICAgcmVsb2FkQ29udHJvbGxlcjogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgICAgICAgIGxldCAkaHRtbCA9ICQoaHRtbCk7XG4gICAgICAgICAgICBjb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcbiAgICAgICAgICAgIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgJGh0bWwsIGNvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFwcC5zYWZlRW1wdHkoY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXBwZW5kKCRodG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaChjb250cm9sbGVyLiRjb250YWluZXIsIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gbGVhZkNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAgICovXG4gICAgcmVmcmVzaDogKCRjb250YWluZXIsIGxlYWZDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGxlYWZDb250cm9sbGVyID0gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRhaW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWxlYWZDb250cm9sbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZUR1bW15RmFjdG9yeSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBsZWFmQ29udHJvbGxlcjtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXJMaXN0ID0gW107XG4gICAgICAgIHdoaWxlIChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgICAgICAgICAgY29udHJvbGxlckxpc3QudW5zaGlmdChjb250cm9sbGVyKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyLl9wYXJlbnRDb250cm9sbGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgbGVhZkNvbnRyb2xsZXIuJGNvbnRhaW5lciwgbGVhZkNvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmVsb2FkTWV0aG9kSFRNTChsZWFmQ29udHJvbGxlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY29uIG9mIGNvbnRyb2xsZXJMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbnRyb2xsZXJFdmVudHMoY29uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZWFmQ29udHJvbGxlci5vblJlZnJlc2goJGNvbnRhaW5lcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9LFxufTsiXSwibmFtZXMiOlsiY2FtZWxDYXNlVG9UYWdOYW1lIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwiZ2V0Qm9keSIsInVwbG9hZEZpbGVGb3JtRGF0YSIsInByb21pc2VEdW1teUZhY3RvcnkiLCJyZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lciIsInJlbG9hZEhUTUxDb250cm9sbGVyIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsIkNPTlRST0xMRVJfQ0xBU1MiLCJnZXRDb250cm9sbGVyIiwiY2xlYW5DYWNoZSIsInJlbG9hZE1ldGhvZEhUTUwiLCJBYnN0cmFjdFNEQyIsIkdsb2JhbCIsImNvbnRyb2xsZXJMaXN0IiwidGFnTGlzdCIsImluaXRFdmVudHMiLCJzZXRDb250cm9sbGVyRXZlbnRzIiwiU1REX0VWRU5UX0xJU1QiLCJ3aW5kb3dFdmVudEhhbmRsZXIiLCJ0cmlnZ2VyIiwiaXNDb25uZWN0ZWQiLCJjbG9zZSIsIlBST1BFUlRJRVNfVVBEQVRFIiwic2RjRG9tRnJhZ21lbnQiLCJlbGVtZW50IiwicHJvcHMiLCIkbmV3X2VsZW0iLCJpc19zZWxmIiwiJCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInRhZ05hbWUiLCJuYW1lIiwiZGF0YSIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwiayIsInYiLCJzdGFydHNXaXRoIiwiYWRkRXZlbnRMaXN0ZW5lciIsInN1YnN0cmluZyIsInRvTG93ZXJDYXNlIiwic2V0QXR0cmlidXRlIiwiYWRkQ2xhc3MiLCJ3aW5kb3ciLCJzZGNEb20iLCJjaGlsZHJlbiIsImMiLCJhcHBlbmQiLCJhcHAiLCJDU1JGX1RPS0VOIiwiTEFOR1VBR0VfQ09ERSIsIkRFQlVHIiwiVkVSU0lPTiIsInRhZ05hbWVzIiwicm9vdENvbnRyb2xsZXIiLCJfaXNJbml0IiwiX29yaWdpbl90cmlnZ2VyIiwiaW5pdF9zZGMiLCJmbiIsImV2ZW50IiwiZXZfdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInR5cGUiLCJpbmNsdWRlcyIsInB1c2giLCJvbiIsInVwZGF0ZUpxdWVyeSIsInRhZyIsImNvbnRyb2xsZXIiLCIkY29udGFpbmVyIiwic2FmZVJlcGxhY2UiLCIkZWxlbSIsInNhZmVFbXB0eSIsInNhZmVSZW1vdmUiLCJjb250cm9sbGVyVG9UYWciLCJDb250cm9sbGVyIiwicmVwbGFjZSIsInJlZ2lzdGVyR2xvYmFsIiwiZ2xvYmFsQ29udHJvbGxlciIsIl90YWdOYW1lIiwicmVnaXN0ZXIiLCJwcm90b3R5cGUiLCJhZGRNaXhpbiIsIm1peGlucyIsIm1peGluIiwibWl4aW5OYW1lIiwicG9zdCIsInVybCIsImFyZ3MiLCJhamF4IiwicGFyYW1zIiwiZ2V0IiwibWV0aG9kIiwiX21ldGhvZCIsInAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInRoZW4iLCJhIiwiYiIsInN0YXR1cyIsInJlZnJlc2giLCJjYXRjaCIsInN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3IiwiZm9ybSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJyZWRpcmVjdG9yIiwibG9jYXRpb24iLCJocmVmIiwiYWN0aW9uIiwicmVzcG9uc2VKU09OIiwic3VibWl0Rm9ybSIsIiRjaGlsZHJlbiIsImVhY2giLCJfIiwiJGVsZW1lbnQiLCIkbmV3IiwiaW5zZXJ0QmVmb3JlIiwiJHRoaXMiLCJyZW1vdmUiLCJmaW5kIiwicmVsb2FkQ29udHJvbGxlciIsImh0bWwiLCIkaHRtbCIsIl9jaGlsZENvbnRyb2xsZXIiLCJsZWFmQ29udHJvbGxlciIsIl9pc0V2ZW50c1NldCIsInVuc2hpZnQiLCJfcGFyZW50Q29udHJvbGxlciIsImNvbiIsIm9uUmVmcmVzaCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_main.js\n");
68
68
 
69
69
  /***/ }),
70
70
 
@@ -78,13 +78,23 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
78
78
 
79
79
  /***/ }),
80
80
 
81
+ /***/ "./src/simpleDomControl/sdc_server_call.js":
82
+ /*!*************************************************!*\
83
+ !*** ./src/simpleDomControl/sdc_server_call.js ***!
84
+ \*************************************************/
85
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
86
+
87
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ callServer: () => (/* binding */ callServer),\n/* harmony export */ close: () => (/* binding */ close),\n/* harmony export */ isConnected: () => (/* binding */ isConnected)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\nlet IS_CONNECTED = false;\nlet IS_CONNECTING = false;\nlet SDC_SOCKET = null;\nlet OPEN_REQUESTS = {};\nfunction callServer(app, controller, parsedContentUrl, funcName, args) {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n return socketCallServer(app, controller, funcName, args);\n } else {\n return postCallServer(parsedContentUrl, funcName, args);\n }\n}\nfunction isConnected() {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n return socketIsConnected();\n } else {\n return Promise.resolve(true);\n }\n}\nfunction close() {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n socketClose();\n }\n}\nfunction postCallServer(parsedContentUrl, funcName, args) {\n if (typeof args !== 'object' && Array.isArray(args) && args === null) {\n args = {\n 'arg0': args\n };\n }\n args = {\n 'data': JSON.stringify(args),\n '_sdc_func_name': funcName,\n '_method': 'sdc_server_call'\n };\n return $.post({\n url: parsedContentUrl,\n data: args,\n beforeSend: function (xhr, settings) {\n xhr.setRequestHeader(\"X-CSRFToken\", window.CSRF_TOKEN);\n }\n }).then(res => res['_return_data']);\n}\nfunction socketCallServer(app, controller, funcName, args) {\n let id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n isConnected().then(() => {\n SDC_SOCKET.send(JSON.stringify({\n event: 'sdc_call',\n id: id,\n controller: controller,\n app: app,\n function: funcName,\n args: args\n }));\n });\n return new Promise((resolve, reject) => {\n OPEN_REQUESTS[id] = [resolve, reject];\n });\n}\nfunction _connect() {\n IS_CONNECTING = true;\n return new Promise(resolve => {\n if (window.location.protocol === \"https:\") {\n SDC_SOCKET = new WebSocket(`wss://${window.location.host}/sdc_ws/ws/`);\n } else {\n SDC_SOCKET = new WebSocket(`ws://${window.location.host}/sdc_ws/ws/`);\n }\n SDC_SOCKET.onmessage = function (e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][1](data.data || null);\n delete OPEN_REQUESTS[data.id];\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushMsg', data.header || '', data.msg || '');\n }\n if (data.type && data.type === 'sdc_recall') {\n if (OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][0](data.data);\n delete OPEN_REQUESTS[data.id];\n }\n } else if (data.type && data.type === 'sdc_event') {\n let event = data.event;\n if (event) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)(event, data.payload);\n }\n } else if (data.type && data.type === 'sdc_redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('onNavLink', data.link);\n }\n }\n };\n SDC_SOCKET.onclose = function () {\n if (IS_CONNECTED) {\n console.error('SDC Socket closed unexpectedly');\n }\n IS_CONNECTED = false;\n for (const [key, value] of Object.entries(OPEN_REQUESTS)) {\n value[1]({});\n delete OPEN_REQUESTS[key];\n }\n setTimeout(() => {\n _connect();\n }, 1000);\n };\n SDC_SOCKET.onerror = function (err) {\n console.error('Socket encountered error: ', err.message, 'Closing socket');\n if (IS_CONNECTED) {\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n };\n SDC_SOCKET.onopen = function () {\n IS_CONNECTED = true;\n IS_CONNECTING = false;\n resolve();\n };\n });\n}\nfunction socketClose() {\n if (IS_CONNECTED) {\n IS_CONNECTED = false;\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n}\nfunction socketIsConnected() {\n return new Promise(resolve => {\n if (IS_CONNECTED) {\n return resolve();\n } else if (IS_CONNECTING) {\n setTimeout(() => {\n isConnected().then(() => {\n resolve();\n });\n }, 200);\n } else {\n return resolve(_connect());\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc2VydmVyX2NhbGwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBc0M7QUFDRTtBQUV4QyxJQUFJRSxZQUFZLEdBQUcsS0FBSztBQUN4QixJQUFJQyxhQUFhLEdBQUcsS0FBSztBQUN6QixJQUFJQyxVQUFVLEdBQUcsSUFBSTtBQUNyQixJQUFJQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRWYsU0FBU0MsVUFBVUEsQ0FBQ0MsR0FBRyxFQUFFQyxVQUFVLEVBQUVDLGdCQUFnQixFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRTtFQUMxRSxJQUFJQyxNQUFNLENBQUNDLDBCQUEwQixFQUFFO0lBQ25DLE9BQU9DLGdCQUFnQixDQUFDUCxHQUFHLEVBQUVDLFVBQVUsRUFBRUUsUUFBUSxFQUFFQyxJQUFJLENBQUM7RUFDNUQsQ0FBQyxNQUFNO0lBQ0gsT0FBT0ksY0FBYyxDQUFDTixnQkFBZ0IsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLENBQUM7RUFDM0Q7QUFFSjtBQUVPLFNBQVNLLFdBQVdBLENBQUEsRUFBRztFQUMxQixJQUFJSixNQUFNLENBQUNDLDBCQUEwQixFQUFFO0lBQ25DLE9BQU9JLGlCQUFpQixDQUFDLENBQUM7RUFDOUIsQ0FBQyxNQUFNO0lBQ0gsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO0VBQ2hDO0FBQ0o7QUFFTyxTQUFTQyxLQUFLQSxDQUFBLEVBQUc7RUFDcEIsSUFBSVIsTUFBTSxDQUFDQywwQkFBMEIsRUFBRTtJQUNuQ1EsV0FBVyxDQUFDLENBQUM7RUFDakI7QUFDSjtBQUVBLFNBQVNOLGNBQWNBLENBQUNOLGdCQUFnQixFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRTtFQUN0RCxJQUFHLE9BQU9BLElBQUksS0FBSyxRQUFRLElBQUlXLEtBQUssQ0FBQ0MsT0FBTyxDQUFDWixJQUFJLENBQUMsSUFBSUEsSUFBSSxLQUFLLElBQUksRUFBRTtJQUNqRUEsSUFBSSxHQUFHO01B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QUFFO01BQ3RCNEQsVUFBVSxDQUFDLE1BQU07UUFDYi9DLFdBQVcsQ0FBQyxDQUFDLENBQUNtQixJQUFJLENBQUMsTUFBTTtVQUNyQmhCLE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDO01BQ04sQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNYLENBQUMsTUFBTTtNQUNILE9BQU9BLE9BQU8sQ0FBQ3VCLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDOUI7RUFDSixDQUFDLENBQUM7QUFDTiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc2VydmVyX2NhbGwuanM/YzNlMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3V1aWR2NH0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5pbXBvcnQge3RyaWdnZXJ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcblxubGV0IElTX0NPTk5FQ1RFRCA9IGZhbHNlO1xubGV0IElTX0NPTk5FQ1RJTkcgPSBmYWxzZTtcbmxldCBTRENfU09DS0VUID0gbnVsbFxubGV0IE9QRU5fUkVRVUVTVFMgPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxTZXJ2ZXIoYXBwLCBjb250cm9sbGVyLCBwYXJzZWRDb250ZW50VXJsLCBmdW5jTmFtZSwgYXJncykge1xuICAgIGlmICh3aW5kb3cuU0VSVkVSX0NBTExfVklBX1dFQl9TT0NLRVQpIHtcbiAgICAgICAgcmV0dXJuIHNvY2tldENhbGxTZXJ2ZXIoYXBwLCBjb250cm9sbGVyLCBmdW5jTmFtZSwgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBvc3RDYWxsU2VydmVyKHBhcnNlZENvbnRlbnRVcmwsIGZ1bmNOYW1lLCBhcmdzKTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29ubmVjdGVkKCkge1xuICAgIGlmICh3aW5kb3cuU0VSVkVSX0NBTExfVklBX1dFQl9TT0NLRVQpIHtcbiAgICAgICAgcmV0dXJuIHNvY2tldElzQ29ubmVjdGVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICBpZiAod2luZG93LlNFUlZFUl9DQUxMX1ZJQV9XRUJfU09DS0VUKSB7XG4gICAgICAgIHNvY2tldENsb3NlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwb3N0Q2FsbFNlcnZlcihwYXJzZWRDb250ZW50VXJsLCBmdW5jTmFtZSwgYXJncykge1xuICAgIGlmKHR5cGVvZiBhcmdzICE9PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KGFyZ3MpICYmIGFyZ3MgPT09IG51bGwpIHtcbiAgICAgICAgYXJncyA9IHsnYXJnMCc6IGFyZ3N9XG4gICAgfVxuICAgIGFyZ3MgPSB7XG4gICAgICAgICdkYXRhJzogSlNPTi5zdHJpbmdpZnkoYXJncyksXG4gICAgICAgICdfc2RjX2Z1bmNfbmFtZSc6IGZ1bmNOYW1lLCAnX21ldGhvZCc6ICdzZGNfc2VydmVyX2NhbGwnXG4gICAgfVxuICAgIHJldHVybiAkLnBvc3Qoe1xuICAgICAgICAgICAgdXJsOiBwYXJzZWRDb250ZW50VXJsLFxuICAgICAgICAgICAgZGF0YTogYXJncyxcbiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uICh4aHIsIHNldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJYLUNTUkZUb2tlblwiLCB3aW5kb3cuQ1NSRl9UT0tFTik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oKHJlcykgPT4gcmVzWydfcmV0dXJuX2RhdGEnXSk7XG59XG5cbmZ1bmN0aW9uIHNvY2tldENhbGxTZXJ2ZXIoYXBwLCBjb250cm9sbGVyLCBmdW5jTmFtZSwgYXJncykge1xuXG4gICAgbGV0IGlkID0gdXVpZHY0KCk7XG4gICAgaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgU0RDX1NPQ0tFVC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiAnc2RjX2NhbGwnLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgY29udHJvbGxlcjogY29udHJvbGxlcixcbiAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgZnVuY3Rpb246IGZ1bmNOYW1lLFxuICAgICAgICAgICAgYXJnczogYXJnc1xuICAgICAgICB9KSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBPUEVOX1JFUVVFU1RTW2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfY29ubmVjdCgpIHtcbiAgICBJU19DT05ORUNUSU5HID0gdHJ1ZTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJodHRwczpcIikge1xuICAgICAgICAgICAgU0RDX1NPQ0tFVCA9IG5ldyBXZWJTb2NrZXQoYHdzczovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L3NkY193cy93cy9gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFNEQ19TT0NLRVQgPSBuZXcgV2ViU29ja2V0KGB3czovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L3NkY193cy93cy9gKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgU0RDX1NPQ0tFVC5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgICAgICAgICBpZiAoZGF0YS5pc19lcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLm1zZyB8fCBkYXRhLmhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdwdXNoRXJyb3JNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoT1BFTl9SRVFVRVNUU1tkYXRhLmlkXSkge1xuICAgICAgICAgICAgICAgICAgICBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdWzFdKGRhdGEuZGF0YSB8fCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcigncHVzaE1zZycsIGRhdGEuaGVhZGVyIHx8ICcnLCBkYXRhLm1zZyB8fCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEudHlwZSAmJiBkYXRhLnR5cGUgPT09ICdzZGNfcmVjYWxsJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoT1BFTl9SRVFVRVNUU1tkYXRhLmlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgT1BFTl9SRVFVRVNUU1tkYXRhLmlkXVswXShkYXRhLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSAmJiBkYXRhLnR5cGUgPT09ICdzZGNfZXZlbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBldmVudCA9IGRhdGEuZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcihldmVudCwgZGF0YS5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSAnc2RjX3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBkYXRhLmxpbmspO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBTRENfU09DS0VULm9uY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoSVNfQ09OTkVDVEVEKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU0RDIFNvY2tldCBjbG9zZWQgdW5leHBlY3RlZGx5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBJU19DT05ORUNURUQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKE9QRU5fUkVRVUVTVFMpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVbMV0oe30pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2tleV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIF9jb25uZWN0KCk7XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfTtcblxuICAgICAgICBTRENfU09DS0VULm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTb2NrZXQgZW5jb3VudGVyZWQgZXJyb3I6ICcsIGVyci5tZXNzYWdlLCAnQ2xvc2luZyBzb2NrZXQnKTtcbiAgICAgICAgICAgIGlmIChJU19DT05ORUNURUQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBTRENfU09DS0VULmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIFNEQ19TT0NLRVQub25vcGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgSVNfQ09OTkVDVEVEID0gdHJ1ZTtcbiAgICAgICAgICAgIElTX0NPTk5FQ1RJTkcgPSBmYWxzZTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIHNvY2tldENsb3NlKCkge1xuICAgIGlmIChJU19DT05ORUNURUQpIHtcbiAgICAgICAgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBTRENfU09DS0VULmNsb3NlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICB9XG5cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNvY2tldElzQ29ubmVjdGVkKCkge1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGlmIChJU19DT05ORUNURUQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoSVNfQ09OTkVDVElORykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKF9jb25uZWN0KCkpO1xuICAgICAgICB9XG4gICAgfSk7XG59Il0sIm5hbWVzIjpbInV1aWR2NCIsInRyaWdnZXIiLCJJU19DT05ORUNURUQiLCJJU19DT05ORUNUSU5HIiwiU0RDX1NPQ0tFVCIsIk9QRU5fUkVRVUVTVFMiLCJjYWxsU2VydmVyIiwiYXBwIiwiY29udHJvbGxlciIsInBhcnNlZENvbnRlbnRVcmwiLCJmdW5jTmFtZSIsImFyZ3MiLCJ3aW5kb3ciLCJTRVJWRVJfQ0FMTF9WSUFfV0VCX1NPQ0tFVCIsInNvY2tldENhbGxTZXJ2ZXIiLCJwb3N0Q2FsbFNlcnZlciIsImlzQ29ubmVjdGVkIiwic29ja2V0SXNDb25uZWN0ZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNsb3NlIiwic29ja2V0Q2xvc2UiLCJBcnJheSIsImlzQXJyYXkiLCJKU09OIiwic3RyaW5naWZ5IiwiJCIsInBvc3QiLCJ1cmwiLCJkYXRhIiwiYmVmb3JlU2VuZCIsInhociIsInNldHRpbmdzIiwic2V0UmVxdWVzdEhlYWRlciIsIkNTUkZfVE9LRU4iLCJ0aGVuIiwicmVzIiwiaWQiLCJzZW5kIiwiZXZlbnQiLCJmdW5jdGlvbiIsInJlamVjdCIsIl9jb25uZWN0IiwibG9jYXRpb24iLCJwcm90b2NvbCIsIldlYlNvY2tldCIsImhvc3QiLCJvbm1lc3NhZ2UiLCJlIiwicGFyc2UiLCJpc19lcnJvciIsIm1zZyIsImhlYWRlciIsInR5cGUiLCJwYXlsb2FkIiwibGluayIsIm9uY2xvc2UiLCJjb25zb2xlIiwiZXJyb3IiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJzZXRUaW1lb3V0Iiwib25lcnJvciIsImVyciIsIm1lc3NhZ2UiLCJvbm9wZW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_server_call.js\n");
88
+
89
+ /***/ }),
90
+
81
91
  /***/ "./src/simpleDomControl/sdc_socket.js":
82
92
  /*!********************************************!*\
83
93
  !*** ./src/simpleDomControl/sdc_socket.js ***!
84
94
  \********************************************/
85
95
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
86
96
 
87
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Model: () => (/* binding */ Model),\n/* harmony export */ callServer: () => (/* binding */ callServer),\n/* harmony export */ close: () => (/* binding */ close),\n/* harmony export */ isConnected: () => (/* binding */ isConnected)\n/* harmony export */ });\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\nlet IS_CONNECTED = false;\nlet IS_CONNECTING = false;\nlet SDC_SOCKET = null;\nconst MAX_FILE_UPLOAD = 25000;\nlet OPEN_REQUESTS = {};\nclass SubModel {\n constructor(pk, model) {\n this.pk = pk;\n this._model = model;\n }\n\n /**\n * SDC Model Name\n * @param {string} model\n */\n set model(model) {\n this._model = model;\n }\n get model() {\n return this._model;\n }\n\n /**\n * Load the sub model.\n *\n * @param {AbstractSDC} controller\n * @returns {Model}\n */\n load(controller) {\n if (!this._model) {\n throw new TypeError(\"Model is not set!!\");\n }\n return controller.newModel(this._model, {\n pk: this.pk\n });\n }\n}\nconst ModelProxyHandler = {\n get(target, key) {\n const value = target[key] ?? undefined;\n if (value instanceof SubModel) {\n if (!value.pk && value.pk !== 0) {\n return null;\n }\n const newVal = new Number(value.pk);\n newVal.load = value.load.bind(value);\n return newVal;\n }\n return value;\n },\n set(target, key, value) {\n if (key in target) {\n const oldVal = target[key];\n if (oldVal instanceof SubModel) {\n if (value.hasOwnProperty('pk')) {\n oldVal.pk = value.pk;\n } else {\n oldVal.pk = value;\n }\n } else {\n target[key] = value;\n }\n } else {\n target[key] = value;\n }\n return true;\n }\n};\nfunction callServer(app, controller, funcName, args) {\n let id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n isConnected().then(() => {\n SDC_SOCKET.send(JSON.stringify({\n event: 'sdc_call',\n id: id,\n controller: controller,\n app: app,\n function: funcName,\n args: args\n }));\n });\n return new Promise((resolve, reject) => {\n OPEN_REQUESTS[id] = [resolve, reject];\n });\n}\nfunction _connect() {\n IS_CONNECTING = true;\n return new Promise(resolve => {\n if (window.location.protocol === \"https:\") {\n SDC_SOCKET = new WebSocket(`wss://${window.location.host}/sdc_ws/ws/`);\n } else {\n SDC_SOCKET = new WebSocket(`ws://${window.location.host}/sdc_ws/ws/`);\n }\n SDC_SOCKET.onmessage = function (e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][1](data.data || null);\n delete OPEN_REQUESTS[data.id];\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushMsg', data.header || '', data.msg || '');\n }\n if (data.type && data.type === 'sdc_recall') {\n if (OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][0](data.data);\n delete OPEN_REQUESTS[data.id];\n }\n } else if (data.type && data.type === 'sdc_event') {\n let event = data.event;\n if (event) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)(event, data.payload);\n }\n } else if (data.type && data.type === 'sdc_redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('onNavLink', data.link);\n }\n }\n };\n SDC_SOCKET.onclose = function () {\n if (IS_CONNECTED) {\n console.error('SDC Socket closed unexpectedly');\n }\n IS_CONNECTED = false;\n for (const [key, value] of Object.entries(OPEN_REQUESTS)) {\n value[1]({});\n delete OPEN_REQUESTS[key];\n }\n setTimeout(() => {\n _connect();\n }, 1000);\n };\n SDC_SOCKET.onerror = function (err) {\n console.error('Socket encountered error: ', err.message, 'Closing socket');\n if (IS_CONNECTED) {\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n };\n SDC_SOCKET.onopen = function () {\n IS_CONNECTED = true;\n IS_CONNECTING = false;\n resolve();\n };\n });\n}\nfunction close() {\n if (IS_CONNECTED) {\n IS_CONNECTED = false;\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n}\nfunction parse_hidden_inputs(value) {\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (value.toLowerCase().match(isBoolReg)) {\n return value.toLowerCase() === 'true';\n } else if (value === 'undefined') {\n return undefined;\n } else if (value.toLowerCase() === 'none') {\n return null;\n } else if (value.match(isIntReg)) {\n return parseInt(value);\n } else if (value.match(isFloatReg)) {\n return parseFloat(value);\n } else if (value.match(isStringReg)) {\n return value.substring(1, value.length - 1);\n }\n return value;\n}\nfunction isConnected() {\n return new Promise(resolve => {\n if (IS_CONNECTED) {\n return resolve();\n } else if (IS_CONNECTING) {\n setTimeout(() => {\n isConnected().then(() => {\n resolve();\n });\n }, 200);\n } else {\n return resolve(_connect());\n }\n });\n}\nclass Model {\n /**\n *\n * @param model_name {string}\n * @param model_query {json}\n */\n constructor(model_name, model_query = {}) {\n this.values_list = [];\n this.values = {};\n this.model_name = model_name;\n this.model_query = model_query;\n this._is_connected = false;\n this._is_conneting_process = false;\n this._auto_reconnect = true;\n this.socket = null;\n this.open_request = {};\n this.on_update = () => {};\n this.on_create = () => {};\n this.form_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n }\n [Symbol.iterator]() {\n let idx = -1;\n return {\n next: () => {\n ++idx;\n if (idx < this.values_list.length) {\n return {\n value: this.values_list[idx],\n done: false\n };\n }\n return {\n value: null,\n done: true\n };\n }\n };\n }\n length() {\n return this.values_list.length;\n }\n byPk(pk) {\n if (pk !== null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let elem = this.values_list.find(elm => elm.pk === pk);\n if (!elem) {\n elem = new Proxy({\n pk: pk\n }, ModelProxyHandler);\n this.values_list.push(elem);\n }\n return elem;\n }\n return {\n pk: pk\n };\n }\n filter(model_query) {\n this.model_query = Object.assign({}, this.model_query, model_query);\n return this;\n }\n load() {\n return this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'load',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n listView(filter = {}, cb_resolve = null, cb_reject = null) {\n let $div_list = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'list_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n filter: filter\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n });\n return $div_list;\n }\n detailView(pk = -1, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let $div_list = $('<div class=\"container-fluid\">');\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n load_promise.then(() => {\n if (pk === -1) {\n pk = this.values_list[0].pk;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'detail_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n });\n return $div_list;\n }\n syncFormToModel($forms) {\n return this.syncForm($forms);\n }\n syncModelToForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n let self = this;\n $forms.each(function () {\n if (!this.hasAttribute('data-model_pk')) {\n return;\n }\n let pk = $(this).data('model_pk');\n let instance = self.byPk(pk);\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'checkbox') {\n form_item.checked = instance[name];\n } else if (form_item.type === 'file' && instance[name] instanceof File) {\n let container = new DataTransfer();\n container.items.add(instance[name]);\n form_item.files = container;\n } else {\n $(form_item).val(instance[name]);\n }\n }\n }\n });\n }\n syncForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n const self = this;\n let instances = [];\n $forms.each(function () {\n let $form = $(this);\n let pk = $form.data('model_pk');\n let instance = self.byPk(pk);\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'hidden') {\n instance[name] = parse_hidden_inputs($(form_item).val());\n } else if (form_item.type === 'checkbox') {\n instance[name] = form_item.checked;\n } else if (form_item.type === 'file') {\n instance[name] = form_item.files[0];\n } else {\n instance[name] = $(form_item).val();\n }\n }\n }\n instances.push(instance);\n return instance;\n });\n if (this.values_list.length <= 1 && instances.length > 0) {\n this.values = instances.at(-1);\n }\n return instances;\n }\n createForm(cb_resolve = null, cb_reject = null) {\n let $div_form = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n this._getForm(null, 'create_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n editForm(pk = -1, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div class=\"container-fluid\">');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'edit_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n namedForm(pk = -1, formName, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div class=\"container-fluid\">');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'named_form', formName, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n _getForm(pk, event_type, formName, $div_form, cb_resolve, cb_reject) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: event_type,\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk,\n form_name: formName\n }\n }));\n const className = pk === null || pk === -1 ? 'create' : 'edit';\n this.open_request[id] = [data => {\n $div_form.append(data.html);\n let $form = $div_form.closest('form').addClass(`sdc-model-${className}-form sdc-model-form ${this.form_id}`).data('model', this).data('model_pk', pk);\n if ($form.length > 0 && !$form[0].hasAttribute('sdc_submit')) {\n $form.attr('sdc_submit', 'submitModelFormDistributor');\n }\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_form);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n }\n new() {\n return new Promise((resolve, reject) => {\n const $form = $('<form>').append(this.createForm(() => {\n this.syncFormToModel($form);\n resolve();\n }, reject));\n });\n }\n save(pk = -1) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n return this.isConnected().then(() => {\n let elem_list;\n if (pk > -1) {\n elem_list = [this.byPk(pk)];\n } else {\n elem_list = this.values_list;\n }\n let p_list = [];\n elem_list.forEach(elem => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n p_list.push(new Promise((resolve, reject) => {\n this._readFiles(elem).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'save',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n data: elem,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n res.data.instance = this._parseServerRes(data);\n resolve(res);\n }, reject];\n });\n }));\n });\n return Promise.all(p_list);\n });\n }\n create(values = this.values) {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this._readFiles(values).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'create',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n data: values,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n res.data.instance = this._parseServerRes(data)[0];\n resolve(res);\n }, reject];\n });\n });\n });\n }\n delete(pk = -1) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n if (pk === -1) pk = this.values?.pk;\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'delete',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n isConnected() {\n return new Promise((resolve, reject) => {\n if (this._is_connected) {\n resolve();\n } else if (!this._is_conneting_process) {\n this._is_conneting_process = true;\n this.open_request['_connecting_process'] = [() => {}, () => {}];\n this._connectToServer().then(() => {\n resolve(this._checkConnection());\n });\n } else {\n const [resolve_origin, reject_origin] = this.open_request['_connecting_process'];\n this.open_request['_connecting_process'] = [() => {\n resolve_origin();\n resolve();\n }, () => {\n reject_origin();\n reject();\n }];\n }\n });\n }\n close() {\n if (this.socket) {\n this._auto_reconnect = false;\n this.socket.onclose = () => {};\n this.socket.close();\n delete this['socket'];\n }\n }\n clean() {\n this.values_list = [];\n this.values = {};\n return this;\n }\n _readFiles(elem) {\n let to_solve = [];\n let files = {};\n for (const [key, value] of Object.entries(elem)) {\n if (value instanceof File) {\n to_solve.push(new Promise((resolve, reject) => {\n ((key, value) => {\n let reader = new FileReader();\n reader.onload = e => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.open_request[id] = [resolve, reject];\n let result = e.target.result;\n let number_of_chunks = parseInt(Math.ceil(result.length / MAX_FILE_UPLOAD));\n files[key] = {\n id: id,\n file_name: value.name,\n field_name: key,\n content_length: value.size\n };\n for (let i = 0; i < number_of_chunks; ++i) {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'upload',\n event_id: id,\n args: {\n chunk: result.slice(MAX_FILE_UPLOAD * i, MAX_FILE_UPLOAD * (i + 1)),\n idx: i,\n number_of_chunks: number_of_chunks,\n file_name: value.name,\n field_name: key,\n content_length: value.size,\n content_type: value.type,\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n }\n };\n reader.onerror = () => {\n reject();\n };\n reader.readAsBinaryString(value);\n })(key, value);\n }));\n }\n }\n return Promise.all(to_solve).then(() => {\n return files;\n });\n }\n _onMessage(e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][1](data);\n delete this.open_request[data.event_id];\n }\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this.open_request['_connecting_process'][1](data);\n delete this.open_request['_connecting_process'];\n this._auto_reconnect = false;\n this.socket.close();\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this._is_connected = true;\n this._is_conneting_process = false;\n this.open_request['_connecting_process'][0](data);\n delete this.open_request['_connecting_process'];\n } else if (data.type === 'load') {\n const json_res = JSON.parse(data.args.data);\n this.values_list = [];\n data.args.data = this._parseServerRes(json_res);\n } else if (data.type === 'on_update' || data.type === 'on_create') {\n const json_res = JSON.parse(data.args.data);\n let obj = this._parseServerRes(json_res);\n let cb;\n if (data.type === 'on_create') {\n cb = this.on_create;\n } else {\n cb = this.on_update;\n }\n cb(obj);\n data.args.data = obj;\n }\n let instance = data.data?.instance;\n if (instance) {\n data.data.instance = JSON.parse(data.data.instance);\n }\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][0](data);\n delete this.open_request[data.event_id];\n }\n }\n }\n _connectToServer() {\n return new Promise(resolve => {\n const model_identifier = `${this.model_name}` + (this.model_id > 0 ? `/${this.model_id}` : '');\n if (window.location.protocol === \"https:\") {\n this.socket = new WebSocket(`wss://${window.location.host}/sdc_ws/model/${model_identifier}`);\n } else {\n this.socket = new WebSocket(`ws://${window.location.host}/sdc_ws/model/${model_identifier}`);\n }\n this.socket.onmessage = this._onMessage.bind(this);\n this.socket.onclose = e => {\n console.error(`SDC Model (${this.model_name}, ${this.model_id}) Socket closed unexpectedly`);\n this._is_connected = false;\n for (const [_key, value] of Object.entries(this.open_request)) {\n value[1](e);\n }\n this.open_request = {};\n setTimeout(() => {\n if (this._auto_reconnect) {\n this._connectToServer().then(() => {});\n }\n }, 1000);\n };\n this.socket.onerror = err => {\n console.error(`Model Socket encountered error: ${err} Closing socket`);\n if (this._is_connected) {\n try {\n this.socket.close();\n } catch (e) {}\n }\n };\n this.socket.onopen = () => {\n resolve();\n };\n });\n }\n _checkConnection() {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'connect',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n }\n _parseServerRes(res) {\n let updated = [];\n for (let json_data of res) {\n const pk = json_data.pk;\n const obj = this.byPk(pk);\n for (const [k, v] of Object.entries(json_data.fields)) {\n if (v && typeof v === 'object' && v['__is_sdc_model__']) {\n obj[k] = new SubModel(v['pk'], v['model']);\n } else {\n obj[k] = v;\n }\n }\n updated.push(obj);\n }\n if (this.values_list.length === 1) {\n this.values = this.values_list.at(-1);\n } else {\n this.values = {};\n }\n return updated;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc29ja2V0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBa0M7QUFDTTtBQUNGO0FBRXRDLElBQUlHLFlBQVksR0FBRyxLQUFLO0FBQ3hCLElBQUlDLGFBQWEsR0FBRyxLQUFLO0FBQ3pCLElBQUlDLFVBQVUsR0FBRyxJQUFJO0FBQ3JCLE1BQU1DLGVBQWUsR0FBRyxLQUFLO0FBQzdCLElBQUlDLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFHdEIsTUFBTUMsUUFBUSxDQUFDO0VBRVhDLFdBQVdBLENBQUNDLEVBQUUsRUFBRUMsS0FBSyxFQUFFO0lBQ25CLElBQUksQ0FBQ0QsRUFBRSxHQUFHQSxFQUFFO0lBQ1osSUFBSSxDQUFDRSxNQUFNLEdBQUdELEtBQUs7RUFDdkI7O0VBRUE7QUFDSjtBQUNBO0FBQ0E7RUFDSSxJQUFJQSxLQUFLQSxDQUFDQSxLQUFLLEVBQUU7SUFDYixJQUFJLENBQUNDLE1BQU0sR0FBR0QsS0FBSztFQUN2QjtFQUVBLElBQUlBLEtBQUtBLENBQUEsRUFBRztJQUNSLE9BQU8sSUFBSSxDQUFDQyxNQUFNO0VBQ3RCOztFQUVBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxJQUFJQSxDQUFDQyxVQUFVLEVBQUU7SUFDYixJQUFJLENBQUMsSUFBSSxDQUFDRixNQUFNLEVBQUU7TUFDZCxNQUFNLElBQUlHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztJQUM3QztJQUNBLE9BQU9ELFVBQVUsQ0FBQ0UsUUFBUSxDQUFDLElBQUksQ0FBQ0osTUFBTSxFQUFFO01BQUNGLEVBQUUsRUFBRSxJQUFJLENBQUNBO0lBQUUsQ0FBQyxDQUFDO0VBQzFEO0FBQ0o7QUFFQSxNQUFNTyxpQkFBaUIsR0FBRztFQUN0QkMsR0FBR0EsQ0FBQ0MsTUFBTSxFQUFFQyxHQUFHLEVBQUU7SUFDYixNQUFNQyxLQUFLLEdBQUdGLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLElBQUlFLFNBQVM7SUFDdEMsSUFBSUQsS0FBSyxZQUFZYixRQUFRLEVBQUU7TUFDM0IsSUFBSSxDQUFDYSxLQUFLLENBQUNYLEVBQUUsSUFBSVcsS0FBSyxDQUFDWCxFQUFFLEtBQUssQ0FBQyxFQUFFO1FBQzdCLE9BQU8sSUFBSTtNQUNmO01BQ0EsTUFBTWEsTUFBTSxHQUFHLElBQUlDLE1BQU0sQ0FBQ0gsS0FBSyxDQUFDWCxFQUFFLENBQUM7TUFDbkNhLE1BQU0sQ0FBQ1YsSUFBSSxHQUFHUSxLQUFLLENBQUNSLElBQUksQ0FBQ1ksSUFBSSxDQUFDSixLQUFLLENBQUM7TUFDcEMsT0FBT0UsTUFBTTtJQUNqQjtJQUNBLE9BQU9GLEtBQUs7RUFDaEIsQ0FBQztFQUNESyxHQUFHQSxDQUFDUCxNQUFNLEVBQUVDLEdBQUcsRUFBRUMsS0FBSyxFQUFFO0lBQ3BCLElBQUlELEdBQUcsSUFBSUQsTUFBTSxFQUFFO01BQ2YsTUFBTVEsTUFBTSxHQUFHUixNQUFNLENBQUNDLEdBQUcsQ0FBQztNQUMxQixJQUFJTyxNQUFNLFlBQVluQixRQUFRLEVBQUU7UUFDNUIsSUFBSWEsS0FBSyxDQUFDTyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDNUJELE1BQU0sQ0FBQ2pCLEVBQUUsR0FBR1csS0FBSyxDQUFDWCxFQUFFO1FBQ3hCLENBQUMsTUFBTTtVQUNIaUIsTUFBTSxDQUFDakIsRUFBRSxHQUFHVyxLQUFLO1FBQ3JCO01BQ0osQ0FBQyxNQUFNO1FBQ0hGLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLEdBQUdDLEtBQUs7TUFDdkI7SUFDSixDQUFDLE1BQU07TUFDSEYsTUFBTSxDQUFDQyxHQUFHLENBQUMsR0FBR0MsS0FBSztJQUN2QjtJQUNBLE9BQU8sSUFBSTtFQUNmO0FBQ0osQ0FBQztBQUVNLFNBQVNRLFVBQVVBLENBQUM3QixHQUFHLEVBQUVjLFVBQVUsRUFBRWdCLFFBQVEsRUFBRUMsSUFBSSxFQUFFO0VBRXhELElBQUlDLEVBQUUsR0FBRzlCLHFEQUFNLENBQUMsQ0FBQztFQUNqQitCLFdBQVcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO0lBQ3JCN0IsVUFBVSxDQUFDOEIsSUFBSSxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztNQUMzQkMsS0FBSyxFQUFFLFVBQVU7TUFDakJOLEVBQUUsRUFBRUEsRUFBRTtNQUNObEIsVUFBVSxFQUFFQSxVQUFVO01BQ3RCZCxHQUFHLEVBQUVBLEdBQUc7TUFDUnVDLFFBQVEsRUFBRVQsUUFBUTtNQUNsQkMsSUFBSSxFQUFFQTtJQUNWLENBQUMsQ0FBQyxDQUFDO0VBQ1AsQ0FBQyxDQUFDO0VBRUYsT0FBTyxJQUFJUyxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7SUFDcENuQyxhQUFhLENBQUN5QixFQUFFLENBQUMsR0FBRyxDQUFDUyxPQUFPLEVBQUVDLE1BQU0sQ0FBQztFQUN6QyxDQUFDLENBQUM7QUFDTjtBQUVBLFNBQVNDLFFBQVFBLENBQUEsRUFBRztFQUNoQnZDLGFBQWEsR0FBRyxJQUFJO0VBQ3BCLE9BQU8sSUFBSW9DLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO0lBQzVCLElBQUlHLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDQyxRQUFRLEtBQUssUUFBUSxFQUFFO01BQ3ZDekMsVUFBVSxHQUFHLElBQUkwQyxTQUFTLENBQUMsU0FBU0gsTUFBTSxDQUFDQyxRQUFRLENBQUNHLElBQUksYUFBYSxDQUFDO0lBQzFFLENBQUMsTUFBTTtNQUNIM0MsVUFBVSxHQUFHLElBQUkwQyxTQUFTLENBQUMsUUFBUUgsTUFBTSxDQUFDQyxRQUFRLENBQUNHLElBQUksYUFBYSxDQUFDO0lBQ3pFO0lBR0EzQyxVQUFVLENBQUM0QyxTQUFTLEdBQUcsVUFBVUMsQ0FBQyxFQUFFO01BQ2hDLElBQUlDLElBQUksR0FBR2YsSUFBSSxDQUFDZ0IsS0FBSyxDQUFDRixDQUFDLENBQUNDLElBQUksQ0FBQztNQUM3QixJQUFJQSxJQUFJLENBQUNFLFFBQVEsRUFBRTtRQUNmLElBQUlGLElBQUksQ0FBQ0csR0FBRyxJQUFJSCxJQUFJLENBQUNJLE1BQU0sRUFBRTtVQUN6QnRELHVEQUFPLENBQUMsY0FBYyxFQUFFa0QsSUFBSSxDQUFDSSxNQUFNLElBQUksRUFBRSxFQUFFSixJQUFJLENBQUNHLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDOUQ7UUFDQSxJQUFJL0MsYUFBYSxDQUFDNEMsSUFBSSxDQUFDbkIsRUFBRSxDQUFDLEVBQUU7VUFDeEJ6QixhQUFhLENBQUM0QyxJQUFJLENBQUNuQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ21CLElBQUksQ0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQztVQUM1QyxPQUFPNUMsYUFBYSxDQUFDNEMsSUFBSSxDQUFDbkIsRUFBRSxDQUFDO1FBQ2pDO01BQ0osQ0FBQyxNQUFNO1FBQ0gsSUFBSW1CLElBQUksQ0FBQ0csR0FBRyxJQUFJSCxJQUFJLENBQUNJLE1BQU0sRUFBRTtVQUN6QnRELHVEQUFPLENBQUMsU0FBUyxFQUFFa0QsSUFBSSxDQUFDSSxNQUFNLElBQUksRUFBRSxFQUFFSixJQUFJLENBQUNHLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDekQ7UUFFQSxJQUFJSCxJQUFJLENBQUNLLElBQUksSUFBSUwsSUFBSSxDQUFDSyxJQUFJLEtBQUssWUFBWSxFQUFFO1VBQ3pDLElBQUlqRCxhQUFhLENBQUM0QyxJQUFJLENBQUNuQixFQUFFLENBQUMsRUFBRTtZQUN4QnpCLGFBQWEsQ0FBQzRDLElBQUksQ0FBQ25CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbUIsSUFBSSxDQUFDQSxJQUFJLENBQUM7WUFDcEMsT0FBTzVDLGFBQWEsQ0FBQzRDLElBQUksQ0FBQ25CLEVBQUUsQ0FBQztVQUNqQztRQUNKLENBQUMsTUFBTSxJQUFJbUIsSUFBSSxDQUFDSyxJQUFJLElBQUlMLElBQUksQ0FBQ0ssSUFBSSxLQUFLLFdBQVcsRUFBRTtVQUMvQyxJQUFJbEIsS0FBSyxHQUFHYSxJQUFJLENBQUNiLEtBQUs7VUFDdEIsSUFBSUEsS0FBSyxFQUFFO1lBQ1ByQyx1REFBTyxDQUFDcUMsS0FBSyxFQUFFYSxJQUFJLENBQUNNLE9BQU8sQ0FBQztVQUNoQztRQUVKLENBQUMsTUFBTSxJQUFJTixJQUFJLENBQUNLLElBQUksSUFBSUwsSUFBSSxDQUFDSyxJQUFJLEtBQUssY0FBYyxFQUFFO1VBQ2xEdkQsdURBQU8sQ0FBQyxXQUFXLEVBQUVrRCxJQUFJLENBQUNPLElBQUksQ0FBQztRQUNuQztNQUNKO0lBQ0osQ0FBQztJQUVEckQsVUFBVSxDQUFDc0QsT0FBTyxHQUFHLFlBQVk7TUFDN0IsSUFBSXhELFlBQVksRUFBRTtRQUNkeUQsT0FBTyxDQUFDQyxLQUFLLENBQUMsZ0NBQWdDLENBQUM7TUFDbkQ7TUFDQTFELFlBQVksR0FBRyxLQUFLO01BQ3BCLEtBQUssTUFBTSxDQUFDaUIsR0FBRyxFQUFFQyxLQUFLLENBQUMsSUFBSXlDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDeEQsYUFBYSxDQUFDLEVBQUU7UUFDdERjLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLE9BQU9kLGFBQWEsQ0FBQ2EsR0FBRyxDQUFDO01BQzdCO01BRUE0QyxVQUFVLENBQUMsTUFBTTtRQUNickIsUUFBUSxDQUFDLENBQUM7TUFDZCxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ1osQ0FBQztJQUVEdEMsVUFBVSxDQUFDNEQsT0FBTyxHQUFHLFVBQVVDLEdBQUcsRUFBRTtNQUNoQ04sT0FBTyxDQUFDQyxLQUFLLENBQUMsNEJBQTRCLEVBQUVLLEdBQUcsQ0FBQ0MsT0FBTyxFQUFFLGdCQUFnQixDQUFDO01BQzFFLElBQUloRSxZQUFZLEVBQUU7UUFDZCxJQUFJO1VBQ0FFLFVBQVUsQ0FBQytELEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxPQUFPbEIsQ0FBQyxFQUFFLENBRVo7TUFDSjtJQUNKLENBQUM7SUFFRDdDLFVBQVUsQ0FBQ2dFLE1BQU0sR0FBRyxZQUFZO01BQzVCbEUsWUFBWSxHQUFHLElBQUk7TUFDbkJDLGFBQWEsR0FBRyxLQUFLO01BQ3JCcUMsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0VBQ0wsQ0FBQyxDQUFDO0FBQ047QUFFTyxTQUFTMkIsS0FBS0EsQ0FBQSxFQUFHO0VBQ3BCLElBQUlqRSxZQUFZLEVBQUU7SUFDZEEsWUFBWSxHQUFHLEtBQUs7SUFDcEIsSUFBSTtNQUNBRSxVQUFVLENBQUMrRCxLQUFLLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUMsT0FBT2xCLENBQUMsRUFBRSxDQUVaO0VBRUo7QUFDSjtBQUVBLFNBQVNvQixtQkFBbUJBLENBQUNqRCxLQUFLLEVBQUU7RUFFaEMsSUFBSWtELFVBQVUsR0FBRyxlQUFlO0VBQ2hDLElBQUlDLFFBQVEsR0FBRyxTQUFTO0VBQ3hCLElBQUlDLFNBQVMsR0FBRyxnQkFBZ0I7RUFDaEMsSUFBSUMsV0FBVyxHQUFHLCtCQUErQjtFQUdqRCxJQUFJckQsS0FBSyxDQUFDc0QsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDSCxTQUFTLENBQUMsRUFBRTtJQUN0QyxPQUFPcEQsS0FBSyxDQUFDc0QsV0FBVyxDQUFDLENBQUMsS0FBSyxNQUFNO0VBQ3pDLENBQUMsTUFBTSxJQUFJdEQsS0FBSyxLQUFLLFdBQVcsRUFBRTtJQUM5QixPQUFPQyxTQUFTO0VBQ3BCLENBQUMsTUFBTSxJQUFJRCxLQUFLLENBQUNzRCxXQUFXLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRTtJQUN2QyxPQUFPLElBQUk7RUFDZixDQUFDLE1BQU0sSUFBSXRELEtBQUssQ0FBQ3VELEtBQUssQ0FBQ0osUUFBUSxDQUFDLEVBQUU7SUFDOUIsT0FBT0ssUUFBUSxDQUFDeEQsS0FBSyxDQUFDO0VBQzFCLENBQUMsTUFBTSxJQUFJQSxLQUFLLENBQUN1RCxLQUFLLENBQUNMLFVBQVUsQ0FBQyxFQUFFO0lBQ2hDLE9BQU9PLFVBQVUsQ0FBQ3pELEtBQUssQ0FBQztFQUM1QixDQUFDLE1BQU0sSUFBSUEsS0FBSyxDQUFDdUQsS0FBSyxDQUFDRixXQUFXLENBQUMsRUFBRTtJQUNqQyxPQUFPckQsS0FBSyxDQUFDMEQsU0FBUyxDQUFDLENBQUMsRUFBRTFELEtBQUssQ0FBQzJELE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDL0M7RUFDQSxPQUFPM0QsS0FBSztBQUNoQjtBQUVPLFNBQVNZLFdBQVdBLENBQUEsRUFBRztFQUUxQixPQUFPLElBQUlPLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO0lBQzVCLElBQUl0QyxZQUFZLEVBQUU7TUFDZCxPQUFPc0MsT0FBTyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxNQUFNLElBQUlyQyxhQUFhLEVBQUU7TUFDdEI0RCxVQUFVLENBQUMsTUFBTTtRQUNiL0IsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLE1BQU07VUFDckJPLE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDO01BQ04sQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNYLENBQUMsTUFBTTtNQUNILE9BQU9BLE9BQU8sQ0FBQ0UsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5QjtFQUNKLENBQUMsQ0FBQztBQUNOO0FBRU8sTUFBTXNDLEtBQUssQ0FBQztFQUNmO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7RUFDSXhFLFdBQVdBLENBQUN5RSxVQUFVLEVBQUVDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUN0QyxJQUFJLENBQUNDLFdBQVcsR0FBRyxFQUFFO0lBQ3JCLElBQUksQ0FBQ0MsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLENBQUNILFVBQVUsR0FBR0EsVUFBVTtJQUM1QixJQUFJLENBQUNDLFdBQVcsR0FBR0EsV0FBVztJQUM5QixJQUFJLENBQUNHLGFBQWEsR0FBRyxLQUFLO0lBQzFCLElBQUksQ0FBQ0MscUJBQXFCLEdBQUcsS0FBSztJQUNsQyxJQUFJLENBQUNDLGVBQWUsR0FBRyxJQUFJO0lBQzNCLElBQUksQ0FBQ0MsTUFBTSxHQUFHLElBQUk7SUFDbEIsSUFBSSxDQUFDQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLElBQUksQ0FBQ0MsU0FBUyxHQUFHLE1BQU0sQ0FDdkIsQ0FBQztJQUNELElBQUksQ0FBQ0MsU0FBUyxHQUFHLE1BQU0sQ0FDdkIsQ0FBQztJQUVELElBQUksQ0FBQ0MsT0FBTyxHQUFHM0YscURBQU0sQ0FBQyxDQUFDO0VBQzNCO0VBRUEsQ0FBQzRGLE1BQU0sQ0FBQ0MsUUFBUSxJQUFJO0lBQ2hCLElBQUlDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPO01BQ0hDLElBQUksRUFBRUEsQ0FBQSxLQUFNO1FBQ1IsRUFBRUQsR0FBRztRQUNMLElBQUlBLEdBQUcsR0FBRyxJQUFJLENBQUNaLFdBQVcsQ0FBQ0osTUFBTSxFQUFFO1VBQy9CLE9BQU87WUFBQzNELEtBQUssRUFBRSxJQUFJLENBQUMrRCxXQUFXLENBQUNZLEdBQUcsQ0FBQztZQUFFRSxJQUFJLEVBQUU7VUFBSyxDQUFDO1FBQ3REO1FBQ0EsT0FBTztVQUFDN0UsS0FBSyxFQUFFLElBQUk7VUFBRTZFLElBQUksRUFBRTtRQUFJLENBQUM7TUFDcEM7SUFDSixDQUFDO0VBQ0w7RUFFQWxCLE1BQU1BLENBQUEsRUFBRztJQUNMLE9BQU8sSUFBSSxDQUFDSSxXQUFXLENBQUNKLE1BQU07RUFDbEM7RUFFQW1CLElBQUlBLENBQUN6RixFQUFFLEVBQUU7SUFDTCxJQUFJQSxFQUFFLEtBQUssSUFBSSxFQUFFO01BQ2JBLEVBQUUsR0FBR21FLFFBQVEsQ0FBQ25FLEVBQUUsQ0FBQztNQUNqQixJQUFJMEYsS0FBSyxDQUFDMUYsRUFBRSxDQUFDLEVBQUU7UUFDWEEsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUNYO01BQ0EsSUFBSTJGLElBQUksR0FBRyxJQUFJLENBQUNqQixXQUFXLENBQUNrQixJQUFJLENBQUNDLEdBQUcsSUFBSUEsR0FBRyxDQUFDN0YsRUFBRSxLQUFLQSxFQUFFLENBQUM7TUFDdEQsSUFBSSxDQUFDMkYsSUFBSSxFQUFFO1FBQ1BBLElBQUksR0FBRyxJQUFJRyxLQUFLLENBQUM7VUFBQzlGLEVBQUUsRUFBRUE7UUFBRSxDQUFDLEVBQUVPLGlCQUFpQixDQUFDO1FBQzdDLElBQUksQ0FBQ21FLFdBQVcsQ0FBQ3FCLElBQUksQ0FBQ0osSUFBSSxDQUFDO01BQy9CO01BQ0EsT0FBT0EsSUFBSTtJQUNmO0lBQ0EsT0FBTztNQUFDM0YsRUFBRSxFQUFFQTtJQUFFLENBQUM7RUFFbkI7RUFFQWdHLE1BQU1BLENBQUN2QixXQUFXLEVBQUU7SUFDaEIsSUFBSSxDQUFDQSxXQUFXLEdBQUdyQixNQUFNLENBQUM2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDeEIsV0FBVyxFQUFFQSxXQUFXLENBQUM7SUFDbkUsT0FBTyxJQUFJO0VBQ2Y7RUFFQXRFLElBQUlBLENBQUEsRUFBRztJQUNILE9BQU8sSUFBSSxDQUFDb0IsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLE1BQU07TUFDakMsTUFBTUYsRUFBRSxHQUFHOUIscURBQU0sQ0FBQyxDQUFDO01BQ25CLE9BQU8sSUFBSXNDLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztRQUNwQyxJQUFJLENBQUMrQyxNQUFNLENBQUN0RCxJQUFJLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDO1VBQzVCQyxLQUFLLEVBQUUsT0FBTztVQUNkc0UsVUFBVSxFQUFFLE1BQU07VUFDbEJDLFFBQVEsRUFBRTdFLEVBQUU7VUFDWkQsSUFBSSxFQUFFO1lBQ0ZtRCxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1lBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQTtVQUN0QjtRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDTyxZQUFZLENBQUMxRCxFQUFFLENBQUMsR0FBRyxDQUFDUyxPQUFPLEVBQUVDLE1BQU0sQ0FBQztNQUM3QyxDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDTjtFQUVBb0UsUUFBUUEsQ0FBQ0osTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFSyxVQUFVLEdBQUcsSUFBSSxFQUFFQyxTQUFTLEdBQUcsSUFBSSxFQUFFO0lBQ3ZELElBQUlDLFNBQVMsR0FBR0MsQ0FBQyxDQUFDLCtCQUErQixDQUFDO0lBQ2xELElBQUksQ0FBQ2pGLFdBQVcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO01BQzFCLE1BQU1GLEVBQUUsR0FBRzlCLHFEQUFNLENBQUMsQ0FBQztNQUNuQixJQUFJLENBQUN1RixNQUFNLENBQUN0RCxJQUFJLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDO1FBQzVCQyxLQUFLLEVBQUUsT0FBTztRQUNkc0UsVUFBVSxFQUFFLFdBQVc7UUFDdkJDLFFBQVEsRUFBRTdFLEVBQUU7UUFDWkQsSUFBSSxFQUFFO1VBQ0ZtRCxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1VBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQSxXQUFXO1VBQzdCdUIsTUFBTSxFQUFFQTtRQUNaO01BQ0osQ0FBQyxDQUFDLENBQUM7TUFFSCxJQUFJLENBQUNoQixZQUFZLENBQUMxRCxFQUFFLENBQUMsR0FBRyxDQUFFbUIsSUFBSSxJQUFLO1FBQy9COEQsU0FBUyxDQUFDRSxNQUFNLENBQUNoRSxJQUFJLENBQUNpRSxJQUFJLENBQUM7UUFDM0JwSCw2Q0FBRyxDQUFDcUgsT0FBTyxDQUFDSixTQUFTLENBQUM7UUFDdEJGLFVBQVUsSUFBSUEsVUFBVSxDQUFDNUQsSUFBSSxDQUFDO01BQ2xDLENBQUMsRUFBR21FLEdBQUcsSUFBSztRQUNSTixTQUFTLElBQUlBLFNBQVMsQ0FBQ00sR0FBRyxDQUFDO01BQy9CLENBQUMsQ0FBQztJQUVOLENBQUMsQ0FBQztJQUVGLE9BQU9MLFNBQVM7RUFDcEI7RUFFQU0sVUFBVUEsQ0FBQzdHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRXFHLFVBQVUsR0FBRyxJQUFJLEVBQUVDLFNBQVMsR0FBRyxJQUFJLEVBQUU7SUFDckR0RyxFQUFFLEdBQUdtRSxRQUFRLENBQUNuRSxFQUFFLENBQUM7SUFDakIsSUFBSTBGLEtBQUssQ0FBQzFGLEVBQUUsQ0FBQyxFQUFFO01BQ1hBLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWDtJQUNBLElBQUl1RyxTQUFTLEdBQUdDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQztJQUVsRCxJQUFJTSxZQUFZO0lBQ2hCLElBQUksSUFBSSxDQUFDcEMsV0FBVyxDQUFDSixNQUFNLEtBQUssQ0FBQyxFQUFFO01BQy9Cd0MsWUFBWSxHQUFHLElBQUksQ0FBQ3ZGLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsTUFBTTtNQUNIdUYsWUFBWSxHQUFHLElBQUksQ0FBQzNHLElBQUksQ0FBQyxDQUFDO0lBQzlCO0lBRUEyRyxZQUFZLENBQUN0RixJQUFJLENBQUMsTUFBTTtNQUNwQixJQUFJeEIsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ1hBLEVBQUUsR0FBRyxJQUFJLENBQUMwRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMxRSxFQUFFO01BQy9CO01BQ0EsTUFBTXNCLEVBQUUsR0FBRzlCLHFEQUFNLENBQUMsQ0FBQztNQUNuQixJQUFJLENBQUN1RixNQUFNLENBQUN0RCxJQUFJLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDO1FBQzVCQyxLQUFLLEVBQUUsT0FBTztRQUNkc0UsVUFBVSxFQUFFLGFBQWE7UUFDekJDLFFBQVEsRUFBRTdFLEVBQUU7UUFDWkQsSUFBSSxFQUFFO1VBQ0ZtRCxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1VBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQSxXQUFXO1VBQzdCekUsRUFBRSxFQUFFQTtRQUNSO01BQ0osQ0FBQyxDQUFDLENBQUM7TUFFSCxJQUFJLENBQUNnRixZQUFZLENBQUMxRCxFQUFFLENBQUMsR0FBRyxDQUFFbUIsSUFBSSxJQUFLO1FBQy9COEQsU0FBUyxDQUFDRSxNQUFNLENBQUNoRSxJQUFJLENBQUNpRSxJQUFJLENBQUM7UUFDM0JwSCw2Q0FBRyxDQUFDcUgsT0FBTyxDQUFDSixTQUFTLENBQUM7UUFDdEJGLFVBQVUsSUFBSUEsVUFBVSxDQUFDNUQsSUFBSSxDQUFDO01BQ2xDLENBQUMsRUFBR21FLEdBQUcsSUFBSztRQUNSTixTQUFTLElBQUlBLFNBQVMsQ0FBQ00sR0FBRyxDQUFDO01BQy9CLENBQUMsQ0FBQztJQUVOLENBQUMsQ0FBQztJQUVGLE9BQU9MLFNBQVM7RUFDcEI7RUFFQVEsZUFBZUEsQ0FBQ0MsTUFBTSxFQUFFO0lBQ3BCLE9BQU8sSUFBSSxDQUFDQyxRQUFRLENBQUNELE1BQU0sQ0FBQztFQUNoQztFQUVBRSxlQUFlQSxDQUFDRixNQUFNLEVBQUU7SUFDcEIsSUFBSSxDQUFDQSxNQUFNLElBQUksQ0FBQ0EsTUFBTSxDQUFDRyxRQUFRLENBQUMsSUFBSSxDQUFDaEMsT0FBTyxDQUFDLEVBQUU7TUFDM0M2QixNQUFNLEdBQUdSLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQ3JCLE9BQU8sRUFBRSxDQUFDO0lBQ2xDO0lBRUEsSUFBSWlDLElBQUksR0FBRyxJQUFJO0lBQ2ZKLE1BQU0sQ0FBQ0ssSUFBSSxDQUFDLFlBQVk7TUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQ0MsWUFBWSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ3JDO01BQ0o7TUFDQSxJQUFJdEgsRUFBRSxHQUFHd0csQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDL0QsSUFBSSxDQUFDLFVBQVUsQ0FBQztNQUNqQyxJQUFJOEUsUUFBUSxHQUFHSCxJQUFJLENBQUMzQixJQUFJLENBQUN6RixFQUFFLENBQUM7TUFDNUIsS0FBSyxJQUFJd0gsU0FBUyxJQUFJLElBQUksQ0FBQ0MsUUFBUSxFQUFFO1FBQ2pDLElBQUlDLElBQUksR0FBR0YsU0FBUyxDQUFDRSxJQUFJO1FBQ3pCLElBQUlBLElBQUksSUFBSUEsSUFBSSxLQUFLLEVBQUUsRUFBRTtVQUNyQixJQUFJRixTQUFTLENBQUMxRSxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQy9CMEUsU0FBUyxDQUFDRyxPQUFPLEdBQUdKLFFBQVEsQ0FBQ0csSUFBSSxDQUFDO1VBQ3RDLENBQUMsTUFBTSxJQUFJRixTQUFTLENBQUMxRSxJQUFJLEtBQUssTUFBTSxJQUFJeUUsUUFBUSxDQUFDRyxJQUFJLENBQUMsWUFBWUUsSUFBSSxFQUFFO1lBQ3BFLElBQUlDLFNBQVMsR0FBRyxJQUFJQyxZQUFZLENBQUMsQ0FBQztZQUNsQ0QsU0FBUyxDQUFDRSxLQUFLLENBQUNDLEdBQUcsQ0FBQ1QsUUFBUSxDQUFDRyxJQUFJLENBQUMsQ0FBQztZQUNuQ0YsU0FBUyxDQUFDUyxLQUFLLEdBQUdKLFNBQVM7VUFDL0IsQ0FBQyxNQUFNO1lBQ0hyQixDQUFDLENBQUNnQixTQUFTLENBQUMsQ0FBQ1UsR0FBRyxDQUFDWCxRQUFRLENBQUNHLElBQUksQ0FBQyxDQUFDO1VBQ3BDO1FBQ0o7TUFDSjtJQUNKLENBQUMsQ0FBQztFQUVOO0VBRUFULFFBQVFBLENBQUNELE1BQU0sRUFBRTtJQUNiLElBQUksQ0FBQ0EsTUFBTSxJQUFJLENBQUNBLE1BQU0sQ0FBQ0csUUFBUSxDQUFDLElBQUksQ0FBQ2hDLE9BQU8sQ0FBQyxFQUFFO01BQzNDNkIsTUFBTSxHQUFHUixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUNyQixPQUFPLEVBQUUsQ0FBQztJQUNsQztJQUVBLE1BQU1pQyxJQUFJLEdBQUcsSUFBSTtJQUNqQixJQUFJZSxTQUFTLEdBQUcsRUFBRTtJQUVsQm5CLE1BQU0sQ0FBQ0ssSUFBSSxDQUFDLFlBQVk7TUFDcEIsSUFBSWUsS0FBSyxHQUFHNUIsQ0FBQyxDQUFDLElBQUksQ0FBQztNQUNuQixJQUFJeEcsRUFBRSxHQUFHb0ksS0FBSyxDQUFDM0YsSUFBSSxDQUFDLFVBQVUsQ0FBQztNQUMvQixJQUFJOEUsUUFBUSxHQUFHSCxJQUFJLENBQUMzQixJQUFJLENBQUN6RixFQUFFLENBQUM7TUFDNUIsS0FBSyxJQUFJd0gsU0FBUyxJQUFJLElBQUksQ0FBQ0MsUUFBUSxFQUFFO1FBQ2pDLElBQUlDLElBQUksR0FBR0YsU0FBUyxDQUFDRSxJQUFJO1FBQ3pCLElBQUlBLElBQUksSUFBSUEsSUFBSSxLQUFLLEVBQUUsRUFBRTtVQUNyQixJQUFJRixTQUFTLENBQUMxRSxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzdCeUUsUUFBUSxDQUFDRyxJQUFJLENBQUMsR0FBRzlELG1CQUFtQixDQUFDNEMsQ0FBQyxDQUFDZ0IsU0FBUyxDQUFDLENBQUNVLEdBQUcsQ0FBQyxDQUFDLENBQUM7VUFDNUQsQ0FBQyxNQUFNLElBQUlWLFNBQVMsQ0FBQzFFLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDdEN5RSxRQUFRLENBQUNHLElBQUksQ0FBQyxHQUFHRixTQUFTLENBQUNHLE9BQU87VUFDdEMsQ0FBQyxNQUFNLElBQUlILFNBQVMsQ0FBQzFFLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDbEN5RSxRQUFRLENBQUNHLElBQUksQ0FBQyxHQUFHRixTQUFTLENBQUNTLEtBQUssQ0FBQyxDQUFDLENBQUM7VUFDdkMsQ0FBQyxNQUFNO1lBQ0hWLFFBQVEsQ0FBQ0csSUFBSSxDQUFDLEdBQUdsQixDQUFDLENBQUNnQixTQUFTLENBQUMsQ0FBQ1UsR0FBRyxDQUFDLENBQUM7VUFDdkM7UUFDSjtNQUNKO01BRUFDLFNBQVMsQ0FBQ3BDLElBQUksQ0FBQ3dCLFFBQVEsQ0FBQztNQUN4QixPQUFPQSxRQUFRO0lBQ25CLENBQUMsQ0FBQztJQUVGLElBQUksSUFBSSxDQUFDN0MsV0FBVyxDQUFDSixNQUFNLElBQUksQ0FBQyxJQUFJNkQsU0FBUyxDQUFDN0QsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN0RCxJQUFJLENBQUNLLE1BQU0sR0FBR3dELFNBQVMsQ0FBQ0UsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDO0lBRUEsT0FBT0YsU0FBUztFQUVwQjtFQUVBRyxVQUFVQSxDQUFDakMsVUFBVSxHQUFHLElBQUksRUFBRUMsU0FBUyxHQUFHLElBQUksRUFBRTtJQUM1QyxJQUFJaUMsU0FBUyxHQUFHL0IsQ0FBQyxDQUFDLCtCQUErQixDQUFDO0lBQ2xELElBQUksQ0FBQ2pGLFdBQVcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO01BQzFCLElBQUksQ0FBQ2dILFFBQVEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRUQsU0FBUyxFQUFFbEMsVUFBVSxFQUFFQyxTQUFTLENBQUM7SUFDOUUsQ0FBQyxDQUFDO0lBRUYsT0FBT2lDLFNBQVM7RUFDcEI7RUFFQUUsUUFBUUEsQ0FBQ3pJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRXFHLFVBQVUsR0FBRyxJQUFJLEVBQUVDLFNBQVMsR0FBRyxJQUFJLEVBQUU7SUFDbkR0RyxFQUFFLEdBQUdtRSxRQUFRLENBQUNuRSxFQUFFLENBQUM7SUFDakIsSUFBSTBGLEtBQUssQ0FBQzFGLEVBQUUsQ0FBQyxFQUFFO01BQ1hBLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWDtJQUNBLElBQUk4RyxZQUFZO0lBQ2hCLElBQUksSUFBSSxDQUFDcEMsV0FBVyxDQUFDSixNQUFNLEtBQUssQ0FBQyxFQUFFO01BQy9Cd0MsWUFBWSxHQUFHLElBQUksQ0FBQ3ZGLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsTUFBTTtNQUNIdUYsWUFBWSxHQUFHLElBQUksQ0FBQzNHLElBQUksQ0FBQyxDQUFDO0lBQzlCO0lBRUEsSUFBSW9JLFNBQVMsR0FBRy9CLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQztJQUVuRE0sWUFBWSxDQUFDdEYsSUFBSSxDQUFDLE1BQU07TUFDcEIsSUFBSXhCLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUNWQSxFQUFFLEdBQUcsSUFBSSxDQUFDMEUsV0FBVyxDQUFDMkQsRUFBRSxDQUFDckksRUFBRSxDQUFDLENBQUNBLEVBQUU7TUFDbkM7TUFFQSxJQUFJLENBQUN3SSxRQUFRLENBQUN4SSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRXVJLFNBQVMsRUFBRWxDLFVBQVUsRUFBRUMsU0FBUyxDQUFDO0lBQzFFLENBQUMsQ0FBQztJQUVGLE9BQU9pQyxTQUFTO0VBQ3BCO0VBRUFHLFNBQVNBLENBQUMxSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUySSxRQUFRLEVBQUV0QyxVQUFVLEdBQUcsSUFBSSxFQUFFQyxTQUFTLEdBQUcsSUFBSSxFQUFFO0lBQzlEdEcsRUFBRSxHQUFHbUUsUUFBUSxDQUFDbkUsRUFBRSxDQUFDO0lBQ2pCLElBQUkwRixLQUFLLENBQUMxRixFQUFFLENBQUMsRUFBRTtNQUNYQSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1g7SUFDQSxJQUFJOEcsWUFBWTtJQUNoQixJQUFJLElBQUksQ0FBQ3BDLFdBQVcsQ0FBQ0osTUFBTSxLQUFLLENBQUMsRUFBRTtNQUMvQndDLFlBQVksR0FBRyxJQUFJLENBQUN2RixXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDLE1BQU07TUFDSHVGLFlBQVksR0FBRyxJQUFJLENBQUMzRyxJQUFJLENBQUMsQ0FBQztJQUM5QjtJQUVBLElBQUlvSSxTQUFTLEdBQUcvQixDQUFDLENBQUMsZ0NBQWdDLENBQUM7SUFFbkRNLFlBQVksQ0FBQ3RGLElBQUksQ0FBQyxNQUFNO01BQ3BCLElBQUl4QixFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFDVkEsRUFBRSxHQUFHLElBQUksQ0FBQzBFLFdBQVcsQ0FBQzJELEVBQUUsQ0FBQ3JJLEVBQUUsQ0FBQyxDQUFDQSxFQUFFO01BQ25DO01BRUEsSUFBSSxDQUFDd0ksUUFBUSxDQUFDeEksRUFBRSxFQUFFLFlBQVksRUFBRTJJLFFBQVEsRUFBRUosU0FBUyxFQUFFbEMsVUFBVSxFQUFFQyxTQUFTLENBQUM7SUFDL0UsQ0FBQyxDQUFDO0lBRUYsT0FBT2lDLFNBQVM7RUFDcEI7RUFHQUMsUUFBUUEsQ0FBQ3hJLEVBQUUsRUFBRWtHLFVBQVUsRUFBRXlDLFFBQVEsRUFBRUosU0FBUyxFQUFFbEMsVUFBVSxFQUFFQyxTQUFTLEVBQUU7SUFDakV0RyxFQUFFLEdBQUdtRSxRQUFRLENBQUNuRSxFQUFFLENBQUM7SUFDakIsSUFBSTBGLEtBQUssQ0FBQzFGLEVBQUUsQ0FBQyxFQUFFO01BQ1hBLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWDtJQUNBLE1BQU1zQixFQUFFLEdBQUc5QixxREFBTSxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDdUYsTUFBTSxDQUFDdEQsSUFBSSxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztNQUM1QkMsS0FBSyxFQUFFLE9BQU87TUFDZHNFLFVBQVUsRUFBRUEsVUFBVTtNQUN0QkMsUUFBUSxFQUFFN0UsRUFBRTtNQUNaRCxJQUFJLEVBQUU7UUFDRm1ELFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVU7UUFDM0JDLFdBQVcsRUFBRSxJQUFJLENBQUNBLFdBQVc7UUFDN0J6RSxFQUFFLEVBQUVBLEVBQUU7UUFDTjRJLFNBQVMsRUFBRUQ7TUFDZjtJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTUUsU0FBUyxHQUFHN0ksRUFBRSxLQUFLLElBQUksSUFBSUEsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxNQUFNO0lBRTlELElBQUksQ0FBQ2dGLFlBQVksQ0FBQzFELEVBQUUsQ0FBQyxHQUFHLENBQUVtQixJQUFJLElBQUs7TUFDL0I4RixTQUFTLENBQUM5QixNQUFNLENBQUNoRSxJQUFJLENBQUNpRSxJQUFJLENBQUM7TUFDM0IsSUFBSTBCLEtBQUssR0FBR0csU0FBUyxDQUFDTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUNDLFFBQVEsQ0FBQyxhQUFhRixTQUFTLHdCQUF3QixJQUFJLENBQUMxRCxPQUFPLEVBQUUsQ0FBQyxDQUFDMUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQ0EsSUFBSSxDQUFDLFVBQVUsRUFBRXpDLEVBQUUsQ0FBQztNQUNySixJQUFJb0ksS0FBSyxDQUFDOUQsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDOEQsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDZCxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDMURjLEtBQUssQ0FBQ1ksSUFBSSxDQUFDLFlBQVksRUFBRSw0QkFBNEIsQ0FBQztNQUMxRDtNQUVBMUosNkNBQUcsQ0FBQ3FILE9BQU8sQ0FBQzRCLFNBQVMsQ0FBQztNQUN0QmxDLFVBQVUsSUFBSUEsVUFBVSxDQUFDNUQsSUFBSSxDQUFDO0lBQ2xDLENBQUMsRUFBR21FLEdBQUcsSUFBSztNQUNSTixTQUFTLElBQUlBLFNBQVMsQ0FBQ00sR0FBRyxDQUFDO0lBQy9CLENBQUMsQ0FBQztFQUNOO0VBRUFxQyxHQUFHQSxDQUFBLEVBQUc7SUFDRixPQUFPLElBQUluSCxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7TUFDcEMsTUFBTW9HLEtBQUssR0FBRzVCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQ0MsTUFBTSxDQUFDLElBQUksQ0FBQzZCLFVBQVUsQ0FBQyxNQUFNO1FBQ25ELElBQUksQ0FBQ3ZCLGVBQWUsQ0FBQ3FCLEtBQUssQ0FBQztRQUMzQnJHLE9BQU8sQ0FBQyxDQUFDO01BQ2IsQ0FBQyxFQUFFQyxNQUFNLENBQUMsQ0FBQztJQUNmLENBQUMsQ0FBQztFQUNOO0VBRUFrSCxJQUFJQSxDQUFDbEosRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ1ZBLEVBQUUsR0FBR21FLFFBQVEsQ0FBQ25FLEVBQUUsQ0FBQztJQUNqQixJQUFJMEYsS0FBSyxDQUFDMUYsRUFBRSxDQUFDLEVBQUU7TUFDWEEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYO0lBQ0EsT0FBTyxJQUFJLENBQUN1QixXQUFXLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsTUFBTTtNQUNqQyxJQUFJMkgsU0FBUztNQUNiLElBQUluSixFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDVG1KLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQzFELElBQUksQ0FBQ3pGLEVBQUUsQ0FBQyxDQUFDO01BQy9CLENBQUMsTUFBTTtRQUNIbUosU0FBUyxHQUFHLElBQUksQ0FBQ3pFLFdBQVc7TUFDaEM7TUFDQSxJQUFJMEUsTUFBTSxHQUFHLEVBQUU7TUFDZkQsU0FBUyxDQUFDRSxPQUFPLENBQUUxRCxJQUFJLElBQUs7UUFDeEIsTUFBTXJFLEVBQUUsR0FBRzlCLHFEQUFNLENBQUMsQ0FBQztRQUNuQjRKLE1BQU0sQ0FBQ3JELElBQUksQ0FBQyxJQUFJakUsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1VBQ3pDLElBQUksQ0FBQ3NILFVBQVUsQ0FBQzNELElBQUksQ0FBQyxDQUFDbkUsSUFBSSxDQUFFeUcsS0FBSyxJQUFLO1lBQ2xDLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ3RELElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7Y0FDNUJDLEtBQUssRUFBRSxPQUFPO2NBQ2RzRSxVQUFVLEVBQUUsTUFBTTtjQUNsQkMsUUFBUSxFQUFFN0UsRUFBRTtjQUNaRCxJQUFJLEVBQUU7Z0JBQ0ZtRCxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO2dCQUMzQkMsV0FBVyxFQUFFLElBQUksQ0FBQ0EsV0FBVztnQkFDN0JoQyxJQUFJLEVBQUVrRCxJQUFJO2dCQUNWc0MsS0FBSyxFQUFFQTtjQUNYO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUNqRCxZQUFZLENBQUMxRCxFQUFFLENBQUMsR0FBRyxDQUFFc0YsR0FBRyxJQUFLO2NBQzlCLElBQUluRSxJQUFJLEdBQUcsT0FBT21FLEdBQUcsQ0FBQ25FLElBQUksQ0FBQzhFLFFBQVEsS0FBSyxRQUFRLEdBQUc3RixJQUFJLENBQUNnQixLQUFLLENBQUNrRSxHQUFHLENBQUNuRSxJQUFJLENBQUM4RSxRQUFRLENBQUMsR0FBR1gsR0FBRyxDQUFDbkUsSUFBSSxDQUFDOEUsUUFBUTtjQUNwR1gsR0FBRyxDQUFDbkUsSUFBSSxDQUFDOEUsUUFBUSxHQUFHLElBQUksQ0FBQ2dDLGVBQWUsQ0FBQzlHLElBQUksQ0FBQztjQUM5Q1YsT0FBTyxDQUFDNkUsR0FBRyxDQUFDO1lBQ2hCLENBQUMsRUFBRTVFLE1BQU0sQ0FBQztVQUNkLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO01BQ1AsQ0FBQyxDQUFDO01BRUYsT0FBT0YsT0FBTyxDQUFDMEgsR0FBRyxDQUFDSixNQUFNLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0VBQ047RUFFQUssTUFBTUEsQ0FBQzlFLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU0sRUFBRTtJQUN6QixNQUFNckQsRUFBRSxHQUFHOUIscURBQU0sQ0FBQyxDQUFDO0lBQ25CLE9BQU8sSUFBSSxDQUFDK0IsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLE1BQU07TUFDakMsT0FBTyxJQUFJTSxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7UUFDcEMsSUFBSSxDQUFDc0gsVUFBVSxDQUFDM0UsTUFBTSxDQUFDLENBQUNuRCxJQUFJLENBQUV5RyxLQUFLLElBQUs7VUFDcEMsSUFBSSxDQUFDbEQsTUFBTSxDQUFDdEQsSUFBSSxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztZQUM1QkMsS0FBSyxFQUFFLE9BQU87WUFDZHNFLFVBQVUsRUFBRSxRQUFRO1lBQ3BCQyxRQUFRLEVBQUU3RSxFQUFFO1lBQ1pELElBQUksRUFBRTtjQUNGbUQsVUFBVSxFQUFFLElBQUksQ0FBQ0EsVUFBVTtjQUMzQkMsV0FBVyxFQUFFLElBQUksQ0FBQ0EsV0FBVztjQUM3QmhDLElBQUksRUFBRWtDLE1BQU07Y0FDWnNELEtBQUssRUFBRUE7WUFDWDtVQUNKLENBQUMsQ0FBQyxDQUFDO1VBRUgsSUFBSSxDQUFDakQsWUFBWSxDQUFDMUQsRUFBRSxDQUFDLEdBQUcsQ0FBRXNGLEdBQUcsSUFBSztZQUM5QixJQUFJbkUsSUFBSSxHQUFHLE9BQU9tRSxHQUFHLENBQUNuRSxJQUFJLENBQUM4RSxRQUFRLEtBQUssUUFBUSxHQUFHN0YsSUFBSSxDQUFDZ0IsS0FBSyxDQUFDa0UsR0FBRyxDQUFDbkUsSUFBSSxDQUFDOEUsUUFBUSxDQUFDLEdBQUdYLEdBQUcsQ0FBQ25FLElBQUksQ0FBQzhFLFFBQVE7WUFDcEdYLEdBQUcsQ0FBQ25FLElBQUksQ0FBQzhFLFFBQVEsR0FBRyxJQUFJLENBQUNnQyxlQUFlLENBQUM5RyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakRWLE9BQU8sQ0FBQzZFLEdBQUcsQ0FBQztVQUNoQixDQUFDLEVBQUU1RSxNQUFNLENBQUM7UUFDZCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDTjtFQUVBMEgsTUFBTUEsQ0FBQzFKLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUNaQSxFQUFFLEdBQUdtRSxRQUFRLENBQUNuRSxFQUFFLENBQUM7SUFDakIsSUFBSTBGLEtBQUssQ0FBQzFGLEVBQUUsQ0FBQyxFQUFFO01BQ1hBLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWDtJQUNBLElBQUlBLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRUEsRUFBRSxHQUFHLElBQUksQ0FBQzJFLE1BQU0sRUFBRTNFLEVBQUU7SUFDbkMsTUFBTXNCLEVBQUUsR0FBRzlCLHFEQUFNLENBQUMsQ0FBQztJQUNuQixPQUFPLElBQUksQ0FBQytCLFdBQVcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO01BQ2pDLE9BQU8sSUFBSU0sT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1FBQ3BDLElBQUksQ0FBQytDLE1BQU0sQ0FBQ3RELElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7VUFDNUJDLEtBQUssRUFBRSxPQUFPO1VBQ2RzRSxVQUFVLEVBQUUsUUFBUTtVQUNwQkMsUUFBUSxFQUFFN0UsRUFBRTtVQUNaRCxJQUFJLEVBQUU7WUFDRm1ELFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVU7WUFDM0JDLFdBQVcsRUFBRSxJQUFJLENBQUNBLFdBQVc7WUFDN0J6RSxFQUFFLEVBQUVBO1VBQ1I7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQ2dGLFlBQVksQ0FBQzFELEVBQUUsQ0FBQyxHQUFHLENBQUNTLE9BQU8sRUFBRUMsTUFBTSxDQUFDO01BQzdDLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOO0VBRUFULFdBQVdBLENBQUEsRUFBRztJQUNWLE9BQU8sSUFBSU8sT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO01BQ3BDLElBQUksSUFBSSxDQUFDNEMsYUFBYSxFQUFFO1FBQ3BCN0MsT0FBTyxDQUFDLENBQUM7TUFDYixDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQzhDLHFCQUFxQixFQUFFO1FBQ3BDLElBQUksQ0FBQ0EscUJBQXFCLEdBQUcsSUFBSTtRQUNqQyxJQUFJLENBQUNHLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUNsRCxDQUFDLEVBQUUsTUFBTSxDQUNULENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQzJFLGdCQUFnQixDQUFDLENBQUMsQ0FBQ25JLElBQUksQ0FBQyxNQUFNO1VBQy9CTyxPQUFPLENBQUMsSUFBSSxDQUFDNkgsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQztNQUNOLENBQUMsTUFBTTtRQUNILE1BQU0sQ0FBQ0MsY0FBYyxFQUFFQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUM5RSxZQUFZLENBQUMscUJBQXFCLENBQUM7UUFDaEYsSUFBSSxDQUFDQSxZQUFZLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUN2QyxNQUFNO1VBQ0Y2RSxjQUFjLENBQUMsQ0FBQztVQUNoQjlILE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxFQUNELE1BQU07VUFDRitILGFBQWEsQ0FBQyxDQUFDO1VBQ2Y5SCxNQUFNLENBQUMsQ0FBQztRQUNaLENBQUMsQ0FDSjtNQUNMO0lBQ0osQ0FBQyxDQUFDO0VBQ047RUFFQTBCLEtBQUtBLENBQUEsRUFBRztJQUNKLElBQUksSUFBSSxDQUFDcUIsTUFBTSxFQUFFO01BQ2IsSUFBSSxDQUFDRCxlQUFlLEdBQUcsS0FBSztNQUM1QixJQUFJLENBQUNDLE1BQU0sQ0FBQzlCLE9BQU8sR0FBRyxNQUFNLENBQzVCLENBQUM7TUFDRCxJQUFJLENBQUM4QixNQUFNLENBQUNyQixLQUFLLENBQUMsQ0FBQztNQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekI7RUFDSjtFQUVBcUcsS0FBS0EsQ0FBQSxFQUFHO0lBQ0osSUFBSSxDQUFDckYsV0FBVyxHQUFHLEVBQUU7SUFDckIsSUFBSSxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sSUFBSTtFQUNmO0VBRUEyRSxVQUFVQSxDQUFDM0QsSUFBSSxFQUFFO0lBQ2IsSUFBSXFFLFFBQVEsR0FBRyxFQUFFO0lBQ2pCLElBQUkvQixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsS0FBSyxNQUFNLENBQUN2SCxHQUFHLEVBQUVDLEtBQUssQ0FBQyxJQUFJeUMsTUFBTSxDQUFDQyxPQUFPLENBQUNzQyxJQUFJLENBQUMsRUFBRTtNQUM3QyxJQUFJaEYsS0FBSyxZQUFZaUgsSUFBSSxFQUFFO1FBQ3ZCb0MsUUFBUSxDQUFDakUsSUFBSSxDQUFDLElBQUlqRSxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7VUFDM0MsQ0FBQyxDQUFDdEIsR0FBRyxFQUFFQyxLQUFLLEtBQUs7WUFDYixJQUFJc0osTUFBTSxHQUFHLElBQUlDLFVBQVUsQ0FBQyxDQUFDO1lBQzdCRCxNQUFNLENBQUNFLE1BQU0sR0FBRzNILENBQUMsSUFBSTtjQUNqQixNQUFNbEIsRUFBRSxHQUFHOUIscURBQU0sQ0FBQyxDQUFDO2NBQ25CLElBQUksQ0FBQ3dGLFlBQVksQ0FBQzFELEVBQUUsQ0FBQyxHQUFHLENBQUNTLE9BQU8sRUFBRUMsTUFBTSxDQUFDO2NBRXpDLElBQUlvSSxNQUFNLEdBQUc1SCxDQUFDLENBQUMvQixNQUFNLENBQUMySixNQUFNO2NBQzVCLElBQUlDLGdCQUFnQixHQUFHbEcsUUFBUSxDQUFDbUcsSUFBSSxDQUFDQyxJQUFJLENBQUNILE1BQU0sQ0FBQzlGLE1BQU0sR0FBRzFFLGVBQWUsQ0FBQyxDQUFDO2NBQzNFcUksS0FBSyxDQUFDdkgsR0FBRyxDQUFDLEdBQUc7Z0JBQ1RZLEVBQUUsRUFBRUEsRUFBRTtnQkFDTmtKLFNBQVMsRUFBRTdKLEtBQUssQ0FBQytHLElBQUk7Z0JBQ3JCK0MsVUFBVSxFQUFFL0osR0FBRztnQkFDZmdLLGNBQWMsRUFBRS9KLEtBQUssQ0FBQ2dLO2NBQzFCLENBQUM7Y0FDRCxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR1AsZ0JBQWdCLEVBQUUsRUFBRU8sQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLENBQUM3RixNQUFNLENBQUN0RCxJQUFJLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDO2tCQUM1QkMsS0FBSyxFQUFFLE9BQU87a0JBQ2RzRSxVQUFVLEVBQUUsUUFBUTtrQkFDcEJDLFFBQVEsRUFBRTdFLEVBQUU7a0JBQ1pELElBQUksRUFBRTtvQkFDRndKLEtBQUssRUFBRVQsTUFBTSxDQUFDVSxLQUFLLENBQUNsTCxlQUFlLEdBQUdnTCxDQUFDLEVBQUVoTCxlQUFlLElBQUlnTCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ25FdEYsR0FBRyxFQUFFc0YsQ0FBQztvQkFDTlAsZ0JBQWdCLEVBQUVBLGdCQUFnQjtvQkFDbENHLFNBQVMsRUFBRTdKLEtBQUssQ0FBQytHLElBQUk7b0JBQ3JCK0MsVUFBVSxFQUFFL0osR0FBRztvQkFDZmdLLGNBQWMsRUFBRS9KLEtBQUssQ0FBQ2dLLElBQUk7b0JBQzFCSSxZQUFZLEVBQUVwSyxLQUFLLENBQUNtQyxJQUFJO29CQUN4QjBCLFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVU7b0JBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQTtrQkFDdEI7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Y0FDUDtZQUNKLENBQUM7WUFDRHdGLE1BQU0sQ0FBQzFHLE9BQU8sR0FBRyxNQUFNO2NBQ25CdkIsTUFBTSxDQUFDLENBQUM7WUFDWixDQUFDO1lBQ0RpSSxNQUFNLENBQUNlLGtCQUFrQixDQUFDckssS0FBSyxDQUFDO1VBQ3BDLENBQUMsRUFBRUQsR0FBRyxFQUFFQyxLQUFLLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7TUFDUDtJQUNKO0lBRUEsT0FBT21CLE9BQU8sQ0FBQzBILEdBQUcsQ0FBQ1EsUUFBUSxDQUFDLENBQUN4SSxJQUFJLENBQUMsTUFBTTtNQUNwQyxPQUFPeUcsS0FBSztJQUNoQixDQUFDLENBQUM7RUFDTjtFQUVBZ0QsVUFBVUEsQ0FBQ3pJLENBQUMsRUFBRTtJQUNWLElBQUlDLElBQUksR0FBR2YsSUFBSSxDQUFDZ0IsS0FBSyxDQUFDRixDQUFDLENBQUNDLElBQUksQ0FBQztJQUM3QixJQUFJQSxJQUFJLENBQUNFLFFBQVEsRUFBRTtNQUNmLElBQUksSUFBSSxDQUFDcUMsWUFBWSxDQUFDOUQsY0FBYyxDQUFDdUIsSUFBSSxDQUFDMEQsUUFBUSxDQUFDLEVBQUU7UUFDakQsSUFBSSxDQUFDbkIsWUFBWSxDQUFDdkMsSUFBSSxDQUFDMEQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMxRCxJQUFJLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUN1QyxZQUFZLENBQUN2QyxJQUFJLENBQUMwRCxRQUFRLENBQUM7TUFDM0M7TUFDQSxJQUFJMUQsSUFBSSxDQUFDRyxHQUFHLElBQUlILElBQUksQ0FBQ0ksTUFBTSxFQUFFO1FBQ3pCdEQsdURBQU8sQ0FBQyxjQUFjLEVBQUVrRCxJQUFJLENBQUNJLE1BQU0sSUFBSSxFQUFFLEVBQUVKLElBQUksQ0FBQ0csR0FBRyxJQUFJLEVBQUUsQ0FBQztNQUM5RDtNQUVBLElBQUlILElBQUksQ0FBQ0ssSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUN6QixJQUFJLENBQUNrQyxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZDLElBQUksQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQ3VDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQztRQUMvQyxJQUFJLENBQUNGLGVBQWUsR0FBRyxLQUFLO1FBQzVCLElBQUksQ0FBQ0MsTUFBTSxDQUFDckIsS0FBSyxDQUFDLENBQUM7TUFDdkI7SUFDSixDQUFDLE1BQU07TUFFSCxJQUFJakIsSUFBSSxDQUFDRyxHQUFHLElBQUlILElBQUksQ0FBQ0ksTUFBTSxFQUFFO1FBQ3pCdEQsdURBQU8sQ0FBQyxTQUFTLEVBQUVrRCxJQUFJLENBQUNJLE1BQU0sSUFBSSxFQUFFLEVBQUVKLElBQUksQ0FBQ0csR0FBRyxJQUFJLEVBQUUsQ0FBQztNQUN6RDtNQUVBLElBQUlILElBQUksQ0FBQ0ssSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUN6QixJQUFJLENBQUM4QixhQUFhLEdBQUcsSUFBSTtRQUN6QixJQUFJLENBQUNDLHFCQUFxQixHQUFHLEtBQUs7UUFDbEMsSUFBSSxDQUFDRyxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZDLElBQUksQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQ3VDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQztNQUNuRCxDQUFDLE1BQU0sSUFBSXZDLElBQUksQ0FBQ0ssSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUM3QixNQUFNb0ksUUFBUSxHQUFHeEosSUFBSSxDQUFDZ0IsS0FBSyxDQUFDRCxJQUFJLENBQUNwQixJQUFJLENBQUNvQixJQUFJLENBQUM7UUFDM0MsSUFBSSxDQUFDaUMsV0FBVyxHQUFHLEVBQUU7UUFDckJqQyxJQUFJLENBQUNwQixJQUFJLENBQUNvQixJQUFJLEdBQUcsSUFBSSxDQUFDOEcsZUFBZSxDQUFDMkIsUUFBUSxDQUFDO01BRW5ELENBQUMsTUFBTSxJQUFJekksSUFBSSxDQUFDSyxJQUFJLEtBQUssV0FBVyxJQUFJTCxJQUFJLENBQUNLLElBQUksS0FBSyxXQUFXLEVBQUU7UUFDL0QsTUFBTW9JLFFBQVEsR0FBR3hKLElBQUksQ0FBQ2dCLEtBQUssQ0FBQ0QsSUFBSSxDQUFDcEIsSUFBSSxDQUFDb0IsSUFBSSxDQUFDO1FBRTNDLElBQUkwSSxHQUFHLEdBQUcsSUFBSSxDQUFDNUIsZUFBZSxDQUFDMkIsUUFBUSxDQUFDO1FBQ3hDLElBQUlFLEVBQUU7UUFFTixJQUFJM0ksSUFBSSxDQUFDSyxJQUFJLEtBQUssV0FBVyxFQUFFO1VBQzNCc0ksRUFBRSxHQUFHLElBQUksQ0FBQ2xHLFNBQVM7UUFDdkIsQ0FBQyxNQUFNO1VBQ0hrRyxFQUFFLEdBQUcsSUFBSSxDQUFDbkcsU0FBUztRQUN2QjtRQUVBbUcsRUFBRSxDQUFDRCxHQUFHLENBQUM7UUFDUDFJLElBQUksQ0FBQ3BCLElBQUksQ0FBQ29CLElBQUksR0FBRzBJLEdBQUc7TUFFeEI7TUFFQSxJQUFJNUQsUUFBUSxHQUFHOUUsSUFBSSxDQUFDQSxJQUFJLEVBQUU4RSxRQUFRO01BQ2xDLElBQUlBLFFBQVEsRUFBRTtRQUNWOUUsSUFBSSxDQUFDQSxJQUFJLENBQUM4RSxRQUFRLEdBQUc3RixJQUFJLENBQUNnQixLQUFLLENBQUNELElBQUksQ0FBQ0EsSUFBSSxDQUFDOEUsUUFBUSxDQUFDO01BQ3ZEO01BRUEsSUFBSSxJQUFJLENBQUN2QyxZQUFZLENBQUM5RCxjQUFjLENBQUN1QixJQUFJLENBQUMwRCxRQUFRLENBQUMsRUFBRTtRQUNqRCxJQUFJLENBQUNuQixZQUFZLENBQUN2QyxJQUFJLENBQUMwRCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzFELElBQUksQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQ3VDLFlBQVksQ0FBQ3ZDLElBQUksQ0FBQzBELFFBQVEsQ0FBQztNQUMzQztJQUNKO0VBQ0o7RUFFQXdELGdCQUFnQkEsQ0FBQSxFQUFHO0lBQ2YsT0FBTyxJQUFJN0gsT0FBTyxDQUFFQyxPQUFPLElBQUs7TUFFNUIsTUFBTXNKLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxDQUFDN0csVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDOEcsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQ0EsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO01BQzlGLElBQUlwSixNQUFNLENBQUNDLFFBQVEsQ0FBQ0MsUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUN2QyxJQUFJLENBQUMyQyxNQUFNLEdBQUcsSUFBSTFDLFNBQVMsQ0FBQyxTQUFTSCxNQUFNLENBQUNDLFFBQVEsQ0FBQ0csSUFBSSxpQkFBaUIrSSxnQkFBZ0IsRUFBRSxDQUFDO01BQ2pHLENBQUMsTUFBTTtRQUNILElBQUksQ0FBQ3RHLE1BQU0sR0FBRyxJQUFJMUMsU0FBUyxDQUFDLFFBQVFILE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRyxJQUFJLGlCQUFpQitJLGdCQUFnQixFQUFFLENBQUM7TUFDaEc7TUFHQSxJQUFJLENBQUN0RyxNQUFNLENBQUN4QyxTQUFTLEdBQUcsSUFBSSxDQUFDMEksVUFBVSxDQUFDbEssSUFBSSxDQUFDLElBQUksQ0FBQztNQUVsRCxJQUFJLENBQUNnRSxNQUFNLENBQUM5QixPQUFPLEdBQUlULENBQUMsSUFBSztRQUN6QlUsT0FBTyxDQUFDQyxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUNxQixVQUFVLEtBQUssSUFBSSxDQUFDOEcsUUFBUSw4QkFBOEIsQ0FBQztRQUM1RixJQUFJLENBQUMxRyxhQUFhLEdBQUcsS0FBSztRQUMxQixLQUFLLE1BQU0sQ0FBQzJHLElBQUksRUFBRTVLLEtBQUssQ0FBQyxJQUFJeUMsTUFBTSxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDMkIsWUFBWSxDQUFDLEVBQUU7VUFDM0RyRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM2QixDQUFDLENBQUM7UUFDZjtRQUNBLElBQUksQ0FBQ3dDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFFdEIxQixVQUFVLENBQUMsTUFBTTtVQUNiLElBQUksSUFBSSxDQUFDd0IsZUFBZSxFQUFFO1lBQ3RCLElBQUksQ0FBQzZFLGdCQUFnQixDQUFDLENBQUMsQ0FBQ25JLElBQUksQ0FBQyxNQUFNLENBQ25DLENBQUMsQ0FBQztVQUNOO1FBQ0osQ0FBQyxFQUFFLElBQUksQ0FBQztNQUNaLENBQUM7TUFFRCxJQUFJLENBQUN1RCxNQUFNLENBQUN4QixPQUFPLEdBQUlDLEdBQUcsSUFBSztRQUMzQk4sT0FBTyxDQUFDQyxLQUFLLENBQUMsbUNBQW1DSyxHQUFHLGlCQUFpQixDQUFDO1FBQ3RFLElBQUksSUFBSSxDQUFDb0IsYUFBYSxFQUFFO1VBQ3BCLElBQUk7WUFDQSxJQUFJLENBQUNHLE1BQU0sQ0FBQ3JCLEtBQUssQ0FBQyxDQUFDO1VBQ3ZCLENBQUMsQ0FBQyxPQUFPbEIsQ0FBQyxFQUFFLENBRVo7UUFDSjtNQUNKLENBQUM7TUFHRCxJQUFJLENBQUN1QyxNQUFNLENBQUNwQixNQUFNLEdBQUcsTUFBTTtRQUN2QjVCLE9BQU8sQ0FBQyxDQUFDO01BQ2IsQ0FBQztJQUNMLENBQUMsQ0FBQztFQUVOO0VBRUE2SCxnQkFBZ0JBLENBQUEsRUFBRztJQUNmLE1BQU10SSxFQUFFLEdBQUc5QixxREFBTSxDQUFDLENBQUM7SUFDbkIsT0FBTyxJQUFJc0MsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO01BQ3BDLElBQUksQ0FBQytDLE1BQU0sQ0FBQ3RELElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUM7UUFDNUJDLEtBQUssRUFBRSxPQUFPO1FBQ2RzRSxVQUFVLEVBQUUsU0FBUztRQUNyQkMsUUFBUSxFQUFFN0UsRUFBRTtRQUNaRCxJQUFJLEVBQUU7VUFDRm1ELFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVU7VUFDM0JDLFdBQVcsRUFBRSxJQUFJLENBQUNBO1FBQ3RCO01BQ0osQ0FBQyxDQUFDLENBQUM7TUFFSCxJQUFJLENBQUNPLFlBQVksQ0FBQzFELEVBQUUsQ0FBQyxHQUFHLENBQUNTLE9BQU8sRUFBRUMsTUFBTSxDQUFDO0lBQzdDLENBQUMsQ0FBQztFQUNOO0VBRUF1SCxlQUFlQSxDQUFDM0MsR0FBRyxFQUFFO0lBQ2pCLElBQUk0RSxPQUFPLEdBQUcsRUFBRTtJQUNoQixLQUFLLElBQUlDLFNBQVMsSUFBSTdFLEdBQUcsRUFBRTtNQUN2QixNQUFNNUcsRUFBRSxHQUFHeUwsU0FBUyxDQUFDekwsRUFBRTtNQUN2QixNQUFNbUwsR0FBRyxHQUFHLElBQUksQ0FBQzFGLElBQUksQ0FBQ3pGLEVBQUUsQ0FBQztNQUN6QixLQUFLLE1BQU0sQ0FBQzBMLENBQUMsRUFBRUMsQ0FBQyxDQUFDLElBQUl2SSxNQUFNLENBQUNDLE9BQU8sQ0FBQ29JLFNBQVMsQ0FBQ0csTUFBTSxDQUFDLEVBQUU7UUFDbkQsSUFBSUQsQ0FBQyxJQUFJLE9BQU9BLENBQUMsS0FBSyxRQUFRLElBQUlBLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1VBQ3JEUixHQUFHLENBQUNPLENBQUMsQ0FBQyxHQUFHLElBQUk1TCxRQUFRLENBQUM2TCxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUVBLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QyxDQUFDLE1BQU07VUFDSFIsR0FBRyxDQUFDTyxDQUFDLENBQUMsR0FBR0MsQ0FBQztRQUNkO01BQ0o7TUFFQUgsT0FBTyxDQUFDekYsSUFBSSxDQUFDb0YsR0FBRyxDQUFDO0lBQ3JCO0lBRUEsSUFBSSxJQUFJLENBQUN6RyxXQUFXLENBQUNKLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDL0IsSUFBSSxDQUFDSyxNQUFNLEdBQUcsSUFBSSxDQUFDRCxXQUFXLENBQUMyRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQyxNQUFNO01BQ0gsSUFBSSxDQUFDMUQsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNwQjtJQUVBLE9BQU82RyxPQUFPO0VBRWxCO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3NvY2tldC5qcz9hZGJjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwfSBmcm9tICcuL3NkY19tYWluLmpzJztcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHt1dWlkdjR9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuXG5sZXQgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG5sZXQgSVNfQ09OTkVDVElORyA9IGZhbHNlO1xubGV0IFNEQ19TT0NLRVQgPSBudWxsXG5jb25zdCBNQVhfRklMRV9VUExPQUQgPSAyNTAwMDtcbmxldCBPUEVOX1JFUVVFU1RTID0ge307XG5cblxuY2xhc3MgU3ViTW9kZWwge1xuXG4gICAgY29uc3RydWN0b3IocGssIG1vZGVsKSB7XG4gICAgICAgIHRoaXMucGsgPSBwaztcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTREMgTW9kZWwgTmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbFxuICAgICAqL1xuICAgIHNldCBtb2RlbChtb2RlbCkge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgIH1cblxuICAgIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgdGhlIHN1YiBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJucyB7TW9kZWx9XG4gICAgICovXG4gICAgbG9hZChjb250cm9sbGVyKSB7XG4gICAgICAgIGlmICghdGhpcy5fbW9kZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNb2RlbCBpcyBub3Qgc2V0ISFcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIubmV3TW9kZWwodGhpcy5fbW9kZWwsIHtwazogdGhpcy5wa30pO1xuICAgIH1cbn1cblxuY29uc3QgTW9kZWxQcm94eUhhbmRsZXIgPSB7XG4gICAgZ2V0KHRhcmdldCwga2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W2tleV0gPz8gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdWJNb2RlbCkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5wayAmJiB2YWx1ZS5wayAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdWYWwgPSBuZXcgTnVtYmVyKHZhbHVlLnBrKTtcbiAgICAgICAgICAgIG5ld1ZhbC5sb2FkID0gdmFsdWUubG9hZC5iaW5kKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgc2V0KHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsID0gdGFyZ2V0W2tleV07XG4gICAgICAgICAgICBpZiAob2xkVmFsIGluc3RhbmNlb2YgU3ViTW9kZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3BrJykpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWUucGs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxsU2VydmVyKGFwcCwgY29udHJvbGxlciwgZnVuY05hbWUsIGFyZ3MpIHtcblxuICAgIGxldCBpZCA9IHV1aWR2NCgpO1xuICAgIGlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgIFNEQ19TT0NLRVQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ3NkY19jYWxsJyxcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBmdW5jTmFtZSxcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3NcbiAgICAgICAgfSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgT1BFTl9SRVFVRVNUU1tpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2Nvbm5lY3QoKSB7XG4gICAgSVNfQ09OTkVDVElORyA9IHRydWU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgICAgIFNEQ19TT0NLRVQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTRENfU09DS0VUID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIFNEQ19TT0NLRVQub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgICAgICAgICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcigncHVzaEVycm9yTXNnJywgZGF0YS5oZWFkZXIgfHwgJycsIGRhdGEubXNnIHx8ICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKE9QRU5fUkVRVUVTVFNbZGF0YS5pZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgT1BFTl9SRVFVRVNUU1tkYXRhLmlkXVsxXShkYXRhLmRhdGEgfHwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3B1c2hNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSAnc2RjX3JlY2FsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9QRU5fUkVRVUVTVFNbZGF0YS5pZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF1bMF0oZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSAnc2RjX2V2ZW50Jykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZXZlbnQgPSBkYXRhLmV2ZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoZXZlbnQsIGRhdGEucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlICYmIGRhdGEudHlwZSA9PT0gJ3NkY19yZWRpcmVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcignb25OYXZMaW5rJywgZGF0YS5saW5rKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgU0RDX1NPQ0tFVC5vbmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NEQyBTb2NrZXQgY2xvc2VkIHVuZXhwZWN0ZWRseScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhPUEVOX1JFUVVFU1RTKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlWzFdKHt9KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgT1BFTl9SRVFVRVNUU1trZXldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBfY29ubmVjdCgpO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgU0RDX1NPQ0tFVC5vbmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiAnLCBlcnIubWVzc2FnZSwgJ0Nsb3Npbmcgc29ja2V0Jyk7XG4gICAgICAgICAgICBpZiAoSVNfQ09OTkVDVEVEKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgU0RDX1NPQ0tFVC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBTRENfU09DS0VULm9ub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIElTX0NPTk5FQ1RFRCA9IHRydWU7XG4gICAgICAgICAgICBJU19DT05ORUNUSU5HID0gZmFsc2U7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICBJU19DT05ORUNURUQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFNEQ19TT0NLRVQuY2xvc2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuXG4gICAgICAgIH1cblxuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VfaGlkZGVuX2lucHV0cyh2YWx1ZSkge1xuXG4gICAgbGV0IGlzRmxvYXRSZWcgPSAvXi0/XFxkK1xcLj9cXGQrJC87XG4gICAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgICBsZXQgaXNCb29sUmVnID0gL14odHJ1ZXxmYWxzZSkkLztcbiAgICBsZXQgaXNTdHJpbmdSZWcgPSAvXihbJ11bXiddKlsnXSl8KFtcIl1bXlwiXSpbXCJdKSQvO1xuXG5cbiAgICBpZiAodmFsdWUudG9Mb3dlckNhc2UoKS5tYXRjaChpc0Jvb2xSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLm1hdGNoKGlzSW50UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNGbG9hdFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNTdHJpbmdSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29ubmVjdGVkKCkge1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGlmIChJU19DT05ORUNURUQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoSVNfQ09OTkVDVElORykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKF9jb25uZWN0KCkpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2RlbCB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW9kZWxfbmFtZSB7c3RyaW5nfVxuICAgICAqIEBwYXJhbSBtb2RlbF9xdWVyeSB7anNvbn1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSA9IHt9KSB7XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5tb2RlbF9uYW1lID0gbW9kZWxfbmFtZTtcbiAgICAgICAgdGhpcy5tb2RlbF9xdWVyeSA9IG1vZGVsX3F1ZXJ5O1xuICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYXV0b19yZWNvbm5lY3QgPSB0cnVlO1xuICAgICAgICB0aGlzLnNvY2tldCA9IG51bGw7XG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0ID0ge307XG4gICAgICAgIHRoaXMub25fdXBkYXRlID0gKCkgPT4ge1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uX2NyZWF0ZSA9ICgpID0+IHtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1faWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgbGV0IGlkeCA9IC0xO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICsraWR4O1xuICAgICAgICAgICAgICAgIGlmIChpZHggPCB0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiB0aGlzLnZhbHVlc19saXN0W2lkeF0sIGRvbmU6IGZhbHNlfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNfbGlzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgYnlQayhwaykge1xuICAgICAgICBpZiAocGsgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZWxlbSA9IHRoaXMudmFsdWVzX2xpc3QuZmluZChlbG0gPT4gZWxtLnBrID09PSBwayk7XG4gICAgICAgICAgICBpZiAoIWVsZW0pIHtcbiAgICAgICAgICAgICAgICBlbGVtID0gbmV3IFByb3h5KHtwazogcGt9LCBNb2RlbFByb3h5SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNfbGlzdC5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtwazogcGt9O1xuXG4gICAgfVxuXG4gICAgZmlsdGVyKG1vZGVsX3F1ZXJ5KSB7XG4gICAgICAgIHRoaXMubW9kZWxfcXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm1vZGVsX3F1ZXJ5LCBtb2RlbF9xdWVyeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGlzdFZpZXcoZmlsdGVyID0ge30sIGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsKSB7XG4gICAgICAgIGxldCAkZGl2X2xpc3QgPSAkKCc8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnbGlzdF92aWV3JyxcbiAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgJGRpdl9saXN0LmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgICAgIGFwcC5yZWZyZXNoKCRkaXZfbGlzdCk7XG4gICAgICAgICAgICAgICAgY2JfcmVzb2x2ZSAmJiBjYl9yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNiX3JlamVjdCAmJiBjYl9yZWplY3QocmVzKTtcbiAgICAgICAgICAgIH1dO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2xpc3Q7XG4gICAgfVxuXG4gICAgZGV0YWlsVmlldyhwayA9IC0xLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgJGRpdl9saXN0ID0gJCgnPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxldCBsb2FkX3Byb21pc2U7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5pc0Nvbm5lY3RlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5sb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2FkX3Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAocGsgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcGsgPSB0aGlzLnZhbHVlc19saXN0WzBdLnBrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2RldGFpbF92aWV3JyxcbiAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBwazogcGtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICRkaXZfbGlzdC5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaCgkZGl2X2xpc3QpO1xuICAgICAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIH0sIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjYl9yZWplY3QgJiYgY2JfcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XTtcblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9saXN0O1xuICAgIH1cblxuICAgIHN5bmNGb3JtVG9Nb2RlbCgkZm9ybXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3luY0Zvcm0oJGZvcm1zKTtcbiAgICB9XG5cbiAgICBzeW5jTW9kZWxUb0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLW1vZGVsX3BrJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcGsgPSAkKHRoaXMpLmRhdGEoJ21vZGVsX3BrJyk7XG4gICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSBzZWxmLmJ5UGsocGspO1xuICAgICAgICAgICAgZm9yIChsZXQgZm9ybV9pdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGZvcm1faXRlbS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmNoZWNrZWQgPSBpbnN0YW5jZVtuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2ZpbGUnICYmIGluc3RhbmNlW25hbWVdIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IG5ldyBEYXRhVHJhbnNmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pdGVtcy5hZGQoaW5zdGFuY2VbbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmZpbGVzID0gY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChmb3JtX2l0ZW0pLnZhbChpbnN0YW5jZVtuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgc3luY0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBpbnN0YW5jZXMgPSBbXTtcblxuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJGZvcm0gPSAkKHRoaXMpO1xuICAgICAgICAgICAgbGV0IHBrID0gJGZvcm0uZGF0YSgnbW9kZWxfcGsnKTtcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHNlbGYuYnlQayhwayk7XG4gICAgICAgICAgICBmb3IgKGxldCBmb3JtX2l0ZW0gb2YgdGhpcy5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZm9ybV9pdGVtLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1faXRlbS50eXBlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBwYXJzZV9oaWRkZW5faW5wdXRzKCQoZm9ybV9pdGVtKS52YWwoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gZm9ybV9pdGVtLmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBmb3JtX2l0ZW0uZmlsZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9ICQoZm9ybV9pdGVtKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPD0gMSAmJiBpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBpbnN0YW5jZXMuYXQoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlcztcblxuICAgIH1cblxuICAgIGNyZWF0ZUZvcm0oY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShudWxsLCAnY3JlYXRlX2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgZWRpdEZvcm0ocGsgPSAtMSwgY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxvYWRfcHJvbWlzZTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmlzQ29ubmVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxvYWRfcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChwayA8PSAtMSkge1xuICAgICAgICAgICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdC5hdChwaykucGs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2dldEZvcm0ocGssICdlZGl0X2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgbmFtZWRGb3JtKHBrID0gLTEsIGZvcm1OYW1lLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9hZF9wcm9taXNlO1xuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMuaXNDb25uZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG5cbiAgICAgICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBrIDw9IC0xKSB7XG4gICAgICAgICAgICAgICAgcGsgPSB0aGlzLnZhbHVlc19saXN0LmF0KHBrKS5waztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShwaywgJ25hbWVkX2Zvcm0nLCBmb3JtTmFtZSwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9mb3JtO1xuICAgIH1cblxuXG4gICAgX2dldEZvcm0ocGssIGV2ZW50X3R5cGUsIGZvcm1OYW1lLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgZXZlbnRfdHlwZTogZXZlbnRfdHlwZSxcbiAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICAgICAgcGs6IHBrLFxuICAgICAgICAgICAgICAgIGZvcm1fbmFtZTogZm9ybU5hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBrID09PSBudWxsIHx8IHBrID09PSAtMSA/ICdjcmVhdGUnIDogJ2VkaXQnO1xuXG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgJGRpdl9mb3JtLmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgbGV0ICRmb3JtID0gJGRpdl9mb3JtLmNsb3Nlc3QoJ2Zvcm0nKS5hZGRDbGFzcyhgc2RjLW1vZGVsLSR7Y2xhc3NOYW1lfS1mb3JtIHNkYy1tb2RlbC1mb3JtICR7dGhpcy5mb3JtX2lkfWApLmRhdGEoJ21vZGVsJywgdGhpcykuZGF0YSgnbW9kZWxfcGsnLCBwayk7XG4gICAgICAgICAgICBpZiAoJGZvcm0ubGVuZ3RoID4gMCAmJiAhJGZvcm1bMF0uaGFzQXR0cmlidXRlKCdzZGNfc3VibWl0JykpIHtcbiAgICAgICAgICAgICAgICAkZm9ybS5hdHRyKCdzZGNfc3VibWl0JywgJ3N1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yJylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwLnJlZnJlc2goJGRpdl9mb3JtKTtcbiAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgY2JfcmVqZWN0ICYmIGNiX3JlamVjdChyZXMpO1xuICAgICAgICB9XTtcbiAgICB9XG5cbiAgICBuZXcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkZm9ybSA9ICQoJzxmb3JtPicpLmFwcGVuZCh0aGlzLmNyZWF0ZUZvcm0oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3luY0Zvcm1Ub01vZGVsKCRmb3JtKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCByZWplY3QpKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzYXZlKHBrID0gLTEpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBlbGVtX2xpc3Q7XG4gICAgICAgICAgICBpZiAocGsgPiAtMSkge1xuICAgICAgICAgICAgICAgIGVsZW1fbGlzdCA9IFt0aGlzLmJ5UGsocGspXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbV9saXN0ID0gdGhpcy52YWx1ZXNfbGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwX2xpc3QgPSBbXVxuICAgICAgICAgICAgZWxlbV9saXN0LmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgICAgIHBfbGlzdC5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZEZpbGVzKGVsZW0pLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZWxlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdHlwZW9mIHJlcy5kYXRhLmluc3RhbmNlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzLmRhdGEuaW5zdGFuY2UpIDogcmVzLmRhdGEuaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3RdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBfbGlzdCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZSh2YWx1ZXMgPSB0aGlzLnZhbHVlcykge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkRmlsZXModmFsdWVzKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlczogZmlsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHR5cGVvZiByZXMuZGF0YS5pbnN0YW5jZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcy5kYXRhLmluc3RhbmNlKSA6IHJlcy5kYXRhLmluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0XTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZShwayA9IC0xKSB7XG4gICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICAgICAgICBwayA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwayA9PT0gLTEpIHBrID0gdGhpcy52YWx1ZXM/LnBrO1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdkZWxldGUnLFxuICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGs6IHBrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc0Nvbm5lY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc19jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc19jb25uZXRpbmdfcHJvY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzX2Nvbm5ldGluZ19wcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddID0gWygpID0+IHtcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0VG9TZXJ2ZXIoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jaGVja0Nvbm5lY3Rpb24oKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyZXNvbHZlX29yaWdpbiwgcmVqZWN0X29yaWdpbl0gPSB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddO1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ10gPSBbXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfb3JpZ2luKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdF9vcmlnaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvX3JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXNbJ3NvY2tldCddO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYW4oKSB7XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX3JlYWRGaWxlcyhlbGVtKSB7XG4gICAgICAgIGxldCB0b19zb2x2ZSA9IFtdO1xuICAgICAgICBsZXQgZmlsZXMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbGVtKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgIHRvX3NvbHZlLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXJfb2ZfY2h1bmtzID0gcGFyc2VJbnQoTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyBNQVhfRklMRV9VUExPQUQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aDogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyX29mX2NodW5rczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAndXBsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogcmVzdWx0LnNsaWNlKE1BWF9GSUxFX1VQTE9BRCAqIGksIE1BWF9GSUxFX1VQTE9BRCAqIChpICsgMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfb2ZfY2h1bmtzOiBudW1iZXJfb2ZfY2h1bmtzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9sZW5ndGg6IHZhbHVlLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodG9fc29sdmUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGVzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9vbk1lc3NhZ2UoZSkge1xuICAgICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5fcmVxdWVzdC5oYXNPd25Qcm9wZXJ0eShkYXRhLmV2ZW50X2lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2RhdGEuZXZlbnRfaWRdWzFdKGRhdGEpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm9wZW5fcmVxdWVzdFtkYXRhLmV2ZW50X2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLm1zZyB8fCBkYXRhLmhlYWRlcikge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3B1c2hFcnJvck1zZycsIGRhdGEuaGVhZGVyIHx8ICcnLCBkYXRhLm1zZyB8fCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdjb25uZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ11bMV0oZGF0YSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ107XG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0b19yZWNvbm5lY3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdwdXNoTXNnJywgZGF0YS5oZWFkZXIgfHwgJycsIGRhdGEubXNnIHx8ICcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Nvbm5lY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc19jb25uZXRpbmdfcHJvY2VzcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ11bMF0oZGF0YSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ2xvYWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAnb25fdXBkYXRlJyB8fCBkYXRhLnR5cGUgPT09ICdvbl9jcmVhdGUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcblxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG4gICAgICAgICAgICAgICAgbGV0IGNiO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ29uX2NyZWF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IgPSB0aGlzLm9uX2NyZWF0ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYiA9IHRoaXMub25fdXBkYXRlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNiKG9iaik7XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSBvYmo7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gZGF0YS5kYXRhPy5pbnN0YW5jZVxuICAgICAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5kYXRhLmluc3RhbmNlID0gSlNPTi5wYXJzZShkYXRhLmRhdGEuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuX3JlcXVlc3QuaGFzT3duUHJvcGVydHkoZGF0YS5ldmVudF9pZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtkYXRhLmV2ZW50X2lkXVswXShkYXRhKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5vcGVuX3JlcXVlc3RbZGF0YS5ldmVudF9pZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY29ubmVjdFRvU2VydmVyKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgbW9kZWxfaWRlbnRpZmllciA9IGAke3RoaXMubW9kZWxfbmFtZX1gICsgKHRoaXMubW9kZWxfaWQgPiAwID8gYC8ke3RoaXMubW9kZWxfaWR9YCA6ICcnKTtcbiAgICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoYHdzczovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L3NkY193cy9tb2RlbC8ke21vZGVsX2lkZW50aWZpZXJ9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3MvbW9kZWwvJHttb2RlbF9pZGVudGlmaWVyfWApO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuc29ja2V0Lm9ubWVzc2FnZSA9IHRoaXMuX29uTWVzc2FnZS5iaW5kKHRoaXMpO1xuXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5vbmNsb3NlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBTREMgTW9kZWwgKCR7dGhpcy5tb2RlbF9uYW1lfSwgJHt0aGlzLm1vZGVsX2lkfSkgU29ja2V0IGNsb3NlZCB1bmV4cGVjdGVkbHlgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfa2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5vcGVuX3JlcXVlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hdXRvX3JlY29ubmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29ubmVjdFRvU2VydmVyKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNb2RlbCBTb2NrZXQgZW5jb3VudGVyZWQgZXJyb3I6ICR7ZXJyfSBDbG9zaW5nIHNvY2tldGApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc19jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIF9jaGVja0Nvbm5lY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnY29ubmVjdCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9wYXJzZVNlcnZlclJlcyhyZXMpIHtcbiAgICAgICAgbGV0IHVwZGF0ZWQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQganNvbl9kYXRhIG9mIHJlcykge1xuICAgICAgICAgICAgY29uc3QgcGsgPSBqc29uX2RhdGEucGs7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB0aGlzLmJ5UGsocGspO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoanNvbl9kYXRhLmZpZWxkcykpIHtcbiAgICAgICAgICAgICAgICBpZiAodiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdlsnX19pc19zZGNfbW9kZWxfXyddKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrXSA9IG5ldyBTdWJNb2RlbCh2WydwayddLCB2Wydtb2RlbCddKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrXSA9IHY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1cGRhdGVkLnB1c2gob2JqKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSB0aGlzLnZhbHVlc19saXN0LmF0KC0xKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZDtcblxuICAgIH1cbn0iXSwibmFtZXMiOlsiYXBwIiwidHJpZ2dlciIsInV1aWR2NCIsIklTX0NPTk5FQ1RFRCIsIklTX0NPTk5FQ1RJTkciLCJTRENfU09DS0VUIiwiTUFYX0ZJTEVfVVBMT0FEIiwiT1BFTl9SRVFVRVNUUyIsIlN1Yk1vZGVsIiwiY29uc3RydWN0b3IiLCJwayIsIm1vZGVsIiwiX21vZGVsIiwibG9hZCIsImNvbnRyb2xsZXIiLCJUeXBlRXJyb3IiLCJuZXdNb2RlbCIsIk1vZGVsUHJveHlIYW5kbGVyIiwiZ2V0IiwidGFyZ2V0Iiwia2V5IiwidmFsdWUiLCJ1bmRlZmluZWQiLCJuZXdWYWwiLCJOdW1iZXIiLCJiaW5kIiwic2V0Iiwib2xkVmFsIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsU2VydmVyIiwiZnVuY05hbWUiLCJhcmdzIiwiaWQiLCJpc0Nvbm5lY3RlZCIsInRoZW4iLCJzZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiZnVuY3Rpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIl9jb25uZWN0Iiwid2luZG93IiwibG9jYXRpb24iLCJwcm90b2NvbCIsIldlYlNvY2tldCIsImhvc3QiLCJvbm1lc3NhZ2UiLCJlIiwiZGF0YSIsInBhcnNlIiwiaXNfZXJyb3IiLCJtc2ciLCJoZWFkZXIiLCJ0eXBlIiwicGF5bG9hZCIsImxpbmsiLCJvbmNsb3NlIiwiY29uc29sZSIsImVycm9yIiwiT2JqZWN0IiwiZW50cmllcyIsInNldFRpbWVvdXQiLCJvbmVycm9yIiwiZXJyIiwibWVzc2FnZSIsImNsb3NlIiwib25vcGVuIiwicGFyc2VfaGlkZGVuX2lucHV0cyIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsInBhcnNlSW50IiwicGFyc2VGbG9hdCIsInN1YnN0cmluZyIsImxlbmd0aCIsIk1vZGVsIiwibW9kZWxfbmFtZSIsIm1vZGVsX3F1ZXJ5IiwidmFsdWVzX2xpc3QiLCJ2YWx1ZXMiLCJfaXNfY29ubmVjdGVkIiwiX2lzX2Nvbm5ldGluZ19wcm9jZXNzIiwiX2F1dG9fcmVjb25uZWN0Iiwic29ja2V0Iiwib3Blbl9yZXF1ZXN0Iiwib25fdXBkYXRlIiwib25fY3JlYXRlIiwiZm9ybV9pZCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaWR4IiwibmV4dCIsImRvbmUiLCJieVBrIiwiaXNOYU4iLCJlbGVtIiwiZmluZCIsImVsbSIsIlByb3h5IiwicHVzaCIsImZpbHRlciIsImFzc2lnbiIsImV2ZW50X3R5cGUiLCJldmVudF9pZCIsImxpc3RWaWV3IiwiY2JfcmVzb2x2ZSIsImNiX3JlamVjdCIsIiRkaXZfbGlzdCIsIiQiLCJhcHBlbmQiLCJodG1sIiwicmVmcmVzaCIsInJlcyIsImRldGFpbFZpZXciLCJsb2FkX3Byb21pc2UiLCJzeW5jRm9ybVRvTW9kZWwiLCIkZm9ybXMiLCJzeW5jRm9ybSIsInN5bmNNb2RlbFRvRm9ybSIsImhhc0NsYXNzIiwic2VsZiIsImVhY2giLCJoYXNBdHRyaWJ1dGUiLCJpbnN0YW5jZSIsImZvcm1faXRlbSIsImVsZW1lbnRzIiwibmFtZSIsImNoZWNrZWQiLCJGaWxlIiwiY29udGFpbmVyIiwiRGF0YVRyYW5zZmVyIiwiaXRlbXMiLCJhZGQiLCJmaWxlcyIsInZhbCIsImluc3RhbmNlcyIsIiRmb3JtIiwiYXQiLCJjcmVhdGVGb3JtIiwiJGRpdl9mb3JtIiwiX2dldEZvcm0iLCJlZGl0Rm9ybSIsIm5hbWVkRm9ybSIsImZvcm1OYW1lIiwiZm9ybV9uYW1lIiwiY2xhc3NOYW1lIiwiY2xvc2VzdCIsImFkZENsYXNzIiwiYXR0ciIsIm5ldyIsInNhdmUiLCJlbGVtX2xpc3QiLCJwX2xpc3QiLCJmb3JFYWNoIiwiX3JlYWRGaWxlcyIsIl9wYXJzZVNlcnZlclJlcyIsImFsbCIsImNyZWF0ZSIsImRlbGV0ZSIsIl9jb25uZWN0VG9TZXJ2ZXIiLCJfY2hlY2tDb25uZWN0aW9uIiwicmVzb2x2ZV9vcmlnaW4iLCJyZWplY3Rfb3JpZ2luIiwiY2xlYW4iLCJ0b19zb2x2ZSIsInJlYWRlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJyZXN1bHQiLCJudW1iZXJfb2ZfY2h1bmtzIiwiTWF0aCIsImNlaWwiLCJmaWxlX25hbWUiLCJmaWVsZF9uYW1lIiwiY29udGVudF9sZW5ndGgiLCJzaXplIiwiaSIsImNodW5rIiwic2xpY2UiLCJjb250ZW50X3R5cGUiLCJyZWFkQXNCaW5hcnlTdHJpbmciLCJfb25NZXNzYWdlIiwianNvbl9yZXMiLCJvYmoiLCJjYiIsIm1vZGVsX2lkZW50aWZpZXIiLCJtb2RlbF9pZCIsIl9rZXkiLCJ1cGRhdGVkIiwianNvbl9kYXRhIiwiayIsInYiLCJmaWVsZHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_socket.js\n");
97
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Model: () => (/* binding */ Model)\n/* harmony export */ });\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\nconst MAX_FILE_UPLOAD = 25000;\nclass SubModel {\n constructor(pk, model) {\n this.pk = pk;\n this._model = model;\n }\n\n /**\n * SDC Model Name\n * @param {string} model\n */\n set model(model) {\n this._model = model;\n }\n get model() {\n return this._model;\n }\n\n /**\n * Load the sub model.\n *\n * @param {AbstractSDC} controller\n * @returns {Model}\n */\n load(controller) {\n if (!this._model) {\n throw new TypeError(\"Model is not set!!\");\n }\n return controller.newModel(this._model, {\n pk: this.pk\n });\n }\n}\nconst ModelProxyHandler = {\n get(target, key) {\n const value = target[key] ?? undefined;\n if (value instanceof SubModel) {\n if (!value.pk && value.pk !== 0) {\n return null;\n }\n const newVal = new Number(value.pk);\n newVal.load = value.load.bind(value);\n return newVal;\n }\n return value;\n },\n set(target, key, value) {\n if (key in target) {\n const oldVal = target[key];\n if (oldVal instanceof SubModel) {\n if (value.hasOwnProperty('pk')) {\n oldVal.pk = value.pk;\n } else {\n oldVal.pk = value;\n }\n } else {\n target[key] = value;\n }\n } else {\n target[key] = value;\n }\n return true;\n }\n};\nfunction parse_hidden_inputs(value) {\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (value.toLowerCase().match(isBoolReg)) {\n return value.toLowerCase() === 'true';\n } else if (value === 'undefined') {\n return undefined;\n } else if (value.toLowerCase() === 'none') {\n return null;\n } else if (value.match(isIntReg)) {\n return parseInt(value);\n } else if (value.match(isFloatReg)) {\n return parseFloat(value);\n } else if (value.match(isStringReg)) {\n return value.substring(1, value.length - 1);\n }\n return value;\n}\nclass Model {\n /**\n *\n * @param model_name {string}\n * @param model_query {json}\n */\n constructor(model_name, model_query = {}) {\n this.values_list = [];\n this.values = {};\n this.model_name = model_name;\n this.model_query = model_query;\n this._is_connected = false;\n this._is_conneting_process = false;\n this._auto_reconnect = true;\n this.socket = null;\n this.open_request = {};\n this.on_update = () => {};\n this.on_create = () => {};\n this.form_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n }\n [Symbol.iterator]() {\n let idx = -1;\n return {\n next: () => {\n ++idx;\n if (idx < this.values_list.length) {\n return {\n value: this.values_list[idx],\n done: false\n };\n }\n return {\n value: null,\n done: true\n };\n }\n };\n }\n length() {\n return this.values_list.length;\n }\n byPk(pk) {\n if (pk !== null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let elem = this.values_list.find(elm => elm.pk === pk);\n if (!elem) {\n elem = new Proxy({\n pk: pk\n }, ModelProxyHandler);\n this.values_list.push(elem);\n }\n return elem;\n }\n return {\n pk: pk\n };\n }\n filter(model_query) {\n this.model_query = Object.assign({}, this.model_query, model_query);\n return this;\n }\n load() {\n return this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'load',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n listView(filter = {}, cb_resolve = null, cb_reject = null) {\n let $div_list = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'list_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n filter: filter\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n });\n return $div_list;\n }\n detailView(pk = -1, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let $div_list = $('<div class=\"container-fluid\">');\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n load_promise.then(() => {\n if (pk === -1) {\n pk = this.values_list[0].pk;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'detail_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n });\n return $div_list;\n }\n syncFormToModel($forms) {\n return this.syncForm($forms);\n }\n syncModelToForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n let self = this;\n $forms.each(function () {\n if (!this.hasAttribute('data-model_pk')) {\n return;\n }\n let pk = $(this).data('model_pk');\n let instance = self.byPk(pk);\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'checkbox') {\n form_item.checked = instance[name];\n } else if (form_item.type === 'file' && instance[name] instanceof File) {\n let container = new DataTransfer();\n container.items.add(instance[name]);\n form_item.files = container;\n } else {\n $(form_item).val(instance[name]);\n }\n }\n }\n });\n }\n syncForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n const self = this;\n let instances = [];\n $forms.each(function () {\n let $form = $(this);\n let pk = $form.data('model_pk');\n let instance = self.byPk(pk);\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'hidden') {\n instance[name] = parse_hidden_inputs($(form_item).val());\n } else if (form_item.type === 'checkbox') {\n instance[name] = form_item.checked;\n } else if (form_item.type === 'file') {\n instance[name] = form_item.files[0];\n } else {\n instance[name] = $(form_item).val();\n }\n }\n }\n instances.push(instance);\n return instance;\n });\n if (this.values_list.length <= 1 && instances.length > 0) {\n this.values = instances.at(-1);\n }\n return instances;\n }\n createForm(cb_resolve = null, cb_reject = null) {\n let $div_form = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n this._getForm(null, 'create_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n editForm(pk = -1, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div class=\"container-fluid\">');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'edit_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n namedForm(pk = -1, formName, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div class=\"container-fluid\">');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'named_form', formName, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n _getForm(pk, event_type, formName, $div_form, cb_resolve, cb_reject) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: event_type,\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk,\n form_name: formName\n }\n }));\n const className = pk === null || pk === -1 ? 'create' : 'edit';\n this.open_request[id] = [data => {\n $div_form.append(data.html);\n let $form = $div_form.closest('form').addClass(`sdc-model-${className}-form sdc-model-form ${this.form_id}`).data('model', this).data('model_pk', pk);\n if ($form.length > 0 && !$form[0].hasAttribute('sdc_submit')) {\n $form.attr('sdc_submit', 'submitModelFormDistributor');\n }\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_form);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n }\n new() {\n return new Promise((resolve, reject) => {\n const $form = $('<form>').append(this.createForm(() => {\n this.syncFormToModel($form);\n resolve();\n }, reject));\n });\n }\n save(pk = -1) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n return this.isConnected().then(() => {\n let elem_list;\n if (pk > -1) {\n elem_list = [this.byPk(pk)];\n } else {\n elem_list = this.values_list;\n }\n let p_list = [];\n elem_list.forEach(elem => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n p_list.push(new Promise((resolve, reject) => {\n this._readFiles(elem).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'save',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n data: elem,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n res.data.instance = this._parseServerRes(data);\n resolve(res);\n }, reject];\n });\n }));\n });\n return Promise.all(p_list);\n });\n }\n create(values = this.values) {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this._readFiles(values).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'create',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n data: values,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n res.data.instance = this._parseServerRes(data)[0];\n resolve(res);\n }, reject];\n });\n });\n });\n }\n delete(pk = -1) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n if (pk === -1) pk = this.values?.pk;\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'delete',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n isConnected() {\n return new Promise((resolve, reject) => {\n if (this._is_connected) {\n resolve();\n } else if (!this._is_conneting_process) {\n this._is_conneting_process = true;\n this.open_request['_connecting_process'] = [() => {}, () => {}];\n this._connectToServer().then(() => {\n resolve(this._checkConnection());\n });\n } else {\n const [resolve_origin, reject_origin] = this.open_request['_connecting_process'];\n this.open_request['_connecting_process'] = [() => {\n resolve_origin();\n resolve();\n }, () => {\n reject_origin();\n reject();\n }];\n }\n });\n }\n close() {\n if (this.socket) {\n this._auto_reconnect = false;\n this.socket.onclose = () => {};\n this.socket.close();\n delete this['socket'];\n }\n }\n clean() {\n this.values_list = [];\n this.values = {};\n return this;\n }\n _readFiles(elem) {\n let to_solve = [];\n let files = {};\n for (const [key, value] of Object.entries(elem)) {\n if (value instanceof File) {\n to_solve.push(new Promise((resolve, reject) => {\n ((key, value) => {\n let reader = new FileReader();\n reader.onload = e => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.open_request[id] = [resolve, reject];\n let result = e.target.result;\n let number_of_chunks = parseInt(Math.ceil(result.length / MAX_FILE_UPLOAD));\n files[key] = {\n id: id,\n file_name: value.name,\n field_name: key,\n content_length: value.size\n };\n for (let i = 0; i < number_of_chunks; ++i) {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'upload',\n event_id: id,\n args: {\n chunk: result.slice(MAX_FILE_UPLOAD * i, MAX_FILE_UPLOAD * (i + 1)),\n idx: i,\n number_of_chunks: number_of_chunks,\n file_name: value.name,\n field_name: key,\n content_length: value.size,\n content_type: value.type,\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n }\n };\n reader.onerror = () => {\n reject();\n };\n reader.readAsBinaryString(value);\n })(key, value);\n }));\n }\n }\n return Promise.all(to_solve).then(() => {\n return files;\n });\n }\n _onMessage(e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][1](data);\n delete this.open_request[data.event_id];\n }\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this.open_request['_connecting_process'][1](data);\n delete this.open_request['_connecting_process'];\n this._auto_reconnect = false;\n this.socket.close();\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this._is_connected = true;\n this._is_conneting_process = false;\n this.open_request['_connecting_process'][0](data);\n delete this.open_request['_connecting_process'];\n } else if (data.type === 'load') {\n const json_res = JSON.parse(data.args.data);\n this.values_list = [];\n data.args.data = this._parseServerRes(json_res);\n } else if (data.type === 'on_update' || data.type === 'on_create') {\n const json_res = JSON.parse(data.args.data);\n let obj = this._parseServerRes(json_res);\n let cb;\n if (data.type === 'on_create') {\n cb = this.on_create;\n } else {\n cb = this.on_update;\n }\n cb(obj);\n data.args.data = obj;\n }\n let instance = data.data?.instance;\n if (instance) {\n data.data.instance = JSON.parse(data.data.instance);\n }\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][0](data);\n delete this.open_request[data.event_id];\n }\n }\n }\n _connectToServer() {\n return new Promise(resolve => {\n const model_identifier = `${this.model_name}` + (this.model_id > 0 ? `/${this.model_id}` : '');\n if (window.location.protocol === \"https:\") {\n this.socket = new WebSocket(`wss://${window.location.host}/sdc_ws/model/${model_identifier}`);\n } else {\n this.socket = new WebSocket(`ws://${window.location.host}/sdc_ws/model/${model_identifier}`);\n }\n this.socket.onmessage = this._onMessage.bind(this);\n this.socket.onclose = e => {\n console.error(`SDC Model (${this.model_name}, ${this.model_id}) Socket closed unexpectedly`);\n this._is_connected = false;\n for (const [_key, value] of Object.entries(this.open_request)) {\n value[1](e);\n }\n this.open_request = {};\n setTimeout(() => {\n if (this._auto_reconnect) {\n this._connectToServer().then(() => {});\n }\n }, 1000);\n };\n this.socket.onerror = err => {\n console.error(`Model Socket encountered error: ${err} Closing socket`);\n if (this._is_connected) {\n try {\n this.socket.close();\n } catch (e) {}\n }\n };\n this.socket.onopen = () => {\n resolve();\n };\n });\n }\n _checkConnection() {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'connect',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n }\n _parseServerRes(res) {\n let updated = [];\n for (let json_data of res) {\n const pk = json_data.pk;\n const obj = this.byPk(pk);\n for (const [k, v] of Object.entries(json_data.fields)) {\n if (v && typeof v === 'object' && v['__is_sdc_model__']) {\n obj[k] = new SubModel(v['pk'], v['model']);\n } else {\n obj[k] = v;\n }\n }\n updated.push(obj);\n }\n if (this.values_list.length === 1) {\n this.values = this.values_list.at(-1);\n } else {\n this.values = {};\n }\n return updated;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQUMsR0FBR0MsQ0FBQztRQUNkO01BQ0o7TUFFQUgsT0FBTyxDQUFDM0gsSUFBSSxDQUFDMkcsR0FBRyxDQUFDO0lBQ3JCO0lBRUEsSUFBSSxJQUFJLENBQUNoSSxXQUFXLENBQUNKLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDL0IsSUFBSSxDQUFDSyxNQUFNLEdBQUcsSUFBSSxDQUFDRCxXQUFXLENBQUN5RSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQyxNQUFNO01BQ0gsSUFBSSxDQUFDeEUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNwQjtJQUVBLE9BQU8rSSxPQUFPO0VBRWxCO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3NvY2tldC5qcz9hZGJjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwfSBmcm9tICcuL3NkY19tYWluLmpzJztcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHt1dWlkdjR9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuXG5jb25zdCBNQVhfRklMRV9VUExPQUQgPSAyNTAwMDtcblxuXG5jbGFzcyBTdWJNb2RlbCB7XG5cbiAgICBjb25zdHJ1Y3RvcihwaywgbW9kZWwpIHtcbiAgICAgICAgdGhpcy5wayA9IHBrO1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNEQyBNb2RlbCBOYW1lXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsXG4gICAgICovXG4gICAgc2V0IG1vZGVsKG1vZGVsKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgfVxuXG4gICAgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCB0aGUgc3ViIG1vZGVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEByZXR1cm5zIHtNb2RlbH1cbiAgICAgKi9cbiAgICBsb2FkKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tb2RlbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1vZGVsIGlzIG5vdCBzZXQhIVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbGxlci5uZXdNb2RlbCh0aGlzLl9tb2RlbCwge3BrOiB0aGlzLnBrfSk7XG4gICAgfVxufVxuXG5jb25zdCBNb2RlbFByb3h5SGFuZGxlciA9IHtcbiAgICBnZXQodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXRba2V5XSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN1Yk1vZGVsKSB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlLnBrICYmIHZhbHVlLnBrICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IG5ldyBOdW1iZXIodmFsdWUucGspO1xuICAgICAgICAgICAgbmV3VmFsLmxvYWQgPSB2YWx1ZS5sb2FkLmJpbmQodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBzZXQodGFyZ2V0LCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgICBjb25zdCBvbGRWYWwgPSB0YXJnZXRba2V5XTtcbiAgICAgICAgICAgIGlmIChvbGRWYWwgaW5zdGFuY2VvZiBTdWJNb2RlbCkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgncGsnKSkge1xuICAgICAgICAgICAgICAgICAgICBvbGRWYWwucGsgPSB2YWx1ZS5waztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvbGRWYWwucGsgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuXG5cbmZ1bmN0aW9uIHBhcnNlX2hpZGRlbl9pbnB1dHModmFsdWUpIHtcblxuICAgIGxldCBpc0Zsb2F0UmVnID0gL14tP1xcZCtcXC4/XFxkKyQvO1xuICAgIGxldCBpc0ludFJlZyA9IC9eLT9cXGQrJC87XG4gICAgbGV0IGlzQm9vbFJlZyA9IC9eKHRydWV8ZmFsc2UpJC87XG4gICAgbGV0IGlzU3RyaW5nUmVnID0gL14oWyddW14nXSpbJ10pfChbXCJdW15cIl0qW1wiXSkkLztcblxuXG4gICAgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkubWF0Y2goaXNCb29sUmVnKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAnbm9uZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5tYXRjaChpc0ludFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLm1hdGNoKGlzRmxvYXRSZWcpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLm1hdGNoKGlzU3RyaW5nUmVnKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cblxuXG5leHBvcnQgY2xhc3MgTW9kZWwge1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIG1vZGVsX25hbWUge3N0cmluZ31cbiAgICAgKiBAcGFyYW0gbW9kZWxfcXVlcnkge2pzb259XG4gICAgICovXG4gICAgY29uc3RydWN0b3IobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSkge1xuICAgICAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgICAgIHRoaXMubW9kZWxfbmFtZSA9IG1vZGVsX25hbWU7XG4gICAgICAgIHRoaXMubW9kZWxfcXVlcnkgPSBtb2RlbF9xdWVyeTtcbiAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzX2Nvbm5ldGluZ19wcm9jZXNzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2F1dG9fcmVjb25uZWN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBudWxsO1xuICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdCA9IHt9O1xuICAgICAgICB0aGlzLm9uX3VwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vbl9jcmVhdGUgPSAoKSA9PiB7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5mb3JtX2lkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIGxldCBpZHggPSAtMTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICArK2lkeDtcbiAgICAgICAgICAgICAgICBpZiAoaWR4IDwgdGhpcy52YWx1ZXNfbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogdGhpcy52YWx1ZXNfbGlzdFtpZHhdLCBkb25lOiBmYWxzZX07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IG51bGwsIGRvbmU6IHRydWV9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoO1xuICAgIH1cblxuICAgIGJ5UGsocGspIHtcbiAgICAgICAgaWYgKHBrICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgICAgICBwayA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGVsZW0gPSB0aGlzLnZhbHVlc19saXN0LmZpbmQoZWxtID0+IGVsbS5wayA9PT0gcGspO1xuICAgICAgICAgICAgaWYgKCFlbGVtKSB7XG4gICAgICAgICAgICAgICAgZWxlbSA9IG5ldyBQcm94eSh7cGs6IHBrfSwgTW9kZWxQcm94eUhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzX2xpc3QucHVzaChlbGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7cGs6IHBrfTtcblxuICAgIH1cblxuICAgIGZpbHRlcihtb2RlbF9xdWVyeSkge1xuICAgICAgICB0aGlzLm1vZGVsX3F1ZXJ5ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5tb2RlbF9xdWVyeSwgbW9kZWxfcXVlcnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBsb2FkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnbG9hZCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxpc3RWaWV3KGZpbHRlciA9IHt9LCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBsZXQgJGRpdl9saXN0ID0gJCgnPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuICAgICAgICB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2xpc3RfdmlldycsXG4gICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICRkaXZfbGlzdC5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaCgkZGl2X2xpc3QpO1xuICAgICAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIH0sIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjYl9yZWplY3QgJiYgY2JfcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XTtcblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9saXN0O1xuICAgIH1cblxuICAgIGRldGFpbFZpZXcocGsgPSAtMSwgY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0ICRkaXZfbGlzdCA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcblxuICAgICAgICBsZXQgbG9hZF9wcm9taXNlO1xuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMuaXNDb25uZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBrID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdFswXS5wa1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdkZXRhaWxfdmlldycsXG4gICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgcGs6IHBrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAkZGl2X2xpc3QuYXBwZW5kKGRhdGEuaHRtbCk7XG4gICAgICAgICAgICAgICAgYXBwLnJlZnJlc2goJGRpdl9saXN0KTtcbiAgICAgICAgICAgICAgICBjYl9yZXNvbHZlICYmIGNiX3Jlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICB9LCAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY2JfcmVqZWN0ICYmIGNiX3JlamVjdChyZXMpO1xuICAgICAgICAgICAgfV07XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuICRkaXZfbGlzdDtcbiAgICB9XG5cbiAgICBzeW5jRm9ybVRvTW9kZWwoJGZvcm1zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN5bmNGb3JtKCRmb3Jtcyk7XG4gICAgfVxuXG4gICAgc3luY01vZGVsVG9Gb3JtKCRmb3Jtcykge1xuICAgICAgICBpZiAoISRmb3JtcyB8fCAhJGZvcm1zLmhhc0NsYXNzKHRoaXMuZm9ybV9pZCkpIHtcbiAgICAgICAgICAgICRmb3JtcyA9ICQoYC4ke3RoaXMuZm9ybV9pZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgJGZvcm1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZSgnZGF0YS1tb2RlbF9waycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHBrID0gJCh0aGlzKS5kYXRhKCdtb2RlbF9waycpO1xuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gc2VsZi5ieVBrKHBrKTtcbiAgICAgICAgICAgIGZvciAobGV0IGZvcm1faXRlbSBvZiB0aGlzLmVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBmb3JtX2l0ZW0ubmFtZTtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSAmJiBuYW1lICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1faXRlbS5jaGVja2VkID0gaW5zdGFuY2VbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdmaWxlJyAmJiBpbnN0YW5jZVtuYW1lXSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBuZXcgRGF0YVRyYW5zZmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuaXRlbXMuYWRkKGluc3RhbmNlW25hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1faXRlbS5maWxlcyA9IGNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoZm9ybV9pdGVtKS52YWwoaW5zdGFuY2VbbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHN5bmNGb3JtKCRmb3Jtcykge1xuICAgICAgICBpZiAoISRmb3JtcyB8fCAhJGZvcm1zLmhhc0NsYXNzKHRoaXMuZm9ybV9pZCkpIHtcbiAgICAgICAgICAgICRmb3JtcyA9ICQoYC4ke3RoaXMuZm9ybV9pZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgaW5zdGFuY2VzID0gW107XG5cbiAgICAgICAgJGZvcm1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0ICRmb3JtID0gJCh0aGlzKTtcbiAgICAgICAgICAgIGxldCBwayA9ICRmb3JtLmRhdGEoJ21vZGVsX3BrJyk7XG4gICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSBzZWxmLmJ5UGsocGspO1xuICAgICAgICAgICAgZm9yIChsZXQgZm9ybV9pdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGZvcm1faXRlbS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gcGFyc2VfaGlkZGVuX2lucHV0cygkKGZvcm1faXRlbSkudmFsKCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1faXRlbS50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9IGZvcm1faXRlbS5jaGVja2VkO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1faXRlbS50eXBlID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gZm9ybV9pdGVtLmZpbGVzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSAkKGZvcm1faXRlbSkudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluc3RhbmNlcy5wdXNoKGluc3RhbmNlKTtcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoIDw9IDEgJiYgaW5zdGFuY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0gaW5zdGFuY2VzLmF0KC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZXM7XG5cbiAgICB9XG5cbiAgICBjcmVhdGVGb3JtKGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsKSB7XG4gICAgICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2dldEZvcm0obnVsbCwgJ2NyZWF0ZV9mb3JtJywgbnVsbCwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9mb3JtO1xuICAgIH1cblxuICAgIGVkaXRGb3JtKHBrID0gLTEsIGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsKSB7XG4gICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICAgICAgICBwayA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsb2FkX3Byb21pc2U7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5pc0Nvbm5lY3RlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5sb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgJGRpdl9mb3JtID0gJCgnPGRpdiAgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcblxuICAgICAgICBsb2FkX3Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAocGsgPD0gLTEpIHtcbiAgICAgICAgICAgICAgICBwayA9IHRoaXMudmFsdWVzX2xpc3QuYXQocGspLnBrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9nZXRGb3JtKHBrLCAnZWRpdF9mb3JtJywgbnVsbCwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9mb3JtO1xuICAgIH1cblxuICAgIG5hbWVkRm9ybShwayA9IC0xLCBmb3JtTmFtZSwgY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxvYWRfcHJvbWlzZTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmlzQ29ubmVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxvYWRfcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChwayA8PSAtMSkge1xuICAgICAgICAgICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdC5hdChwaykucGs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2dldEZvcm0ocGssICduYW1lZF9mb3JtJywgZm9ybU5hbWUsICRkaXZfZm9ybSwgY2JfcmVzb2x2ZSwgY2JfcmVqZWN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuICRkaXZfZm9ybTtcbiAgICB9XG5cblxuICAgIF9nZXRGb3JtKHBrLCBldmVudF90eXBlLCBmb3JtTmFtZSwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgIGV2ZW50X3R5cGU6IGV2ZW50X3R5cGUsXG4gICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgIHBrOiBwayxcbiAgICAgICAgICAgICAgICBmb3JtX25hbWU6IGZvcm1OYW1lXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcblxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBwayA9PT0gbnVsbCB8fCBwayA9PT0gLTEgPyAnY3JlYXRlJyA6ICdlZGl0JztcblxuICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKGRhdGEpID0+IHtcbiAgICAgICAgICAgICRkaXZfZm9ybS5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgICAgIGxldCAkZm9ybSA9ICRkaXZfZm9ybS5jbG9zZXN0KCdmb3JtJykuYWRkQ2xhc3MoYHNkYy1tb2RlbC0ke2NsYXNzTmFtZX0tZm9ybSBzZGMtbW9kZWwtZm9ybSAke3RoaXMuZm9ybV9pZH1gKS5kYXRhKCdtb2RlbCcsIHRoaXMpLmRhdGEoJ21vZGVsX3BrJywgcGspO1xuICAgICAgICAgICAgaWYgKCRmb3JtLmxlbmd0aCA+IDAgJiYgISRmb3JtWzBdLmhhc0F0dHJpYnV0ZSgnc2RjX3N1Ym1pdCcpKSB7XG4gICAgICAgICAgICAgICAgJGZvcm0uYXR0cignc2RjX3N1Ym1pdCcsICdzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvcicpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcC5yZWZyZXNoKCRkaXZfZm9ybSk7XG4gICAgICAgICAgICBjYl9yZXNvbHZlICYmIGNiX3Jlc29sdmUoZGF0YSk7XG4gICAgICAgIH0sIChyZXMpID0+IHtcbiAgICAgICAgICAgIGNiX3JlamVjdCAmJiBjYl9yZWplY3QocmVzKTtcbiAgICAgICAgfV07XG4gICAgfVxuXG4gICAgbmV3KCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgJGZvcm0gPSAkKCc8Zm9ybT4nKS5hcHBlbmQodGhpcy5jcmVhdGVGb3JtKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNGb3JtVG9Nb2RlbCgkZm9ybSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSwgcmVqZWN0KSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2F2ZShwayA9IC0xKSB7XG4gICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICAgICAgICBwayA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBsZXQgZWxlbV9saXN0O1xuICAgICAgICAgICAgaWYgKHBrID4gLTEpIHtcbiAgICAgICAgICAgICAgICBlbGVtX2xpc3QgPSBbdGhpcy5ieVBrKHBrKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1fbGlzdCA9IHRoaXMudmFsdWVzX2xpc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcF9saXN0ID0gW11cbiAgICAgICAgICAgIGVsZW1fbGlzdC5mb3JFYWNoKChlbGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgICAgICAgICBwX2xpc3QucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRGaWxlcyhlbGVtKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ3NhdmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGVsZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzOiBmaWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHR5cGVvZiByZXMuZGF0YS5pbnN0YW5jZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcy5kYXRhLmluc3RhbmNlKSA6IHJlcy5kYXRhLmluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhLmluc3RhbmNlID0gdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwX2xpc3QpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGUodmFsdWVzID0gdGhpcy52YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZEZpbGVzKHZhbHVlcykudGhlbigoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0eXBlb2YgcmVzLmRhdGEuaW5zdGFuY2UgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMuZGF0YS5pbnN0YW5jZSkgOiByZXMuZGF0YS5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhLmluc3RhbmNlID0gdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoZGF0YSlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHJlamVjdF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZWxldGUocGsgPSAtMSkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGsgPT09IC0xKSBwayA9IHRoaXMudmFsdWVzPy5waztcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBrOiBwa1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXNDb25uZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNfY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc19jb25uZXRpbmdfcHJvY2VzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXSA9IFsoKSA9PiB7XG4gICAgICAgICAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICAgICAgdGhpcy5fY29ubmVjdFRvU2VydmVyKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5fY2hlY2tDb25uZWN0aW9uKCkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbcmVzb2x2ZV9vcmlnaW4sIHJlamVjdF9vcmlnaW5dID0gdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddID0gW1xuICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlX29yaWdpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Rfb3JpZ2luKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnNvY2tldCkge1xuICAgICAgICAgICAgdGhpcy5fYXV0b19yZWNvbm5lY3QgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Lm9uY2xvc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuY2xvc2UoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzWydzb2NrZXQnXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFuKCkge1xuICAgICAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9yZWFkRmlsZXMoZWxlbSkge1xuICAgICAgICBsZXQgdG9fc29sdmUgPSBbXTtcbiAgICAgICAgbGV0IGZpbGVzID0ge31cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZWxlbSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICAgICAgICB0b19zb2x2ZS5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgKChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVtYmVyX29mX2NodW5rcyA9IHBhcnNlSW50KE1hdGguY2VpbChyZXN1bHQubGVuZ3RoIC8gTUFYX0ZJTEVfVVBMT0FEKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9sZW5ndGg6IHZhbHVlLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlcl9vZl9jaHVua3M7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bms6IHJlc3VsdC5zbGljZShNQVhfRklMRV9VUExPQUQgKiBpLCBNQVhfRklMRV9VUExPQUQgKiAoaSArIDEpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX2NodW5rczogbnVtYmVyX29mX2NodW5rcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfbGVuZ3RoOiB2YWx1ZS5zaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRvX3NvbHZlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmaWxlc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfb25NZXNzYWdlKGUpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgICAgIGlmIChkYXRhLmlzX2Vycm9yKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuX3JlcXVlc3QuaGFzT3duUHJvcGVydHkoZGF0YS5ldmVudF9pZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtkYXRhLmV2ZW50X2lkXVsxXShkYXRhKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5vcGVuX3JlcXVlc3RbZGF0YS5ldmVudF9pZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdwdXNoRXJyb3JNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnY29ubmVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddWzFdKGRhdGEpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddO1xuICAgICAgICAgICAgICAgIHRoaXMuX2F1dG9fcmVjb25uZWN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlcigncHVzaE1zZycsIGRhdGEuaGVhZGVyIHx8ICcnLCBkYXRhLm1zZyB8fCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdjb25uZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzX2Nvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddWzBdKGRhdGEpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdsb2FkJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGpzb25fcmVzID0gSlNPTi5wYXJzZShkYXRhLmFyZ3MuZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNfbGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIGRhdGEuYXJncy5kYXRhID0gdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoanNvbl9yZXMpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ29uX3VwZGF0ZScgfHwgZGF0YS50eXBlID09PSAnb25fY3JlYXRlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGpzb25fcmVzID0gSlNPTi5wYXJzZShkYXRhLmFyZ3MuZGF0YSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgb2JqID0gdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoanNvbl9yZXMpO1xuICAgICAgICAgICAgICAgIGxldCBjYjtcblxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdvbl9jcmVhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiID0gdGhpcy5vbl9jcmVhdGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2IgPSB0aGlzLm9uX3VwZGF0ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYihvYmopO1xuICAgICAgICAgICAgICAgIGRhdGEuYXJncy5kYXRhID0gb2JqO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IGRhdGEuZGF0YT8uaW5zdGFuY2VcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGRhdGEuZGF0YS5pbnN0YW5jZSA9IEpTT04ucGFyc2UoZGF0YS5kYXRhLmluc3RhbmNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMub3Blbl9yZXF1ZXN0Lmhhc093blByb3BlcnR5KGRhdGEuZXZlbnRfaWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbZGF0YS5ldmVudF9pZF1bMF0oZGF0YSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMub3Blbl9yZXF1ZXN0W2RhdGEuZXZlbnRfaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2Nvbm5lY3RUb1NlcnZlcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsX2lkZW50aWZpZXIgPSBgJHt0aGlzLm1vZGVsX25hbWV9YCArICh0aGlzLm1vZGVsX2lkID4gMCA/IGAvJHt0aGlzLm1vZGVsX2lkfWAgOiAnJyk7XG4gICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3MvbW9kZWwvJHttb2RlbF9pZGVudGlmaWVyfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoYHdzOi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vc2RjX3dzL21vZGVsLyR7bW9kZWxfaWRlbnRpZmllcn1gKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSB0aGlzLl9vbk1lc3NhZ2UuYmluZCh0aGlzKTtcblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU0RDIE1vZGVsICgke3RoaXMubW9kZWxfbmFtZX0sICR7dGhpcy5tb2RlbF9pZH0pIFNvY2tldCBjbG9zZWQgdW5leHBlY3RlZGx5YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbX2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMub3Blbl9yZXF1ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3QgPSB7fTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYXV0b19yZWNvbm5lY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RUb1NlcnZlcigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuc29ja2V0Lm9uZXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTW9kZWwgU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiAke2Vycn0gQ2xvc2luZyBzb2NrZXRgKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNfY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBfY2hlY2tDb25uZWN0aW9uKCkge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2Nvbm5lY3QnLFxuICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcGFyc2VTZXJ2ZXJSZXMocmVzKSB7XG4gICAgICAgIGxldCB1cGRhdGVkID0gW107XG4gICAgICAgIGZvciAobGV0IGpzb25fZGF0YSBvZiByZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBrID0ganNvbl9kYXRhLnBrO1xuICAgICAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5ieVBrKHBrKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGpzb25fZGF0YS5maWVsZHMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHZbJ19faXNfc2RjX21vZGVsX18nXSkge1xuICAgICAgICAgICAgICAgICAgICBvYmpba10gPSBuZXcgU3ViTW9kZWwodlsncGsnXSwgdlsnbW9kZWwnXSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvYmpba10gPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXBkYXRlZC5wdXNoKG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXNfbGlzdC5hdCgtMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG5cbiAgICB9XG59Il0sIm5hbWVzIjpbImFwcCIsInRyaWdnZXIiLCJ1dWlkdjQiLCJNQVhfRklMRV9VUExPQUQiLCJTdWJNb2RlbCIsImNvbnN0cnVjdG9yIiwicGsiLCJtb2RlbCIsIl9tb2RlbCIsImxvYWQiLCJjb250cm9sbGVyIiwiVHlwZUVycm9yIiwibmV3TW9kZWwiLCJNb2RlbFByb3h5SGFuZGxlciIsImdldCIsInRhcmdldCIsImtleSIsInZhbHVlIiwidW5kZWZpbmVkIiwibmV3VmFsIiwiTnVtYmVyIiwiYmluZCIsInNldCIsIm9sZFZhbCIsImhhc093blByb3BlcnR5IiwicGFyc2VfaGlkZGVuX2lucHV0cyIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsInBhcnNlSW50IiwicGFyc2VGbG9hdCIsInN1YnN0cmluZyIsImxlbmd0aCIsIk1vZGVsIiwibW9kZWxfbmFtZSIsIm1vZGVsX3F1ZXJ5IiwidmFsdWVzX2xpc3QiLCJ2YWx1ZXMiLCJfaXNfY29ubmVjdGVkIiwiX2lzX2Nvbm5ldGluZ19wcm9jZXNzIiwiX2F1dG9fcmVjb25uZWN0Iiwic29ja2V0Iiwib3Blbl9yZXF1ZXN0Iiwib25fdXBkYXRlIiwib25fY3JlYXRlIiwiZm9ybV9pZCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaWR4IiwibmV4dCIsImRvbmUiLCJieVBrIiwiaXNOYU4iLCJlbGVtIiwiZmluZCIsImVsbSIsIlByb3h5IiwicHVzaCIsImZpbHRlciIsIk9iamVjdCIsImFzc2lnbiIsImlzQ29ubmVjdGVkIiwidGhlbiIsImlkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiZXZlbnRfdHlwZSIsImV2ZW50X2lkIiwiYXJncyIsImxpc3RWaWV3IiwiY2JfcmVzb2x2ZSIsImNiX3JlamVjdCIsIiRkaXZfbGlzdCIsIiQiLCJkYXRhIiwiYXBwZW5kIiwiaHRtbCIsInJlZnJlc2giLCJyZXMiLCJkZXRhaWxWaWV3IiwibG9hZF9wcm9taXNlIiwic3luY0Zvcm1Ub01vZGVsIiwiJGZvcm1zIiwic3luY0Zvcm0iLCJzeW5jTW9kZWxUb0Zvcm0iLCJoYXNDbGFzcyIsInNlbGYiLCJlYWNoIiwiaGFzQXR0cmlidXRlIiwiaW5zdGFuY2UiLCJmb3JtX2l0ZW0iLCJlbGVtZW50cyIsIm5hbWUiLCJ0eXBlIiwiY2hlY2tlZCIsIkZpbGUiLCJjb250YWluZXIiLCJEYXRhVHJhbnNmZXIiLCJpdGVtcyIsImFkZCIsImZpbGVzIiwidmFsIiwiaW5zdGFuY2VzIiwiJGZvcm0iLCJhdCIsImNyZWF0ZUZvcm0iLCIkZGl2X2Zvcm0iLCJfZ2V0Rm9ybSIsImVkaXRGb3JtIiwibmFtZWRGb3JtIiwiZm9ybU5hbWUiLCJmb3JtX25hbWUiLCJjbGFzc05hbWUiLCJjbG9zZXN0IiwiYWRkQ2xhc3MiLCJhdHRyIiwibmV3Iiwic2F2ZSIsImVsZW1fbGlzdCIsInBfbGlzdCIsImZvckVhY2giLCJfcmVhZEZpbGVzIiwicGFyc2UiLCJfcGFyc2VTZXJ2ZXJSZXMiLCJhbGwiLCJjcmVhdGUiLCJkZWxldGUiLCJfY29ubmVjdFRvU2VydmVyIiwiX2NoZWNrQ29ubmVjdGlvbiIsInJlc29sdmVfb3JpZ2luIiwicmVqZWN0X29yaWdpbiIsImNsb3NlIiwib25jbG9zZSIsImNsZWFuIiwidG9fc29sdmUiLCJlbnRyaWVzIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImUiLCJyZXN1bHQiLCJudW1iZXJfb2ZfY2h1bmtzIiwiTWF0aCIsImNlaWwiLCJmaWxlX25hbWUiLCJmaWVsZF9uYW1lIiwiY29udGVudF9sZW5ndGgiLCJzaXplIiwiaSIsImNodW5rIiwic2xpY2UiLCJjb250ZW50X3R5cGUiLCJvbmVycm9yIiwicmVhZEFzQmluYXJ5U3RyaW5nIiwiX29uTWVzc2FnZSIsImlzX2Vycm9yIiwibXNnIiwiaGVhZGVyIiwianNvbl9yZXMiLCJvYmoiLCJjYiIsIm1vZGVsX2lkZW50aWZpZXIiLCJtb2RlbF9pZCIsIndpbmRvdyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJXZWJTb2NrZXQiLCJob3N0Iiwib25tZXNzYWdlIiwiY29uc29sZSIsImVycm9yIiwiX2tleSIsInNldFRpbWVvdXQiLCJlcnIiLCJvbm9wZW4iLCJ1cGRhdGVkIiwianNvbl9kYXRhIiwiayIsInYiLCJmaWVsZHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_socket.js\n");
88
98
 
89
99
  /***/ }),
90
100
 
@@ -94,7 +104,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
94
104
  \************************************************/
95
105
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
96
106
 
97
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ get_controller: () => (/* binding */ get_controller)\n/* harmony export */ });\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/**\n * @jest-environment jsdom\n */\n\n\nlet spy, _originAjax;\n\n/**\n * Returns a controller. This controller has been created by the using the normal SDC life cycle.\n *\n * @param tag_name{string} Controller tag name (snake-case)\n * @param init_arguments{object} object: Mockeds the tag data arguments.\n * @param origen_html{string} HTML: Mocked content of the content in your target HTML container.\n * @returns {Promise<{AbstractSDC}>}\n */\nasync function get_controller(tag_name, init_arguments = {}, origen_html = '') {\n if (!jest) throw new Error(\"JEST is not defined\");\n if (!spy) {\n _originAjax = $.ajax.bind($);\n spy = jest.spyOn($, 'ajax');\n spy.mockImplementation(function (a) {\n return _originAjax(a).then(html => {\n return html;\n }).catch(html => {\n return html;\n });\n });\n }\n const $body = $('body');\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty();\n const $controller = $(`<${tag_name}>${origen_html}</${tag_name}>`);\n for (const [key, value] of Object.entries(init_arguments)) {\n $controller.data(key, value);\n }\n const $divContainer = $('<div></div>').append($controller);\n $body.append($divContainer);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app._isInit = false;\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.cleanCache();\n await _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.init_sdc();\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.getController($controller);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdGVzdF91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFa0M7QUFDbEMsSUFBSUMsR0FBRyxFQUFFQyxXQUFXOztBQUVwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sZUFBZUMsY0FBY0EsQ0FBRUMsUUFBUSxFQUFFQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUVDLFdBQVcsR0FBRyxFQUFFLEVBQUU7RUFDbkYsSUFBRyxDQUFDQyxJQUFJLEVBQUUsTUFBTSxJQUFJQyxLQUFLLENBQUMscUJBQXFCLENBQUM7RUFDaEQsSUFBRyxDQUFDUCxHQUFHLEVBQUU7SUFDTEMsV0FBVyxHQUFHTyxDQUFDLENBQUNDLElBQUksQ0FBQ0MsSUFBSSxDQUFDRixDQUFDLENBQUM7SUFFNUJSLEdBQUcsR0FBR00sSUFBSSxDQUFDSyxLQUFLLENBQ1pILENBQUMsRUFDRCxNQUNKLENBQUM7SUFDRFIsR0FBRyxDQUFDWSxrQkFBa0IsQ0FBQyxVQUFVQyxDQUFDLEVBQUU7TUFDaEMsT0FBT1osV0FBVyxDQUFDWSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFFQyxJQUFJLElBQUs7UUFDakMsT0FBT0EsSUFBSTtNQUNmLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUVELElBQUksSUFBSztRQUNmLE9BQU9BLElBQUk7TUFDZixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDTjtFQUNBLE1BQU1FLEtBQUssR0FBR1QsQ0FBQyxDQUFDLE1BQU0sQ0FBQztFQUN2QlQsNkNBQUcsQ0FBQ21CLFlBQVksQ0FBQyxDQUFDO0VBRWxCRCxLQUFLLENBQUNFLFNBQVMsQ0FBQyxDQUFDO0VBRWpCLE1BQU1DLFdBQVcsR0FBR1osQ0FBQyxDQUFDLElBQUlMLFFBQVEsSUFBSUUsV0FBVyxLQUFLRixRQUFRLEdBQUcsQ0FBQztFQUNsRSxLQUFLLE1BQU0sQ0FBQ2tCLEdBQUcsRUFBRUMsS0FBSyxDQUFDLElBQUlDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDcEIsY0FBYyxDQUFDLEVBQUU7SUFDdkRnQixXQUFXLENBQUNLLElBQUksQ0FBQ0osR0FBRyxFQUFFQyxLQUFLLENBQUM7RUFDaEM7RUFDQSxNQUFNSSxhQUFhLEdBQUdsQixDQUFDLENBQUMsYUFBYSxDQUFDLENBQUNtQixNQUFNLENBQUNQLFdBQVcsQ0FBQztFQUUxREgsS0FBSyxDQUFDVSxNQUFNLENBQUNELGFBQWEsQ0FBQztFQUMzQjNCLDZDQUFHLENBQUM2QixPQUFPLEdBQUcsS0FBSztFQUNuQjdCLDZDQUFHLENBQUM4QixVQUFVLENBQUMsQ0FBQztFQUNoQixNQUFNOUIsNkNBQUcsQ0FBQytCLFFBQVEsQ0FBQyxDQUFDO0VBQ3BCLE9BQU8vQiw2Q0FBRyxDQUFDZ0MsYUFBYSxDQUFDWCxXQUFXLENBQUM7QUFDekMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3Rlc3RfdXRpbHMuanM/YTQzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBqZXN0LWVudmlyb25tZW50IGpzZG9tXG4gKi9cblxuaW1wb3J0IHthcHB9IGZyb20gJy4vc2RjX21haW4uanMnO1xubGV0IHNweSwgX29yaWdpbkFqYXg7XG5cbi8qKlxuICogUmV0dXJucyBhIGNvbnRyb2xsZXIuIFRoaXMgY29udHJvbGxlciBoYXMgYmVlbiBjcmVhdGVkIGJ5IHRoZSB1c2luZyB0aGUgbm9ybWFsIFNEQyBsaWZlIGN5Y2xlLlxuICpcbiAqIEBwYXJhbSB0YWdfbmFtZXtzdHJpbmd9IENvbnRyb2xsZXIgdGFnIG5hbWUgKHNuYWtlLWNhc2UpXG4gKiBAcGFyYW0gaW5pdF9hcmd1bWVudHN7b2JqZWN0fSBvYmplY3Q6IE1vY2tlZHMgdGhlIHRhZyBkYXRhIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSBvcmlnZW5faHRtbHtzdHJpbmd9IEhUTUw6IE1vY2tlZCBjb250ZW50IG9mIHRoZSBjb250ZW50IGluIHlvdXIgdGFyZ2V0IEhUTUwgY29udGFpbmVyLlxuICogQHJldHVybnMge1Byb21pc2U8e0Fic3RyYWN0U0RDfT59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRfY29udHJvbGxlciggdGFnX25hbWUsIGluaXRfYXJndW1lbnRzID0ge30sIG9yaWdlbl9odG1sID0gJycpIHtcbiAgICBpZighamVzdCkgdGhyb3cgbmV3IEVycm9yKFwiSkVTVCBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICBpZighc3B5KSB7XG4gICAgICAgIF9vcmlnaW5BamF4ID0gJC5hamF4LmJpbmQoJCk7XG5cbiAgICAgICAgc3B5ID0gamVzdC5zcHlPbihcbiAgICAgICAgICAgICQsXG4gICAgICAgICAgICAnYWpheCdcbiAgICAgICAgKTtcbiAgICAgICAgc3B5Lm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuIF9vcmlnaW5BamF4KGEpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgICAgIH0pLmNhdGNoKChodG1sKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcblxuICAgICRib2R5LnNhZmVFbXB0eSgpO1xuXG4gICAgY29uc3QgJGNvbnRyb2xsZXIgPSAkKGA8JHt0YWdfbmFtZX0+JHtvcmlnZW5faHRtbH08LyR7dGFnX25hbWV9PmApO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRfYXJndW1lbnRzKSkge1xuICAgICAgICAkY29udHJvbGxlci5kYXRhKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCAkZGl2Q29udGFpbmVyID0gJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoJGNvbnRyb2xsZXIpO1xuXG4gICAgJGJvZHkuYXBwZW5kKCRkaXZDb250YWluZXIpO1xuICAgIGFwcC5faXNJbml0ID0gZmFsc2U7XG4gICAgYXBwLmNsZWFuQ2FjaGUoKTtcbiAgICBhd2FpdCBhcHAuaW5pdF9zZGMoKTtcbiAgICByZXR1cm4gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRyb2xsZXIpO1xufSJdLCJuYW1lcyI6WyJhcHAiLCJzcHkiLCJfb3JpZ2luQWpheCIsImdldF9jb250cm9sbGVyIiwidGFnX25hbWUiLCJpbml0X2FyZ3VtZW50cyIsIm9yaWdlbl9odG1sIiwiamVzdCIsIkVycm9yIiwiJCIsImFqYXgiLCJiaW5kIiwic3B5T24iLCJtb2NrSW1wbGVtZW50YXRpb24iLCJhIiwidGhlbiIsImh0bWwiLCJjYXRjaCIsIiRib2R5IiwidXBkYXRlSnF1ZXJ5Iiwic2FmZUVtcHR5IiwiJGNvbnRyb2xsZXIiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJkYXRhIiwiJGRpdkNvbnRhaW5lciIsImFwcGVuZCIsIl9pc0luaXQiLCJjbGVhbkNhY2hlIiwiaW5pdF9zZGMiLCJnZXRDb250cm9sbGVyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_test_utils.js\n");
107
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getCsrfToken: () => (/* binding */ getCsrfToken),\n/* harmony export */ get_controller: () => (/* binding */ get_controller)\n/* harmony export */ });\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/**\n * @jest-environment jsdom\n */\n\n\nlet spy, _originAjax;\nfunction getCookie(name) {\n let cookieValue = null;\n if (document.cookie && document.cookie !== '') {\n const cookies = document.cookie.split(';');\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim();\n // Does this cookie string begin with the name we want?\n if (cookie.substring(0, name.length + 1) === name + '=') {\n return decodeURIComponent(cookie.substring(name.length + 1));\n }\n }\n }\n return '';\n}\n\n/**\n * Returns the CSRF token\n */\nfunction getCsrfToken() {\n return getCookie('csrftoken');\n}\n\n/**\n * Returns a controller. This controller has been created by the using the normal SDC life cycle.\n *\n * @param tag_name{string} Controller tag name (snake-case)\n * @param init_arguments{object} object: Mockeds the tag data arguments.\n * @param origen_html{string} HTML: Mocked content of the content in your target HTML container.\n * @returns {Promise<{AbstractSDC}>}\n */\nasync function get_controller(tag_name, init_arguments = {}, origen_html = '') {\n if (!jest) throw new Error(\"JEST is not defined\");\n if (!spy) {\n _originAjax = $.ajax.bind($);\n spy = jest.spyOn($, 'ajax');\n spy.mockImplementation(function (a) {\n return _originAjax(a).then(html => {\n return html;\n }).catch(html => {\n return html;\n });\n });\n }\n const $body = $('body');\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty();\n const $controller = $(`<${tag_name}>${origen_html}</${tag_name}>`);\n for (const [key, value] of Object.entries(init_arguments)) {\n $controller.data(key, value);\n }\n const $divContainer = $('<div></div>').append($controller);\n $body.append($divContainer);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app._isInit = false;\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.cleanCache();\n await _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.init_sdc();\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.getController($controller);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUcsS0FBSztFQUNuQjFDLDZDQUFHLENBQUMyQyxVQUFVLENBQUMsQ0FBQztFQUNoQixNQUFNM0MsNkNBQUcsQ0FBQzRDLFFBQVEsQ0FBQyxDQUFDO0VBQ3BCLE9BQU81Qyw2Q0FBRyxDQUFDNkMsYUFBYSxDQUFDWCxXQUFXLENBQUM7QUFDekMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3Rlc3RfdXRpbHMuanM/YTQzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBqZXN0LWVudmlyb25tZW50IGpzZG9tXG4gKi9cblxuaW1wb3J0IHthcHB9IGZyb20gJy4vc2RjX21haW4uanMnO1xubGV0IHNweSwgX29yaWdpbkFqYXg7XG5cbmZ1bmN0aW9uIGdldENvb2tpZShuYW1lKSB7XG4gICAgbGV0IGNvb2tpZVZhbHVlID0gbnVsbDtcbiAgICBpZiAoZG9jdW1lbnQuY29va2llICYmIGRvY3VtZW50LmNvb2tpZSAhPT0gJycpIHtcbiAgICAgICAgY29uc3QgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvb2tpZSA9IGNvb2tpZXNbaV0udHJpbSgpO1xuICAgICAgICAgICAgLy8gRG9lcyB0aGlzIGNvb2tpZSBzdHJpbmcgYmVnaW4gd2l0aCB0aGUgbmFtZSB3ZSB3YW50P1xuICAgICAgICAgICAgaWYgKGNvb2tpZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGggKyAxKSA9PT0gKG5hbWUgKyAnPScpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjb29raWUuc3Vic3RyaW5nKG5hbWUubGVuZ3RoICsgMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBDU1JGIHRva2VuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDc3JmVG9rZW4oKSB7XG4gICAgcmV0dXJuIGdldENvb2tpZSgnY3NyZnRva2VuJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNvbnRyb2xsZXIuIFRoaXMgY29udHJvbGxlciBoYXMgYmVlbiBjcmVhdGVkIGJ5IHRoZSB1c2luZyB0aGUgbm9ybWFsIFNEQyBsaWZlIGN5Y2xlLlxuICpcbiAqIEBwYXJhbSB0YWdfbmFtZXtzdHJpbmd9IENvbnRyb2xsZXIgdGFnIG5hbWUgKHNuYWtlLWNhc2UpXG4gKiBAcGFyYW0gaW5pdF9hcmd1bWVudHN7b2JqZWN0fSBvYmplY3Q6IE1vY2tlZHMgdGhlIHRhZyBkYXRhIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSBvcmlnZW5faHRtbHtzdHJpbmd9IEhUTUw6IE1vY2tlZCBjb250ZW50IG9mIHRoZSBjb250ZW50IGluIHlvdXIgdGFyZ2V0IEhUTUwgY29udGFpbmVyLlxuICogQHJldHVybnMge1Byb21pc2U8e0Fic3RyYWN0U0RDfT59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRfY29udHJvbGxlciggdGFnX25hbWUsIGluaXRfYXJndW1lbnRzID0ge30sIG9yaWdlbl9odG1sID0gJycpIHtcbiAgICBpZighamVzdCkgdGhyb3cgbmV3IEVycm9yKFwiSkVTVCBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICBpZighc3B5KSB7XG4gICAgICAgIF9vcmlnaW5BamF4ID0gJC5hamF4LmJpbmQoJCk7XG5cbiAgICAgICAgc3B5ID0gamVzdC5zcHlPbihcbiAgICAgICAgICAgICQsXG4gICAgICAgICAgICAnYWpheCdcbiAgICAgICAgKTtcbiAgICAgICAgc3B5Lm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuIF9vcmlnaW5BamF4KGEpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgICAgIH0pLmNhdGNoKChodG1sKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcblxuICAgICRib2R5LnNhZmVFbXB0eSgpO1xuXG4gICAgY29uc3QgJGNvbnRyb2xsZXIgPSAkKGA8JHt0YWdfbmFtZX0+JHtvcmlnZW5faHRtbH08LyR7dGFnX25hbWV9PmApO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRfYXJndW1lbnRzKSkge1xuICAgICAgICAkY29udHJvbGxlci5kYXRhKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCAkZGl2Q29udGFpbmVyID0gJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoJGNvbnRyb2xsZXIpO1xuXG4gICAgJGJvZHkuYXBwZW5kKCRkaXZDb250YWluZXIpO1xuICAgIGFwcC5faXNJbml0ID0gZmFsc2U7XG4gICAgYXBwLmNsZWFuQ2FjaGUoKTtcbiAgICBhd2FpdCBhcHAuaW5pdF9zZGMoKTtcbiAgICByZXR1cm4gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRyb2xsZXIpO1xufSJdLCJuYW1lcyI6WyJhcHAiLCJzcHkiLCJfb3JpZ2luQWpheCIsImdldENvb2tpZSIsIm5hbWUiLCJjb29raWVWYWx1ZSIsImRvY3VtZW50IiwiY29va2llIiwiY29va2llcyIsInNwbGl0IiwiaSIsImxlbmd0aCIsInRyaW0iLCJzdWJzdHJpbmciLCJkZWNvZGVVUklDb21wb25lbnQiLCJnZXRDc3JmVG9rZW4iLCJnZXRfY29udHJvbGxlciIsInRhZ19uYW1lIiwiaW5pdF9hcmd1bWVudHMiLCJvcmlnZW5faHRtbCIsImplc3QiLCJFcnJvciIsIiQiLCJhamF4IiwiYmluZCIsInNweU9uIiwibW9ja0ltcGxlbWVudGF0aW9uIiwiYSIsInRoZW4iLCJodG1sIiwiY2F0Y2giLCIkYm9keSIsInVwZGF0ZUpxdWVyeSIsInNhZmVFbXB0eSIsIiRjb250cm9sbGVyIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwiZGF0YSIsIiRkaXZDb250YWluZXIiLCJhcHBlbmQiLCJfaXNJbml0IiwiY2xlYW5DYWNoZSIsImluaXRfc2RjIiwiZ2V0Q29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_test_utils.js\n");
98
108
 
99
109
  /***/ }),
100
110
 
@@ -195,4 +205,4 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
195
205
  /******/ export { __webpack_exports__AbstractSDC as AbstractSDC, __webpack_exports__allOff as allOff, __webpack_exports__app as app, __webpack_exports__checkIfParamNumberBoolOrString as checkIfParamNumberBoolOrString, __webpack_exports__clearErrorsInForm as clearErrorsInForm, __webpack_exports__controllerFactory as controllerFactory, __webpack_exports__on as on, __webpack_exports__runControlFlowFunctions as runControlFlowFunctions, __webpack_exports__setErrorsInForm as setErrorsInForm, __webpack_exports__setEvent as setEvent, __webpack_exports__socketReconnect as socketReconnect, __webpack_exports__test_utils as test_utils, __webpack_exports__trigger as trigger };
196
206
  /******/
197
207
 
198
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0FBQTtTQUNBOztTQUVBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBOztTQUVBO1NBQ0E7O1NBRUE7U0FDQTtTQUNBOzs7OztVQ3RCQTtVQUNBO1VBQ0E7VUFDQTtVQUNBLHlDQUF5Qyx3Q0FBd0M7VUFDakY7VUFDQTtVQUNBOzs7OztVQ1BBOzs7OztVQ0FBO1VBQ0E7VUFDQTtVQUNBLHVEQUF1RCxpQkFBaUI7VUFDeEU7VUFDQSxnREFBZ0QsYUFBYTtVQUM3RDs7Ozs7U0VOQTtTQUNBO1NBQ0E7U0FDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovLy93ZWJwYWNrL2JlZm9yZS1zdGFydHVwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYWZ0ZXItc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgY2FuJ3QgYmUgaW5saW5lZCBiZWNhdXNlIHRoZSBldmFsLXNvdXJjZS1tYXAgZGV2dG9vbCBpcyB1c2VkLlxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvaW5kZXguanNcIik7XG4iLCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=
208
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBQUE7U0FDQTs7U0FFQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTs7U0FFQTtTQUNBOztTQUVBO1NBQ0E7U0FDQTs7Ozs7VUN0QkE7VUFDQTtVQUNBO1VBQ0E7VUFDQSx5Q0FBeUMsd0NBQXdDO1VBQ2pGO1VBQ0E7VUFDQTs7Ozs7VUNQQTs7Ozs7VUNBQTtVQUNBO1VBQ0E7VUFDQSx1REFBdUQsaUJBQWlCO1VBQ3hFO1VBQ0EsZ0RBQWdELGFBQWE7VUFDN0Q7Ozs7O1NFTkE7U0FDQTtTQUNBO1NBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vd2VicGFjay9iZWZvcmUtc3RhcnR1cCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIiwid2VicGFjazovLy93ZWJwYWNrL2FmdGVyLXN0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGNhbid0IGJlIGlubGluZWQgYmVjYXVzZSB0aGUgZXZhbC1zb3VyY2UtbWFwIGRldnRvb2wgaXMgdXNlZC5cbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL2luZGV4LmpzXCIpO1xuIiwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9