sdc_client 0.158.8 → 0.158.9
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 +39 -24
- package/dist/ugly.index.js +1 -1
- package/eslint.config.js +9 -26
- package/gulp/gulp.jsx +1 -6
- package/{gulpfile.jsx → gulpfile.cjs} +12 -7
- package/package.json +18 -21
- package/src/simpleDomControl/AbstractSDC.js +9 -0
- package/src/simpleDomControl/sdc_controller.js +4 -1
- package/src/simpleDomControl/sdc_view.js +5 -0
- package/test/controller.test.js +1 -1
- package/test/dist.test.js +1 -1
- package/webpack.config/webpack.default.config.cjs +0 -8
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 */ SdcModel: () => (/* reexport safe */ _simpleDomControl_sdc_model_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ SdcQuerySet: () => (/* reexport safe */ _simpleDomControl_sdc_model_js__WEBPACK_IMPORTED_MODULE_2__.SdcQuerySet),\n/* harmony export */ allOff: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_4__.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_5__.checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_5__.clearErrorsInForm),\n/* harmony export */ controllerFactory: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_6__.controllerFactory),\n/* harmony export */ on: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_4__.on),\n/* harmony export */ registerModel: () => (/* reexport safe */ _simpleDomControl_sdc_socket_js__WEBPACK_IMPORTED_MODULE_3__.registerModel),\n/* harmony export */ runControlFlowFunctions: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_6__.runControlFlowFunctions),\n/* harmony export */ setErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_5__.setErrorsInForm),\n/* harmony export */ setEvent: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_4__.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_4__.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_model_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./simpleDomControl/sdc_model.js */ \"./src/simpleDomControl/sdc_model.js\");\n/* harmony import */ var _simpleDomControl_sdc_socket_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./simpleDomControl/sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./simpleDomControl/sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./simpleDomControl/sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./simpleDomControl/sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_7__ = __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_8__ = __webpack_require__(/*! ./simpleDomControl/sdc_test_utils.js */ \"./src/simpleDomControl/sdc_test_utils.js\");\n\n\n\n\n\n\n\n\n\nconst socketReconnect = _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_7__.close;\nconst test_utils = {
|
|
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 */ SdcModel: () => (/* reexport safe */ _simpleDomControl_sdc_model_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ SdcQuerySet: () => (/* reexport safe */ _simpleDomControl_sdc_model_js__WEBPACK_IMPORTED_MODULE_2__.SdcQuerySet),\n/* harmony export */ allOff: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_4__.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_5__.checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_5__.clearErrorsInForm),\n/* harmony export */ controllerFactory: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_6__.controllerFactory),\n/* harmony export */ on: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_4__.on),\n/* harmony export */ registerModel: () => (/* reexport safe */ _simpleDomControl_sdc_socket_js__WEBPACK_IMPORTED_MODULE_3__.registerModel),\n/* harmony export */ runControlFlowFunctions: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_6__.runControlFlowFunctions),\n/* harmony export */ setErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_5__.setErrorsInForm),\n/* harmony export */ setEvent: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_4__.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_4__.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_model_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./simpleDomControl/sdc_model.js */ \"./src/simpleDomControl/sdc_model.js\");\n/* harmony import */ var _simpleDomControl_sdc_socket_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./simpleDomControl/sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./simpleDomControl/sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./simpleDomControl/sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./simpleDomControl/sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_7__ = __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_8__ = __webpack_require__(/*! ./simpleDomControl/sdc_test_utils.js */ \"./src/simpleDomControl/sdc_test_utils.js\");\n\n\n\n\n\n\n\n\n\n\n\nconst socketReconnect = _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_7__.close;\nconst test_utils = {get_controller: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_8__.get_controller, getCsrfToken: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_8__.getCsrfToken, controllerFromTestHtml: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_8__.controllerFromTestHtml};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFtRDtBQUNXO0FBQ1E7QUFDUDtBQU1yQjs7QUFNRDtBQUlLO0FBQ2M7QUFLZDs7QUFFOUMsd0JBQXdCLHVFQUFLO0FBQzdCLG9CQUFvQixjQUFjLCtGQUFjLHVHQUF3Qjs7QUFtQnRFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9pbmRleC5qcz9lNWY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwfSBmcm9tIFwiLi9zaW1wbGVEb21Db250cm9sL3NkY19tYWluLmpzXCI7XG5pbXBvcnQge0Fic3RyYWN0U0RDfSBmcm9tIFwiLi9zaW1wbGVEb21Db250cm9sL0Fic3RyYWN0U0RDLmpzXCI7XG5pbXBvcnQgU2RjTW9kZWwsIHtTZGNRdWVyeVNldH0gZnJvbSBcIi4vc2ltcGxlRG9tQ29udHJvbC9zZGNfbW9kZWwuanNcIjtcbmltcG9ydCB7cmVnaXN0ZXJNb2RlbH0gZnJvbSBcIi4vc2ltcGxlRG9tQ29udHJvbC9zZGNfc29ja2V0LmpzXCI7XG5pbXBvcnQge1xuICBvbixcbiAgdHJpZ2dlcixcbiAgYWxsT2ZmLFxuICBzZXRFdmVudCxcbn0gZnJvbSBcIi4vc2ltcGxlRG9tQ29udHJvbC9zZGNfZXZlbnRzLmpzXCI7XG5cbmltcG9ydCB7XG4gIGNsZWFyRXJyb3JzSW5Gb3JtLFxuICBzZXRFcnJvcnNJbkZvcm0sXG4gIGNoZWNrSWZQYXJhbU51bWJlckJvb2xPclN0cmluZyxcbn0gZnJvbSBcIi4vc2ltcGxlRG9tQ29udHJvbC9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gIGNvbnRyb2xsZXJGYWN0b3J5LFxuICBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyxcbn0gZnJvbSBcIi4vc2ltcGxlRG9tQ29udHJvbC9zZGNfY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IHtjbG9zZX0gZnJvbSBcIi4vc2ltcGxlRG9tQ29udHJvbC9zZGNfc2VydmVyX2NhbGwuanNcIjtcbmltcG9ydCB7XG4gIGdldF9jb250cm9sbGVyLFxuICBnZXRDc3JmVG9rZW4sXG4gIGNvbnRyb2xsZXJGcm9tVGVzdEh0bWwsXG59IGZyb20gXCIuL3NpbXBsZURvbUNvbnRyb2wvc2RjX3Rlc3RfdXRpbHMuanNcIjtcblxuY29uc3Qgc29ja2V0UmVjb25uZWN0ID0gY2xvc2U7XG5jb25zdCB0ZXN0X3V0aWxzID0ge2dldF9jb250cm9sbGVyLCBnZXRDc3JmVG9rZW4sIGNvbnRyb2xsZXJGcm9tVGVzdEh0bWx9O1xuXG5leHBvcnQge1xuICBhcHAsXG4gIEFic3RyYWN0U0RDLFxuICBvbixcbiAgdHJpZ2dlcixcbiAgYWxsT2ZmLFxuICBzZXRFdmVudCxcbiAgY2xlYXJFcnJvcnNJbkZvcm0sXG4gIHNldEVycm9yc0luRm9ybSxcbiAgY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nLFxuICBjb250cm9sbGVyRmFjdG9yeSxcbiAgcnVuQ29udHJvbEZsb3dGdW5jdGlvbnMsXG4gIHNvY2tldFJlY29ubmVjdCxcbiAgdGVzdF91dGlscyxcbiAgU2RjTW9kZWwsXG4gIFNkY1F1ZXJ5U2V0LFxuICByZWdpc3Rlck1vZGVsXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/index.js\n\n}");
|
|
18
18
|
|
|
19
19
|
/***/ },
|
|
20
20
|
|
|
@@ -24,7 +24,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
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_model_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_model.js */ \"./src/simpleDomControl/sdc_model.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.parsedContentUrl = null;\n this.events = [];\n this.load_async = false;\n this._isEventsSet = false;\n this._allEvents = null;\n this._params = {};\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 = Object.getPrototypeOf(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 get params() {\n return this._params;\n }\n set params(params) {\n this._params = params;\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 && !this._isMixin) {\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\n /**\n *\n * @return {Promise<*>|*}\n */\n onInit() {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG && !this._isMixin) {\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 noOpenModelRequests() {\n return Promise.all(this._models.map(x => x.noOpenRequests()));\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 ?? this.contentUrl, methode, args);\n }\n\n /**\n *\n * @param {string} modelName\n * @param {object?} modelQuery\n * @returns {SdcQuerySet}\n */\n querySet(modelName, modelQuery = {}) {\n const newQuerySet = new _sdc_model_js__WEBPACK_IMPORTED_MODULE_2__.SdcQuerySet(modelName, modelQuery);\n this._models.push(newQuerySet);\n return newQuerySet;\n }\n newModel(modelName, modelQuery = {}) {\n console.warn(\"newModel is deprecated and will soon be removed. Please use this.querySet(modelName, modelQuery)\");\n return this.querySet(modelName, modelQuery);\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 reconcile($virtualNode, $realNode = null) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reconcile(this, $virtualNode, $realNode);\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 if (!this._isMixin) {\n e.stopPropagation();\n e.preventDefault();\n let {\n model,\n form_name\n } = $form.data();\n let data = model.syncForm($form);\n return new Promise((resolve, reject) => {\n let prom;\n if (model.id !== null && model.id >= 0) {\n prom = model.save({\n formName: form_name,\n data\n });\n } else {\n prom = model.create({\n data\n });\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 this.reconcile($(`<div class=\"container-fluid\">${data.html}</div>`), $form.find(\".container-fluid\").first());\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 return Promise.resolve();\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFJLENBQUM7UUFDZCxDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7SUFDSjtJQUVBLE9BQU96RSxPQUFPLENBQUMyRSxPQUFPLENBQUMsQ0FBQztFQUMxQjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL0Fic3RyYWN0U0RDLmpzP2Q3ZjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthbGxPZmZ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcbmltcG9ydCB7YXBwfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuaW1wb3J0IHtTZGNRdWVyeVNldH0gZnJvbSBcIi4vc2RjX21vZGVsLmpzXCI7XG5pbXBvcnQge2NhbGxTZXJ2ZXJ9IGZyb20gXCIuL3NkY19zZXJ2ZXJfY2FsbC5qc1wiO1xuaW1wb3J0IHtcbiAgdXVpZHY0LFxuICBjbGVhckVycm9yc0luRm9ybSxcbiAgdGFnTmFtZVRvQ2FtZWxDYXNlLFxuICB0YWdOYW1lVG9SZWFkYWJsZU5hbWUsXG59IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RTREMge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl91dWlkID0gdXVpZHY0KCk7XG4gICAgdGhpcy5jb250ZW50VXJsID0gXCJcIjtcbiAgICB0aGlzLmNvbnRlbnRSZWxvYWQgPSBmYWxzZTtcbiAgICB0aGlzLnBhcnNlZENvbnRlbnRVcmwgPSBudWxsO1xuICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgdGhpcy5sb2FkX2FzeW5jID0gZmFsc2U7XG4gICAgdGhpcy5faXNFdmVudHNTZXQgPSBmYWxzZTtcbiAgICB0aGlzLl9hbGxFdmVudHMgPSBudWxsO1xuICAgIHRoaXMuX3BhcmFtcyA9IHt9O1xuXG4gICAgdGhpcy5fdXJsUGFyYW1zID0gW107XG4gICAgdGhpcy5fbW9kZWxzID0gW107XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gT2xkIGRlcHJlY2F0ZWQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdGhpcy5fY3NzVXJscyA9IFtdO1xuICAgIHRoaXMuYWZ0ZXJTaG93ID0gKCkgPT4ge1xuICAgICAgY29uc29sZS53YXJuKFwiYWZ0ZXJTaG93IGlzIGRlcHJlY2F0ZWQhIVwiKTtcbiAgICB9O1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tIEVuZCBvbGQgZGVwcmVjYXRlZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHR5cGUge3tzdHJpbmc6IEFic3RyYWN0U0RDfX1cbiAgICAgKi9cbiAgICB0aGlzLl9taXhpbnMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5fdGFnTmFtZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fdGFnTmFtZSA/PyBcIlwiO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge3tzdHJpbmc6QWJzdHJhY3RTREN9fVxuICAgICAqL1xuICAgIHRoaXMuX2NoaWxkQ29udHJvbGxlciA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0Fic3RyYWN0U0RDfVxuICAgICAqL1xuICAgIHRoaXMuX3BhcmVudENvbnRyb2xsZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5fb25Mb2FkRG9uZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge2pxdWVyeX1cbiAgICAgKi9cbiAgICB0aGlzLiRjb250YWluZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gIH1cblxuICBnZXQgcGFyYW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbXM7XG4gIH1cblxuICBzZXQgcGFyYW1zKHBhcmFtcykge1xuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIG11c3QgYmUgaW4ge31cbiAgICogQHBhcmFtIHtBcnJheX0gYXJncyBpbiBhcmd1bWVudHMgb2ZcbiAgICpcbiAgICovXG4gIF9ydW5MaWZlY3ljbGUobWV0aG9kLCBhcmdzKSB7XG4gICAgaWYgKGFwcC5ERUJVRyAmJiAhdGhpcy5faXNNaXhpbikge1xuICAgICAgY29uc29sZS5kZWJ1ZyhtZXRob2QsIHRoaXMuX3RhZ05hbWUpO1xuICAgIH1cblxuICAgIGxldCByZXR1cm5Qcm9taXNzZXMgPSBbXTtcbiAgICBpZiAodGhpcy5faXNNaXhpbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc01peGluID0gdHJ1ZTtcbiAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICBpZiAodHlwZW9mIG1peGluW21ldGhvZF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm5Qcm9taXNzZXMucHVzaChtaXhpblttZXRob2RdLmFwcGx5KHRoaXMsIGFyZ3MpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocmV0dXJuUHJvbWlzc2VzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzTWl4aW4gPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPCo+fCp9XG4gICAqL1xuICBvbkluaXQoKSB7XG4gICAgaWYgKGFwcC5ERUJVRyAmJiAhdGhpcy5faXNNaXhpbikge1xuICAgICAgY29uc29sZS5kZWJ1ZyhBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLCB0aGlzLl90YWdOYW1lKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGFyZW50Q29udHJvbGxlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50Q29udHJvbGxlcjtcbiAgfVxuXG4gIGdldCBjaGlsZENvbnRyb2xsZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkQ29udHJvbGxlcjtcbiAgfVxuXG4gIG9uTG9hZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKFwib25Mb2FkXCIsIGFyZ3VtZW50cyk7XG4gIH1cblxuICB3aWxsU2hvdygpIHtcbiAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKFwid2lsbFNob3dcIiwgYXJndW1lbnRzKTtcbiAgfVxuXG4gIG9uUmVmcmVzaCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKFwib25SZWZyZXNoXCIsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBvblJlbW92ZSgpIHtcbiAgICB0aGlzLl9ydW5MaWZlY3ljbGUoXCJvblJlbW92ZVwiLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbm9PcGVuTW9kZWxSZXF1ZXN0cygpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5fbW9kZWxzLm1hcCgoeCkgPT4geC5ub09wZW5SZXF1ZXN0cygpKSk7XG4gIH1cblxuICByZW1vdmUoKSB7XG4gICAgZm9yIChjb25zdCBtb2RlbCBvZiB0aGlzLl9tb2RlbHMpIHtcbiAgICAgIG1vZGVsLmNsb3NlKCk7XG4gICAgfVxuICAgIGxldCBfY2hpbGRDb250cm9sbGVyID0gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgIGZvciAobGV0IGkgaW4gX2NoaWxkQ29udHJvbGxlcikge1xuICAgICAgaWYgKF9jaGlsZENvbnRyb2xsZXIuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgZm9yIChsZXQgY2Mgb2YgX2NoaWxkQ29udHJvbGxlcltpXSkge1xuICAgICAgICAgIGlmICghY2MucmVtb3ZlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub25SZW1vdmUgfHwgdGhpcy5vblJlbW92ZSgpKSB7XG4gICAgICBhbGxPZmYodGhpcyk7XG4gICAgICBjb25zdCBjX25hbWUgPSB0YWdOYW1lVG9DYW1lbENhc2UodGhpcy5fdGFnTmFtZSk7XG4gICAgICBpZiAodGhpcy5fcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NfbmFtZV0pIHtcbiAgICAgICAgbGV0IGFyciA9IHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChhcnJbaV0gPT09IHRoaXMpIHtcbiAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGRlbGV0ZSB0aGlzO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29udHJvbGxlcl9uYW1lKCkge1xuICAgIHJldHVybiB0YWdOYW1lVG9SZWFkYWJsZU5hbWUodGhpcy5fdGFnTmFtZSk7XG4gIH1cblxuICBhZGRFdmVudChldmVudCwgc2VsZWN0b3IsIGhhbmRsZXIpIHtcbiAgICB0aGlzLmdldEV2ZW50cygpO1xuICAgIHRoaXMuX2FsbEV2ZW50c1tldmVudF0gPSB0aGlzLl9hbGxFdmVudHNbZXZlbnRdIHx8IHt9O1xuICAgIHRoaXMuX2FsbEV2ZW50c1tldmVudF1bc2VsZWN0b3JdID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldEV2ZW50cygpIHtcbiAgICBpZiAodGhpcy5fYWxsRXZlbnRzKSByZXR1cm4gdGhpcy5fYWxsRXZlbnRzO1xuICAgIGxldCBhbGxFdmVudHMgPSBbXTtcbiAgICBhbGxFdmVudHMgPSBhbGxFdmVudHMuY29uY2F0KHRoaXMuZXZlbnRzKTtcbiAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShtaXhpbi5ldmVudHMpKSB7XG4gICAgICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQobWl4aW4uZXZlbnRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKHRoaXMuX2FsbEV2ZW50cyA9IF8ubWVyZ2UoLi4uYWxsRXZlbnRzKSk7XG4gIH1cblxuICBwb3N0KHVybCwgYXJncykge1xuICAgIHJldHVybiBhcHAucG9zdCh0aGlzLCB1cmwsIGFyZ3MpO1xuICB9XG5cbiAgZ2V0KHVybCwgYXJncykge1xuICAgIHJldHVybiBhcHAuZ2V0KHRoaXMsIHVybCwgYXJncyk7XG4gIH1cblxuICBzdWJtaXRGb3JtKGZvcm0sIHVybCwgbWV0aG9kKSB7XG4gICAgcmV0dXJuIGFwcC5zdWJtaXRGb3JtQW5kVXBkYXRlVmlldyh0aGlzLCBmb3JtLCB1cmwsIG1ldGhvZCk7XG4gIH1cblxuICBzZXJ2ZXJDYWxsKG1ldGhvZGUsIGFyZ3MpIHtcbiAgICBsZXQgcmUgPSAvc2RjX3ZpZXdcXC8oW14vXSspL2k7XG4gICAgbGV0IGFwcCA9IHRoaXMuY29udGVudFVybC5tYXRjaChyZSk7XG4gICAgaWYgKCFhcHAgfHwgYXBwLmxlbmd0aCA8IDIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiVG8gdXNlIHRoZSBzZXJ2ZXJDYWxsIGZ1bmN0aW9uIHRoZSBjb250ZW50VXJsIG11c3QgYmUgc2V0OiBcIiArXG4gICAgICAgIHRoaXMubmFtZSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbGxTZXJ2ZXIoXG4gICAgICBhcHBbMV0sXG4gICAgICB0aGlzLl90YWdOYW1lLFxuICAgICAgdGhpcy5wYXJzZWRDb250ZW50VXJsID8/IHRoaXMuY29udGVudFVybCxcbiAgICAgIG1ldGhvZGUsXG4gICAgICBhcmdzLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICAgKiBAcGFyYW0gIHtvYmplY3Q/fSBtb2RlbFF1ZXJ5XG4gICAqIEByZXR1cm5zIHtTZGNRdWVyeVNldH1cbiAgICovXG4gIHF1ZXJ5U2V0KG1vZGVsTmFtZSwgbW9kZWxRdWVyeSA9IHt9KSB7XG4gICAgY29uc3QgbmV3UXVlcnlTZXQgPSBuZXcgU2RjUXVlcnlTZXQobW9kZWxOYW1lLCBtb2RlbFF1ZXJ5KTtcbiAgICB0aGlzLl9tb2RlbHMucHVzaChuZXdRdWVyeVNldCk7XG4gICAgcmV0dXJuIG5ld1F1ZXJ5U2V0O1xuICB9XG5cbiAgbmV3TW9kZWwobW9kZWxOYW1lLCBtb2RlbFF1ZXJ5ID0ge30pIHtcbiAgICBjb25zb2xlLndhcm4oXCJuZXdNb2RlbCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIHNvb24gYmUgcmVtb3ZlZC4gUGxlYXNlIHVzZSB0aGlzLnF1ZXJ5U2V0KG1vZGVsTmFtZSwgbW9kZWxRdWVyeSlcIik7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZXQobW9kZWxOYW1lLCBtb2RlbFF1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGFwdGVyIHRvIHRoaXMuJGNvbnRhaW5lci5maW5kXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkb21TZWxlY3RvclxuICAgKi9cbiAgZmluZChkb21TZWxlY3Rvcikge1xuICAgIHJldHVybiB0aGlzLiRjb250YWluZXIuZmluZChkb21TZWxlY3Rvcik7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHJldHVybiBhcHAucmVmcmVzaCh0aGlzLiRjb250YWluZXIsIHRoaXMpO1xuICB9XG5cbiAgcmVsb2FkKCkge1xuICAgIHJldHVybiBhcHAucmVsb2FkQ29udHJvbGxlcih0aGlzKTtcbiAgfVxuXG4gIHJlY29uY2lsZSgkdmlydHVhbE5vZGUsICRyZWFsTm9kZSA9IG51bGwpIHtcbiAgICByZXR1cm4gYXBwLnJlY29uY2lsZSh0aGlzLCAkdmlydHVhbE5vZGUsICRyZWFsTm9kZSk7XG4gIH1cblxuICBzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvcigkZm9ybSwgZSkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fc3VibWl0TW9kZWxGb3JtID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRNb2RlbEZvcm0oJGZvcm0sIGUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuc3VibWl0TW9kZWxGb3JtID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRTdWJtaXRNb2RlbEZvcm0oJGZvcm0sIGUpO1xuICB9XG5cbiAgaXRlcmF0ZUFsbENoaWxkcmVuKCkge1xuICAgIGxldCBfY2hpbGRDb250cm9sbGVyID0gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgIGxldCByZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpIGluIF9jaGlsZENvbnRyb2xsZXIpIHtcbiAgICAgIGlmIChfY2hpbGRDb250cm9sbGVyLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgIGZvciAobGV0IGNjIG9mIF9jaGlsZENvbnRyb2xsZXJbaV0pIHtcbiAgICAgICAgICByZXMucHVzaChjYyk7XG4gICAgICAgICAgcmVzLnB1c2goLi4uY2MuaXRlcmF0ZUFsbENoaWxkcmVuKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKipcbiAgICogTW9kZWwgRm9ybSBFdmVudHNcbiAgICovXG4gIGRlZmF1bHRTdWJtaXRNb2RlbEZvcm0oJGZvcm0sIGUpIHtcbiAgICBpZiAoIXRoaXMuX2lzTWl4aW4pIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBsZXQge21vZGVsLCBmb3JtX25hbWV9ID0gJGZvcm0uZGF0YSgpO1xuICAgICAgbGV0IGRhdGEgPSBtb2RlbC5zeW5jRm9ybSgkZm9ybSk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcHJvbTtcbiAgICAgICAgaWYgKG1vZGVsLmlkICE9PSBudWxsICYmIG1vZGVsLmlkID49IDApIHtcbiAgICAgICAgICBwcm9tID0gbW9kZWwuc2F2ZSh7Zm9ybU5hbWU6IGZvcm1fbmFtZSwgZGF0YX0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb20gPSBtb2RlbC5jcmVhdGUoe2RhdGF9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb21cbiAgICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICBjbGVhckVycm9yc0luRm9ybSgkZm9ybSk7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MgJiZcbiAgICAgICAgICAgIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyhyZXNbMF0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIHRoaXMuaXRlcmF0ZUFsbENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzICYmXG4gICAgICAgICAgICAgIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyhyZXNbMF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVjb25jaWxlKFxuICAgICAgICAgICAgICAkKGA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+JHtkYXRhLmh0bWx9PC9kaXY+YCksXG4gICAgICAgICAgICAgICRmb3JtLmZpbmQoXCIuY29udGFpbmVyLWZsdWlkXCIpLmZpcnN0KCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvciAmJlxuICAgICAgICAgICAgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvcihkYXRhKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbGxlciBvZiB0aGlzLml0ZXJhdGVBbGxDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICAgIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IgJiZcbiAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvcihkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVqZWN0KGRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG59XG4iXSwibmFtZXMiOlsiYWxsT2ZmIiwiYXBwIiwiU2RjUXVlcnlTZXQiLCJjYWxsU2VydmVyIiwidXVpZHY0IiwiY2xlYXJFcnJvcnNJbkZvcm0iLCJ0YWdOYW1lVG9DYW1lbENhc2UiLCJ0YWdOYW1lVG9SZWFkYWJsZU5hbWUiLCJBYnN0cmFjdFNEQyIsImNvbnN0cnVjdG9yIiwiX3V1aWQiLCJjb250ZW50VXJsIiwiY29udGVudFJlbG9hZCIsInBhcnNlZENvbnRlbnRVcmwiLCJldmVudHMiLCJsb2FkX2FzeW5jIiwiX2lzRXZlbnRzU2V0IiwiX2FsbEV2ZW50cyIsIl9wYXJhbXMiLCJfdXJsUGFyYW1zIiwiX21vZGVscyIsIl9jc3NVcmxzIiwiYWZ0ZXJTaG93IiwiY29uc29sZSIsIndhcm4iLCJfbWl4aW5zIiwiX3RhZ05hbWUiLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsIl9jaGlsZENvbnRyb2xsZXIiLCJfcGFyZW50Q29udHJvbGxlciIsIl9vbkxvYWREb25lIiwiJGNvbnRhaW5lciIsIl9pc01peGluIiwicGFyYW1zIiwiX3J1bkxpZmVjeWNsZSIsIm1ldGhvZCIsImFyZ3MiLCJERUJVRyIsImRlYnVnIiwicmV0dXJuUHJvbWlzc2VzIiwibWl4aW5LZXkiLCJtaXhpbiIsInB1c2giLCJhcHBseSIsIlByb21pc2UiLCJhbGwiLCJ0aGVuIiwib25Jbml0IiwiQXJyYXkiLCJhcmd1bWVudHMiLCJwYXJlbnRDb250cm9sbGVyIiwiY2hpbGRDb250cm9sbGVyIiwib25Mb2FkIiwid2lsbFNob3ciLCJvblJlZnJlc2giLCJvblJlbW92ZSIsIm5vT3Blbk1vZGVsUmVxdWVzdHMiLCJtYXAiLCJ4Iiwibm9PcGVuUmVxdWVzdHMiLCJyZW1vdmUiLCJtb2RlbCIsImNsb3NlIiwiaSIsImhhc093blByb3BlcnR5IiwiY2MiLCJjX25hbWUiLCJhcnIiLCJsZW5ndGgiLCJzcGxpY2UiLCJjb250cm9sbGVyX25hbWUiLCJhZGRFdmVudCIsImV2ZW50Iiwic2VsZWN0b3IiLCJoYW5kbGVyIiwiZ2V0RXZlbnRzIiwiYWxsRXZlbnRzIiwiY29uY2F0IiwiaXNBcnJheSIsIl8iLCJtZXJnZSIsInBvc3QiLCJ1cmwiLCJnZXQiLCJzdWJtaXRGb3JtIiwiZm9ybSIsInN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3Iiwic2VydmVyQ2FsbCIsIm1ldGhvZGUiLCJyZSIsIm1hdGNoIiwiZXJyb3IiLCJuYW1lIiwicXVlcnlTZXQiLCJtb2RlbE5hbWUiLCJtb2RlbFF1ZXJ5IiwibmV3UXVlcnlTZXQiLCJuZXdNb2RlbCIsImZpbmQiLCJkb21TZWxlY3RvciIsInJlZnJlc2giLCJyZWxvYWQiLCJyZWxvYWRDb250cm9sbGVyIiwicmVjb25jaWxlIiwiJHZpcnR1YWxOb2RlIiwiJHJlYWxOb2RlIiwic3VibWl0TW9kZWxGb3JtRGlzdHJpYnV0b3IiLCIkZm9ybSIsImUiLCJfc3VibWl0TW9kZWxGb3JtIiwic3VibWl0TW9kZWxGb3JtIiwiZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSIsIml0ZXJhdGVBbGxDaGlsZHJlbiIsInJlcyIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiZm9ybV9uYW1lIiwiZGF0YSIsInN5bmNGb3JtIiwicmVzb2x2ZSIsInJlamVjdCIsInByb20iLCJpZCIsInNhdmUiLCJmb3JtTmFtZSIsImNyZWF0ZSIsInN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MiLCJjb250cm9sbGVyIiwiY2F0Y2giLCIkIiwiaHRtbCIsImZpcnN0Iiwic3VibWl0X21vZGVsX2Zvcm1fZXJyb3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/AbstractSDC.js\n\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_model_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_model.js */ \"./src/simpleDomControl/sdc_model.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\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.parsedContentUrl = null;\n this.events = [];\n this.load_async = false;\n this._isEventsSet = false;\n this._allEvents = null;\n this._autoRedirect = null;\n this._params = {};\n\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 = Object.getPrototypeOf(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 get params() {\n return this._params;\n }\n\n set params(params) {\n this._params = params;\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 && !this._isMixin) {\n console.debug(method, this._tagName);\n }\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\n return Promise.all(returnPromisses).then(() => {\n this._isMixin = false;\n });\n }\n\n /**\n *\n * @return {Promise<*>|*}\n */\n onInit() {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG && !this._isMixin) {\n console.debug(Array.apply(null, arguments), this._tagName);\n }\n }\n\n set autoRedirect(url){\n this._autoRedirect = url;\n }\n\n get autoRedirect() {\n return this._autoRedirect;\n }\n\n get parentController() {\n return this._parentController;\n }\n\n get childController() {\n return this._childController;\n }\n\n onLoad() {\n return this._runLifecycle(\"onLoad\", arguments);\n }\n\n willShow() {\n return this._runLifecycle(\"willShow\", arguments);\n }\n\n onRefresh() {\n return this._runLifecycle(\"onRefresh\", arguments);\n }\n\n onRemove() {\n this._runLifecycle(\"onRemove\", arguments);\n return true;\n }\n\n noOpenModelRequests() {\n return Promise.all(this._models.map((x) => x.noOpenRequests()));\n }\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\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\n this.$container.remove();\n delete this;\n return true;\n }\n\n return false;\n }\n\n controller_name() {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToReadableName)(this._tagName);\n }\n\n addEvent(event, selector, handler) {\n this.getEvents();\n this._allEvents[event] = this._allEvents[event] || {};\n this._allEvents[event][selector] = handler;\n }\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\n return (this._allEvents = _.merge(...allEvents));\n }\n\n post(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.post(this, url, args);\n }\n\n get(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.get(this, url, args);\n }\n\n submitForm(form, url, method) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.submitFormAndUpdateView(this, form, url, method);\n }\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(\n \"To use the serverCall function the contentUrl must be set: \" +\n this.name,\n );\n return;\n }\n\n return (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__.callServer)(\n app[1],\n this._tagName,\n this.parsedContentUrl ?? this.contentUrl,\n methode,\n args,\n );\n }\n\n /**\n *\n * @param {string} modelName\n * @param {object?} modelQuery\n * @returns {SdcQuerySet}\n */\n querySet(modelName, modelQuery = {}) {\n const newQuerySet = new _sdc_model_js__WEBPACK_IMPORTED_MODULE_2__.SdcQuerySet(modelName, modelQuery);\n this._models.push(newQuerySet);\n return newQuerySet;\n }\n\n newModel(modelName, modelQuery = {}) {\n console.warn(\"newModel is deprecated and will soon be removed. Please use this.querySet(modelName, modelQuery)\");\n return this.querySet(modelName, modelQuery);\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\n refresh() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.refresh(this.$container, this);\n }\n\n reload() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reloadController(this);\n }\n\n reconcile($virtualNode, $realNode = null) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reconcile(this, $virtualNode, $realNode);\n }\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\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 if (!this._isMixin) {\n e.stopPropagation();\n e.preventDefault();\n let {model, form_name} = $form.data();\n let data = model.syncForm($form);\n return new Promise((resolve, reject) => {\n let prom;\n if (model.id !== null && model.id >= 0) {\n prom = model.save({formName: form_name, data});\n } else {\n prom = model.create({data});\n }\n\n prom\n .then((res) => {\n ;(0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.clearErrorsInForm)($form);\n this.submit_model_form_success &&\n this.submit_model_form_success(res[0]);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_success &&\n controller.submit_model_form_success(res[0]);\n }\n\n resolve(res);\n })\n .catch((data) => {\n this.reconcile(\n $(`<div class=\"container-fluid\">${data.html}</div>`),\n $form.find(\".container-fluid\").first(),\n );\n this.submit_model_form_error &&\n this.submit_model_form_error(data);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_error &&\n controller.submit_model_form_error(data);\n }\n\n reject(data);\n });\n });\n }\n\n return Promise.resolve();\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9BYnN0cmFjdFNEQy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBdUM7QUFDTDtBQUNTO0FBQ0s7QUFNeEI7O0FBRWpCO0FBQ1A7QUFDQSxpQkFBaUIscURBQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7O0FBRUE7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLDZDQUFHO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsUUFBUSw2Q0FBRztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLHNEQUFNO0FBQ1oscUJBQXFCLGlFQUFrQjtBQUN2QztBQUNBO0FBQ0Esd0JBQXdCLGdCQUFnQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLG9FQUFxQjtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLDZDQUFHO0FBQ2Q7O0FBRUE7QUFDQSxXQUFXLDZDQUFHO0FBQ2Q7O0FBRUE7QUFDQSxXQUFXLDZDQUFHO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVywrREFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGNBQWMsU0FBUztBQUN2QixlQUFlO0FBQ2Y7QUFDQSxxQ0FBcUM7QUFDckMsNEJBQTRCLHNEQUFXO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLDZDQUFHO0FBQ2Q7O0FBRUE7QUFDQSxXQUFXLDZDQUFHO0FBQ2Q7O0FBRUE7QUFDQSxXQUFXLDZDQUFHO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsMEJBQTBCO0FBQ3ZELFVBQVU7QUFDViwrQkFBK0IsS0FBSztBQUNwQzs7QUFFQTtBQUNBO0FBQ0EsWUFBWSxpRUFBaUI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxnREFBZ0QsVUFBVTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVztBQUNYLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvQWJzdHJhY3RTREMuanM/ZjU3YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FsbE9mZn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHthcHB9IGZyb20gXCIuL3NkY19tYWluLmpzXCI7XG5pbXBvcnQge1NkY1F1ZXJ5U2V0fSBmcm9tIFwiLi9zZGNfbW9kZWwuanNcIjtcbmltcG9ydCB7Y2FsbFNlcnZlcn0gZnJvbSBcIi4vc2RjX3NlcnZlcl9jYWxsLmpzXCI7XG5pbXBvcnQge1xuICB1dWlkdjQsXG4gIGNsZWFyRXJyb3JzSW5Gb3JtLFxuICB0YWdOYW1lVG9DYW1lbENhc2UsXG4gIHRhZ05hbWVUb1JlYWRhYmxlTmFtZSxcbn0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFNEQyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3V1aWQgPSB1dWlkdjQoKTtcbiAgICB0aGlzLmNvbnRlbnRVcmwgPSBcIlwiO1xuICAgIHRoaXMuY29udGVudFJlbG9hZCA9IGZhbHNlO1xuICAgIHRoaXMucGFyc2VkQ29udGVudFVybCA9IG51bGw7XG4gICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICB0aGlzLmxvYWRfYXN5bmMgPSBmYWxzZTtcbiAgICB0aGlzLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgIHRoaXMuX2FsbEV2ZW50cyA9IG51bGw7XG4gICAgdGhpcy5fYXV0b1JlZGlyZWN0ID0gbnVsbDtcbiAgICB0aGlzLl9wYXJhbXMgPSB7fTtcblxuICAgIHRoaXMuX3VybFBhcmFtcyA9IFtdO1xuICAgIHRoaXMuX21vZGVscyA9IFtdO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIE9sZCBkZXByZWNhdGVkIHByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHRoaXMuX2Nzc1VybHMgPSBbXTtcbiAgICB0aGlzLmFmdGVyU2hvdyA9ICgpID0+IHtcbiAgICAgIGNvbnNvbGUud2FybihcImFmdGVyU2hvdyBpcyBkZXByZWNhdGVkISFcIik7XG4gICAgfTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLSBFbmQgb2xkIGRlcHJlY2F0ZWQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEB0eXBlIHt7c3RyaW5nOiBBYnN0cmFjdFNEQ319XG4gICAgICovXG4gICAgdGhpcy5fbWl4aW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuX3RhZ05hbWUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX3RhZ05hbWUgPz8gXCJcIjtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHt7c3RyaW5nOkFic3RyYWN0U0RDfX1cbiAgICAgKi9cbiAgICB0aGlzLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtBYnN0cmFjdFNEQ31cbiAgICAgKi9cbiAgICB0aGlzLl9wYXJlbnRDb250cm9sbGVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuX29uTG9hZERvbmUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtqcXVlcnl9XG4gICAgICovXG4gICAgdGhpcy4kY29udGFpbmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5faXNNaXhpbiA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1zO1xuICB9XG5cbiAgc2V0IHBhcmFtcyhwYXJhbXMpIHtcbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCBtdXN0IGJlIGluIHt9XG4gICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgaW4gYXJndW1lbnRzIG9mXG4gICAqXG4gICAqL1xuICBfcnVuTGlmZWN5Y2xlKG1ldGhvZCwgYXJncykge1xuICAgIGlmIChhcHAuREVCVUcgJiYgIXRoaXMuX2lzTWl4aW4pIHtcbiAgICAgIGNvbnNvbGUuZGVidWcobWV0aG9kLCB0aGlzLl90YWdOYW1lKTtcbiAgICB9XG5cbiAgICBsZXQgcmV0dXJuUHJvbWlzc2VzID0gW107XG4gICAgaWYgKHRoaXMuX2lzTWl4aW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNNaXhpbiA9IHRydWU7XG4gICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gdGhpcy5fbWl4aW5zKSB7XG4gICAgICBsZXQgbWl4aW4gPSB0aGlzLl9taXhpbnNbbWl4aW5LZXldO1xuICAgICAgaWYgKHR5cGVvZiBtaXhpblttZXRob2RdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuUHJvbWlzc2VzLnB1c2gobWl4aW5bbWV0aG9kXS5hcHBseSh0aGlzLCBhcmdzKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHJldHVyblByb21pc3NlcykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTwqPnwqfVxuICAgKi9cbiAgb25Jbml0KCkge1xuICAgIGlmIChhcHAuREVCVUcgJiYgIXRoaXMuX2lzTWl4aW4pIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKSwgdGhpcy5fdGFnTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0IGF1dG9SZWRpcmVjdCh1cmwpe1xuICAgIHRoaXMuX2F1dG9SZWRpcmVjdCA9IHVybDtcbiAgfVxuXG4gIGdldCBhdXRvUmVkaXJlY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9SZWRpcmVjdDtcbiAgfVxuXG4gIGdldCBwYXJlbnRDb250cm9sbGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnRDb250cm9sbGVyO1xuICB9XG5cbiAgZ2V0IGNoaWxkQ29udHJvbGxlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICB9XG5cbiAgb25Mb2FkKCkge1xuICAgIHJldHVybiB0aGlzLl9ydW5MaWZlY3ljbGUoXCJvbkxvYWRcIiwgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHdpbGxTaG93KCkge1xuICAgIHJldHVybiB0aGlzLl9ydW5MaWZlY3ljbGUoXCJ3aWxsU2hvd1wiLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgb25SZWZyZXNoKCkge1xuICAgIHJldHVybiB0aGlzLl9ydW5MaWZlY3ljbGUoXCJvblJlZnJlc2hcIiwgYXJndW1lbnRzKTtcbiAgfVxuXG4gIG9uUmVtb3ZlKCkge1xuICAgIHRoaXMuX3J1bkxpZmVjeWNsZShcIm9uUmVtb3ZlXCIsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBub09wZW5Nb2RlbFJlcXVlc3RzKCkge1xuICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLl9tb2RlbHMubWFwKCh4KSA9PiB4Lm5vT3BlblJlcXVlc3RzKCkpKTtcbiAgfVxuXG4gIHJlbW92ZSgpIHtcbiAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMuX21vZGVscykge1xuICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICB9XG4gICAgbGV0IF9jaGlsZENvbnRyb2xsZXIgPSB0aGlzLl9jaGlsZENvbnRyb2xsZXI7XG4gICAgZm9yIChsZXQgaSBpbiBfY2hpbGRDb250cm9sbGVyKSB7XG4gICAgICBpZiAoX2NoaWxkQ29udHJvbGxlci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICBmb3IgKGxldCBjYyBvZiBfY2hpbGRDb250cm9sbGVyW2ldKSB7XG4gICAgICAgICAgaWYgKCFjYy5yZW1vdmUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5vblJlbW92ZSB8fCB0aGlzLm9uUmVtb3ZlKCkpIHtcbiAgICAgIGFsbE9mZih0aGlzKTtcbiAgICAgIGNvbnN0IGNfbmFtZSA9IHRhZ05hbWVUb0NhbWVsQ2FzZSh0aGlzLl90YWdOYW1lKTtcbiAgICAgIGlmICh0aGlzLl9wYXJlbnRDb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXJbY19uYW1lXSkge1xuICAgICAgICBsZXQgYXJyID0gdGhpcy5fcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NfbmFtZV07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFycltpXSA9PT0gdGhpcykge1xuICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy4kY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgZGVsZXRlIHRoaXM7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb250cm9sbGVyX25hbWUoKSB7XG4gICAgcmV0dXJuIHRhZ05hbWVUb1JlYWRhYmxlTmFtZSh0aGlzLl90YWdOYW1lKTtcbiAgfVxuXG4gIGFkZEV2ZW50KGV2ZW50LCBzZWxlY3RvciwgaGFuZGxlcikge1xuICAgIHRoaXMuZ2V0RXZlbnRzKCk7XG4gICAgdGhpcy5fYWxsRXZlbnRzW2V2ZW50XSA9IHRoaXMuX2FsbEV2ZW50c1tldmVudF0gfHwge307XG4gICAgdGhpcy5fYWxsRXZlbnRzW2V2ZW50XVtzZWxlY3Rvcl0gPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0RXZlbnRzKCkge1xuICAgIGlmICh0aGlzLl9hbGxFdmVudHMpIHJldHVybiB0aGlzLl9hbGxFdmVudHM7XG4gICAgbGV0IGFsbEV2ZW50cyA9IFtdO1xuICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQodGhpcy5ldmVudHMpO1xuICAgIGZvciAobGV0IG1peGluS2V5IGluIHRoaXMuX21peGlucykge1xuICAgICAgbGV0IG1peGluID0gdGhpcy5fbWl4aW5zW21peGluS2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG1peGluLmV2ZW50cykpIHtcbiAgICAgICAgYWxsRXZlbnRzID0gYWxsRXZlbnRzLmNvbmNhdChtaXhpbi5ldmVudHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAodGhpcy5fYWxsRXZlbnRzID0gXy5tZXJnZSguLi5hbGxFdmVudHMpKTtcbiAgfVxuXG4gIHBvc3QodXJsLCBhcmdzKSB7XG4gICAgcmV0dXJuIGFwcC5wb3N0KHRoaXMsIHVybCwgYXJncyk7XG4gIH1cblxuICBnZXQodXJsLCBhcmdzKSB7XG4gICAgcmV0dXJuIGFwcC5nZXQodGhpcywgdXJsLCBhcmdzKTtcbiAgfVxuXG4gIHN1Ym1pdEZvcm0oZm9ybSwgdXJsLCBtZXRob2QpIHtcbiAgICByZXR1cm4gYXBwLnN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3KHRoaXMsIGZvcm0sIHVybCwgbWV0aG9kKTtcbiAgfVxuXG4gIHNlcnZlckNhbGwobWV0aG9kZSwgYXJncykge1xuICAgIGxldCByZSA9IC9zZGNfdmlld1xcLyhbXi9dKykvaTtcbiAgICBsZXQgYXBwID0gdGhpcy5jb250ZW50VXJsLm1hdGNoKHJlKTtcbiAgICBpZiAoIWFwcCB8fCBhcHAubGVuZ3RoIDwgMikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJUbyB1c2UgdGhlIHNlcnZlckNhbGwgZnVuY3Rpb24gdGhlIGNvbnRlbnRVcmwgbXVzdCBiZSBzZXQ6IFwiICtcbiAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsbFNlcnZlcihcbiAgICAgIGFwcFsxXSxcbiAgICAgIHRoaXMuX3RhZ05hbWUsXG4gICAgICB0aGlzLnBhcnNlZENvbnRlbnRVcmwgPz8gdGhpcy5jb250ZW50VXJsLFxuICAgICAgbWV0aG9kZSxcbiAgICAgIGFyZ3MsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gICAqIEBwYXJhbSAge29iamVjdD99IG1vZGVsUXVlcnlcbiAgICogQHJldHVybnMge1NkY1F1ZXJ5U2V0fVxuICAgKi9cbiAgcXVlcnlTZXQobW9kZWxOYW1lLCBtb2RlbFF1ZXJ5ID0ge30pIHtcbiAgICBjb25zdCBuZXdRdWVyeVNldCA9IG5ldyBTZGNRdWVyeVNldChtb2RlbE5hbWUsIG1vZGVsUXVlcnkpO1xuICAgIHRoaXMuX21vZGVscy5wdXNoKG5ld1F1ZXJ5U2V0KTtcbiAgICByZXR1cm4gbmV3UXVlcnlTZXQ7XG4gIH1cblxuICBuZXdNb2RlbChtb2RlbE5hbWUsIG1vZGVsUXVlcnkgPSB7fSkge1xuICAgIGNvbnNvbGUud2FybihcIm5ld01vZGVsIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc29vbiBiZSByZW1vdmVkLiBQbGVhc2UgdXNlIHRoaXMucXVlcnlTZXQobW9kZWxOYW1lLCBtb2RlbFF1ZXJ5KVwiKTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNldChtb2RlbE5hbWUsIG1vZGVsUXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkYXB0ZXIgdG8gdGhpcy4kY29udGFpbmVyLmZpbmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRvbVNlbGVjdG9yXG4gICAqL1xuICBmaW5kKGRvbVNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuJGNvbnRhaW5lci5maW5kKGRvbVNlbGVjdG9yKTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgcmV0dXJuIGFwcC5yZWZyZXNoKHRoaXMuJGNvbnRhaW5lciwgdGhpcyk7XG4gIH1cblxuICByZWxvYWQoKSB7XG4gICAgcmV0dXJuIGFwcC5yZWxvYWRDb250cm9sbGVyKHRoaXMpO1xuICB9XG5cbiAgcmVjb25jaWxlKCR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlID0gbnVsbCkge1xuICAgIHJldHVybiBhcHAucmVjb25jaWxlKHRoaXMsICR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlKTtcbiAgfVxuXG4gIHN1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yKCRmb3JtLCBlKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9zdWJtaXRNb2RlbEZvcm0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5zdWJtaXRNb2RlbEZvcm0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gIH1cblxuICBpdGVyYXRlQWxsQ2hpbGRyZW4oKSB7XG4gICAgbGV0IF9jaGlsZENvbnRyb2xsZXIgPSB0aGlzLl9jaGlsZENvbnRyb2xsZXI7XG4gICAgbGV0IHJlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgaW4gX2NoaWxkQ29udHJvbGxlcikge1xuICAgICAgaWYgKF9jaGlsZENvbnRyb2xsZXIuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgZm9yIChsZXQgY2Mgb2YgX2NoaWxkQ29udHJvbGxlcltpXSkge1xuICAgICAgICAgIHJlcy5wdXNoKGNjKTtcbiAgICAgICAgICByZXMucHVzaCguLi5jYy5pdGVyYXRlQWxsQ2hpbGRyZW4oKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RlbCBGb3JtIEV2ZW50c1xuICAgKi9cbiAgZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSkge1xuICAgIGlmICghdGhpcy5faXNNaXhpbikge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGxldCB7bW9kZWwsIGZvcm1fbmFtZX0gPSAkZm9ybS5kYXRhKCk7XG4gICAgICBsZXQgZGF0YSA9IG1vZGVsLnN5bmNGb3JtKCRmb3JtKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBwcm9tO1xuICAgICAgICBpZiAobW9kZWwuaWQgIT09IG51bGwgJiYgbW9kZWwuaWQgPj0gMCkge1xuICAgICAgICAgIHByb20gPSBtb2RlbC5zYXZlKHtmb3JtTmFtZTogZm9ybV9uYW1lLCBkYXRhfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvbSA9IG1vZGVsLmNyZWF0ZSh7ZGF0YX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvbVxuICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIGNsZWFyRXJyb3JzSW5Gb3JtKCRmb3JtKTtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyAmJlxuICAgICAgICAgICAgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzKHJlc1swXSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2YgdGhpcy5pdGVyYXRlQWxsQ2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MgJiZcbiAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzKHJlc1swXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWNvbmNpbGUoXG4gICAgICAgICAgICAgICQoYDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4ke2RhdGEuaHRtbH08L2Rpdj5gKSxcbiAgICAgICAgICAgICAgJGZvcm0uZmluZChcIi5jb250YWluZXItZmx1aWRcIikuZmlyc3QoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yICYmXG4gICAgICAgICAgICB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yKGRhdGEpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIHRoaXMuaXRlcmF0ZUFsbENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvciAmJlxuICAgICAgICAgICAgICBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yKGRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZWplY3QoZGF0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/AbstractSDC.js\n\n}");
|
|
28
28
|
|
|
29
29
|
/***/ },
|
|
30
30
|
|
|
@@ -34,7 +34,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
34
34
|
\************************************************/
|
|
35
35
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
36
36
|
|
|
37
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Global: () => (/* binding */ Global),\n/* harmony export */ controllerFactory: () => (/* binding */ controllerFactory),\n/* harmony export */ controllerList: () => (/* binding */ controllerList),\n/* harmony export */ prepareRefreshProcess: () => (/* binding */ prepareRefreshProcess),\n/* harmony export */ resetChildren: () => (/* binding */ resetChildren),\n/* harmony export */ runControlFlowFunctions: () => (/* binding */ runControlFlowFunctions),\n/* harmony export */ runRefresh: () => (/* binding */ runRefresh),\n/* harmony export */ tagList: () => (/* binding */ tagList),\n/* harmony export */ updateEventAndTriggerOnRefresh: () => (/* binding */ updateEventAndTriggerOnRefresh)\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 _sdc_params_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n\n\n\n\n\nlet Global = [];\nlet controllerList = {};\nfunction tagList() {\n return Object.keys(controllerList);\n}\nfunction prepareMixins(superTagNameList, tagName) {\n superTagNameList = superTagNameList.concat(controllerList[tagName][1]);\n superTagNameList = superTagNameList.filter((value, index, self) => {\n return self.indexOf(value) === index;\n });\n let hasAdded = true;\n while (hasAdded) {\n hasAdded = false;\n for (let tag of superTagNameList) {\n for (let newTag of controllerList[tag][1]) {\n if (!superTagNameList.includes(newTag)) {\n superTagNameList.push(newTag);\n hasAdded = true;\n }\n }\n }\n }\n return superTagNameList;\n}\n\n/**\n * setParentController sets the parent controller as property: 'parentController'\n * to the child controller. Also, it adds the child controller to the property list:\n * 'parentController' to the parent controller\n *\n * @param {AbstractSDC} parentController - js controller instance, controller of the parent DOM of the controllers DOM\n * @param {AbstractSDC} controller - js controller instance\n * @return {AbstractSDC} - parentController\n */\nfunction setParentController(parentController, controller) {\n if (parentController) {\n let controllerName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(controller._tagName);\n if (!parentController._childController[controllerName]) {\n parentController._childController[controllerName] = [];\n }\n parentController._childController[controllerName].push(controller);\n }\n return controller._parentController = parentController;\n}\n\n/**\n * resetChildren resets all children of a controller.\n *\n * @param {AbstractSDC} parentController\n */\nfunction resetChildren(parentController) {\n parentController._childController = {};\n parentController.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const $this = $(this);\n const cController = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($this);\n if (cController === parentController) {\n setParentController(parentController, cController);\n }\n });\n}\n\n/**\n * controllerFactoryInstance it generates a controller instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * It handles the init parameter by the data values of the DOM.\n *\n * It handles the super extensions.\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactoryInstance(parentController, $element, tagName, superTagNameList) {\n let mixinControllerClass = [];\n superTagNameList = prepareMixins(superTagNameList, tagName);\n for (let superTagName of superTagNameList) {\n mixinControllerClass.push(controllerList[superTagName][0]);\n }\n let controllerClass = controllerList[tagName][0];\n let controller = new ((0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.agileAggregation)(controllerClass, ...mixinControllerClass))();\n controller._tagName = tagName;\n setParentController(parentController, controller);\n controller.$container = $element;\n (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_2__.runOnInitWithParameter)($element, controller);\n return controller;\n}\n\n/**\n * controllerFactory it either generates a controller or takes a globe instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * Remember Global controller can not have a super controller!\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactory(parentController, $element, tagName, superTagNameList) {\n if (Global.includes(tagName)) {\n let gTagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName);\n if (!window[gTagName]) {\n window[gTagName] = controllerFactoryInstance(parentController, $element, tagName, superTagNameList);\n }\n window[gTagName].$container = $element;\n return window[gTagName];\n }\n return controllerFactoryInstance(parentController, $element, tagName, superTagNameList);\n}\n\n/**\n * runControllerShow first runs onLoad and fill content for all sub\n * controller. Only if all the sub controller are loaded the willShow\n * control flow function gets called.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerShow(controller, $html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html).then(function (args) {\n args = args || true;\n if (controller.willShow) {\n let loadPromiseOrContent = controller.willShow();\n if (loadPromiseOrContent instanceof Promise) {\n return loadPromiseOrContent.then(function () {\n return args;\n });\n }\n }\n return args;\n });\n}\n\n/**\n * runControllerLoad Calls the onLoad function of the controller.\n * This function is called before the HTML is set to the page.\n * The parameter is a list of children of the tag and the registered tag.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerLoad(controller) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.loadFilesFromController)(controller).then(html => {\n if (!controller.onLoad || controller._onLoadDone) {\n return html;\n }\n controller._onLoadDone = true;\n let loadPromise = controller.onLoad(html);\n return (loadPromise || (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)()).then(() => {\n return html;\n });\n });\n}\n\n/**\n * runControlFlowFunctions runs the control flow functions:\n * 1. onLoad()\n * 2. fill content\n * 3. willShow(dom parameter)\n * 4. refresh()\n *\n * @param controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runControlFlowFunctions(controller, process) {\n const prom_controller = runControllerLoad(controller).then(function ($html) {\n return runControllerShow(controller, $html);\n }).then(() => {\n return runRefresh(controller, process);\n }).catch(function ($html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html);\n });\n if (controller.load_async) {\n return Promise.resolve();\n }\n return prom_controller;\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runRefresh(controller, process) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)(null, controller, process);\n}\nfunction getParentList(controller) {\n let controllerList = [];\n while (controller) {\n controller._isEventsSet = false;\n controllerList.unshift(controller);\n controller = controller._parentController;\n }\n return controllerList;\n}\n\n/**\n *\n * @param {Object} process - Process object containing the refresh process\n */\nfunction updateEventAndTriggerOnRefresh(process) {\n const parentList = getParentList(process.controller[0]);\n const controllerList = parentList.concat(process.controller.slice(1));\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__.setControllerEvents)(con);\n con.onRefresh(process.controller[0]);\n }\n}\nfunction prepareRefreshProcess(refreshProcess, controller) {\n let isRunningProcess = Boolean(refreshProcess);\n if (!isRunningProcess) {\n refreshProcess = {\n uuids: new Set([controller._uuid]),\n controller: [controller]\n };\n } else if (!refreshProcess.uuids.has(controller._uuid)) {\n refreshProcess.uuids.add(controller._uuid);\n refreshProcess.controller.push(controller);\n }\n return {\n isRunningProcess,\n refreshProcess\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfY29udHJvbGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUl3QjtBQU9EO0FBRWtDO0FBQ0M7QUFDdEI7QUFFN0IsSUFBSVcsTUFBTSxHQUFHLEVBQUU7QUFDZixJQUFJQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBRXZCLFNBQVNDLE9BQU9BLENBQUEsRUFBRztFQUN4QixPQUFPQyxNQUFNLENBQUNDLElBQUksQ0FBQ0gsY0FBYyxDQUFDO0FBQ3BDO0FBRUEsU0FBU0ksYUFBYUEsQ0FBQ0MsZ0JBQWdCLEVBQUVDLE9BQU8sRUFBRTtFQUNoREQsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDRSxNQUFNLENBQUNQLGNBQWMsQ0FBQ00sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEVELGdCQUFnQixHQUFHQSxnQkFBZ0IsQ0FBQ0csTUFBTSxDQUFDLENBQUNDLEtBQUssRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEtBQUs7SUFDakUsT0FBT0EsSUFBSSxDQUFDQyxPQUFPLENBQUNILEtBQUssQ0FBQyxLQUFLQyxLQUFLO0VBQ3RDLENBQUMsQ0FBQztFQUNGLElBQUlHLFFBQVEsR0FBRyxJQUFJO0VBQ25CLE9BQU9BLFFBQVEsRUFBRTtJQUNmQSxRQUFRLEdBQUcsS0FBSztJQUNoQixLQUFLLElBQUlDLEdBQUcsSUFBSVQsZ0JBQWdCLEVBQUU7TUFDaEMsS0FBSyxJQUFJVSxNQUFNLElBQUlmLGNBQWMsQ0FBQ2MsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDekMsSUFBSSxDQUFDVCxnQkFBZ0IsQ0FBQ1csUUFBUSxDQUFDRCxNQUFNLENBQUMsRUFBRTtVQUN0Q1YsZ0JBQWdCLENBQUNZLElBQUksQ0FBQ0YsTUFBTSxDQUFDO1VBQzdCRixRQUFRLEdBQUcsSUFBSTtRQUNqQjtNQUNGO0lBQ0Y7RUFDRjtFQUNBLE9BQU9SLGdCQUFnQjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTYSxtQkFBbUJBLENBQUNDLGdCQUFnQixFQUFFQyxVQUFVLEVBQUU7RUFDekQsSUFBSUQsZ0JBQWdCLEVBQUU7SUFDcEIsSUFBSUUsY0FBYyxHQUFHaEMsaUVBQWtCLENBQUMrQixVQUFVLENBQUNFLFFBQVEsQ0FBQztJQUM1RCxJQUFJLENBQUNILGdCQUFnQixDQUFDSSxnQkFBZ0IsQ0FBQ0YsY0FBYyxDQUFDLEVBQUU7TUFDdERGLGdCQUFnQixDQUFDSSxnQkFBZ0IsQ0FBQ0YsY0FBYyxDQUFDLEdBQUcsRUFBRTtJQUN4RDtJQUVBRixnQkFBZ0IsQ0FBQ0ksZ0JBQWdCLENBQUNGLGNBQWMsQ0FBQyxDQUFDSixJQUFJLENBQUNHLFVBQVUsQ0FBQztFQUNwRTtFQUVBLE9BQVFBLFVBQVUsQ0FBQ0ksaUJBQWlCLEdBQUdMLGdCQUFnQjtBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU00sYUFBYUEsQ0FBQ04sZ0JBQWdCLEVBQUU7RUFDOUNBLGdCQUFnQixDQUFDSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7RUFDdENKLGdCQUFnQixDQUFDTyxJQUFJLENBQUMsSUFBSW5DLDBEQUFnQixFQUFFLENBQUMsQ0FBQ29DLElBQUksQ0FBQyxZQUFZO0lBQzdELE1BQU1DLEtBQUssR0FBR0MsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyQixNQUFNQyxXQUFXLEdBQUd0QywyREFBYSxDQUFDb0MsS0FBSyxDQUFDO0lBQ3hDLElBQUlFLFdBQVcsS0FBS1gsZ0JBQWdCLEVBQUU7TUFDcENELG1CQUFtQixDQUFDQyxnQkFBZ0IsRUFBRVcsV0FBVyxDQUFDO0lBQ3BEO0VBQ0YsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MseUJBQXlCQSxDQUNoQ1osZ0JBQWdCLEVBQ2hCYSxRQUFRLEVBQ1IxQixPQUFPLEVBQ1BELGdCQUFnQixFQUNoQjtFQUNBLElBQUk0QixvQkFBb0IsR0FBRyxFQUFFO0VBQzdCNUIsZ0JBQWdCLEdBQUdELGFBQWEsQ0FBQ0MsZ0JBQWdCLEVBQUVDLE9BQU8sQ0FBQztFQUMzRCxLQUFLLElBQUk0QixZQUFZLElBQUk3QixnQkFBZ0IsRUFBRTtJQUN6QzRCLG9CQUFvQixDQUFDaEIsSUFBSSxDQUFDakIsY0FBYyxDQUFDa0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUQ7RUFFQSxJQUFJQyxlQUFlLEdBQUduQyxjQUFjLENBQUNNLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoRCxJQUFJYyxVQUFVLEdBQUcsS0FBSzlCLCtEQUFnQixDQUNwQzZDLGVBQWUsRUFDZixHQUFHRixvQkFDTCxDQUFDLEVBQUUsQ0FBQztFQUNKYixVQUFVLENBQUNFLFFBQVEsR0FBR2hCLE9BQU87RUFFN0JZLG1CQUFtQixDQUFDQyxnQkFBZ0IsRUFBRUMsVUFBVSxDQUFDO0VBQ2pEQSxVQUFVLENBQUNnQixVQUFVLEdBQUdKLFFBQVE7RUFDaENwQyxzRUFBc0IsQ0FBQ29DLFFBQVEsRUFBRVosVUFBVSxDQUFDO0VBRTVDLE9BQU9BLFVBQVU7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTaUIsaUJBQWlCQSxDQUMvQmxCLGdCQUFnQixFQUNoQmEsUUFBUSxFQUNSMUIsT0FBTyxFQUNQRCxnQkFBZ0IsRUFDaEI7RUFDQSxJQUFJTixNQUFNLENBQUNpQixRQUFRLENBQUNWLE9BQU8sQ0FBQyxFQUFFO0lBQzVCLElBQUlnQyxRQUFRLEdBQUdqRCxpRUFBa0IsQ0FBQ2lCLE9BQU8sQ0FBQztJQUMxQyxJQUFJLENBQUNpQyxNQUFNLENBQUNELFFBQVEsQ0FBQyxFQUFFO01BQ3JCQyxNQUFNLENBQUNELFFBQVEsQ0FBQyxHQUFHUCx5QkFBeUIsQ0FDMUNaLGdCQUFnQixFQUNoQmEsUUFBUSxFQUNSMUIsT0FBTyxFQUNQRCxnQkFDRixDQUFDO0lBQ0g7SUFFQWtDLE1BQU0sQ0FBQ0QsUUFBUSxDQUFDLENBQUNGLFVBQVUsR0FBR0osUUFBUTtJQUN0QyxPQUFPTyxNQUFNLENBQUNELFFBQVEsQ0FBQztFQUN6QjtFQUVBLE9BQU9QLHlCQUF5QixDQUM5QlosZ0JBQWdCLEVBQ2hCYSxRQUFRLEVBQ1IxQixPQUFPLEVBQ1BELGdCQUNGLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTbUMsaUJBQWlCQSxDQUFDcEIsVUFBVSxFQUFFcUIsS0FBSyxFQUFFO0VBQzVDLE9BQU85QyxzRUFBd0IsQ0FBQ3lCLFVBQVUsRUFBRXFCLEtBQUssQ0FBQyxDQUFDQyxJQUFJLENBQUMsVUFBVUMsSUFBSSxFQUFFO0lBQ3RFQSxJQUFJLEdBQUdBLElBQUksSUFBSSxJQUFJO0lBQ25CLElBQUl2QixVQUFVLENBQUN3QixRQUFRLEVBQUU7TUFDdkIsSUFBSUMsb0JBQW9CLEdBQUd6QixVQUFVLENBQUN3QixRQUFRLENBQUMsQ0FBQztNQUNoRCxJQUFJQyxvQkFBb0IsWUFBWUMsT0FBTyxFQUFFO1FBQzNDLE9BQU9ELG9CQUFvQixDQUFDSCxJQUFJLENBQUMsWUFBWTtVQUMzQyxPQUFPQyxJQUFJO1FBQ2IsQ0FBQyxDQUFDO01BQ0o7SUFDRjtJQUVBLE9BQU9BLElBQUk7RUFDYixDQUFDLENBQUM7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0ksaUJBQWlCQSxDQUFDM0IsVUFBVSxFQUFFO0VBQ3JDLE9BQU8zQixxRUFBdUIsQ0FBQzJCLFVBQVUsQ0FBQyxDQUFDc0IsSUFBSSxDQUFFTSxJQUFJLElBQUs7SUFDeEQsSUFBSSxDQUFDNUIsVUFBVSxDQUFDNkIsTUFBTSxJQUFJN0IsVUFBVSxDQUFDOEIsV0FBVyxFQUFFO01BQ2hELE9BQU9GLElBQUk7SUFDYjtJQUVBNUIsVUFBVSxDQUFDOEIsV0FBVyxHQUFHLElBQUk7SUFDN0IsSUFBSUMsV0FBVyxHQUFHL0IsVUFBVSxDQUFDNkIsTUFBTSxDQUFDRCxJQUFJLENBQUM7SUFDekMsT0FBTyxDQUFDRyxXQUFXLElBQUkvRCxrRUFBbUIsQ0FBQyxDQUFDLEVBQUVzRCxJQUFJLENBQUMsTUFBTTtNQUN2RCxPQUFPTSxJQUFJO0lBQ2IsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSSx1QkFBdUJBLENBQUNoQyxVQUFVLEVBQUVpQyxPQUFPLEVBQUU7RUFDM0QsTUFBTUMsZUFBZSxHQUFHUCxpQkFBaUIsQ0FBQzNCLFVBQVUsQ0FBQyxDQUNsRHNCLElBQUksQ0FBQyxVQUFVRCxLQUFLLEVBQUU7SUFDckIsT0FBT0QsaUJBQWlCLENBQUNwQixVQUFVLEVBQUVxQixLQUFLLENBQUM7RUFDN0MsQ0FBQyxDQUFDLENBQ0RDLElBQUksQ0FBQyxNQUFNO0lBQ1YsT0FBT2EsVUFBVSxDQUFDbkMsVUFBVSxFQUFFaUMsT0FBTyxDQUFDO0VBQ3hDLENBQUMsQ0FBQyxDQUNERyxLQUFLLENBQUMsVUFBVWYsS0FBSyxFQUFFO0lBQ3RCLE9BQU85QyxzRUFBd0IsQ0FBQ3lCLFVBQVUsRUFBRXFCLEtBQUssQ0FBQztFQUNwRCxDQUFDLENBQUM7RUFFSixJQUFJckIsVUFBVSxDQUFDcUMsVUFBVSxFQUFFO0lBQ3pCLE9BQU9YLE9BQU8sQ0FBQ1ksT0FBTyxDQUFDLENBQUM7RUFDMUI7RUFFQSxPQUFPSixlQUFlO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxVQUFVQSxDQUFDbkMsVUFBVSxFQUFFaUMsT0FBTyxFQUFFO0VBQzlDLE9BQU8zRCxxREFBTyxDQUFDLElBQUksRUFBRTBCLFVBQVUsRUFBRWlDLE9BQU8sQ0FBQztBQUMzQztBQUVBLFNBQVNNLGFBQWFBLENBQUN2QyxVQUFVLEVBQUU7RUFDakMsSUFBSXBCLGNBQWMsR0FBRyxFQUFFO0VBQ3ZCLE9BQU9vQixVQUFVLEVBQUU7SUFDakJBLFVBQVUsQ0FBQ3dDLFlBQVksR0FBRyxLQUFLO0lBQy9CNUQsY0FBYyxDQUFDNkQsT0FBTyxDQUFDekMsVUFBVSxDQUFDO0lBQ2xDQSxVQUFVLEdBQUdBLFVBQVUsQ0FBQ0ksaUJBQWlCO0VBQzNDO0VBQ0EsT0FBT3hCLGNBQWM7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTOEQsOEJBQThCQSxDQUFDVCxPQUFPLEVBQUU7RUFDdEQsTUFBTVUsVUFBVSxHQUFHSixhQUFhLENBQUNOLE9BQU8sQ0FBQ2pDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2RCxNQUFNcEIsY0FBYyxHQUFHK0QsVUFBVSxDQUFDeEQsTUFBTSxDQUFDOEMsT0FBTyxDQUFDakMsVUFBVSxDQUFDNEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXJFLEtBQUssSUFBSUMsR0FBRyxJQUFJakUsY0FBYyxFQUFFO0lBQzlCSCx1RUFBbUIsQ0FBQ29FLEdBQUcsQ0FBQztJQUN4QkEsR0FBRyxDQUFDQyxTQUFTLENBQUNiLE9BQU8sQ0FBQ2pDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN0QztBQUNGO0FBRU8sU0FBUytDLHFCQUFxQkEsQ0FBQ0MsY0FBYyxFQUFFaEQsVUFBVSxFQUFFO0VBQ2hFLElBQUlpRCxnQkFBZ0IsR0FBR0MsT0FBTyxDQUFDRixjQUFjLENBQUM7RUFFOUMsSUFBSSxDQUFDQyxnQkFBZ0IsRUFBRTtJQUNyQkQsY0FBYyxHQUFHO01BQ2ZHLEtBQUssRUFBRSxJQUFJQyxHQUFHLENBQUMsQ0FBQ3BELFVBQVUsQ0FBQ3FELEtBQUssQ0FBQyxDQUFDO01BQ2xDckQsVUFBVSxFQUFFLENBQUNBLFVBQVU7SUFDekIsQ0FBQztFQUNILENBQUMsTUFBTSxJQUFJLENBQUNnRCxjQUFjLENBQUNHLEtBQUssQ0FBQ0csR0FBRyxDQUFDdEQsVUFBVSxDQUFDcUQsS0FBSyxDQUFDLEVBQUU7SUFDdERMLGNBQWMsQ0FBQ0csS0FBSyxDQUFDSSxHQUFHLENBQUN2RCxVQUFVLENBQUNxRCxLQUFLLENBQUM7SUFDMUNMLGNBQWMsQ0FBQ2hELFVBQVUsQ0FBQ0gsSUFBSSxDQUFDRyxVQUFVLENBQUM7RUFDNUM7RUFFQSxPQUFPO0lBQUVpRCxnQkFBZ0I7SUFBRUQ7RUFBZSxDQUFDO0FBQzdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19jb250cm9sbGVyLmpzPzhhMzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgcHJvbWlzZUR1bW15RmFjdG9yeSxcbiAgdGFnTmFtZVRvQ2FtZWxDYXNlLFxuICBhZ2lsZUFnZ3JlZ2F0aW9uLFxufSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gIENPTlRST0xMRVJfQ0xBU1MsXG4gIGdldENvbnRyb2xsZXIsXG4gIGxvYWRGaWxlc0Zyb21Db250cm9sbGVyLFxuICByZWZyZXNoLFxuICBydW5Db250cm9sbGVyRmlsbENvbnRlbnQsXG59IGZyb20gXCIuL3NkY192aWV3LmpzXCI7XG5cbmltcG9ydCB7IHJ1bk9uSW5pdFdpdGhQYXJhbWV0ZXIgfSBmcm9tIFwiLi9zZGNfcGFyYW1zLmpzXCI7XG5pbXBvcnQgeyBzZXRDb250cm9sbGVyRXZlbnRzIH0gZnJvbSBcIi4vc2RjX2RvbV9ldmVudHMuanNcIjtcbmltcG9ydCB7IGFwcCB9IGZyb20gXCIuL3NkY19tYWluLmpzXCI7XG5cbmV4cG9ydCBsZXQgR2xvYmFsID0gW107XG5leHBvcnQgbGV0IGNvbnRyb2xsZXJMaXN0ID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdMaXN0KCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29udHJvbGxlckxpc3QpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTWl4aW5zKHN1cGVyVGFnTmFtZUxpc3QsIHRhZ05hbWUpIHtcbiAgc3VwZXJUYWdOYW1lTGlzdCA9IHN1cGVyVGFnTmFtZUxpc3QuY29uY2F0KGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdWzFdKTtcbiAgc3VwZXJUYWdOYW1lTGlzdCA9IHN1cGVyVGFnTmFtZUxpc3QuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IHtcbiAgICByZXR1cm4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG4gIH0pO1xuICBsZXQgaGFzQWRkZWQgPSB0cnVlO1xuICB3aGlsZSAoaGFzQWRkZWQpIHtcbiAgICBoYXNBZGRlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IHRhZyBvZiBzdXBlclRhZ05hbWVMaXN0KSB7XG4gICAgICBmb3IgKGxldCBuZXdUYWcgb2YgY29udHJvbGxlckxpc3RbdGFnXVsxXSkge1xuICAgICAgICBpZiAoIXN1cGVyVGFnTmFtZUxpc3QuaW5jbHVkZXMobmV3VGFnKSkge1xuICAgICAgICAgIHN1cGVyVGFnTmFtZUxpc3QucHVzaChuZXdUYWcpO1xuICAgICAgICAgIGhhc0FkZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc3VwZXJUYWdOYW1lTGlzdDtcbn1cblxuLyoqXG4gKiBzZXRQYXJlbnRDb250cm9sbGVyIHNldHMgdGhlIHBhcmVudCBjb250cm9sbGVyIGFzIHByb3BlcnR5OiAncGFyZW50Q29udHJvbGxlcidcbiAqIHRvIHRoZSBjaGlsZCBjb250cm9sbGVyLiBBbHNvLCBpdCBhZGRzIHRoZSBjaGlsZCBjb250cm9sbGVyIHRvIHRoZSBwcm9wZXJ0eSBsaXN0OlxuICogJ3BhcmVudENvbnRyb2xsZXInIHRvIHRoZSBwYXJlbnQgY29udHJvbGxlclxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlLCBjb250cm9sbGVyIG9mIHRoZSBwYXJlbnQgRE9NIG9mIHRoZSBjb250cm9sbGVycyBET01cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ30gLSBwYXJlbnRDb250cm9sbGVyXG4gKi9cbmZ1bmN0aW9uIHNldFBhcmVudENvbnRyb2xsZXIocGFyZW50Q29udHJvbGxlciwgY29udHJvbGxlcikge1xuICBpZiAocGFyZW50Q29udHJvbGxlcikge1xuICAgIGxldCBjb250cm9sbGVyTmFtZSA9IHRhZ05hbWVUb0NhbWVsQ2FzZShjb250cm9sbGVyLl90YWdOYW1lKTtcbiAgICBpZiAoIXBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0pIHtcbiAgICAgIHBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBwYXJlbnRDb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXJbY29udHJvbGxlck5hbWVdLnB1c2goY29udHJvbGxlcik7XG4gIH1cblxuICByZXR1cm4gKGNvbnRyb2xsZXIuX3BhcmVudENvbnRyb2xsZXIgPSBwYXJlbnRDb250cm9sbGVyKTtcbn1cblxuLyoqXG4gKiByZXNldENoaWxkcmVuIHJlc2V0cyBhbGwgY2hpbGRyZW4gb2YgYSBjb250cm9sbGVyLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0Q2hpbGRyZW4ocGFyZW50Q29udHJvbGxlcikge1xuICBwYXJlbnRDb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcbiAgcGFyZW50Q29udHJvbGxlci5maW5kKGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmVhY2goZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICBjb25zdCBjQ29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoJHRoaXMpO1xuICAgIGlmIChjQ29udHJvbGxlciA9PT0gcGFyZW50Q29udHJvbGxlcikge1xuICAgICAgc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjQ29udHJvbGxlcik7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlIGl0IGdlbmVyYXRlcyBhIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIGRlcGVuZGluZyBpZiB0aGUgY29udHJvbGxlciBpcyByZWdpc3RlcmVkIGFzIGEgZ2xvYmFsIGNvbnRyb2xsZXIuIEl0IHNldHMgdGhlXG4gKiAkY29udGFpbmVyIG9iamVjdCB0byB0aGUgalF1ZXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YWcuXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgaW5pdCBwYXJhbWV0ZXIgYnkgdGhlIGRhdGEgdmFsdWVzIG9mIHRoZSBET00uXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgc3VwZXIgZXh0ZW5zaW9ucy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gQ29udHJvbGxlciBvZiB0aGUgcGFyZW50IERPTVxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50IC0gVGhlIGN1cnJlbnQgRE9NIGpRdWVyeVxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgLSB0aGUgcmVnaXN0ZXJlZCB0YWcgbmFtZSBvZiB0aGUgY3VycmVudCBET01cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdCAtIHRhZyBuYW1lcyBvZiBzdXBlciBjb250cm9sbGVyXG4gKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ30gLSAgbmV3IENvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gY29udHJvbGxlckZhY3RvcnlJbnN0YW5jZShcbiAgcGFyZW50Q29udHJvbGxlcixcbiAgJGVsZW1lbnQsXG4gIHRhZ05hbWUsXG4gIHN1cGVyVGFnTmFtZUxpc3QsXG4pIHtcbiAgbGV0IG1peGluQ29udHJvbGxlckNsYXNzID0gW107XG4gIHN1cGVyVGFnTmFtZUxpc3QgPSBwcmVwYXJlTWl4aW5zKHN1cGVyVGFnTmFtZUxpc3QsIHRhZ05hbWUpO1xuICBmb3IgKGxldCBzdXBlclRhZ05hbWUgb2Ygc3VwZXJUYWdOYW1lTGlzdCkge1xuICAgIG1peGluQ29udHJvbGxlckNsYXNzLnB1c2goY29udHJvbGxlckxpc3Rbc3VwZXJUYWdOYW1lXVswXSk7XG4gIH1cblxuICBsZXQgY29udHJvbGxlckNsYXNzID0gY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMF07XG4gIGxldCBjb250cm9sbGVyID0gbmV3IChhZ2lsZUFnZ3JlZ2F0aW9uKFxuICAgIGNvbnRyb2xsZXJDbGFzcyxcbiAgICAuLi5taXhpbkNvbnRyb2xsZXJDbGFzcyxcbiAgKSkoKTtcbiAgY29udHJvbGxlci5fdGFnTmFtZSA9IHRhZ05hbWU7XG5cbiAgc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjb250cm9sbGVyKTtcbiAgY29udHJvbGxlci4kY29udGFpbmVyID0gJGVsZW1lbnQ7XG4gIHJ1bk9uSW5pdFdpdGhQYXJhbWV0ZXIoJGVsZW1lbnQsIGNvbnRyb2xsZXIpO1xuXG4gIHJldHVybiBjb250cm9sbGVyO1xufVxuXG4vKipcbiAqIGNvbnRyb2xsZXJGYWN0b3J5IGl0IGVpdGhlciBnZW5lcmF0ZXMgYSBjb250cm9sbGVyIG9yIHRha2VzIGEgZ2xvYmUgaW5zdGFuY2VcbiAqIGRlcGVuZGluZyBpZiB0aGUgY29udHJvbGxlciBpcyByZWdpc3RlcmVkIGFzIGEgZ2xvYmFsIGNvbnRyb2xsZXIuIEl0IHNldHMgdGhlXG4gKiAkY29udGFpbmVyIG9iamVjdCB0byB0aGUgalF1ZXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YWcuXG4gKlxuICogUmVtZW1iZXIgR2xvYmFsIGNvbnRyb2xsZXIgY2FuIG5vdCBoYXZlIGEgc3VwZXIgY29udHJvbGxlciFcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gQ29udHJvbGxlciBvZiB0aGUgcGFyZW50IERPTVxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50IC0gVGhlIGN1cnJlbnQgRE9NIGpRdWVyeVxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgLSB0aGUgcmVnaXN0ZXJlZCB0YWcgbmFtZSBvZiB0aGUgY3VycmVudCBET01cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdCAtIHRhZyBuYW1lcyBvZiBzdXBlciBjb250cm9sbGVyXG4gKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ30gLSAgbmV3IENvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnRyb2xsZXJGYWN0b3J5KFxuICBwYXJlbnRDb250cm9sbGVyLFxuICAkZWxlbWVudCxcbiAgdGFnTmFtZSxcbiAgc3VwZXJUYWdOYW1lTGlzdCxcbikge1xuICBpZiAoR2xvYmFsLmluY2x1ZGVzKHRhZ05hbWUpKSB7XG4gICAgbGV0IGdUYWdOYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKHRhZ05hbWUpO1xuICAgIGlmICghd2luZG93W2dUYWdOYW1lXSkge1xuICAgICAgd2luZG93W2dUYWdOYW1lXSA9IGNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UoXG4gICAgICAgIHBhcmVudENvbnRyb2xsZXIsXG4gICAgICAgICRlbGVtZW50LFxuICAgICAgICB0YWdOYW1lLFxuICAgICAgICBzdXBlclRhZ05hbWVMaXN0LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB3aW5kb3dbZ1RhZ05hbWVdLiRjb250YWluZXIgPSAkZWxlbWVudDtcbiAgICByZXR1cm4gd2luZG93W2dUYWdOYW1lXTtcbiAgfVxuXG4gIHJldHVybiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlKFxuICAgIHBhcmVudENvbnRyb2xsZXIsXG4gICAgJGVsZW1lbnQsXG4gICAgdGFnTmFtZSxcbiAgICBzdXBlclRhZ05hbWVMaXN0LFxuICApO1xufVxuXG4vKipcbiAqIHJ1bkNvbnRyb2xsZXJTaG93IGZpcnN0IHJ1bnMgb25Mb2FkIGFuZCBmaWxsIGNvbnRlbnQgZm9yIGFsbCBzdWJcbiAqIGNvbnRyb2xsZXIuIE9ubHkgaWYgYWxsIHRoZSBzdWIgY29udHJvbGxlciBhcmUgbG9hZGVkIHRoZSB3aWxsU2hvd1xuICogY29udHJvbCBmbG93IGZ1bmN0aW9uIGdldHMgY2FsbGVkLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGh0bWwgLSBqUXVlcnkgbG9hZGVkIGNvbnRlbnRcbiAqIEByZXR1cm4ge1Byb21pc2U8Kj59IC0gcmV0dXJuIG9mIHRoZSBvbkxvYWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcnVuQ29udHJvbGxlclNob3coY29udHJvbGxlciwgJGh0bWwpIHtcbiAgcmV0dXJuIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudChjb250cm9sbGVyLCAkaHRtbCkudGhlbihmdW5jdGlvbiAoYXJncykge1xuICAgIGFyZ3MgPSBhcmdzIHx8IHRydWU7XG4gICAgaWYgKGNvbnRyb2xsZXIud2lsbFNob3cpIHtcbiAgICAgIGxldCBsb2FkUHJvbWlzZU9yQ29udGVudCA9IGNvbnRyb2xsZXIud2lsbFNob3coKTtcbiAgICAgIGlmIChsb2FkUHJvbWlzZU9yQ29udGVudCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIGxvYWRQcm9taXNlT3JDb250ZW50LnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBhcmdzO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJncztcbiAgfSk7XG59XG5cbi8qKlxuICogcnVuQ29udHJvbGxlckxvYWQgQ2FsbHMgdGhlIG9uTG9hZCBmdW5jdGlvbiBvZiB0aGUgY29udHJvbGxlci5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSB0aGUgSFRNTCBpcyBzZXQgdG8gdGhlIHBhZ2UuXG4gKiBUaGUgcGFyYW1ldGVyIGlzIGEgbGlzdCBvZiBjaGlsZHJlbiBvZiB0aGUgdGFnIGFuZCB0aGUgcmVnaXN0ZXJlZCB0YWcuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEByZXR1cm4ge1Byb21pc2U8Kj59IC0gcmV0dXJuIG9mIHRoZSBvbkxvYWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcnVuQ29udHJvbGxlckxvYWQoY29udHJvbGxlcikge1xuICByZXR1cm4gbG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIoY29udHJvbGxlcikudGhlbigoaHRtbCkgPT4ge1xuICAgIGlmICghY29udHJvbGxlci5vbkxvYWQgfHwgY29udHJvbGxlci5fb25Mb2FkRG9uZSkge1xuICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfVxuXG4gICAgY29udHJvbGxlci5fb25Mb2FkRG9uZSA9IHRydWU7XG4gICAgbGV0IGxvYWRQcm9taXNlID0gY29udHJvbGxlci5vbkxvYWQoaHRtbCk7XG4gICAgcmV0dXJuIChsb2FkUHJvbWlzZSB8fCBwcm9taXNlRHVtbXlGYWN0b3J5KCkpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zIHJ1bnMgdGhlIGNvbnRyb2wgZmxvdyBmdW5jdGlvbnM6XG4gKiAxLiBvbkxvYWQoKVxuICogMi4gZmlsbCBjb250ZW50XG4gKiAzLiB3aWxsU2hvdyhkb20gcGFyYW1ldGVyKVxuICogNC4gcmVmcmVzaCgpXG4gKlxuICogQHBhcmFtIGNvbnRyb2xsZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyhjb250cm9sbGVyLCBwcm9jZXNzKSB7XG4gIGNvbnN0IHByb21fY29udHJvbGxlciA9IHJ1bkNvbnRyb2xsZXJMb2FkKGNvbnRyb2xsZXIpXG4gICAgLnRoZW4oZnVuY3Rpb24gKCRodG1sKSB7XG4gICAgICByZXR1cm4gcnVuQ29udHJvbGxlclNob3coY29udHJvbGxlciwgJGh0bWwpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHJ1blJlZnJlc2goY29udHJvbGxlciwgcHJvY2Vzcyk7XG4gICAgfSlcbiAgICAuY2F0Y2goZnVuY3Rpb24gKCRodG1sKSB7XG4gICAgICByZXR1cm4gcnVuQ29udHJvbGxlckZpbGxDb250ZW50KGNvbnRyb2xsZXIsICRodG1sKTtcbiAgICB9KTtcblxuICBpZiAoY29udHJvbGxlci5sb2FkX2FzeW5jKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcmV0dXJuIHByb21fY29udHJvbGxlcjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blJlZnJlc2goY29udHJvbGxlciwgcHJvY2Vzcykge1xuICByZXR1cm4gcmVmcmVzaChudWxsLCBjb250cm9sbGVyLCBwcm9jZXNzKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50TGlzdChjb250cm9sbGVyKSB7XG4gIGxldCBjb250cm9sbGVyTGlzdCA9IFtdO1xuICB3aGlsZSAoY29udHJvbGxlcikge1xuICAgIGNvbnRyb2xsZXIuX2lzRXZlbnRzU2V0ID0gZmFsc2U7XG4gICAgY29udHJvbGxlckxpc3QudW5zaGlmdChjb250cm9sbGVyKTtcbiAgICBjb250cm9sbGVyID0gY29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlcjtcbiAgfVxuICByZXR1cm4gY29udHJvbGxlckxpc3Q7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVFdmVudEFuZFRyaWdnZXJPblJlZnJlc2gocHJvY2Vzcykge1xuICBjb25zdCBwYXJlbnRMaXN0ID0gZ2V0UGFyZW50TGlzdChwcm9jZXNzLmNvbnRyb2xsZXJbMF0pO1xuICBjb25zdCBjb250cm9sbGVyTGlzdCA9IHBhcmVudExpc3QuY29uY2F0KHByb2Nlc3MuY29udHJvbGxlci5zbGljZSgxKSk7XG5cbiAgZm9yIChsZXQgY29uIG9mIGNvbnRyb2xsZXJMaXN0KSB7XG4gICAgc2V0Q29udHJvbGxlckV2ZW50cyhjb24pO1xuICAgIGNvbi5vblJlZnJlc2gocHJvY2Vzcy5jb250cm9sbGVyWzBdKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVJlZnJlc2hQcm9jZXNzKHJlZnJlc2hQcm9jZXNzLCBjb250cm9sbGVyKSB7XG4gIGxldCBpc1J1bm5pbmdQcm9jZXNzID0gQm9vbGVhbihyZWZyZXNoUHJvY2Vzcyk7XG5cbiAgaWYgKCFpc1J1bm5pbmdQcm9jZXNzKSB7XG4gICAgcmVmcmVzaFByb2Nlc3MgPSB7XG4gICAgICB1dWlkczogbmV3IFNldChbY29udHJvbGxlci5fdXVpZF0pLFxuICAgICAgY29udHJvbGxlcjogW2NvbnRyb2xsZXJdLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoIXJlZnJlc2hQcm9jZXNzLnV1aWRzLmhhcyhjb250cm9sbGVyLl91dWlkKSkge1xuICAgIHJlZnJlc2hQcm9jZXNzLnV1aWRzLmFkZChjb250cm9sbGVyLl91dWlkKTtcbiAgICByZWZyZXNoUHJvY2Vzcy5jb250cm9sbGVyLnB1c2goY29udHJvbGxlcik7XG4gIH1cblxuICByZXR1cm4geyBpc1J1bm5pbmdQcm9jZXNzLCByZWZyZXNoUHJvY2VzcyB9O1xufVxuIl0sIm5hbWVzIjpbInByb21pc2VEdW1teUZhY3RvcnkiLCJ0YWdOYW1lVG9DYW1lbENhc2UiLCJhZ2lsZUFnZ3JlZ2F0aW9uIiwiQ09OVFJPTExFUl9DTEFTUyIsImdldENvbnRyb2xsZXIiLCJsb2FkRmlsZXNGcm9tQ29udHJvbGxlciIsInJlZnJlc2giLCJydW5Db250cm9sbGVyRmlsbENvbnRlbnQiLCJydW5PbkluaXRXaXRoUGFyYW1ldGVyIiwic2V0Q29udHJvbGxlckV2ZW50cyIsImFwcCIsIkdsb2JhbCIsImNvbnRyb2xsZXJMaXN0IiwidGFnTGlzdCIsIk9iamVjdCIsImtleXMiLCJwcmVwYXJlTWl4aW5zIiwic3VwZXJUYWdOYW1lTGlzdCIsInRhZ05hbWUiLCJjb25jYXQiLCJmaWx0ZXIiLCJ2YWx1ZSIsImluZGV4Iiwic2VsZiIsImluZGV4T2YiLCJoYXNBZGRlZCIsInRhZyIsIm5ld1RhZyIsImluY2x1ZGVzIiwicHVzaCIsInNldFBhcmVudENvbnRyb2xsZXIiLCJwYXJlbnRDb250cm9sbGVyIiwiY29udHJvbGxlciIsImNvbnRyb2xsZXJOYW1lIiwiX3RhZ05hbWUiLCJfY2hpbGRDb250cm9sbGVyIiwiX3BhcmVudENvbnRyb2xsZXIiLCJyZXNldENoaWxkcmVuIiwiZmluZCIsImVhY2giLCIkdGhpcyIsIiQiLCJjQ29udHJvbGxlciIsImNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UiLCIkZWxlbWVudCIsIm1peGluQ29udHJvbGxlckNsYXNzIiwic3VwZXJUYWdOYW1lIiwiY29udHJvbGxlckNsYXNzIiwiJGNvbnRhaW5lciIsImNvbnRyb2xsZXJGYWN0b3J5IiwiZ1RhZ05hbWUiLCJ3aW5kb3ciLCJydW5Db250cm9sbGVyU2hvdyIsIiRodG1sIiwidGhlbiIsImFyZ3MiLCJ3aWxsU2hvdyIsImxvYWRQcm9taXNlT3JDb250ZW50IiwiUHJvbWlzZSIsInJ1bkNvbnRyb2xsZXJMb2FkIiwiaHRtbCIsIm9uTG9hZCIsIl9vbkxvYWREb25lIiwibG9hZFByb21pc2UiLCJydW5Db250cm9sRmxvd0Z1bmN0aW9ucyIsInByb2Nlc3MiLCJwcm9tX2NvbnRyb2xsZXIiLCJydW5SZWZyZXNoIiwiY2F0Y2giLCJsb2FkX2FzeW5jIiwicmVzb2x2ZSIsImdldFBhcmVudExpc3QiLCJfaXNFdmVudHNTZXQiLCJ1bnNoaWZ0IiwidXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoIiwicGFyZW50TGlzdCIsInNsaWNlIiwiY29uIiwib25SZWZyZXNoIiwicHJlcGFyZVJlZnJlc2hQcm9jZXNzIiwicmVmcmVzaFByb2Nlc3MiLCJpc1J1bm5pbmdQcm9jZXNzIiwiQm9vbGVhbiIsInV1aWRzIiwiU2V0IiwiX3V1aWQiLCJoYXMiLCJhZGQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_controller.js\n\n}");
|
|
37
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Global: () => (/* binding */ Global),\n/* harmony export */ controllerFactory: () => (/* binding */ controllerFactory),\n/* harmony export */ controllerList: () => (/* binding */ controllerList),\n/* harmony export */ prepareRefreshProcess: () => (/* binding */ prepareRefreshProcess),\n/* harmony export */ resetChildren: () => (/* binding */ resetChildren),\n/* harmony export */ runControlFlowFunctions: () => (/* binding */ runControlFlowFunctions),\n/* harmony export */ runRefresh: () => (/* binding */ runRefresh),\n/* harmony export */ tagList: () => (/* binding */ tagList),\n/* harmony export */ updateEventAndTriggerOnRefresh: () => (/* binding */ updateEventAndTriggerOnRefresh)\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 _sdc_params_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n\n\n\n\n\n\n\nlet Global = [];\nlet controllerList = {};\n\nfunction tagList() {\n return Object.keys(controllerList);\n}\n\nfunction prepareMixins(superTagNameList, tagName) {\n superTagNameList = superTagNameList.concat(controllerList[tagName][1]);\n superTagNameList = superTagNameList.filter((value, index, self) => {\n return self.indexOf(value) === index;\n });\n let hasAdded = true;\n while (hasAdded) {\n hasAdded = false;\n for (let tag of superTagNameList) {\n for (let newTag of controllerList[tag][1]) {\n if (!superTagNameList.includes(newTag)) {\n superTagNameList.push(newTag);\n hasAdded = true;\n }\n }\n }\n }\n return superTagNameList;\n}\n\n/**\n * setParentController sets the parent controller as property: 'parentController'\n * to the child controller. Also, it adds the child controller to the property list:\n * 'parentController' to the parent controller\n *\n * @param {AbstractSDC} parentController - js controller instance, controller of the parent DOM of the controllers DOM\n * @param {AbstractSDC} controller - js controller instance\n * @return {AbstractSDC} - parentController\n */\nfunction setParentController(parentController, controller) {\n if (parentController) {\n let controllerName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(controller._tagName);\n if (!parentController._childController[controllerName]) {\n parentController._childController[controllerName] = [];\n }\n\n parentController._childController[controllerName].push(controller);\n }\n\n return (controller._parentController = parentController);\n}\n\n/**\n * resetChildren resets all children of a controller.\n *\n * @param {AbstractSDC} parentController\n */\nfunction resetChildren(parentController) {\n parentController._childController = {};\n parentController.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const $this = $(this);\n const cController = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($this);\n if (cController === parentController) {\n setParentController(parentController, cController);\n }\n });\n}\n\n/**\n * controllerFactoryInstance it generates a controller instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * It handles the init parameter by the data values of the DOM.\n *\n * It handles the super extensions.\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactoryInstance(\n parentController,\n $element,\n tagName,\n superTagNameList,\n) {\n let mixinControllerClass = [];\n superTagNameList = prepareMixins(superTagNameList, tagName);\n for (let superTagName of superTagNameList) {\n mixinControllerClass.push(controllerList[superTagName][0]);\n }\n\n let controllerClass = controllerList[tagName][0];\n let controller = new ((0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.agileAggregation)(\n controllerClass,\n ...mixinControllerClass,\n ))();\n controller._tagName = tagName;\n\n setParentController(parentController, controller);\n controller.$container = $element;\n (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_2__.runOnInitWithParameter)($element, controller);\n\n return controller;\n}\n\n/**\n * controllerFactory it either generates a controller or takes a globe instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * Remember Global controller can not have a super controller!\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactory(\n parentController,\n $element,\n tagName,\n superTagNameList,\n) {\n if (Global.includes(tagName)) {\n let gTagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName);\n if (!window[gTagName]) {\n window[gTagName] = controllerFactoryInstance(\n parentController,\n $element,\n tagName,\n superTagNameList,\n );\n }\n\n window[gTagName].$container = $element;\n return window[gTagName];\n }\n\n return controllerFactoryInstance(\n parentController,\n $element,\n tagName,\n superTagNameList,\n );\n}\n\n/**\n * runControllerShow first runs onLoad and fill content for all sub\n * controller. Only if all the sub controller are loaded the willShow\n * control flow function gets called.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerShow(controller, $html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html).then(function (args) {\n args = args || true;\n if (controller.willShow) {\n let loadPromiseOrContent = controller.willShow();\n if (loadPromiseOrContent instanceof Promise) {\n return loadPromiseOrContent.then(function () {\n return args;\n });\n }\n }\n\n return args;\n });\n}\n\n/**\n * runControllerLoad Calls the onLoad function of the controller.\n * This function is called before the HTML is set to the page.\n * The parameter is a list of children of the tag and the registered tag.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerLoad(controller) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.loadFilesFromController)(controller).then((html) => {\n if (!controller.onLoad || controller._onLoadDone) {\n return html;\n }\n\n controller._onLoadDone = true;\n let loadPromise = controller.onLoad(html);\n return (loadPromise || (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)()).then(() => {\n return html;\n });\n });\n}\n\n/**\n * runControlFlowFunctions runs the control flow functions:\n * 1. onLoad()\n * 2. fill content\n * 3. willShow(dom parameter)\n * 4. refresh()\n *\n * @param controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runControlFlowFunctions(controller, process) {\n const prom_controller = runControllerLoad(controller)\n .then(function ($html) {\n return runControllerShow(controller, $html);\n })\n .then(() => {\n return runRefresh(controller, process);\n })\n .catch(function ($html) {\n if (typeof $html === 'string' || $html instanceof $) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html);\n }\n throw $html;\n });\n\n if (controller.load_async) {\n return Promise.resolve();\n }\n\n return prom_controller;\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runRefresh(controller, process) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)(null, controller, process);\n}\n\nfunction getParentList(controller) {\n let controllerList = [];\n while (controller) {\n controller._isEventsSet = false;\n controllerList.unshift(controller);\n controller = controller._parentController;\n }\n return controllerList;\n}\n\n/**\n *\n * @param {Object} process - Process object containing the refresh process\n */\nfunction updateEventAndTriggerOnRefresh(process) {\n const parentList = getParentList(process.controller[0]);\n const controllerList = parentList.concat(process.controller.slice(1));\n\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__.setControllerEvents)(con);\n con.onRefresh(process.controller[0]);\n }\n}\n\nfunction prepareRefreshProcess(refreshProcess, controller) {\n let isRunningProcess = Boolean(refreshProcess);\n\n if (!isRunningProcess) {\n refreshProcess = {\n uuids: new Set([controller._uuid]),\n controller: [controller],\n };\n } else if (!refreshProcess.uuids.has(controller._uuid)) {\n refreshProcess.uuids.add(controller._uuid);\n refreshProcess.controller.push(controller);\n }\n\n return { isRunningProcess, refreshProcess };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfY29udHJvbGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUl3QjtBQU9EOztBQUVrQztBQUNDO0FBQ3RCOztBQUU3QjtBQUNBOztBQUVBO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxhQUFhO0FBQ3hCLFlBQVksYUFBYTtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsaUVBQWtCO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ087QUFDUDtBQUNBLDRCQUE0QiwwREFBZ0IsQ0FBQztBQUM3QztBQUNBLHdCQUF3QiwyREFBYTtBQUNyQztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxlQUFlO0FBQzFCLFlBQVksYUFBYTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsK0RBQWdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFLHNFQUFzQjs7QUFFeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsZUFBZTtBQUMxQixZQUFZLGFBQWE7QUFDekI7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixpRUFBa0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLFFBQVE7QUFDbkIsWUFBWSxZQUFZO0FBQ3hCO0FBQ0E7QUFDQSxTQUFTLHNFQUF3QjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFlBQVksWUFBWTtBQUN4QjtBQUNBO0FBQ0EsU0FBUyxxRUFBdUI7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsa0VBQW1CO0FBQzlDO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsZUFBZSxzRUFBd0I7QUFDdkM7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLFFBQVE7QUFDbkI7QUFDTztBQUNQLFNBQVMscURBQU87QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLHVFQUFtQjtBQUN2QjtBQUNBO0FBQ0E7O0FBRU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX2NvbnRyb2xsZXIuanM/NDM4MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBwcm9taXNlRHVtbXlGYWN0b3J5LFxuICB0YWdOYW1lVG9DYW1lbENhc2UsXG4gIGFnaWxlQWdncmVnYXRpb24sXG59IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuaW1wb3J0IHtcbiAgQ09OVFJPTExFUl9DTEFTUyxcbiAgZ2V0Q29udHJvbGxlcixcbiAgbG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIsXG4gIHJlZnJlc2gsXG4gIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudCxcbn0gZnJvbSBcIi4vc2RjX3ZpZXcuanNcIjtcblxuaW1wb3J0IHsgcnVuT25Jbml0V2l0aFBhcmFtZXRlciB9IGZyb20gXCIuL3NkY19wYXJhbXMuanNcIjtcbmltcG9ydCB7IHNldENvbnRyb2xsZXJFdmVudHMgfSBmcm9tIFwiLi9zZGNfZG9tX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHsgYXBwIH0gZnJvbSBcIi4vc2RjX21haW4uanNcIjtcblxuZXhwb3J0IGxldCBHbG9iYWwgPSBbXTtcbmV4cG9ydCBsZXQgY29udHJvbGxlckxpc3QgPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRhZ0xpc3QoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhjb250cm9sbGVyTGlzdCk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVNaXhpbnMoc3VwZXJUYWdOYW1lTGlzdCwgdGFnTmFtZSkge1xuICBzdXBlclRhZ05hbWVMaXN0ID0gc3VwZXJUYWdOYW1lTGlzdC5jb25jYXQoY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMV0pO1xuICBzdXBlclRhZ05hbWVMaXN0ID0gc3VwZXJUYWdOYW1lTGlzdC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgc2VsZikgPT4ge1xuICAgIHJldHVybiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleDtcbiAgfSk7XG4gIGxldCBoYXNBZGRlZCA9IHRydWU7XG4gIHdoaWxlIChoYXNBZGRlZCkge1xuICAgIGhhc0FkZGVkID0gZmFsc2U7XG4gICAgZm9yIChsZXQgdGFnIG9mIHN1cGVyVGFnTmFtZUxpc3QpIHtcbiAgICAgIGZvciAobGV0IG5ld1RhZyBvZiBjb250cm9sbGVyTGlzdFt0YWddWzFdKSB7XG4gICAgICAgIGlmICghc3VwZXJUYWdOYW1lTGlzdC5pbmNsdWRlcyhuZXdUYWcpKSB7XG4gICAgICAgICAgc3VwZXJUYWdOYW1lTGlzdC5wdXNoKG5ld1RhZyk7XG4gICAgICAgICAgaGFzQWRkZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzdXBlclRhZ05hbWVMaXN0O1xufVxuXG4vKipcbiAqIHNldFBhcmVudENvbnRyb2xsZXIgc2V0cyB0aGUgcGFyZW50IGNvbnRyb2xsZXIgYXMgcHJvcGVydHk6ICdwYXJlbnRDb250cm9sbGVyJ1xuICogdG8gdGhlIGNoaWxkIGNvbnRyb2xsZXIuIEFsc28sIGl0IGFkZHMgdGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8gdGhlIHByb3BlcnR5IGxpc3Q6XG4gKiAncGFyZW50Q29udHJvbGxlcicgdG8gdGhlIHBhcmVudCBjb250cm9sbGVyXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2UsIGNvbnRyb2xsZXIgb2YgdGhlIHBhcmVudCBET00gb2YgdGhlIGNvbnRyb2xsZXJzIERPTVxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0Fic3RyYWN0U0RDfSAtIHBhcmVudENvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjb250cm9sbGVyKSB7XG4gIGlmIChwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgbGV0IGNvbnRyb2xsZXJOYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKGNvbnRyb2xsZXIuX3RhZ05hbWUpO1xuICAgIGlmICghcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NvbnRyb2xsZXJOYW1lXSkge1xuICAgICAgcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NvbnRyb2xsZXJOYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIHBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0ucHVzaChjb250cm9sbGVyKTtcbiAgfVxuXG4gIHJldHVybiAoY29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlciA9IHBhcmVudENvbnRyb2xsZXIpO1xufVxuXG4vKipcbiAqIHJlc2V0Q2hpbGRyZW4gcmVzZXRzIGFsbCBjaGlsZHJlbiBvZiBhIGNvbnRyb2xsZXIuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDaGlsZHJlbihwYXJlbnRDb250cm9sbGVyKSB7XG4gIHBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlciA9IHt9O1xuICBwYXJlbnRDb250cm9sbGVyLmZpbmQoYC4ke0NPTlRST0xMRVJfQ0xBU1N9YCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgIGNvbnN0IGNDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkdGhpcyk7XG4gICAgaWYgKGNDb250cm9sbGVyID09PSBwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgICBzZXRQYXJlbnRDb250cm9sbGVyKHBhcmVudENvbnRyb2xsZXIsIGNDb250cm9sbGVyKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIGNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UgaXQgZ2VuZXJhdGVzIGEgY29udHJvbGxlciBpbnN0YW5jZVxuICogZGVwZW5kaW5nIGlmIHRoZSBjb250cm9sbGVyIGlzIHJlZ2lzdGVyZWQgYXMgYSBnbG9iYWwgY29udHJvbGxlci4gSXQgc2V0cyB0aGVcbiAqICRjb250YWluZXIgb2JqZWN0IHRvIHRoZSBqUXVlcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRhZy5cbiAqXG4gKiBJdCBoYW5kbGVzIHRoZSBpbml0IHBhcmFtZXRlciBieSB0aGUgZGF0YSB2YWx1ZXMgb2YgdGhlIERPTS5cbiAqXG4gKiBJdCBoYW5kbGVzIHRoZSBzdXBlciBleHRlbnNpb25zLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBDb250cm9sbGVyIG9mIHRoZSBwYXJlbnQgRE9NXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1lbnQgLSBUaGUgY3VycmVudCBET00galF1ZXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAtIHRoZSByZWdpc3RlcmVkIHRhZyBuYW1lIG9mIHRoZSBjdXJyZW50IERPTVxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBzdXBlclRhZ05hbWVMaXN0IC0gdGFnIG5hbWVzIG9mIHN1cGVyIGNvbnRyb2xsZXJcbiAqIEByZXR1cm4ge0Fic3RyYWN0U0RDfSAtICBuZXcgQ29udHJvbGxlclxuICovXG5mdW5jdGlvbiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlKFxuICBwYXJlbnRDb250cm9sbGVyLFxuICAkZWxlbWVudCxcbiAgdGFnTmFtZSxcbiAgc3VwZXJUYWdOYW1lTGlzdCxcbikge1xuICBsZXQgbWl4aW5Db250cm9sbGVyQ2xhc3MgPSBbXTtcbiAgc3VwZXJUYWdOYW1lTGlzdCA9IHByZXBhcmVNaXhpbnMoc3VwZXJUYWdOYW1lTGlzdCwgdGFnTmFtZSk7XG4gIGZvciAobGV0IHN1cGVyVGFnTmFtZSBvZiBzdXBlclRhZ05hbWVMaXN0KSB7XG4gICAgbWl4aW5Db250cm9sbGVyQ2xhc3MucHVzaChjb250cm9sbGVyTGlzdFtzdXBlclRhZ05hbWVdWzBdKTtcbiAgfVxuXG4gIGxldCBjb250cm9sbGVyQ2xhc3MgPSBjb250cm9sbGVyTGlzdFt0YWdOYW1lXVswXTtcbiAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgKGFnaWxlQWdncmVnYXRpb24oXG4gICAgY29udHJvbGxlckNsYXNzLFxuICAgIC4uLm1peGluQ29udHJvbGxlckNsYXNzLFxuICApKSgpO1xuICBjb250cm9sbGVyLl90YWdOYW1lID0gdGFnTmFtZTtcblxuICBzZXRQYXJlbnRDb250cm9sbGVyKHBhcmVudENvbnRyb2xsZXIsIGNvbnRyb2xsZXIpO1xuICBjb250cm9sbGVyLiRjb250YWluZXIgPSAkZWxlbWVudDtcbiAgcnVuT25Jbml0V2l0aFBhcmFtZXRlcigkZWxlbWVudCwgY29udHJvbGxlcik7XG5cbiAgcmV0dXJuIGNvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogY29udHJvbGxlckZhY3RvcnkgaXQgZWl0aGVyIGdlbmVyYXRlcyBhIGNvbnRyb2xsZXIgb3IgdGFrZXMgYSBnbG9iZSBpbnN0YW5jZVxuICogZGVwZW5kaW5nIGlmIHRoZSBjb250cm9sbGVyIGlzIHJlZ2lzdGVyZWQgYXMgYSBnbG9iYWwgY29udHJvbGxlci4gSXQgc2V0cyB0aGVcbiAqICRjb250YWluZXIgb2JqZWN0IHRvIHRoZSBqUXVlcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRhZy5cbiAqXG4gKiBSZW1lbWJlciBHbG9iYWwgY29udHJvbGxlciBjYW4gbm90IGhhdmUgYSBzdXBlciBjb250cm9sbGVyIVxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBDb250cm9sbGVyIG9mIHRoZSBwYXJlbnQgRE9NXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1lbnQgLSBUaGUgY3VycmVudCBET00galF1ZXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAtIHRoZSByZWdpc3RlcmVkIHRhZyBuYW1lIG9mIHRoZSBjdXJyZW50IERPTVxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBzdXBlclRhZ05hbWVMaXN0IC0gdGFnIG5hbWVzIG9mIHN1cGVyIGNvbnRyb2xsZXJcbiAqIEByZXR1cm4ge0Fic3RyYWN0U0RDfSAtICBuZXcgQ29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udHJvbGxlckZhY3RvcnkoXG4gIHBhcmVudENvbnRyb2xsZXIsXG4gICRlbGVtZW50LFxuICB0YWdOYW1lLFxuICBzdXBlclRhZ05hbWVMaXN0LFxuKSB7XG4gIGlmIChHbG9iYWwuaW5jbHVkZXModGFnTmFtZSkpIHtcbiAgICBsZXQgZ1RhZ05hbWUgPSB0YWdOYW1lVG9DYW1lbENhc2UodGFnTmFtZSk7XG4gICAgaWYgKCF3aW5kb3dbZ1RhZ05hbWVdKSB7XG4gICAgICB3aW5kb3dbZ1RhZ05hbWVdID0gY29udHJvbGxlckZhY3RvcnlJbnN0YW5jZShcbiAgICAgICAgcGFyZW50Q29udHJvbGxlcixcbiAgICAgICAgJGVsZW1lbnQsXG4gICAgICAgIHRhZ05hbWUsXG4gICAgICAgIHN1cGVyVGFnTmFtZUxpc3QsXG4gICAgICApO1xuICAgIH1cblxuICAgIHdpbmRvd1tnVGFnTmFtZV0uJGNvbnRhaW5lciA9ICRlbGVtZW50O1xuICAgIHJldHVybiB3aW5kb3dbZ1RhZ05hbWVdO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UoXG4gICAgcGFyZW50Q29udHJvbGxlcixcbiAgICAkZWxlbWVudCxcbiAgICB0YWdOYW1lLFxuICAgIHN1cGVyVGFnTmFtZUxpc3QsXG4gICk7XG59XG5cbi8qKlxuICogcnVuQ29udHJvbGxlclNob3cgZmlyc3QgcnVucyBvbkxvYWQgYW5kIGZpbGwgY29udGVudCBmb3IgYWxsIHN1YlxuICogY29udHJvbGxlci4gT25seSBpZiBhbGwgdGhlIHN1YiBjb250cm9sbGVyIGFyZSBsb2FkZWQgdGhlIHdpbGxTaG93XG4gKiBjb250cm9sIGZsb3cgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkaHRtbCAtIGpRdWVyeSBsb2FkZWQgY29udGVudFxuICogQHJldHVybiB7UHJvbWlzZTwqPn0gLSByZXR1cm4gb2YgdGhlIG9uTG9hZCBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBydW5Db250cm9sbGVyU2hvdyhjb250cm9sbGVyLCAkaHRtbCkge1xuICByZXR1cm4gcnVuQ29udHJvbGxlckZpbGxDb250ZW50KGNvbnRyb2xsZXIsICRodG1sKS50aGVuKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgYXJncyA9IGFyZ3MgfHwgdHJ1ZTtcbiAgICBpZiAoY29udHJvbGxlci53aWxsU2hvdykge1xuICAgICAgbGV0IGxvYWRQcm9taXNlT3JDb250ZW50ID0gY29udHJvbGxlci53aWxsU2hvdygpO1xuICAgICAgaWYgKGxvYWRQcm9taXNlT3JDb250ZW50IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gbG9hZFByb21pc2VPckNvbnRlbnQudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcmdzO1xuICB9KTtcbn1cblxuLyoqXG4gKiBydW5Db250cm9sbGVyTG9hZCBDYWxscyB0aGUgb25Mb2FkIGZ1bmN0aW9uIG9mIHRoZSBjb250cm9sbGVyLlxuICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHRoZSBIVE1MIGlzIHNldCB0byB0aGUgcGFnZS5cbiAqIFRoZSBwYXJhbWV0ZXIgaXMgYSBsaXN0IG9mIGNoaWxkcmVuIG9mIHRoZSB0YWcgYW5kIHRoZSByZWdpc3RlcmVkIHRhZy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHJldHVybiB7UHJvbWlzZTwqPn0gLSByZXR1cm4gb2YgdGhlIG9uTG9hZCBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBydW5Db250cm9sbGVyTG9hZChjb250cm9sbGVyKSB7XG4gIHJldHVybiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlcihjb250cm9sbGVyKS50aGVuKChodG1sKSA9PiB7XG4gICAgaWYgKCFjb250cm9sbGVyLm9uTG9hZCB8fCBjb250cm9sbGVyLl9vbkxvYWREb25lKSB7XG4gICAgICByZXR1cm4gaHRtbDtcbiAgICB9XG5cbiAgICBjb250cm9sbGVyLl9vbkxvYWREb25lID0gdHJ1ZTtcbiAgICBsZXQgbG9hZFByb21pc2UgPSBjb250cm9sbGVyLm9uTG9hZChodG1sKTtcbiAgICByZXR1cm4gKGxvYWRQcm9taXNlIHx8IHByb21pc2VEdW1teUZhY3RvcnkoKSkudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gaHRtbDtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogcnVuQ29udHJvbEZsb3dGdW5jdGlvbnMgcnVucyB0aGUgY29udHJvbCBmbG93IGZ1bmN0aW9uczpcbiAqIDEuIG9uTG9hZCgpXG4gKiAyLiBmaWxsIGNvbnRlbnRcbiAqIDMuIHdpbGxTaG93KGRvbSBwYXJhbWV0ZXIpXG4gKiA0LiByZWZyZXNoKClcbiAqXG4gKiBAcGFyYW0gY29udHJvbGxlclxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zKGNvbnRyb2xsZXIsIHByb2Nlc3MpIHtcbiAgY29uc3QgcHJvbV9jb250cm9sbGVyID0gcnVuQ29udHJvbGxlckxvYWQoY29udHJvbGxlcilcbiAgICAudGhlbihmdW5jdGlvbiAoJGh0bWwpIHtcbiAgICAgIHJldHVybiBydW5Db250cm9sbGVyU2hvdyhjb250cm9sbGVyLCAkaHRtbCk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gcnVuUmVmcmVzaChjb250cm9sbGVyLCBwcm9jZXNzKTtcbiAgICB9KVxuICAgIC5jYXRjaChmdW5jdGlvbiAoJGh0bWwpIHtcbiAgICAgIGlmICh0eXBlb2YgJGh0bWwgPT09ICdzdHJpbmcnIHx8ICRodG1sIGluc3RhbmNlb2YgJCkge1xuICAgICAgICByZXR1cm4gcnVuQ29udHJvbGxlckZpbGxDb250ZW50KGNvbnRyb2xsZXIsICRodG1sKTtcbiAgICAgIH1cbiAgICAgIHRocm93ICRodG1sO1xuICAgIH0pO1xuXG4gIGlmIChjb250cm9sbGVyLmxvYWRfYXN5bmMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICByZXR1cm4gcHJvbV9jb250cm9sbGVyO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuUmVmcmVzaChjb250cm9sbGVyLCBwcm9jZXNzKSB7XG4gIHJldHVybiByZWZyZXNoKG51bGwsIGNvbnRyb2xsZXIsIHByb2Nlc3MpO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnRMaXN0KGNvbnRyb2xsZXIpIHtcbiAgbGV0IGNvbnRyb2xsZXJMaXN0ID0gW107XG4gIHdoaWxlIChjb250cm9sbGVyKSB7XG4gICAgY29udHJvbGxlci5faXNFdmVudHNTZXQgPSBmYWxzZTtcbiAgICBjb250cm9sbGVyTGlzdC51bnNoaWZ0KGNvbnRyb2xsZXIpO1xuICAgIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyLl9wYXJlbnRDb250cm9sbGVyO1xuICB9XG4gIHJldHVybiBjb250cm9sbGVyTGlzdDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaChwcm9jZXNzKSB7XG4gIGNvbnN0IHBhcmVudExpc3QgPSBnZXRQYXJlbnRMaXN0KHByb2Nlc3MuY29udHJvbGxlclswXSk7XG4gIGNvbnN0IGNvbnRyb2xsZXJMaXN0ID0gcGFyZW50TGlzdC5jb25jYXQocHJvY2Vzcy5jb250cm9sbGVyLnNsaWNlKDEpKTtcblxuICBmb3IgKGxldCBjb24gb2YgY29udHJvbGxlckxpc3QpIHtcbiAgICBzZXRDb250cm9sbGVyRXZlbnRzKGNvbik7XG4gICAgY29uLm9uUmVmcmVzaChwcm9jZXNzLmNvbnRyb2xsZXJbMF0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUmVmcmVzaFByb2Nlc3MocmVmcmVzaFByb2Nlc3MsIGNvbnRyb2xsZXIpIHtcbiAgbGV0IGlzUnVubmluZ1Byb2Nlc3MgPSBCb29sZWFuKHJlZnJlc2hQcm9jZXNzKTtcblxuICBpZiAoIWlzUnVubmluZ1Byb2Nlc3MpIHtcbiAgICByZWZyZXNoUHJvY2VzcyA9IHtcbiAgICAgIHV1aWRzOiBuZXcgU2V0KFtjb250cm9sbGVyLl91dWlkXSksXG4gICAgICBjb250cm9sbGVyOiBbY29udHJvbGxlcl0sXG4gICAgfTtcbiAgfSBlbHNlIGlmICghcmVmcmVzaFByb2Nlc3MudXVpZHMuaGFzKGNvbnRyb2xsZXIuX3V1aWQpKSB7XG4gICAgcmVmcmVzaFByb2Nlc3MudXVpZHMuYWRkKGNvbnRyb2xsZXIuX3V1aWQpO1xuICAgIHJlZnJlc2hQcm9jZXNzLmNvbnRyb2xsZXIucHVzaChjb250cm9sbGVyKTtcbiAgfVxuXG4gIHJldHVybiB7IGlzUnVubmluZ1Byb2Nlc3MsIHJlZnJlc2hQcm9jZXNzIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_controller.js\n\n}");
|
|
38
38
|
|
|
39
39
|
/***/ },
|
|
40
40
|
|
|
@@ -44,7 +44,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
44
44
|
\************************************************/
|
|
45
45
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
46
46
|
|
|
47
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ STD_EVENT_BLACK_LIST: () => (/* binding */ STD_EVENT_BLACK_LIST),\n/* harmony export */ STD_EVENT_LIST: () => (/* binding */ STD_EVENT_LIST),\n/* harmony export */ initEvents: () => (/* binding */ initEvents),\n/* harmony export */ setControllerEvents: () => (/* binding */ setControllerEvents),\n/* harmony export */ windowEventHandler: () => (/* binding */ windowEventHandler)\n/* harmony export */ });\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n\nconst STD_EVENT_BLACK_LIST = [\"onbeforeunload\", \"onunload\"];\nconst STD_EVENT_LIST = Object.keys(window).filter(key => /^on/.test(key) && !STD_EVENT_BLACK_LIST.includes(key)).map(x => x.slice(2));\nfunction checkIfEventFits(ev_type, e, target) {\n let elementUnderMouse;\n switch (ev_type) {\n case \"mouseleave\":\n case \"mouseout\":\n elementUnderMouse = document.elementFromPoint(e.clientX, e.clientY);\n return target !== elementUnderMouse && !target.contains(elementUnderMouse);\n case \"mouseenter\":\n case \"mousein\":\n elementUnderMouse = document.elementFromPoint(e.clientX, e.clientY);\n return target !== elementUnderMouse && !target.contains(elementUnderMouse);\n default:\n return true;\n }\n}\nfunction windowEventHandler(event) {\n let ev_type = event.type;\n if (event.hasOwnProperty(\"namespace\") && event.namespace && event.namespace.length) ev_type += `.${event.namespace}`;\n let $elm = $(event.target);\n let controller = null;\n let is_done = false;\n let is_last_elem = false;\n event.stopImmediatePropagation = () => is_last_elem = true;\n event.stopPropagation = () => is_last_elem = is_done = true;\n while ($elm.length) {\n let attrs = $elm.attr(`sdc_${ev_type}`);\n if (attrs && checkIfEventFits(ev_type, event, $elm[0])) {\n if (!controller) {\n controller = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_0__.getController)($elm);\n if (!controller) return;\n }\n while (controller) {\n attrs.split(\" \").forEach(attr => {\n if (is_done) return;\n let handler = null;\n if (typeof attr === \"function\") {\n handler = attr;\n } else if (typeof controller[attr] === \"function\") {\n handler = controller[attr];\n } else if (typeof attr === \"string\" && attr.startsWith(\"this.event_\")) {\n handler = controller.getEvents()[ev_type];\n if (!handler) {\n return;\n }\n handler = handler[attr.slice(\"this.event_\".length)];\n if (!handler) {\n return;\n }\n }\n handler && handler.call(controller, $elm, event);\n });\n if (is_last_elem) return;\n controller = controller._parentController;\n }\n }\n if (is_done) return;\n $elm = $elm.parent();\n }\n return {\n res: true\n };\n}\n\n/**\n *\n */\nfunction initEvents() {\n const $window = $(window);\n STD_EVENT_LIST.forEach(ev_type => {\n $window.off(ev_type).on(ev_type, windowEventHandler);\n });\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n */\nfunction setControllerEvents(controller) {\n if (controller._isEventsSet) {\n return;\n }\n const events = controller.getEvents();\n for (let ev_type in events) {\n if (events.hasOwnProperty(ev_type)) {\n let eventList = events[ev_type];\n for (let domSelector in eventList) {\n if (eventList.hasOwnProperty(domSelector)) {\n controller.find(domSelector).each(function () {\n let $elements = $(this);\n let event_list = $elements.attr(`sdc_${ev_type}`) || null;\n if (!event_list) event_list = [];else event_list = event_list.split(\" \");\n const new_key = `this.event_${domSelector}`;\n if (event_list.indexOf(new_key) === -1) {\n event_list.push(new_key);\n $elements.attr(`sdc_${ev_type}`, event_list.join(\" \"));\n }\n });\n }\n }\n }\n }\n // TODO: Is it needed\n //controller._isEventsSet = true;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0ksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hEO1VBQ0YsQ0FBQyxDQUFDO1FBQ0o7TUFDRjtJQUNGO0VBQ0Y7RUFDQTtFQUNBO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX2RvbV9ldmVudHMuanM/NDMzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDb250cm9sbGVyIH0gZnJvbSBcIi4vc2RjX3ZpZXcuanNcIjtcblxuZXhwb3J0IGNvbnN0IFNURF9FVkVOVF9CTEFDS19MSVNUID0gW1wib25iZWZvcmV1bmxvYWRcIiwgXCJvbnVubG9hZFwiXTtcbmV4cG9ydCBjb25zdCBTVERfRVZFTlRfTElTVCA9IE9iamVjdC5rZXlzKHdpbmRvdylcbiAgLmZpbHRlcigoa2V5KSA9PiAvXm9uLy50ZXN0KGtleSkgJiYgIVNURF9FVkVOVF9CTEFDS19MSVNULmluY2x1ZGVzKGtleSkpXG4gIC5tYXAoKHgpID0+IHguc2xpY2UoMikpO1xuXG5mdW5jdGlvbiBjaGVja0lmRXZlbnRGaXRzKGV2X3R5cGUsIGUsIHRhcmdldCkge1xuICBsZXQgZWxlbWVudFVuZGVyTW91c2U7XG4gIHN3aXRjaCAoZXZfdHlwZSkge1xuICAgIGNhc2UgXCJtb3VzZWxlYXZlXCI6XG4gICAgY2FzZSBcIm1vdXNlb3V0XCI6XG4gICAgICBlbGVtZW50VW5kZXJNb3VzZSA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGFyZ2V0ICE9PSBlbGVtZW50VW5kZXJNb3VzZSAmJiAhdGFyZ2V0LmNvbnRhaW5zKGVsZW1lbnRVbmRlck1vdXNlKVxuICAgICAgKTtcbiAgICBjYXNlIFwibW91c2VlbnRlclwiOlxuICAgIGNhc2UgXCJtb3VzZWluXCI6XG4gICAgICBlbGVtZW50VW5kZXJNb3VzZSA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGFyZ2V0ICE9PSBlbGVtZW50VW5kZXJNb3VzZSAmJiAhdGFyZ2V0LmNvbnRhaW5zKGVsZW1lbnRVbmRlck1vdXNlKVxuICAgICAgKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd0V2ZW50SGFuZGxlcihldmVudCkge1xuICBsZXQgZXZfdHlwZSA9IGV2ZW50LnR5cGU7XG4gIGlmIChcbiAgICBldmVudC5oYXNPd25Qcm9wZXJ0eShcIm5hbWVzcGFjZVwiKSAmJlxuICAgIGV2ZW50Lm5hbWVzcGFjZSAmJlxuICAgIGV2ZW50Lm5hbWVzcGFjZS5sZW5ndGhcbiAgKVxuICAgIGV2X3R5cGUgKz0gYC4ke2V2ZW50Lm5hbWVzcGFjZX1gO1xuXG4gIGxldCAkZWxtID0gJChldmVudC50YXJnZXQpO1xuICBsZXQgY29udHJvbGxlciA9IG51bGw7XG4gIGxldCBpc19kb25lID0gZmFsc2U7XG4gIGxldCBpc19sYXN0X2VsZW0gPSBmYWxzZTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID0gKCkgPT4gKGlzX2xhc3RfZWxlbSA9IHRydWUpO1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24gPSAoKSA9PiAoaXNfbGFzdF9lbGVtID0gaXNfZG9uZSA9IHRydWUpO1xuICB3aGlsZSAoJGVsbS5sZW5ndGgpIHtcbiAgICBsZXQgYXR0cnMgPSAkZWxtLmF0dHIoYHNkY18ke2V2X3R5cGV9YCk7XG4gICAgaWYgKGF0dHJzICYmIGNoZWNrSWZFdmVudEZpdHMoZXZfdHlwZSwgZXZlbnQsICRlbG1bMF0pKSB7XG4gICAgICBpZiAoIWNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoJGVsbSk7XG4gICAgICAgIGlmICghY29udHJvbGxlcikgcmV0dXJuO1xuICAgICAgfVxuICAgICAgd2hpbGUgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYXR0cnMuc3BsaXQoXCIgXCIpLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICBpZiAoaXNfZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIGxldCBoYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICBpZiAodHlwZW9mIGF0dHIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgaGFuZGxlciA9IGF0dHI7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29udHJvbGxlclthdHRyXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gY29udHJvbGxlclthdHRyXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGF0dHIgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGF0dHIuc3RhcnRzV2l0aChcInRoaXMuZXZlbnRfXCIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gY29udHJvbGxlci5nZXRFdmVudHMoKVtldl90eXBlXTtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGVyID0gaGFuZGxlclthdHRyLnNsaWNlKFwidGhpcy5ldmVudF9cIi5sZW5ndGgpXTtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGFuZGxlciAmJiBoYW5kbGVyLmNhbGwoY29udHJvbGxlciwgJGVsbSwgZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzX2xhc3RfZWxlbSkgcmV0dXJuO1xuICAgICAgICBjb250cm9sbGVyID0gY29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzX2RvbmUpIHJldHVybjtcbiAgICAkZWxtID0gJGVsbS5wYXJlbnQoKTtcbiAgfVxuXG4gIHJldHVybiB7IHJlczogdHJ1ZSB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0RXZlbnRzKCkge1xuICBjb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuICBTVERfRVZFTlRfTElTVC5mb3JFYWNoKChldl90eXBlKSA9PiB7XG4gICAgJHdpbmRvdy5vZmYoZXZfdHlwZSkub24oZXZfdHlwZSwgd2luZG93RXZlbnRIYW5kbGVyKTtcbiAgfSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbnRyb2xsZXJFdmVudHMoY29udHJvbGxlcikge1xuICBpZiAoY29udHJvbGxlci5faXNFdmVudHNTZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBldmVudHMgPSBjb250cm9sbGVyLmdldEV2ZW50cygpO1xuICBmb3IgKGxldCBldl90eXBlIGluIGV2ZW50cykge1xuICAgIGlmIChldmVudHMuaGFzT3duUHJvcGVydHkoZXZfdHlwZSkpIHtcbiAgICAgIGxldCBldmVudExpc3QgPSBldmVudHNbZXZfdHlwZV07XG4gICAgICBmb3IgKGxldCBkb21TZWxlY3RvciBpbiBldmVudExpc3QpIHtcbiAgICAgICAgaWYgKGV2ZW50TGlzdC5oYXNPd25Qcm9wZXJ0eShkb21TZWxlY3RvcikpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmZpbmQoZG9tU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0ICRlbGVtZW50cyA9ICQodGhpcyk7XG4gICAgICAgICAgICBsZXQgZXZlbnRfbGlzdCA9ICRlbGVtZW50cy5hdHRyKGBzZGNfJHtldl90eXBlfWApIHx8IG51bGw7XG4gICAgICAgICAgICBpZiAoIWV2ZW50X2xpc3QpIGV2ZW50X2xpc3QgPSBbXTtcbiAgICAgICAgICAgIGVsc2UgZXZlbnRfbGlzdCA9IGV2ZW50X2xpc3Quc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgY29uc3QgbmV3X2tleSA9IGB0aGlzLmV2ZW50XyR7ZG9tU2VsZWN0b3J9YDtcbiAgICAgICAgICAgIGlmIChldmVudF9saXN0LmluZGV4T2YobmV3X2tleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgIGV2ZW50X2xpc3QucHVzaChuZXdfa2V5KTtcbiAgICAgICAgICAgICAgJGVsZW1lbnRzLmF0dHIoYHNkY18ke2V2X3R5cGV9YCwgZXZlbnRfbGlzdC5qb2luKFwiIFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gVE9ETzogSXMgaXQgbmVlZGVkXG4gIC8vY29udHJvbGxlci5faXNFdmVudHNTZXQgPSB0cnVlO1xufVxuIl0sIm5hbWVzIjpbImdldENvbnRyb2xsZXIiLCJTVERfRVZFTlRfQkxBQ0tfTElTVCIsIlNURF9FVkVOVF9MSVNUIiwiT2JqZWN0Iiwia2V5cyIsIndpbmRvdyIsImZpbHRlciIsImtleSIsInRlc3QiLCJpbmNsdWRlcyIsIm1hcCIsIngiLCJzbGljZSIsImNoZWNrSWZFdmVudEZpdHMiLCJldl90eXBlIiwiZSIsInRhcmdldCIsImVsZW1lbnRVbmRlck1vdXNlIiwiZG9jdW1lbnQiLCJlbGVtZW50RnJvbVBvaW50IiwiY2xpZW50WCIsImNsaWVudFkiLCJjb250YWlucyIsIndpbmRvd0V2ZW50SGFuZGxlciIsImV2ZW50IiwidHlwZSIsImhhc093blByb3BlcnR5IiwibmFtZXNwYWNlIiwibGVuZ3RoIiwiJGVsbSIsIiQiLCJjb250cm9sbGVyIiwiaXNfZG9uZSIsImlzX2xhc3RfZWxlbSIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInN0b3BQcm9wYWdhdGlvbiIsImF0dHJzIiwiYXR0ciIsInNwbGl0IiwiZm9yRWFjaCIsImhhbmRsZXIiLCJzdGFydHNXaXRoIiwiZ2V0RXZlbnRzIiwiY2FsbCIsIl9wYXJlbnRDb250cm9sbGVyIiwicGFyZW50IiwicmVzIiwiaW5pdEV2ZW50cyIsIiR3aW5kb3ciLCJvZmYiLCJvbiIsInNldENvbnRyb2xsZXJFdmVudHMiLCJfaXNFdmVudHNTZXQiLCJldmVudHMiLCJldmVudExpc3QiLCJkb21TZWxlY3RvciIsImZpbmQiLCJlYWNoIiwiJGVsZW1lbnRzIiwiZXZlbnRfbGlzdCIsIm5ld19rZXkiLCJpbmRleE9mIiwicHVzaCIsImpvaW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_dom_events.js\n\n}");
|
|
47
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ STD_EVENT_BLACK_LIST: () => (/* binding */ STD_EVENT_BLACK_LIST),\n/* harmony export */ STD_EVENT_LIST: () => (/* binding */ STD_EVENT_LIST),\n/* harmony export */ initEvents: () => (/* binding */ initEvents),\n/* harmony export */ setControllerEvents: () => (/* binding */ setControllerEvents),\n/* harmony export */ windowEventHandler: () => (/* binding */ windowEventHandler)\n/* harmony export */ });\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n\n\nconst STD_EVENT_BLACK_LIST = [\"onbeforeunload\", \"onunload\"];\nconst STD_EVENT_LIST = Object.keys(window)\n .filter((key) => /^on/.test(key) && !STD_EVENT_BLACK_LIST.includes(key))\n .map((x) => x.slice(2));\n\nfunction checkIfEventFits(ev_type, e, target) {\n let elementUnderMouse;\n switch (ev_type) {\n case \"mouseleave\":\n case \"mouseout\":\n elementUnderMouse = document.elementFromPoint(e.clientX, e.clientY);\n return (\n target !== elementUnderMouse && !target.contains(elementUnderMouse)\n );\n case \"mouseenter\":\n case \"mousein\":\n elementUnderMouse = document.elementFromPoint(e.clientX, e.clientY);\n return (\n target !== elementUnderMouse && !target.contains(elementUnderMouse)\n );\n default:\n return true;\n }\n}\n\nfunction windowEventHandler(event) {\n let ev_type = event.type;\n if (\n event.hasOwnProperty(\"namespace\") &&\n event.namespace &&\n event.namespace.length\n )\n ev_type += `.${event.namespace}`;\n\n let $elm = $(event.target);\n let controller = null;\n let is_done = false;\n let is_last_elem = false;\n event.stopImmediatePropagation = () => (is_last_elem = true);\n event.stopPropagation = () => (is_last_elem = is_done = true);\n while ($elm.length) {\n let attrs = $elm.attr(`sdc_${ev_type}`);\n if (attrs && checkIfEventFits(ev_type, event, $elm[0])) {\n if (!controller) {\n controller = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_0__.getController)($elm);\n if (!controller) return;\n }\n while (controller) {\n attrs.split(\" \").forEach((attr) => {\n if (is_done) return;\n let handler = null;\n if (typeof attr === \"function\") {\n handler = attr;\n } else if (typeof controller[attr] === \"function\") {\n handler = controller[attr];\n } else if (\n typeof attr === \"string\" &&\n attr.startsWith(\"this.event_\")\n ) {\n handler = controller.getEvents()[ev_type];\n if (!handler) {\n return;\n }\n handler = handler[attr.slice(\"this.event_\".length)];\n if (!handler) {\n return;\n }\n }\n\n handler && handler.call(controller, $elm, event);\n });\n if (is_last_elem) return;\n controller = controller._parentController;\n }\n }\n if (is_done) return;\n $elm = $elm.parent();\n }\n\n return { res: true };\n}\n\n/**\n *\n */\nfunction initEvents() {\n const $window = $(window);\n STD_EVENT_LIST.forEach((ev_type) => {\n $window.off(ev_type).on(ev_type, windowEventHandler);\n });\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n */\nfunction setControllerEvents(controller) {\n if (controller._isEventsSet) {\n return;\n }\n\n const events = controller.getEvents();\n for (let ev_type in events) {\n if (events.hasOwnProperty(ev_type)) {\n let eventList = events[ev_type];\n for (let domSelector in eventList) {\n if (eventList.hasOwnProperty(domSelector)) {\n controller.find(domSelector).each(function () {\n let $elements = $(this);\n let event_list = $elements.attr(`sdc_${ev_type}`) || null;\n if (!event_list) event_list = [];\n else event_list = event_list.split(\" \");\n const new_key = `this.event_${domSelector}`;\n if (event_list.indexOf(new_key) === -1) {\n event_list.push(new_key);\n $elements.attr(`sdc_${ev_type}`, event_list.join(\" \"));\n }\n });\n }\n }\n }\n }\n // TODO: Is it needed\n //controller._isEventsSet = true;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfZG9tX2V2ZW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBOEM7O0FBRXZDO0FBQ0E7QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGdCQUFnQjs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsUUFBUTtBQUN6QztBQUNBO0FBQ0EscUJBQXFCLDJEQUFhO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ087QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxRQUFRO0FBQzNEO0FBQ0E7QUFDQSwwQ0FBMEMsWUFBWTtBQUN0RDtBQUNBO0FBQ0Esb0NBQW9DLFFBQVE7QUFDNUM7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX2RvbV9ldmVudHMuanM/YzdmZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDb250cm9sbGVyIH0gZnJvbSBcIi4vc2RjX3ZpZXcuanNcIjtcblxuZXhwb3J0IGNvbnN0IFNURF9FVkVOVF9CTEFDS19MSVNUID0gW1wib25iZWZvcmV1bmxvYWRcIiwgXCJvbnVubG9hZFwiXTtcbmV4cG9ydCBjb25zdCBTVERfRVZFTlRfTElTVCA9IE9iamVjdC5rZXlzKHdpbmRvdylcbiAgLmZpbHRlcigoa2V5KSA9PiAvXm9uLy50ZXN0KGtleSkgJiYgIVNURF9FVkVOVF9CTEFDS19MSVNULmluY2x1ZGVzKGtleSkpXG4gIC5tYXAoKHgpID0+IHguc2xpY2UoMikpO1xuXG5mdW5jdGlvbiBjaGVja0lmRXZlbnRGaXRzKGV2X3R5cGUsIGUsIHRhcmdldCkge1xuICBsZXQgZWxlbWVudFVuZGVyTW91c2U7XG4gIHN3aXRjaCAoZXZfdHlwZSkge1xuICAgIGNhc2UgXCJtb3VzZWxlYXZlXCI6XG4gICAgY2FzZSBcIm1vdXNlb3V0XCI6XG4gICAgICBlbGVtZW50VW5kZXJNb3VzZSA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGFyZ2V0ICE9PSBlbGVtZW50VW5kZXJNb3VzZSAmJiAhdGFyZ2V0LmNvbnRhaW5zKGVsZW1lbnRVbmRlck1vdXNlKVxuICAgICAgKTtcbiAgICBjYXNlIFwibW91c2VlbnRlclwiOlxuICAgIGNhc2UgXCJtb3VzZWluXCI6XG4gICAgICBlbGVtZW50VW5kZXJNb3VzZSA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGFyZ2V0ICE9PSBlbGVtZW50VW5kZXJNb3VzZSAmJiAhdGFyZ2V0LmNvbnRhaW5zKGVsZW1lbnRVbmRlck1vdXNlKVxuICAgICAgKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd0V2ZW50SGFuZGxlcihldmVudCkge1xuICBsZXQgZXZfdHlwZSA9IGV2ZW50LnR5cGU7XG4gIGlmIChcbiAgICBldmVudC5oYXNPd25Qcm9wZXJ0eShcIm5hbWVzcGFjZVwiKSAmJlxuICAgIGV2ZW50Lm5hbWVzcGFjZSAmJlxuICAgIGV2ZW50Lm5hbWVzcGFjZS5sZW5ndGhcbiAgKVxuICAgIGV2X3R5cGUgKz0gYC4ke2V2ZW50Lm5hbWVzcGFjZX1gO1xuXG4gIGxldCAkZWxtID0gJChldmVudC50YXJnZXQpO1xuICBsZXQgY29udHJvbGxlciA9IG51bGw7XG4gIGxldCBpc19kb25lID0gZmFsc2U7XG4gIGxldCBpc19sYXN0X2VsZW0gPSBmYWxzZTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID0gKCkgPT4gKGlzX2xhc3RfZWxlbSA9IHRydWUpO1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24gPSAoKSA9PiAoaXNfbGFzdF9lbGVtID0gaXNfZG9uZSA9IHRydWUpO1xuICB3aGlsZSAoJGVsbS5sZW5ndGgpIHtcbiAgICBsZXQgYXR0cnMgPSAkZWxtLmF0dHIoYHNkY18ke2V2X3R5cGV9YCk7XG4gICAgaWYgKGF0dHJzICYmIGNoZWNrSWZFdmVudEZpdHMoZXZfdHlwZSwgZXZlbnQsICRlbG1bMF0pKSB7XG4gICAgICBpZiAoIWNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoJGVsbSk7XG4gICAgICAgIGlmICghY29udHJvbGxlcikgcmV0dXJuO1xuICAgICAgfVxuICAgICAgd2hpbGUgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYXR0cnMuc3BsaXQoXCIgXCIpLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICBpZiAoaXNfZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIGxldCBoYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICBpZiAodHlwZW9mIGF0dHIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgaGFuZGxlciA9IGF0dHI7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29udHJvbGxlclthdHRyXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gY29udHJvbGxlclthdHRyXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGF0dHIgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGF0dHIuc3RhcnRzV2l0aChcInRoaXMuZXZlbnRfXCIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gY29udHJvbGxlci5nZXRFdmVudHMoKVtldl90eXBlXTtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGVyID0gaGFuZGxlclthdHRyLnNsaWNlKFwidGhpcy5ldmVudF9cIi5sZW5ndGgpXTtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGFuZGxlciAmJiBoYW5kbGVyLmNhbGwoY29udHJvbGxlciwgJGVsbSwgZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzX2xhc3RfZWxlbSkgcmV0dXJuO1xuICAgICAgICBjb250cm9sbGVyID0gY29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzX2RvbmUpIHJldHVybjtcbiAgICAkZWxtID0gJGVsbS5wYXJlbnQoKTtcbiAgfVxuXG4gIHJldHVybiB7IHJlczogdHJ1ZSB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0RXZlbnRzKCkge1xuICBjb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuICBTVERfRVZFTlRfTElTVC5mb3JFYWNoKChldl90eXBlKSA9PiB7XG4gICAgJHdpbmRvdy5vZmYoZXZfdHlwZSkub24oZXZfdHlwZSwgd2luZG93RXZlbnRIYW5kbGVyKTtcbiAgfSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbnRyb2xsZXJFdmVudHMoY29udHJvbGxlcikge1xuICBpZiAoY29udHJvbGxlci5faXNFdmVudHNTZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBldmVudHMgPSBjb250cm9sbGVyLmdldEV2ZW50cygpO1xuICBmb3IgKGxldCBldl90eXBlIGluIGV2ZW50cykge1xuICAgIGlmIChldmVudHMuaGFzT3duUHJvcGVydHkoZXZfdHlwZSkpIHtcbiAgICAgIGxldCBldmVudExpc3QgPSBldmVudHNbZXZfdHlwZV07XG4gICAgICBmb3IgKGxldCBkb21TZWxlY3RvciBpbiBldmVudExpc3QpIHtcbiAgICAgICAgaWYgKGV2ZW50TGlzdC5oYXNPd25Qcm9wZXJ0eShkb21TZWxlY3RvcikpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmZpbmQoZG9tU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0ICRlbGVtZW50cyA9ICQodGhpcyk7XG4gICAgICAgICAgICBsZXQgZXZlbnRfbGlzdCA9ICRlbGVtZW50cy5hdHRyKGBzZGNfJHtldl90eXBlfWApIHx8IG51bGw7XG4gICAgICAgICAgICBpZiAoIWV2ZW50X2xpc3QpIGV2ZW50X2xpc3QgPSBbXTtcbiAgICAgICAgICAgIGVsc2UgZXZlbnRfbGlzdCA9IGV2ZW50X2xpc3Quc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgY29uc3QgbmV3X2tleSA9IGB0aGlzLmV2ZW50XyR7ZG9tU2VsZWN0b3J9YDtcbiAgICAgICAgICAgIGlmIChldmVudF9saXN0LmluZGV4T2YobmV3X2tleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgIGV2ZW50X2xpc3QucHVzaChuZXdfa2V5KTtcbiAgICAgICAgICAgICAgJGVsZW1lbnRzLmF0dHIoYHNkY18ke2V2X3R5cGV9YCwgZXZlbnRfbGlzdC5qb2luKFwiIFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gVE9ETzogSXMgaXQgbmVlZGVkXG4gIC8vY29udHJvbGxlci5faXNFdmVudHNTZXQgPSB0cnVlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_dom_events.js\n\n}");
|
|
48
48
|
|
|
49
49
|
/***/ },
|
|
50
50
|
|
|
@@ -54,7 +54,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
54
54
|
\********************************************/
|
|
55
55
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
56
56
|
|
|
57
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ allOff: () => (/* binding */ allOff),\n/* harmony export */ on: () => (/* binding */ on),\n/* harmony export */ setEvent: () => (/* binding */ setEvent),\n/* harmony export */ trigger: () => (/* binding */ trigger)\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\n\n/**\n * A list of handler (controller) for the registered events.\n * @type {{}}\n */\nlet handlerList = {};\n\n/**\n * eventList is a map connection the event to a responsing function name.\n * @type {{}}\n */\nlet eventList = {};\n\n/**\n * on is a function to register a controller to a event. The controller has to\n * implement the the handler function. The handler functions by default has the same\n * name as the event. You can use the app.events.setEvent function to register a\n * event with a different named function.\n *\n * @param {string} name - the event name String\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n */\nfunction on(name, controller) {\n setEvent(name);\n if (!eventList.hasOwnProperty(name)) {\n return console.log(\"No event: \" + name, controller);\n }\n let funcName = eventList[name];\n if (!controller[funcName]) {\n return console.log(\"No event handler: \" + name, controller);\n }\n handlerList[name].push(controller);\n}\n\n/**\n * setEvent allows you to register a event with a function with a different\n * name as the event.\n *\n * @param {string} name - event name\n * @param {string} functionName - function name\n */\nfunction setEvent(name, functionName) {\n if (!functionName) {\n functionName = name;\n }\n if (!eventList[name]) {\n eventList[name] = functionName;\n handlerList[name] = [];\n }\n}\n\n/**\n * allOff is to remove all events of the controller instance\n * ! important before destroying the instance.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n */\nfunction allOff(controller) {\n for (let eventName in handlerList) {\n if (handlerList.hasOwnProperty(eventName)) {\n for (let i = handlerList[eventName].length - 1; i >= 0; i--) {\n if (controller === handlerList[eventName][i]) {\n handlerList[eventName].splice(i, 1);\n }\n }\n }\n }\n}\n\n/**\n * trigger triggers the event. The handler function of all registered\n * controller gets called. The returned Promise returns a list with all\n * returned values.\n *\n * @param {string} name - event name\n * @returns {Promise<object>} - waits to return all return values of the handler\n */\nfunction trigger(name) {\n let args = Array.apply(null, arguments);\n name = args.shift();\n if (!handlerList.hasOwnProperty(name) || !eventList.hasOwnProperty(name)) {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)();\n }\n let handler = handlerList[name];\n let funcName = eventList[name];\n let list = [];\n for (let i = 0; i < handler.length; i++) {\n let return_val = handler[i][funcName].apply(handler[i], args);\n if (typeof return_val !== \"undefined\") {\n list.push(return_val);\n }\n }\n return Promise.all(list);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsRUFBRUEsQ0FBQyxHQUFHUyxPQUFPLENBQUNSLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7SUFDdkMsSUFBSVcsVUFBVSxHQUFHRixPQUFPLENBQUNULENBQUMsQ0FBQyxDQUFDTCxRQUFRLENBQUMsQ0FBQ1csS0FBSyxDQUFDRyxPQUFPLENBQUNULENBQUMsQ0FBQyxFQUFFSSxJQUFJLENBQUM7SUFDN0QsSUFBSSxPQUFPTyxVQUFVLEtBQUssV0FBVyxFQUFFO01BQ3JDRCxJQUFJLENBQUNkLElBQUksQ0FBQ2UsVUFBVSxDQUFDO0lBQ3ZCO0VBQ0Y7RUFFQSxPQUFPQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO0FBQzFCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19ldmVudHMuanM/OGI4OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9taXNlRHVtbXlGYWN0b3J5IH0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5cbi8qKlxuICogQSBsaXN0IG9mIGhhbmRsZXIgKGNvbnRyb2xsZXIpIGZvciB0aGUgcmVnaXN0ZXJlZCBldmVudHMuXG4gKiBAdHlwZSB7e319XG4gKi9cbmxldCBoYW5kbGVyTGlzdCA9IHt9O1xuXG4vKipcbiAqIGV2ZW50TGlzdCBpcyBhIG1hcCBjb25uZWN0aW9uIHRoZSBldmVudCB0byBhIHJlc3BvbnNpbmcgZnVuY3Rpb24gbmFtZS5cbiAqIEB0eXBlIHt7fX1cbiAqL1xubGV0IGV2ZW50TGlzdCA9IHt9O1xuXG4vKipcbiAqIG9uIGlzIGEgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYSBjb250cm9sbGVyIHRvIGEgZXZlbnQuIFRoZSBjb250cm9sbGVyIGhhcyB0b1xuICogaW1wbGVtZW50IHRoZSB0aGUgaGFuZGxlciBmdW5jdGlvbi4gVGhlIGhhbmRsZXIgZnVuY3Rpb25zIGJ5IGRlZmF1bHQgaGFzIHRoZSBzYW1lXG4gKiBuYW1lIGFzIHRoZSBldmVudC4gWW91IGNhbiB1c2UgdGhlIGFwcC5ldmVudHMuc2V0RXZlbnQgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYVxuICogZXZlbnQgd2l0aCBhIGRpZmZlcmVudCBuYW1lZCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIHRoZSBldmVudCBuYW1lIFN0cmluZ1xuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtICBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uKG5hbWUsIGNvbnRyb2xsZXIpIHtcbiAgc2V0RXZlbnQobmFtZSk7XG4gIGlmICghZXZlbnRMaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUubG9nKFwiTm8gZXZlbnQ6IFwiICsgbmFtZSwgY29udHJvbGxlcik7XG4gIH1cblxuICBsZXQgZnVuY05hbWUgPSBldmVudExpc3RbbmFtZV07XG4gIGlmICghY29udHJvbGxlcltmdW5jTmFtZV0pIHtcbiAgICByZXR1cm4gY29uc29sZS5sb2coXCJObyBldmVudCBoYW5kbGVyOiBcIiArIG5hbWUsIGNvbnRyb2xsZXIpO1xuICB9XG5cbiAgaGFuZGxlckxpc3RbbmFtZV0ucHVzaChjb250cm9sbGVyKTtcbn1cblxuLyoqXG4gKiBzZXRFdmVudCBhbGxvd3MgeW91IHRvIHJlZ2lzdGVyIGEgZXZlbnQgd2l0aCBhIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnRcbiAqIG5hbWUgYXMgdGhlIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZXZlbnQgbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZSAtIGZ1bmN0aW9uIG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEV2ZW50KG5hbWUsIGZ1bmN0aW9uTmFtZSkge1xuICBpZiAoIWZ1bmN0aW9uTmFtZSkge1xuICAgIGZ1bmN0aW9uTmFtZSA9IG5hbWU7XG4gIH1cblxuICBpZiAoIWV2ZW50TGlzdFtuYW1lXSkge1xuICAgIGV2ZW50TGlzdFtuYW1lXSA9IGZ1bmN0aW9uTmFtZTtcbiAgICBoYW5kbGVyTGlzdFtuYW1lXSA9IFtdO1xuICB9XG59XG5cbi8qKlxuICogYWxsT2ZmIGlzIHRvIHJlbW92ZSBhbGwgZXZlbnRzIG9mIHRoZSBjb250cm9sbGVyIGluc3RhbmNlXG4gKiAhIGltcG9ydGFudCBiZWZvcmUgZGVzdHJveWluZyB0aGUgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGEgaW5zdGFuY2Ugb2YgYSBKYXZhU2NyaXB0IGNvbnRyb2xsZXIgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsT2ZmKGNvbnRyb2xsZXIpIHtcbiAgZm9yIChsZXQgZXZlbnROYW1lIGluIGhhbmRsZXJMaXN0KSB7XG4gICAgaWYgKGhhbmRsZXJMaXN0Lmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSBoYW5kbGVyTGlzdFtldmVudE5hbWVdLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmIChjb250cm9sbGVyID09PSBoYW5kbGVyTGlzdFtldmVudE5hbWVdW2ldKSB7XG4gICAgICAgICAgaGFuZGxlckxpc3RbZXZlbnROYW1lXS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiB0cmlnZ2VyIHRyaWdnZXJzIHRoZSBldmVudC4gVGhlIGhhbmRsZXIgZnVuY3Rpb24gb2YgYWxsIHJlZ2lzdGVyZWRcbiAqIGNvbnRyb2xsZXIgZ2V0cyBjYWxsZWQuIFRoZSByZXR1cm5lZCBQcm9taXNlIHJldHVybnMgYSBsaXN0IHdpdGggYWxsXG4gKiByZXR1cm5lZCB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBldmVudCBuYW1lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxvYmplY3Q+fSAtIHdhaXRzIHRvIHJldHVybiBhbGwgcmV0dXJuIHZhbHVlcyBvZiB0aGUgaGFuZGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlcihuYW1lKSB7XG4gIGxldCBhcmdzID0gQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgbmFtZSA9IGFyZ3Muc2hpZnQoKTtcbiAgaWYgKCFoYW5kbGVyTGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCAhZXZlbnRMaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgcmV0dXJuIHByb21pc2VEdW1teUZhY3RvcnkoKTtcbiAgfVxuICBsZXQgaGFuZGxlciA9IGhhbmRsZXJMaXN0W25hbWVdO1xuICBsZXQgZnVuY05hbWUgPSBldmVudExpc3RbbmFtZV07XG5cbiAgbGV0IGxpc3QgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhhbmRsZXIubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgcmV0dXJuX3ZhbCA9IGhhbmRsZXJbaV1bZnVuY05hbWVdLmFwcGx5KGhhbmRsZXJbaV0sIGFyZ3MpO1xuICAgIGlmICh0eXBlb2YgcmV0dXJuX3ZhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbGlzdC5wdXNoKHJldHVybl92YWwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChsaXN0KTtcbn1cbiJdLCJuYW1lcyI6WyJwcm9taXNlRHVtbXlGYWN0b3J5IiwiaGFuZGxlckxpc3QiLCJldmVudExpc3QiLCJvbiIsIm5hbWUiLCJjb250cm9sbGVyIiwic2V0RXZlbnQiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbnNvbGUiLCJsb2ciLCJmdW5jTmFtZSIsInB1c2giLCJmdW5jdGlvbk5hbWUiLCJhbGxPZmYiLCJldmVudE5hbWUiLCJpIiwibGVuZ3RoIiwic3BsaWNlIiwidHJpZ2dlciIsImFyZ3MiLCJBcnJheSIsImFwcGx5IiwiYXJndW1lbnRzIiwic2hpZnQiLCJoYW5kbGVyIiwibGlzdCIsInJldHVybl92YWwiLCJQcm9taXNlIiwiYWxsIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_events.js\n\n}");
|
|
57
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ allOff: () => (/* binding */ allOff),\n/* harmony export */ on: () => (/* binding */ on),\n/* harmony export */ setEvent: () => (/* binding */ setEvent),\n/* harmony export */ trigger: () => (/* binding */ trigger)\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\n\n/**\n * A list of handler (controller) for the registered events.\n * @type {{}}\n */\nlet handlerList = {};\n\n/**\n * eventList is a map connection the event to a responsing function name.\n * @type {{}}\n */\nlet eventList = {};\n\n/**\n * on is a function to register a controller to a event. The controller has to\n * implement the the handler function. The handler functions by default has the same\n * name as the event. You can use the app.events.setEvent function to register a\n * event with a different named function.\n *\n * @param {string} name - the event name String\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n */\nfunction on(name, controller) {\n setEvent(name);\n if (!eventList.hasOwnProperty(name)) {\n return console.log(\"No event: \" + name, controller);\n }\n\n let funcName = eventList[name];\n if (!controller[funcName]) {\n return console.log(\"No event handler: \" + name, controller);\n }\n\n handlerList[name].push(controller);\n}\n\n/**\n * setEvent allows you to register a event with a function with a different\n * name as the event.\n *\n * @param {string} name - event name\n * @param {string} functionName - function name\n */\nfunction setEvent(name, functionName) {\n if (!functionName) {\n functionName = name;\n }\n\n if (!eventList[name]) {\n eventList[name] = functionName;\n handlerList[name] = [];\n }\n}\n\n/**\n * allOff is to remove all events of the controller instance\n * ! important before destroying the instance.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n */\nfunction allOff(controller) {\n for (let eventName in handlerList) {\n if (handlerList.hasOwnProperty(eventName)) {\n for (let i = handlerList[eventName].length - 1; i >= 0; i--) {\n if (controller === handlerList[eventName][i]) {\n handlerList[eventName].splice(i, 1);\n }\n }\n }\n }\n}\n\n/**\n * trigger triggers the event. The handler function of all registered\n * controller gets called. The returned Promise returns a list with all\n * returned values.\n *\n * @param {string} name - event name\n * @returns {Promise<object>} - waits to return all return values of the handler\n */\nfunction trigger(name) {\n let args = Array.apply(null, arguments);\n name = args.shift();\n if (!handlerList.hasOwnProperty(name) || !eventList.hasOwnProperty(name)) {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)();\n }\n let handler = handlerList[name];\n let funcName = eventList[name];\n\n let list = [];\n\n for (let i = 0; i < handler.length; i++) {\n let return_val = handler[i][funcName].apply(handler[i], args);\n if (typeof return_val !== \"undefined\") {\n list.push(return_val);\n }\n }\n\n return Promise.all(list);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfZXZlbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXFEOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsYUFBYTtBQUN4QjtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ087QUFDUDtBQUNBO0FBQ0Esc0RBQXNELFFBQVE7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLGlCQUFpQjtBQUM5QjtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsV0FBVyxrRUFBbUI7QUFDOUI7QUFDQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixvQkFBb0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19ldmVudHMuanM/NjEzZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9taXNlRHVtbXlGYWN0b3J5IH0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5cbi8qKlxuICogQSBsaXN0IG9mIGhhbmRsZXIgKGNvbnRyb2xsZXIpIGZvciB0aGUgcmVnaXN0ZXJlZCBldmVudHMuXG4gKiBAdHlwZSB7e319XG4gKi9cbmxldCBoYW5kbGVyTGlzdCA9IHt9O1xuXG4vKipcbiAqIGV2ZW50TGlzdCBpcyBhIG1hcCBjb25uZWN0aW9uIHRoZSBldmVudCB0byBhIHJlc3BvbnNpbmcgZnVuY3Rpb24gbmFtZS5cbiAqIEB0eXBlIHt7fX1cbiAqL1xubGV0IGV2ZW50TGlzdCA9IHt9O1xuXG4vKipcbiAqIG9uIGlzIGEgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYSBjb250cm9sbGVyIHRvIGEgZXZlbnQuIFRoZSBjb250cm9sbGVyIGhhcyB0b1xuICogaW1wbGVtZW50IHRoZSB0aGUgaGFuZGxlciBmdW5jdGlvbi4gVGhlIGhhbmRsZXIgZnVuY3Rpb25zIGJ5IGRlZmF1bHQgaGFzIHRoZSBzYW1lXG4gKiBuYW1lIGFzIHRoZSBldmVudC4gWW91IGNhbiB1c2UgdGhlIGFwcC5ldmVudHMuc2V0RXZlbnQgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYVxuICogZXZlbnQgd2l0aCBhIGRpZmZlcmVudCBuYW1lZCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIHRoZSBldmVudCBuYW1lIFN0cmluZ1xuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtICBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uKG5hbWUsIGNvbnRyb2xsZXIpIHtcbiAgc2V0RXZlbnQobmFtZSk7XG4gIGlmICghZXZlbnRMaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUubG9nKFwiTm8gZXZlbnQ6IFwiICsgbmFtZSwgY29udHJvbGxlcik7XG4gIH1cblxuICBsZXQgZnVuY05hbWUgPSBldmVudExpc3RbbmFtZV07XG4gIGlmICghY29udHJvbGxlcltmdW5jTmFtZV0pIHtcbiAgICByZXR1cm4gY29uc29sZS5sb2coXCJObyBldmVudCBoYW5kbGVyOiBcIiArIG5hbWUsIGNvbnRyb2xsZXIpO1xuICB9XG5cbiAgaGFuZGxlckxpc3RbbmFtZV0ucHVzaChjb250cm9sbGVyKTtcbn1cblxuLyoqXG4gKiBzZXRFdmVudCBhbGxvd3MgeW91IHRvIHJlZ2lzdGVyIGEgZXZlbnQgd2l0aCBhIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnRcbiAqIG5hbWUgYXMgdGhlIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZXZlbnQgbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZSAtIGZ1bmN0aW9uIG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEV2ZW50KG5hbWUsIGZ1bmN0aW9uTmFtZSkge1xuICBpZiAoIWZ1bmN0aW9uTmFtZSkge1xuICAgIGZ1bmN0aW9uTmFtZSA9IG5hbWU7XG4gIH1cblxuICBpZiAoIWV2ZW50TGlzdFtuYW1lXSkge1xuICAgIGV2ZW50TGlzdFtuYW1lXSA9IGZ1bmN0aW9uTmFtZTtcbiAgICBoYW5kbGVyTGlzdFtuYW1lXSA9IFtdO1xuICB9XG59XG5cbi8qKlxuICogYWxsT2ZmIGlzIHRvIHJlbW92ZSBhbGwgZXZlbnRzIG9mIHRoZSBjb250cm9sbGVyIGluc3RhbmNlXG4gKiAhIGltcG9ydGFudCBiZWZvcmUgZGVzdHJveWluZyB0aGUgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGEgaW5zdGFuY2Ugb2YgYSBKYXZhU2NyaXB0IGNvbnRyb2xsZXIgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsT2ZmKGNvbnRyb2xsZXIpIHtcbiAgZm9yIChsZXQgZXZlbnROYW1lIGluIGhhbmRsZXJMaXN0KSB7XG4gICAgaWYgKGhhbmRsZXJMaXN0Lmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSBoYW5kbGVyTGlzdFtldmVudE5hbWVdLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmIChjb250cm9sbGVyID09PSBoYW5kbGVyTGlzdFtldmVudE5hbWVdW2ldKSB7XG4gICAgICAgICAgaGFuZGxlckxpc3RbZXZlbnROYW1lXS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiB0cmlnZ2VyIHRyaWdnZXJzIHRoZSBldmVudC4gVGhlIGhhbmRsZXIgZnVuY3Rpb24gb2YgYWxsIHJlZ2lzdGVyZWRcbiAqIGNvbnRyb2xsZXIgZ2V0cyBjYWxsZWQuIFRoZSByZXR1cm5lZCBQcm9taXNlIHJldHVybnMgYSBsaXN0IHdpdGggYWxsXG4gKiByZXR1cm5lZCB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBldmVudCBuYW1lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxvYmplY3Q+fSAtIHdhaXRzIHRvIHJldHVybiBhbGwgcmV0dXJuIHZhbHVlcyBvZiB0aGUgaGFuZGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlcihuYW1lKSB7XG4gIGxldCBhcmdzID0gQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgbmFtZSA9IGFyZ3Muc2hpZnQoKTtcbiAgaWYgKCFoYW5kbGVyTGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCAhZXZlbnRMaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgcmV0dXJuIHByb21pc2VEdW1teUZhY3RvcnkoKTtcbiAgfVxuICBsZXQgaGFuZGxlciA9IGhhbmRsZXJMaXN0W25hbWVdO1xuICBsZXQgZnVuY05hbWUgPSBldmVudExpc3RbbmFtZV07XG5cbiAgbGV0IGxpc3QgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhhbmRsZXIubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgcmV0dXJuX3ZhbCA9IGhhbmRsZXJbaV1bZnVuY05hbWVdLmFwcGx5KGhhbmRsZXJbaV0sIGFyZ3MpO1xuICAgIGlmICh0eXBlb2YgcmV0dXJuX3ZhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbGlzdC5wdXNoKHJldHVybl92YWwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChsaXN0KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_events.js\n\n}");
|
|
58
58
|
|
|
59
59
|
/***/ },
|
|
60
60
|
|
|
@@ -64,7 +64,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
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_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\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 globalRootController: null,\n _isInit: false,\n _origin_trigger: null,\n _globalControllerClasses: [],\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 app.globalRootController = app.globalRootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n }\n app.tagNames = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.tagList)();\n const $globalDiv = $(\"<div></div>\");\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.forEach(tagName => {\n const ControllerClass = _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][0];\n $globalDiv.append(`<${ControllerClass.prototype._tagName}></${ControllerClass.prototype._tagName}>`);\n });\n const {\n refreshProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(null, app.rootController);\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, $globalDiv, app.globalRootController, refreshProcess).then(() => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)(), app.rootController, refreshProcess).then(res => {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n return res;\n });\n });\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 app.register(Controller);\n let tagName = Controller.prototype._tagName;\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.push(tagName);\n },\n cleanCache: () => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.cleanCache)();\n },\n /**\n *\n * @param {AbstractSDC} Controller\n * @param overwrite\n */\n register: (Controller, overwrite = false) => {\n let tagName = app.controllerToTag(Controller);\n if (!_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] || overwrite) {\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 return {\n addMixin: (...mixins) => {}\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, args, $.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, controller);\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 return app.reconcile(controller, $html);\n });\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {jquery} $virtualNode\n * @param {jquery} $realNode\n * @param {Object} process - Process object containing the refresh process\n */\n reconcile: (controller, $virtualNode, $realNode = null, process = null) => {\n if (!$realNode) {\n let $temp = controller.$container.clone().empty();\n $temp.data(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY, null);\n $temp.removeClass(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS);\n $temp.append($virtualNode);\n $virtualNode = $temp;\n }\n $realNode = $realNode ?? controller.$container;\n const {\n refreshProcess,\n isRunningProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(process, controller);\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($virtualNode, controller, refreshProcess).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reconcile)($virtualNode, $realNode);\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.resetChildren)(controller);\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n return controller;\n });\n },\n /**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @return {Promise<void>}\n */\n refresh: ($dom, leafController = null) => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($dom, leafController);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q21GLFVBQVUsQ0FBQztNQUN6QixJQUFJLENBQUM2QyxnQkFBZ0IsRUFBRTtRQUNyQi9ILGtGQUE4QixDQUFDZ0UsY0FBYyxDQUFDO01BQ2hEO01BQ0EsT0FBT2tCLFVBQVU7SUFDbkIsQ0FBQyxDQUFDO0VBQ0osQ0FBQztFQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFeEYsT0FBTyxFQUFFQSxDQUFDc0ksSUFBSSxFQUFFQyxjQUFjLEdBQUcsSUFBSSxLQUFLO0lBQ3hDLE9BQU92SSxxREFBTyxDQUFDc0ksSUFBSSxFQUFFQyxjQUFjLENBQUM7RUFDdEM7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19tYWluLmpzPzA4ZmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY2FtZWxDYXNlVG9UYWdOYW1lLFxuICBnZXRCb2R5LFxuICB1cGxvYWRGaWxlRm9ybURhdGEsXG59IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuaW1wb3J0IHtcbiAgcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIsXG4gIHJlbG9hZEhUTUxDb250cm9sbGVyLFxuICBEQVRBX0NPTlRST0xMRVJfS0VZLFxuICBDT05UUk9MTEVSX0NMQVNTLFxuICBnZXRDb250cm9sbGVyLFxuICBjbGVhbkNhY2hlLFxuICByZWZyZXNoLFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RTREMgfSBmcm9tIFwiLi9BYnN0cmFjdFNEQy5qc1wiO1xuaW1wb3J0IHtcbiAgR2xvYmFsLFxuICBjb250cm9sbGVyTGlzdCxcbiAgdGFnTGlzdCxcbiAgcmVzZXRDaGlsZHJlbixcbiAgdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoLFxuICBwcmVwYXJlUmVmcmVzaFByb2Nlc3MsXG59IGZyb20gXCIuL3NkY19jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQge1xuICBpbml0RXZlbnRzLFxuICBTVERfRVZFTlRfTElTVCxcbiAgd2luZG93RXZlbnRIYW5kbGVyLFxufSBmcm9tIFwiLi9zZGNfZG9tX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHsgcmVjb25jaWxlIH0gZnJvbSBcIi4vc2RjX3ZpZXcuanNcIjtcbmltcG9ydCB7IHRyaWdnZXIgfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5pbXBvcnQgeyBpc0Nvbm5lY3RlZCwgY2xvc2UgfSBmcm9tIFwiLi9zZGNfc2VydmVyX2NhbGwuanNcIjtcblxuY29uc3QgUFJPUEVSVElFU19VUERBVEUgPSB7IGNsYXNzbmFtZTogXCJjbGFzc1wiIH07XG5cbmxldCBzZGNEb21GcmFnbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBwcm9wcykge1xuICBsZXQgJG5ld19lbGVtLFxuICAgIGlzX3NlbGYgPSBmYWxzZTtcbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsZW1lbnQpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0YWdOYW1lID0gYHRoaXMuJHtlbGVtZW50Lm5hbWV9YDtcbiAgICAkbmV3X2VsZW0gPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSkpO1xuICAgICRuZXdfZWxlbS5kYXRhKFwiaGFuZGxlclwiLCBlbGVtZW50KTtcbiAgICBpc19zZWxmID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcm9wcykge1xuICAgIE9iamVjdC5lbnRyaWVzKHByb3BzKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgIGlmIChrLnN0YXJ0c1dpdGgoXCJvblwiKSkge1xuICAgICAgICAkbmV3X2VsZW1bMF0uYWRkRXZlbnRMaXN0ZW5lcihrLnN1YnN0cmluZygyKS50b0xvd2VyQ2FzZSgpLCB2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChQUk9QRVJUSUVTX1VQREFURVtrLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgayA9IFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19lbGVtWzBdLnNldEF0dHJpYnV0ZShrLCB2KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpc19zZWxmKSB7XG4gICAgJG5ld19lbGVtLmFkZENsYXNzKFwiX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgX3dpdGhfaGFuZGxlclwiKTtcbiAgfVxuXG4gIHJldHVybiAkbmV3X2VsZW07XG59O1xuXG53aW5kb3cuc2RjRG9tID0gZnVuY3Rpb24gKHRhZ05hbWUsIHByb3BzLCAuLi5jaGlsZHJlbikge1xuICBpZiAoIXRhZ05hbWUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBjb25zdCAkbmV3X2VsZW0gPSBzZGNEb21GcmFnbWVudCh0YWdOYW1lLCBwcm9wcyk7XG4gIGZvciAoY29uc3QgYyBvZiBjaGlsZHJlbikge1xuICAgICRuZXdfZWxlbS5hcHBlbmQoYyk7XG4gIH1cbiAgcmV0dXJuICRuZXdfZWxlbTtcbn07XG5cbmV4cG9ydCBsZXQgYXBwID0ge1xuICBDU1JGX1RPS0VOOiB3aW5kb3cuQ1NSRl9UT0tFTiB8fCBcIlwiLFxuICBMQU5HVUFHRV9DT0RFOiB3aW5kb3cuTEFOR1VBR0VfQ09ERSB8fCBcImVuXCIsXG4gIERFQlVHOiB3aW5kb3cuREVCVUcgfHwgZmFsc2UsXG4gIFZFUlNJT046IHdpbmRvdy5WRVJTSU9OIHx8IFwiMC4wXCIsXG4gIHRhZ05hbWVzOiBbXSxcbiAgR2xvYmFsOiBHbG9iYWwsXG4gIHJvb3RDb250cm9sbGVyOiBudWxsLFxuICBnbG9iYWxSb290Q29udHJvbGxlcjogbnVsbCxcbiAgX2lzSW5pdDogZmFsc2UsXG4gIF9vcmlnaW5fdHJpZ2dlcjogbnVsbCxcbiAgX2dsb2JhbENvbnRyb2xsZXJDbGFzc2VzOiBbXSxcblxuICBpbml0X3NkYzogKCkgPT4ge1xuICAgIGlmICghYXBwLl9pc0luaXQpIHtcbiAgICAgIGFwcC5faXNJbml0ID0gdHJ1ZTtcbiAgICAgIGlmICghYXBwLl9vcmlnaW5fdHJpZ2dlcikge1xuICAgICAgICBhcHAuX29yaWdpbl90cmlnZ2VyID0gJC5mbi50cmlnZ2VyO1xuICAgICAgICAkLmZuLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBjb25zdCBldl90eXBlID0ge30uaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgXCJ0eXBlXCIpXG4gICAgICAgICAgICA/IGV2ZW50LnR5cGVcbiAgICAgICAgICAgIDogZXZlbnQ7XG4gICAgICAgICAgaWYgKCFTVERfRVZFTlRfTElTVC5pbmNsdWRlcyhldl90eXBlKSkge1xuICAgICAgICAgICAgU1REX0VWRU5UX0xJU1QucHVzaChldl90eXBlKTtcbiAgICAgICAgICAgICQod2luZG93KS5vbihldl90eXBlLCB3aW5kb3dFdmVudEhhbmRsZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXBwLl9vcmlnaW5fdHJpZ2dlci5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhcHAudXBkYXRlSnF1ZXJ5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9zZSgpO1xuICAgICAgfVxuXG4gICAgICBpc0Nvbm5lY3RlZCgpO1xuXG4gICAgICBpbml0RXZlbnRzKCk7XG5cbiAgICAgIGFwcC5yb290Q29udHJvbGxlciA9IGFwcC5yb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICAgIGFwcC5nbG9iYWxSb290Q29udHJvbGxlciA9IGFwcC5nbG9iYWxSb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICB9XG5cbiAgICBhcHAudGFnTmFtZXMgPSB0YWdMaXN0KCk7XG5cbiAgICBjb25zdCAkZ2xvYmFsRGl2ID0gJChcIjxkaXY+PC9kaXY+XCIpO1xuICAgIEdsb2JhbC5mb3JFYWNoKCh0YWdOYW1lKSA9PiB7XG4gICAgICBjb25zdCBDb250cm9sbGVyQ2xhc3MgPSBjb250cm9sbGVyTGlzdFt0YWdOYW1lXVswXTtcbiAgICAgICRnbG9iYWxEaXYuYXBwZW5kKFxuICAgICAgICBgPCR7Q29udHJvbGxlckNsYXNzLnByb3RvdHlwZS5fdGFnTmFtZX0+PC8ke0NvbnRyb2xsZXJDbGFzcy5wcm90b3R5cGUuX3RhZ05hbWV9PmAsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgY29uc3QgeyByZWZyZXNoUHJvY2VzcyB9ID0gcHJlcGFyZVJlZnJlc2hQcm9jZXNzKG51bGwsIGFwcC5yb290Q29udHJvbGxlcik7XG5cbiAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoXG4gICAgICBhcHAudGFnTmFtZXMsXG4gICAgICAkZ2xvYmFsRGl2LFxuICAgICAgYXBwLmdsb2JhbFJvb3RDb250cm9sbGVyLFxuICAgICAgcmVmcmVzaFByb2Nlc3MsXG4gICAgKS50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihcbiAgICAgICAgYXBwLnRhZ05hbWVzLFxuICAgICAgICBnZXRCb2R5KCksXG4gICAgICAgIGFwcC5yb290Q29udHJvbGxlcixcbiAgICAgICAgcmVmcmVzaFByb2Nlc3MsXG4gICAgICApLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICB1cGRhdGVFdmVudEFuZFRyaWdnZXJPblJlZnJlc2gocmVmcmVzaFByb2Nlc3MpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgdXBkYXRlSnF1ZXJ5OiAoKSA9PiB7XG4gICAgJC5mbi5zYWZlUmVwbGFjZSA9IGZ1bmN0aW9uICgkZWxlbSkge1xuICAgICAgcmV0dXJuIGFwcC5zYWZlUmVwbGFjZSgkKHRoaXMpLCAkZWxlbSk7XG4gICAgfTtcbiAgICAkLmZuLnNhZmVFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcHAuc2FmZUVtcHR5KCQodGhpcykpO1xuICAgIH07XG4gICAgJC5mbi5zYWZlUmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFwcC5zYWZlUmVtb3ZlKCQodGhpcykpO1xuICAgIH07XG4gIH0sXG5cbiAgY29udHJvbGxlclRvVGFnOiAoQ29udHJvbGxlcikgPT4ge1xuICAgIGxldCB0YWdOYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKENvbnRyb2xsZXIubmFtZSk7XG4gICAgcmV0dXJuIHRhZ05hbWUucmVwbGFjZSgvLWNvbnRyb2xsZXIkLywgXCJcIik7XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IENvbnRyb2xsZXJcbiAgICovXG4gIHJlZ2lzdGVyR2xvYmFsOiAoQ29udHJvbGxlcikgPT4ge1xuICAgIGFwcC5yZWdpc3RlcihDb250cm9sbGVyKTtcbiAgICBsZXQgdGFnTmFtZSA9IENvbnRyb2xsZXIucHJvdG90eXBlLl90YWdOYW1lO1xuICAgIEdsb2JhbC5wdXNoKHRhZ05hbWUpO1xuICB9LFxuXG4gIGNsZWFuQ2FjaGU6ICgpID0+IHtcbiAgICBjbGVhbkNhY2hlKCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IENvbnRyb2xsZXJcbiAgICogQHBhcmFtIG92ZXJ3cml0ZVxuICAgKi9cbiAgcmVnaXN0ZXI6IChDb250cm9sbGVyLCBvdmVyd3JpdGUgPSBmYWxzZSkgPT4ge1xuICAgIGxldCB0YWdOYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhDb250cm9sbGVyKTtcbiAgICBpZiAoIWNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdIHx8IG92ZXJ3cml0ZSkge1xuICAgICAgY29udHJvbGxlckxpc3RbdGFnTmFtZV0gPSBbQ29udHJvbGxlciwgW11dO1xuICAgICAgQ29udHJvbGxlci5wcm90b3R5cGUuX3RhZ05hbWUgPSB0YWdOYW1lO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBtaXhpbnMgQ29udHJvbGxlciB0YWcgbmFtZXNcbiAgICAgICAgICovXG4gICAgICAgIGFkZE1peGluOiAoLi4ubWl4aW5zKSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgbWl4aW4gb2YgbWl4aW5zKSB7XG4gICAgICAgICAgICBsZXQgbWl4aW5OYW1lO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtaXhpbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICBtaXhpbk5hbWUgPSBjYW1lbENhc2VUb1RhZ05hbWUobWl4aW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtaXhpbikge1xuICAgICAgICAgICAgICBtaXhpbk5hbWUgPSBhcHAuY29udHJvbGxlclRvVGFnKG1peGluKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdWzFdLnB1c2gobWl4aW5OYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWRkTWl4aW46ICguLi5taXhpbnMpID0+IHt9LFxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cbiAgcG9zdDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgIGlmICghYXJncykge1xuICAgICAgYXJncyA9IHt9O1xuICAgIH1cblxuICAgIGFyZ3MuQ1NSRl9UT0tFTiA9IGFwcC5DU1JGX1RPS0VOO1xuICAgIHJldHVybiBhcHAuYWpheChjb250cm9sbGVyLCB1cmwsIGFyZ3MsICQucG9zdCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cbiAgZ2V0OiAoY29udHJvbGxlciwgdXJsLCBhcmdzKSA9PiB7XG4gICAgcmV0dXJuIGFwcC5hamF4KGNvbnRyb2xsZXIsIHVybCwgYXJncywgJC5nZXQpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kICQuZ2V0IG9yICQucG9zdFxuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cbiAgYWpheDogKGNvbnRyb2xsZXIsIHVybCwgYXJncywgbWV0aG9kKSA9PiB7XG4gICAgaWYgKCFhcmdzKSB7XG4gICAgICBhcmdzID0ge307XG4gICAgfVxuXG4gICAgYXJncy5WRVJTSU9OID0gYXBwLlZFUlNJT047XG4gICAgYXJncy5fbWV0aG9kID0gYXJncy5fbWV0aG9kIHx8IFwiYXBpXCI7XG5cbiAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmV0dXJuIG1ldGhvZCh1cmwsIGFyZ3MpXG4gICAgICAgIC50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICBpZiAoYS5zdGF0dXMgPT09IFwicmVkaXJlY3RcIikge1xuICAgICAgICAgICAgdHJpZ2dlcihcIm9uTmF2TGlua1wiLCBhW1widXJsLWxpbmtcIl0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBhcHAucmVmcmVzaChjb250cm9sbGVyLiRjb250YWluZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwO1xuICB9LFxuXG4gIHN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3OiAoY29udHJvbGxlciwgZm9ybSwgdXJsLCBtZXRob2QpID0+IHtcbiAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgY29uc3QgcmVkaXJlY3RvciA9IChhKSA9PiB7XG4gICAgICBpZiAoYVtcInVybC1saW5rXCJdKSB7XG4gICAgICAgIHRyaWdnZXIoXCJvbk5hdkxpbmtcIiwgYVtcInVybC1saW5rXCJdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYVtcInVybFwiXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHVwbG9hZEZpbGVGb3JtRGF0YShmb3JtRGF0YSwgdXJsIHx8IGZvcm0uYWN0aW9uLCBtZXRob2QgfHwgZm9ybS5tZXRob2QpXG4gICAgICAgIC50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICBpZiAoYS5zdGF0dXMgPT09IFwicmVkaXJlY3RcIikge1xuICAgICAgICAgICAgcmVkaXJlY3RvcihhKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyLCBjb250cm9sbGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgaWYgKGEuc3RhdHVzID09PSAzMDEpIHtcbiAgICAgICAgICAgIGEgPSBhLnJlc3BvbnNlSlNPTjtcbiAgICAgICAgICAgIHJlZGlyZWN0b3IoYSk7XG4gICAgICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QoYSwgYiwgYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwO1xuICB9LFxuXG4gIHN1Ym1pdEZvcm06IChmb3JtLCB1cmwsIG1ldGhvZCkgPT4ge1xuICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCB1cmwgfHwgZm9ybS5hY3Rpb24sIG1ldGhvZCB8fCBmb3JtLm1ldGhvZClcbiAgICAgICAgLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICAgKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAgICovXG4gIGdldENvbnRyb2xsZXI6ICgkZWxlbSkgPT4gZ2V0Q29udHJvbGxlcigkZWxlbSksXG5cbiAgLyoqXG4gICAqIHNhZmVFbXB0eSByZW1vdmVzIGFsbCBjb250ZW50IG9mIGEgZG9tXG4gICAqIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICpcbiAgICogQHBhcmFtICRlbGVtIC0galF1ZXJ5IERPTSBjb250YWluZXIgdG8gYmUgZW1wdHllZFxuICAgKi9cbiAgc2FmZUVtcHR5OiAoJGVsZW0pID0+IHtcbiAgICBsZXQgJGNoaWxkcmVuID0gJGVsZW0uY2hpbGRyZW4oKTtcbiAgICAkY2hpbGRyZW4uZWFjaChmdW5jdGlvbiAoXywgZWxlbWVudCkge1xuICAgICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICAgIGFwcC5zYWZlUmVtb3ZlKCRlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogc2FmZVJlcGxhY2UgcmVtb3ZlcyBhbGwgY29udGVudCBvZiBhIGRvbVxuICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBET00gdG8gYmUgcmVwbGVhY2VkXG4gICAqIEBwYXJhbSAkbmV3IC0galF1ZXJ5IG5ldyBET00gY29udGFpbmVyXG4gICAqL1xuICBzYWZlUmVwbGFjZTogKCRlbGVtLCAkbmV3KSA9PiB7XG4gICAgJG5ldy5pbnNlcnRCZWZvcmUoJGVsZW0pO1xuICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkZWxlbSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIHNhZmVSZW1vdmUgcmVtb3ZlcyBhIGRvbSBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBEb21cbiAgICovXG4gIHNhZmVSZW1vdmU6ICgkZWxlbSkgPT4ge1xuICAgICRlbGVtLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbGV0ICR0aGlzID0gJCh0aGlzKTtcbiAgICAgIGlmICgkdGhpcy5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCkpIHtcbiAgICAgICAgJHRoaXMuZGF0YShgJHtEQVRBX0NPTlRST0xMRVJfS0VZfWApLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJGVsZW0uZmluZChgLiR7Q09OVFJPTExFUl9DTEFTU31gKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSAkKHRoaXMpLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbiAgICAgIGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci5yZW1vdmUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZWxlbS5yZW1vdmUoKTtcbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAqL1xuICByZWxvYWRDb250cm9sbGVyOiAoY29udHJvbGxlcikgPT4ge1xuICAgIHJldHVybiByZWxvYWRIVE1MQ29udHJvbGxlcihjb250cm9sbGVyKS50aGVuKChodG1sKSA9PiB7XG4gICAgICBsZXQgJGh0bWwgPSAkKGh0bWwpO1xuICAgICAgcmV0dXJuIGFwcC5yZWNvbmNpbGUoY29udHJvbGxlciwgJGh0bWwpO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEBwYXJhbSB7anF1ZXJ5fSAkdmlydHVhbE5vZGVcbiAgICogQHBhcmFtIHtqcXVlcnl9ICRyZWFsTm9kZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICAgKi9cbiAgcmVjb25jaWxlOiAoY29udHJvbGxlciwgJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUgPSBudWxsLCBwcm9jZXNzID0gbnVsbCkgPT4ge1xuICAgIGlmICghJHJlYWxOb2RlKSB7XG4gICAgICBsZXQgJHRlbXAgPSBjb250cm9sbGVyLiRjb250YWluZXIuY2xvbmUoKS5lbXB0eSgpO1xuICAgICAgJHRlbXAuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZLCBudWxsKTtcbiAgICAgICR0ZW1wLnJlbW92ZUNsYXNzKENPTlRST0xMRVJfQ0xBU1MpO1xuICAgICAgJHRlbXAuYXBwZW5kKCR2aXJ0dWFsTm9kZSk7XG4gICAgICAkdmlydHVhbE5vZGUgPSAkdGVtcDtcbiAgICB9XG5cbiAgICAkcmVhbE5vZGUgPSAkcmVhbE5vZGUgPz8gY29udHJvbGxlci4kY29udGFpbmVyO1xuXG4gICAgY29uc3QgeyByZWZyZXNoUHJvY2VzcywgaXNSdW5uaW5nUHJvY2VzcyB9ID0gcHJlcGFyZVJlZnJlc2hQcm9jZXNzKFxuICAgICAgcHJvY2VzcyxcbiAgICAgIGNvbnRyb2xsZXIsXG4gICAgKTtcblxuICAgIHJldHVybiByZWZyZXNoKCR2aXJ0dWFsTm9kZSwgY29udHJvbGxlciwgcmVmcmVzaFByb2Nlc3MpLnRoZW4oKCkgPT4ge1xuICAgICAgcmVjb25jaWxlKCR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlKTtcbiAgICAgIHJlc2V0Q2hpbGRyZW4oY29udHJvbGxlcik7XG4gICAgICBpZiAoIWlzUnVubmluZ1Byb2Nlc3MpIHtcbiAgICAgICAgdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoKHJlZnJlc2hQcm9jZXNzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250cm9sbGVyO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2pxdWVyeX0gJGRvbVxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBsZWFmQ29udHJvbGxlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcmVmcmVzaDogKCRkb20sIGxlYWZDb250cm9sbGVyID0gbnVsbCkgPT4ge1xuICAgIHJldHVybiByZWZyZXNoKCRkb20sIGxlYWZDb250cm9sbGVyKTtcbiAgfSxcbn07XG4iXSwibmFtZXMiOlsiY2FtZWxDYXNlVG9UYWdOYW1lIiwiZ2V0Qm9keSIsInVwbG9hZEZpbGVGb3JtRGF0YSIsInJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwicmVsb2FkSFRNTENvbnRyb2xsZXIiLCJEQVRBX0NPTlRST0xMRVJfS0VZIiwiQ09OVFJPTExFUl9DTEFTUyIsImdldENvbnRyb2xsZXIiLCJjbGVhbkNhY2hlIiwicmVmcmVzaCIsIkFic3RyYWN0U0RDIiwiR2xvYmFsIiwiY29udHJvbGxlckxpc3QiLCJ0YWdMaXN0IiwicmVzZXRDaGlsZHJlbiIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsInByZXBhcmVSZWZyZXNoUHJvY2VzcyIsImluaXRFdmVudHMiLCJTVERfRVZFTlRfTElTVCIsIndpbmRvd0V2ZW50SGFuZGxlciIsInJlY29uY2lsZSIsInRyaWdnZXIiLCJpc0Nvbm5lY3RlZCIsImNsb3NlIiwiUFJPUEVSVElFU19VUERBVEUiLCJjbGFzc25hbWUiLCJzZGNEb21GcmFnbWVudCIsImVsZW1lbnQiLCJwcm9wcyIsIiRuZXdfZWxlbSIsImlzX3NlbGYiLCIkIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidGFnTmFtZSIsIm5hbWUiLCJkYXRhIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrIiwidiIsInN0YXJ0c1dpdGgiLCJhZGRFdmVudExpc3RlbmVyIiwic3Vic3RyaW5nIiwidG9Mb3dlckNhc2UiLCJzZXRBdHRyaWJ1dGUiLCJhZGRDbGFzcyIsIndpbmRvdyIsInNkY0RvbSIsImNoaWxkcmVuIiwiYyIsImFwcGVuZCIsImFwcCIsIkNTUkZfVE9LRU4iLCJMQU5HVUFHRV9DT0RFIiwiREVCVUciLCJWRVJTSU9OIiwidGFnTmFtZXMiLCJyb290Q29udHJvbGxlciIsImdsb2JhbFJvb3RDb250cm9sbGVyIiwiX2lzSW5pdCIsIl9vcmlnaW5fdHJpZ2dlciIsIl9nbG9iYWxDb250cm9sbGVyQ2xhc3NlcyIsImluaXRfc2RjIiwiZm4iLCJldmVudCIsImV2X3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ0eXBlIiwiaW5jbHVkZXMiLCJwdXNoIiwib24iLCJ1cGRhdGVKcXVlcnkiLCIkZ2xvYmFsRGl2IiwiQ29udHJvbGxlckNsYXNzIiwicHJvdG90eXBlIiwiX3RhZ05hbWUiLCJyZWZyZXNoUHJvY2VzcyIsInRoZW4iLCJyZXMiLCJzYWZlUmVwbGFjZSIsIiRlbGVtIiwic2FmZUVtcHR5Iiwic2FmZVJlbW92ZSIsImNvbnRyb2xsZXJUb1RhZyIsIkNvbnRyb2xsZXIiLCJyZXBsYWNlIiwicmVnaXN0ZXJHbG9iYWwiLCJyZWdpc3RlciIsIm92ZXJ3cml0ZSIsImFkZE1peGluIiwibWl4aW5zIiwibWl4aW4iLCJtaXhpbk5hbWUiLCJwb3N0IiwiY29udHJvbGxlciIsInVybCIsImFyZ3MiLCJhamF4IiwiZ2V0IiwibWV0aG9kIiwiX21ldGhvZCIsInAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImEiLCJiIiwic3RhdHVzIiwiJGNvbnRhaW5lciIsImNhdGNoIiwic3VibWl0Rm9ybUFuZFVwZGF0ZVZpZXciLCJmb3JtIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsInJlZGlyZWN0b3IiLCJsb2NhdGlvbiIsImhyZWYiLCJhY3Rpb24iLCJyZXNwb25zZUpTT04iLCJzdWJtaXRGb3JtIiwiJGNoaWxkcmVuIiwiZWFjaCIsIl8iLCIkZWxlbWVudCIsIiRuZXciLCJpbnNlcnRCZWZvcmUiLCIkdGhpcyIsInJlbW92ZSIsImZpbmQiLCJyZWxvYWRDb250cm9sbGVyIiwiaHRtbCIsIiRodG1sIiwiJHZpcnR1YWxOb2RlIiwiJHJlYWxOb2RlIiwicHJvY2VzcyIsIiR0ZW1wIiwiY2xvbmUiLCJlbXB0eSIsInJlbW92ZUNsYXNzIiwiaXNSdW5uaW5nUHJvY2VzcyIsIiRkb20iLCJsZWFmQ29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_main.js\n\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\n\n\nconst PROPERTIES_UPDATE = { 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\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\n if (is_self) {\n $new_elem.addClass(\"_bind_to_update_handler _with_handler\");\n }\n\n return $new_elem;\n};\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};\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 globalRootController: null,\n _isInit: false,\n _origin_trigger: null,\n _globalControllerClasses: [],\n\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\")\n ? event.type\n : 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\n app.updateJquery();\n } else {\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.close)();\n }\n\n ;(0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.isConnected)();\n\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.initEvents)();\n\n app.rootController = app.rootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n app.globalRootController = app.globalRootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n }\n\n app.tagNames = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.tagList)();\n\n const $globalDiv = $(\"<div></div>\");\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.forEach((tagName) => {\n const ControllerClass = _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][0];\n $globalDiv.append(\n `<${ControllerClass.prototype._tagName}></${ControllerClass.prototype._tagName}>`,\n );\n });\n\n const { refreshProcess } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(null, app.rootController);\n\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(\n app.tagNames,\n $globalDiv,\n app.globalRootController,\n refreshProcess,\n ).then(() => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(\n app.tagNames,\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)(),\n app.rootController,\n refreshProcess,\n ).then((res) => {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n return res;\n });\n });\n },\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\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 *\n * @param {AbstractSDC} Controller\n */\n registerGlobal: (Controller) => {\n app.register(Controller);\n let tagName = Controller.prototype._tagName;\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.push(tagName);\n },\n\n cleanCache: () => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.cleanCache)();\n },\n\n /**\n *\n * @param {AbstractSDC} Controller\n * @param overwrite\n */\n register: (Controller, overwrite = false) => {\n let tagName = app.controllerToTag(Controller);\n if (!_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] || overwrite) {\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [Controller, []];\n Controller.prototype._tagName = tagName;\n\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 return {\n addMixin: (...mixins) => {},\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\n args.CSRF_TOKEN = app.CSRF_TOKEN;\n return app.ajax(controller, url, args, $.post);\n },\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 *\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\n args.VERSION = app.VERSION;\n args._method = args._method || \"api\";\n\n const p = new Promise((resolve, reject) => {\n return method(url, args)\n .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 })\n .catch(reject);\n });\n\n return p;\n },\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\n const p = new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method)\n .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, controller);\n });\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\n return p;\n },\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)\n .then(resolve)\n .catch(reject);\n });\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 /**\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\n return $elem;\n },\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 /**\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\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\n return $elem.remove();\n },\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 return app.reconcile(controller, $html);\n });\n },\n\n /**\n *\n * @param {AbstractSDC} controller\n * @param {jquery} $virtualNode\n * @param {jquery} $realNode\n * @param {Object} process - Process object containing the refresh process\n */\n reconcile: (controller, $virtualNode, $realNode = null, process = null) => {\n if (!$realNode) {\n let $temp = controller.$container.clone().empty();\n $temp.data(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY, null);\n $temp.removeClass(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS);\n $temp.append($virtualNode);\n $virtualNode = $temp;\n }\n\n $realNode = $realNode ?? controller.$container;\n\n const { refreshProcess, isRunningProcess } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(\n process,\n controller,\n );\n\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($virtualNode, controller, refreshProcess).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reconcile)($virtualNode, $realNode);\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.resetChildren)(controller);\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n return controller;\n });\n },\n\n /**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @return {Promise<void>}\n */\n refresh: ($dom, leafController = null) => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($dom, leafController);\n },\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFhLFFBQVE7QUFDckIsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw2REFBbUI7QUFDcEMsd0JBQXdCLDBEQUFnQjtBQUN4QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsWUFBWSxtQ0FBbUMsRUFBRSx5RUFBcUI7QUFDdEU7QUFDQTtBQUNBOztBQUVBLFdBQVcscURBQU87QUFDbEIsTUFBTSx1REFBUztBQUNmLE1BQU0saUVBQWE7QUFDbkI7QUFDQSxRQUFRLGtGQUE4QjtBQUN0QztBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLGFBQWE7QUFDMUIsY0FBYztBQUNkO0FBQ0E7QUFDQSxXQUFXLHFEQUFPO0FBQ2xCLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfbWFpbi5qcz8xNzgzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNhbWVsQ2FzZVRvVGFnTmFtZSxcbiAgZ2V0Qm9keSxcbiAgdXBsb2FkRmlsZUZvcm1EYXRhLFxufSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyLFxuICByZWxvYWRIVE1MQ29udHJvbGxlcixcbiAgREFUQV9DT05UUk9MTEVSX0tFWSxcbiAgQ09OVFJPTExFUl9DTEFTUyxcbiAgZ2V0Q29udHJvbGxlcixcbiAgY2xlYW5DYWNoZSxcbiAgcmVmcmVzaCxcbn0gZnJvbSBcIi4vc2RjX3ZpZXcuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0U0RDIH0gZnJvbSBcIi4vQWJzdHJhY3RTREMuanNcIjtcbmltcG9ydCB7XG4gIEdsb2JhbCxcbiAgY29udHJvbGxlckxpc3QsXG4gIHRhZ0xpc3QsXG4gIHJlc2V0Q2hpbGRyZW4sXG4gIHVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCxcbiAgcHJlcGFyZVJlZnJlc2hQcm9jZXNzLFxufSBmcm9tIFwiLi9zZGNfY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IHtcbiAgaW5pdEV2ZW50cyxcbiAgU1REX0VWRU5UX0xJU1QsXG4gIHdpbmRvd0V2ZW50SGFuZGxlcixcbn0gZnJvbSBcIi4vc2RjX2RvbV9ldmVudHMuanNcIjtcbmltcG9ydCB7IHJlY29uY2lsZSB9IGZyb20gXCIuL3NkY192aWV3LmpzXCI7XG5pbXBvcnQgeyB0cmlnZ2VyIH0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHsgaXNDb25uZWN0ZWQsIGNsb3NlIH0gZnJvbSBcIi4vc2RjX3NlcnZlcl9jYWxsLmpzXCI7XG5cbmNvbnN0IFBST1BFUlRJRVNfVVBEQVRFID0geyBjbGFzc25hbWU6IFwiY2xhc3NcIiB9O1xuXG5sZXQgc2RjRG9tRnJhZ21lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgcHJvcHMpIHtcbiAgbGV0ICRuZXdfZWxlbSxcbiAgICBpc19zZWxmID0gZmFsc2U7XG4gIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICRuZXdfZWxlbSA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbGVtZW50KSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdGFnTmFtZSA9IGB0aGlzLiR7ZWxlbWVudC5uYW1lfWA7XG4gICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpKTtcbiAgICAkbmV3X2VsZW0uZGF0YShcImhhbmRsZXJcIiwgZWxlbWVudCk7XG4gICAgaXNfc2VsZiA9IHRydWU7XG4gIH1cblxuICBpZiAocHJvcHMpIHtcbiAgICBPYmplY3QuZW50cmllcyhwcm9wcykuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICBpZiAoay5zdGFydHNXaXRoKFwib25cIikpIHtcbiAgICAgICAgJG5ld19lbGVtWzBdLmFkZEV2ZW50TGlzdGVuZXIoay5zdWJzdHJpbmcoMikudG9Mb3dlckNhc2UoKSwgdik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoUFJPUEVSVElFU19VUERBVEVbay50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgIGsgPSBQUk9QRVJUSUVTX1VQREFURVtrLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG4gICAgICAgICRuZXdfZWxlbVswXS5zZXRBdHRyaWJ1dGUoaywgdik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXNfc2VsZikge1xuICAgICRuZXdfZWxlbS5hZGRDbGFzcyhcIl9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyIF93aXRoX2hhbmRsZXJcIik7XG4gIH1cblxuICByZXR1cm4gJG5ld19lbGVtO1xufTtcblxud2luZG93LnNkY0RvbSA9IGZ1bmN0aW9uICh0YWdOYW1lLCBwcm9wcywgLi4uY2hpbGRyZW4pIHtcbiAgaWYgKCF0YWdOYW1lKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgY29uc3QgJG5ld19lbGVtID0gc2RjRG9tRnJhZ21lbnQodGFnTmFtZSwgcHJvcHMpO1xuICBmb3IgKGNvbnN0IGMgb2YgY2hpbGRyZW4pIHtcbiAgICAkbmV3X2VsZW0uYXBwZW5kKGMpO1xuICB9XG4gIHJldHVybiAkbmV3X2VsZW07XG59O1xuXG5leHBvcnQgbGV0IGFwcCA9IHtcbiAgQ1NSRl9UT0tFTjogd2luZG93LkNTUkZfVE9LRU4gfHwgXCJcIixcbiAgTEFOR1VBR0VfQ09ERTogd2luZG93LkxBTkdVQUdFX0NPREUgfHwgXCJlblwiLFxuICBERUJVRzogd2luZG93LkRFQlVHIHx8IGZhbHNlLFxuICBWRVJTSU9OOiB3aW5kb3cuVkVSU0lPTiB8fCBcIjAuMFwiLFxuICB0YWdOYW1lczogW10sXG4gIEdsb2JhbDogR2xvYmFsLFxuICByb290Q29udHJvbGxlcjogbnVsbCxcbiAgZ2xvYmFsUm9vdENvbnRyb2xsZXI6IG51bGwsXG4gIF9pc0luaXQ6IGZhbHNlLFxuICBfb3JpZ2luX3RyaWdnZXI6IG51bGwsXG4gIF9nbG9iYWxDb250cm9sbGVyQ2xhc3NlczogW10sXG5cbiAgaW5pdF9zZGM6ICgpID0+IHtcbiAgICBpZiAoIWFwcC5faXNJbml0KSB7XG4gICAgICBhcHAuX2lzSW5pdCA9IHRydWU7XG4gICAgICBpZiAoIWFwcC5fb3JpZ2luX3RyaWdnZXIpIHtcbiAgICAgICAgYXBwLl9vcmlnaW5fdHJpZ2dlciA9ICQuZm4udHJpZ2dlcjtcbiAgICAgICAgJC5mbi50cmlnZ2VyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgY29uc3QgZXZfdHlwZSA9IHt9Lmhhc093blByb3BlcnR5LmNhbGwoZXZlbnQsIFwidHlwZVwiKVxuICAgICAgICAgICAgPyBldmVudC50eXBlXG4gICAgICAgICAgICA6IGV2ZW50O1xuICAgICAgICAgIGlmICghU1REX0VWRU5UX0xJU1QuaW5jbHVkZXMoZXZfdHlwZSkpIHtcbiAgICAgICAgICAgIFNURF9FVkVOVF9MSVNULnB1c2goZXZfdHlwZSk7XG4gICAgICAgICAgICAkKHdpbmRvdykub24oZXZfdHlwZSwgd2luZG93RXZlbnRIYW5kbGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFwcC5fb3JpZ2luX3RyaWdnZXIuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYXBwLnVwZGF0ZUpxdWVyeSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xvc2UoKTtcbiAgICAgIH1cblxuICAgICAgaXNDb25uZWN0ZWQoKTtcblxuICAgICAgaW5pdEV2ZW50cygpO1xuXG4gICAgICBhcHAucm9vdENvbnRyb2xsZXIgPSBhcHAucm9vdENvbnRyb2xsZXIgfHwgbmV3IEFic3RyYWN0U0RDKCk7XG4gICAgICBhcHAuZ2xvYmFsUm9vdENvbnRyb2xsZXIgPSBhcHAuZ2xvYmFsUm9vdENvbnRyb2xsZXIgfHwgbmV3IEFic3RyYWN0U0RDKCk7XG4gICAgfVxuXG4gICAgYXBwLnRhZ05hbWVzID0gdGFnTGlzdCgpO1xuXG4gICAgY29uc3QgJGdsb2JhbERpdiA9ICQoXCI8ZGl2PjwvZGl2PlwiKTtcbiAgICBHbG9iYWwuZm9yRWFjaCgodGFnTmFtZSkgPT4ge1xuICAgICAgY29uc3QgQ29udHJvbGxlckNsYXNzID0gY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMF07XG4gICAgICAkZ2xvYmFsRGl2LmFwcGVuZChcbiAgICAgICAgYDwke0NvbnRyb2xsZXJDbGFzcy5wcm90b3R5cGUuX3RhZ05hbWV9PjwvJHtDb250cm9sbGVyQ2xhc3MucHJvdG90eXBlLl90YWdOYW1lfT5gLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgcmVmcmVzaFByb2Nlc3MgfSA9IHByZXBhcmVSZWZyZXNoUHJvY2VzcyhudWxsLCBhcHAucm9vdENvbnRyb2xsZXIpO1xuXG4gICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKFxuICAgICAgYXBwLnRhZ05hbWVzLFxuICAgICAgJGdsb2JhbERpdixcbiAgICAgIGFwcC5nbG9iYWxSb290Q29udHJvbGxlcixcbiAgICAgIHJlZnJlc2hQcm9jZXNzLFxuICAgICkudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoXG4gICAgICAgIGFwcC50YWdOYW1lcyxcbiAgICAgICAgZ2V0Qm9keSgpLFxuICAgICAgICBhcHAucm9vdENvbnRyb2xsZXIsXG4gICAgICAgIHJlZnJlc2hQcm9jZXNzLFxuICAgICAgKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoKHJlZnJlc2hQcm9jZXNzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuXG4gIHVwZGF0ZUpxdWVyeTogKCkgPT4ge1xuICAgICQuZm4uc2FmZVJlcGxhY2UgPSBmdW5jdGlvbiAoJGVsZW0pIHtcbiAgICAgIHJldHVybiBhcHAuc2FmZVJlcGxhY2UoJCh0aGlzKSwgJGVsZW0pO1xuICAgIH07XG4gICAgJC5mbi5zYWZlRW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYXBwLnNhZmVFbXB0eSgkKHRoaXMpKTtcbiAgICB9O1xuICAgICQuZm4uc2FmZVJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkKHRoaXMpKTtcbiAgICB9O1xuICB9LFxuXG4gIGNvbnRyb2xsZXJUb1RhZzogKENvbnRyb2xsZXIpID0+IHtcbiAgICBsZXQgdGFnTmFtZSA9IGNhbWVsQ2FzZVRvVGFnTmFtZShDb250cm9sbGVyLm5hbWUpO1xuICAgIHJldHVybiB0YWdOYW1lLnJlcGxhY2UoLy1jb250cm9sbGVyJC8sIFwiXCIpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAqL1xuICByZWdpc3Rlckdsb2JhbDogKENvbnRyb2xsZXIpID0+IHtcbiAgICBhcHAucmVnaXN0ZXIoQ29udHJvbGxlcik7XG4gICAgbGV0IHRhZ05hbWUgPSBDb250cm9sbGVyLnByb3RvdHlwZS5fdGFnTmFtZTtcbiAgICBHbG9iYWwucHVzaCh0YWdOYW1lKTtcbiAgfSxcblxuICBjbGVhbkNhY2hlOiAoKSA9PiB7XG4gICAgY2xlYW5DYWNoZSgpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAqIEBwYXJhbSBvdmVyd3JpdGVcbiAgICovXG4gIHJlZ2lzdGVyOiAoQ29udHJvbGxlciwgb3ZlcndyaXRlID0gZmFsc2UpID0+IHtcbiAgICBsZXQgdGFnTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcoQ29udHJvbGxlcik7XG4gICAgaWYgKCFjb250cm9sbGVyTGlzdFt0YWdOYW1lXSB8fCBvdmVyd3JpdGUpIHtcbiAgICAgIGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdID0gW0NvbnRyb2xsZXIsIFtdXTtcbiAgICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl90YWdOYW1lID0gdGFnTmFtZTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gbWl4aW5zIENvbnRyb2xsZXIgdGFnIG5hbWVzXG4gICAgICAgICAqL1xuICAgICAgICBhZGRNaXhpbjogKC4uLm1peGlucykgPT4ge1xuICAgICAgICAgIGZvciAobGV0IG1peGluIG9mIG1peGlucykge1xuICAgICAgICAgICAgbGV0IG1peGluTmFtZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWl4aW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgbWl4aW5OYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKG1peGluKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWl4aW4pIHtcbiAgICAgICAgICAgICAgbWl4aW5OYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhtaXhpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250cm9sbGVyTGlzdFt0YWdOYW1lXVsxXS5wdXNoKG1peGluTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZE1peGluOiAoLi4ubWl4aW5zKSA9PiB7fSxcbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIHBvc3Q6IChjb250cm9sbGVyLCB1cmwsIGFyZ3MpID0+IHtcbiAgICBpZiAoIWFyZ3MpIHtcbiAgICAgIGFyZ3MgPSB7fTtcbiAgICB9XG5cbiAgICBhcmdzLkNTUkZfVE9LRU4gPSBhcHAuQ1NSRl9UT0tFTjtcbiAgICByZXR1cm4gYXBwLmFqYXgoY29udHJvbGxlciwgdXJsLCBhcmdzLCAkLnBvc3QpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGdldDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgIHJldHVybiBhcHAuYWpheChjb250cm9sbGVyLCB1cmwsIGFyZ3MsICQuZ2V0KTtcbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCAkLmdldCBvciAkLnBvc3RcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGFqYXg6IChjb250cm9sbGVyLCB1cmwsIGFyZ3MsIG1ldGhvZCkgPT4ge1xuICAgIGlmICghYXJncykge1xuICAgICAgYXJncyA9IHt9O1xuICAgIH1cblxuICAgIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICAgIGFyZ3MuX21ldGhvZCA9IGFyZ3MuX21ldGhvZCB8fCBcImFwaVwiO1xuXG4gICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJldHVybiBtZXRob2QodXJsLCBhcmdzKVxuICAgICAgICAudGhlbigoYSwgYiwgYykgPT4ge1xuICAgICAgICAgIHJlc29sdmUoYSwgYiwgYyk7XG4gICAgICAgICAgaWYgKGEuc3RhdHVzID09PSBcInJlZGlyZWN0XCIpIHtcbiAgICAgICAgICAgIHRyaWdnZXIoXCJvbk5hdkxpbmtcIiwgYVtcInVybC1saW5rXCJdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcDtcbiAgfSxcblxuICBzdWJtaXRGb3JtQW5kVXBkYXRlVmlldzogKGNvbnRyb2xsZXIsIGZvcm0sIHVybCwgbWV0aG9kKSA9PiB7XG4gICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm0pO1xuICAgIGNvbnN0IHJlZGlyZWN0b3IgPSAoYSkgPT4ge1xuICAgICAgaWYgKGFbXCJ1cmwtbGlua1wiXSkge1xuICAgICAgICB0cmlnZ2VyKFwib25OYXZMaW5rXCIsIGFbXCJ1cmwtbGlua1wiXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGFbXCJ1cmxcIl07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHAgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB1cGxvYWRGaWxlRm9ybURhdGEoZm9ybURhdGEsIHVybCB8fCBmb3JtLmFjdGlvbiwgbWV0aG9kIHx8IGZvcm0ubWV0aG9kKVxuICAgICAgICAudGhlbigoYSwgYiwgYykgPT4ge1xuICAgICAgICAgIHJlc29sdmUoYSwgYiwgYyk7XG4gICAgICAgICAgaWYgKGEuc3RhdHVzID09PSBcInJlZGlyZWN0XCIpIHtcbiAgICAgICAgICAgIHJlZGlyZWN0b3IoYSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGFwcC5yZWZyZXNoKGNvbnRyb2xsZXIuJGNvbnRhaW5lciwgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoYSwgYiwgYykgPT4ge1xuICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gMzAxKSB7XG4gICAgICAgICAgICBhID0gYS5yZXNwb25zZUpTT047XG4gICAgICAgICAgICByZWRpcmVjdG9yKGEpO1xuICAgICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGEsIGIsIGMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcDtcbiAgfSxcblxuICBzdWJtaXRGb3JtOiAoZm9ybSwgdXJsLCBtZXRob2QpID0+IHtcbiAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHVwbG9hZEZpbGVGb3JtRGF0YShmb3JtRGF0YSwgdXJsIHx8IGZvcm0uYWN0aW9uLCBtZXRob2QgfHwgZm9ybS5tZXRob2QpXG4gICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1cbiAgICogQHJldHVybiB7QWJzdHJhY3RTREN9XG4gICAqL1xuICBnZXRDb250cm9sbGVyOiAoJGVsZW0pID0+IGdldENvbnRyb2xsZXIoJGVsZW0pLFxuXG4gIC8qKlxuICAgKiBzYWZlRW1wdHkgcmVtb3ZlcyBhbGwgY29udGVudCBvZiBhIGRvbVxuICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBET00gY29udGFpbmVyIHRvIGJlIGVtcHR5ZWRcbiAgICovXG4gIHNhZmVFbXB0eTogKCRlbGVtKSA9PiB7XG4gICAgbGV0ICRjaGlsZHJlbiA9ICRlbGVtLmNoaWxkcmVuKCk7XG4gICAgJGNoaWxkcmVuLmVhY2goZnVuY3Rpb24gKF8sIGVsZW1lbnQpIHtcbiAgICAgIGxldCAkZWxlbWVudCA9ICQoZWxlbWVudCk7XG4gICAgICBhcHAuc2FmZVJlbW92ZSgkZWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIHNhZmVSZXBsYWNlIHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICogYW5kIGRlbGV0ZXMgYWxsIGNoaWxkIGNvbnRyb2xsZXIgc2FmZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIHRvIGJlIHJlcGxlYWNlZFxuICAgKiBAcGFyYW0gJG5ldyAtIGpRdWVyeSBuZXcgRE9NIGNvbnRhaW5lclxuICAgKi9cbiAgc2FmZVJlcGxhY2U6ICgkZWxlbSwgJG5ldykgPT4ge1xuICAgICRuZXcuaW5zZXJ0QmVmb3JlKCRlbGVtKTtcbiAgICByZXR1cm4gYXBwLnNhZmVSZW1vdmUoJGVsZW0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBzYWZlUmVtb3ZlIHJlbW92ZXMgYSBkb20gYW5kIGRlbGV0ZXMgYWxsIGNoaWxkIGNvbnRyb2xsZXIgc2FmZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRG9tXG4gICAqL1xuICBzYWZlUmVtb3ZlOiAoJGVsZW0pID0+IHtcbiAgICAkZWxlbS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCAkdGhpcyA9ICQodGhpcyk7XG4gICAgICBpZiAoJHRoaXMuZGF0YShgJHtEQVRBX0NPTlRST0xMRVJfS0VZfWApKSB7XG4gICAgICAgICR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgICRlbGVtLmZpbmQoYC4ke0NPTlRST0xMRVJfQ0xBU1N9YCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb250cm9sbGVyID0gJCh0aGlzKS5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCk7XG4gICAgICBjb250cm9sbGVyICYmIGNvbnRyb2xsZXIucmVtb3ZlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGVsZW0ucmVtb3ZlKCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICogQHJldHVybiB7UHJvbWlzZTxqUXVlcnk+fVxuICAgKi9cbiAgcmVsb2FkQ29udHJvbGxlcjogKGNvbnRyb2xsZXIpID0+IHtcbiAgICByZXR1cm4gcmVsb2FkSFRNTENvbnRyb2xsZXIoY29udHJvbGxlcikudGhlbigoaHRtbCkgPT4ge1xuICAgICAgbGV0ICRodG1sID0gJChodG1sKTtcbiAgICAgIHJldHVybiBhcHAucmVjb25jaWxlKGNvbnRyb2xsZXIsICRodG1sKTtcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge2pxdWVyeX0gJHZpcnR1YWxOb2RlXG4gICAqIEBwYXJhbSB7anF1ZXJ5fSAkcmVhbE5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAgICovXG4gIHJlY29uY2lsZTogKGNvbnRyb2xsZXIsICR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlID0gbnVsbCwgcHJvY2VzcyA9IG51bGwpID0+IHtcbiAgICBpZiAoISRyZWFsTm9kZSkge1xuICAgICAgbGV0ICR0ZW1wID0gY29udHJvbGxlci4kY29udGFpbmVyLmNsb25lKCkuZW1wdHkoKTtcbiAgICAgICR0ZW1wLmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSwgbnVsbCk7XG4gICAgICAkdGVtcC5yZW1vdmVDbGFzcyhDT05UUk9MTEVSX0NMQVNTKTtcbiAgICAgICR0ZW1wLmFwcGVuZCgkdmlydHVhbE5vZGUpO1xuICAgICAgJHZpcnR1YWxOb2RlID0gJHRlbXA7XG4gICAgfVxuXG4gICAgJHJlYWxOb2RlID0gJHJlYWxOb2RlID8/IGNvbnRyb2xsZXIuJGNvbnRhaW5lcjtcblxuICAgIGNvbnN0IHsgcmVmcmVzaFByb2Nlc3MsIGlzUnVubmluZ1Byb2Nlc3MgfSA9IHByZXBhcmVSZWZyZXNoUHJvY2VzcyhcbiAgICAgIHByb2Nlc3MsXG4gICAgICBjb250cm9sbGVyLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVmcmVzaCgkdmlydHVhbE5vZGUsIGNvbnRyb2xsZXIsIHJlZnJlc2hQcm9jZXNzKS50aGVuKCgpID0+IHtcbiAgICAgIHJlY29uY2lsZSgkdmlydHVhbE5vZGUsICRyZWFsTm9kZSk7XG4gICAgICByZXNldENoaWxkcmVuKGNvbnRyb2xsZXIpO1xuICAgICAgaWYgKCFpc1J1bm5pbmdQcm9jZXNzKSB7XG4gICAgICAgIHVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaChyZWZyZXNoUHJvY2Vzcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udHJvbGxlcjtcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtqcXVlcnl9ICRkb21cbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gbGVhZkNvbnRyb2xsZXJcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHJlZnJlc2g6ICgkZG9tLCBsZWFmQ29udHJvbGxlciA9IG51bGwpID0+IHtcbiAgICByZXR1cm4gcmVmcmVzaCgkZG9tLCBsZWFmQ29udHJvbGxlcik7XG4gIH0sXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_main.js\n\n}");
|
|
68
68
|
|
|
69
69
|
/***/ },
|
|
70
70
|
|
|
@@ -74,7 +74,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
74
74
|
\*******************************************/
|
|
75
75
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
76
76
|
|
|
77
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SdcQuerySet: () => (/* binding */ SdcQuerySet),\n/* harmony export */ \"default\": () => (/* binding */ SdcModel)\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_socket_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\n\n\nconst MAX_FILE_UPLOAD = 25000;\nconst CONNECTING_REQUEST_ID = \"_connecting_process\";\nconst cloneObject = original => {\n return Object.assign(Object.create(Object.getPrototypeOf(original)), structuredClone(original));\n};\nclass SdcModelError extends Error {\n constructor(props) {\n if (typeof props === 'string') {\n props = {\n msg: props,\n is_error: true,\n header: 'Error'\n };\n }\n super(props.msg);\n this.msg = props.msg;\n this.header = props.header;\n this.is_error = props.is_error;\n this.html = props.html;\n }\n}\nclass FileLoaded {\n constructor({\n name,\n url\n }) {\n this.name = name;\n this.url = url;\n this.content = null;\n }\n async load(force = false) {\n if (force || !this.content) {\n this.content = await new Promise((resolve, reject) => {\n $.get(this.url).then(resolve).catch(() => {\n resolve('');\n });\n });\n }\n return this.content;\n }\n async text() {\n return this.load();\n }\n static isValid(value) {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) && !(value instanceof File) && typeof value.url === \"string\" && typeof value.name === \"string\";\n }\n}\n\n/**\n * Normalize an incoming primary key value.\n *\n * `-1` is used throughout this module as the sentinel for \"new object / no pk\".\n *\n * @param {*} pk\n * @returns {number}\n */\nfunction normalizePk(pk) {\n const normalizedPk = parseInt(pk ?? -1, 10);\n return Number.isNaN(normalizedPk) ? -1 : normalizedPk;\n}\nclass SdcQuerySet {\n /**\n * Lightweight client-side collection wrapper around the SDC model websocket.\n *\n * The queryset exposes array-like access through a proxy while also keeping\n * track of socket state and outstanding requests for that model.\n *\n * @param {string} modelName\n * @param {object} modelQuery\n */\n constructor(modelName, modelQuery = {}) {\n this.valuesList = [];\n this.loaded = false;\n this.modelName = modelName;\n this.modelQuery = modelQuery ?? {};\n this._onNoOpenRequests = [];\n this._isConnected = false;\n this._isConnectingProcess = false;\n this._autoReconnect = true;\n this.socket = null;\n // Request resolvers are stored by websocket event id until the server responds.\n this.openRequest = {};\n this.modelId = 0;\n this.onUpdate = () => {};\n this.onCreate = () => {};\n return new Proxy(this, {\n get(target, prop) {\n if (typeof prop !== \"symbol\" && !isNaN(prop)) {\n return target.valuesList[prop];\n }\n return target[prop];\n },\n set(target, prop, value) {\n if (!isNaN(prop)) {\n target.valuesList[prop] = value;\n return true;\n }\n target[prop] = value;\n return true;\n }\n });\n }\n [Symbol.iterator]() {\n let idx = -1;\n return {\n next: () => {\n ++idx;\n if (idx < this.valuesList.length) {\n return {\n value: this.valuesList[idx],\n done: false\n };\n }\n return {\n value: null,\n done: true\n };\n }\n };\n }\n set on_create(handler) {\n this.onCreate = handler;\n }\n set on_update(handler) {\n this.onUpdate = handler;\n }\n\n /**\n *\n *\n * @param {Array<integr|string>|integer|SdcModel|SdcQuerySet|string} ids\n */\n setIds(ids) {\n const vl = this._setIds(ids);\n const filter = {\n id__in: vl.map(x => x.id)\n };\n this.setFilter(filter);\n return vl;\n }\n\n /**\n *\n *\n * @param {Array<integr|string>|integer|SdcModel|SdcQuerySet|string} ids\n */\n cloneObject;\n _setIds(ids) {\n if (ids === null || ids === \"\" || Array.isArray(ids) && ids.length === 0) {\n this.valuesList = [];\n return this.valuesList;\n } else if (ids instanceof SdcQuerySet) {\n this.valuesList = ids.valuesList.map(cloneObject);\n this.valuesList.forEach(value => value._setQuerySet(this, true));\n return this.valuesList;\n } else if (ids instanceof SdcModel) {\n this.valuesList = [cloneObject(ids)];\n this.valuesList.forEach(value => value._setQuerySet(this, true));\n return this.valuesList;\n }\n let numList,\n numId = Number.NaN;\n if (Number.isInteger(ids)) {\n numId = ids;\n } else if (ids instanceof Array) {\n const tempNumList = ids.map(x => parseInt(x));\n if (!tempNumList.some(Number.isNaN)) {\n numList = tempNumList;\n }\n } else if (typeof ids === \"string\") {\n const tempNumList = ids.split(',').map(x => parseInt(x));\n if (!tempNumList.some(Number.isNaN)) {\n numList = tempNumList;\n } else {\n numId = parseInt(ids);\n }\n }\n if (!Number.isNaN(numId)) {\n this.valuesList = this.valuesList.filter(item => numId === item.id);\n if (this.valuesList.length === 0) {\n const newModel = this.new();\n newModel.id = numId;\n }\n } else if (numList) {\n this.valuesList = this.valuesList.filter(item => numList.includes(item.id));\n const valueIds = this.getIds();\n numList.filter(x => !valueIds.includes(x)).forEach(id => {\n this.valuesList.push(new ((0,_sdc_socket_js__WEBPACK_IMPORTED_MODULE_1__.getModel)(this.modelName))({\n id\n }));\n });\n }\n return this.valuesList;\n }\n getIds() {\n return this.valuesList.map(x => x.id);\n }\n\n /**\n * Number of model instances currently present in the queryset cache.\n *\n * @returns {number}\n */\n get length() {\n return this.valuesList.length;\n }\n\n /**\n * Resolve a model instance by id, loading the queryset first if needed.\n *\n * @param {*} id\n * @returns {SdcModel|null}\n */\n byId(id) {\n if (id !== null) {\n const normalizedId = normalizePk(id);\n return this.valuesList.find(elm => elm.id === normalizedId) ?? null;\n }\n return null;\n }\n\n /**\n * Merge additional query constraints into the current queryset.\n *\n * @param {object} modelQuery\n * @returns {SdcQuerySet}\n */\n setFilter(modelQuery) {\n this.modelQuery = modelQuery;\n return this;\n }\n addFilter(modelQuery) {\n this.modelQuery = Object.assign({}, this.modelQuery, modelQuery);\n return this;\n }\n\n /**\n * @param {?object} values\n * @returns {SdcModel}\n */\n new(values = {}) {\n const newModel = new ((0,_sdc_socket_js__WEBPACK_IMPORTED_MODULE_1__.getModel)(this.modelName))(values);\n newModel._setQuerySet(this, false);\n this.valuesList.push(newModel);\n return newModel;\n }\n\n /**\n * Load model instances matching the current query into the queryset cache.\n *\n * @param {?object} modelQuery\n * @returns {Promise<SdcQuerySet>}\n */\n load(modelQuery = null) {\n this.valuesList = [];\n this.modelQuery = modelQuery ?? this.modelQuery;\n return this._sendLoad();\n }\n\n /**\n * Load model instances matching the current query into the queryset cache.\n *\n * @param {?object} modelQuery\n * @param {?SdcModel} item\n * @returns {Promise<SdcQuerySet>}\n */\n update({\n modelQuery = null,\n item = null\n }) {\n this.modelQuery = modelQuery ?? this.modelQuery;\n let loadQuery = item ? {\n id: item.id\n } : this.modelQuery;\n return this._sendLoad(loadQuery);\n }\n\n /**\n *\n * @param pk {integr}\n * @param elem {SdcModel}\n * @returns {Promise<unknown>}\n */\n delete({\n pk = null,\n id = null,\n elem = null\n }) {\n pk ??= id;\n pk = !elem ? pk : elem.id;\n if (pk === null) {\n throw new Error(\"pk or elem must be set\");\n }\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.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,\n args: {\n model_name: this.modelName,\n model_query: this.modelQuery,\n id: pk,\n pk\n }\n }));\n this.openRequest[event_id] = [resolve, reject];\n });\n });\n }\n\n /**\n * Request the server-side queryset data over the model websocket.\n *\n * @returns {Promise<*>}\n */\n _sendLoad(loadQuery = null) {\n return this.isConnected().then(() => {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: \"load\",\n event_id,\n args: {\n model_name: this.modelName,\n model_query: loadQuery ?? this.modelQuery\n }\n }));\n this.openRequest[event_id] = [data => {\n this.loaded = true;\n resolve(data);\n }, reject];\n });\n });\n }\n\n /**\n * Render the list-view endpoint for the current model.\n *\n * @param {object} options\n * @returns {*}\n */\n _sendListView({\n modelQuery = {},\n cbResolve = null,\n cbReject = null,\n templateContext = {}\n }) {\n return this.view({\n modelQuery,\n cbResolve,\n cbReject,\n templateContext,\n eventType: \"list_view\"\n });\n }\n\n /**\n * Render a named model view and append its HTML to a container element.\n *\n * @param {object} options\n * @returns {*}\n */\n view({\n viewName = \"html_list_template\",\n modelQuery = {},\n cbResolve = null,\n cbReject = null,\n templateContext = {},\n eventType = \"named_view\"\n }) {\n let $divList = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: eventType,\n event_id,\n args: {\n view_name: viewName,\n model_name: this.modelName,\n model_query: modelQuery,\n template_context: templateContext\n }\n }));\n this.openRequest[event_id] = [data => {\n $divList.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.refresh($divList);\n cbResolve && cbResolve(data);\n }, res => {\n cbReject && cbReject(res);\n }];\n });\n return $divList;\n }\n\n /**\n * Render the detail-view endpoint for a single model instance.\n *\n * @param {object} options\n * @returns {*}\n */\n _sendDetailView({\n pk = null,\n id = null,\n cbResolve = null,\n cbReject = null,\n templateContext = {}\n }) {\n pk ??= id;\n pk = normalizePk(pk);\n let $divList = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: \"detail_view\",\n event_id,\n args: {\n model_name: this.modelName,\n model_query: this.modelQuery,\n id: pk,\n pk,\n template_context: templateContext\n }\n }));\n this.openRequest[event_id] = [data => {\n $divList.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.refresh($divList);\n cbResolve && cbResolve(data);\n }, res => {\n cbReject && cbReject(res);\n }];\n });\n return $divList;\n }\n\n /**\n * Fetch a model form fragment and attach the SDC form metadata expected by\n * the rest of the client.\n *\n * @param {string} eventType\n * @param {SdcModel} modelObj\n * @param formName\n * @param $divForm\n * @param cbResolve\n * @param cbReject\n * @param formId\n */\n getForm({\n modelObj,\n eventType,\n formName,\n $divForm,\n cbResolve,\n cbReject,\n formId\n }) {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n const pk = modelObj.id ?? -1;\n this.isConnected().then(() => {\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: eventType,\n event_id,\n args: {\n model_name: this.modelName,\n id: pk,\n pk,\n form_name: formName\n }\n }));\n });\n const className = pk === null || pk === -1 ? \"create\" : \"edit\";\n this.openRequest[event_id] = [data => {\n $divForm.append(data.html);\n let $form = $divForm.closest(\"form\").addClass(`sdc-model-${className}-form sdc-model-form ${formId}`).data(\"model\", modelObj).data(\"model_pk\", pk).data(\"form_name\", formName);\n modelObj.addForm($form);\n if ($form.length > 0 && !$form[0].hasAttribute(\"sdc_submit\")) {\n $form.attr(\"sdc_submit\", \"submitModelFormDistributor\");\n }\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.refresh($divForm).then(() => null);\n cbResolve && cbResolve(data);\n }, res => {\n cbReject && cbReject(res);\n }];\n }\n\n /**\n * Fetch a single model instance matching the current query.\n *\n * @param {?object} modelQuery\n * @param {?boolean} doNotLoad true if modelQuery contains id or pk and object does not need to be loaded.\n * @returns {Promise<SdcModel>}\n */\n async get(modelQuery = null, doNotLoad = false) {\n if (doNotLoad) {\n const id = modelQuery?.id ?? this.modelQuery?.id;\n if (modelQuery) {\n this.setFilter(modelQuery);\n }\n return this.byId(id) ?? this.new(modelQuery || this.modelQuery);\n }\n await this.load(modelQuery);\n if (this.length !== 1) {\n throw new Error(`model query returns ${this.length} but only 1 expected.`);\n }\n this.addFilter({\n id: this.valuesList[0].id\n });\n return this.valuesList[0];\n }\n detailView({\n pk,\n cbResolve = null,\n cbReject = null,\n templateContext = {}\n }) {\n return this._sendDetailView({\n id: pk,\n cbResolve,\n cbReject,\n templateContext\n });\n }\n listView({\n modelQuery = {},\n searchValues = {},\n cbResolve = null,\n cbReject = null,\n templateContext = {}\n }) {\n return this._sendListView({\n modelQuery: Object.assign({}, this.modelQuery, modelQuery, {\n '__search_values': searchValues\n }),\n cbResolve,\n cbReject,\n templateContext\n });\n }\n save({\n pk = null,\n id = null,\n formName = \"edit_form\",\n data = null\n } = {}) {\n pk ??= id;\n const normPk = normalizePk(pk);\n return this.isConnected().then(() => {\n let elemList;\n if (normPk > -1) {\n const elem = this.byId(normPk);\n if (!elem) {\n return Promise.reject(new SdcModelError(`Element not found with ID: ${normPk}`));\n }\n elemList = [elem];\n } else {\n elemList = this.valuesList;\n }\n let pList = [];\n elemList.forEach(elem => {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n pList.push(new Promise((resolve, reject) => {\n this._readFiles(elem).then(files => {\n const sendData = data ? {\n ...data\n } : elem.serialize();\n sendData.id = elem.id;\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: \"save\",\n event_id,\n args: {\n form_name: formName,\n model_name: this.modelName,\n model_query: this.modelQuery,\n data: sendData,\n id: sendData.id,\n pk: sendData.id,\n files: files\n }\n }));\n this.openRequest[event_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(pList);\n });\n }\n\n /**\n *\n * @param elem {?SdcModel}\n * @param data {?object}\n * @returns {Promise<unknown>}\n */\n create({\n elem = null,\n data = null\n } = {}) {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n if (!elem) {\n elem = this.new(data);\n }\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this._readFiles(elem).then(files => {\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: \"create\",\n event_id,\n args: {\n model_name: this.modelName,\n model_query: this.modelQuery,\n data: data ?? elem?.serialize() ?? {},\n files: files\n }\n }));\n this.openRequest[event_id] = [res => {\n let data = typeof res.data.instance === \"string\" ? JSON.parse(res.data.instance) : res.data.instance;\n if (elem) {\n elem.id = data[0]?.id || data[0]?.pk;\n }\n res.data.instance = this._parseServerRes(data)[0];\n resolve(res);\n }, reject];\n });\n });\n });\n }\n\n /**\n * Ensure the websocket is open and has completed the server-side connect\n * handshake before issuing model requests.\n *\n * Multiple callers can arrive while a connection attempt is already in\n * progress. In that case they are queued behind the same synthetic request id.\n *\n * @returns {Promise<void>}\n */\n isConnected() {\n return new Promise((resolve, reject) => {\n if (this._isConnected) {\n resolve();\n } else if (!this._isConnectingProcess || !this.openRequest[CONNECTING_REQUEST_ID]) {\n this._isConnectingProcess = true;\n this.openRequest[CONNECTING_REQUEST_ID] = [() => {}, () => {}];\n this._connectToServer().then(() => {\n resolve(this._checkConnection());\n });\n } else {\n const [resolveOrigin, rejectOrigin] = this.openRequest[CONNECTING_REQUEST_ID];\n this.openRequest[CONNECTING_REQUEST_ID] = [() => {\n resolveOrigin();\n resolve();\n }, () => {\n rejectOrigin();\n reject();\n }];\n }\n });\n }\n\n /**\n * Close the websocket and disable automatic reconnect for this queryset.\n */\n close() {\n if (this.socket) {\n this._autoReconnect = false;\n this.socket.onclose = () => {};\n this.socket.close();\n delete this[\"socket\"];\n }\n this.valuesList.forEach(elem => {\n elem._onClose();\n });\n }\n\n /**\n * Upload attached `File` values in fixed-size chunks before save/create calls.\n *\n * @param {SdcModel} elem\n * @returns {Promise<object>}\n */\n _readFiles(elem) {\n let toSolve = [];\n let files = {};\n if (!elem) {\n return Promise.resolve(files);\n }\n Object.keys(elem.constructor.fields).forEach(key => {\n const value = elem[key];\n if (value instanceof File) {\n toSolve.push(new Promise(async (resolve, reject) => {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n this.openRequest[event_id] = [resolve, reject];\n const buffer = await value.arrayBuffer();\n let result = new Uint8Array(buffer);\n let numberOfChunks = Math.ceil(result.length / MAX_FILE_UPLOAD);\n files[key] = {\n id: event_id,\n file_name: value.name,\n field_name: key,\n content_length: value.size\n };\n for (let i = 0; i < numberOfChunks; ++i) {\n const chunk = Array.from(result.slice(MAX_FILE_UPLOAD * i, MAX_FILE_UPLOAD * (i + 1)));\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: \"upload\",\n event_id,\n args: {\n chunk,\n idx: i,\n number_of_chunks: numberOfChunks,\n file_name: value.name,\n field_name: key,\n content_length: value.size,\n content_type: value.type,\n model_name: this.modelName,\n model_query: this.modelQuery\n }\n }));\n }\n }));\n }\n });\n return Promise.all(toSolve).then(() => {\n return files;\n });\n }\n\n /**\n * Route websocket responses to the matching pending request and update local\n * state when the server sends model payloads.\n *\n * @param {MessageEvent} e\n */\n async _onMessage(e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (this.openRequest.hasOwnProperty(data.event_id)) {\n this.openRequest[data.event_id][1](new SdcModelError(data));\n this._closeOpenRequest(data.event_id);\n }\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)(\"pushErrorMsg\", data.header || \"\", data.msg || \"\");\n }\n if (data.type === \"connect\") {\n this.openRequest[CONNECTING_REQUEST_ID][1](new SdcModelError(data));\n this._closeOpenRequest(CONNECTING_REQUEST_ID);\n this._autoReconnect = false;\n this.socket.close();\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)(\"pushMsg\", data.header || \"\", data.msg || \"\");\n }\n if (data.type === \"connect\") {\n this._isConnected = true;\n this._isConnectingProcess = false;\n this.openRequest[CONNECTING_REQUEST_ID][0](data);\n this._closeOpenRequest(CONNECTING_REQUEST_ID);\n } else if ([\"load\", \"named_view\", \"detail_view\"].includes(data.type)) {\n const jsonRes = JSON.parse(data.args.data);\n data.args.data = await this._parseServerRes(jsonRes);\n } else if (data.type === \"on_update\" || data.type === \"on_create\") {\n const jsonRes = JSON.parse(data.args.data);\n let obj = await this._parseServerRes(jsonRes);\n let cb;\n if (data.type === \"on_create\") {\n cb = this.onCreate;\n } else {\n cb = this.onUpdate;\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.openRequest.hasOwnProperty(data.event_id)) {\n this.openRequest[data.event_id][0](data);\n this._closeOpenRequest(data.event_id);\n }\n }\n }\n\n /**\n * Wait until all in-flight websocket requests for this queryset are resolved.\n *\n * @returns {Promise<void>}\n */\n noOpenRequests() {\n return new Promise(resolve => {\n if (Object.keys(this.openRequest).length === 0) {\n return resolve();\n }\n this._onNoOpenRequests.push(resolve);\n });\n }\n\n /**\n * Remove a completed request and wake any `noOpenRequests()` waiters when the\n * request map becomes empty.\n *\n * @param {string} eventId\n */\n _closeOpenRequest(eventId) {\n delete this.openRequest[eventId];\n if (Object.keys(this.openRequest).length === 0) {\n this._onNoOpenRequests.forEach(x => x());\n this._onNoOpenRequests = [];\n }\n }\n\n /**\n * Establish the raw websocket connection for this queryset.\n *\n * @returns {Promise<void>}\n */\n _connectToServer() {\n return new Promise(resolve => {\n const modelIdentifier = `${this.modelName}` + (this.modelId > 0 ? `/${this.modelId}` : \"\");\n if (window.location.protocol === \"https:\") {\n this.socket = new WebSocket(`wss://${window.location.host}/sdc_ws/model/${modelIdentifier}`);\n } else {\n this.socket = new WebSocket(`ws://${window.location.host}/sdc_ws/model/${modelIdentifier}`);\n }\n this.socket.onmessage = this._onMessage.bind(this);\n this.socket.onclose = e => {\n console.error(`SDC Model (${this.modelName}, ${this.modelId}) Socket closed unexpectedly`);\n this._isConnected = false;\n for (const [_key, value] of Object.entries(this.openRequest)) {\n value[1](e);\n }\n this.openRequest = {};\n setTimeout(() => {\n if (this._autoReconnect) {\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._isConnected) {\n try {\n this.socket.close();\n } catch (e) {}\n }\n };\n this.socket.onopen = () => {\n resolve();\n };\n });\n }\n\n /**\n * Perform the application-level connect handshake once the websocket opens.\n *\n * @returns {Promise<*>}\n */\n _checkConnection() {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: \"connect\",\n event_id,\n args: {\n model_name: this.modelName,\n model_query: this.modelQuery\n }\n }));\n this.openRequest[event_id] = [resolve, reject];\n });\n }\n\n /**\n * Convert the backend model payload into locally tracked model objects.\n *\n * @param {Array<object>} results\n */\n _parseServerRes(results) {\n const newModels = [];\n for (const x of results) {\n const ModelClass = (0,_sdc_socket_js__WEBPACK_IMPORTED_MODULE_1__.getModel)(this.modelName);\n if (!ModelClass) {\n throw new Error(`${this.modelName} is no SdcModel. mybe the models ar not importad.`);\n }\n const newModel = new ModelClass({\n 'id': x.id ?? x.pk,\n ...x.fields\n });\n const currentModel = this.byId(newModel.id);\n if (currentModel) {\n currentModel.setValues(newModel);\n newModels.push(currentModel);\n } else {\n this.valuesList.push(newModel);\n newModel._setQuerySet(this, true);\n newModels.push(newModel);\n }\n }\n this.valuesList.sort((a, b) => a._id - b._id);\n return newModels;\n }\n}\nclass SdcModel {\n static fields = {};\n\n /**\n * Base model wrapper used by SDC model registrations.\n *\n * @param {string} modelName\n */\n constructor(modelName) {\n this._id = null;\n this._forms = [];\n this.loaded = false;\n this.formId = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n this.modelName = modelName;\n }\n\n /**\n *\n * @param {object?} modelQuerySet\n * @param {AbstractSDC} parent\n * @returns {SdcQuerySet}\n */\n static querySet(modelQuerySet = null, parent = null) {\n if (!parent) {\n return new SdcQuerySet(this.modeName, modelQuerySet);\n }\n return parent.querySet(this.modeName, modelQuerySet);\n }\n addForm($form) {\n // Remove old listeners if form already set\n const onChange = this._onChange.bind(this);\n this._forms.push($form);\n if ($form) {\n // Attach delegated event handler to all inputs\n $form.on(\"input.formWatcher change.formWatcher\", \"input, select, textarea\", onChange);\n }\n }\n _onChange(event) {\n const {\n name\n } = event.target;\n if (this.constructor.fields[name]) {\n this[`set${name}`]((0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getValueFromField)(event.target));\n }\n }\n _updateForm(fieldName) {\n const self = this;\n this._forms.forEach($form => {\n $form.find(`[name=\"${fieldName}\"]`).each(function () {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.setValueInField)(this, self[fieldName]);\n });\n });\n }\n setValues(data = {}) {\n throw new Error(\"setValues() must be implemented by subclass\");\n }\n\n /**\n * Attach the queryset that owns this model instance.\n *\n * @param {SdcQuerySet} querySet\n * @param {boolean} isLoaded\n */\n _setQuerySet(querySet, isLoaded) {\n this._querySet = new WeakRef(querySet);\n this.loaded = isLoaded;\n }\n get querySet() {\n return this._querySet.deref();\n }\n save({\n formName = \"edit_form\",\n data = null\n } = {}) {\n return this._querySet.deref().save({\n pk: this.id,\n formName,\n data\n });\n }\n create({\n data = null\n } = {}) {\n return this._querySet.deref().create({\n elem: this,\n data\n });\n }\n delete() {\n return this._querySet.deref().delete({\n elem: this\n });\n }\n load() {\n return this._querySet.deref().update({\n item: this\n });\n }\n update() {\n return this.load();\n }\n get id() {\n return this._id;\n }\n set id(data) {\n this._id = data;\n }\n set pk(data) {\n this.id = data;\n }\n get pk() {\n return this._id;\n }\n close() {\n return this._querySet.deref().close();\n }\n _onClose() {\n Object.keys(this.constructor.fields).filter(x => this[`_${x}`] instanceof SdcQuerySet).forEach(x => this[`_${x}`].close());\n }\n\n /**\n * Request the server-rendered detail view for this model instance.\n *\n * @param {object} options\n * @returns {*}\n */\n detailView({\n cbResolve = null,\n cbReject = null,\n templateContext = {}\n }) {\n return this._querySet.deref().detailView({\n pk: this.id,\n cbResolve,\n cbReject,\n templateContext\n });\n }\n serialize() {\n return Object.entries(this.constructor.fields).reduce((acc, [key, val]) => {\n const value = this[key];\n if (value instanceof SdcQuerySet) {\n if (val.many_to_many || val.one_to_many) {\n acc[key] = value.getIds();\n } else {\n const allIds = value.getIds();\n if (allIds.length > 0) {\n acc[key] = allIds[0];\n } else {\n acc[key] = null;\n }\n }\n } else if (val.is_relation && value instanceof SdcModel) {\n acc[key] = value.id ?? null;\n } else {\n acc[key] = value;\n }\n return acc;\n }, {});\n }\n toJson() {\n const res = {};\n for (let key in this.constructor.fields) {\n const value = this[key];\n if (value instanceof File) {\n res[key] = value.name;\n } else if (value instanceof SdcModel) {\n res[key] = value.id;\n } else if (value instanceof SdcQuerySet) {\n res[key] = value.getIds();\n } else {\n res[key] = value;\n }\n }\n return res;\n }\n\n /**\n * Backwards-compatible alias for syncing values from a form into the model.\n *\n * @param {*} $forms\n * @returns {*}\n */\n syncFormToModel($forms) {\n return this.syncForm($forms);\n }\n\n /**\n * Resolve the form collection associated with this model instance.\n *\n * @param {*} $forms\n * @returns {*}\n */\n _resolveForms($forms) {\n if (!$forms || !$forms.hasClass(this.formId)) {\n return $(`.${this.formId}`);\n }\n return $forms;\n }\n\n /**\n * Copy the current model state into matching form fields.\n *\n * @param {*} $forms\n */\n syncModelToForm($forms) {\n $forms = this._resolveForms($forms);\n const self = this;\n const fields = this.constructor.fields;\n $forms.each(function () {\n const pk = normalizePk($(this).data(\"model_pk\"));\n if (self.id !== pk) {\n return;\n }\n for (let formItem of this.elements) {\n let name = formItem.name;\n if (name && name !== \"\" && !!fields[name]) {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.setValueInField)(formItem, self[name]);\n }\n }\n });\n }\n\n /**\n * Copy matching form values back onto the current model instance.\n *\n * Hidden inputs are parsed to their original primitive type when possible.\n *\n * @param {*} $forms\n * @returns {*}\n */\n syncForm($forms) {\n $forms = this._resolveForms($forms);\n const self = this;\n const fields = this.constructor.fields;\n const returnValue = {};\n function setValueInForm(name, value) {\n if (!!fields[name]) {\n self[name] = value;\n }\n returnValue[name] = value;\n }\n $forms.each(function () {\n const pk = normalizePk($(this).data(\"model_pk\"));\n if (self.id !== pk && (self.id !== null || pk !== -1)) {\n return;\n }\n for (let formItem of this.elements) {\n setValueInForm(formItem.name, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getValueFromField)(formItem));\n }\n return self;\n });\n return returnValue;\n }\n\n /**\n * Render the correct server-side form for this model state.\n *\n * @param {object} options\n * @returns {*}\n */\n form({\n cbResolve = null,\n cbReject = null\n } = {}) {\n if (this.id === null || this.id === -1) {\n return this._createForm({\n cbReject,\n cbResolve\n });\n }\n return this._editForm({\n cbReject,\n cbResolve\n });\n }\n\n /**\n * Render the create form for a new model instance.\n *\n * @param {object} options\n * @returns {*}\n */\n _createForm({\n cbResolve = null,\n cbReject = null\n }) {\n let $divForm = $(\"<div>\");\n this._querySet.deref().getForm({\n modelObj: this,\n eventType: \"create_form\",\n formName: null,\n $divForm,\n cbResolve,\n cbReject,\n formId: this.formId\n });\n return $divForm;\n }\n\n /**\n * Render the edit form for an existing model instance.\n *\n * @param {object} options\n * @returns {*}\n */\n _editForm({\n cbResolve = null,\n cbReject = null\n }) {\n let $divForm = $(\"<div>\");\n this._querySet.deref().getForm({\n modelObj: this,\n eventType: \"edit_form\",\n formName: null,\n $divForm,\n cbResolve,\n cbReject,\n formId: this.formId\n });\n return $divForm;\n }\n\n /**\n * Render a named server-side form for this model.\n *\n * @param {object} options\n * @returns {*}\n */\n namedForm({\n formName,\n cbResolve = null,\n cbReject = null\n }) {\n let $divForm = $('<div class=\"container-fluid\">');\n this._querySet.deref().getForm({\n modelObj: this,\n eventType: \"named_form\",\n formName,\n $divForm,\n cbResolve,\n cbReject,\n formId: this.formId\n });\n return $divForm;\n }\n\n /**\n * Validate a field value using the supplied field config.\n *\n * @param {*} value\n * @param {object} config\n */\n validate(value, config) {\n const err = validateField(value, config);\n if (err) throw new Error(err);\n }\n\n /**\n * Convert a raw input value into the shape expected by the field config.\n *\n * @param {*} value\n * @param {object} config\n * @returns {*}\n */\n parseValue(value, config) {\n const {\n type,\n many_to_many: manyToMany,\n one_to_many: oneToMany,\n many_to_one: manyToOne,\n one_to_one: oneToOne\n } = config;\n if (value === null) {\n return null;\n }\n if ((manyToMany || oneToMany || manyToOne || oneToOne) && value && typeof value === 'string') {\n return JSON.parse(value);\n }\n switch (type) {\n case \"CharField\":\n case \"TeextField\":\n case \"UUIDField\":\n case \"EmailField\":\n return `${value}`;\n case \"IntegerField\":\n case \"AutoField\":\n case \"BigIntegerField\":\n return parseInt(value, 10);\n case \"FloatField\":\n case \"DecimalField\":\n return parseFloat(value);\n case \"BooleanField\":\n return !!value;\n case \"DateField\":\n case \"DateTimeField\":\n return Date.parse(value);\n case \"URLField\":\n return new URL(value);\n case \"FileField\":\n if (value == null) {\n return null;\n }\n if (typeof value === \"string\") {\n return null;\n }\n if (FileLoaded.isValid(value)) {\n return new FileLoaded(value);\n }\n if (value instanceof FileLoaded) {\n return new FileLoaded(value);\n }\n if (typeof File !== \"undefined\" && value instanceof File) {\n if (config.max_size && value.size > config.max_size) {\n return `File too large (max ${config.max_size} bytes)`;\n }\n if (config.allowed_types && !config.allowed_types.includes(value.type)) {\n return `Invalid file type (${value.type})`;\n }\n return value;\n }\n break;\n case \"JSONField\":\n if (typeof value === \"object\") {\n return value;\n }\n if (typeof value === \"string\") {\n return JSON.parse(value);\n }\n break;\n default:\n break;\n }\n return value;\n }\n}\n\n/**\n * Validate a field value against the field metadata received from the backend.\n *\n * @param {*} value\n * @param {object} config\n * @returns {?string}\n */\nfunction validateField(value, config) {\n const {\n type,\n required,\n max_length: maxLength,\n is_relation: isRelation,\n many_to_many: manyToMany,\n one_to_many: oneToMany,\n many_to_one: manyToOne,\n one_to_one: oneToOne,\n related_model: relatedModel\n } = config;\n void isRelation;\n if (required) {\n if (value === null || value === undefined || value === \"\") {\n return \"This field is required\";\n }\n }\n if (value === null || value === undefined || value === \"\") {\n return null;\n }\n if (manyToMany || oneToMany || manyToOne || oneToOne) {\n if (!(value instanceof SdcQuerySet) || value.modelName !== relatedModel) {\n if (typeof value === 'string') {\n value = JSON.parse(value);\n }\n if ((manyToMany || manyToOne) && Array.isArray(value) && value.some(x => !Number.isNaN(parseInt(x)))) {\n return null;\n }\n if (typeof value !== \"object\" && Number.isNaN(parseInt(value))) {\n return \"Must be object or ID\";\n }\n return null;\n }\n }\n switch (type) {\n case \"CharField\":\n case \"TextField\":\n if (typeof value !== \"string\") {\n return \"Must be a string\";\n }\n if (maxLength && value.length > maxLength) {\n return `Max length is ${maxLength}`;\n }\n break;\n case \"IntegerField\":\n case \"AutoField\":\n case \"BigIntegerField\":\n if (!isFinite(parseInt(value))) {\n return \"Must be an integer\";\n }\n break;\n case \"FloatField\":\n case \"DecimalField\":\n if (!isFinite(parseFloat(value))) {\n return \"Must be a number\";\n }\n break;\n case \"BooleanField\":\n if (typeof value !== \"boolean\") {\n return \"Must be a boolean\";\n }\n break;\n case \"DateField\":\n case \"DateTimeField\":\n if (isNaN(Date.parse(value))) {\n return \"Must be a valid date\";\n }\n break;\n case \"EmailField\":\n if (typeof value !== \"string\" || !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n return \"Invalid email\";\n }\n break;\n case \"URLField\":\n try {\n new URL(value);\n } catch {\n return \"Invalid URL\";\n }\n break;\n case \"UUIDField\":\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(value)) {\n return \"Invalid UUID\";\n }\n break;\n case \"JSONField\":\n if (typeof value !== \"object\") {\n return \"Must be JSON object\";\n }\n break;\n case \"FileField\":\n if (!FileLoaded.isValid(value) && !(value instanceof File) && !(value instanceof FileLoaded)) {\n return \"Must be a valid file\";\n }\n break;\n default:\n break;\n }\n return null;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFLLFlBQVk7TUFDZixJQUFJLE9BQU9BLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyw0QkFBNEIsQ0FBQzZQLElBQUksQ0FBQzdQLEtBQUssQ0FBQyxFQUFFO1FBQzFFLE9BQU8sZUFBZTtNQUN4QjtNQUNBO0lBRUYsS0FBSyxVQUFVO01BQ2IsSUFBSTtRQUNGLElBQUlrUCxHQUFHLENBQUNsUCxLQUFLLENBQUM7TUFDaEIsQ0FBQyxDQUFDLE1BQU07UUFDTixPQUFPLGFBQWE7TUFDdEI7TUFDQTtJQUVGLEtBQUssV0FBVztNQUNkLElBQUksQ0FBQywyRUFBMkUsQ0FBQzZQLElBQUksQ0FBQzdQLEtBQUssQ0FBQyxFQUFFO1FBQzVGLE9BQU8sY0FBYztNQUN2QjtNQUNBO0lBRUYsS0FBSyxXQUFXO01BQ2QsSUFBSSxPQUFPQSxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLE9BQU8scUJBQXFCO01BQzlCO01BQ0E7SUFDRixLQUFLLFdBQVc7TUFDZCxJQUFJLENBQUNmLFVBQVUsQ0FBQ2MsT0FBTyxDQUFDQyxLQUFLLENBQUMsSUFBSSxFQUFFQSxLQUFLLFlBQVlHLElBQUksQ0FBQyxJQUFJLEVBQUVILEtBQUssWUFBWWYsVUFBVSxDQUFDLEVBQUU7UUFDNUYsT0FBTyxzQkFBc0I7TUFDL0I7TUFDQTtJQUNGO01BQ0U7RUFDSjtFQUVBLE9BQU8sSUFBSTtBQUNiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19tb2RlbC5qcz80NDM2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFZhbHVlRnJvbUZpZWxkLCBzZXRWYWx1ZUluRmllbGQsIHV1aWR2NCB9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuaW1wb3J0IHsgZ2V0TW9kZWwgfSBmcm9tIFwiLi9zZGNfc29ja2V0LmpzXCJcbmltcG9ydCB7IGFwcCB9IGZyb20gXCIuL3NkY19tYWluLmpzXCI7XG5pbXBvcnQgeyB0cmlnZ2VyIH0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuXG5jb25zdCBNQVhfRklMRV9VUExPQUQgPSAyNTAwMDtcbmNvbnN0IENPTk5FQ1RJTkdfUkVRVUVTVF9JRCA9IFwiX2Nvbm5lY3RpbmdfcHJvY2Vzc1wiO1xuXG5jb25zdCBjbG9uZU9iamVjdCA9IChvcmlnaW5hbCkgPT4ge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvcmlnaW5hbCkpLFxuICAgIHN0cnVjdHVyZWRDbG9uZShvcmlnaW5hbClcbiAgKTtcbn1cblxuY2xhc3MgU2RjTW9kZWxFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBpZiAodHlwZW9mIHByb3BzID09PSAnc3RyaW5nJykge1xuICAgICAgcHJvcHMgPSB7XG4gICAgICAgIG1zZzogcHJvcHMsXG4gICAgICAgIGlzX2Vycm9yOiB0cnVlLFxuICAgICAgICBoZWFkZXI6ICdFcnJvcidcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIocHJvcHMubXNnKVxuICAgIHRoaXMubXNnID0gcHJvcHMubXNnO1xuICAgIHRoaXMuaGVhZGVyID0gcHJvcHMuaGVhZGVyO1xuICAgIHRoaXMuaXNfZXJyb3IgPSBwcm9wcy5pc19lcnJvcjtcbiAgICB0aGlzLmh0bWwgPSBwcm9wcy5odG1sO1xuICB9XG59XG5cbmNsYXNzIEZpbGVMb2FkZWQge1xuICBjb25zdHJ1Y3Rvcih7IG5hbWUsIHVybCB9KSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLmNvbnRlbnQgPSBudWxsO1xuICB9XG5cbiAgYXN5bmMgbG9hZChmb3JjZSA9IGZhbHNlKSB7XG4gICAgaWYgKGZvcmNlIHx8ICF0aGlzLmNvbnRlbnQpIHtcbiAgICAgIHRoaXMuY29udGVudCA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgJC5nZXQodGhpcy51cmwpLnRoZW4ocmVzb2x2ZSkuY2F0Y2goXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgnJyk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxuXG4gIGFzeW5jIHRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZCgpO1xuICB9XG5cbiAgc3RhdGljIGlzVmFsaWQodmFsdWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAhKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZS51cmwgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZS5uYW1lID09PSBcInN0cmluZ1wiXG4gICAgKTtcbiAgfVxuXG5cbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYW4gaW5jb21pbmcgcHJpbWFyeSBrZXkgdmFsdWUuXG4gKlxuICogYC0xYCBpcyB1c2VkIHRocm91Z2hvdXQgdGhpcyBtb2R1bGUgYXMgdGhlIHNlbnRpbmVsIGZvciBcIm5ldyBvYmplY3QgLyBubyBwa1wiLlxuICpcbiAqIEBwYXJhbSB7Kn0gcGtcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBrKHBrKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQayA9IHBhcnNlSW50KHBrID8/IC0xLCAxMCk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4obm9ybWFsaXplZFBrKSA/IC0xIDogbm9ybWFsaXplZFBrO1xufVxuXG5leHBvcnQgY2xhc3MgU2RjUXVlcnlTZXQge1xuICAvKipcbiAgICogTGlnaHR3ZWlnaHQgY2xpZW50LXNpZGUgY29sbGVjdGlvbiB3cmFwcGVyIGFyb3VuZCB0aGUgU0RDIG1vZGVsIHdlYnNvY2tldC5cbiAgICpcbiAgICogVGhlIHF1ZXJ5c2V0IGV4cG9zZXMgYXJyYXktbGlrZSBhY2Nlc3MgdGhyb3VnaCBhIHByb3h5IHdoaWxlIGFsc28ga2VlcGluZ1xuICAgKiB0cmFjayBvZiBzb2NrZXQgc3RhdGUgYW5kIG91dHN0YW5kaW5nIHJlcXVlc3RzIGZvciB0aGF0IG1vZGVsLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbFF1ZXJ5XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihtb2RlbE5hbWUsIG1vZGVsUXVlcnkgPSB7fSkge1xuICAgIHRoaXMudmFsdWVzTGlzdCA9IFtdO1xuICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5tb2RlbE5hbWUgPSBtb2RlbE5hbWU7XG4gICAgdGhpcy5tb2RlbFF1ZXJ5ID0gbW9kZWxRdWVyeSA/PyB7fTtcbiAgICB0aGlzLl9vbk5vT3BlblJlcXVlc3RzID0gW107XG4gICAgdGhpcy5faXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9pc0Nvbm5lY3RpbmdQcm9jZXNzID0gZmFsc2U7XG4gICAgdGhpcy5fYXV0b1JlY29ubmVjdCA9IHRydWU7XG4gICAgdGhpcy5zb2NrZXQgPSBudWxsO1xuICAgIC8vIFJlcXVlc3QgcmVzb2x2ZXJzIGFyZSBzdG9yZWQgYnkgd2Vic29ja2V0IGV2ZW50IGlkIHVudGlsIHRoZSBzZXJ2ZXIgcmVzcG9uZHMuXG4gICAgdGhpcy5vcGVuUmVxdWVzdCA9IHt9O1xuICAgIHRoaXMubW9kZWxJZCA9IDA7XG4gICAgdGhpcy5vblVwZGF0ZSA9ICgpID0+IHtcbiAgICB9O1xuICAgIHRoaXMub25DcmVhdGUgPSAoKSA9PiB7XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJveHkodGhpcywge1xuICAgICAgZ2V0KHRhcmdldCwgcHJvcCkge1xuICAgICAgICBpZiAodHlwZW9mIHByb3AgIT09IFwic3ltYm9sXCIgJiYgIWlzTmFOKHByb3ApKSB7XG4gICAgICAgICAgcmV0dXJuIHRhcmdldC52YWx1ZXNMaXN0W3Byb3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07XG4gICAgICB9LFxuXG4gICAgICBzZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzTmFOKHByb3ApKSB7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlc0xpc3RbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICBsZXQgaWR4ID0gLTE7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgKytpZHg7XG4gICAgICAgIGlmIChpZHggPCB0aGlzLnZhbHVlc0xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHRoaXMudmFsdWVzTGlzdFtpZHhdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiBudWxsLCBkb25lOiB0cnVlIH07XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBzZXQgb25fY3JlYXRlKGhhbmRsZXIpIHtcbiAgICB0aGlzLm9uQ3JlYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldCBvbl91cGRhdGUoaGFuZGxlcikge1xuICAgIHRoaXMub25VcGRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8aW50ZWdyfHN0cmluZz58aW50ZWdlcnxTZGNNb2RlbHxTZGNRdWVyeVNldHxzdHJpbmd9IGlkc1xuICAgKi9cbiAgc2V0SWRzKGlkcykge1xuICAgIGNvbnN0IHZsID0gdGhpcy5fc2V0SWRzKGlkcyk7XG4gICAgY29uc3QgZmlsdGVyID0ge1xuICAgICAgaWRfX2luOiB2bC5tYXAoKHgpID0+IHguaWQpXG4gICAgfVxuXG4gICAgdGhpcy5zZXRGaWx0ZXIoZmlsdGVyKTtcbiAgICByZXR1cm4gdmw7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxpbnRlZ3J8c3RyaW5nPnxpbnRlZ2VyfFNkY01vZGVsfFNkY1F1ZXJ5U2V0fHN0cmluZ30gaWRzXG4gICAqL2Nsb25lT2JqZWN0XG4gIF9zZXRJZHMoaWRzKSB7XG5cbiAgICBpZiAoaWRzID09PSBudWxsIHx8IGlkcyA9PT0gXCJcIiB8fCBBcnJheS5pc0FycmF5KGlkcykgJiYgaWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy52YWx1ZXNMaXN0ID0gW107XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZXNMaXN0O1xuICAgIH0gZWxzZSBpZiAoaWRzIGluc3RhbmNlb2YgU2RjUXVlcnlTZXQpIHtcbiAgICAgIHRoaXMudmFsdWVzTGlzdCA9IGlkcy52YWx1ZXNMaXN0Lm1hcChjbG9uZU9iamVjdCk7XG4gICAgICB0aGlzLnZhbHVlc0xpc3QuZm9yRWFjaCh2YWx1ZSA9PiB2YWx1ZS5fc2V0UXVlcnlTZXQodGhpcywgdHJ1ZSkpO1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVzTGlzdDtcbiAgICB9IGVsc2UgaWYgKGlkcyBpbnN0YW5jZW9mIFNkY01vZGVsKSB7XG4gICAgICB0aGlzLnZhbHVlc0xpc3QgPSBbY2xvbmVPYmplY3QoaWRzKV07XG4gICAgICB0aGlzLnZhbHVlc0xpc3QuZm9yRWFjaCh2YWx1ZSA9PiB2YWx1ZS5fc2V0UXVlcnlTZXQodGhpcywgdHJ1ZSkpO1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVzTGlzdDtcbiAgICB9XG5cbiAgICBsZXQgbnVtTGlzdCwgbnVtSWQgPSBOdW1iZXIuTmFOO1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGlkcykpIHtcbiAgICAgIG51bUlkID0gaWRzO1xuICAgIH0gZWxzZSBpZiAoaWRzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIGNvbnN0IHRlbXBOdW1MaXN0ID0gaWRzLm1hcCgoeCkgPT4gcGFyc2VJbnQoeCkpO1xuICAgICAgaWYgKCF0ZW1wTnVtTGlzdC5zb21lKE51bWJlci5pc05hTikpIHtcbiAgICAgICAgbnVtTGlzdCA9IHRlbXBOdW1MaXN0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlkcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgdGVtcE51bUxpc3QgPSBpZHMuc3BsaXQoJywnKS5tYXAoKHgpID0+IHBhcnNlSW50KHgpKTtcbiAgICAgIGlmICghdGVtcE51bUxpc3Quc29tZShOdW1iZXIuaXNOYU4pKSB7XG4gICAgICAgIG51bUxpc3QgPSB0ZW1wTnVtTGlzdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtSWQgPSBwYXJzZUludChpZHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzTmFOKG51bUlkKSkge1xuICAgICAgdGhpcy52YWx1ZXNMaXN0ID0gdGhpcy52YWx1ZXNMaXN0LmZpbHRlcigoaXRlbSkgPT4gbnVtSWQgPT09IGl0ZW0uaWQpO1xuICAgICAgaWYgKHRoaXMudmFsdWVzTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3QgbmV3TW9kZWwgPSB0aGlzLm5ldygpO1xuICAgICAgICBuZXdNb2RlbC5pZCA9IG51bUlkO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobnVtTGlzdCkge1xuICAgICAgdGhpcy52YWx1ZXNMaXN0ID0gdGhpcy52YWx1ZXNMaXN0LmZpbHRlcigoaXRlbSkgPT4gbnVtTGlzdC5pbmNsdWRlcyhpdGVtLmlkKSk7XG4gICAgICBjb25zdCB2YWx1ZUlkcyA9IHRoaXMuZ2V0SWRzKCk7XG4gICAgICBudW1MaXN0LmZpbHRlcih4ID0+ICF2YWx1ZUlkcy5pbmNsdWRlcyh4KSkuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZXNMaXN0LnB1c2gobmV3IChnZXRNb2RlbCh0aGlzLm1vZGVsTmFtZSkpKHsgaWQgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZhbHVlc0xpc3Q7XG4gIH1cblxuICBnZXRJZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzTGlzdC5tYXAoeCA9PiB4LmlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgbW9kZWwgaW5zdGFuY2VzIGN1cnJlbnRseSBwcmVzZW50IGluIHRoZSBxdWVyeXNldCBjYWNoZS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldCBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzTGlzdC5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhIG1vZGVsIGluc3RhbmNlIGJ5IGlkLCBsb2FkaW5nIHRoZSBxdWVyeXNldCBmaXJzdCBpZiBuZWVkZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gaWRcbiAgICogQHJldHVybnMge1NkY01vZGVsfG51bGx9XG4gICAqL1xuICBieUlkKGlkKSB7XG4gICAgaWYgKGlkICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkSWQgPSBub3JtYWxpemVQayhpZCk7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZXNMaXN0LmZpbmQoKGVsbSkgPT4gZWxtLmlkID09PSBub3JtYWxpemVkSWQpID8/IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgYWRkaXRpb25hbCBxdWVyeSBjb25zdHJhaW50cyBpbnRvIHRoZSBjdXJyZW50IHF1ZXJ5c2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kZWxRdWVyeVxuICAgKiBAcmV0dXJucyB7U2RjUXVlcnlTZXR9XG4gICAqL1xuICBzZXRGaWx0ZXIobW9kZWxRdWVyeSkge1xuICAgIHRoaXMubW9kZWxRdWVyeSA9IG1vZGVsUXVlcnk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRGaWx0ZXIobW9kZWxRdWVyeSkge1xuICAgIHRoaXMubW9kZWxRdWVyeSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMubW9kZWxRdWVyeSwgbW9kZWxRdWVyeSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHs/b2JqZWN0fSB2YWx1ZXNcbiAgICogQHJldHVybnMge1NkY01vZGVsfVxuICAgKi9cbiAgbmV3KHZhbHVlcyA9IHt9KSB7XG4gICAgY29uc3QgbmV3TW9kZWwgPSBuZXcgKGdldE1vZGVsKHRoaXMubW9kZWxOYW1lKSkodmFsdWVzKTtcbiAgICBuZXdNb2RlbC5fc2V0UXVlcnlTZXQodGhpcywgZmFsc2UpO1xuICAgIHRoaXMudmFsdWVzTGlzdC5wdXNoKG5ld01vZGVsKTtcbiAgICByZXR1cm4gbmV3TW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBtb2RlbCBpbnN0YW5jZXMgbWF0Y2hpbmcgdGhlIGN1cnJlbnQgcXVlcnkgaW50byB0aGUgcXVlcnlzZXQgY2FjaGUuXG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbW9kZWxRdWVyeVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTZGNRdWVyeVNldD59XG4gICAqL1xuICBsb2FkKG1vZGVsUXVlcnkgPSBudWxsKSB7XG4gICAgdGhpcy52YWx1ZXNMaXN0ID0gW107XG4gICAgdGhpcy5tb2RlbFF1ZXJ5ID0gbW9kZWxRdWVyeSA/PyB0aGlzLm1vZGVsUXVlcnk7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBtb2RlbCBpbnN0YW5jZXMgbWF0Y2hpbmcgdGhlIGN1cnJlbnQgcXVlcnkgaW50byB0aGUgcXVlcnlzZXQgY2FjaGUuXG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbW9kZWxRdWVyeVxuICAgKiBAcGFyYW0gez9TZGNNb2RlbH0gaXRlbVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTZGNRdWVyeVNldD59XG4gICAqL1xuICB1cGRhdGUoeyBtb2RlbFF1ZXJ5ID0gbnVsbCwgaXRlbSA9IG51bGwgfSkge1xuICAgIHRoaXMubW9kZWxRdWVyeSA9IG1vZGVsUXVlcnkgPz8gdGhpcy5tb2RlbFF1ZXJ5O1xuICAgIGxldCBsb2FkUXVlcnkgPSBpdGVtID8geyBpZDogaXRlbS5pZCB9IDogdGhpcy5tb2RlbFF1ZXJ5O1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9hZChsb2FkUXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBwayB7aW50ZWdyfVxuICAgKiBAcGFyYW0gZWxlbSB7U2RjTW9kZWx9XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICAgKi9cbiAgZGVsZXRlKHsgcGsgPSBudWxsLCBpZCA9IG51bGwsIGVsZW0gPSBudWxsIH0pIHtcbiAgICBwayA/Pz0gaWQ7XG4gICAgcGsgPSAhZWxlbSA/IHBrIDogZWxlbS5pZDtcbiAgICBpZiAocGsgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInBrIG9yIGVsZW0gbXVzdCBiZSBzZXRcIik7XG4gICAgfVxuICAgIGNvbnN0IGV2ZW50X2lkID0gdXVpZHY0KCk7XG4gICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuc29ja2V0LnNlbmQoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZXZlbnQ6IFwibW9kZWxcIixcbiAgICAgICAgICAgIGV2ZW50X3R5cGU6IFwiZGVsZXRlXCIsXG4gICAgICAgICAgICBldmVudF9pZCxcbiAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbE5hbWUsXG4gICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsUXVlcnksXG4gICAgICAgICAgICAgIGlkOiBwayxcbiAgICAgICAgICAgICAgcGtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5vcGVuUmVxdWVzdFtldmVudF9pZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgdGhlIHNlcnZlci1zaWRlIHF1ZXJ5c2V0IGRhdGEgb3ZlciB0aGUgbW9kZWwgd2Vic29ja2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTwqPn1cbiAgICovXG4gIF9zZW5kTG9hZChsb2FkUXVlcnkgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50X2lkID0gdXVpZHY0KCk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiBcIm1vZGVsXCIsXG4gICAgICAgICAgICBldmVudF90eXBlOiBcImxvYWRcIixcbiAgICAgICAgICAgIGV2ZW50X2lkLFxuICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsTmFtZSxcbiAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IGxvYWRRdWVyeSA/PyB0aGlzLm1vZGVsUXVlcnksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub3BlblJlcXVlc3RbZXZlbnRfaWRdID0gWyhkYXRhKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIH0sIHJlamVjdF07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGxpc3QtdmlldyBlbmRwb2ludCBmb3IgdGhlIGN1cnJlbnQgbW9kZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgX3NlbmRMaXN0Vmlldyh7XG4gICAgICAgICAgICAgICAgICBtb2RlbFF1ZXJ5ID0ge30sXG4gICAgICAgICAgICAgICAgICBjYlJlc29sdmUgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgY2JSZWplY3QgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgdGVtcGxhdGVDb250ZXh0ID0ge30sXG4gICAgICAgICAgICAgICAgfSkge1xuICAgIHJldHVybiB0aGlzLnZpZXcoe1xuICAgICAgbW9kZWxRdWVyeSxcbiAgICAgIGNiUmVzb2x2ZSxcbiAgICAgIGNiUmVqZWN0LFxuICAgICAgdGVtcGxhdGVDb250ZXh0LFxuICAgICAgZXZlbnRUeXBlOiBcImxpc3Rfdmlld1wiLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBhIG5hbWVkIG1vZGVsIHZpZXcgYW5kIGFwcGVuZCBpdHMgSFRNTCB0byBhIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIHZpZXcoe1xuICAgICAgICAgdmlld05hbWUgPSBcImh0bWxfbGlzdF90ZW1wbGF0ZVwiLFxuICAgICAgICAgbW9kZWxRdWVyeSA9IHt9LFxuICAgICAgICAgY2JSZXNvbHZlID0gbnVsbCxcbiAgICAgICAgIGNiUmVqZWN0ID0gbnVsbCxcbiAgICAgICAgIHRlbXBsYXRlQ29udGV4dCA9IHt9LFxuICAgICAgICAgZXZlbnRUeXBlID0gXCJuYW1lZF92aWV3XCIsXG4gICAgICAgfSkge1xuICAgIGxldCAkZGl2TGlzdCA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcbiAgICB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBldmVudF9pZCA9IHV1aWR2NCgpO1xuICAgICAgdGhpcy5zb2NrZXQuc2VuZChcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGV2ZW50OiBcIm1vZGVsXCIsXG4gICAgICAgICAgZXZlbnRfdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICAgIGV2ZW50X2lkLFxuICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgIHZpZXdfbmFtZTogdmlld05hbWUsXG4gICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiBtb2RlbFF1ZXJ5LFxuICAgICAgICAgICAgdGVtcGxhdGVfY29udGV4dDogdGVtcGxhdGVDb250ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5vcGVuUmVxdWVzdFtldmVudF9pZF0gPSBbXG4gICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgJGRpdkxpc3QuYXBwZW5kKGRhdGEuaHRtbCk7XG4gICAgICAgICAgYXBwLnJlZnJlc2goJGRpdkxpc3QpO1xuICAgICAgICAgIGNiUmVzb2x2ZSAmJiBjYlJlc29sdmUoZGF0YSk7XG4gICAgICAgIH0sXG4gICAgICAgIChyZXMpID0+IHtcbiAgICAgICAgICBjYlJlamVjdCAmJiBjYlJlamVjdChyZXMpO1xuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZGl2TGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGRldGFpbC12aWV3IGVuZHBvaW50IGZvciBhIHNpbmdsZSBtb2RlbCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBfc2VuZERldGFpbFZpZXcoe1xuICAgICAgICAgICAgICAgICAgICBwayA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGlkID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY2JSZXNvbHZlID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY2JSZWplY3QgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnRleHQgPSB7fSxcbiAgICAgICAgICAgICAgICAgIH0pIHtcbiAgICBwayA/Pz0gaWQ7XG4gICAgcGsgPSBub3JtYWxpemVQayhwayk7XG4gICAgbGV0ICRkaXZMaXN0ID0gJCgnPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgZXZlbnRfaWQgPSB1dWlkdjQoKTtcbiAgICAgIHRoaXMuc29ja2V0LnNlbmQoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudDogXCJtb2RlbFwiLFxuICAgICAgICAgIGV2ZW50X3R5cGU6IFwiZGV0YWlsX3ZpZXdcIixcbiAgICAgICAgICBldmVudF9pZCxcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsUXVlcnksXG4gICAgICAgICAgICBpZDogcGssXG4gICAgICAgICAgICBwayxcbiAgICAgICAgICAgIHRlbXBsYXRlX2NvbnRleHQ6IHRlbXBsYXRlQ29udGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMub3BlblJlcXVlc3RbZXZlbnRfaWRdID0gW1xuICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgICRkaXZMaXN0LmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgIGFwcC5yZWZyZXNoKCRkaXZMaXN0KTtcbiAgICAgICAgICBjYlJlc29sdmUgJiYgY2JSZXNvbHZlKGRhdGEpO1xuICAgICAgICB9LFxuICAgICAgICAocmVzKSA9PiB7XG4gICAgICAgICAgY2JSZWplY3QgJiYgY2JSZWplY3QocmVzKTtcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGRpdkxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYSBtb2RlbCBmb3JtIGZyYWdtZW50IGFuZCBhdHRhY2ggdGhlIFNEQyBmb3JtIG1ldGFkYXRhIGV4cGVjdGVkIGJ5XG4gICAqIHRoZSByZXN0IG9mIHRoZSBjbGllbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGVcbiAgICogQHBhcmFtIHtTZGNNb2RlbH0gbW9kZWxPYmpcbiAgICogQHBhcmFtIGZvcm1OYW1lXG4gICAqIEBwYXJhbSAkZGl2Rm9ybVxuICAgKiBAcGFyYW0gY2JSZXNvbHZlXG4gICAqIEBwYXJhbSBjYlJlamVjdFxuICAgKiBAcGFyYW0gZm9ybUlkXG4gICAqL1xuICBnZXRGb3JtKHsgbW9kZWxPYmosIGV2ZW50VHlwZSwgZm9ybU5hbWUsICRkaXZGb3JtLCBjYlJlc29sdmUsIGNiUmVqZWN0LCBmb3JtSWQgfSkge1xuICAgIGNvbnN0IGV2ZW50X2lkID0gdXVpZHY0KCk7XG4gICAgY29uc3QgcGsgPSBtb2RlbE9iai5pZCA/PyAtMTtcbiAgICB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnNvY2tldC5zZW5kKFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZXZlbnQ6IFwibW9kZWxcIixcbiAgICAgICAgICBldmVudF90eXBlOiBldmVudFR5cGUsXG4gICAgICAgICAgZXZlbnRfaWQsXG4gICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbE5hbWUsXG4gICAgICAgICAgICBpZDogcGssXG4gICAgICAgICAgICBwayxcbiAgICAgICAgICAgIGZvcm1fbmFtZTogZm9ybU5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gcGsgPT09IG51bGwgfHwgcGsgPT09IC0xID8gXCJjcmVhdGVcIiA6IFwiZWRpdFwiO1xuXG4gICAgdGhpcy5vcGVuUmVxdWVzdFtldmVudF9pZF0gPSBbXG4gICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAkZGl2Rm9ybS5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgbGV0ICRmb3JtID0gJGRpdkZvcm1cbiAgICAgICAgICAuY2xvc2VzdChcImZvcm1cIilcbiAgICAgICAgICAuYWRkQ2xhc3MoXG4gICAgICAgICAgICBgc2RjLW1vZGVsLSR7Y2xhc3NOYW1lfS1mb3JtIHNkYy1tb2RlbC1mb3JtICR7Zm9ybUlkfWAsXG4gICAgICAgICAgKVxuICAgICAgICAgIC5kYXRhKFwibW9kZWxcIiwgbW9kZWxPYmopXG4gICAgICAgICAgLmRhdGEoXCJtb2RlbF9wa1wiLCBwaylcbiAgICAgICAgICAuZGF0YShcImZvcm1fbmFtZVwiLCBmb3JtTmFtZSk7XG4gICAgICAgIG1vZGVsT2JqLmFkZEZvcm0oJGZvcm0pO1xuICAgICAgICBpZiAoJGZvcm0ubGVuZ3RoID4gMCAmJiAhJGZvcm1bMF0uaGFzQXR0cmlidXRlKFwic2RjX3N1Ym1pdFwiKSkge1xuICAgICAgICAgICRmb3JtLmF0dHIoXCJzZGNfc3VibWl0XCIsIFwic3VibWl0TW9kZWxGb3JtRGlzdHJpYnV0b3JcIik7XG4gICAgICAgIH1cblxuICAgICAgICBhcHAucmVmcmVzaCgkZGl2Rm9ybSkudGhlbigoKSA9PiBudWxsKTtcbiAgICAgICAgY2JSZXNvbHZlICYmIGNiUmVzb2x2ZShkYXRhKTtcbiAgICAgIH0sXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIGNiUmVqZWN0ICYmIGNiUmVqZWN0KHJlcyk7XG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYSBzaW5nbGUgbW9kZWwgaW5zdGFuY2UgbWF0Y2hpbmcgdGhlIGN1cnJlbnQgcXVlcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbW9kZWxRdWVyeVxuICAgKiBAcGFyYW0gez9ib29sZWFufSBkb05vdExvYWQgdHJ1ZSBpZiBtb2RlbFF1ZXJ5IGNvbnRhaW5zIGlkIG9yIHBrIGFuZCBvYmplY3QgZG9lcyBub3QgbmVlZCB0byBiZSBsb2FkZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFNkY01vZGVsPn1cbiAgICovXG4gIGFzeW5jIGdldChtb2RlbFF1ZXJ5ID0gbnVsbCwgZG9Ob3RMb2FkID0gZmFsc2UpIHtcbiAgICBpZiAoZG9Ob3RMb2FkKSB7XG4gICAgICBjb25zdCBpZCA9IG1vZGVsUXVlcnk/LmlkID8/IHRoaXMubW9kZWxRdWVyeT8uaWQ7XG4gICAgICBpZihtb2RlbFF1ZXJ5KSB7XG4gICAgICAgIHRoaXMuc2V0RmlsdGVyKG1vZGVsUXVlcnkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYnlJZChpZCkgPz8gdGhpcy5uZXcobW9kZWxRdWVyeSB8fCB0aGlzLm1vZGVsUXVlcnkpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmxvYWQobW9kZWxRdWVyeSk7XG4gICAgaWYgKHRoaXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1vZGVsIHF1ZXJ5IHJldHVybnMgJHt0aGlzLmxlbmd0aH0gYnV0IG9ubHkgMSBleHBlY3RlZC5gKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZEZpbHRlcih7IGlkOiB0aGlzLnZhbHVlc0xpc3RbMF0uaWQgfSk7XG5cbiAgICByZXR1cm4gdGhpcy52YWx1ZXNMaXN0WzBdO1xuICB9XG5cbiAgZGV0YWlsVmlldyh7IHBrLCBjYlJlc29sdmUgPSBudWxsLCBjYlJlamVjdCA9IG51bGwsIHRlbXBsYXRlQ29udGV4dCA9IHt9IH0pIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZERldGFpbFZpZXcoe1xuICAgICAgaWQ6IHBrLFxuICAgICAgY2JSZXNvbHZlLFxuICAgICAgY2JSZWplY3QsXG4gICAgICB0ZW1wbGF0ZUNvbnRleHQsXG4gICAgfSk7XG4gIH1cblxuICBsaXN0Vmlldyh7IG1vZGVsUXVlcnkgPSB7fSwgc2VhcmNoVmFsdWVzID0ge30sIGNiUmVzb2x2ZSA9IG51bGwsIGNiUmVqZWN0ID0gbnVsbCwgdGVtcGxhdGVDb250ZXh0ID0ge30gfSkge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTGlzdFZpZXcoe1xuICAgICAgbW9kZWxRdWVyeTogT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5tb2RlbFF1ZXJ5LCBtb2RlbFF1ZXJ5LCB7ICdfX3NlYXJjaF92YWx1ZXMnOiBzZWFyY2hWYWx1ZXMgfSksXG4gICAgICBjYlJlc29sdmUsXG4gICAgICBjYlJlamVjdCxcbiAgICAgIHRlbXBsYXRlQ29udGV4dCxcbiAgICB9KTtcbiAgfVxuXG4gIHNhdmUoeyBwayA9IG51bGwsIGlkID0gbnVsbCwgZm9ybU5hbWUgPSBcImVkaXRfZm9ybVwiLCBkYXRhID0gbnVsbCB9ID0ge30pIHtcbiAgICBwayA/Pz0gaWQ7XG4gICAgY29uc3Qgbm9ybVBrID0gbm9ybWFsaXplUGsocGspO1xuICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICBsZXQgZWxlbUxpc3Q7XG4gICAgICBpZiAobm9ybVBrID4gLTEpIHtcbiAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMuYnlJZChub3JtUGspO1xuICAgICAgICBpZiAoIWVsZW0pIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFNkY01vZGVsRXJyb3IoYEVsZW1lbnQgbm90IGZvdW5kIHdpdGggSUQ6ICR7bm9ybVBrfWApKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtTGlzdCA9IFtlbGVtXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1MaXN0ID0gdGhpcy52YWx1ZXNMaXN0O1xuICAgICAgfVxuICAgICAgbGV0IHBMaXN0ID0gW107XG4gICAgICBlbGVtTGlzdC5mb3JFYWNoKChlbGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50X2lkID0gdXVpZHY0KCk7XG4gICAgICAgIHBMaXN0LnB1c2goXG4gICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVhZEZpbGVzKGVsZW0pLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHNlbmREYXRhID0gZGF0YSA/IHsgLi4uZGF0YSB9IDogZWxlbS5zZXJpYWxpemUoKTtcbiAgICAgICAgICAgICAgc2VuZERhdGEuaWQgPSBlbGVtLmlkO1xuICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50OiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICBldmVudF90eXBlOiBcInNhdmVcIixcbiAgICAgICAgICAgICAgICAgIGV2ZW50X2lkLFxuICAgICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICBmb3JtX25hbWU6IGZvcm1OYW1lLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogc2VuZERhdGEsXG4gICAgICAgICAgICAgICAgICAgIGlkOiBzZW5kRGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgcGs6IHNlbmREYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICBmaWxlczogZmlsZXMsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHRoaXMub3BlblJlcXVlc3RbZXZlbnRfaWRdID0gW1xuICAgICAgICAgICAgICAgIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBkYXRhID1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlcy5kYXRhLmluc3RhbmNlID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgPyBKU09OLnBhcnNlKHJlcy5kYXRhLmluc3RhbmNlKVxuICAgICAgICAgICAgICAgICAgICAgIDogcmVzLmRhdGEuaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICByZXMuZGF0YS5pbnN0YW5jZSA9IHRoaXMuX3BhcnNlU2VydmVyUmVzKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVqZWN0LFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBMaXN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZWxlbSB7P1NkY01vZGVsfVxuICAgKiBAcGFyYW0gZGF0YSB7P29iamVjdH1cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gICAqL1xuICBjcmVhdGUoeyBlbGVtID0gbnVsbCwgZGF0YSA9IG51bGwgfSA9IHt9KSB7XG4gICAgY29uc3QgZXZlbnRfaWQgPSB1dWlkdjQoKTtcbiAgICBpZiAoIWVsZW0pIHtcbiAgICAgIGVsZW0gPSB0aGlzLm5ldyhkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuX3JlYWRGaWxlcyhlbGVtKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIGV2ZW50OiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgIGV2ZW50X3R5cGU6IFwiY3JlYXRlXCIsXG4gICAgICAgICAgICAgIGV2ZW50X2lkLFxuICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbE5hbWUsXG4gICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxRdWVyeSxcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhID8/IGVsZW0/LnNlcmlhbGl6ZSgpID8/IHt9LFxuICAgICAgICAgICAgICAgIGZpbGVzOiBmaWxlcyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0W2V2ZW50X2lkXSA9IFtcbiAgICAgICAgICAgIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGRhdGEgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiByZXMuZGF0YS5pbnN0YW5jZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgPyBKU09OLnBhcnNlKHJlcy5kYXRhLmluc3RhbmNlKVxuICAgICAgICAgICAgICAgICAgOiByZXMuZGF0YS5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgaWYgKGVsZW0pIHtcbiAgICAgICAgICAgICAgICBlbGVtLmlkID0gZGF0YVswXT8uaWQgfHwgZGF0YVswXT8ucGs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKVswXTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgICBdO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGUgd2Vic29ja2V0IGlzIG9wZW4gYW5kIGhhcyBjb21wbGV0ZWQgdGhlIHNlcnZlci1zaWRlIGNvbm5lY3RcbiAgICogaGFuZHNoYWtlIGJlZm9yZSBpc3N1aW5nIG1vZGVsIHJlcXVlc3RzLlxuICAgKlxuICAgKiBNdWx0aXBsZSBjYWxsZXJzIGNhbiBhcnJpdmUgd2hpbGUgYSBjb25uZWN0aW9uIGF0dGVtcHQgaXMgYWxyZWFkeSBpblxuICAgKiBwcm9ncmVzcy4gSW4gdGhhdCBjYXNlIHRoZXkgYXJlIHF1ZXVlZCBiZWhpbmQgdGhlIHNhbWUgc3ludGhldGljIHJlcXVlc3QgaWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgaXNDb25uZWN0ZWQoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc0Nvbm5lY3RlZCkge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAhdGhpcy5faXNDb25uZWN0aW5nUHJvY2VzcyB8fFxuICAgICAgICAhdGhpcy5vcGVuUmVxdWVzdFtDT05ORUNUSU5HX1JFUVVFU1RfSURdXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5faXNDb25uZWN0aW5nUHJvY2VzcyA9IHRydWU7XG4gICAgICAgIHRoaXMub3BlblJlcXVlc3RbQ09OTkVDVElOR19SRVFVRVNUX0lEXSA9IFsoKSA9PiB7XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgfV07XG4gICAgICAgIHRoaXMuX2Nvbm5lY3RUb1NlcnZlcigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fY2hlY2tDb25uZWN0aW9uKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IFtyZXNvbHZlT3JpZ2luLCByZWplY3RPcmlnaW5dID1cbiAgICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0W0NPTk5FQ1RJTkdfUkVRVUVTVF9JRF07XG4gICAgICAgIHRoaXMub3BlblJlcXVlc3RbQ09OTkVDVElOR19SRVFVRVNUX0lEXSA9IFtcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlT3JpZ2luKCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZWplY3RPcmlnaW4oKTtcbiAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIHdlYnNvY2tldCBhbmQgZGlzYWJsZSBhdXRvbWF0aWMgcmVjb25uZWN0IGZvciB0aGlzIHF1ZXJ5c2V0LlxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICB0aGlzLl9hdXRvUmVjb25uZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnNvY2tldC5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgfTtcbiAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICBkZWxldGUgdGhpc1tcInNvY2tldFwiXTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlc0xpc3QuZm9yRWFjaCgoZWxlbSkgPT4ge1xuICAgICAgZWxlbS5fb25DbG9zZSgpXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBsb2FkIGF0dGFjaGVkIGBGaWxlYCB2YWx1ZXMgaW4gZml4ZWQtc2l6ZSBjaHVua3MgYmVmb3JlIHNhdmUvY3JlYXRlIGNhbGxzLlxuICAgKlxuICAgKiBAcGFyYW0ge1NkY01vZGVsfSBlbGVtXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG9iamVjdD59XG4gICAqL1xuICBfcmVhZEZpbGVzKGVsZW0pIHtcbiAgICBsZXQgdG9Tb2x2ZSA9IFtdO1xuICAgIGxldCBmaWxlcyA9IHt9O1xuICAgIGlmICghZWxlbSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmaWxlcyk7XG4gICAgfVxuICAgIE9iamVjdC5rZXlzKGVsZW0uY29uc3RydWN0b3IuZmllbGRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZWxlbVtrZXldO1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICB0b1NvbHZlLnB1c2goXG4gICAgICAgICAgbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnRfaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgICAgIHRoaXMub3BlblJlcXVlc3RbZXZlbnRfaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHZhbHVlLmFycmF5QnVmZmVyKCk7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgICAgIGxldCBudW1iZXJPZkNodW5rcyA9IE1hdGguY2VpbChyZXN1bHQubGVuZ3RoIC8gTUFYX0ZJTEVfVVBMT0FEKTtcbiAgICAgICAgICAgIGZpbGVzW2tleV0gPSB7XG4gICAgICAgICAgICAgIGlkOiBldmVudF9pZCxcbiAgICAgICAgICAgICAgZmlsZV9uYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZF9uYW1lOiBrZXksXG4gICAgICAgICAgICAgIGNvbnRlbnRfbGVuZ3RoOiB2YWx1ZS5zaXplLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZDaHVua3M7ICsraSkge1xuICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IEFycmF5LmZyb20ocmVzdWx0LnNsaWNlKFxuICAgICAgICAgICAgICAgIE1BWF9GSUxFX1VQTE9BRCAqIGksXG4gICAgICAgICAgICAgICAgTUFYX0ZJTEVfVVBMT0FEICogKGkgKyAxKSxcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgZXZlbnQ6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6IFwidXBsb2FkXCIsXG4gICAgICAgICAgICAgICAgICBldmVudF9pZCxcbiAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX2NodW5rczogbnVtYmVyT2ZDaHVua3MsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZToga2V5LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aDogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxRdWVyeSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodG9Tb2x2ZSkudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gZmlsZXM7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUm91dGUgd2Vic29ja2V0IHJlc3BvbnNlcyB0byB0aGUgbWF0Y2hpbmcgcGVuZGluZyByZXF1ZXN0IGFuZCB1cGRhdGUgbG9jYWxcbiAgICogc3RhdGUgd2hlbiB0aGUgc2VydmVyIHNlbmRzIG1vZGVsIHBheWxvYWRzLlxuICAgKlxuICAgKiBAcGFyYW0ge01lc3NhZ2VFdmVudH0gZVxuICAgKi9cbiAgYXN5bmMgX29uTWVzc2FnZShlKSB7XG4gICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgIGlmICh0aGlzLm9wZW5SZXF1ZXN0Lmhhc093blByb3BlcnR5KGRhdGEuZXZlbnRfaWQpKSB7XG4gICAgICAgIHRoaXMub3BlblJlcXVlc3RbZGF0YS5ldmVudF9pZF1bMV0obmV3IFNkY01vZGVsRXJyb3IoZGF0YSkpO1xuICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KGRhdGEuZXZlbnRfaWQpO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgIHRyaWdnZXIoXCJwdXNoRXJyb3JNc2dcIiwgZGF0YS5oZWFkZXIgfHwgXCJcIiwgZGF0YS5tc2cgfHwgXCJcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnR5cGUgPT09IFwiY29ubmVjdFwiKSB7XG4gICAgICAgIHRoaXMub3BlblJlcXVlc3RbQ09OTkVDVElOR19SRVFVRVNUX0lEXVsxXShuZXcgU2RjTW9kZWxFcnJvcihkYXRhKSk7XG4gICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoQ09OTkVDVElOR19SRVFVRVNUX0lEKTtcbiAgICAgICAgdGhpcy5fYXV0b1JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgdHJpZ2dlcihcInB1c2hNc2dcIiwgZGF0YS5oZWFkZXIgfHwgXCJcIiwgZGF0YS5tc2cgfHwgXCJcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnR5cGUgPT09IFwiY29ubmVjdFwiKSB7XG4gICAgICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5faXNDb25uZWN0aW5nUHJvY2VzcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0W0NPTk5FQ1RJTkdfUkVRVUVTVF9JRF1bMF0oZGF0YSk7XG4gICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoQ09OTkVDVElOR19SRVFVRVNUX0lEKTtcbiAgICAgIH0gZWxzZSBpZiAoW1wibG9hZFwiLCBcIm5hbWVkX3ZpZXdcIiwgXCJkZXRhaWxfdmlld1wiXS5pbmNsdWRlcyhkYXRhLnR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGpzb25SZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcbiAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSBhd2FpdCB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uUmVzKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSBcIm9uX3VwZGF0ZVwiIHx8IGRhdGEudHlwZSA9PT0gXCJvbl9jcmVhdGVcIikge1xuICAgICAgICBjb25zdCBqc29uUmVzID0gSlNPTi5wYXJzZShkYXRhLmFyZ3MuZGF0YSk7XG5cbiAgICAgICAgbGV0IG9iaiA9IGF3YWl0IHRoaXMuX3BhcnNlU2VydmVyUmVzKGpzb25SZXMpO1xuICAgICAgICBsZXQgY2I7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gXCJvbl9jcmVhdGVcIikge1xuICAgICAgICAgIGNiID0gdGhpcy5vbkNyZWF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYiA9IHRoaXMub25VcGRhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjYihvYmopO1xuICAgICAgICBkYXRhLmFyZ3MuZGF0YSA9IG9iajtcbiAgICAgIH1cblxuICAgICAgbGV0IGluc3RhbmNlID0gZGF0YS5kYXRhPy5pbnN0YW5jZTtcbiAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICBkYXRhLmRhdGEuaW5zdGFuY2UgPSBKU09OLnBhcnNlKGRhdGEuZGF0YS5pbnN0YW5jZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wZW5SZXF1ZXN0Lmhhc093blByb3BlcnR5KGRhdGEuZXZlbnRfaWQpKSB7XG4gICAgICAgIHRoaXMub3BlblJlcXVlc3RbZGF0YS5ldmVudF9pZF1bMF0oZGF0YSk7XG4gICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoZGF0YS5ldmVudF9pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhaXQgdW50aWwgYWxsIGluLWZsaWdodCB3ZWJzb2NrZXQgcmVxdWVzdHMgZm9yIHRoaXMgcXVlcnlzZXQgYXJlIHJlc29sdmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIG5vT3BlblJlcXVlc3RzKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMub3BlblJlcXVlc3QpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9vbk5vT3BlblJlcXVlc3RzLnB1c2gocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgY29tcGxldGVkIHJlcXVlc3QgYW5kIHdha2UgYW55IGBub09wZW5SZXF1ZXN0cygpYCB3YWl0ZXJzIHdoZW4gdGhlXG4gICAqIHJlcXVlc3QgbWFwIGJlY29tZXMgZW1wdHkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudElkXG4gICAqL1xuICBfY2xvc2VPcGVuUmVxdWVzdChldmVudElkKSB7XG4gICAgZGVsZXRlIHRoaXMub3BlblJlcXVlc3RbZXZlbnRJZF07XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMub3BlblJlcXVlc3QpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cy5mb3JFYWNoKCh4KSA9PiB4KCkpO1xuICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFc3RhYmxpc2ggdGhlIHJhdyB3ZWJzb2NrZXQgY29ubmVjdGlvbiBmb3IgdGhpcyBxdWVyeXNldC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBfY29ubmVjdFRvU2VydmVyKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgbW9kZWxJZGVudGlmaWVyID1cbiAgICAgICAgYCR7dGhpcy5tb2RlbE5hbWV9YCArICh0aGlzLm1vZGVsSWQgPiAwID8gYC8ke3RoaXMubW9kZWxJZH1gIDogXCJcIik7XG4gICAgICBpZiAod2luZG93LmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiKSB7XG4gICAgICAgIHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldChcbiAgICAgICAgICBgd3NzOi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vc2RjX3dzL21vZGVsLyR7bW9kZWxJZGVudGlmaWVyfWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoXG4gICAgICAgICAgYHdzOi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vc2RjX3dzL21vZGVsLyR7bW9kZWxJZGVudGlmaWVyfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9ubWVzc2FnZSA9IHRoaXMuX29uTWVzc2FnZS5iaW5kKHRoaXMpO1xuXG4gICAgICB0aGlzLnNvY2tldC5vbmNsb3NlID0gKGUpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgU0RDIE1vZGVsICgke3RoaXMubW9kZWxOYW1lfSwgJHt0aGlzLm1vZGVsSWR9KSBTb2NrZXQgY2xvc2VkIHVuZXhwZWN0ZWRseWAsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgW19rZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLm9wZW5SZXF1ZXN0KSkge1xuICAgICAgICAgIHZhbHVlWzFdKGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3BlblJlcXVlc3QgPSB7fTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fYXV0b1JlY29ubmVjdCkge1xuICAgICAgICAgICAgdGhpcy5fY29ubmVjdFRvU2VydmVyKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5zb2NrZXQub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTW9kZWwgU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiAke2Vycn0gQ2xvc2luZyBzb2NrZXRgKTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5zb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gdGhlIGFwcGxpY2F0aW9uLWxldmVsIGNvbm5lY3QgaGFuZHNoYWtlIG9uY2UgdGhlIHdlYnNvY2tldCBvcGVucy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Kj59XG4gICAqL1xuICBfY2hlY2tDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IGV2ZW50X2lkID0gdXVpZHY0KCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuc29ja2V0LnNlbmQoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudDogXCJtb2RlbFwiLFxuICAgICAgICAgIGV2ZW50X3R5cGU6IFwiY29ubmVjdFwiLFxuICAgICAgICAgIGV2ZW50X2lkLFxuICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxOYW1lLFxuICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxRdWVyeSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMub3BlblJlcXVlc3RbZXZlbnRfaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgYmFja2VuZCBtb2RlbCBwYXlsb2FkIGludG8gbG9jYWxseSB0cmFja2VkIG1vZGVsIG9iamVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8b2JqZWN0Pn0gcmVzdWx0c1xuICAgKi9cbiAgX3BhcnNlU2VydmVyUmVzKHJlc3VsdHMpIHtcbiAgICBjb25zdCBuZXdNb2RlbHMgPSBbXVxuICAgIGZvciAoY29uc3QgeCBvZiByZXN1bHRzKSB7XG4gICAgICBjb25zdCBNb2RlbENsYXNzID0gZ2V0TW9kZWwodGhpcy5tb2RlbE5hbWUpO1xuICAgICAgaWYgKCFNb2RlbENsYXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm1vZGVsTmFtZX0gaXMgbm8gU2RjTW9kZWwuIG15YmUgdGhlIG1vZGVscyBhciBub3QgaW1wb3J0YWQuYCk7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdNb2RlbCA9IG5ldyBNb2RlbENsYXNzKHsgJ2lkJzogeC5pZCA/PyB4LnBrLCAuLi54LmZpZWxkcyB9KTtcbiAgICAgIGNvbnN0IGN1cnJlbnRNb2RlbCA9IHRoaXMuYnlJZChuZXdNb2RlbC5pZCk7XG4gICAgICBpZiAoY3VycmVudE1vZGVsKSB7XG4gICAgICAgIGN1cnJlbnRNb2RlbC5zZXRWYWx1ZXMobmV3TW9kZWwpO1xuICAgICAgICBuZXdNb2RlbHMucHVzaChjdXJyZW50TW9kZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZXNMaXN0LnB1c2gobmV3TW9kZWwpO1xuICAgICAgICBuZXdNb2RlbC5fc2V0UXVlcnlTZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIG5ld01vZGVscy5wdXNoKG5ld01vZGVsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52YWx1ZXNMaXN0LnNvcnQoKGEsIGIpID0+IGEuX2lkIC0gYi5faWQpO1xuICAgIHJldHVybiBuZXdNb2RlbHM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RjTW9kZWwge1xuICBzdGF0aWMgZmllbGRzID0ge307XG5cbiAgLyoqXG4gICAqIEJhc2UgbW9kZWwgd3JhcHBlciB1c2VkIGJ5IFNEQyBtb2RlbCByZWdpc3RyYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihtb2RlbE5hbWUpIHtcbiAgICB0aGlzLl9pZCA9IG51bGw7XG4gICAgdGhpcy5fZm9ybXMgPSBbXTtcbiAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZm9ybUlkID0gdXVpZHY0KCk7XG4gICAgdGhpcy5tb2RlbE5hbWUgPSBtb2RlbE5hbWU7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3Q/fSBtb2RlbFF1ZXJ5U2V0XG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudFxuICAgKiBAcmV0dXJucyB7U2RjUXVlcnlTZXR9XG4gICAqL1xuICBzdGF0aWMgcXVlcnlTZXQobW9kZWxRdWVyeVNldCA9IG51bGwsIHBhcmVudCA9IG51bGwpIHtcbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuIG5ldyBTZGNRdWVyeVNldCh0aGlzLm1vZGVOYW1lLCBtb2RlbFF1ZXJ5U2V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50LnF1ZXJ5U2V0KHRoaXMubW9kZU5hbWUsIG1vZGVsUXVlcnlTZXQpO1xuICB9XG5cbiAgYWRkRm9ybSgkZm9ybSkge1xuICAgIC8vIFJlbW92ZSBvbGQgbGlzdGVuZXJzIGlmIGZvcm0gYWxyZWFkeSBzZXRcbiAgICBjb25zdCBvbkNoYW5nZSA9IHRoaXMuX29uQ2hhbmdlLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLl9mb3Jtcy5wdXNoKCRmb3JtKTtcblxuICAgIGlmICgkZm9ybSkge1xuICAgICAgLy8gQXR0YWNoIGRlbGVnYXRlZCBldmVudCBoYW5kbGVyIHRvIGFsbCBpbnB1dHNcbiAgICAgICRmb3JtLm9uKFxuICAgICAgICBcImlucHV0LmZvcm1XYXRjaGVyIGNoYW5nZS5mb3JtV2F0Y2hlclwiLFxuICAgICAgICBcImlucHV0LCBzZWxlY3QsIHRleHRhcmVhXCIsXG4gICAgICAgIG9uQ2hhbmdlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIF9vbkNoYW5nZShldmVudCkge1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLmZpZWxkc1tuYW1lXSkge1xuICAgICAgdGhpc1tgc2V0JHtuYW1lfWBdKGdldFZhbHVlRnJvbUZpZWxkKGV2ZW50LnRhcmdldCkpO1xuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVGb3JtKGZpZWxkTmFtZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuX2Zvcm1zLmZvckVhY2goKCRmb3JtKSA9PiB7XG4gICAgICAkZm9ybS5maW5kKGBbbmFtZT1cIiR7ZmllbGROYW1lfVwiXWApLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRWYWx1ZUluRmllbGQodGhpcywgc2VsZltmaWVsZE5hbWVdKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRWYWx1ZXMoZGF0YSA9IHt9KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic2V0VmFsdWVzKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggdGhlIHF1ZXJ5c2V0IHRoYXQgb3ducyB0aGlzIG1vZGVsIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1NkY1F1ZXJ5U2V0fSBxdWVyeVNldFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTG9hZGVkXG4gICAqL1xuICBfc2V0UXVlcnlTZXQocXVlcnlTZXQsIGlzTG9hZGVkKSB7XG4gICAgdGhpcy5fcXVlcnlTZXQgPSBuZXcgV2Vha1JlZihxdWVyeVNldCk7XG4gICAgdGhpcy5sb2FkZWQgPSBpc0xvYWRlZDtcbiAgfVxuXG4gIGdldCBxdWVyeVNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlTZXQuZGVyZWYoKTtcbiAgfVxuXG4gIHNhdmUoeyBmb3JtTmFtZSA9IFwiZWRpdF9mb3JtXCIsIGRhdGEgPSBudWxsIH0gPSB7fSkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeVNldC5kZXJlZigpLnNhdmUoeyBwazogdGhpcy5pZCwgZm9ybU5hbWUsIGRhdGEgfSk7XG4gIH1cblxuICBjcmVhdGUoeyBkYXRhID0gbnVsbCB9ID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlTZXQuZGVyZWYoKS5jcmVhdGUoeyBlbGVtOiB0aGlzLCBkYXRhIH0pO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeVNldC5kZXJlZigpLmRlbGV0ZSh7IGVsZW06IHRoaXMgfSk7XG4gIH1cblxuICBsb2FkKCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeVNldC5kZXJlZigpLnVwZGF0ZSh7IGl0ZW06IHRoaXMgfSk7XG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZCgpO1xuICB9XG5cbiAgZ2V0IGlkKCkge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuXG4gIHNldCBpZChkYXRhKSB7XG4gICAgdGhpcy5faWQgPSBkYXRhO1xuICB9XG5cbiAgc2V0IHBrKGRhdGEpIHtcbiAgICB0aGlzLmlkID0gZGF0YTtcbiAgfVxuXG4gIGdldCBwaygpIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlTZXQuZGVyZWYoKS5jbG9zZSgpO1xuICB9XG5cbiAgX29uQ2xvc2UoKSB7XG4gICAgT2JqZWN0LmtleXModGhpcy5jb25zdHJ1Y3Rvci5maWVsZHMpXG4gICAgICAuZmlsdGVyKCh4KSA9PiB0aGlzW2BfJHt4fWBdIGluc3RhbmNlb2YgU2RjUXVlcnlTZXQpXG4gICAgICAuZm9yRWFjaCgoeCkgPT4gdGhpc1tgXyR7eH1gXS5jbG9zZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRoZSBzZXJ2ZXItcmVuZGVyZWQgZGV0YWlsIHZpZXcgZm9yIHRoaXMgbW9kZWwgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZGV0YWlsVmlldyh7IGNiUmVzb2x2ZSA9IG51bGwsIGNiUmVqZWN0ID0gbnVsbCwgdGVtcGxhdGVDb250ZXh0ID0ge30gfSkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeVNldC5kZXJlZigpLmRldGFpbFZpZXcoeyBwazogdGhpcy5pZCwgY2JSZXNvbHZlLCBjYlJlamVjdCwgdGVtcGxhdGVDb250ZXh0IH0pO1xuICB9XG5cbiAgc2VyaWFsaXplKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmNvbnN0cnVjdG9yLmZpZWxkcykucmVkdWNlKChhY2MsIFtrZXksIHZhbF0pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2RjUXVlcnlTZXQpIHtcbiAgICAgICAgaWYgKHZhbC5tYW55X3RvX21hbnkgfHwgdmFsLm9uZV90b19tYW55KSB7XG4gICAgICAgICAgYWNjW2tleV0gPSB2YWx1ZS5nZXRJZHMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBhbGxJZHMgPSB2YWx1ZS5nZXRJZHMoKTtcbiAgICAgICAgICBpZiAoYWxsSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gYWxsSWRzWzBdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodmFsLmlzX3JlbGF0aW9uICYmIHZhbHVlIGluc3RhbmNlb2YgU2RjTW9kZWwpIHtcbiAgICAgICAgYWNjW2tleV0gPSB2YWx1ZS5pZCA/PyBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHRvSnNvbigpIHtcbiAgICBjb25zdCByZXMgPSB7fVxuICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmNvbnN0cnVjdG9yLmZpZWxkcykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgcmVzW2tleV0gPSB2YWx1ZS5uYW1lO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNkY01vZGVsKSB7XG4gICAgICAgIHJlc1trZXldID0gdmFsdWUuaWQ7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2RjUXVlcnlTZXQpIHtcbiAgICAgICAgcmVzW2tleV0gPSB2YWx1ZS5nZXRJZHMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBCYWNrd2FyZHMtY29tcGF0aWJsZSBhbGlhcyBmb3Igc3luY2luZyB2YWx1ZXMgZnJvbSBhIGZvcm0gaW50byB0aGUgbW9kZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gJGZvcm1zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgc3luY0Zvcm1Ub01vZGVsKCRmb3Jtcykge1xuICAgIHJldHVybiB0aGlzLnN5bmNGb3JtKCRmb3Jtcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgZm9ybSBjb2xsZWN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vZGVsIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0geyp9ICRmb3Jtc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIF9yZXNvbHZlRm9ybXMoJGZvcm1zKSB7XG4gICAgaWYgKCEkZm9ybXMgfHwgISRmb3Jtcy5oYXNDbGFzcyh0aGlzLmZvcm1JZCkpIHtcbiAgICAgIHJldHVybiAkKGAuJHt0aGlzLmZvcm1JZH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJGZvcm1zO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcHkgdGhlIGN1cnJlbnQgbW9kZWwgc3RhdGUgaW50byBtYXRjaGluZyBmb3JtIGZpZWxkcy5cbiAgICpcbiAgICogQHBhcmFtIHsqfSAkZm9ybXNcbiAgICovXG4gIHN5bmNNb2RlbFRvRm9ybSgkZm9ybXMpIHtcbiAgICAkZm9ybXMgPSB0aGlzLl9yZXNvbHZlRm9ybXMoJGZvcm1zKTtcblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuY29uc3RydWN0b3IuZmllbGRzO1xuICAgICRmb3Jtcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBrID0gbm9ybWFsaXplUGsoJCh0aGlzKS5kYXRhKFwibW9kZWxfcGtcIikpO1xuICAgICAgaWYgKHNlbGYuaWQgIT09IHBrKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgZm9ybUl0ZW0gb2YgdGhpcy5lbGVtZW50cykge1xuICAgICAgICBsZXQgbmFtZSA9IGZvcm1JdGVtLm5hbWU7XG4gICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT09IFwiXCIgJiYgISFmaWVsZHNbbmFtZV0pIHtcbiAgICAgICAgICBzZXRWYWx1ZUluRmllbGQoZm9ybUl0ZW0sIHNlbGZbbmFtZV0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IG1hdGNoaW5nIGZvcm0gdmFsdWVzIGJhY2sgb250byB0aGUgY3VycmVudCBtb2RlbCBpbnN0YW5jZS5cbiAgICpcbiAgICogSGlkZGVuIGlucHV0cyBhcmUgcGFyc2VkIHRvIHRoZWlyIG9yaWdpbmFsIHByaW1pdGl2ZSB0eXBlIHdoZW4gcG9zc2libGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gJGZvcm1zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgc3luY0Zvcm0oJGZvcm1zKSB7XG4gICAgJGZvcm1zID0gdGhpcy5fcmVzb2x2ZUZvcm1zKCRmb3Jtcyk7XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmNvbnN0cnVjdG9yLmZpZWxkcztcbiAgICBjb25zdCByZXR1cm5WYWx1ZSA9IHt9XG5cbiAgICBmdW5jdGlvbiBzZXRWYWx1ZUluRm9ybShuYW1lLCB2YWx1ZSkge1xuICAgICAgaWYgKCEhZmllbGRzW25hbWVdKSB7XG4gICAgICAgIHNlbGZbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVyblZhbHVlW25hbWVdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgJGZvcm1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGsgPSBub3JtYWxpemVQaygkKHRoaXMpLmRhdGEoXCJtb2RlbF9wa1wiKSk7XG4gICAgICBpZiAoc2VsZi5pZCAhPT0gcGsgJiYgKHNlbGYuaWQgIT09IG51bGwgfHwgcGsgIT09IC0xKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGZvcm1JdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgc2V0VmFsdWVJbkZvcm0oZm9ybUl0ZW0ubmFtZSwgZ2V0VmFsdWVGcm9tRmllbGQoZm9ybUl0ZW0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBjb3JyZWN0IHNlcnZlci1zaWRlIGZvcm0gZm9yIHRoaXMgbW9kZWwgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZm9ybSh7IGNiUmVzb2x2ZSA9IG51bGwsIGNiUmVqZWN0ID0gbnVsbCB9ID0ge30pIHtcbiAgICBpZiAodGhpcy5pZCA9PT0gbnVsbCB8fCB0aGlzLmlkID09PSAtMSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZvcm0oeyBjYlJlamVjdCwgY2JSZXNvbHZlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZWRpdEZvcm0oeyBjYlJlamVjdCwgY2JSZXNvbHZlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgY3JlYXRlIGZvcm0gZm9yIGEgbmV3IG1vZGVsIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIF9jcmVhdGVGb3JtKHsgY2JSZXNvbHZlID0gbnVsbCwgY2JSZWplY3QgPSBudWxsIH0pIHtcbiAgICBsZXQgJGRpdkZvcm0gPSAkKFwiPGRpdj5cIik7XG4gICAgdGhpcy5fcXVlcnlTZXQuZGVyZWYoKS5nZXRGb3JtKHtcbiAgICAgIG1vZGVsT2JqOiB0aGlzLFxuICAgICAgZXZlbnRUeXBlOiBcImNyZWF0ZV9mb3JtXCIsXG4gICAgICBmb3JtTmFtZTogbnVsbCxcbiAgICAgICRkaXZGb3JtLFxuICAgICAgY2JSZXNvbHZlLFxuICAgICAgY2JSZWplY3QsXG4gICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuICRkaXZGb3JtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgZWRpdCBmb3JtIGZvciBhbiBleGlzdGluZyBtb2RlbCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBfZWRpdEZvcm0oeyBjYlJlc29sdmUgPSBudWxsLCBjYlJlamVjdCA9IG51bGwgfSkge1xuICAgIGxldCAkZGl2Rm9ybSA9ICQoXCI8ZGl2PlwiKTtcblxuICAgIHRoaXMuX3F1ZXJ5U2V0LmRlcmVmKCkuZ2V0Rm9ybSh7XG4gICAgICBtb2RlbE9iajogdGhpcyxcbiAgICAgIGV2ZW50VHlwZTogXCJlZGl0X2Zvcm1cIixcbiAgICAgIGZvcm1OYW1lOiBudWxsLFxuICAgICAgJGRpdkZvcm0sXG4gICAgICBjYlJlc29sdmUsXG4gICAgICBjYlJlamVjdCxcbiAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGRpdkZvcm07XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIGEgbmFtZWQgc2VydmVyLXNpZGUgZm9ybSBmb3IgdGhpcyBtb2RlbC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBuYW1lZEZvcm0oeyBmb3JtTmFtZSwgY2JSZXNvbHZlID0gbnVsbCwgY2JSZWplY3QgPSBudWxsIH0pIHtcbiAgICBsZXQgJGRpdkZvcm0gPSAkKCc8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgdGhpcy5fcXVlcnlTZXQuZGVyZWYoKS5nZXRGb3JtKHtcbiAgICAgIG1vZGVsT2JqOiB0aGlzLFxuICAgICAgZXZlbnRUeXBlOiBcIm5hbWVkX2Zvcm1cIixcbiAgICAgIGZvcm1OYW1lLFxuICAgICAgJGRpdkZvcm0sXG4gICAgICBjYlJlc29sdmUsXG4gICAgICBjYlJlamVjdCxcbiAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGRpdkZvcm07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYSBmaWVsZCB2YWx1ZSB1c2luZyB0aGUgc3VwcGxpZWQgZmllbGQgY29uZmlnLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdcbiAgICovXG4gIHZhbGlkYXRlKHZhbHVlLCBjb25maWcpIHtcbiAgICBjb25zdCBlcnIgPSB2YWxpZGF0ZUZpZWxkKHZhbHVlLCBjb25maWcpO1xuICAgIGlmIChlcnIpIHRocm93IG5ldyBFcnJvcihlcnIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSByYXcgaW5wdXQgdmFsdWUgaW50byB0aGUgc2hhcGUgZXhwZWN0ZWQgYnkgdGhlIGZpZWxkIGNvbmZpZy5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlnXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgcGFyc2VWYWx1ZSh2YWx1ZSwgY29uZmlnKSB7XG4gICAgY29uc3Qge1xuICAgICAgdHlwZSxcbiAgICAgIG1hbnlfdG9fbWFueTogbWFueVRvTWFueSxcbiAgICAgIG9uZV90b19tYW55OiBvbmVUb01hbnksXG4gICAgICBtYW55X3RvX29uZTogbWFueVRvT25lLFxuICAgICAgb25lX3RvX29uZTogb25lVG9PbmUsXG4gICAgfSA9IGNvbmZpZztcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICgobWFueVRvTWFueSB8fCBvbmVUb01hbnkgfHwgbWFueVRvT25lIHx8IG9uZVRvT25lKSAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiQ2hhckZpZWxkXCI6XG4gICAgICBjYXNlIFwiVGVleHRGaWVsZFwiOlxuICAgICAgY2FzZSBcIlVVSURGaWVsZFwiOlxuICAgICAgY2FzZSBcIkVtYWlsRmllbGRcIjpcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWA7XG5cbiAgICAgIGNhc2UgXCJJbnRlZ2VyRmllbGRcIjpcbiAgICAgIGNhc2UgXCJBdXRvRmllbGRcIjpcbiAgICAgIGNhc2UgXCJCaWdJbnRlZ2VyRmllbGRcIjpcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG5cbiAgICAgIGNhc2UgXCJGbG9hdEZpZWxkXCI6XG4gICAgICBjYXNlIFwiRGVjaW1hbEZpZWxkXCI6XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcblxuICAgICAgY2FzZSBcIkJvb2xlYW5GaWVsZFwiOlxuICAgICAgICByZXR1cm4gISF2YWx1ZTtcblxuICAgICAgY2FzZSBcIkRhdGVGaWVsZFwiOlxuICAgICAgY2FzZSBcIkRhdGVUaW1lRmllbGRcIjpcbiAgICAgICAgcmV0dXJuIERhdGUucGFyc2UodmFsdWUpO1xuXG4gICAgICBjYXNlIFwiVVJMRmllbGRcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBVUkwodmFsdWUpO1xuXG4gICAgICBjYXNlIFwiRmlsZUZpZWxkXCI6XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoRmlsZUxvYWRlZC5pc1ZhbGlkKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgRmlsZUxvYWRlZCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGaWxlTG9hZGVkKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBGaWxlTG9hZGVkKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgRmlsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICBpZiAoY29uZmlnLm1heF9zaXplICYmIHZhbHVlLnNpemUgPiBjb25maWcubWF4X3NpemUpIHtcbiAgICAgICAgICAgIHJldHVybiBgRmlsZSB0b28gbGFyZ2UgKG1heCAke2NvbmZpZy5tYXhfc2l6ZX0gYnl0ZXMpYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29uZmlnLmFsbG93ZWRfdHlwZXMgJiYgIWNvbmZpZy5hbGxvd2VkX3R5cGVzLmluY2x1ZGVzKHZhbHVlLnR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gYEludmFsaWQgZmlsZSB0eXBlICgke3ZhbHVlLnR5cGV9KWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiSlNPTkZpZWxkXCI6XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBmaWVsZCB2YWx1ZSBhZ2FpbnN0IHRoZSBmaWVsZCBtZXRhZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBiYWNrZW5kLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdcbiAqIEByZXR1cm5zIHs/c3RyaW5nfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZpZWxkKHZhbHVlLCBjb25maWcpIHtcbiAgY29uc3Qge1xuICAgIHR5cGUsXG4gICAgcmVxdWlyZWQsXG4gICAgbWF4X2xlbmd0aDogbWF4TGVuZ3RoLFxuICAgIGlzX3JlbGF0aW9uOiBpc1JlbGF0aW9uLFxuICAgIG1hbnlfdG9fbWFueTogbWFueVRvTWFueSxcbiAgICBvbmVfdG9fbWFueTogb25lVG9NYW55LFxuICAgIG1hbnlfdG9fb25lOiBtYW55VG9PbmUsXG4gICAgb25lX3RvX29uZTogb25lVG9PbmUsXG4gICAgcmVsYXRlZF9tb2RlbDogcmVsYXRlZE1vZGVsLFxuICB9ID0gY29uZmlnO1xuXG4gIHZvaWQgaXNSZWxhdGlvbjtcblxuICBpZiAocmVxdWlyZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwiVGhpcyBmaWVsZCBpcyByZXF1aXJlZFwiO1xuICAgIH1cbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAobWFueVRvTWFueSB8fCBvbmVUb01hbnkgfHwgbWFueVRvT25lIHx8IG9uZVRvT25lKSB7XG4gICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBTZGNRdWVyeVNldCkgfHwgdmFsdWUubW9kZWxOYW1lICE9PSByZWxhdGVkTW9kZWwpIHtcbiAgICAgIGlmKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChtYW55VG9NYW55IHx8IG1hbnlUb09uZSkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuc29tZSgoeCkgPT4gIU51bWJlci5pc05hTihwYXJzZUludCh4KSkpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiBOdW1iZXIuaXNOYU4ocGFyc2VJbnQodmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIG9iamVjdCBvciBJRFwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBcIkNoYXJGaWVsZFwiOlxuICAgIGNhc2UgXCJUZXh0RmllbGRcIjpcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiTXVzdCBiZSBhIHN0cmluZ1wiO1xuICAgICAgfVxuICAgICAgaWYgKG1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGBNYXggbGVuZ3RoIGlzICR7bWF4TGVuZ3RofWA7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJJbnRlZ2VyRmllbGRcIjpcbiAgICBjYXNlIFwiQXV0b0ZpZWxkXCI6XG4gICAgY2FzZSBcIkJpZ0ludGVnZXJGaWVsZFwiOlxuICAgICAgaWYgKCFpc0Zpbml0ZShwYXJzZUludCh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiBcIk11c3QgYmUgYW4gaW50ZWdlclwiO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiRmxvYXRGaWVsZFwiOlxuICAgIGNhc2UgXCJEZWNpbWFsRmllbGRcIjpcbiAgICAgIGlmICghaXNGaW5pdGUocGFyc2VGbG9hdCh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiBcIk11c3QgYmUgYSBudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIkJvb2xlYW5GaWVsZFwiOlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiTXVzdCBiZSBhIGJvb2xlYW5cIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIkRhdGVGaWVsZFwiOlxuICAgIGNhc2UgXCJEYXRlVGltZUZpZWxkXCI6XG4gICAgICBpZiAoaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiBcIk11c3QgYmUgYSB2YWxpZCBkYXRlXCI7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJFbWFpbEZpZWxkXCI6XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8ICEvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gXCJJbnZhbGlkIGVtYWlsXCI7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJVUkxGaWVsZFwiOlxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IFVSTCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFwiSW52YWxpZCBVUkxcIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlVVSURGaWVsZFwiOlxuICAgICAgaWYgKCEvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIFwiSW52YWxpZCBVVUlEXCI7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJKU09ORmllbGRcIjpcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIFwiTXVzdCBiZSBKU09OIG9iamVjdFwiO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIkZpbGVGaWVsZFwiOlxuICAgICAgaWYgKCFGaWxlTG9hZGVkLmlzVmFsaWQodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBGaWxlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRmlsZUxvYWRlZCkpIHtcbiAgICAgICAgcmV0dXJuIFwiTXVzdCBiZSBhIHZhbGlkIGZpbGVcIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIl0sIm5hbWVzIjpbImdldFZhbHVlRnJvbUZpZWxkIiwic2V0VmFsdWVJbkZpZWxkIiwidXVpZHY0IiwiZ2V0TW9kZWwiLCJhcHAiLCJ0cmlnZ2VyIiwiTUFYX0ZJTEVfVVBMT0FEIiwiQ09OTkVDVElOR19SRVFVRVNUX0lEIiwiY2xvbmVPYmplY3QiLCJvcmlnaW5hbCIsIk9iamVjdCIsImFzc2lnbiIsImNyZWF0ZSIsImdldFByb3RvdHlwZU9mIiwic3RydWN0dXJlZENsb25lIiwiU2RjTW9kZWxFcnJvciIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIm1zZyIsImlzX2Vycm9yIiwiaGVhZGVyIiwiaHRtbCIsIkZpbGVMb2FkZWQiLCJuYW1lIiwidXJsIiwiY29udGVudCIsImxvYWQiLCJmb3JjZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiJCIsImdldCIsInRoZW4iLCJjYXRjaCIsInRleHQiLCJpc1ZhbGlkIiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJGaWxlIiwibm9ybWFsaXplUGsiLCJwayIsIm5vcm1hbGl6ZWRQayIsInBhcnNlSW50IiwiTnVtYmVyIiwiaXNOYU4iLCJTZGNRdWVyeVNldCIsIm1vZGVsTmFtZSIsIm1vZGVsUXVlcnkiLCJ2YWx1ZXNMaXN0IiwibG9hZGVkIiwiX29uTm9PcGVuUmVxdWVzdHMiLCJfaXNDb25uZWN0ZWQiLCJfaXNDb25uZWN0aW5nUHJvY2VzcyIsIl9hdXRvUmVjb25uZWN0Iiwic29ja2V0Iiwib3BlblJlcXVlc3QiLCJtb2RlbElkIiwib25VcGRhdGUiLCJvbkNyZWF0ZSIsIlByb3h5IiwidGFyZ2V0IiwicHJvcCIsInNldCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaWR4IiwibmV4dCIsImxlbmd0aCIsImRvbmUiLCJvbl9jcmVhdGUiLCJoYW5kbGVyIiwib25fdXBkYXRlIiwic2V0SWRzIiwiaWRzIiwidmwiLCJfc2V0SWRzIiwiZmlsdGVyIiwiaWRfX2luIiwibWFwIiwieCIsImlkIiwic2V0RmlsdGVyIiwiZm9yRWFjaCIsIl9zZXRRdWVyeVNldCIsIlNkY01vZGVsIiwibnVtTGlzdCIsIm51bUlkIiwiTmFOIiwiaXNJbnRlZ2VyIiwidGVtcE51bUxpc3QiLCJzb21lIiwic3BsaXQiLCJpdGVtIiwibmV3TW9kZWwiLCJuZXciLCJpbmNsdWRlcyIsInZhbHVlSWRzIiwiZ2V0SWRzIiwicHVzaCIsImJ5SWQiLCJub3JtYWxpemVkSWQiLCJmaW5kIiwiZWxtIiwiYWRkRmlsdGVyIiwidmFsdWVzIiwiX3NlbmRMb2FkIiwidXBkYXRlIiwibG9hZFF1ZXJ5IiwiZGVsZXRlIiwiZWxlbSIsImV2ZW50X2lkIiwiaXNDb25uZWN0ZWQiLCJzZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiZXZlbnRfdHlwZSIsImFyZ3MiLCJtb2RlbF9uYW1lIiwibW9kZWxfcXVlcnkiLCJkYXRhIiwiX3NlbmRMaXN0VmlldyIsImNiUmVzb2x2ZSIsImNiUmVqZWN0IiwidGVtcGxhdGVDb250ZXh0IiwidmlldyIsImV2ZW50VHlwZSIsInZpZXdOYW1lIiwiJGRpdkxpc3QiLCJ2aWV3X25hbWUiLCJ0ZW1wbGF0ZV9jb250ZXh0IiwiYXBwZW5kIiwicmVmcmVzaCIsInJlcyIsIl9zZW5kRGV0YWlsVmlldyIsImdldEZvcm0iLCJtb2RlbE9iaiIsImZvcm1OYW1lIiwiJGRpdkZvcm0iLCJmb3JtSWQiLCJmb3JtX25hbWUiLCJjbGFzc05hbWUiLCIkZm9ybSIsImNsb3Nlc3QiLCJhZGRDbGFzcyIsImFkZEZvcm0iLCJoYXNBdHRyaWJ1dGUiLCJhdHRyIiwiZG9Ob3RMb2FkIiwiZGV0YWlsVmlldyIsImxpc3RWaWV3Iiwic2VhcmNoVmFsdWVzIiwic2F2ZSIsIm5vcm1QayIsImVsZW1MaXN0IiwicExpc3QiLCJfcmVhZEZpbGVzIiwiZmlsZXMiLCJzZW5kRGF0YSIsInNlcmlhbGl6ZSIsImluc3RhbmNlIiwicGFyc2UiLCJfcGFyc2VTZXJ2ZXJSZXMiLCJhbGwiLCJfY29ubmVjdFRvU2VydmVyIiwiX2NoZWNrQ29ubmVjdGlvbiIsInJlc29sdmVPcmlnaW4iLCJyZWplY3RPcmlnaW4iLCJjbG9zZSIsIm9uY2xvc2UiLCJfb25DbG9zZSIsInRvU29sdmUiLCJrZXlzIiwiZmllbGRzIiwia2V5IiwiYnVmZmVyIiwiYXJyYXlCdWZmZXIiLCJyZXN1bHQiLCJVaW50OEFycmF5IiwibnVtYmVyT2ZDaHVua3MiLCJNYXRoIiwiY2VpbCIsImZpbGVfbmFtZSIsImZpZWxkX25hbWUiLCJjb250ZW50X2xlbmd0aCIsInNpemUiLCJpIiwiY2h1bmsiLCJmcm9tIiwic2xpY2UiLCJudW1iZXJfb2ZfY2h1bmtzIiwiY29udGVudF90eXBlIiwidHlwZSIsIl9vbk1lc3NhZ2UiLCJlIiwiaGFzT3duUHJvcGVydHkiLCJfY2xvc2VPcGVuUmVxdWVzdCIsImpzb25SZXMiLCJvYmoiLCJjYiIsIm5vT3BlblJlcXVlc3RzIiwiZXZlbnRJZCIsIm1vZGVsSWRlbnRpZmllciIsIndpbmRvdyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJXZWJTb2NrZXQiLCJob3N0Iiwib25tZXNzYWdlIiwiYmluZCIsImNvbnNvbGUiLCJlcnJvciIsIl9rZXkiLCJlbnRyaWVzIiwic2V0VGltZW91dCIsIm9uZXJyb3IiLCJlcnIiLCJvbm9wZW4iLCJyZXN1bHRzIiwibmV3TW9kZWxzIiwiTW9kZWxDbGFzcyIsImN1cnJlbnRNb2RlbCIsInNldFZhbHVlcyIsInNvcnQiLCJhIiwiYiIsIl9pZCIsIl9mb3JtcyIsInF1ZXJ5U2V0IiwibW9kZWxRdWVyeVNldCIsInBhcmVudCIsIm1vZGVOYW1lIiwib25DaGFuZ2UiLCJfb25DaGFuZ2UiLCJvbiIsIl91cGRhdGVGb3JtIiwiZmllbGROYW1lIiwic2VsZiIsImVhY2giLCJpc0xvYWRlZCIsIl9xdWVyeVNldCIsIldlYWtSZWYiLCJkZXJlZiIsInJlZHVjZSIsImFjYyIsInZhbCIsIm1hbnlfdG9fbWFueSIsIm9uZV90b19tYW55IiwiYWxsSWRzIiwiaXNfcmVsYXRpb24iLCJ0b0pzb24iLCJzeW5jRm9ybVRvTW9kZWwiLCIkZm9ybXMiLCJzeW5jRm9ybSIsIl9yZXNvbHZlRm9ybXMiLCJoYXNDbGFzcyIsInN5bmNNb2RlbFRvRm9ybSIsImZvcm1JdGVtIiwiZWxlbWVudHMiLCJyZXR1cm5WYWx1ZSIsInNldFZhbHVlSW5Gb3JtIiwiZm9ybSIsIl9jcmVhdGVGb3JtIiwiX2VkaXRGb3JtIiwibmFtZWRGb3JtIiwidmFsaWRhdGUiLCJjb25maWciLCJ2YWxpZGF0ZUZpZWxkIiwicGFyc2VWYWx1ZSIsIm1hbnlUb01hbnkiLCJvbmVUb01hbnkiLCJtYW55X3RvX29uZSIsIm1hbnlUb09uZSIsIm9uZV90b19vbmUiLCJvbmVUb09uZSIsInBhcnNlRmxvYXQiLCJEYXRlIiwiVVJMIiwibWF4X3NpemUiLCJhbGxvd2VkX3R5cGVzIiwicmVxdWlyZWQiLCJtYXhfbGVuZ3RoIiwibWF4TGVuZ3RoIiwiaXNSZWxhdGlvbiIsInJlbGF0ZWRfbW9kZWwiLCJyZWxhdGVkTW9kZWwiLCJ1bmRlZmluZWQiLCJpc0Zpbml0ZSIsInRlc3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_model.js\n\n}");
|
|
77
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SdcQuerySet: () => (/* binding */ SdcQuerySet),\n/* harmony export */ \"default\": () => (/* binding */ SdcModel)\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_socket_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\n\n\n\nconst MAX_FILE_UPLOAD = 25000;\nconst CONNECTING_REQUEST_ID = \"_connecting_process\";\n\nconst cloneObject = (original) => {\n return Object.assign(\n Object.create(Object.getPrototypeOf(original)),\n structuredClone(original)\n );\n}\n\nclass SdcModelError extends Error {\n constructor(props) {\n if (typeof props === 'string') {\n props = {\n msg: props,\n is_error: true,\n header: 'Error'\n }\n }\n super(props.msg)\n this.msg = props.msg;\n this.header = props.header;\n this.is_error = props.is_error;\n this.html = props.html;\n }\n}\n\nclass FileLoaded {\n constructor({ name, url }) {\n this.name = name;\n this.url = url;\n this.content = null;\n }\n\n async load(force = false) {\n if (force || !this.content) {\n this.content = await new Promise((resolve, reject) => {\n $.get(this.url).then(resolve).catch(\n () => {\n resolve('');\n }\n );\n });\n }\n\n return this.content;\n }\n\n async text() {\n return this.load();\n }\n\n static isValid(value) {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !(value instanceof File) &&\n typeof value.url === \"string\" &&\n typeof value.name === \"string\"\n );\n }\n\n\n}\n\n/**\n * Normalize an incoming primary key value.\n *\n * `-1` is used throughout this module as the sentinel for \"new object / no pk\".\n *\n * @param {*} pk\n * @returns {number}\n */\nfunction normalizePk(pk) {\n const normalizedPk = parseInt(pk ?? -1, 10);\n return Number.isNaN(normalizedPk) ? -1 : normalizedPk;\n}\n\nclass SdcQuerySet {\n /**\n * Lightweight client-side collection wrapper around the SDC model websocket.\n *\n * The queryset exposes array-like access through a proxy while also keeping\n * track of socket state and outstanding requests for that model.\n *\n * @param {string} modelName\n * @param {object} modelQuery\n */\n constructor(modelName, modelQuery = {}) {\n this.valuesList = [];\n this.loaded = false;\n this.modelName = modelName;\n this.modelQuery = modelQuery ?? {};\n this._onNoOpenRequests = [];\n this._isConnected = false;\n this._isConnectingProcess = false;\n this._autoReconnect = true;\n this.socket = null;\n // Request resolvers are stored by websocket event id until the server responds.\n this.openRequest = {};\n this.modelId = 0;\n this.onUpdate = () => {\n };\n this.onCreate = () => {\n };\n\n return new Proxy(this, {\n get(target, prop) {\n if (typeof prop !== \"symbol\" && !isNaN(prop)) {\n return target.valuesList[prop];\n }\n return target[prop];\n },\n\n set(target, prop, value) {\n if (!isNaN(prop)) {\n target.valuesList[prop] = value;\n return true;\n }\n target[prop] = value;\n return true;\n }\n });\n }\n\n [Symbol.iterator]() {\n let idx = -1;\n return {\n next: () => {\n ++idx;\n if (idx < this.valuesList.length) {\n return { value: this.valuesList[idx], done: false };\n }\n return { value: null, done: true };\n },\n };\n }\n\n set on_create(handler) {\n this.onCreate = handler;\n }\n\n set on_update(handler) {\n this.onUpdate = handler;\n }\n\n /**\n *\n *\n * @param {Array<integr|string>|integer|SdcModel|SdcQuerySet|string} ids\n */\n setIds(ids) {\n const vl = this._setIds(ids);\n const filter = {\n id__in: vl.map((x) => x.id)\n }\n\n this.setFilter(filter);\n return vl;\n }\n\n /**\n *\n *\n * @param {Array<integr|string>|integer|SdcModel|SdcQuerySet|string} ids\n */cloneObject\n _setIds(ids) {\n\n if (ids === null || ids === \"\" || Array.isArray(ids) && ids.length === 0) {\n this.valuesList = [];\n return this.valuesList;\n } else if (ids instanceof SdcQuerySet) {\n this.valuesList = ids.valuesList.map(cloneObject);\n this.valuesList.forEach(value => value._setQuerySet(this, true));\n return this.valuesList;\n } else if (ids instanceof SdcModel) {\n this.valuesList = [cloneObject(ids)];\n this.valuesList.forEach(value => value._setQuerySet(this, true));\n return this.valuesList;\n }\n\n let numList, numId = Number.NaN;\n if (Number.isInteger(ids)) {\n numId = ids;\n } else if (ids instanceof Array) {\n const tempNumList = ids.map((x) => parseInt(x));\n if (!tempNumList.some(Number.isNaN)) {\n numList = tempNumList;\n }\n } else if (typeof ids === \"string\") {\n const tempNumList = ids.split(',').map((x) => parseInt(x));\n if (!tempNumList.some(Number.isNaN)) {\n numList = tempNumList\n } else {\n numId = parseInt(ids);\n }\n }\n\n if (!Number.isNaN(numId)) {\n this.valuesList = this.valuesList.filter((item) => numId === item.id);\n if (this.valuesList.length === 0) {\n const newModel = this.new();\n newModel.id = numId;\n }\n } else if (numList) {\n this.valuesList = this.valuesList.filter((item) => numList.includes(item.id));\n const valueIds = this.getIds();\n numList.filter(x => !valueIds.includes(x)).forEach((id) => {\n this.valuesList.push(new ((0,_sdc_socket_js__WEBPACK_IMPORTED_MODULE_1__.getModel)(this.modelName))({ id }));\n });\n }\n return this.valuesList;\n }\n\n getIds() {\n return this.valuesList.map(x => x.id);\n }\n\n /**\n * Number of model instances currently present in the queryset cache.\n *\n * @returns {number}\n */\n get length() {\n return this.valuesList.length;\n }\n\n /**\n * Resolve a model instance by id, loading the queryset first if needed.\n *\n * @param {*} id\n * @returns {SdcModel|null}\n */\n byId(id) {\n if (id !== null) {\n const normalizedId = normalizePk(id);\n return this.valuesList.find((elm) => elm.id === normalizedId) ?? null;\n }\n\n return null;\n }\n\n /**\n * Merge additional query constraints into the current queryset.\n *\n * @param {object} modelQuery\n * @returns {SdcQuerySet}\n */\n setFilter(modelQuery) {\n this.modelQuery = modelQuery;\n return this;\n }\n\n addFilter(modelQuery) {\n this.modelQuery = Object.assign({}, this.modelQuery, modelQuery);\n return this;\n }\n\n /**\n * @param {?object} values\n * @returns {SdcModel}\n */\n new(values = {}) {\n const newModel = new ((0,_sdc_socket_js__WEBPACK_IMPORTED_MODULE_1__.getModel)(this.modelName))(values);\n newModel._setQuerySet(this, false);\n this.valuesList.push(newModel);\n return newModel;\n }\n\n /**\n * Load model instances matching the current query into the queryset cache.\n *\n * @param {?object} modelQuery\n * @returns {Promise<SdcQuerySet>}\n */\n load(modelQuery = null) {\n this.valuesList = [];\n this.modelQuery = modelQuery ?? this.modelQuery;\n return this._sendLoad();\n }\n\n /**\n * Load model instances matching the current query into the queryset cache.\n *\n * @param {?object} modelQuery\n * @param {?SdcModel} item\n * @returns {Promise<SdcQuerySet>}\n */\n update({ modelQuery = null, item = null }) {\n this.modelQuery = modelQuery ?? this.modelQuery;\n let loadQuery = item ? { id: item.id } : this.modelQuery;\n return this._sendLoad(loadQuery);\n }\n\n /**\n *\n * @param pk {integr}\n * @param elem {SdcModel}\n * @returns {Promise<unknown>}\n */\n delete({ pk = null, id = null, elem = null }) {\n pk ??= id;\n pk = !elem ? pk : elem.id;\n if (pk === null) {\n throw new Error(\"pk or elem must be set\");\n }\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this.socket.send(\n JSON.stringify({\n event: \"model\",\n event_type: \"delete\",\n event_id,\n args: {\n model_name: this.modelName,\n model_query: this.modelQuery,\n id: pk,\n pk\n },\n }),\n );\n\n this.openRequest[event_id] = [resolve, reject];\n });\n });\n }\n\n /**\n * Request the server-side queryset data over the model websocket.\n *\n * @returns {Promise<*>}\n */\n _sendLoad(loadQuery = null) {\n return this.isConnected().then(() => {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(\n JSON.stringify({\n event: \"model\",\n event_type: \"load\",\n event_id,\n args: {\n model_name: this.modelName,\n model_query: loadQuery ?? this.modelQuery,\n },\n }),\n );\n\n this.openRequest[event_id] = [(data) => {\n this.loaded = true;\n resolve(data);\n }, reject];\n });\n });\n }\n\n /**\n * Render the list-view endpoint for the current model.\n *\n * @param {object} options\n * @returns {*}\n */\n _sendListView({\n modelQuery = {},\n cbResolve = null,\n cbReject = null,\n templateContext = {},\n }) {\n return this.view({\n modelQuery,\n cbResolve,\n cbReject,\n templateContext,\n eventType: \"list_view\",\n });\n }\n\n /**\n * Render a named model view and append its HTML to a container element.\n *\n * @param {object} options\n * @returns {*}\n */\n view({\n viewName = \"html_list_template\",\n modelQuery = {},\n cbResolve = null,\n cbReject = null,\n templateContext = {},\n eventType = \"named_view\",\n }) {\n let $divList = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n this.socket.send(\n JSON.stringify({\n event: \"model\",\n event_type: eventType,\n event_id,\n args: {\n view_name: viewName,\n model_name: this.modelName,\n model_query: modelQuery,\n template_context: templateContext,\n },\n }),\n );\n\n this.openRequest[event_id] = [\n (data) => {\n $divList.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.refresh($divList);\n cbResolve && cbResolve(data);\n },\n (res) => {\n cbReject && cbReject(res);\n },\n ];\n });\n\n return $divList;\n }\n\n /**\n * Render the detail-view endpoint for a single model instance.\n *\n * @param {object} options\n * @returns {*}\n */\n _sendDetailView({\n pk = null,\n id = null,\n cbResolve = null,\n cbReject = null,\n templateContext = {},\n }) {\n pk ??= id;\n pk = normalizePk(pk);\n let $divList = $('<div class=\"container-fluid\">');\n\n this.isConnected().then(() => {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n this.socket.send(\n JSON.stringify({\n event: \"model\",\n event_type: \"detail_view\",\n event_id,\n args: {\n model_name: this.modelName,\n model_query: this.modelQuery,\n id: pk,\n pk,\n template_context: templateContext,\n },\n }),\n );\n\n this.openRequest[event_id] = [\n (data) => {\n $divList.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.refresh($divList);\n cbResolve && cbResolve(data);\n },\n (res) => {\n cbReject && cbReject(res);\n },\n ];\n });\n\n return $divList;\n }\n\n /**\n * Fetch a model form fragment and attach the SDC form metadata expected by\n * the rest of the client.\n *\n * @param {string} eventType\n * @param {SdcModel} modelObj\n * @param formName\n * @param $divForm\n * @param cbResolve\n * @param cbReject\n * @param formId\n */\n getForm({ modelObj, eventType, formName, $divForm, cbResolve, cbReject, formId }) {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n const pk = modelObj.id ?? -1;\n this.isConnected().then(() => {\n this.socket.send(\n JSON.stringify({\n event: \"model\",\n event_type: eventType,\n event_id,\n args: {\n model_name: this.modelName,\n id: pk,\n pk,\n form_name: formName,\n },\n }),\n );\n });\n\n const className = pk === null || pk === -1 ? \"create\" : \"edit\";\n\n this.openRequest[event_id] = [\n (data) => {\n $divForm.append(data.html);\n let $form = $divForm\n .closest(\"form\")\n .addClass(\n `sdc-model-${className}-form sdc-model-form ${formId}`,\n )\n .data(\"model\", modelObj)\n .data(\"model_pk\", pk)\n .data(\"form_name\", formName);\n modelObj.addForm($form);\n if ($form.length > 0 && !$form[0].hasAttribute(\"sdc_submit\")) {\n $form.attr(\"sdc_submit\", \"submitModelFormDistributor\");\n }\n\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.refresh($divForm).then(() => null);\n cbResolve && cbResolve(data);\n },\n (res) => {\n cbReject && cbReject(res);\n },\n ];\n }\n\n /**\n * Fetch a single model instance matching the current query.\n *\n * @param {?object} modelQuery\n * @param {?boolean} doNotLoad true if modelQuery contains id or pk and object does not need to be loaded.\n * @returns {Promise<SdcModel>}\n */\n async get(modelQuery = null, doNotLoad = false) {\n if (doNotLoad) {\n const id = modelQuery?.id ?? this.modelQuery?.id;\n if(modelQuery) {\n this.setFilter(modelQuery);\n }\n return this.byId(id) ?? this.new(modelQuery || this.modelQuery);\n }\n await this.load(modelQuery);\n if (this.length !== 1) {\n throw new Error(`model query returns ${this.length} but only 1 expected.`);\n }\n\n this.addFilter({ id: this.valuesList[0].id });\n\n return this.valuesList[0];\n }\n\n detailView({ pk, cbResolve = null, cbReject = null, templateContext = {} }) {\n return this._sendDetailView({\n id: pk,\n cbResolve,\n cbReject,\n templateContext,\n });\n }\n\n listView({ modelQuery = {}, searchValues = {}, cbResolve = null, cbReject = null, templateContext = {} }) {\n return this._sendListView({\n modelQuery: Object.assign({}, this.modelQuery, modelQuery, { '__search_values': searchValues }),\n cbResolve,\n cbReject,\n templateContext,\n });\n }\n\n save({ pk = null, id = null, formName = \"edit_form\", data = null } = {}) {\n pk ??= id;\n const normPk = normalizePk(pk);\n return this.isConnected().then(() => {\n let elemList;\n if (normPk > -1) {\n const elem = this.byId(normPk);\n if (!elem) {\n return Promise.reject(new SdcModelError(`Element not found with ID: ${normPk}`));\n }\n elemList = [elem];\n } else {\n elemList = this.valuesList;\n }\n let pList = [];\n elemList.forEach((elem) => {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n pList.push(\n new Promise((resolve, reject) => {\n this._readFiles(elem).then((files) => {\n const sendData = data ? { ...data } : elem.serialize();\n sendData.id = elem.id;\n this.socket.send(\n JSON.stringify({\n event: \"model\",\n event_type: \"save\",\n event_id,\n args: {\n form_name: formName,\n model_name: this.modelName,\n model_query: this.modelQuery,\n data: sendData,\n id: sendData.id,\n pk: sendData.id,\n files: files,\n },\n }),\n );\n\n this.openRequest[event_id] = [\n (res) => {\n let data =\n typeof res.data.instance === \"string\"\n ? JSON.parse(res.data.instance)\n : res.data.instance;\n res.data.instance = this._parseServerRes(data);\n resolve(res);\n },\n reject,\n ];\n });\n }),\n );\n });\n\n return Promise.all(pList);\n });\n }\n\n /**\n *\n * @param elem {?SdcModel}\n * @param data {?object}\n * @returns {Promise<unknown>}\n */\n create({ elem = null, data = null } = {}) {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n if (!elem) {\n elem = this.new(data);\n }\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this._readFiles(elem).then((files) => {\n this.socket.send(\n JSON.stringify({\n event: \"model\",\n event_type: \"create\",\n event_id,\n args: {\n model_name: this.modelName,\n model_query: this.modelQuery,\n data: data ?? elem?.serialize() ?? {},\n files: files,\n },\n }),\n );\n\n this.openRequest[event_id] = [\n (res) => {\n let data =\n typeof res.data.instance === \"string\"\n ? JSON.parse(res.data.instance)\n : res.data.instance;\n if (elem) {\n elem.id = data[0]?.id || data[0]?.pk;\n }\n res.data.instance = this._parseServerRes(data)[0];\n resolve(res);\n },\n reject,\n ];\n });\n });\n });\n }\n\n /**\n * Ensure the websocket is open and has completed the server-side connect\n * handshake before issuing model requests.\n *\n * Multiple callers can arrive while a connection attempt is already in\n * progress. In that case they are queued behind the same synthetic request id.\n *\n * @returns {Promise<void>}\n */\n isConnected() {\n return new Promise((resolve, reject) => {\n if (this._isConnected) {\n resolve();\n } else if (\n !this._isConnectingProcess ||\n !this.openRequest[CONNECTING_REQUEST_ID]\n ) {\n this._isConnectingProcess = true;\n this.openRequest[CONNECTING_REQUEST_ID] = [() => {\n }, () => {\n }];\n this._connectToServer().then(() => {\n resolve(this._checkConnection());\n });\n } else {\n const [resolveOrigin, rejectOrigin] =\n this.openRequest[CONNECTING_REQUEST_ID];\n this.openRequest[CONNECTING_REQUEST_ID] = [\n () => {\n resolveOrigin();\n resolve();\n },\n () => {\n rejectOrigin();\n reject();\n },\n ];\n }\n });\n }\n\n /**\n * Close the websocket and disable automatic reconnect for this queryset.\n */\n close() {\n if (this.socket) {\n this._autoReconnect = false;\n this.socket.onclose = () => {\n };\n this.socket.close();\n delete this[\"socket\"];\n }\n\n this.valuesList.forEach((elem) => {\n elem._onClose()\n });\n }\n\n /**\n * Upload attached `File` values in fixed-size chunks before save/create calls.\n *\n * @param {SdcModel} elem\n * @returns {Promise<object>}\n */\n _readFiles(elem) {\n let toSolve = [];\n let files = {};\n if (!elem) {\n return Promise.resolve(files);\n }\n Object.keys(elem.constructor.fields).forEach((key) => {\n const value = elem[key];\n if (value instanceof File) {\n toSolve.push(\n new Promise(async (resolve, reject) => {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n this.openRequest[event_id] = [resolve, reject];\n\n const buffer = await value.arrayBuffer();\n let result = new Uint8Array(buffer);\n let numberOfChunks = Math.ceil(result.length / MAX_FILE_UPLOAD);\n files[key] = {\n id: event_id,\n file_name: value.name,\n field_name: key,\n content_length: value.size,\n };\n for (let i = 0; i < numberOfChunks; ++i) {\n const chunk = Array.from(result.slice(\n MAX_FILE_UPLOAD * i,\n MAX_FILE_UPLOAD * (i + 1),\n ));\n this.socket.send(\n JSON.stringify({\n event: \"model\",\n event_type: \"upload\",\n event_id,\n args: {\n chunk,\n idx: i,\n number_of_chunks: numberOfChunks,\n file_name: value.name,\n field_name: key,\n content_length: value.size,\n content_type: value.type,\n model_name: this.modelName,\n model_query: this.modelQuery,\n },\n }),\n );\n }\n }),\n );\n }\n });\n\n return Promise.all(toSolve).then(() => {\n return files;\n });\n }\n\n /**\n * Route websocket responses to the matching pending request and update local\n * state when the server sends model payloads.\n *\n * @param {MessageEvent} e\n */\n async _onMessage(e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (this.openRequest.hasOwnProperty(data.event_id)) {\n this.openRequest[data.event_id][1](new SdcModelError(data));\n this._closeOpenRequest(data.event_id);\n }\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)(\"pushErrorMsg\", data.header || \"\", data.msg || \"\");\n }\n\n if (data.type === \"connect\") {\n this.openRequest[CONNECTING_REQUEST_ID][1](new SdcModelError(data));\n this._closeOpenRequest(CONNECTING_REQUEST_ID);\n this._autoReconnect = false;\n this.socket.close();\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)(\"pushMsg\", data.header || \"\", data.msg || \"\");\n }\n\n if (data.type === \"connect\") {\n this._isConnected = true;\n this._isConnectingProcess = false;\n this.openRequest[CONNECTING_REQUEST_ID][0](data);\n this._closeOpenRequest(CONNECTING_REQUEST_ID);\n } else if ([\"load\", \"named_view\", \"detail_view\"].includes(data.type)) {\n const jsonRes = JSON.parse(data.args.data);\n data.args.data = await this._parseServerRes(jsonRes);\n } else if (data.type === \"on_update\" || data.type === \"on_create\") {\n const jsonRes = JSON.parse(data.args.data);\n\n let obj = await this._parseServerRes(jsonRes);\n let cb;\n\n if (data.type === \"on_create\") {\n cb = this.onCreate;\n } else {\n cb = this.onUpdate;\n }\n\n cb(obj);\n data.args.data = obj;\n }\n\n let instance = data.data?.instance;\n if (instance) {\n data.data.instance = JSON.parse(data.data.instance);\n }\n\n if (this.openRequest.hasOwnProperty(data.event_id)) {\n this.openRequest[data.event_id][0](data);\n this._closeOpenRequest(data.event_id);\n }\n }\n }\n\n /**\n * Wait until all in-flight websocket requests for this queryset are resolved.\n *\n * @returns {Promise<void>}\n */\n noOpenRequests() {\n return new Promise((resolve) => {\n if (Object.keys(this.openRequest).length === 0) {\n return resolve();\n }\n\n this._onNoOpenRequests.push(resolve);\n });\n }\n\n /**\n * Remove a completed request and wake any `noOpenRequests()` waiters when the\n * request map becomes empty.\n *\n * @param {string} eventId\n */\n _closeOpenRequest(eventId) {\n delete this.openRequest[eventId];\n if (Object.keys(this.openRequest).length === 0) {\n this._onNoOpenRequests.forEach((x) => x());\n this._onNoOpenRequests = [];\n }\n }\n\n /**\n * Establish the raw websocket connection for this queryset.\n *\n * @returns {Promise<void>}\n */\n _connectToServer() {\n return new Promise((resolve) => {\n const modelIdentifier =\n `${this.modelName}` + (this.modelId > 0 ? `/${this.modelId}` : \"\");\n if (window.location.protocol === \"https:\") {\n this.socket = new WebSocket(\n `wss://${window.location.host}/sdc_ws/model/${modelIdentifier}`,\n );\n } else {\n this.socket = new WebSocket(\n `ws://${window.location.host}/sdc_ws/model/${modelIdentifier}`,\n );\n }\n\n this.socket.onmessage = this._onMessage.bind(this);\n\n this.socket.onclose = (e) => {\n console.error(\n `SDC Model (${this.modelName}, ${this.modelId}) Socket closed unexpectedly`,\n );\n this._isConnected = false;\n for (const [_key, value] of Object.entries(this.openRequest)) {\n value[1](e);\n }\n this.openRequest = {};\n\n setTimeout(() => {\n if (this._autoReconnect) {\n this._connectToServer().then(() => {\n });\n }\n }, 1000);\n };\n\n this.socket.onerror = (err) => {\n console.error(`Model Socket encountered error: ${err} Closing socket`);\n if (this._isConnected) {\n try {\n this.socket.close();\n } catch (e) {\n }\n }\n };\n\n this.socket.onopen = () => {\n resolve();\n };\n });\n }\n\n /**\n * Perform the application-level connect handshake once the websocket opens.\n *\n * @returns {Promise<*>}\n */\n _checkConnection() {\n const event_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(\n JSON.stringify({\n event: \"model\",\n event_type: \"connect\",\n event_id,\n args: {\n model_name: this.modelName,\n model_query: this.modelQuery,\n },\n }),\n );\n\n this.openRequest[event_id] = [resolve, reject];\n });\n }\n\n /**\n * Convert the backend model payload into locally tracked model objects.\n *\n * @param {Array<object>} results\n */\n _parseServerRes(results) {\n const newModels = []\n for (const x of results) {\n const ModelClass = (0,_sdc_socket_js__WEBPACK_IMPORTED_MODULE_1__.getModel)(this.modelName);\n if (!ModelClass) {\n throw new Error(`${this.modelName} is no SdcModel. mybe the models ar not importad.`);\n }\n const newModel = new ModelClass({ 'id': x.id ?? x.pk, ...x.fields });\n const currentModel = this.byId(newModel.id);\n if (currentModel) {\n currentModel.setValues(newModel);\n newModels.push(currentModel);\n } else {\n this.valuesList.push(newModel);\n newModel._setQuerySet(this, true);\n newModels.push(newModel);\n }\n }\n this.valuesList.sort((a, b) => a._id - b._id);\n return newModels;\n }\n}\n\nclass SdcModel {\n static fields = {};\n\n /**\n * Base model wrapper used by SDC model registrations.\n *\n * @param {string} modelName\n */\n constructor(modelName) {\n this._id = null;\n this._forms = [];\n this.loaded = false;\n this.formId = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n this.modelName = modelName;\n }\n\n /**\n *\n * @param {object?} modelQuerySet\n * @param {AbstractSDC} parent\n * @returns {SdcQuerySet}\n */\n static querySet(modelQuerySet = null, parent = null) {\n if (!parent) {\n return new SdcQuerySet(this.modeName, modelQuerySet);\n }\n\n return parent.querySet(this.modeName, modelQuerySet);\n }\n\n addForm($form) {\n // Remove old listeners if form already set\n const onChange = this._onChange.bind(this);\n\n this._forms.push($form);\n\n if ($form) {\n // Attach delegated event handler to all inputs\n $form.on(\n \"input.formWatcher change.formWatcher\",\n \"input, select, textarea\",\n onChange\n );\n }\n }\n\n _onChange(event) {\n const { name } = event.target;\n if (this.constructor.fields[name]) {\n this[`set${name}`]((0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getValueFromField)(event.target));\n }\n }\n\n _updateForm(fieldName) {\n const self = this;\n this._forms.forEach(($form) => {\n $form.find(`[name=\"${fieldName}\"]`).each(function () {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.setValueInField)(this, self[fieldName])\n });\n });\n }\n\n setValues(data = {}) {\n throw new Error(\"setValues() must be implemented by subclass\");\n }\n\n /**\n * Attach the queryset that owns this model instance.\n *\n * @param {SdcQuerySet} querySet\n * @param {boolean} isLoaded\n */\n _setQuerySet(querySet, isLoaded) {\n this._querySet = new WeakRef(querySet);\n this.loaded = isLoaded;\n }\n\n get querySet() {\n return this._querySet.deref();\n }\n\n save({ formName = \"edit_form\", data = null } = {}) {\n return this._querySet.deref().save({ pk: this.id, formName, data });\n }\n\n create({ data = null } = {}) {\n return this._querySet.deref().create({ elem: this, data });\n }\n\n delete() {\n return this._querySet.deref().delete({ elem: this });\n }\n\n load() {\n return this._querySet.deref().update({ item: this });\n }\n\n update() {\n return this.load();\n }\n\n get id() {\n return this._id;\n }\n\n set id(data) {\n this._id = data;\n }\n\n set pk(data) {\n this.id = data;\n }\n\n get pk() {\n return this._id;\n }\n\n close() {\n return this._querySet.deref().close();\n }\n\n _onClose() {\n Object.keys(this.constructor.fields)\n .filter((x) => this[`_${x}`] instanceof SdcQuerySet)\n .forEach((x) => this[`_${x}`].close());\n }\n\n /**\n * Request the server-rendered detail view for this model instance.\n *\n * @param {object} options\n * @returns {*}\n */\n detailView({ cbResolve = null, cbReject = null, templateContext = {} }) {\n return this._querySet.deref().detailView({ pk: this.id, cbResolve, cbReject, templateContext });\n }\n\n serialize() {\n return Object.entries(this.constructor.fields).reduce((acc, [key, val]) => {\n const value = this[key];\n if (value instanceof SdcQuerySet) {\n if (val.many_to_many || val.one_to_many) {\n acc[key] = value.getIds();\n } else {\n const allIds = value.getIds();\n if (allIds.length > 0) {\n acc[key] = allIds[0];\n } else {\n acc[key] = null;\n }\n\n }\n } else if (val.is_relation && value instanceof SdcModel) {\n acc[key] = value.id ?? null;\n } else {\n acc[key] = value;\n }\n\n return acc\n }, {});\n }\n\n toJson() {\n const res = {}\n for (let key in this.constructor.fields) {\n const value = this[key];\n\n if (value instanceof File) {\n res[key] = value.name;\n } else if (value instanceof SdcModel) {\n res[key] = value.id;\n } else if (value instanceof SdcQuerySet) {\n res[key] = value.getIds();\n } else {\n res[key] = value;\n }\n }\n\n return res;\n }\n\n /**\n * Backwards-compatible alias for syncing values from a form into the model.\n *\n * @param {*} $forms\n * @returns {*}\n */\n syncFormToModel($forms) {\n return this.syncForm($forms);\n }\n\n /**\n * Resolve the form collection associated with this model instance.\n *\n * @param {*} $forms\n * @returns {*}\n */\n _resolveForms($forms) {\n if (!$forms || !$forms.hasClass(this.formId)) {\n return $(`.${this.formId}`);\n }\n\n return $forms;\n }\n\n /**\n * Copy the current model state into matching form fields.\n *\n * @param {*} $forms\n */\n syncModelToForm($forms) {\n $forms = this._resolveForms($forms);\n\n const self = this;\n const fields = this.constructor.fields;\n $forms.each(function () {\n const pk = normalizePk($(this).data(\"model_pk\"));\n if (self.id !== pk) {\n return;\n }\n\n for (let formItem of this.elements) {\n let name = formItem.name;\n if (name && name !== \"\" && !!fields[name]) {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.setValueInField)(formItem, self[name])\n }\n }\n });\n }\n\n /**\n * Copy matching form values back onto the current model instance.\n *\n * Hidden inputs are parsed to their original primitive type when possible.\n *\n * @param {*} $forms\n * @returns {*}\n */\n syncForm($forms) {\n $forms = this._resolveForms($forms);\n\n const self = this;\n const fields = this.constructor.fields;\n const returnValue = {}\n\n function setValueInForm(name, value) {\n if (!!fields[name]) {\n self[name] = value;\n }\n returnValue[name] = value;\n }\n\n $forms.each(function () {\n const pk = normalizePk($(this).data(\"model_pk\"));\n if (self.id !== pk && (self.id !== null || pk !== -1)) {\n return;\n }\n\n for (let formItem of this.elements) {\n setValueInForm(formItem.name, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getValueFromField)(formItem));\n }\n\n return self;\n });\n\n return returnValue;\n }\n\n /**\n * Render the correct server-side form for this model state.\n *\n * @param {object} options\n * @returns {*}\n */\n form({ cbResolve = null, cbReject = null } = {}) {\n if (this.id === null || this.id === -1) {\n return this._createForm({ cbReject, cbResolve });\n }\n return this._editForm({ cbReject, cbResolve });\n }\n\n /**\n * Render the create form for a new model instance.\n *\n * @param {object} options\n * @returns {*}\n */\n _createForm({ cbResolve = null, cbReject = null }) {\n let $divForm = $(\"<div>\");\n this._querySet.deref().getForm({\n modelObj: this,\n eventType: \"create_form\",\n formName: null,\n $divForm,\n cbResolve,\n cbReject,\n formId: this.formId,\n });\n\n return $divForm;\n }\n\n /**\n * Render the edit form for an existing model instance.\n *\n * @param {object} options\n * @returns {*}\n */\n _editForm({ cbResolve = null, cbReject = null }) {\n let $divForm = $(\"<div>\");\n\n this._querySet.deref().getForm({\n modelObj: this,\n eventType: \"edit_form\",\n formName: null,\n $divForm,\n cbResolve,\n cbReject,\n formId: this.formId,\n });\n\n return $divForm;\n }\n\n /**\n * Render a named server-side form for this model.\n *\n * @param {object} options\n * @returns {*}\n */\n namedForm({ formName, cbResolve = null, cbReject = null }) {\n let $divForm = $('<div class=\"container-fluid\">');\n\n this._querySet.deref().getForm({\n modelObj: this,\n eventType: \"named_form\",\n formName,\n $divForm,\n cbResolve,\n cbReject,\n formId: this.formId,\n });\n\n return $divForm;\n }\n\n /**\n * Validate a field value using the supplied field config.\n *\n * @param {*} value\n * @param {object} config\n */\n validate(value, config) {\n const err = validateField(value, config);\n if (err) throw new Error(err);\n }\n\n /**\n * Convert a raw input value into the shape expected by the field config.\n *\n * @param {*} value\n * @param {object} config\n * @returns {*}\n */\n parseValue(value, config) {\n const {\n type,\n many_to_many: manyToMany,\n one_to_many: oneToMany,\n many_to_one: manyToOne,\n one_to_one: oneToOne,\n } = config;\n if (value === null) {\n return null;\n }\n\n if ((manyToMany || oneToMany || manyToOne || oneToOne) && value && typeof value === 'string') {\n return JSON.parse(value);\n }\n\n switch (type) {\n case \"CharField\":\n case \"TeextField\":\n case \"UUIDField\":\n case \"EmailField\":\n return `${value}`;\n\n case \"IntegerField\":\n case \"AutoField\":\n case \"BigIntegerField\":\n return parseInt(value, 10);\n\n case \"FloatField\":\n case \"DecimalField\":\n return parseFloat(value);\n\n case \"BooleanField\":\n return !!value;\n\n case \"DateField\":\n case \"DateTimeField\":\n return Date.parse(value);\n\n case \"URLField\":\n return new URL(value);\n\n case \"FileField\":\n if (value == null) {\n return null;\n }\n\n if (typeof value === \"string\") {\n return null;\n }\n\n if (FileLoaded.isValid(value)) {\n return new FileLoaded(value);\n }\n\n if (value instanceof FileLoaded) {\n return new FileLoaded(value);\n }\n\n if (typeof File !== \"undefined\" && value instanceof File) {\n if (config.max_size && value.size > config.max_size) {\n return `File too large (max ${config.max_size} bytes)`;\n }\n\n if (config.allowed_types && !config.allowed_types.includes(value.type)) {\n return `Invalid file type (${value.type})`;\n }\n\n return value;\n }\n break;\n\n case \"JSONField\":\n if (typeof value === \"object\") {\n return value;\n }\n if (typeof value === \"string\") {\n return JSON.parse(value);\n }\n break;\n\n default:\n break;\n }\n\n return value;\n }\n}\n\n/**\n * Validate a field value against the field metadata received from the backend.\n *\n * @param {*} value\n * @param {object} config\n * @returns {?string}\n */\nfunction validateField(value, config) {\n const {\n type,\n required,\n max_length: maxLength,\n is_relation: isRelation,\n many_to_many: manyToMany,\n one_to_many: oneToMany,\n many_to_one: manyToOne,\n one_to_one: oneToOne,\n related_model: relatedModel,\n } = config;\n\n void isRelation;\n\n if (required) {\n if (value === null || value === undefined || value === \"\") {\n return \"This field is required\";\n }\n }\n\n if (value === null || value === undefined || value === \"\") {\n return null;\n }\n\n if (manyToMany || oneToMany || manyToOne || oneToOne) {\n if (!(value instanceof SdcQuerySet) || value.modelName !== relatedModel) {\n if(typeof value === 'string') {\n value = JSON.parse(value);\n }\n\n if ((manyToMany || manyToOne) && Array.isArray(value) && value.some((x) => !Number.isNaN(parseInt(x)))) {\n return null;\n }\n if (typeof value !== \"object\" && Number.isNaN(parseInt(value))) {\n return \"Must be object or ID\";\n }\n return null;\n }\n }\n\n switch (type) {\n case \"CharField\":\n case \"TextField\":\n if (typeof value !== \"string\") {\n return \"Must be a string\";\n }\n if (maxLength && value.length > maxLength) {\n return `Max length is ${maxLength}`;\n }\n break;\n\n case \"IntegerField\":\n case \"AutoField\":\n case \"BigIntegerField\":\n if (!isFinite(parseInt(value))) {\n return \"Must be an integer\";\n }\n break;\n\n case \"FloatField\":\n case \"DecimalField\":\n if (!isFinite(parseFloat(value))) {\n return \"Must be a number\";\n }\n break;\n\n case \"BooleanField\":\n if (typeof value !== \"boolean\") {\n return \"Must be a boolean\";\n }\n break;\n\n case \"DateField\":\n case \"DateTimeField\":\n if (isNaN(Date.parse(value))) {\n return \"Must be a valid date\";\n }\n break;\n\n case \"EmailField\":\n if (typeof value !== \"string\" || !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n return \"Invalid email\";\n }\n break;\n\n case \"URLField\":\n try {\n new URL(value);\n } catch {\n return \"Invalid URL\";\n }\n break;\n\n case \"UUIDField\":\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(value)) {\n return \"Invalid UUID\";\n }\n break;\n\n case \"JSONField\":\n if (typeof value !== \"object\") {\n return \"Must be JSON object\";\n }\n break;\n case \"FileField\":\n if (!FileLoaded.isValid(value) && !(value instanceof File) && !(value instanceof FileLoaded)) {\n return \"Must be a valid file\";\n }\n break;\n default:\n break;\n }\n\n return null;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfbW9kZWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTRFO0FBQ2xDO0FBQ047QUFDTTs7QUFFMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0IsV0FBVztBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQSxpQkFBaUI7QUFDakIsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDBEQUEwRDtBQUN2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QUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsVUFBVTtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsR0FBRztBQUNwRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfbW9kZWwuanM/OTkxYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRWYWx1ZUZyb21GaWVsZCwgc2V0VmFsdWVJbkZpZWxkLCB1dWlkdjQgfSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7IGdldE1vZGVsIH0gZnJvbSBcIi4vc2RjX3NvY2tldC5qc1wiXG5pbXBvcnQgeyBhcHAgfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuaW1wb3J0IHsgdHJpZ2dlciB9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcblxuY29uc3QgTUFYX0ZJTEVfVVBMT0FEID0gMjUwMDA7XG5jb25zdCBDT05ORUNUSU5HX1JFUVVFU1RfSUQgPSBcIl9jb25uZWN0aW5nX3Byb2Nlc3NcIjtcblxuY29uc3QgY2xvbmVPYmplY3QgPSAob3JpZ2luYWwpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpKSxcbiAgICBzdHJ1Y3R1cmVkQ2xvbmUob3JpZ2luYWwpXG4gICk7XG59XG5cbmNsYXNzIFNkY01vZGVsRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3BzID0ge1xuICAgICAgICBtc2c6IHByb3BzLFxuICAgICAgICBpc19lcnJvcjogdHJ1ZSxcbiAgICAgICAgaGVhZGVyOiAnRXJyb3InXG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyKHByb3BzLm1zZylcbiAgICB0aGlzLm1zZyA9IHByb3BzLm1zZztcbiAgICB0aGlzLmhlYWRlciA9IHByb3BzLmhlYWRlcjtcbiAgICB0aGlzLmlzX2Vycm9yID0gcHJvcHMuaXNfZXJyb3I7XG4gICAgdGhpcy5odG1sID0gcHJvcHMuaHRtbDtcbiAgfVxufVxuXG5jbGFzcyBGaWxlTG9hZGVkIHtcbiAgY29uc3RydWN0b3IoeyBuYW1lLCB1cmwgfSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgdGhpcy5jb250ZW50ID0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGxvYWQoZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmIChmb3JjZSB8fCAhdGhpcy5jb250ZW50KSB7XG4gICAgICB0aGlzLmNvbnRlbnQgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICQuZ2V0KHRoaXMudXJsKS50aGVuKHJlc29sdmUpLmNhdGNoKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XG4gIH1cblxuICBhc3luYyB0ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmxvYWQoKTtcbiAgfVxuXG4gIHN0YXRpYyBpc1ZhbGlkKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpICYmXG4gICAgICB0eXBlb2YgdmFsdWUudXJsID09PSBcInN0cmluZ1wiICYmXG4gICAgICB0eXBlb2YgdmFsdWUubmFtZSA9PT0gXCJzdHJpbmdcIlxuICAgICk7XG4gIH1cblxuXG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFuIGluY29taW5nIHByaW1hcnkga2V5IHZhbHVlLlxuICpcbiAqIGAtMWAgaXMgdXNlZCB0aHJvdWdob3V0IHRoaXMgbW9kdWxlIGFzIHRoZSBzZW50aW5lbCBmb3IgXCJuZXcgb2JqZWN0IC8gbm8gcGtcIi5cbiAqXG4gKiBAcGFyYW0geyp9IHBrXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQayhwaykge1xuICBjb25zdCBub3JtYWxpemVkUGsgPSBwYXJzZUludChwayA/PyAtMSwgMTApO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKG5vcm1hbGl6ZWRQaykgPyAtMSA6IG5vcm1hbGl6ZWRQaztcbn1cblxuZXhwb3J0IGNsYXNzIFNkY1F1ZXJ5U2V0IHtcbiAgLyoqXG4gICAqIExpZ2h0d2VpZ2h0IGNsaWVudC1zaWRlIGNvbGxlY3Rpb24gd3JhcHBlciBhcm91bmQgdGhlIFNEQyBtb2RlbCB3ZWJzb2NrZXQuXG4gICAqXG4gICAqIFRoZSBxdWVyeXNldCBleHBvc2VzIGFycmF5LWxpa2UgYWNjZXNzIHRocm91Z2ggYSBwcm94eSB3aGlsZSBhbHNvIGtlZXBpbmdcbiAgICogdHJhY2sgb2Ygc29ja2V0IHN0YXRlIGFuZCBvdXRzdGFuZGluZyByZXF1ZXN0cyBmb3IgdGhhdCBtb2RlbC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kZWxRdWVyeVxuICAgKi9cbiAgY29uc3RydWN0b3IobW9kZWxOYW1lLCBtb2RlbFF1ZXJ5ID0ge30pIHtcbiAgICB0aGlzLnZhbHVlc0xpc3QgPSBbXTtcbiAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMubW9kZWxOYW1lID0gbW9kZWxOYW1lO1xuICAgIHRoaXMubW9kZWxRdWVyeSA9IG1vZGVsUXVlcnkgPz8ge307XG4gICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cyA9IFtdO1xuICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5faXNDb25uZWN0aW5nUHJvY2VzcyA9IGZhbHNlO1xuICAgIHRoaXMuX2F1dG9SZWNvbm5lY3QgPSB0cnVlO1xuICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICAvLyBSZXF1ZXN0IHJlc29sdmVycyBhcmUgc3RvcmVkIGJ5IHdlYnNvY2tldCBldmVudCBpZCB1bnRpbCB0aGUgc2VydmVyIHJlc3BvbmRzLlxuICAgIHRoaXMub3BlblJlcXVlc3QgPSB7fTtcbiAgICB0aGlzLm1vZGVsSWQgPSAwO1xuICAgIHRoaXMub25VcGRhdGUgPSAoKSA9PiB7XG4gICAgfTtcbiAgICB0aGlzLm9uQ3JlYXRlID0gKCkgPT4ge1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb3h5KHRoaXMsIHtcbiAgICAgIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wICE9PSBcInN5bWJvbFwiICYmICFpc05hTihwcm9wKSkge1xuICAgICAgICAgIHJldHVybiB0YXJnZXQudmFsdWVzTGlzdFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BdO1xuICAgICAgfSxcblxuICAgICAgc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc05hTihwcm9wKSkge1xuICAgICAgICAgIHRhcmdldC52YWx1ZXNMaXN0W3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgbGV0IGlkeCA9IC0xO1xuICAgIHJldHVybiB7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICsraWR4O1xuICAgICAgICBpZiAoaWR4IDwgdGhpcy52YWx1ZXNMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB0aGlzLnZhbHVlc0xpc3RbaWR4XSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZSB9O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgc2V0IG9uX2NyZWF0ZShoYW5kbGVyKSB7XG4gICAgdGhpcy5vbkNyZWF0ZSA9IGhhbmRsZXI7XG4gIH1cblxuICBzZXQgb25fdXBkYXRlKGhhbmRsZXIpIHtcbiAgICB0aGlzLm9uVXBkYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PGludGVncnxzdHJpbmc+fGludGVnZXJ8U2RjTW9kZWx8U2RjUXVlcnlTZXR8c3RyaW5nfSBpZHNcbiAgICovXG4gIHNldElkcyhpZHMpIHtcbiAgICBjb25zdCB2bCA9IHRoaXMuX3NldElkcyhpZHMpO1xuICAgIGNvbnN0IGZpbHRlciA9IHtcbiAgICAgIGlkX19pbjogdmwubWFwKCh4KSA9PiB4LmlkKVxuICAgIH1cblxuICAgIHRoaXMuc2V0RmlsdGVyKGZpbHRlcik7XG4gICAgcmV0dXJuIHZsO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8aW50ZWdyfHN0cmluZz58aW50ZWdlcnxTZGNNb2RlbHxTZGNRdWVyeVNldHxzdHJpbmd9IGlkc1xuICAgKi9jbG9uZU9iamVjdFxuICBfc2V0SWRzKGlkcykge1xuXG4gICAgaWYgKGlkcyA9PT0gbnVsbCB8fCBpZHMgPT09IFwiXCIgfHwgQXJyYXkuaXNBcnJheShpZHMpICYmIGlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudmFsdWVzTGlzdCA9IFtdO1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVzTGlzdDtcbiAgICB9IGVsc2UgaWYgKGlkcyBpbnN0YW5jZW9mIFNkY1F1ZXJ5U2V0KSB7XG4gICAgICB0aGlzLnZhbHVlc0xpc3QgPSBpZHMudmFsdWVzTGlzdC5tYXAoY2xvbmVPYmplY3QpO1xuICAgICAgdGhpcy52YWx1ZXNMaXN0LmZvckVhY2godmFsdWUgPT4gdmFsdWUuX3NldFF1ZXJ5U2V0KHRoaXMsIHRydWUpKTtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlc0xpc3Q7XG4gICAgfSBlbHNlIGlmIChpZHMgaW5zdGFuY2VvZiBTZGNNb2RlbCkge1xuICAgICAgdGhpcy52YWx1ZXNMaXN0ID0gW2Nsb25lT2JqZWN0KGlkcyldO1xuICAgICAgdGhpcy52YWx1ZXNMaXN0LmZvckVhY2godmFsdWUgPT4gdmFsdWUuX3NldFF1ZXJ5U2V0KHRoaXMsIHRydWUpKTtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlc0xpc3Q7XG4gICAgfVxuXG4gICAgbGV0IG51bUxpc3QsIG51bUlkID0gTnVtYmVyLk5hTjtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpZHMpKSB7XG4gICAgICBudW1JZCA9IGlkcztcbiAgICB9IGVsc2UgaWYgKGlkcyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBjb25zdCB0ZW1wTnVtTGlzdCA9IGlkcy5tYXAoKHgpID0+IHBhcnNlSW50KHgpKTtcbiAgICAgIGlmICghdGVtcE51bUxpc3Quc29tZShOdW1iZXIuaXNOYU4pKSB7XG4gICAgICAgIG51bUxpc3QgPSB0ZW1wTnVtTGlzdDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpZHMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IHRlbXBOdW1MaXN0ID0gaWRzLnNwbGl0KCcsJykubWFwKCh4KSA9PiBwYXJzZUludCh4KSk7XG4gICAgICBpZiAoIXRlbXBOdW1MaXN0LnNvbWUoTnVtYmVyLmlzTmFOKSkge1xuICAgICAgICBudW1MaXN0ID0gdGVtcE51bUxpc3RcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG51bUlkID0gcGFyc2VJbnQoaWRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIU51bWJlci5pc05hTihudW1JZCkpIHtcbiAgICAgIHRoaXMudmFsdWVzTGlzdCA9IHRoaXMudmFsdWVzTGlzdC5maWx0ZXIoKGl0ZW0pID0+IG51bUlkID09PSBpdGVtLmlkKTtcbiAgICAgIGlmICh0aGlzLnZhbHVlc0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IG5ld01vZGVsID0gdGhpcy5uZXcoKTtcbiAgICAgICAgbmV3TW9kZWwuaWQgPSBudW1JZDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG51bUxpc3QpIHtcbiAgICAgIHRoaXMudmFsdWVzTGlzdCA9IHRoaXMudmFsdWVzTGlzdC5maWx0ZXIoKGl0ZW0pID0+IG51bUxpc3QuaW5jbHVkZXMoaXRlbS5pZCkpO1xuICAgICAgY29uc3QgdmFsdWVJZHMgPSB0aGlzLmdldElkcygpO1xuICAgICAgbnVtTGlzdC5maWx0ZXIoeCA9PiAhdmFsdWVJZHMuaW5jbHVkZXMoeCkpLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWVzTGlzdC5wdXNoKG5ldyAoZ2V0TW9kZWwodGhpcy5tb2RlbE5hbWUpKSh7IGlkIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZXNMaXN0O1xuICB9XG5cbiAgZ2V0SWRzKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlc0xpc3QubWFwKHggPT4geC5pZCk7XG4gIH1cblxuICAvKipcbiAgICogTnVtYmVyIG9mIG1vZGVsIGluc3RhbmNlcyBjdXJyZW50bHkgcHJlc2VudCBpbiB0aGUgcXVlcnlzZXQgY2FjaGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlc0xpc3QubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBtb2RlbCBpbnN0YW5jZSBieSBpZCwgbG9hZGluZyB0aGUgcXVlcnlzZXQgZmlyc3QgaWYgbmVlZGVkLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IGlkXG4gICAqIEByZXR1cm5zIHtTZGNNb2RlbHxudWxsfVxuICAgKi9cbiAgYnlJZChpZCkge1xuICAgIGlmIChpZCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZElkID0gbm9ybWFsaXplUGsoaWQpO1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVzTGlzdC5maW5kKChlbG0pID0+IGVsbS5pZCA9PT0gbm9ybWFsaXplZElkKSA/PyBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIGFkZGl0aW9uYWwgcXVlcnkgY29uc3RyYWludHMgaW50byB0aGUgY3VycmVudCBxdWVyeXNldC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG1vZGVsUXVlcnlcbiAgICogQHJldHVybnMge1NkY1F1ZXJ5U2V0fVxuICAgKi9cbiAgc2V0RmlsdGVyKG1vZGVsUXVlcnkpIHtcbiAgICB0aGlzLm1vZGVsUXVlcnkgPSBtb2RlbFF1ZXJ5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkRmlsdGVyKG1vZGVsUXVlcnkpIHtcbiAgICB0aGlzLm1vZGVsUXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm1vZGVsUXVlcnksIG1vZGVsUXVlcnkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtTZGNNb2RlbH1cbiAgICovXG4gIG5ldyh2YWx1ZXMgPSB7fSkge1xuICAgIGNvbnN0IG5ld01vZGVsID0gbmV3IChnZXRNb2RlbCh0aGlzLm1vZGVsTmFtZSkpKHZhbHVlcyk7XG4gICAgbmV3TW9kZWwuX3NldFF1ZXJ5U2V0KHRoaXMsIGZhbHNlKTtcbiAgICB0aGlzLnZhbHVlc0xpc3QucHVzaChuZXdNb2RlbCk7XG4gICAgcmV0dXJuIG5ld01vZGVsO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbW9kZWwgaW5zdGFuY2VzIG1hdGNoaW5nIHRoZSBjdXJyZW50IHF1ZXJ5IGludG8gdGhlIHF1ZXJ5c2V0IGNhY2hlLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1vZGVsUXVlcnlcbiAgICogQHJldHVybnMge1Byb21pc2U8U2RjUXVlcnlTZXQ+fVxuICAgKi9cbiAgbG9hZChtb2RlbFF1ZXJ5ID0gbnVsbCkge1xuICAgIHRoaXMudmFsdWVzTGlzdCA9IFtdO1xuICAgIHRoaXMubW9kZWxRdWVyeSA9IG1vZGVsUXVlcnkgPz8gdGhpcy5tb2RlbFF1ZXJ5O1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbW9kZWwgaW5zdGFuY2VzIG1hdGNoaW5nIHRoZSBjdXJyZW50IHF1ZXJ5IGludG8gdGhlIHF1ZXJ5c2V0IGNhY2hlLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1vZGVsUXVlcnlcbiAgICogQHBhcmFtIHs/U2RjTW9kZWx9IGl0ZW1cbiAgICogQHJldHVybnMge1Byb21pc2U8U2RjUXVlcnlTZXQ+fVxuICAgKi9cbiAgdXBkYXRlKHsgbW9kZWxRdWVyeSA9IG51bGwsIGl0ZW0gPSBudWxsIH0pIHtcbiAgICB0aGlzLm1vZGVsUXVlcnkgPSBtb2RlbFF1ZXJ5ID8/IHRoaXMubW9kZWxRdWVyeTtcbiAgICBsZXQgbG9hZFF1ZXJ5ID0gaXRlbSA/IHsgaWQ6IGl0ZW0uaWQgfSA6IHRoaXMubW9kZWxRdWVyeTtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvYWQobG9hZFF1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcGsge2ludGVncn1cbiAgICogQHBhcmFtIGVsZW0ge1NkY01vZGVsfVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAgICovXG4gIGRlbGV0ZSh7IHBrID0gbnVsbCwgaWQgPSBudWxsLCBlbGVtID0gbnVsbCB9KSB7XG4gICAgcGsgPz89IGlkO1xuICAgIHBrID0gIWVsZW0gPyBwayA6IGVsZW0uaWQ7XG4gICAgaWYgKHBrID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwayBvciBlbGVtIG11c3QgYmUgc2V0XCIpO1xuICAgIH1cbiAgICBjb25zdCBldmVudF9pZCA9IHV1aWR2NCgpO1xuICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiBcIm1vZGVsXCIsXG4gICAgICAgICAgICBldmVudF90eXBlOiBcImRlbGV0ZVwiLFxuICAgICAgICAgICAgZXZlbnRfaWQsXG4gICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxOYW1lLFxuICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbFF1ZXJ5LFxuICAgICAgICAgICAgICBpZDogcGssXG4gICAgICAgICAgICAgIHBrXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub3BlblJlcXVlc3RbZXZlbnRfaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRoZSBzZXJ2ZXItc2lkZSBxdWVyeXNldCBkYXRhIG92ZXIgdGhlIG1vZGVsIHdlYnNvY2tldC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Kj59XG4gICAqL1xuICBfc2VuZExvYWQobG9hZFF1ZXJ5ID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBldmVudF9pZCA9IHV1aWR2NCgpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogXCJtb2RlbFwiLFxuICAgICAgICAgICAgZXZlbnRfdHlwZTogXCJsb2FkXCIsXG4gICAgICAgICAgICBldmVudF9pZCxcbiAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbE5hbWUsXG4gICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiBsb2FkUXVlcnkgPz8gdGhpcy5tb2RlbFF1ZXJ5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0W2V2ZW50X2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICB9LCByZWplY3RdO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBsaXN0LXZpZXcgZW5kcG9pbnQgZm9yIHRoZSBjdXJyZW50IG1vZGVsLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIF9zZW5kTGlzdFZpZXcoe1xuICAgICAgICAgICAgICAgICAgbW9kZWxRdWVyeSA9IHt9LFxuICAgICAgICAgICAgICAgICAgY2JSZXNvbHZlID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgIGNiUmVqZWN0ID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlQ29udGV4dCA9IHt9LFxuICAgICAgICAgICAgICAgIH0pIHtcbiAgICByZXR1cm4gdGhpcy52aWV3KHtcbiAgICAgIG1vZGVsUXVlcnksXG4gICAgICBjYlJlc29sdmUsXG4gICAgICBjYlJlamVjdCxcbiAgICAgIHRlbXBsYXRlQ29udGV4dCxcbiAgICAgIGV2ZW50VHlwZTogXCJsaXN0X3ZpZXdcIixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBuYW1lZCBtb2RlbCB2aWV3IGFuZCBhcHBlbmQgaXRzIEhUTUwgdG8gYSBjb250YWluZXIgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICB2aWV3KHtcbiAgICAgICAgIHZpZXdOYW1lID0gXCJodG1sX2xpc3RfdGVtcGxhdGVcIixcbiAgICAgICAgIG1vZGVsUXVlcnkgPSB7fSxcbiAgICAgICAgIGNiUmVzb2x2ZSA9IG51bGwsXG4gICAgICAgICBjYlJlamVjdCA9IG51bGwsXG4gICAgICAgICB0ZW1wbGF0ZUNvbnRleHQgPSB7fSxcbiAgICAgICAgIGV2ZW50VHlwZSA9IFwibmFtZWRfdmlld1wiLFxuICAgICAgIH0pIHtcbiAgICBsZXQgJGRpdkxpc3QgPSAkKCc8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgZXZlbnRfaWQgPSB1dWlkdjQoKTtcbiAgICAgIHRoaXMuc29ja2V0LnNlbmQoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudDogXCJtb2RlbFwiLFxuICAgICAgICAgIGV2ZW50X3R5cGU6IGV2ZW50VHlwZSxcbiAgICAgICAgICBldmVudF9pZCxcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICB2aWV3X25hbWU6IHZpZXdOYW1lLFxuICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbE5hbWUsXG4gICAgICAgICAgICBtb2RlbF9xdWVyeTogbW9kZWxRdWVyeSxcbiAgICAgICAgICAgIHRlbXBsYXRlX2NvbnRleHQ6IHRlbXBsYXRlQ29udGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMub3BlblJlcXVlc3RbZXZlbnRfaWRdID0gW1xuICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgICRkaXZMaXN0LmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgIGFwcC5yZWZyZXNoKCRkaXZMaXN0KTtcbiAgICAgICAgICBjYlJlc29sdmUgJiYgY2JSZXNvbHZlKGRhdGEpO1xuICAgICAgICB9LFxuICAgICAgICAocmVzKSA9PiB7XG4gICAgICAgICAgY2JSZWplY3QgJiYgY2JSZWplY3QocmVzKTtcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGRpdkxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBkZXRhaWwtdmlldyBlbmRwb2ludCBmb3IgYSBzaW5nbGUgbW9kZWwgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgX3NlbmREZXRhaWxWaWV3KHtcbiAgICAgICAgICAgICAgICAgICAgcGsgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpZCA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNiUmVzb2x2ZSA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNiUmVqZWN0ID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVDb250ZXh0ID0ge30sXG4gICAgICAgICAgICAgICAgICB9KSB7XG4gICAgcGsgPz89IGlkO1xuICAgIHBrID0gbm9ybWFsaXplUGsocGspO1xuICAgIGxldCAkZGl2TGlzdCA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcblxuICAgIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50X2lkID0gdXVpZHY0KCk7XG4gICAgICB0aGlzLnNvY2tldC5zZW5kKFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZXZlbnQ6IFwibW9kZWxcIixcbiAgICAgICAgICBldmVudF90eXBlOiBcImRldGFpbF92aWV3XCIsXG4gICAgICAgICAgZXZlbnRfaWQsXG4gICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbE5hbWUsXG4gICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbFF1ZXJ5LFxuICAgICAgICAgICAgaWQ6IHBrLFxuICAgICAgICAgICAgcGssXG4gICAgICAgICAgICB0ZW1wbGF0ZV9jb250ZXh0OiB0ZW1wbGF0ZUNvbnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICB0aGlzLm9wZW5SZXF1ZXN0W2V2ZW50X2lkXSA9IFtcbiAgICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgICAkZGl2TGlzdC5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgICBhcHAucmVmcmVzaCgkZGl2TGlzdCk7XG4gICAgICAgICAgY2JSZXNvbHZlICYmIGNiUmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfSxcbiAgICAgICAgKHJlcykgPT4ge1xuICAgICAgICAgIGNiUmVqZWN0ICYmIGNiUmVqZWN0KHJlcyk7XG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICRkaXZMaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGEgbW9kZWwgZm9ybSBmcmFnbWVudCBhbmQgYXR0YWNoIHRoZSBTREMgZm9ybSBtZXRhZGF0YSBleHBlY3RlZCBieVxuICAgKiB0aGUgcmVzdCBvZiB0aGUgY2xpZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlXG4gICAqIEBwYXJhbSB7U2RjTW9kZWx9IG1vZGVsT2JqXG4gICAqIEBwYXJhbSBmb3JtTmFtZVxuICAgKiBAcGFyYW0gJGRpdkZvcm1cbiAgICogQHBhcmFtIGNiUmVzb2x2ZVxuICAgKiBAcGFyYW0gY2JSZWplY3RcbiAgICogQHBhcmFtIGZvcm1JZFxuICAgKi9cbiAgZ2V0Rm9ybSh7IG1vZGVsT2JqLCBldmVudFR5cGUsIGZvcm1OYW1lLCAkZGl2Rm9ybSwgY2JSZXNvbHZlLCBjYlJlamVjdCwgZm9ybUlkIH0pIHtcbiAgICBjb25zdCBldmVudF9pZCA9IHV1aWR2NCgpO1xuICAgIGNvbnN0IHBrID0gbW9kZWxPYmouaWQgPz8gLTE7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5zb2NrZXQuc2VuZChcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGV2ZW50OiBcIm1vZGVsXCIsXG4gICAgICAgICAgZXZlbnRfdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICAgIGV2ZW50X2lkLFxuICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxOYW1lLFxuICAgICAgICAgICAgaWQ6IHBrLFxuICAgICAgICAgICAgcGssXG4gICAgICAgICAgICBmb3JtX25hbWU6IGZvcm1OYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBrID09PSBudWxsIHx8IHBrID09PSAtMSA/IFwiY3JlYXRlXCIgOiBcImVkaXRcIjtcblxuICAgIHRoaXMub3BlblJlcXVlc3RbZXZlbnRfaWRdID0gW1xuICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgJGRpdkZvcm0uYXBwZW5kKGRhdGEuaHRtbCk7XG4gICAgICAgIGxldCAkZm9ybSA9ICRkaXZGb3JtXG4gICAgICAgICAgLmNsb3Nlc3QoXCJmb3JtXCIpXG4gICAgICAgICAgLmFkZENsYXNzKFxuICAgICAgICAgICAgYHNkYy1tb2RlbC0ke2NsYXNzTmFtZX0tZm9ybSBzZGMtbW9kZWwtZm9ybSAke2Zvcm1JZH1gLFxuICAgICAgICAgIClcbiAgICAgICAgICAuZGF0YShcIm1vZGVsXCIsIG1vZGVsT2JqKVxuICAgICAgICAgIC5kYXRhKFwibW9kZWxfcGtcIiwgcGspXG4gICAgICAgICAgLmRhdGEoXCJmb3JtX25hbWVcIiwgZm9ybU5hbWUpO1xuICAgICAgICBtb2RlbE9iai5hZGRGb3JtKCRmb3JtKTtcbiAgICAgICAgaWYgKCRmb3JtLmxlbmd0aCA+IDAgJiYgISRmb3JtWzBdLmhhc0F0dHJpYnV0ZShcInNkY19zdWJtaXRcIikpIHtcbiAgICAgICAgICAkZm9ybS5hdHRyKFwic2RjX3N1Ym1pdFwiLCBcInN1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwLnJlZnJlc2goJGRpdkZvcm0pLnRoZW4oKCkgPT4gbnVsbCk7XG4gICAgICAgIGNiUmVzb2x2ZSAmJiBjYlJlc29sdmUoZGF0YSk7XG4gICAgICB9LFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICBjYlJlamVjdCAmJiBjYlJlamVjdChyZXMpO1xuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGEgc2luZ2xlIG1vZGVsIGluc3RhbmNlIG1hdGNoaW5nIHRoZSBjdXJyZW50IHF1ZXJ5LlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1vZGVsUXVlcnlcbiAgICogQHBhcmFtIHs/Ym9vbGVhbn0gZG9Ob3RMb2FkIHRydWUgaWYgbW9kZWxRdWVyeSBjb250YWlucyBpZCBvciBwayBhbmQgb2JqZWN0IGRvZXMgbm90IG5lZWQgdG8gYmUgbG9hZGVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTZGNNb2RlbD59XG4gICAqL1xuICBhc3luYyBnZXQobW9kZWxRdWVyeSA9IG51bGwsIGRvTm90TG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKGRvTm90TG9hZCkge1xuICAgICAgY29uc3QgaWQgPSBtb2RlbFF1ZXJ5Py5pZCA/PyB0aGlzLm1vZGVsUXVlcnk/LmlkO1xuICAgICAgaWYobW9kZWxRdWVyeSkge1xuICAgICAgICB0aGlzLnNldEZpbHRlcihtb2RlbFF1ZXJ5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmJ5SWQoaWQpID8/IHRoaXMubmV3KG1vZGVsUXVlcnkgfHwgdGhpcy5tb2RlbFF1ZXJ5KTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5sb2FkKG1vZGVsUXVlcnkpO1xuICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBtb2RlbCBxdWVyeSByZXR1cm5zICR7dGhpcy5sZW5ndGh9IGJ1dCBvbmx5IDEgZXhwZWN0ZWQuYCk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRGaWx0ZXIoeyBpZDogdGhpcy52YWx1ZXNMaXN0WzBdLmlkIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzTGlzdFswXTtcbiAgfVxuXG4gIGRldGFpbFZpZXcoeyBwaywgY2JSZXNvbHZlID0gbnVsbCwgY2JSZWplY3QgPSBudWxsLCB0ZW1wbGF0ZUNvbnRleHQgPSB7fSB9KSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmREZXRhaWxWaWV3KHtcbiAgICAgIGlkOiBwayxcbiAgICAgIGNiUmVzb2x2ZSxcbiAgICAgIGNiUmVqZWN0LFxuICAgICAgdGVtcGxhdGVDb250ZXh0LFxuICAgIH0pO1xuICB9XG5cbiAgbGlzdFZpZXcoeyBtb2RlbFF1ZXJ5ID0ge30sIHNlYXJjaFZhbHVlcyA9IHt9LCBjYlJlc29sdmUgPSBudWxsLCBjYlJlamVjdCA9IG51bGwsIHRlbXBsYXRlQ29udGV4dCA9IHt9IH0pIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExpc3RWaWV3KHtcbiAgICAgIG1vZGVsUXVlcnk6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMubW9kZWxRdWVyeSwgbW9kZWxRdWVyeSwgeyAnX19zZWFyY2hfdmFsdWVzJzogc2VhcmNoVmFsdWVzIH0pLFxuICAgICAgY2JSZXNvbHZlLFxuICAgICAgY2JSZWplY3QsXG4gICAgICB0ZW1wbGF0ZUNvbnRleHQsXG4gICAgfSk7XG4gIH1cblxuICBzYXZlKHsgcGsgPSBudWxsLCBpZCA9IG51bGwsIGZvcm1OYW1lID0gXCJlZGl0X2Zvcm1cIiwgZGF0YSA9IG51bGwgfSA9IHt9KSB7XG4gICAgcGsgPz89IGlkO1xuICAgIGNvbnN0IG5vcm1QayA9IG5vcm1hbGl6ZVBrKHBrKTtcbiAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgbGV0IGVsZW1MaXN0O1xuICAgICAgaWYgKG5vcm1QayA+IC0xKSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLmJ5SWQobm9ybVBrKTtcbiAgICAgICAgaWYgKCFlbGVtKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTZGNNb2RlbEVycm9yKGBFbGVtZW50IG5vdCBmb3VuZCB3aXRoIElEOiAke25vcm1Qa31gKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbUxpc3QgPSBbZWxlbV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtTGlzdCA9IHRoaXMudmFsdWVzTGlzdDtcbiAgICAgIH1cbiAgICAgIGxldCBwTGlzdCA9IFtdO1xuICAgICAgZWxlbUxpc3QuZm9yRWFjaCgoZWxlbSkgPT4ge1xuICAgICAgICBjb25zdCBldmVudF9pZCA9IHV1aWR2NCgpO1xuICAgICAgICBwTGlzdC5wdXNoKFxuICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JlYWRGaWxlcyhlbGVtKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzZW5kRGF0YSA9IGRhdGEgPyB7IC4uLmRhdGEgfSA6IGVsZW0uc2VyaWFsaXplKCk7XG4gICAgICAgICAgICAgIHNlbmREYXRhLmlkID0gZWxlbS5pZDtcbiAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICBldmVudDogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogXCJzYXZlXCIsXG4gICAgICAgICAgICAgICAgICBldmVudF9pZCxcbiAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybV9uYW1lOiBmb3JtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsUXVlcnksXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHNlbmREYXRhLFxuICAgICAgICAgICAgICAgICAgICBpZDogc2VuZERhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgIHBrOiBzZW5kRGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0W2V2ZW50X2lkXSA9IFtcbiAgICAgICAgICAgICAgICAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXMuZGF0YS5pbnN0YW5jZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgID8gSlNPTi5wYXJzZShyZXMuZGF0YS5pbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IHJlcy5kYXRhLmluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwTGlzdCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGVsZW0gez9TZGNNb2RlbH1cbiAgICogQHBhcmFtIGRhdGEgez9vYmplY3R9XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICAgKi9cbiAgY3JlYXRlKHsgZWxlbSA9IG51bGwsIGRhdGEgPSBudWxsIH0gPSB7fSkge1xuICAgIGNvbnN0IGV2ZW50X2lkID0gdXVpZHY0KCk7XG4gICAgaWYgKCFlbGVtKSB7XG4gICAgICBlbGVtID0gdGhpcy5uZXcoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLl9yZWFkRmlsZXMoZWxlbSkudGhlbigoZmlsZXMpID0+IHtcbiAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICBldmVudDogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICBldmVudF90eXBlOiBcImNyZWF0ZVwiLFxuICAgICAgICAgICAgICBldmVudF9pZCxcbiAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxOYW1lLFxuICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsUXVlcnksXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSA/PyBlbGVtPy5zZXJpYWxpemUoKSA/PyB7fSxcbiAgICAgICAgICAgICAgICBmaWxlczogZmlsZXMsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5vcGVuUmVxdWVzdFtldmVudF9pZF0gPSBbXG4gICAgICAgICAgICAocmVzKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBkYXRhID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgcmVzLmRhdGEuaW5zdGFuY2UgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgID8gSlNPTi5wYXJzZShyZXMuZGF0YS5pbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAgIDogcmVzLmRhdGEuaW5zdGFuY2U7XG4gICAgICAgICAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5pZCA9IGRhdGFbMF0/LmlkIHx8IGRhdGFbMF0/LnBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlcy5kYXRhLmluc3RhbmNlID0gdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoZGF0YSlbMF07XG4gICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWplY3QsXG4gICAgICAgICAgXTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgdGhlIHdlYnNvY2tldCBpcyBvcGVuIGFuZCBoYXMgY29tcGxldGVkIHRoZSBzZXJ2ZXItc2lkZSBjb25uZWN0XG4gICAqIGhhbmRzaGFrZSBiZWZvcmUgaXNzdWluZyBtb2RlbCByZXF1ZXN0cy5cbiAgICpcbiAgICogTXVsdGlwbGUgY2FsbGVycyBjYW4gYXJyaXZlIHdoaWxlIGEgY29ubmVjdGlvbiBhdHRlbXB0IGlzIGFscmVhZHkgaW5cbiAgICogcHJvZ3Jlc3MuIEluIHRoYXQgY2FzZSB0aGV5IGFyZSBxdWV1ZWQgYmVoaW5kIHRoZSBzYW1lIHN5bnRoZXRpYyByZXF1ZXN0IGlkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGlzQ29ubmVjdGVkKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNDb25uZWN0ZWQpIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgIXRoaXMuX2lzQ29ubmVjdGluZ1Byb2Nlc3MgfHxcbiAgICAgICAgIXRoaXMub3BlblJlcXVlc3RbQ09OTkVDVElOR19SRVFVRVNUX0lEXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX2lzQ29ubmVjdGluZ1Byb2Nlc3MgPSB0cnVlO1xuICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0W0NPTk5FQ1RJTkdfUkVRVUVTVF9JRF0gPSBbKCkgPT4ge1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgIH1dO1xuICAgICAgICB0aGlzLl9jb25uZWN0VG9TZXJ2ZXIoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2NoZWNrQ29ubmVjdGlvbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbcmVzb2x2ZU9yaWdpbiwgcmVqZWN0T3JpZ2luXSA9XG4gICAgICAgICAgdGhpcy5vcGVuUmVxdWVzdFtDT05ORUNUSU5HX1JFUVVFU1RfSURdO1xuICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0W0NPTk5FQ1RJTkdfUkVRVUVTVF9JRF0gPSBbXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZU9yaWdpbigpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0T3JpZ2luKCk7XG4gICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSB3ZWJzb2NrZXQgYW5kIGRpc2FibGUgYXV0b21hdGljIHJlY29ubmVjdCBmb3IgdGhpcyBxdWVyeXNldC5cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLnNvY2tldCkge1xuICAgICAgdGhpcy5fYXV0b1JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHtcbiAgICAgIH07XG4gICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgZGVsZXRlIHRoaXNbXCJzb2NrZXRcIl07XG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZXNMaXN0LmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgIGVsZW0uX29uQ2xvc2UoKVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZCBhdHRhY2hlZCBgRmlsZWAgdmFsdWVzIGluIGZpeGVkLXNpemUgY2h1bmtzIGJlZm9yZSBzYXZlL2NyZWF0ZSBjYWxscy5cbiAgICpcbiAgICogQHBhcmFtIHtTZGNNb2RlbH0gZWxlbVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxvYmplY3Q+fVxuICAgKi9cbiAgX3JlYWRGaWxlcyhlbGVtKSB7XG4gICAgbGV0IHRvU29sdmUgPSBbXTtcbiAgICBsZXQgZmlsZXMgPSB7fTtcbiAgICBpZiAoIWVsZW0pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmlsZXMpO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhlbGVtLmNvbnN0cnVjdG9yLmZpZWxkcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGVsZW1ba2V5XTtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgdG9Tb2x2ZS5wdXNoKFxuICAgICAgICAgIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50X2lkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0W2V2ZW50X2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuXG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB2YWx1ZS5hcnJheUJ1ZmZlcigpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgICAgICBsZXQgbnVtYmVyT2ZDaHVua3MgPSBNYXRoLmNlaWwocmVzdWx0Lmxlbmd0aCAvIE1BWF9GSUxFX1VQTE9BRCk7XG4gICAgICAgICAgICBmaWxlc1trZXldID0ge1xuICAgICAgICAgICAgICBpZDogZXZlbnRfaWQsXG4gICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgZmllbGRfbmFtZToga2V5LFxuICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aDogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mQ2h1bmtzOyArK2kpIHtcbiAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBBcnJheS5mcm9tKHJlc3VsdC5zbGljZShcbiAgICAgICAgICAgICAgICBNQVhfRklMRV9VUExPQUQgKiBpLFxuICAgICAgICAgICAgICAgIE1BWF9GSUxFX1VQTE9BRCAqIChpICsgMSksXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50OiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICBldmVudF90eXBlOiBcInVwbG9hZFwiLFxuICAgICAgICAgICAgICAgICAgZXZlbnRfaWQsXG4gICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIGNodW5rLFxuICAgICAgICAgICAgICAgICAgICBpZHg6IGksXG4gICAgICAgICAgICAgICAgICAgIG51bWJlcl9vZl9jaHVua3M6IG51bWJlck9mQ2h1bmtzLFxuICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudF9sZW5ndGg6IHZhbHVlLnNpemUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsUXVlcnksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHRvU29sdmUpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIGZpbGVzO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJvdXRlIHdlYnNvY2tldCByZXNwb25zZXMgdG8gdGhlIG1hdGNoaW5nIHBlbmRpbmcgcmVxdWVzdCBhbmQgdXBkYXRlIGxvY2FsXG4gICAqIHN0YXRlIHdoZW4gdGhlIHNlcnZlciBzZW5kcyBtb2RlbCBwYXlsb2Fkcy5cbiAgICpcbiAgICogQHBhcmFtIHtNZXNzYWdlRXZlbnR9IGVcbiAgICovXG4gIGFzeW5jIF9vbk1lc3NhZ2UoZSkge1xuICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgIGlmIChkYXRhLmlzX2Vycm9yKSB7XG4gICAgICBpZiAodGhpcy5vcGVuUmVxdWVzdC5oYXNPd25Qcm9wZXJ0eShkYXRhLmV2ZW50X2lkKSkge1xuICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0W2RhdGEuZXZlbnRfaWRdWzFdKG5ldyBTZGNNb2RlbEVycm9yKGRhdGEpKTtcbiAgICAgICAgdGhpcy5fY2xvc2VPcGVuUmVxdWVzdChkYXRhLmV2ZW50X2lkKTtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhLm1zZyB8fCBkYXRhLmhlYWRlcikge1xuICAgICAgICB0cmlnZ2VyKFwicHVzaEVycm9yTXNnXCIsIGRhdGEuaGVhZGVyIHx8IFwiXCIsIGRhdGEubXNnIHx8IFwiXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS50eXBlID09PSBcImNvbm5lY3RcIikge1xuICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0W0NPTk5FQ1RJTkdfUkVRVUVTVF9JRF1bMV0obmV3IFNkY01vZGVsRXJyb3IoZGF0YSkpO1xuICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KENPTk5FQ1RJTkdfUkVRVUVTVF9JRCk7XG4gICAgICAgIHRoaXMuX2F1dG9SZWNvbm5lY3QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zb2NrZXQuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgIHRyaWdnZXIoXCJwdXNoTXNnXCIsIGRhdGEuaGVhZGVyIHx8IFwiXCIsIGRhdGEubXNnIHx8IFwiXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS50eXBlID09PSBcImNvbm5lY3RcIikge1xuICAgICAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2lzQ29ubmVjdGluZ1Byb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vcGVuUmVxdWVzdFtDT05ORUNUSU5HX1JFUVVFU1RfSURdWzBdKGRhdGEpO1xuICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KENPTk5FQ1RJTkdfUkVRVUVTVF9JRCk7XG4gICAgICB9IGVsc2UgaWYgKFtcImxvYWRcIiwgXCJuYW1lZF92aWV3XCIsIFwiZGV0YWlsX3ZpZXdcIl0uaW5jbHVkZXMoZGF0YS50eXBlKSkge1xuICAgICAgICBjb25zdCBqc29uUmVzID0gSlNPTi5wYXJzZShkYXRhLmFyZ3MuZGF0YSk7XG4gICAgICAgIGRhdGEuYXJncy5kYXRhID0gYXdhaXQgdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoanNvblJlcyk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gXCJvbl91cGRhdGVcIiB8fCBkYXRhLnR5cGUgPT09IFwib25fY3JlYXRlXCIpIHtcbiAgICAgICAgY29uc3QganNvblJlcyA9IEpTT04ucGFyc2UoZGF0YS5hcmdzLmRhdGEpO1xuXG4gICAgICAgIGxldCBvYmogPSBhd2FpdCB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uUmVzKTtcbiAgICAgICAgbGV0IGNiO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IFwib25fY3JlYXRlXCIpIHtcbiAgICAgICAgICBjYiA9IHRoaXMub25DcmVhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2IgPSB0aGlzLm9uVXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2Iob2JqKTtcbiAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSBvYmo7XG4gICAgICB9XG5cbiAgICAgIGxldCBpbnN0YW5jZSA9IGRhdGEuZGF0YT8uaW5zdGFuY2U7XG4gICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgZGF0YS5kYXRhLmluc3RhbmNlID0gSlNPTi5wYXJzZShkYXRhLmRhdGEuaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcGVuUmVxdWVzdC5oYXNPd25Qcm9wZXJ0eShkYXRhLmV2ZW50X2lkKSkge1xuICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0W2RhdGEuZXZlbnRfaWRdWzBdKGRhdGEpO1xuICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KGRhdGEuZXZlbnRfaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXYWl0IHVudGlsIGFsbCBpbi1mbGlnaHQgd2Vic29ja2V0IHJlcXVlc3RzIGZvciB0aGlzIHF1ZXJ5c2V0IGFyZSByZXNvbHZlZC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBub09wZW5SZXF1ZXN0cygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLm9wZW5SZXF1ZXN0KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cy5wdXNoKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGNvbXBsZXRlZCByZXF1ZXN0IGFuZCB3YWtlIGFueSBgbm9PcGVuUmVxdWVzdHMoKWAgd2FpdGVycyB3aGVuIHRoZVxuICAgKiByZXF1ZXN0IG1hcCBiZWNvbWVzIGVtcHR5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRJZFxuICAgKi9cbiAgX2Nsb3NlT3BlblJlcXVlc3QoZXZlbnRJZCkge1xuICAgIGRlbGV0ZSB0aGlzLm9wZW5SZXF1ZXN0W2V2ZW50SWRdO1xuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLm9wZW5SZXF1ZXN0KS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuX29uTm9PcGVuUmVxdWVzdHMuZm9yRWFjaCgoeCkgPT4geCgpKTtcbiAgICAgIHRoaXMuX29uTm9PcGVuUmVxdWVzdHMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXN0YWJsaXNoIHRoZSByYXcgd2Vic29ja2V0IGNvbm5lY3Rpb24gZm9yIHRoaXMgcXVlcnlzZXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgX2Nvbm5lY3RUb1NlcnZlcigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IG1vZGVsSWRlbnRpZmllciA9XG4gICAgICAgIGAke3RoaXMubW9kZWxOYW1lfWAgKyAodGhpcy5tb2RlbElkID4gMCA/IGAvJHt0aGlzLm1vZGVsSWR9YCA6IFwiXCIpO1xuICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJodHRwczpcIikge1xuICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoXG4gICAgICAgICAgYHdzczovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L3NkY193cy9tb2RlbC8ke21vZGVsSWRlbnRpZmllcn1gLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KFxuICAgICAgICAgIGB3czovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L3NkY193cy9tb2RlbC8ke21vZGVsSWRlbnRpZmllcn1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSB0aGlzLl9vbk1lc3NhZ2UuYmluZCh0aGlzKTtcblxuICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9IChlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFNEQyBNb2RlbCAoJHt0aGlzLm1vZGVsTmFtZX0sICR7dGhpcy5tb2RlbElkfSkgU29ja2V0IGNsb3NlZCB1bmV4cGVjdGVkbHlgLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IFtfa2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5vcGVuUmVxdWVzdCkpIHtcbiAgICAgICAgICB2YWx1ZVsxXShlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0ID0ge307XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2F1dG9SZWNvbm5lY3QpIHtcbiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RUb1NlcnZlcigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxMDAwKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uZXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1vZGVsIFNvY2tldCBlbmNvdW50ZXJlZCBlcnJvcjogJHtlcnJ9IENsb3Npbmcgc29ja2V0YCk7XG4gICAgICAgIGlmICh0aGlzLl9pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9ub3BlbiA9ICgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBhcHBsaWNhdGlvbi1sZXZlbCBjb25uZWN0IGhhbmRzaGFrZSBvbmNlIHRoZSB3ZWJzb2NrZXQgb3BlbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPCo+fVxuICAgKi9cbiAgX2NoZWNrQ29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBldmVudF9pZCA9IHV1aWR2NCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnNvY2tldC5zZW5kKFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZXZlbnQ6IFwibW9kZWxcIixcbiAgICAgICAgICBldmVudF90eXBlOiBcImNvbm5lY3RcIixcbiAgICAgICAgICBldmVudF9pZCxcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsUXVlcnksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICB0aGlzLm9wZW5SZXF1ZXN0W2V2ZW50X2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGJhY2tlbmQgbW9kZWwgcGF5bG9hZCBpbnRvIGxvY2FsbHkgdHJhY2tlZCBtb2RlbCBvYmplY3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PG9iamVjdD59IHJlc3VsdHNcbiAgICovXG4gIF9wYXJzZVNlcnZlclJlcyhyZXN1bHRzKSB7XG4gICAgY29uc3QgbmV3TW9kZWxzID0gW11cbiAgICBmb3IgKGNvbnN0IHggb2YgcmVzdWx0cykge1xuICAgICAgY29uc3QgTW9kZWxDbGFzcyA9IGdldE1vZGVsKHRoaXMubW9kZWxOYW1lKTtcbiAgICAgIGlmICghTW9kZWxDbGFzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5tb2RlbE5hbWV9IGlzIG5vIFNkY01vZGVsLiBteWJlIHRoZSBtb2RlbHMgYXIgbm90IGltcG9ydGFkLmApO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3TW9kZWwgPSBuZXcgTW9kZWxDbGFzcyh7ICdpZCc6IHguaWQgPz8geC5waywgLi4ueC5maWVsZHMgfSk7XG4gICAgICBjb25zdCBjdXJyZW50TW9kZWwgPSB0aGlzLmJ5SWQobmV3TW9kZWwuaWQpO1xuICAgICAgaWYgKGN1cnJlbnRNb2RlbCkge1xuICAgICAgICBjdXJyZW50TW9kZWwuc2V0VmFsdWVzKG5ld01vZGVsKTtcbiAgICAgICAgbmV3TW9kZWxzLnB1c2goY3VycmVudE1vZGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWVzTGlzdC5wdXNoKG5ld01vZGVsKTtcbiAgICAgICAgbmV3TW9kZWwuX3NldFF1ZXJ5U2V0KHRoaXMsIHRydWUpO1xuICAgICAgICBuZXdNb2RlbHMucHVzaChuZXdNb2RlbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudmFsdWVzTGlzdC5zb3J0KChhLCBiKSA9PiBhLl9pZCAtIGIuX2lkKTtcbiAgICByZXR1cm4gbmV3TW9kZWxzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkY01vZGVsIHtcbiAgc3RhdGljIGZpZWxkcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBCYXNlIG1vZGVsIHdyYXBwZXIgdXNlZCBieSBTREMgbW9kZWwgcmVnaXN0cmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IobW9kZWxOYW1lKSB7XG4gICAgdGhpcy5faWQgPSBudWxsO1xuICAgIHRoaXMuX2Zvcm1zID0gW107XG4gICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZvcm1JZCA9IHV1aWR2NCgpO1xuICAgIHRoaXMubW9kZWxOYW1lID0gbW9kZWxOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0P30gbW9kZWxRdWVyeVNldFxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRcbiAgICogQHJldHVybnMge1NkY1F1ZXJ5U2V0fVxuICAgKi9cbiAgc3RhdGljIHF1ZXJ5U2V0KG1vZGVsUXVlcnlTZXQgPSBudWxsLCBwYXJlbnQgPSBudWxsKSB7XG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHJldHVybiBuZXcgU2RjUXVlcnlTZXQodGhpcy5tb2RlTmFtZSwgbW9kZWxRdWVyeVNldCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudC5xdWVyeVNldCh0aGlzLm1vZGVOYW1lLCBtb2RlbFF1ZXJ5U2V0KTtcbiAgfVxuXG4gIGFkZEZvcm0oJGZvcm0pIHtcbiAgICAvLyBSZW1vdmUgb2xkIGxpc3RlbmVycyBpZiBmb3JtIGFscmVhZHkgc2V0XG4gICAgY29uc3Qgb25DaGFuZ2UgPSB0aGlzLl9vbkNoYW5nZS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5fZm9ybXMucHVzaCgkZm9ybSk7XG5cbiAgICBpZiAoJGZvcm0pIHtcbiAgICAgIC8vIEF0dGFjaCBkZWxlZ2F0ZWQgZXZlbnQgaGFuZGxlciB0byBhbGwgaW5wdXRzXG4gICAgICAkZm9ybS5vbihcbiAgICAgICAgXCJpbnB1dC5mb3JtV2F0Y2hlciBjaGFuZ2UuZm9ybVdhdGNoZXJcIixcbiAgICAgICAgXCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYVwiLFxuICAgICAgICBvbkNoYW5nZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBfb25DaGFuZ2UoZXZlbnQpIHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGV2ZW50LnRhcmdldDtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5maWVsZHNbbmFtZV0pIHtcbiAgICAgIHRoaXNbYHNldCR7bmFtZX1gXShnZXRWYWx1ZUZyb21GaWVsZChldmVudC50YXJnZXQpKTtcbiAgICB9XG4gIH1cblxuICBfdXBkYXRlRm9ybShmaWVsZE5hbWUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB0aGlzLl9mb3Jtcy5mb3JFYWNoKCgkZm9ybSkgPT4ge1xuICAgICAgJGZvcm0uZmluZChgW25hbWU9XCIke2ZpZWxkTmFtZX1cIl1gKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0VmFsdWVJbkZpZWxkKHRoaXMsIHNlbGZbZmllbGROYW1lXSlcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0VmFsdWVzKGRhdGEgPSB7fSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInNldFZhbHVlcygpIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NcIik7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoIHRoZSBxdWVyeXNldCB0aGF0IG93bnMgdGhpcyBtb2RlbCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtTZGNRdWVyeVNldH0gcXVlcnlTZXRcbiAgICogQHBhcmFtIHtib29sZWFufSBpc0xvYWRlZFxuICAgKi9cbiAgX3NldFF1ZXJ5U2V0KHF1ZXJ5U2V0LCBpc0xvYWRlZCkge1xuICAgIHRoaXMuX3F1ZXJ5U2V0ID0gbmV3IFdlYWtSZWYocXVlcnlTZXQpO1xuICAgIHRoaXMubG9hZGVkID0gaXNMb2FkZWQ7XG4gIH1cblxuICBnZXQgcXVlcnlTZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5U2V0LmRlcmVmKCk7XG4gIH1cblxuICBzYXZlKHsgZm9ybU5hbWUgPSBcImVkaXRfZm9ybVwiLCBkYXRhID0gbnVsbCB9ID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlTZXQuZGVyZWYoKS5zYXZlKHsgcGs6IHRoaXMuaWQsIGZvcm1OYW1lLCBkYXRhIH0pO1xuICB9XG5cbiAgY3JlYXRlKHsgZGF0YSA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5U2V0LmRlcmVmKCkuY3JlYXRlKHsgZWxlbTogdGhpcywgZGF0YSB9KTtcbiAgfVxuXG4gIGRlbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlTZXQuZGVyZWYoKS5kZWxldGUoeyBlbGVtOiB0aGlzIH0pO1xuICB9XG5cbiAgbG9hZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlTZXQuZGVyZWYoKS51cGRhdGUoeyBpdGVtOiB0aGlzIH0pO1xuICB9XG5cbiAgdXBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmxvYWQoKTtcbiAgfVxuXG4gIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICBzZXQgaWQoZGF0YSkge1xuICAgIHRoaXMuX2lkID0gZGF0YTtcbiAgfVxuXG4gIHNldCBwayhkYXRhKSB7XG4gICAgdGhpcy5pZCA9IGRhdGE7XG4gIH1cblxuICBnZXQgcGsoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5U2V0LmRlcmVmKCkuY2xvc2UoKTtcbiAgfVxuXG4gIF9vbkNsb3NlKCkge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuY29uc3RydWN0b3IuZmllbGRzKVxuICAgICAgLmZpbHRlcigoeCkgPT4gdGhpc1tgXyR7eH1gXSBpbnN0YW5jZW9mIFNkY1F1ZXJ5U2V0KVxuICAgICAgLmZvckVhY2goKHgpID0+IHRoaXNbYF8ke3h9YF0uY2xvc2UoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCB0aGUgc2VydmVyLXJlbmRlcmVkIGRldGFpbCB2aWV3IGZvciB0aGlzIG1vZGVsIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGRldGFpbFZpZXcoeyBjYlJlc29sdmUgPSBudWxsLCBjYlJlamVjdCA9IG51bGwsIHRlbXBsYXRlQ29udGV4dCA9IHt9IH0pIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlTZXQuZGVyZWYoKS5kZXRhaWxWaWV3KHsgcGs6IHRoaXMuaWQsIGNiUmVzb2x2ZSwgY2JSZWplY3QsIHRlbXBsYXRlQ29udGV4dCB9KTtcbiAgfVxuXG4gIHNlcmlhbGl6ZSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5jb25zdHJ1Y3Rvci5maWVsZHMpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWxdKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNkY1F1ZXJ5U2V0KSB7XG4gICAgICAgIGlmICh2YWwubWFueV90b19tYW55IHx8IHZhbC5vbmVfdG9fbWFueSkge1xuICAgICAgICAgIGFjY1trZXldID0gdmFsdWUuZ2V0SWRzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYWxsSWRzID0gdmFsdWUuZ2V0SWRzKCk7XG4gICAgICAgICAgaWYgKGFsbElkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IGFsbElkc1swXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWNjW2tleV0gPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHZhbC5pc19yZWxhdGlvbiAmJiB2YWx1ZSBpbnN0YW5jZW9mIFNkY01vZGVsKSB7XG4gICAgICAgIGFjY1trZXldID0gdmFsdWUuaWQgPz8gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCB7fSk7XG4gIH1cblxuICB0b0pzb24oKSB7XG4gICAgY29uc3QgcmVzID0ge31cbiAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5jb25zdHJ1Y3Rvci5maWVsZHMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIHJlc1trZXldID0gdmFsdWUubmFtZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZGNNb2RlbCkge1xuICAgICAgICByZXNba2V5XSA9IHZhbHVlLmlkO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNkY1F1ZXJ5U2V0KSB7XG4gICAgICAgIHJlc1trZXldID0gdmFsdWUuZ2V0SWRzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKipcbiAgICogQmFja3dhcmRzLWNvbXBhdGlibGUgYWxpYXMgZm9yIHN5bmNpbmcgdmFsdWVzIGZyb20gYSBmb3JtIGludG8gdGhlIG1vZGVsLlxuICAgKlxuICAgKiBAcGFyYW0geyp9ICRmb3Jtc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIHN5bmNGb3JtVG9Nb2RlbCgkZm9ybXMpIHtcbiAgICByZXR1cm4gdGhpcy5zeW5jRm9ybSgkZm9ybXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGZvcm0gY29sbGVjdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBtb2RlbCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHsqfSAkZm9ybXNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBfcmVzb2x2ZUZvcm1zKCRmb3Jtcykge1xuICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtSWQpKSB7XG4gICAgICByZXR1cm4gJChgLiR7dGhpcy5mb3JtSWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICRmb3JtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IHRoZSBjdXJyZW50IG1vZGVsIHN0YXRlIGludG8gbWF0Y2hpbmcgZm9ybSBmaWVsZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gJGZvcm1zXG4gICAqL1xuICBzeW5jTW9kZWxUb0Zvcm0oJGZvcm1zKSB7XG4gICAgJGZvcm1zID0gdGhpcy5fcmVzb2x2ZUZvcm1zKCRmb3Jtcyk7XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmNvbnN0cnVjdG9yLmZpZWxkcztcbiAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwayA9IG5vcm1hbGl6ZVBrKCQodGhpcykuZGF0YShcIm1vZGVsX3BrXCIpKTtcbiAgICAgIGlmIChzZWxmLmlkICE9PSBwaykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGZvcm1JdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmb3JtSXRlbS5uYW1lO1xuICAgICAgICBpZiAobmFtZSAmJiBuYW1lICE9PSBcIlwiICYmICEhZmllbGRzW25hbWVdKSB7XG4gICAgICAgICAgc2V0VmFsdWVJbkZpZWxkKGZvcm1JdGVtLCBzZWxmW25hbWVdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29weSBtYXRjaGluZyBmb3JtIHZhbHVlcyBiYWNrIG9udG8gdGhlIGN1cnJlbnQgbW9kZWwgaW5zdGFuY2UuXG4gICAqXG4gICAqIEhpZGRlbiBpbnB1dHMgYXJlIHBhcnNlZCB0byB0aGVpciBvcmlnaW5hbCBwcmltaXRpdmUgdHlwZSB3aGVuIHBvc3NpYmxlLlxuICAgKlxuICAgKiBAcGFyYW0geyp9ICRmb3Jtc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIHN5bmNGb3JtKCRmb3Jtcykge1xuICAgICRmb3JtcyA9IHRoaXMuX3Jlc29sdmVGb3JtcygkZm9ybXMpO1xuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5jb25zdHJ1Y3Rvci5maWVsZHM7XG4gICAgY29uc3QgcmV0dXJuVmFsdWUgPSB7fVxuXG4gICAgZnVuY3Rpb24gc2V0VmFsdWVJbkZvcm0obmFtZSwgdmFsdWUpIHtcbiAgICAgIGlmICghIWZpZWxkc1tuYW1lXSkge1xuICAgICAgICBzZWxmW25hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm5WYWx1ZVtuYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgICRmb3Jtcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBrID0gbm9ybWFsaXplUGsoJCh0aGlzKS5kYXRhKFwibW9kZWxfcGtcIikpO1xuICAgICAgaWYgKHNlbGYuaWQgIT09IHBrICYmIChzZWxmLmlkICE9PSBudWxsIHx8IHBrICE9PSAtMSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBmb3JtSXRlbSBvZiB0aGlzLmVsZW1lbnRzKSB7XG4gICAgICAgIHNldFZhbHVlSW5Gb3JtKGZvcm1JdGVtLm5hbWUsIGdldFZhbHVlRnJvbUZpZWxkKGZvcm1JdGVtKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWxmO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgY29ycmVjdCBzZXJ2ZXItc2lkZSBmb3JtIGZvciB0aGlzIG1vZGVsIHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGZvcm0oeyBjYlJlc29sdmUgPSBudWxsLCBjYlJlamVjdCA9IG51bGwgfSA9IHt9KSB7XG4gICAgaWYgKHRoaXMuaWQgPT09IG51bGwgfHwgdGhpcy5pZCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVGb3JtKHsgY2JSZWplY3QsIGNiUmVzb2x2ZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRGb3JtKHsgY2JSZWplY3QsIGNiUmVzb2x2ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGNyZWF0ZSBmb3JtIGZvciBhIG5ldyBtb2RlbCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBfY3JlYXRlRm9ybSh7IGNiUmVzb2x2ZSA9IG51bGwsIGNiUmVqZWN0ID0gbnVsbCB9KSB7XG4gICAgbGV0ICRkaXZGb3JtID0gJChcIjxkaXY+XCIpO1xuICAgIHRoaXMuX3F1ZXJ5U2V0LmRlcmVmKCkuZ2V0Rm9ybSh7XG4gICAgICBtb2RlbE9iajogdGhpcyxcbiAgICAgIGV2ZW50VHlwZTogXCJjcmVhdGVfZm9ybVwiLFxuICAgICAgZm9ybU5hbWU6IG51bGwsXG4gICAgICAkZGl2Rm9ybSxcbiAgICAgIGNiUmVzb2x2ZSxcbiAgICAgIGNiUmVqZWN0LFxuICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICB9KTtcblxuICAgIHJldHVybiAkZGl2Rm9ybTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGVkaXQgZm9ybSBmb3IgYW4gZXhpc3RpbmcgbW9kZWwgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgX2VkaXRGb3JtKHsgY2JSZXNvbHZlID0gbnVsbCwgY2JSZWplY3QgPSBudWxsIH0pIHtcbiAgICBsZXQgJGRpdkZvcm0gPSAkKFwiPGRpdj5cIik7XG5cbiAgICB0aGlzLl9xdWVyeVNldC5kZXJlZigpLmdldEZvcm0oe1xuICAgICAgbW9kZWxPYmo6IHRoaXMsXG4gICAgICBldmVudFR5cGU6IFwiZWRpdF9mb3JtXCIsXG4gICAgICBmb3JtTmFtZTogbnVsbCxcbiAgICAgICRkaXZGb3JtLFxuICAgICAgY2JSZXNvbHZlLFxuICAgICAgY2JSZWplY3QsXG4gICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuICRkaXZGb3JtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBhIG5hbWVkIHNlcnZlci1zaWRlIGZvcm0gZm9yIHRoaXMgbW9kZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgbmFtZWRGb3JtKHsgZm9ybU5hbWUsIGNiUmVzb2x2ZSA9IG51bGwsIGNiUmVqZWN0ID0gbnVsbCB9KSB7XG4gICAgbGV0ICRkaXZGb3JtID0gJCgnPGRpdiAgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcblxuICAgIHRoaXMuX3F1ZXJ5U2V0LmRlcmVmKCkuZ2V0Rm9ybSh7XG4gICAgICBtb2RlbE9iajogdGhpcyxcbiAgICAgIGV2ZW50VHlwZTogXCJuYW1lZF9mb3JtXCIsXG4gICAgICBmb3JtTmFtZSxcbiAgICAgICRkaXZGb3JtLFxuICAgICAgY2JSZXNvbHZlLFxuICAgICAgY2JSZWplY3QsXG4gICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuICRkaXZGb3JtO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgZmllbGQgdmFsdWUgdXNpbmcgdGhlIHN1cHBsaWVkIGZpZWxkIGNvbmZpZy5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlnXG4gICAqL1xuICB2YWxpZGF0ZSh2YWx1ZSwgY29uZmlnKSB7XG4gICAgY29uc3QgZXJyID0gdmFsaWRhdGVGaWVsZCh2YWx1ZSwgY29uZmlnKTtcbiAgICBpZiAoZXJyKSB0aHJvdyBuZXcgRXJyb3IoZXJyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgcmF3IGlucHV0IHZhbHVlIGludG8gdGhlIHNoYXBlIGV4cGVjdGVkIGJ5IHRoZSBmaWVsZCBjb25maWcuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIHBhcnNlVmFsdWUodmFsdWUsIGNvbmZpZykge1xuICAgIGNvbnN0IHtcbiAgICAgIHR5cGUsXG4gICAgICBtYW55X3RvX21hbnk6IG1hbnlUb01hbnksXG4gICAgICBvbmVfdG9fbWFueTogb25lVG9NYW55LFxuICAgICAgbWFueV90b19vbmU6IG1hbnlUb09uZSxcbiAgICAgIG9uZV90b19vbmU6IG9uZVRvT25lLFxuICAgIH0gPSBjb25maWc7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoKG1hbnlUb01hbnkgfHwgb25lVG9NYW55IHx8IG1hbnlUb09uZSB8fCBvbmVUb09uZSkgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIkNoYXJGaWVsZFwiOlxuICAgICAgY2FzZSBcIlRlZXh0RmllbGRcIjpcbiAgICAgIGNhc2UgXCJVVUlERmllbGRcIjpcbiAgICAgIGNhc2UgXCJFbWFpbEZpZWxkXCI6XG4gICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuXG4gICAgICBjYXNlIFwiSW50ZWdlckZpZWxkXCI6XG4gICAgICBjYXNlIFwiQXV0b0ZpZWxkXCI6XG4gICAgICBjYXNlIFwiQmlnSW50ZWdlckZpZWxkXCI6XG4gICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuXG4gICAgICBjYXNlIFwiRmxvYXRGaWVsZFwiOlxuICAgICAgY2FzZSBcIkRlY2ltYWxGaWVsZFwiOlxuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG5cbiAgICAgIGNhc2UgXCJCb29sZWFuRmllbGRcIjpcbiAgICAgICAgcmV0dXJuICEhdmFsdWU7XG5cbiAgICAgIGNhc2UgXCJEYXRlRmllbGRcIjpcbiAgICAgIGNhc2UgXCJEYXRlVGltZUZpZWxkXCI6XG4gICAgICAgIHJldHVybiBEYXRlLnBhcnNlKHZhbHVlKTtcblxuICAgICAgY2FzZSBcIlVSTEZpZWxkXCI6XG4gICAgICAgIHJldHVybiBuZXcgVVJMKHZhbHVlKTtcblxuICAgICAgY2FzZSBcIkZpbGVGaWVsZFwiOlxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEZpbGVMb2FkZWQuaXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEZpbGVMb2FkZWQodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZUxvYWRlZCkge1xuICAgICAgICAgIHJldHVybiBuZXcgRmlsZUxvYWRlZCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIEZpbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgICAgaWYgKGNvbmZpZy5tYXhfc2l6ZSAmJiB2YWx1ZS5zaXplID4gY29uZmlnLm1heF9zaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gYEZpbGUgdG9vIGxhcmdlIChtYXggJHtjb25maWcubWF4X3NpemV9IGJ5dGVzKWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbmZpZy5hbGxvd2VkX3R5cGVzICYmICFjb25maWcuYWxsb3dlZF90eXBlcy5pbmNsdWRlcyh2YWx1ZS50eXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBJbnZhbGlkIGZpbGUgdHlwZSAoJHt2YWx1ZS50eXBlfSlgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIkpTT05GaWVsZFwiOlxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgZmllbGQgdmFsdWUgYWdhaW5zdCB0aGUgZmllbGQgbWV0YWRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgYmFja2VuZC5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnXG4gKiBAcmV0dXJucyB7P3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGaWVsZCh2YWx1ZSwgY29uZmlnKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIHJlcXVpcmVkLFxuICAgIG1heF9sZW5ndGg6IG1heExlbmd0aCxcbiAgICBpc19yZWxhdGlvbjogaXNSZWxhdGlvbixcbiAgICBtYW55X3RvX21hbnk6IG1hbnlUb01hbnksXG4gICAgb25lX3RvX21hbnk6IG9uZVRvTWFueSxcbiAgICBtYW55X3RvX29uZTogbWFueVRvT25lLFxuICAgIG9uZV90b19vbmU6IG9uZVRvT25lLFxuICAgIHJlbGF0ZWRfbW9kZWw6IHJlbGF0ZWRNb2RlbCxcbiAgfSA9IGNvbmZpZztcblxuICB2b2lkIGlzUmVsYXRpb247XG5cbiAgaWYgKHJlcXVpcmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBcIlRoaXMgZmllbGQgaXMgcmVxdWlyZWRcIjtcbiAgICB9XG4gIH1cblxuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKG1hbnlUb01hbnkgfHwgb25lVG9NYW55IHx8IG1hbnlUb09uZSB8fCBvbmVUb09uZSkge1xuICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgU2RjUXVlcnlTZXQpIHx8IHZhbHVlLm1vZGVsTmFtZSAhPT0gcmVsYXRlZE1vZGVsKSB7XG4gICAgICBpZih0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgobWFueVRvTWFueSB8fCBtYW55VG9PbmUpICYmIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLnNvbWUoKHgpID0+ICFOdW1iZXIuaXNOYU4ocGFyc2VJbnQoeCkpKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgTnVtYmVyLmlzTmFOKHBhcnNlSW50KHZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIFwiTXVzdCBiZSBvYmplY3Qgb3IgSURcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJDaGFyRmllbGRcIjpcbiAgICBjYXNlIFwiVGV4dEZpZWxkXCI6XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBcIk11c3QgYmUgYSBzdHJpbmdcIjtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBgTWF4IGxlbmd0aCBpcyAke21heExlbmd0aH1gO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiSW50ZWdlckZpZWxkXCI6XG4gICAgY2FzZSBcIkF1dG9GaWVsZFwiOlxuICAgIGNhc2UgXCJCaWdJbnRlZ2VyRmllbGRcIjpcbiAgICAgIGlmICghaXNGaW5pdGUocGFyc2VJbnQodmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIGFuIGludGVnZXJcIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIkZsb2F0RmllbGRcIjpcbiAgICBjYXNlIFwiRGVjaW1hbEZpZWxkXCI6XG4gICAgICBpZiAoIWlzRmluaXRlKHBhcnNlRmxvYXQodmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIGEgbnVtYmVyXCI7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJCb29sZWFuRmllbGRcIjpcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJldHVybiBcIk11c3QgYmUgYSBib29sZWFuXCI7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJEYXRlRmllbGRcIjpcbiAgICBjYXNlIFwiRGF0ZVRpbWVGaWVsZFwiOlxuICAgICAgaWYgKGlzTmFOKERhdGUucGFyc2UodmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIGEgdmFsaWQgZGF0ZVwiO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiRW1haWxGaWVsZFwiOlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fCAhL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIFwiSW52YWxpZCBlbWFpbFwiO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiVVJMRmllbGRcIjpcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBVUkwodmFsdWUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBcIkludmFsaWQgVVJMXCI7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJVVUlERmllbGRcIjpcbiAgICAgIGlmICghL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfSQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBcIkludmFsaWQgVVVJRFwiO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiSlNPTkZpZWxkXCI6XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBcIk11c3QgYmUgSlNPTiBvYmplY3RcIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJGaWxlRmllbGRcIjpcbiAgICAgIGlmICghRmlsZUxvYWRlZC5pc1ZhbGlkKHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEZpbGVMb2FkZWQpKSB7XG4gICAgICAgIHJldHVybiBcIk11c3QgYmUgYSB2YWxpZCBmaWxlXCI7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_model.js\n\n}");
|
|
78
78
|
|
|
79
79
|
/***/ },
|
|
80
80
|
|
|
@@ -84,7 +84,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
84
84
|
\********************************************/
|
|
85
85
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
86
86
|
|
|
87
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getUrlParam: () => (/* binding */ getUrlParam),\n/* harmony export */ prepareData: () => (/* binding */ prepareData),\n/* harmony export */ runOnInitWithParameter: () => (/* binding */ runOnInitWithParameter)\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\n\nfunction prepareData(data, controller = null) {\n const data_json_key = \"SDC_JSON_MODEL=[\";\n return Object.fromEntries(Object.entries(data).filter(([key, element]) => {\n
|
|
87
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getUrlParam: () => (/* binding */ getUrlParam),\n/* harmony export */ prepareData: () => (/* binding */ prepareData),\n/* harmony export */ runOnInitWithParameter: () => (/* binding */ runOnInitWithParameter)\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\n\n\nfunction prepareData(data, controller = null) {\n const data_json_key = \"SDC_JSON_MODEL=[\";\n return Object.fromEntries(\n Object.entries(data)\n .filter(([key, element]) => {\n return key !== _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY;\n })\n .map(([key, element]) => {\n if (typeof element === \"string\" && element.startsWith(data_json_key)) {\n try {\n const { pk, fields } = JSON.parse(\n element.slice(data_json_key.length, -1),\n );\n return [\n key,\n {\n ...fields,\n id: pk,\n id: pk,\n },\n ];\n } catch {\n }\n }\n return [key, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.checkIfParamNumberBoolOrString)(element, controller)];\n }),\n );\n}\n\n\nfunction getDomTagParamsWithList($element, controller = null) {\n return prepareData($element.data(), controller);\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n * @param {jquery} $element\n * @param applyController\n * @returns {boolean}\n */\nfunction reg_runOnInitWithParameter(controller, $element, applyController) {\n if (!controller) {\n return false;\n } else if (typeof controller.onInit !== \"function\") {\n return false;\n }\n\n controller.params = getDomTagParamsWithList(\n $element,\n applyController._parentController,\n );\n}\n\nfunction runOnInitWithParameter($element, controller) {\n reg_runOnInitWithParameter(controller, $element, controller);\n}\n\nfunction getUrlParam(controller, $element) {\n const values = getDomTagParamsWithList($element, controller);\n const [params, args] = Object.entries(values).reduce(([params, args], [k, v]) => {\n if (controller._urlParams.includes(k)) {\n params[k] = v;\n } else {\n args[k] = v;\n }\n return [params, args]\n }, [{}, {}]);\n\n return { params, args };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfcGFyYW1zLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRXdCO0FBQzRCOztBQUU3QztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDZEQUFtQjtBQUMxQyxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGFBQWE7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EscUJBQXFCLDZFQUE4QjtBQUNuRCxPQUFPO0FBQ1A7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxHQUFHLEtBQUssSUFBSTs7QUFFWixXQUFXO0FBQ1giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3BhcmFtcy5qcz9kMzRjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNoZWNrSWZQYXJhbU51bWJlckJvb2xPclN0cmluZyxcbn0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBEQVRBX0NPTlRST0xMRVJfS0VZIH0gZnJvbSBcIi4vc2RjX3ZpZXcuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVEYXRhKGRhdGEsIGNvbnRyb2xsZXIgPSBudWxsKSB7XG4gIGNvbnN0IGRhdGFfanNvbl9rZXkgPSBcIlNEQ19KU09OX01PREVMPVtcIjtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhkYXRhKVxuICAgICAgLmZpbHRlcigoW2tleSwgZWxlbWVudF0pID0+IHtcbiAgICAgICAgcmV0dXJuIGtleSAhPT0gREFUQV9DT05UUk9MTEVSX0tFWTtcbiAgICAgIH0pXG4gICAgICAubWFwKChba2V5LCBlbGVtZW50XSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09IFwic3RyaW5nXCIgJiYgZWxlbWVudC5zdGFydHNXaXRoKGRhdGFfanNvbl9rZXkpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgcGssIGZpZWxkcyB9ID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgZWxlbWVudC5zbGljZShkYXRhX2pzb25fa2V5Lmxlbmd0aCwgLTEpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLmZpZWxkcyxcbiAgICAgICAgICAgICAgICBpZDogcGssXG4gICAgICAgICAgICAgICAgaWQ6IHBrLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtrZXksIGNoZWNrSWZQYXJhbU51bWJlckJvb2xPclN0cmluZyhlbGVtZW50LCBjb250cm9sbGVyKV07XG4gICAgICB9KSxcbiAgKTtcbn1cblxuXG5mdW5jdGlvbiBnZXREb21UYWdQYXJhbXNXaXRoTGlzdCgkZWxlbWVudCwgY29udHJvbGxlciA9IG51bGwpIHtcbiAgcmV0dXJuIHByZXBhcmVEYXRhKCRlbGVtZW50LmRhdGEoKSwgY29udHJvbGxlcik7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbWVudFxuICogQHBhcmFtIGFwcGx5Q29udHJvbGxlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHJlZ19ydW5PbkluaXRXaXRoUGFyYW1ldGVyKGNvbnRyb2xsZXIsICRlbGVtZW50LCBhcHBseUNvbnRyb2xsZXIpIHtcbiAgaWYgKCFjb250cm9sbGVyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBjb250cm9sbGVyLm9uSW5pdCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29udHJvbGxlci5wYXJhbXMgPSBnZXREb21UYWdQYXJhbXNXaXRoTGlzdChcbiAgICAkZWxlbWVudCxcbiAgICBhcHBseUNvbnRyb2xsZXIuX3BhcmVudENvbnRyb2xsZXIsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5PbkluaXRXaXRoUGFyYW1ldGVyKCRlbGVtZW50LCBjb250cm9sbGVyKSB7XG4gIHJlZ19ydW5PbkluaXRXaXRoUGFyYW1ldGVyKGNvbnRyb2xsZXIsICRlbGVtZW50LCBjb250cm9sbGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVybFBhcmFtKGNvbnRyb2xsZXIsICRlbGVtZW50KSB7XG4gIGNvbnN0IHZhbHVlcyA9IGdldERvbVRhZ1BhcmFtc1dpdGhMaXN0KCRlbGVtZW50LCBjb250cm9sbGVyKTtcbiAgY29uc3QgW3BhcmFtcywgYXJnc10gPSBPYmplY3QuZW50cmllcyh2YWx1ZXMpLnJlZHVjZSgoW3BhcmFtcywgYXJnc10sIFtrLCB2XSkgPT4ge1xuICAgIGlmIChjb250cm9sbGVyLl91cmxQYXJhbXMuaW5jbHVkZXMoaykpIHtcbiAgICAgIHBhcmFtc1trXSA9IHY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3Nba10gPSB2O1xuICAgIH1cbiAgICByZXR1cm4gW3BhcmFtcywgYXJnc11cbiAgfSwgW3t9LCB7fV0pO1xuXG4gIHJldHVybiB7IHBhcmFtcywgYXJncyB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_params.js\n\n}");
|
|
88
88
|
|
|
89
89
|
/***/ },
|
|
90
90
|
|
|
@@ -94,7 +94,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
94
94
|
\*************************************************/
|
|
95
95
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
96
96
|
|
|
97
|
-
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 => {\n const data = res[\"_return_data\"];\n _handle_response(data);\n return data;\n }).catch(res => {\n const data = res.responseJSON || {};\n data.is_error = true;\n _handle_response(data);\n throw res;\n });\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 _handle_response(data);\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 _handle_response(data) {\n if (!data) {\n data = {};\n }\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 (data.id && 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 (data.id && 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}\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc2VydmVyX2NhbGwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBd0M7QUFDRTtBQUUxQyxJQUFJRSxZQUFZLEdBQUcsS0FBSztBQUN4QixJQUFJQyxhQUFhLEdBQUcsS0FBSztBQUN6QixJQUFJQyxVQUFVLEdBQUcsSUFBSTtBQUNyQixJQUFJQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRWYsU0FBU0MsVUFBVUEsQ0FBQ0MsR0FBRyxFQUFFQyxVQUFVLEVBQUVDLGdCQUFnQixFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRTtFQUM1RSxJQUFJQyxNQUFNLENBQUNDLDBCQUEwQixFQUFFO0lBQ3JDLE9BQU9DLGdCQUFnQixDQUFDUCxHQUFHLEVBQUVDLFVBQVUsRUFBRUUsUUFBUSxFQUFFQyxJQUFJLENBQUM7RUFDMUQsQ0FBQyxNQUFNO0lBQ0wsT0FBT0ksY0FBYyxDQUFDTixnQkFBZ0IsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLENBQUM7RUFDekQ7QUFDRjtBQUVPLFNBQVNLLFdBQVdBLENBQUEsRUFBRztFQUM1QixJQUFJSixNQUFNLENBQUNDLDBCQUEwQixFQUFFO0lBQ3JDLE9BQU9JLGlCQUFpQixDQUFDLENBQUM7RUFDNUIsQ0FBQyxNQUFNO0lBQ0wsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO0VBQzlCO0FBQ0Y7QUFFTyxTQUFTQyxLQUFLQSxDQUFBLEVBQUc7RUFDdEIsSUFBSVIsTUFBTSxDQUFDQywwQkFBMEIsRUFBRTtJQUNyQ1EsV0FBVyxDQUFDLENBQUM7RUFDZjtBQUNGO0FBRUEsU0FBU04sY0FBY0EsQ0FBQ04sZ0JBQWdCLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFO0VBQ3hELElBQUksT0FBT0EsSUFBSSxLQUFLLFFBQVEsSUFBSVcsS0FBSyxDQUFDQyxPQUFPLENBQUNaLElBQUksQ0FBQyxJQUFJQSxJQUFJLEtBQUssSUFBSSxFQUFFO0lBQ3BFQSxJQUFJLEdBQUc7TUFB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QUFDLE1BQU0sSUFBSS9DLElBQUksQ0FBQzhDLElBQUksSUFBSTlDLElBQUksQ0FBQzhDLElBQUksS0FBSyxjQUFjLEVBQUU7TUFDcER0RSx1REFBTyxDQUFDLFdBQVcsRUFBRXdCLElBQUksQ0FBQ2dELElBQUksQ0FBQztJQUNqQztFQUNGO0FBQ0Y7QUFFQSxTQUFTcEQsV0FBV0EsQ0FBQSxFQUFHO0VBQ3JCLElBQUluQixZQUFZLEVBQUU7SUFDaEJBLFlBQVksR0FBRyxLQUFLO0lBQ3BCLElBQUk7TUFDRkUsVUFBVSxDQUFDZ0IsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDLE9BQU9tQyxDQUFDLEVBQUUsQ0FBQztFQUNmO0FBQ0Y7QUFFQSxTQUFTdEMsaUJBQWlCQSxDQUFBLEVBQUc7RUFDM0IsT0FBTyxJQUFJQyxPQUFPLENBQUVDLE9BQU8sSUFBSztJQUM5QixJQUFJakIsWUFBWSxFQUFFO01BQ2hCLE9BQU9pQixPQUFPLENBQUMsQ0FBQztJQUNsQixDQUFDLE1BQU0sSUFBSWhCLGFBQWEsRUFBRTtNQUN4QjZELFVBQVUsQ0FBQyxNQUFNO1FBQ2ZoRCxXQUFXLENBQUMsQ0FBQyxDQUFDc0IsSUFBSSxDQUFDLE1BQU07VUFDdkJuQixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztNQUNKLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDVCxDQUFDLE1BQU07TUFDTCxPQUFPQSxPQUFPLENBQUM4QixRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVCO0VBQ0YsQ0FBQyxDQUFDO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3NlcnZlcl9jYWxsLmpzP2MzZTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5pbXBvcnQgeyB0cmlnZ2VyIH0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuXG5sZXQgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG5sZXQgSVNfQ09OTkVDVElORyA9IGZhbHNlO1xubGV0IFNEQ19TT0NLRVQgPSBudWxsO1xubGV0IE9QRU5fUkVRVUVTVFMgPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxTZXJ2ZXIoYXBwLCBjb250cm9sbGVyLCBwYXJzZWRDb250ZW50VXJsLCBmdW5jTmFtZSwgYXJncykge1xuICBpZiAod2luZG93LlNFUlZFUl9DQUxMX1ZJQV9XRUJfU09DS0VUKSB7XG4gICAgcmV0dXJuIHNvY2tldENhbGxTZXJ2ZXIoYXBwLCBjb250cm9sbGVyLCBmdW5jTmFtZSwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBvc3RDYWxsU2VydmVyKHBhcnNlZENvbnRlbnRVcmwsIGZ1bmNOYW1lLCBhcmdzKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25uZWN0ZWQoKSB7XG4gIGlmICh3aW5kb3cuU0VSVkVSX0NBTExfVklBX1dFQl9TT0NLRVQpIHtcbiAgICByZXR1cm4gc29ja2V0SXNDb25uZWN0ZWQoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgaWYgKHdpbmRvdy5TRVJWRVJfQ0FMTF9WSUFfV0VCX1NPQ0tFVCkge1xuICAgIHNvY2tldENsb3NlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9zdENhbGxTZXJ2ZXIocGFyc2VkQ29udGVudFVybCwgZnVuY05hbWUsIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiICYmIEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncyA9PT0gbnVsbCkge1xuICAgIGFyZ3MgPSB7IGFyZzA6IGFyZ3MgfTtcbiAgfVxuICBhcmdzID0ge1xuICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGFyZ3MpLFxuICAgIF9zZGNfZnVuY19uYW1lOiBmdW5jTmFtZSxcbiAgICBfbWV0aG9kOiBcInNkY19zZXJ2ZXJfY2FsbFwiLFxuICB9O1xuICByZXR1cm4gJC5wb3N0KHtcbiAgICB1cmw6IHBhcnNlZENvbnRlbnRVcmwsXG4gICAgZGF0YTogYXJncyxcbiAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoeGhyLCBzZXR0aW5ncykge1xuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJYLUNTUkZUb2tlblwiLCB3aW5kb3cuQ1NSRl9UT0tFTik7XG4gICAgfSxcbiAgfSlcbiAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gcmVzW1wiX3JldHVybl9kYXRhXCJdO1xuICAgICAgX2hhbmRsZV9yZXNwb25zZShkYXRhKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pXG4gICAgLmNhdGNoKChyZXMpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXMucmVzcG9uc2VKU09OIHx8IHt9O1xuICAgICAgZGF0YS5pc19lcnJvciA9IHRydWU7XG4gICAgICBfaGFuZGxlX3Jlc3BvbnNlKGRhdGEpO1xuICAgICAgdGhyb3cgcmVzO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBzb2NrZXRDYWxsU2VydmVyKGFwcCwgY29udHJvbGxlciwgZnVuY05hbWUsIGFyZ3MpIHtcbiAgbGV0IGlkID0gdXVpZHY0KCk7XG4gIGlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgU0RDX1NPQ0tFVC5zZW5kKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBldmVudDogXCJzZGNfY2FsbFwiLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgIGFwcDogYXBwLFxuICAgICAgICBmdW5jdGlvbjogZnVuY05hbWUsXG4gICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICB9KSxcbiAgICApO1xuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIE9QRU5fUkVRVUVTVFNbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfY29ubmVjdCgpIHtcbiAgSVNfQ09OTkVDVElORyA9IHRydWU7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgIFNEQ19TT0NLRVQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFNEQ19TT0NLRVQgPSBuZXcgV2ViU29ja2V0KGB3czovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L3NkY193cy93cy9gKTtcbiAgICB9XG5cbiAgICBTRENfU09DS0VULm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgIF9oYW5kbGVfcmVzcG9uc2UoZGF0YSk7XG4gICAgfTtcblxuICAgIFNEQ19TT0NLRVQub25jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChJU19DT05ORUNURUQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlNEQyBTb2NrZXQgY2xvc2VkIHVuZXhwZWN0ZWRseVwiKTtcbiAgICAgIH1cbiAgICAgIElTX0NPTk5FQ1RFRCA9IGZhbHNlO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoT1BFTl9SRVFVRVNUUykpIHtcbiAgICAgICAgdmFsdWVbMV0oe30pO1xuICAgICAgICBkZWxldGUgT1BFTl9SRVFVRVNUU1trZXldO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgX2Nvbm5lY3QoKTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH07XG5cbiAgICBTRENfU09DS0VULm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIlNvY2tldCBlbmNvdW50ZXJlZCBlcnJvcjogXCIsXG4gICAgICAgIGVyci5tZXNzYWdlLFxuICAgICAgICBcIkNsb3Npbmcgc29ja2V0XCIsXG4gICAgICApO1xuICAgICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIFNEQ19TT0NLRVQuY2xvc2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgU0RDX1NPQ0tFVC5vbm9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBJU19DT05ORUNURUQgPSB0cnVlO1xuICAgICAgSVNfQ09OTkVDVElORyA9IGZhbHNlO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfaGFuZGxlX3Jlc3BvbnNlKGRhdGEpIHtcbiAgaWYgKCFkYXRhKSB7XG4gICAgZGF0YSA9IHt9O1xuICB9XG4gIGlmIChkYXRhLmlzX2Vycm9yKSB7XG4gICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICB0cmlnZ2VyKFwicHVzaEVycm9yTXNnXCIsIGRhdGEuaGVhZGVyIHx8IFwiXCIsIGRhdGEubXNnIHx8IFwiXCIpO1xuICAgIH1cbiAgICBpZiAoZGF0YS5pZCAmJiBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdKSB7XG4gICAgICBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdWzFdKGRhdGEuZGF0YSB8fCBudWxsKTtcbiAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgIHRyaWdnZXIoXCJwdXNoTXNnXCIsIGRhdGEuaGVhZGVyIHx8IFwiXCIsIGRhdGEubXNnIHx8IFwiXCIpO1xuICAgIH1cblxuICAgIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSBcInNkY19yZWNhbGxcIikge1xuICAgICAgaWYgKGRhdGEuaWQgJiYgT1BFTl9SRVFVRVNUU1tkYXRhLmlkXSkge1xuICAgICAgICBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdWzBdKGRhdGEuZGF0YSk7XG4gICAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlICYmIGRhdGEudHlwZSA9PT0gXCJzZGNfZXZlbnRcIikge1xuICAgICAgbGV0IGV2ZW50ID0gZGF0YS5ldmVudDtcbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICB0cmlnZ2VyKGV2ZW50LCBkYXRhLnBheWxvYWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlICYmIGRhdGEudHlwZSA9PT0gXCJzZGNfcmVkaXJlY3RcIikge1xuICAgICAgdHJpZ2dlcihcIm9uTmF2TGlua1wiLCBkYXRhLmxpbmspO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzb2NrZXRDbG9zZSgpIHtcbiAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgIElTX0NPTk5FQ1RFRCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBTRENfU09DS0VULmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxufVxuXG5mdW5jdGlvbiBzb2NrZXRJc0Nvbm5lY3RlZCgpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9IGVsc2UgaWYgKElTX0NPTk5FQ1RJTkcpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCAyMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZShfY29ubmVjdCgpKTtcbiAgICB9XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbInV1aWR2NCIsInRyaWdnZXIiLCJJU19DT05ORUNURUQiLCJJU19DT05ORUNUSU5HIiwiU0RDX1NPQ0tFVCIsIk9QRU5fUkVRVUVTVFMiLCJjYWxsU2VydmVyIiwiYXBwIiwiY29udHJvbGxlciIsInBhcnNlZENvbnRlbnRVcmwiLCJmdW5jTmFtZSIsImFyZ3MiLCJ3aW5kb3ciLCJTRVJWRVJfQ0FMTF9WSUFfV0VCX1NPQ0tFVCIsInNvY2tldENhbGxTZXJ2ZXIiLCJwb3N0Q2FsbFNlcnZlciIsImlzQ29ubmVjdGVkIiwic29ja2V0SXNDb25uZWN0ZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNsb3NlIiwic29ja2V0Q2xvc2UiLCJBcnJheSIsImlzQXJyYXkiLCJhcmcwIiwiZGF0YSIsIkpTT04iLCJzdHJpbmdpZnkiLCJfc2RjX2Z1bmNfbmFtZSIsIl9tZXRob2QiLCIkIiwicG9zdCIsInVybCIsImJlZm9yZVNlbmQiLCJ4aHIiLCJzZXR0aW5ncyIsInNldFJlcXVlc3RIZWFkZXIiLCJDU1JGX1RPS0VOIiwidGhlbiIsInJlcyIsIl9oYW5kbGVfcmVzcG9uc2UiLCJjYXRjaCIsInJlc3BvbnNlSlNPTiIsImlzX2Vycm9yIiwiaWQiLCJzZW5kIiwiZXZlbnQiLCJmdW5jdGlvbiIsInJlamVjdCIsIl9jb25uZWN0IiwibG9jYXRpb24iLCJwcm90b2NvbCIsIldlYlNvY2tldCIsImhvc3QiLCJvbm1lc3NhZ2UiLCJlIiwicGFyc2UiLCJvbmNsb3NlIiwiY29uc29sZSIsImVycm9yIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0VGltZW91dCIsIm9uZXJyb3IiLCJlcnIiLCJtZXNzYWdlIiwib25vcGVuIiwibXNnIiwiaGVhZGVyIiwidHlwZSIsInBheWxvYWQiLCJsaW5rIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_server_call.js\n\n}");
|
|
97
|
+
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\n\nlet IS_CONNECTED = false;\nlet IS_CONNECTING = false;\nlet SDC_SOCKET = null;\nlet OPEN_REQUESTS = {};\n\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}\n\nfunction isConnected() {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n return socketIsConnected();\n } else {\n return Promise.resolve(true);\n }\n}\n\nfunction close() {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n socketClose();\n }\n}\n\nfunction postCallServer(parsedContentUrl, funcName, args) {\n if (typeof args !== \"object\" && Array.isArray(args) && args === null) {\n args = { arg0: args };\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 })\n .then((res) => {\n const data = res[\"_return_data\"];\n _handle_response(data);\n return data;\n })\n .catch((res) => {\n const data = res.responseJSON || {};\n data.is_error = true;\n _handle_response(data);\n throw res;\n });\n}\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(\n JSON.stringify({\n event: \"sdc_call\",\n id: id,\n controller: controller,\n app: app,\n function: funcName,\n args: args,\n }),\n );\n });\n\n return new Promise((resolve, reject) => {\n OPEN_REQUESTS[id] = [resolve, reject];\n });\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\n SDC_SOCKET.onmessage = function (e) {\n let data = JSON.parse(e.data);\n _handle_response(data);\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\n setTimeout(() => {\n _connect();\n }, 1000);\n };\n\n SDC_SOCKET.onerror = function (err) {\n console.error(\n \"Socket encountered error: \",\n err.message,\n \"Closing socket\",\n );\n if (IS_CONNECTED) {\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n };\n\n SDC_SOCKET.onopen = function () {\n IS_CONNECTED = true;\n IS_CONNECTING = false;\n resolve();\n };\n });\n}\n\nfunction _handle_response(data) {\n if (!data) {\n data = {};\n }\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 (data.id && 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\n if (data.type && data.type === \"sdc_recall\") {\n if (data.id && 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\nfunction socketClose() {\n if (IS_CONNECTED) {\n IS_CONNECTED = false;\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\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}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc2VydmVyX2NhbGwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBd0M7QUFDRTs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsV0FBVyxxREFBTTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMscUJBQXFCO0FBQy9ELE1BQU07QUFDTix5Q0FBeUMscUJBQXFCO0FBQzlEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLHVEQUFPO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLE1BQU0sdURBQU87QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFRLHVEQUFPO0FBQ2Y7QUFDQSxNQUFNO0FBQ04sTUFBTSx1REFBTztBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc2VydmVyX2NhbGwuanM/ZDI0YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7IHRyaWdnZXIgfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5cbmxldCBJU19DT05ORUNURUQgPSBmYWxzZTtcbmxldCBJU19DT05ORUNUSU5HID0gZmFsc2U7XG5sZXQgU0RDX1NPQ0tFVCA9IG51bGw7XG5sZXQgT1BFTl9SRVFVRVNUUyA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gY2FsbFNlcnZlcihhcHAsIGNvbnRyb2xsZXIsIHBhcnNlZENvbnRlbnRVcmwsIGZ1bmNOYW1lLCBhcmdzKSB7XG4gIGlmICh3aW5kb3cuU0VSVkVSX0NBTExfVklBX1dFQl9TT0NLRVQpIHtcbiAgICByZXR1cm4gc29ja2V0Q2FsbFNlcnZlcihhcHAsIGNvbnRyb2xsZXIsIGZ1bmNOYW1lLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcG9zdENhbGxTZXJ2ZXIocGFyc2VkQ29udGVudFVybCwgZnVuY05hbWUsIGFyZ3MpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Nvbm5lY3RlZCgpIHtcbiAgaWYgKHdpbmRvdy5TRVJWRVJfQ0FMTF9WSUFfV0VCX1NPQ0tFVCkge1xuICAgIHJldHVybiBzb2NrZXRJc0Nvbm5lY3RlZCgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlKCkge1xuICBpZiAod2luZG93LlNFUlZFUl9DQUxMX1ZJQV9XRUJfU09DS0VUKSB7XG4gICAgc29ja2V0Q2xvc2UoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3N0Q2FsbFNlcnZlcihwYXJzZWRDb250ZW50VXJsLCBmdW5jTmFtZSwgYXJncykge1xuICBpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgJiYgQXJyYXkuaXNBcnJheShhcmdzKSAmJiBhcmdzID09PSBudWxsKSB7XG4gICAgYXJncyA9IHsgYXJnMDogYXJncyB9O1xuICB9XG4gIGFyZ3MgPSB7XG4gICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoYXJncyksXG4gICAgX3NkY19mdW5jX25hbWU6IGZ1bmNOYW1lLFxuICAgIF9tZXRob2Q6IFwic2RjX3NlcnZlcl9jYWxsXCIsXG4gIH07XG4gIHJldHVybiAkLnBvc3Qoe1xuICAgIHVybDogcGFyc2VkQ29udGVudFVybCxcbiAgICBkYXRhOiBhcmdzLFxuICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uICh4aHIsIHNldHRpbmdzKSB7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIlgtQ1NSRlRva2VuXCIsIHdpbmRvdy5DU1JGX1RPS0VOKTtcbiAgICB9LFxuICB9KVxuICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXNbXCJfcmV0dXJuX2RhdGFcIl07XG4gICAgICBfaGFuZGxlX3Jlc3BvbnNlKGRhdGEpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSlcbiAgICAuY2F0Y2goKHJlcykgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHJlcy5yZXNwb25zZUpTT04gfHwge307XG4gICAgICBkYXRhLmlzX2Vycm9yID0gdHJ1ZTtcbiAgICAgIF9oYW5kbGVfcmVzcG9uc2UoZGF0YSk7XG4gICAgICB0aHJvdyByZXM7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHNvY2tldENhbGxTZXJ2ZXIoYXBwLCBjb250cm9sbGVyLCBmdW5jTmFtZSwgYXJncykge1xuICBsZXQgaWQgPSB1dWlkdjQoKTtcbiAgaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICBTRENfU09DS0VULnNlbmQoXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGV2ZW50OiBcInNkY19jYWxsXCIsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgY29udHJvbGxlcjogY29udHJvbGxlcixcbiAgICAgICAgYXBwOiBhcHAsXG4gICAgICAgIGZ1bmN0aW9uOiBmdW5jTmFtZSxcbiAgICAgICAgYXJnczogYXJncyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgT1BFTl9SRVFVRVNUU1tpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9jb25uZWN0KCkge1xuICBJU19DT05ORUNUSU5HID0gdHJ1ZTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJodHRwczpcIikge1xuICAgICAgU0RDX1NPQ0tFVCA9IG5ldyBXZWJTb2NrZXQoYHdzczovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L3NkY193cy93cy9gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgU0RDX1NPQ0tFVCA9IG5ldyBXZWJTb2NrZXQoYHdzOi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vc2RjX3dzL3dzL2ApO1xuICAgIH1cblxuICAgIFNEQ19TT0NLRVQub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgICAgX2hhbmRsZV9yZXNwb25zZShkYXRhKTtcbiAgICB9O1xuXG4gICAgU0RDX1NPQ0tFVC5vbmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiU0RDIFNvY2tldCBjbG9zZWQgdW5leHBlY3RlZGx5XCIpO1xuICAgICAgfVxuICAgICAgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhPUEVOX1JFUVVFU1RTKSkge1xuICAgICAgICB2YWx1ZVsxXSh7fSk7XG4gICAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2tleV07XG4gICAgICB9XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBfY29ubmVjdCgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfTtcblxuICAgIFNEQ19TT0NLRVQub25lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiBcIixcbiAgICAgICAgZXJyLm1lc3NhZ2UsXG4gICAgICAgIFwiQ2xvc2luZyBzb2NrZXRcIixcbiAgICAgICk7XG4gICAgICBpZiAoSVNfQ09OTkVDVEVEKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgU0RDX1NPQ0tFVC5jbG9zZSgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH07XG5cbiAgICBTRENfU09DS0VULm9ub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIElTX0NPTk5FQ1RFRCA9IHRydWU7XG4gICAgICBJU19DT05ORUNUSU5HID0gZmFsc2U7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9oYW5kbGVfcmVzcG9uc2UoZGF0YSkge1xuICBpZiAoIWRhdGEpIHtcbiAgICBkYXRhID0ge307XG4gIH1cbiAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgIHRyaWdnZXIoXCJwdXNoRXJyb3JNc2dcIiwgZGF0YS5oZWFkZXIgfHwgXCJcIiwgZGF0YS5tc2cgfHwgXCJcIik7XG4gICAgfVxuICAgIGlmIChkYXRhLmlkICYmIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF0pIHtcbiAgICAgIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF1bMV0oZGF0YS5kYXRhIHx8IG51bGwpO1xuICAgICAgZGVsZXRlIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChkYXRhLm1zZyB8fCBkYXRhLmhlYWRlcikge1xuICAgICAgdHJpZ2dlcihcInB1c2hNc2dcIiwgZGF0YS5oZWFkZXIgfHwgXCJcIiwgZGF0YS5tc2cgfHwgXCJcIik7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEudHlwZSAmJiBkYXRhLnR5cGUgPT09IFwic2RjX3JlY2FsbFwiKSB7XG4gICAgICBpZiAoZGF0YS5pZCAmJiBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdKSB7XG4gICAgICAgIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF1bMF0oZGF0YS5kYXRhKTtcbiAgICAgICAgZGVsZXRlIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSBcInNkY19ldmVudFwiKSB7XG4gICAgICBsZXQgZXZlbnQgPSBkYXRhLmV2ZW50O1xuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIHRyaWdnZXIoZXZlbnQsIGRhdGEucGF5bG9hZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSBcInNkY19yZWRpcmVjdFwiKSB7XG4gICAgICB0cmlnZ2VyKFwib25OYXZMaW5rXCIsIGRhdGEubGluayk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNvY2tldENsb3NlKCkge1xuICBpZiAoSVNfQ09OTkVDVEVEKSB7XG4gICAgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIFNEQ19TT0NLRVQuY2xvc2UoKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG59XG5cbmZ1bmN0aW9uIHNvY2tldElzQ29ubmVjdGVkKCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBpZiAoSVNfQ09OTkVDVEVEKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0gZWxzZSBpZiAoSVNfQ09OTkVDVElORykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNvbHZlKF9jb25uZWN0KCkpO1xuICAgIH1cbiAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_server_call.js\n\n}");
|
|
98
98
|
|
|
99
99
|
/***/ },
|
|
100
100
|
|
|
@@ -104,7 +104,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
104
104
|
\********************************************/
|
|
105
105
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
106
106
|
|
|
107
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getModel: () => (/* binding */ getModel),\n/* harmony export */ registerModel: () => (/* binding */ registerModel)\n/* harmony export */ });\nconst registeredModels = {};\nfunction registerModel(name, classObj) {\n registeredModels[name] = classObj;\n}\nfunction getModel(name) {\n return registeredModels[name];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
107
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getModel: () => (/* binding */ getModel),\n/* harmony export */ registerModel: () => (/* binding */ registerModel)\n/* harmony export */ });\nconst registeredModels = {};\n\n\nfunction registerModel(name, classObj) {\n registeredModels[name] = classObj;\n}\n\nfunction getModel(name) {\n return registeredModels[name];\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc29ja2V0LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3NvY2tldC5qcz8wNDcxIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHJlZ2lzdGVyZWRNb2RlbHMgPSB7fTtcblxuXG5mdW5jdGlvbiByZWdpc3Rlck1vZGVsKG5hbWUsIGNsYXNzT2JqKSB7XG4gIHJlZ2lzdGVyZWRNb2RlbHNbbmFtZV0gPSBjbGFzc09iajtcbn1cblxuZnVuY3Rpb24gZ2V0TW9kZWwobmFtZSkge1xuICByZXR1cm4gcmVnaXN0ZXJlZE1vZGVsc1tuYW1lXTtcbn1cblxuXG5leHBvcnQge1xuICByZWdpc3Rlck1vZGVsLFxuICBnZXRNb2RlbCxcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_socket.js\n\n}");
|
|
108
108
|
|
|
109
109
|
/***/ },
|
|
110
110
|
|
|
@@ -114,7 +114,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
114
114
|
\************************************************/
|
|
115
115
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
116
116
|
|
|
117
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ controllerFromTestHtml: () => (/* binding */ controllerFromTestHtml),\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\nlet spy = [],\n _originAjax;\nfunction setDefaults() {\n if (!jest) throw new Error(\"JEST is not defined\");\n if (spy.length === 0) {\n _originAjax = $.ajax.bind($);\n spy.push(jest.spyOn($, \"ajax\"));\n spy[0].mockImplementation(function (a) {\n return _originAjax(a).then(html => {\n return html;\n }).catch(html => {\n return html;\n });\n });\n }\n}\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 *\n * @param html{string} HTML: .\n * @param afterLifecycle{bool} Lifecycle Methode -> Reruns the controller after the root controller has run the \"onRefresh\" methode. This is optional.\n * @returns {Promise<Array<{AbstractSDC}>>}\n */\nasync function controllerFromTestHtml(html, afterLifecycle = null) {\n setDefaults();\n const $body = $(\"body\");\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty().append(html);\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 let children = _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.rootController.iterateAllChildren();\n if (!afterLifecycle) {\n return children;\n }\n const origenRefresh = children[0].onRefresh;\n const refreshSpy = jest.spyOn(children[0], \"onRefresh\");\n return new Promise(resolve => {\n refreshSpy.mockImplementation(function () {\n refreshSpy.mockRestore();\n const res = origenRefresh.apply(children[0], arguments);\n resolve(children);\n return res;\n });\n });\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 setDefaults();\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 const controller = _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.getController($controller);\n controller.navControllerPath = [tag_name];\n return controller;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QzJCLE1BQU0sQ0FBQ29CLFdBQVcsQ0FBQztFQUUxRHZCLEtBQUssQ0FBQ0csTUFBTSxDQUFDMEIsYUFBYSxDQUFDO0VBQzNCNUQsNkNBQUcsQ0FBQ21DLE9BQU8sR0FBRyxLQUFLO0VBQ25CbkMsNkNBQUcsQ0FBQ29DLFVBQVUsQ0FBQyxDQUFDO0VBQ2hCLE1BQU1wQyw2Q0FBRyxDQUFDcUMsUUFBUSxDQUFDLENBQUM7RUFDcEIsTUFBTXdCLFVBQVUsR0FBRzdELDZDQUFHLENBQUM4RCxhQUFhLENBQUNSLFdBQVcsQ0FBQztFQUNqRE8sVUFBVSxDQUFDRSxpQkFBaUIsR0FBRyxDQUFDWixRQUFRLENBQUM7RUFDekMsT0FBT1UsVUFBVTtBQUNuQiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdGVzdF91dGlscy5qcz9hNDM5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGplc3QtZW52aXJvbm1lbnQganNkb21cbiAqL1xuaW1wb3J0IHsgYXBwIH0gZnJvbSBcIi4vc2RjX21haW4uanNcIjtcblxubGV0IHNweSA9IFtdLFxuICBfb3JpZ2luQWpheDtcblxuZnVuY3Rpb24gc2V0RGVmYXVsdHMoKSB7XG4gIGlmICghamVzdCkgdGhyb3cgbmV3IEVycm9yKFwiSkVTVCBpcyBub3QgZGVmaW5lZFwiKTtcbiAgaWYgKHNweS5sZW5ndGggPT09IDApIHtcbiAgICBfb3JpZ2luQWpheCA9ICQuYWpheC5iaW5kKCQpO1xuXG4gICAgc3B5LnB1c2goamVzdC5zcHlPbigkLCBcImFqYXhcIikpO1xuICAgIHNweVswXS5tb2NrSW1wbGVtZW50YXRpb24oZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBfb3JpZ2luQWpheChhKVxuICAgICAgICAudGhlbigoaHRtbCkgPT4ge1xuICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGh0bWwpID0+IHtcbiAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUpIHtcbiAgbGV0IGNvb2tpZVZhbHVlID0gbnVsbDtcbiAgaWYgKGRvY3VtZW50LmNvb2tpZSAmJiBkb2N1bWVudC5jb29raWUgIT09IFwiXCIpIHtcbiAgICBjb25zdCBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IGNvb2tpZXNbaV0udHJpbSgpO1xuICAgICAgLy8gRG9lcyB0aGlzIGNvb2tpZSBzdHJpbmcgYmVnaW4gd2l0aCB0aGUgbmFtZSB3ZSB3YW50P1xuICAgICAgaWYgKGNvb2tpZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGggKyAxKSA9PT0gbmFtZSArIFwiPVwiKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoY29va2llLnN1YnN0cmluZyhuYW1lLmxlbmd0aCArIDEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgQ1NSRiB0b2tlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3NyZlRva2VuKCkge1xuICByZXR1cm4gZ2V0Q29va2llKFwiY3NyZnRva2VuXCIpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gaHRtbHtzdHJpbmd9IEhUTUw6IC5cbiAqIEBwYXJhbSBhZnRlckxpZmVjeWNsZXtib29sfSBMaWZlY3ljbGUgTWV0aG9kZSAtPiBSZXJ1bnMgdGhlIGNvbnRyb2xsZXIgYWZ0ZXIgdGhlIHJvb3QgY29udHJvbGxlciBoYXMgcnVuIHRoZSBcIm9uUmVmcmVzaFwiIG1ldGhvZGUuIFRoaXMgaXMgb3B0aW9uYWwuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTx7QWJzdHJhY3RTREN9Pj59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb250cm9sbGVyRnJvbVRlc3RIdG1sKGh0bWwsIGFmdGVyTGlmZWN5Y2xlID0gbnVsbCkge1xuICBzZXREZWZhdWx0cygpO1xuICBjb25zdCAkYm9keSA9ICQoXCJib2R5XCIpO1xuICBhcHAudXBkYXRlSnF1ZXJ5KCk7XG4gICRib2R5LnNhZmVFbXB0eSgpLmFwcGVuZChodG1sKTtcbiAgYXBwLl9pc0luaXQgPSBmYWxzZTtcbiAgYXBwLmNsZWFuQ2FjaGUoKTtcbiAgYXdhaXQgYXBwLmluaXRfc2RjKCk7XG5cbiAgbGV0IGNoaWxkcmVuID0gYXBwLnJvb3RDb250cm9sbGVyLml0ZXJhdGVBbGxDaGlsZHJlbigpO1xuXG4gIGlmICghYWZ0ZXJMaWZlY3ljbGUpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICBjb25zdCBvcmlnZW5SZWZyZXNoID0gY2hpbGRyZW5bMF0ub25SZWZyZXNoO1xuXG4gIGNvbnN0IHJlZnJlc2hTcHkgPSBqZXN0LnNweU9uKGNoaWxkcmVuWzBdLCBcIm9uUmVmcmVzaFwiKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICByZWZyZXNoU3B5Lm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICByZWZyZXNoU3B5Lm1vY2tSZXN0b3JlKCk7XG4gICAgICBjb25zdCByZXMgPSBvcmlnZW5SZWZyZXNoLmFwcGx5KGNoaWxkcmVuWzBdLCBhcmd1bWVudHMpO1xuICAgICAgcmVzb2x2ZShjaGlsZHJlbik7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY29udHJvbGxlci4gVGhpcyBjb250cm9sbGVyIGhhcyBiZWVuIGNyZWF0ZWQgYnkgdGhlIHVzaW5nIHRoZSBub3JtYWwgU0RDIGxpZmUgY3ljbGUuXG4gKlxuICogQHBhcmFtIHRhZ19uYW1le3N0cmluZ30gQ29udHJvbGxlciB0YWcgbmFtZSAoc25ha2UtY2FzZSlcbiAqIEBwYXJhbSBpbml0X2FyZ3VtZW50c3tvYmplY3R9IG9iamVjdDogTW9ja2VkcyB0aGUgdGFnIGRhdGEgYXJndW1lbnRzLlxuICogQHBhcmFtIG9yaWdlbl9odG1se3N0cmluZ30gSFRNTDogTW9ja2VkIGNvbnRlbnQgb2YgdGhlIGNvbnRlbnQgaW4geW91ciB0YXJnZXQgSFRNTCBjb250YWluZXIuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx7QWJzdHJhY3RTREN9Pn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldF9jb250cm9sbGVyKFxuICB0YWdfbmFtZSxcbiAgaW5pdF9hcmd1bWVudHMgPSB7fSxcbiAgb3JpZ2VuX2h0bWwgPSBcIlwiLFxuKSB7XG4gIHNldERlZmF1bHRzKCk7XG4gIGNvbnN0ICRib2R5ID0gJChcImJvZHlcIik7XG4gIGFwcC51cGRhdGVKcXVlcnkoKTtcblxuICAkYm9keS5zYWZlRW1wdHkoKTtcblxuICBjb25zdCAkY29udHJvbGxlciA9ICQoYDwke3RhZ19uYW1lfT4ke29yaWdlbl9odG1sfTwvJHt0YWdfbmFtZX0+YCk7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRfYXJndW1lbnRzKSkge1xuICAgICRjb250cm9sbGVyLmRhdGEoa2V5LCB2YWx1ZSk7XG4gIH1cbiAgY29uc3QgJGRpdkNvbnRhaW5lciA9ICQoXCI8ZGl2PjwvZGl2PlwiKS5hcHBlbmQoJGNvbnRyb2xsZXIpXG5cbiAgJGJvZHkuYXBwZW5kKCRkaXZDb250YWluZXIpO1xuICBhcHAuX2lzSW5pdCA9IGZhbHNlO1xuICBhcHAuY2xlYW5DYWNoZSgpO1xuICBhd2FpdCBhcHAuaW5pdF9zZGMoKTtcbiAgY29uc3QgY29udHJvbGxlciA9IGFwcC5nZXRDb250cm9sbGVyKCRjb250cm9sbGVyKTtcbiAgY29udHJvbGxlci5uYXZDb250cm9sbGVyUGF0aCA9IFt0YWdfbmFtZV1cbiAgcmV0dXJuIGNvbnRyb2xsZXI7XG59XG4iXSwibmFtZXMiOlsiYXBwIiwic3B5IiwiX29yaWdpbkFqYXgiLCJzZXREZWZhdWx0cyIsImplc3QiLCJFcnJvciIsImxlbmd0aCIsIiQiLCJhamF4IiwiYmluZCIsInB1c2giLCJzcHlPbiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsImEiLCJ0aGVuIiwiaHRtbCIsImNhdGNoIiwiZ2V0Q29va2llIiwibmFtZSIsImNvb2tpZVZhbHVlIiwiZG9jdW1lbnQiLCJjb29raWUiLCJjb29raWVzIiwic3BsaXQiLCJpIiwidHJpbSIsInN1YnN0cmluZyIsImRlY29kZVVSSUNvbXBvbmVudCIsImdldENzcmZUb2tlbiIsImNvbnRyb2xsZXJGcm9tVGVzdEh0bWwiLCJhZnRlckxpZmVjeWNsZSIsIiRib2R5IiwidXBkYXRlSnF1ZXJ5Iiwic2FmZUVtcHR5IiwiYXBwZW5kIiwiX2lzSW5pdCIsImNsZWFuQ2FjaGUiLCJpbml0X3NkYyIsImNoaWxkcmVuIiwicm9vdENvbnRyb2xsZXIiLCJpdGVyYXRlQWxsQ2hpbGRyZW4iLCJvcmlnZW5SZWZyZXNoIiwib25SZWZyZXNoIiwicmVmcmVzaFNweSIsIlByb21pc2UiLCJyZXNvbHZlIiwibW9ja1Jlc3RvcmUiLCJyZXMiLCJhcHBseSIsImFyZ3VtZW50cyIsImdldF9jb250cm9sbGVyIiwidGFnX25hbWUiLCJpbml0X2FyZ3VtZW50cyIsIm9yaWdlbl9odG1sIiwiJGNvbnRyb2xsZXIiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJkYXRhIiwiJGRpdkNvbnRhaW5lciIsImNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwibmF2Q29udHJvbGxlclBhdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_test_utils.js\n\n}");
|
|
117
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ controllerFromTestHtml: () => (/* binding */ controllerFromTestHtml),\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 = [],\n _originAjax;\n\nfunction setDefaults() {\n if (!jest) throw new Error(\"JEST is not defined\");\n if (spy.length === 0) {\n _originAjax = $.ajax.bind($);\n\n spy.push(jest.spyOn($, \"ajax\"));\n spy[0].mockImplementation(function (a) {\n return _originAjax(a)\n .then((html) => {\n return html;\n })\n .catch((html) => {\n return html;\n });\n });\n }\n}\n\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 *\n * @param html{string} HTML: .\n * @param afterLifecycle{bool} Lifecycle Methode -> Reruns the controller after the root controller has run the \"onRefresh\" methode. This is optional.\n * @returns {Promise<Array<{AbstractSDC}>>}\n */\nasync function controllerFromTestHtml(html, afterLifecycle = null) {\n setDefaults();\n const $body = $(\"body\");\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty().append(html);\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\n let children = _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.rootController.iterateAllChildren();\n\n if (!afterLifecycle) {\n return children;\n }\n\n const origenRefresh = children[0].onRefresh;\n\n const refreshSpy = jest.spyOn(children[0], \"onRefresh\");\n\n return new Promise((resolve) => {\n refreshSpy.mockImplementation(function () {\n refreshSpy.mockRestore();\n const res = origenRefresh.apply(children[0], arguments);\n resolve(children);\n return res;\n });\n });\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(\n tag_name,\n init_arguments = {},\n origen_html = \"\",\n) {\n setDefaults();\n const $body = $(\"body\");\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n\n $body.safeEmpty();\n\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\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 const controller = _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.getController($controller);\n controller.navControllerPath = [tag_name]\n return controller;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdGVzdF91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ29DOztBQUVwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUMsb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIseUJBQXlCLE1BQU07QUFDL0IsYUFBYSxlQUFlLFlBQVk7QUFDeEM7QUFDTztBQUNQO0FBQ0E7QUFDQSxFQUFFLDZDQUFHO0FBQ0w7QUFDQSxFQUFFLDZDQUFHO0FBQ0wsRUFBRSw2Q0FBRztBQUNMLFFBQVEsNkNBQUc7O0FBRVgsaUJBQWlCLDZDQUFHOztBQUVwQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQix5QkFBeUIsUUFBUTtBQUNqQyxzQkFBc0IsUUFBUTtBQUM5QixhQUFhLFNBQVMsWUFBWTtBQUNsQztBQUNPO0FBQ1A7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLDZDQUFHOztBQUVMOztBQUVBLDRCQUE0QixTQUFTLEdBQUcsWUFBWSxJQUFJLFNBQVM7QUFDakU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLDZDQUFHO0FBQ0wsRUFBRSw2Q0FBRztBQUNMLFFBQVEsNkNBQUc7QUFDWCxxQkFBcUIsNkNBQUc7QUFDeEI7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY190ZXN0X3V0aWxzLmpzPzVmYmIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAamVzdC1lbnZpcm9ubWVudCBqc2RvbVxuICovXG5pbXBvcnQgeyBhcHAgfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuXG5sZXQgc3B5ID0gW10sXG4gIF9vcmlnaW5BamF4O1xuXG5mdW5jdGlvbiBzZXREZWZhdWx0cygpIHtcbiAgaWYgKCFqZXN0KSB0aHJvdyBuZXcgRXJyb3IoXCJKRVNUIGlzIG5vdCBkZWZpbmVkXCIpO1xuICBpZiAoc3B5Lmxlbmd0aCA9PT0gMCkge1xuICAgIF9vcmlnaW5BamF4ID0gJC5hamF4LmJpbmQoJCk7XG5cbiAgICBzcHkucHVzaChqZXN0LnNweU9uKCQsIFwiYWpheFwiKSk7XG4gICAgc3B5WzBdLm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIF9vcmlnaW5BamF4KGEpXG4gICAgICAgIC50aGVuKChodG1sKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoaHRtbCkgPT4ge1xuICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDb29raWUobmFtZSkge1xuICBsZXQgY29va2llVmFsdWUgPSBudWxsO1xuICBpZiAoZG9jdW1lbnQuY29va2llICYmIGRvY3VtZW50LmNvb2tpZSAhPT0gXCJcIikge1xuICAgIGNvbnN0IGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29va2llID0gY29va2llc1tpXS50cmltKCk7XG4gICAgICAvLyBEb2VzIHRoaXMgY29va2llIHN0cmluZyBiZWdpbiB3aXRoIHRoZSBuYW1lIHdlIHdhbnQ/XG4gICAgICBpZiAoY29va2llLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCArIDEpID09PSBuYW1lICsgXCI9XCIpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjb29raWUuc3Vic3RyaW5nKG5hbWUubGVuZ3RoICsgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gXCJcIjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBDU1JGIHRva2VuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDc3JmVG9rZW4oKSB7XG4gIHJldHVybiBnZXRDb29raWUoXCJjc3JmdG9rZW5cIik7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBodG1se3N0cmluZ30gSFRNTDogLlxuICogQHBhcmFtIGFmdGVyTGlmZWN5Y2xle2Jvb2x9IExpZmVjeWNsZSBNZXRob2RlIC0+IFJlcnVucyB0aGUgY29udHJvbGxlciBhZnRlciB0aGUgcm9vdCBjb250cm9sbGVyIGhhcyBydW4gdGhlIFwib25SZWZyZXNoXCIgbWV0aG9kZS4gVGhpcyBpcyBvcHRpb25hbC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PHtBYnN0cmFjdFNEQ30+Pn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbnRyb2xsZXJGcm9tVGVzdEh0bWwoaHRtbCwgYWZ0ZXJMaWZlY3ljbGUgPSBudWxsKSB7XG4gIHNldERlZmF1bHRzKCk7XG4gIGNvbnN0ICRib2R5ID0gJChcImJvZHlcIik7XG4gIGFwcC51cGRhdGVKcXVlcnkoKTtcbiAgJGJvZHkuc2FmZUVtcHR5KCkuYXBwZW5kKGh0bWwpO1xuICBhcHAuX2lzSW5pdCA9IGZhbHNlO1xuICBhcHAuY2xlYW5DYWNoZSgpO1xuICBhd2FpdCBhcHAuaW5pdF9zZGMoKTtcblxuICBsZXQgY2hpbGRyZW4gPSBhcHAucm9vdENvbnRyb2xsZXIuaXRlcmF0ZUFsbENoaWxkcmVuKCk7XG5cbiAgaWYgKCFhZnRlckxpZmVjeWNsZSkge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIGNvbnN0IG9yaWdlblJlZnJlc2ggPSBjaGlsZHJlblswXS5vblJlZnJlc2g7XG5cbiAgY29uc3QgcmVmcmVzaFNweSA9IGplc3Quc3B5T24oY2hpbGRyZW5bMF0sIFwib25SZWZyZXNoXCIpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHJlZnJlc2hTcHkubW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZnJlc2hTcHkubW9ja1Jlc3RvcmUoKTtcbiAgICAgIGNvbnN0IHJlcyA9IG9yaWdlblJlZnJlc2guYXBwbHkoY2hpbGRyZW5bMF0sIGFyZ3VtZW50cyk7XG4gICAgICByZXNvbHZlKGNoaWxkcmVuKTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjb250cm9sbGVyLiBUaGlzIGNvbnRyb2xsZXIgaGFzIGJlZW4gY3JlYXRlZCBieSB0aGUgdXNpbmcgdGhlIG5vcm1hbCBTREMgbGlmZSBjeWNsZS5cbiAqXG4gKiBAcGFyYW0gdGFnX25hbWV7c3RyaW5nfSBDb250cm9sbGVyIHRhZyBuYW1lIChzbmFrZS1jYXNlKVxuICogQHBhcmFtIGluaXRfYXJndW1lbnRze29iamVjdH0gb2JqZWN0OiBNb2NrZWRzIHRoZSB0YWcgZGF0YSBhcmd1bWVudHMuXG4gKiBAcGFyYW0gb3JpZ2VuX2h0bWx7c3RyaW5nfSBIVE1MOiBNb2NrZWQgY29udGVudCBvZiB0aGUgY29udGVudCBpbiB5b3VyIHRhcmdldCBIVE1MIGNvbnRhaW5lci5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHtBYnN0cmFjdFNEQ30+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0X2NvbnRyb2xsZXIoXG4gIHRhZ19uYW1lLFxuICBpbml0X2FyZ3VtZW50cyA9IHt9LFxuICBvcmlnZW5faHRtbCA9IFwiXCIsXG4pIHtcbiAgc2V0RGVmYXVsdHMoKTtcbiAgY29uc3QgJGJvZHkgPSAkKFwiYm9keVwiKTtcbiAgYXBwLnVwZGF0ZUpxdWVyeSgpO1xuXG4gICRib2R5LnNhZmVFbXB0eSgpO1xuXG4gIGNvbnN0ICRjb250cm9sbGVyID0gJChgPCR7dGFnX25hbWV9PiR7b3JpZ2VuX2h0bWx9PC8ke3RhZ19uYW1lfT5gKTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaW5pdF9hcmd1bWVudHMpKSB7XG4gICAgJGNvbnRyb2xsZXIuZGF0YShrZXksIHZhbHVlKTtcbiAgfVxuICBjb25zdCAkZGl2Q29udGFpbmVyID0gJChcIjxkaXY+PC9kaXY+XCIpLmFwcGVuZCgkY29udHJvbGxlcilcblxuICAkYm9keS5hcHBlbmQoJGRpdkNvbnRhaW5lcik7XG4gIGFwcC5faXNJbml0ID0gZmFsc2U7XG4gIGFwcC5jbGVhbkNhY2hlKCk7XG4gIGF3YWl0IGFwcC5pbml0X3NkYygpO1xuICBjb25zdCBjb250cm9sbGVyID0gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRyb2xsZXIpO1xuICBjb250cm9sbGVyLm5hdkNvbnRyb2xsZXJQYXRoID0gW3RhZ19uYW1lXVxuICByZXR1cm4gY29udHJvbGxlcjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_test_utils.js\n\n}");
|
|
118
118
|
|
|
119
119
|
/***/ },
|
|
120
120
|
|
|
@@ -124,7 +124,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
124
124
|
\*******************************************/
|
|
125
125
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
126
126
|
|
|
127
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ agileAggregation: () => (/* binding */ agileAggregation),\n/* harmony export */ camelCaseToTagName: () => (/* binding */ camelCaseToTagName),\n/* harmony export */ checkIfParamNumberBoolOrString: () => (/* binding */ checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* binding */ clearErrorsInForm),\n/* harmony export */ getBody: () => (/* binding */ getBody),\n/* harmony export */ getParamsNameOfFunction: () => (/* binding */ getParamsNameOfFunction),\n/* harmony export */ getValueFromField: () => (/* binding */ getValueFromField),\n/* harmony export */ jqueryInsertAt: () => (/* binding */ jqueryInsertAt),\n/* harmony export */ promiseDummyFactory: () => (/* binding */ promiseDummyFactory),\n/* harmony export */ setErrorsInForm: () => (/* binding */ setErrorsInForm),\n/* harmony export */ setValueInField: () => (/* binding */ setValueInField),\n/* harmony export */ tagNameToCamelCase: () => (/* binding */ tagNameToCamelCase),\n/* harmony export */ tagNameToReadableName: () => (/* binding */ tagNameToReadableName),\n/* harmony export */ uploadFileFormData: () => (/* binding */ uploadFileFormData),\n/* harmony export */ uuidv4: () => (/* binding */ uuidv4)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../index.js */ \"./src/index.js\");\n\n\n/**\n * Reference to the HTML body.\n * @type {*|jQuery|HTMLElement}\n * @private\n */\nlet _$body;\nconst arg_names_reg = /(?<=^|,\\s?)[^=\\s,]+/g;\nconst commend_reg = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/gm;\n\n/**\n * getBody returns the $body jQuery object.\n *\n * @returns {*|jQuery|HTMLElement} - body reference.\n */\nfunction getBody() {\n if (!_$body) {\n _$body = $(\"body\");\n }\n return _$body;\n}\n\n/**\n *\n * @param {function} func\n * @returns {RegExpMatchArray|*[]}\n */\nfunction getParamsNameOfFunction(func) {\n var fnstr = func.toString().replace(commend_reg, \"\");\n var result = fnstr.slice(fnstr.indexOf(\"(\") + 1, fnstr.indexOf(\")\")).match(arg_names_reg);\n if (!result) {\n return [];\n }\n return result;\n}\n\n/**\n * promiseDummyFactory generates a simple promise which returns instantly.\n * @return {Promise} window.utils\n */\nfunction promiseDummyFactory() {\n return new Promise(function (resolve) {\n resolve();\n });\n}\nfunction camelCaseToTagName(str) {\n str = str.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`);\n str = str.replace(/[0-9]+/g, number => `-${number}`);\n return str.replace(/^[-]/g, ``);\n}\nfunction tagNameToCamelCase(str) {\n str = str.replace(/-./g, letter => `${letter[1].toUpperCase()}`);\n return str;\n}\nfunction tagNameToReadableName(str) {\n str = str.replace(/-./g, letter => ` ${letter[1].toUpperCase()}`).replace(/^./g, letter => `${letter.toUpperCase()}`);\n return str;\n}\nconst copyProps = (targetClass, sourceClass) => {\n let source = sourceClass;\n let propNamesTarget = Object.getOwnPropertyNames(targetClass.prototype).concat(Object.getOwnPropertySymbols(targetClass.prototype));\n while (source.name !== \"\") {\n Object.getOwnPropertyNames(source.prototype).concat(Object.getOwnPropertySymbols(source.prototype)).forEach(prop => {\n if (prop.match(/^(?:constructor|prototype|arguments|caller|name|bind|call|apply|toString|length)$/)) {\n return;\n }\n if (!propNamesTarget.includes(prop)) {\n propNamesTarget.push(prop);\n Object.defineProperty(targetClass.prototype, prop, Object.getOwnPropertyDescriptor(source.prototype, prop));\n }\n });\n source = Object.getPrototypeOf(source);\n }\n};\n\n/**\n *\n * @param {typeof AbstractSDC} baseClass\n * @param {typeof AbstractSDC} mixins\n * @returns {typeof AbstractSDC}\n */\nfunction agileAggregation(baseClass, ...mixins) {\n let base = {\n [baseClass.name]: class {\n constructor(..._args) {\n let _mixins = {};\n mixins.forEach(mixin => {\n let newMixin;\n Object.assign(this, newMixin = new mixin());\n newMixin._tagName = mixin.prototype._tagName;\n newMixin._isMixin = true;\n _mixins[mixin.name] = newMixin;\n });\n Object.assign(this, new baseClass());\n this._mixins = _mixins;\n }\n static get name() {\n return baseClass.name;\n }\n static className() {\n return this.name;\n }\n get mixins() {\n return this._mixins;\n }\n }\n }[baseClass.name];\n copyProps(base, baseClass);\n mixins.forEach(mixin => {\n copyProps(base, mixin);\n });\n return base;\n}\nfunction csrfSafeMethod(method) {\n // these HTTP methods do not require CSRF protection\n return /^(GET|HEAD|OPTIONS|TRACE)$/.test(method);\n}\nfunction uploadFileFormData(formData, url, method) {\n return $.ajax({\n url: url,\n //Server script to process data\n type: method || \"POST\",\n xhr: function () {\n // Custom XMLHttpRequest\n var myXhr = $.ajaxSettings.xhr();\n if (myXhr.upload) {\n // Check if upload property exists\n myXhr.upload.addEventListener(\"progress\", progressHandlingFunction, false); // For handling the progress of the upload\n }\n return myXhr;\n },\n //Form data\n data: formData,\n //Options to tell jQuery not to process data or worry about content-type.\n cache: false,\n contentType: false,\n processData: false,\n beforeSend: function (xhr, settings) {\n if (!csrfSafeMethod(settings.type) && !this.crossDomain) {\n xhr.setRequestHeader(\"X-CSRFToken\", window.CSRF_TOKEN);\n }\n }\n });\n}\nfunction progressHandlingFunction(e) {\n if (e.lengthComputable) {\n var percentVal = Math.round(e.loaded / e.total * 100);\n var $progressContainer = $(\".progress-container\");\n if (percentVal === 100) {\n $progressContainer.hide();\n } else {\n $progressContainer.show();\n }\n percentVal += \"%\";\n $progressContainer.find(\".progress-bar\").css({\n width: percentVal\n }).text(percentVal);\n }\n}\nfunction checkIfParamNumberBoolOrString(paramElement, controller = null) {\n if (typeof paramElement !== \"string\") {\n return paramElement;\n }\n if (controller && typeof controller[paramElement] !== \"undefined\") {\n if (typeof controller[paramElement] === \"function\") {\n return controller[paramElement].bind(controller);\n }\n return controller[paramElement];\n }\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (paramElement.match(isBoolReg)) {\n return paramElement === \"true\";\n } else if (paramElement === \"undefined\") {\n return undefined;\n } else if (paramElement.toLowerCase() === \"none\") {\n return null;\n } else if (paramElement.match(isIntReg)) {\n return parseInt(paramElement);\n } else if (paramElement.match(isFloatReg)) {\n return parseFloat(paramElement);\n } else if (paramElement.match(isStringReg)) {\n return paramElement.substr(1, paramElement.length - 2);\n }\n return paramElement;\n}\nfunction uuidv4() {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n}\nfunction clearErrorsInForm($form) {\n $form.find(\".has-error\").removeClass(\"has-error\").find(\".alert-danger\").remove();\n $form.find(\".non-field-errors\").remove();\n}\nfunction setErrorsInForm($form, $resForm) {\n $resForm = $(\"<div>\").append($resForm);\n $form.find(\".has-error\").removeClass(\"has-error\").find(\".alert-danger\").safeRemove();\n $form.find(\".non-field-errors\").safeRemove();\n let $file_container = $resForm.find(\"input[type=file]\").parent();\n $form.find(\"input[type=file]\").parent().each(function (index) {\n $(this).replaceWith($file_container[index]);\n });\n let hasNoError = $resForm.find(\".non-field-errors\").insertAfter($form.find(\".hidden-form-fields\")).length === 0;\n $resForm.find(\".has-error\").each(function () {\n hasNoError = false;\n let $resErrorField = $(this);\n let className = $resErrorField.data(\"auto-id\");\n let $errorField = $form.find(\".form-group.\" + className);\n $errorField.addClass(\"has-error\");\n $errorField.find(\".form-input-container\").append($resErrorField.find(\".alert-danger\"));\n });\n return hasNoError;\n}\nfunction jqueryInsertAt($container, index, $newElement) {\n let lastIndex = $container.children().size();\n if (index < lastIndex) {\n $container.children().eq(index).before($newElement);\n } else {\n $container.append($newElement);\n }\n return this;\n}\n\n/**\n * Parse hidden input values back into the closest JavaScript primitive.\n *\n * Hidden inputs are often used to preserve values that were originally booleans,\n * numbers or quoted strings. This keeps form-to-model sync from turning\n * everything into plain strings.\n *\n * @param {string} value\n * @returns {*}\n */\nfunction parseHiddenInputs(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, 10);\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 getValueFromField(formItem) {\n let {\n type,\n name\n } = formItem;\n if (name && name !== \"\") {\n if (type === \"hidden\") {\n return parseHiddenInputs($(formItem).val());\n }\n if (type === \"checkbox\") {\n return formItem.checked;\n }\n if (type === \"file\") {\n return formItem.files[0];\n }\n return $(formItem).val();\n }\n return null;\n}\nfunction setValueInField(formItem, value) {\n let {\n type,\n name\n } = formItem;\n if (name && name !== \"\") {\n if (type === \"checkbox\") {\n formItem.checked = !!value;\n } else if (type === \"file\") {\n if (value instanceof File) {\n if (typeof DataTransfer !== \"undefined\") {\n let container = new DataTransfer();\n container.items.add(value);\n formItem.files = container;\n }\n }\n } else if (value instanceof _index_js__WEBPACK_IMPORTED_MODULE_0__.SdcModel) {\n $(formItem).val(value.id);\n } else if (value instanceof _index_js__WEBPACK_IMPORTED_MODULE_0__.SdcQuerySet) {\n $(formItem).val(`[${value.getIds().join(',')}]`);\n } else {\n if (value === null) {\n value = \"\";\n }\n $(formItem).val(value);\n }\n }\n return null;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QzNCLElBQUkzRyxJQUFJLElBQUlBLElBQUksS0FBSyxFQUFFLEVBQUU7SUFFdkIsSUFBSTRCLElBQUksS0FBSyxVQUFVLEVBQUU7TUFDdkIrRSxRQUFRLENBQUNFLE9BQU8sR0FBRyxDQUFDLENBQUNMLEtBQUs7SUFDNUIsQ0FBQyxNQUFNLElBQUk1RSxJQUFJLEtBQUssTUFBTSxFQUFFO01BQzFCLElBQUk0RSxLQUFLLFlBQVlRLElBQUksRUFBRTtRQUN6QixJQUFJLE9BQU9DLFlBQVksS0FBSyxXQUFXLEVBQUU7VUFDdkMsSUFBSUMsU0FBUyxHQUFHLElBQUlELFlBQVksQ0FBQyxDQUFDO1VBQ2xDQyxTQUFTLENBQUNDLEtBQUssQ0FBQ0MsR0FBRyxDQUFDWixLQUFLLENBQUM7VUFDMUJHLFFBQVEsQ0FBQ0csS0FBSyxHQUFHSSxTQUFTO1FBQzVCO01BQ0Y7SUFDRixDQUFDLE1BQU0sSUFBSVYsS0FBSyxZQUFZN0ksK0NBQVEsRUFBRTtNQUNwQ00sQ0FBQyxDQUFDMEksUUFBUSxDQUFDLENBQUNDLEdBQUcsQ0FBQ0osS0FBSyxDQUFDYSxFQUFFLENBQUM7SUFDM0IsQ0FBQyxNQUFNLElBQUliLEtBQUssWUFBWTVJLGtEQUFXLEVBQUU7TUFDdkNLLENBQUMsQ0FBQzBJLFFBQVEsQ0FBQyxDQUFDQyxHQUFHLENBQUMsSUFBSUosS0FBSyxDQUFDYyxNQUFNLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNsRCxDQUFDLE1BQU07TUFDTCxJQUFJZixLQUFLLEtBQUssSUFBSSxFQUFFO1FBQ2xCQSxLQUFLLEdBQUcsRUFBRTtNQUNaO01BQ0F2SSxDQUFDLENBQUMwSSxRQUFRLENBQUMsQ0FBQ0MsR0FBRyxDQUFDSixLQUFLLENBQUM7SUFDeEI7RUFDRjtFQUNBLE9BQU8sSUFBSTtBQUNiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY191dGlscy5qcz9kMGUzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2RjTW9kZWwsIFNkY1F1ZXJ5U2V0fSBmcm9tIFwiLi4vaW5kZXguanNcIjtcblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gdGhlIEhUTUwgYm9keS5cbiAqIEB0eXBlIHsqfGpRdWVyeXxIVE1MRWxlbWVudH1cbiAqIEBwcml2YXRlXG4gKi9cbmxldCBfJGJvZHk7XG5jb25zdCBhcmdfbmFtZXNfcmVnID0gLyg/PD1efCxcXHM/KVtePVxccyxdKy9nO1xuY29uc3QgY29tbWVuZF9yZWcgPSAvKChcXC9cXC8uKiQpfChcXC9cXCpbXFxzXFxTXSo/XFwqXFwvKSkvZ207XG5cbi8qKlxuICogZ2V0Qm9keSByZXR1cm5zIHRoZSAkYm9keSBqUXVlcnkgb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIHsqfGpRdWVyeXxIVE1MRWxlbWVudH0gLSBib2R5IHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJvZHkoKSB7XG4gIGlmICghXyRib2R5KSB7XG4gICAgXyRib2R5ID0gJChcImJvZHlcIik7XG4gIH1cblxuICByZXR1cm4gXyRib2R5O1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jXG4gKiBAcmV0dXJucyB7UmVnRXhwTWF0Y2hBcnJheXwqW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbihmdW5jKSB7XG4gIHZhciBmbnN0ciA9IGZ1bmMudG9TdHJpbmcoKS5yZXBsYWNlKGNvbW1lbmRfcmVnLCBcIlwiKTtcbiAgdmFyIHJlc3VsdCA9IGZuc3RyXG4gICAgLnNsaWNlKGZuc3RyLmluZGV4T2YoXCIoXCIpICsgMSwgZm5zdHIuaW5kZXhPZihcIilcIikpXG4gICAgLm1hdGNoKGFyZ19uYW1lc19yZWcpO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogcHJvbWlzZUR1bW15RmFjdG9yeSBnZW5lcmF0ZXMgYSBzaW1wbGUgcHJvbWlzZSB3aGljaCByZXR1cm5zIGluc3RhbnRseS5cbiAqIEByZXR1cm4ge1Byb21pc2V9IHdpbmRvdy51dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUR1bW15RmFjdG9yeSgpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZVRvVGFnTmFtZShzdHIpIHtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL1tBLVpdL2csIChsZXR0ZXIpID0+IGAtJHtsZXR0ZXIudG9Mb3dlckNhc2UoKX1gKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL1swLTldKy9nLCAobnVtYmVyKSA9PiBgLSR7bnVtYmVyfWApO1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15bLV0vZywgYGApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnTmFtZVRvQ2FtZWxDYXNlKHN0cikge1xuICBzdHIgPSBzdHIucmVwbGFjZSgvLS4vZywgKGxldHRlcikgPT4gYCR7bGV0dGVyWzFdLnRvVXBwZXJDYXNlKCl9YCk7XG4gIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdOYW1lVG9SZWFkYWJsZU5hbWUoc3RyKSB7XG4gIHN0ciA9IHN0clxuICAgIC5yZXBsYWNlKC8tLi9nLCAobGV0dGVyKSA9PiBgICR7bGV0dGVyWzFdLnRvVXBwZXJDYXNlKCl9YClcbiAgICAucmVwbGFjZSgvXi4vZywgKGxldHRlcikgPT4gYCR7bGV0dGVyLnRvVXBwZXJDYXNlKCl9YCk7XG4gIHJldHVybiBzdHI7XG59XG5cbmNvbnN0IGNvcHlQcm9wcyA9ICh0YXJnZXRDbGFzcywgc291cmNlQ2xhc3MpID0+IHtcbiAgbGV0IHNvdXJjZSA9IHNvdXJjZUNsYXNzO1xuICBsZXQgcHJvcE5hbWVzVGFyZ2V0ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoXG4gICAgdGFyZ2V0Q2xhc3MucHJvdG90eXBlLFxuICApLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldENsYXNzLnByb3RvdHlwZSkpO1xuICB3aGlsZSAoc291cmNlLm5hbWUgIT09IFwiXCIpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UucHJvdG90eXBlKVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZS5wcm90b3R5cGUpKVxuICAgICAgLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3AubWF0Y2goXG4gICAgICAgICAgICAvXig/OmNvbnN0cnVjdG9yfHByb3RvdHlwZXxhcmd1bWVudHN8Y2FsbGVyfG5hbWV8YmluZHxjYWxsfGFwcGx5fHRvU3RyaW5nfGxlbmd0aCkkLyxcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcHJvcE5hbWVzVGFyZ2V0LmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgcHJvcE5hbWVzVGFyZ2V0LnB1c2gocHJvcCk7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgdGFyZ2V0Q2xhc3MucHJvdG90eXBlLFxuICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLnByb3RvdHlwZSwgcHJvcCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgc291cmNlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSk7XG4gIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7dHlwZW9mIEFic3RyYWN0U0RDfSBiYXNlQ2xhc3NcbiAqIEBwYXJhbSB7dHlwZW9mIEFic3RyYWN0U0RDfSBtaXhpbnNcbiAqIEByZXR1cm5zIHt0eXBlb2YgQWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2lsZUFnZ3JlZ2F0aW9uKGJhc2VDbGFzcywgLi4ubWl4aW5zKSB7XG4gIGxldCBiYXNlID0ge1xuICAgIFtiYXNlQ2xhc3MubmFtZV06IGNsYXNzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLl9hcmdzKSB7XG4gICAgICAgIGxldCBfbWl4aW5zID0ge307XG4gICAgICAgIG1peGlucy5mb3JFYWNoKChtaXhpbikgPT4ge1xuICAgICAgICAgIGxldCBuZXdNaXhpbjtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIChuZXdNaXhpbiA9IG5ldyBtaXhpbigpKSk7XG4gICAgICAgICAgbmV3TWl4aW4uX3RhZ05hbWUgPSBtaXhpbi5wcm90b3R5cGUuX3RhZ05hbWU7XG4gICAgICAgICAgbmV3TWl4aW4uX2lzTWl4aW4gPSB0cnVlO1xuICAgICAgICAgIF9taXhpbnNbbWl4aW4ubmFtZV0gPSBuZXdNaXhpbjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBuZXcgYmFzZUNsYXNzKCkpO1xuICAgICAgICB0aGlzLl9taXhpbnMgPSBfbWl4aW5zO1xuICAgICAgfVxuXG4gICAgICBzdGF0aWMgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiBiYXNlQ2xhc3MubmFtZTtcbiAgICAgIH1cblxuICAgICAgc3RhdGljIGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICAgIH1cblxuICAgICAgZ2V0IG1peGlucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21peGlucztcbiAgICAgIH1cbiAgICB9LFxuICB9W2Jhc2VDbGFzcy5uYW1lXTtcblxuICBjb3B5UHJvcHMoYmFzZSwgYmFzZUNsYXNzKTtcblxuICBtaXhpbnMuZm9yRWFjaCgobWl4aW4pID0+IHtcbiAgICBjb3B5UHJvcHMoYmFzZSwgbWl4aW4pO1xuICB9KTtcblxuICByZXR1cm4gYmFzZTtcbn1cblxuZnVuY3Rpb24gY3NyZlNhZmVNZXRob2QobWV0aG9kKSB7XG4gIC8vIHRoZXNlIEhUVFAgbWV0aG9kcyBkbyBub3QgcmVxdWlyZSBDU1JGIHByb3RlY3Rpb25cbiAgcmV0dXJuIC9eKEdFVHxIRUFEfE9QVElPTlN8VFJBQ0UpJC8udGVzdChtZXRob2QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCB1cmwsIG1ldGhvZCkge1xuICByZXR1cm4gJC5hamF4KHtcbiAgICB1cmw6IHVybCwgLy9TZXJ2ZXIgc2NyaXB0IHRvIHByb2Nlc3MgZGF0YVxuICAgIHR5cGU6IG1ldGhvZCB8fCBcIlBPU1RcIixcbiAgICB4aHI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEN1c3RvbSBYTUxIdHRwUmVxdWVzdFxuICAgICAgdmFyIG15WGhyID0gJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICBpZiAobXlYaHIudXBsb2FkKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHVwbG9hZCBwcm9wZXJ0eSBleGlzdHNcbiAgICAgICAgbXlYaHIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgXCJwcm9ncmVzc1wiLFxuICAgICAgICAgIHByb2dyZXNzSGFuZGxpbmdGdW5jdGlvbixcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgKTsgLy8gRm9yIGhhbmRsaW5nIHRoZSBwcm9ncmVzcyBvZiB0aGUgdXBsb2FkXG4gICAgICB9XG4gICAgICByZXR1cm4gbXlYaHI7XG4gICAgfSxcbiAgICAvL0Zvcm0gZGF0YVxuICAgIGRhdGE6IGZvcm1EYXRhLFxuICAgIC8vT3B0aW9ucyB0byB0ZWxsIGpRdWVyeSBub3QgdG8gcHJvY2VzcyBkYXRhIG9yIHdvcnJ5IGFib3V0IGNvbnRlbnQtdHlwZS5cbiAgICBjYWNoZTogZmFsc2UsXG4gICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoeGhyLCBzZXR0aW5ncykge1xuICAgICAgaWYgKCFjc3JmU2FmZU1ldGhvZChzZXR0aW5ncy50eXBlKSAmJiAhdGhpcy5jcm9zc0RvbWFpbikge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIlgtQ1NSRlRva2VuXCIsIHdpbmRvdy5DU1JGX1RPS0VOKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gcHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uKGUpIHtcbiAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgIHZhciBwZXJjZW50VmFsID0gTWF0aC5yb3VuZCgoZS5sb2FkZWQgLyBlLnRvdGFsKSAqIDEwMCk7XG4gICAgdmFyICRwcm9ncmVzc0NvbnRhaW5lciA9ICQoXCIucHJvZ3Jlc3MtY29udGFpbmVyXCIpO1xuICAgIGlmIChwZXJjZW50VmFsID09PSAxMDApIHtcbiAgICAgICRwcm9ncmVzc0NvbnRhaW5lci5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICRwcm9ncmVzc0NvbnRhaW5lci5zaG93KCk7XG4gICAgfVxuXG4gICAgcGVyY2VudFZhbCArPSBcIiVcIjtcblxuICAgICRwcm9ncmVzc0NvbnRhaW5lclxuICAgICAgLmZpbmQoXCIucHJvZ3Jlc3MtYmFyXCIpXG4gICAgICAuY3NzKHt3aWR0aDogcGVyY2VudFZhbH0pXG4gICAgICAudGV4dChwZXJjZW50VmFsKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nKFxuICBwYXJhbUVsZW1lbnQsXG4gIGNvbnRyb2xsZXIgPSBudWxsLFxuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1FbGVtZW50ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHBhcmFtRWxlbWVudDtcbiAgfVxuXG4gIGlmIChjb250cm9sbGVyICYmIHR5cGVvZiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBpZiAodHlwZW9mIGNvbnRyb2xsZXJbcGFyYW1FbGVtZW50XSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gY29udHJvbGxlcltwYXJhbUVsZW1lbnRdLmJpbmQoY29udHJvbGxlcik7XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF07XG4gIH1cblxuICBsZXQgaXNGbG9hdFJlZyA9IC9eLT9cXGQrXFwuP1xcZCskLztcbiAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgbGV0IGlzQm9vbFJlZyA9IC9eKHRydWV8ZmFsc2UpJC87XG4gIGxldCBpc1N0cmluZ1JlZyA9IC9eKFsnXVteJ10qWyddKXwoW1wiXVteXCJdKltcIl0pJC87XG5cbiAgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc0Jvb2xSZWcpKSB7XG4gICAgcmV0dXJuIHBhcmFtRWxlbWVudCA9PT0gXCJ0cnVlXCI7XG4gIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQudG9Mb3dlckNhc2UoKSA9PT0gXCJub25lXCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNJbnRSZWcpKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHBhcmFtRWxlbWVudCk7XG4gIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzRmxvYXRSZWcpKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQocGFyYW1FbGVtZW50KTtcbiAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNTdHJpbmdSZWcpKSB7XG4gICAgcmV0dXJuIHBhcmFtRWxlbWVudC5zdWJzdHIoMSwgcGFyYW1FbGVtZW50Lmxlbmd0aCAtIDIpO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NCgpIHtcbiAgcmV0dXJuIChbMWU3XSArIC0xZTMgKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCAoYykgPT5cbiAgICAoXG4gICAgICBjIF5cbiAgICAgIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmICgxNSA+PiAoYyAvIDQpKSlcbiAgICApLnRvU3RyaW5nKDE2KSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRXJyb3JzSW5Gb3JtKCRmb3JtKSB7XG4gICRmb3JtXG4gICAgLmZpbmQoXCIuaGFzLWVycm9yXCIpXG4gICAgLnJlbW92ZUNsYXNzKFwiaGFzLWVycm9yXCIpXG4gICAgLmZpbmQoXCIuYWxlcnQtZGFuZ2VyXCIpXG4gICAgLnJlbW92ZSgpO1xuICAkZm9ybS5maW5kKFwiLm5vbi1maWVsZC1lcnJvcnNcIikucmVtb3ZlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcnNJbkZvcm0oJGZvcm0sICRyZXNGb3JtKSB7XG4gICRyZXNGb3JtID0gJChcIjxkaXY+XCIpLmFwcGVuZCgkcmVzRm9ybSk7XG5cbiAgJGZvcm1cbiAgICAuZmluZChcIi5oYXMtZXJyb3JcIilcbiAgICAucmVtb3ZlQ2xhc3MoXCJoYXMtZXJyb3JcIilcbiAgICAuZmluZChcIi5hbGVydC1kYW5nZXJcIilcbiAgICAuc2FmZVJlbW92ZSgpO1xuICAkZm9ybS5maW5kKFwiLm5vbi1maWVsZC1lcnJvcnNcIikuc2FmZVJlbW92ZSgpO1xuICBsZXQgJGZpbGVfY29udGFpbmVyID0gJHJlc0Zvcm0uZmluZChcImlucHV0W3R5cGU9ZmlsZV1cIikucGFyZW50KCk7XG4gICRmb3JtXG4gICAgLmZpbmQoXCJpbnB1dFt0eXBlPWZpbGVdXCIpXG4gICAgLnBhcmVudCgpXG4gICAgLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAkKHRoaXMpLnJlcGxhY2VXaXRoKCRmaWxlX2NvbnRhaW5lcltpbmRleF0pO1xuICAgIH0pO1xuXG4gIGxldCBoYXNOb0Vycm9yID1cbiAgICAkcmVzRm9ybVxuICAgICAgLmZpbmQoXCIubm9uLWZpZWxkLWVycm9yc1wiKVxuICAgICAgLmluc2VydEFmdGVyKCRmb3JtLmZpbmQoXCIuaGlkZGVuLWZvcm0tZmllbGRzXCIpKS5sZW5ndGggPT09IDA7XG4gICRyZXNGb3JtLmZpbmQoXCIuaGFzLWVycm9yXCIpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgIGhhc05vRXJyb3IgPSBmYWxzZTtcbiAgICBsZXQgJHJlc0Vycm9yRmllbGQgPSAkKHRoaXMpO1xuICAgIGxldCBjbGFzc05hbWUgPSAkcmVzRXJyb3JGaWVsZC5kYXRhKFwiYXV0by1pZFwiKTtcbiAgICBsZXQgJGVycm9yRmllbGQgPSAkZm9ybS5maW5kKFwiLmZvcm0tZ3JvdXAuXCIgKyBjbGFzc05hbWUpO1xuICAgICRlcnJvckZpZWxkLmFkZENsYXNzKFwiaGFzLWVycm9yXCIpO1xuICAgICRlcnJvckZpZWxkXG4gICAgICAuZmluZChcIi5mb3JtLWlucHV0LWNvbnRhaW5lclwiKVxuICAgICAgLmFwcGVuZCgkcmVzRXJyb3JGaWVsZC5maW5kKFwiLmFsZXJ0LWRhbmdlclwiKSk7XG4gIH0pO1xuXG4gIHJldHVybiBoYXNOb0Vycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganF1ZXJ5SW5zZXJ0QXQoJGNvbnRhaW5lciwgaW5kZXgsICRuZXdFbGVtZW50KSB7XG4gIGxldCBsYXN0SW5kZXggPSAkY29udGFpbmVyLmNoaWxkcmVuKCkuc2l6ZSgpO1xuICBpZiAoaW5kZXggPCBsYXN0SW5kZXgpIHtcbiAgICAkY29udGFpbmVyLmNoaWxkcmVuKCkuZXEoaW5kZXgpLmJlZm9yZSgkbmV3RWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgJGNvbnRhaW5lci5hcHBlbmQoJG5ld0VsZW1lbnQpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIFBhcnNlIGhpZGRlbiBpbnB1dCB2YWx1ZXMgYmFjayBpbnRvIHRoZSBjbG9zZXN0IEphdmFTY3JpcHQgcHJpbWl0aXZlLlxuICpcbiAqIEhpZGRlbiBpbnB1dHMgYXJlIG9mdGVuIHVzZWQgdG8gcHJlc2VydmUgdmFsdWVzIHRoYXQgd2VyZSBvcmlnaW5hbGx5IGJvb2xlYW5zLFxuICogbnVtYmVycyBvciBxdW90ZWQgc3RyaW5ncy4gVGhpcyBrZWVwcyBmb3JtLXRvLW1vZGVsIHN5bmMgZnJvbSB0dXJuaW5nXG4gKiBldmVyeXRoaW5nIGludG8gcGxhaW4gc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBwYXJzZUhpZGRlbklucHV0cyh2YWx1ZSkge1xuICBsZXQgaXNGbG9hdFJlZyA9IC9eLT9cXGQrXFwuP1xcZCskLztcbiAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgbGV0IGlzQm9vbFJlZyA9IC9eKHRydWV8ZmFsc2UpJC87XG4gIGxldCBpc1N0cmluZ1JlZyA9IC9eKFsnXVteJ10qWyddKXwoW1wiXVteXCJdKltcIl0pJC87XG5cbiAgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkubWF0Y2goaXNCb29sUmVnKSkge1xuICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIjtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJub25lXCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmICh2YWx1ZS5tYXRjaChpc0ludFJlZykpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5tYXRjaChpc0Zsb2F0UmVnKSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5tYXRjaChpc1N0cmluZ1JlZykpIHtcbiAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlRnJvbUZpZWxkKGZvcm1JdGVtKSB7XG4gIGxldCB7dHlwZSwgbmFtZX0gPSBmb3JtSXRlbTtcbiAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gXCJcIikge1xuICAgIGlmICh0eXBlID09PSBcImhpZGRlblwiKSB7XG4gICAgICByZXR1cm4gcGFyc2VIaWRkZW5JbnB1dHMoJChmb3JtSXRlbSkudmFsKCkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBcImNoZWNrYm94XCIpIHtcbiAgICAgIHJldHVybiBmb3JtSXRlbS5jaGVja2VkO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBcImZpbGVcIikge1xuICAgICAgcmV0dXJuIGZvcm1JdGVtLmZpbGVzWzBdO1xuICAgIH1cblxuICAgIHJldHVybiAkKGZvcm1JdGVtKS52YWwoKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VmFsdWVJbkZpZWxkKGZvcm1JdGVtLCB2YWx1ZSkge1xuICBsZXQge3R5cGUsIG5hbWV9ID0gZm9ybUl0ZW07XG4gIGlmIChuYW1lICYmIG5hbWUgIT09IFwiXCIpIHtcblxuICAgIGlmICh0eXBlID09PSBcImNoZWNrYm94XCIpIHtcbiAgICAgIGZvcm1JdGVtLmNoZWNrZWQgPSAhIXZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJmaWxlXCIpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBEYXRhVHJhbnNmZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBsZXQgY29udGFpbmVyID0gbmV3IERhdGFUcmFuc2ZlcigpO1xuICAgICAgICAgIGNvbnRhaW5lci5pdGVtcy5hZGQodmFsdWUpO1xuICAgICAgICAgIGZvcm1JdGVtLmZpbGVzID0gY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNkY01vZGVsKSB7XG4gICAgICAkKGZvcm1JdGVtKS52YWwodmFsdWUuaWQpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZGNRdWVyeVNldCkge1xuICAgICAgJChmb3JtSXRlbSkudmFsKGBbJHt2YWx1ZS5nZXRJZHMoKS5qb2luKCcsJyl9XWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgfVxuICAgICAgJChmb3JtSXRlbSkudmFsKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibmFtZXMiOlsiU2RjTW9kZWwiLCJTZGNRdWVyeVNldCIsIl8kYm9keSIsImFyZ19uYW1lc19yZWciLCJjb21tZW5kX3JlZyIsImdldEJvZHkiLCIkIiwiZ2V0UGFyYW1zTmFtZU9mRnVuY3Rpb24iLCJmdW5jIiwiZm5zdHIiLCJ0b1N0cmluZyIsInJlcGxhY2UiLCJyZXN1bHQiLCJzbGljZSIsImluZGV4T2YiLCJtYXRjaCIsInByb21pc2VEdW1teUZhY3RvcnkiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNhbWVsQ2FzZVRvVGFnTmFtZSIsInN0ciIsImxldHRlciIsInRvTG93ZXJDYXNlIiwibnVtYmVyIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwidG9VcHBlckNhc2UiLCJ0YWdOYW1lVG9SZWFkYWJsZU5hbWUiLCJjb3B5UHJvcHMiLCJ0YXJnZXRDbGFzcyIsInNvdXJjZUNsYXNzIiwic291cmNlIiwicHJvcE5hbWVzVGFyZ2V0IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3RvdHlwZSIsImNvbmNhdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm5hbWUiLCJmb3JFYWNoIiwicHJvcCIsImluY2x1ZGVzIiwicHVzaCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0UHJvdG90eXBlT2YiLCJhZ2lsZUFnZ3JlZ2F0aW9uIiwiYmFzZUNsYXNzIiwibWl4aW5zIiwiYmFzZSIsImNvbnN0cnVjdG9yIiwiX2FyZ3MiLCJfbWl4aW5zIiwibWl4aW4iLCJuZXdNaXhpbiIsImFzc2lnbiIsIl90YWdOYW1lIiwiX2lzTWl4aW4iLCJjbGFzc05hbWUiLCJjc3JmU2FmZU1ldGhvZCIsIm1ldGhvZCIsInRlc3QiLCJ1cGxvYWRGaWxlRm9ybURhdGEiLCJmb3JtRGF0YSIsInVybCIsImFqYXgiLCJ0eXBlIiwieGhyIiwibXlYaHIiLCJhamF4U2V0dGluZ3MiLCJ1cGxvYWQiLCJhZGRFdmVudExpc3RlbmVyIiwicHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uIiwiZGF0YSIsImNhY2hlIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImJlZm9yZVNlbmQiLCJzZXR0aW5ncyIsImNyb3NzRG9tYWluIiwic2V0UmVxdWVzdEhlYWRlciIsIndpbmRvdyIsIkNTUkZfVE9LRU4iLCJlIiwibGVuZ3RoQ29tcHV0YWJsZSIsInBlcmNlbnRWYWwiLCJNYXRoIiwicm91bmQiLCJsb2FkZWQiLCJ0b3RhbCIsIiRwcm9ncmVzc0NvbnRhaW5lciIsImhpZGUiLCJzaG93IiwiZmluZCIsImNzcyIsIndpZHRoIiwidGV4dCIsImNoZWNrSWZQYXJhbU51bWJlckJvb2xPclN0cmluZyIsInBhcmFtRWxlbWVudCIsImNvbnRyb2xsZXIiLCJiaW5kIiwiaXNGbG9hdFJlZyIsImlzSW50UmVnIiwiaXNCb29sUmVnIiwiaXNTdHJpbmdSZWciLCJ1bmRlZmluZWQiLCJwYXJzZUludCIsInBhcnNlRmxvYXQiLCJzdWJzdHIiLCJsZW5ndGgiLCJ1dWlkdjQiLCJjIiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwiVWludDhBcnJheSIsImNsZWFyRXJyb3JzSW5Gb3JtIiwiJGZvcm0iLCJyZW1vdmVDbGFzcyIsInJlbW92ZSIsInNldEVycm9yc0luRm9ybSIsIiRyZXNGb3JtIiwiYXBwZW5kIiwic2FmZVJlbW92ZSIsIiRmaWxlX2NvbnRhaW5lciIsInBhcmVudCIsImVhY2giLCJpbmRleCIsInJlcGxhY2VXaXRoIiwiaGFzTm9FcnJvciIsImluc2VydEFmdGVyIiwiJHJlc0Vycm9yRmllbGQiLCIkZXJyb3JGaWVsZCIsImFkZENsYXNzIiwianF1ZXJ5SW5zZXJ0QXQiLCIkY29udGFpbmVyIiwiJG5ld0VsZW1lbnQiLCJsYXN0SW5kZXgiLCJjaGlsZHJlbiIsInNpemUiLCJlcSIsImJlZm9yZSIsInBhcnNlSGlkZGVuSW5wdXRzIiwidmFsdWUiLCJzdWJzdHJpbmciLCJnZXRWYWx1ZUZyb21GaWVsZCIsImZvcm1JdGVtIiwidmFsIiwiY2hlY2tlZCIsImZpbGVzIiwic2V0VmFsdWVJbkZpZWxkIiwiRmlsZSIsIkRhdGFUcmFuc2ZlciIsImNvbnRhaW5lciIsIml0ZW1zIiwiYWRkIiwiaWQiLCJnZXRJZHMiLCJqb2luIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_utils.js\n\n}");
|
|
127
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ agileAggregation: () => (/* binding */ agileAggregation),\n/* harmony export */ camelCaseToTagName: () => (/* binding */ camelCaseToTagName),\n/* harmony export */ checkIfParamNumberBoolOrString: () => (/* binding */ checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* binding */ clearErrorsInForm),\n/* harmony export */ getBody: () => (/* binding */ getBody),\n/* harmony export */ getParamsNameOfFunction: () => (/* binding */ getParamsNameOfFunction),\n/* harmony export */ getValueFromField: () => (/* binding */ getValueFromField),\n/* harmony export */ jqueryInsertAt: () => (/* binding */ jqueryInsertAt),\n/* harmony export */ promiseDummyFactory: () => (/* binding */ promiseDummyFactory),\n/* harmony export */ setErrorsInForm: () => (/* binding */ setErrorsInForm),\n/* harmony export */ setValueInField: () => (/* binding */ setValueInField),\n/* harmony export */ tagNameToCamelCase: () => (/* binding */ tagNameToCamelCase),\n/* harmony export */ tagNameToReadableName: () => (/* binding */ tagNameToReadableName),\n/* harmony export */ uploadFileFormData: () => (/* binding */ uploadFileFormData),\n/* harmony export */ uuidv4: () => (/* binding */ uuidv4)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../index.js */ \"./src/index.js\");\n\n\n/**\n * Reference to the HTML body.\n * @type {*|jQuery|HTMLElement}\n * @private\n */\nlet _$body;\nconst arg_names_reg = /(?<=^|,\\s?)[^=\\s,]+/g;\nconst commend_reg = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/gm;\n\n/**\n * getBody returns the $body jQuery object.\n *\n * @returns {*|jQuery|HTMLElement} - body reference.\n */\nfunction getBody() {\n if (!_$body) {\n _$body = $(\"body\");\n }\n\n return _$body;\n}\n\n/**\n *\n * @param {function} func\n * @returns {RegExpMatchArray|*[]}\n */\nfunction getParamsNameOfFunction(func) {\n var fnstr = func.toString().replace(commend_reg, \"\");\n var result = fnstr\n .slice(fnstr.indexOf(\"(\") + 1, fnstr.indexOf(\")\"))\n .match(arg_names_reg);\n if (!result) {\n return [];\n }\n\n return result;\n}\n\n/**\n * promiseDummyFactory generates a simple promise which returns instantly.\n * @return {Promise} window.utils\n */\nfunction promiseDummyFactory() {\n return new Promise(function (resolve) {\n resolve();\n });\n}\n\nfunction camelCaseToTagName(str) {\n str = str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n str = str.replace(/[0-9]+/g, (number) => `-${number}`);\n return str.replace(/^[-]/g, ``);\n}\n\nfunction tagNameToCamelCase(str) {\n str = str.replace(/-./g, (letter) => `${letter[1].toUpperCase()}`);\n return str;\n}\n\nfunction tagNameToReadableName(str) {\n str = str\n .replace(/-./g, (letter) => ` ${letter[1].toUpperCase()}`)\n .replace(/^./g, (letter) => `${letter.toUpperCase()}`);\n return str;\n}\n\nconst copyProps = (targetClass, sourceClass) => {\n let source = sourceClass;\n let propNamesTarget = Object.getOwnPropertyNames(\n targetClass.prototype,\n ).concat(Object.getOwnPropertySymbols(targetClass.prototype));\n while (source.name !== \"\") {\n Object.getOwnPropertyNames(source.prototype)\n .concat(Object.getOwnPropertySymbols(source.prototype))\n .forEach((prop) => {\n if (\n prop.match(\n /^(?:constructor|prototype|arguments|caller|name|bind|call|apply|toString|length)$/,\n )\n ) {\n return;\n }\n\n if (!propNamesTarget.includes(prop)) {\n propNamesTarget.push(prop);\n Object.defineProperty(\n targetClass.prototype,\n prop,\n Object.getOwnPropertyDescriptor(source.prototype, prop),\n );\n }\n });\n source = Object.getPrototypeOf(source);\n }\n};\n\n/**\n *\n * @param {typeof AbstractSDC} baseClass\n * @param {typeof AbstractSDC} mixins\n * @returns {typeof AbstractSDC}\n */\nfunction agileAggregation(baseClass, ...mixins) {\n let base = {\n [baseClass.name]: class {\n constructor(..._args) {\n let _mixins = {};\n mixins.forEach((mixin) => {\n let newMixin;\n Object.assign(this, (newMixin = new mixin()));\n newMixin._tagName = mixin.prototype._tagName;\n newMixin._isMixin = true;\n _mixins[mixin.name] = newMixin;\n });\n\n Object.assign(this, new baseClass());\n this._mixins = _mixins;\n }\n\n static get name() {\n return baseClass.name;\n }\n\n static className() {\n return this.name;\n }\n\n get mixins() {\n return this._mixins;\n }\n },\n }[baseClass.name];\n\n copyProps(base, baseClass);\n\n mixins.forEach((mixin) => {\n copyProps(base, mixin);\n });\n\n return base;\n}\n\nfunction csrfSafeMethod(method) {\n // these HTTP methods do not require CSRF protection\n return /^(GET|HEAD|OPTIONS|TRACE)$/.test(method);\n}\n\nfunction uploadFileFormData(formData, url, method) {\n return $.ajax({\n url: url, //Server script to process data\n type: method || \"POST\",\n xhr: function () {\n // Custom XMLHttpRequest\n var myXhr = $.ajaxSettings.xhr();\n if (myXhr.upload) {\n // Check if upload property exists\n myXhr.upload.addEventListener(\n \"progress\",\n progressHandlingFunction,\n false,\n ); // For handling the progress of the upload\n }\n return myXhr;\n },\n //Form data\n data: formData,\n //Options to tell jQuery not to process data or worry about content-type.\n cache: false,\n contentType: false,\n processData: false,\n beforeSend: function (xhr, settings) {\n if (!csrfSafeMethod(settings.type) && !this.crossDomain) {\n xhr.setRequestHeader(\"X-CSRFToken\", window.CSRF_TOKEN);\n }\n },\n });\n}\n\nfunction progressHandlingFunction(e) {\n if (e.lengthComputable) {\n var percentVal = Math.round((e.loaded / e.total) * 100);\n var $progressContainer = $(\".progress-container\");\n if (percentVal === 100) {\n $progressContainer.hide();\n } else {\n $progressContainer.show();\n }\n\n percentVal += \"%\";\n\n $progressContainer\n .find(\".progress-bar\")\n .css({width: percentVal})\n .text(percentVal);\n }\n}\n\nfunction checkIfParamNumberBoolOrString(\n paramElement,\n controller = null,\n) {\n if (typeof paramElement !== \"string\") {\n return paramElement;\n }\n\n if (controller && typeof controller[paramElement] !== \"undefined\") {\n if (typeof controller[paramElement] === \"function\") {\n return controller[paramElement].bind(controller);\n }\n return controller[paramElement];\n }\n\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n\n if (paramElement.match(isBoolReg)) {\n return paramElement === \"true\";\n } else if (paramElement === \"undefined\") {\n return undefined;\n } else if (paramElement.toLowerCase() === \"none\") {\n return null;\n } else if (paramElement.match(isIntReg)) {\n return parseInt(paramElement);\n } else if (paramElement.match(isFloatReg)) {\n return parseFloat(paramElement);\n } else if (paramElement.match(isStringReg)) {\n return paramElement.substr(1, paramElement.length - 2);\n }\n\n return paramElement;\n}\n\nfunction uuidv4() {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>\n (\n c ^\n (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))\n ).toString(16),\n );\n}\n\nfunction clearErrorsInForm($form) {\n $form\n .find(\".has-error\")\n .removeClass(\"has-error\")\n .find(\".alert-danger\")\n .remove();\n $form.find(\".non-field-errors\").remove();\n}\n\nfunction setErrorsInForm($form, $resForm) {\n $resForm = $(\"<div>\").append($resForm);\n\n $form\n .find(\".has-error\")\n .removeClass(\"has-error\")\n .find(\".alert-danger\")\n .safeRemove();\n $form.find(\".non-field-errors\").safeRemove();\n let $file_container = $resForm.find(\"input[type=file]\").parent();\n $form\n .find(\"input[type=file]\")\n .parent()\n .each(function (index) {\n $(this).replaceWith($file_container[index]);\n });\n\n let hasNoError =\n $resForm\n .find(\".non-field-errors\")\n .insertAfter($form.find(\".hidden-form-fields\")).length === 0;\n $resForm.find(\".has-error\").each(function () {\n hasNoError = false;\n let $resErrorField = $(this);\n let className = $resErrorField.data(\"auto-id\");\n let $errorField = $form.find(\".form-group.\" + className);\n $errorField.addClass(\"has-error\");\n $errorField\n .find(\".form-input-container\")\n .append($resErrorField.find(\".alert-danger\"));\n });\n\n return hasNoError;\n}\n\nfunction jqueryInsertAt($container, index, $newElement) {\n let lastIndex = $container.children().size();\n if (index < lastIndex) {\n $container.children().eq(index).before($newElement);\n } else {\n $container.append($newElement);\n }\n return this;\n}\n\n/**\n * Parse hidden input values back into the closest JavaScript primitive.\n *\n * Hidden inputs are often used to preserve values that were originally booleans,\n * numbers or quoted strings. This keeps form-to-model sync from turning\n * everything into plain strings.\n *\n * @param {string} value\n * @returns {*}\n */\nfunction parseHiddenInputs(value) {\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n\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, 10);\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}\n\nfunction getValueFromField(formItem) {\n let {type, name} = formItem;\n if (name && name !== \"\") {\n if (type === \"hidden\") {\n return parseHiddenInputs($(formItem).val());\n }\n\n if (type === \"checkbox\") {\n return formItem.checked;\n }\n\n if (type === \"file\") {\n return formItem.files[0];\n }\n\n return $(formItem).val();\n }\n return null;\n}\n\n\nfunction setValueInField(formItem, value) {\n let {type, name} = formItem;\n if (name && name !== \"\") {\n\n if (type === \"checkbox\") {\n formItem.checked = !!value;\n } else if (type === \"file\") {\n if (value instanceof File) {\n if (typeof DataTransfer !== \"undefined\") {\n let container = new DataTransfer();\n container.items.add(value);\n formItem.files = container;\n }\n }\n } else if (value instanceof _index_js__WEBPACK_IMPORTED_MODULE_0__.SdcModel) {\n $(formItem).val(value.id);\n } else if (value instanceof _index_js__WEBPACK_IMPORTED_MODULE_0__.SdcQuerySet) {\n $(formItem).val(`[${value.getIds().join(',')}]`);\n } else {\n if (value === null) {\n value = \"\";\n }\n $(formItem).val(value);\n }\n }\n return null;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQLE9BQU8sWUFBWTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHTztBQUNQLE9BQU8sWUFBWTtBQUNuQjs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSwwQkFBMEIsK0NBQVE7QUFDeEM7QUFDQSxNQUFNLDBCQUEwQixrREFBVztBQUMzQywwQkFBMEIseUJBQXlCO0FBQ25ELE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY191dGlscy5qcz9iZjIyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2RjTW9kZWwsIFNkY1F1ZXJ5U2V0fSBmcm9tIFwiLi4vaW5kZXguanNcIjtcblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gdGhlIEhUTUwgYm9keS5cbiAqIEB0eXBlIHsqfGpRdWVyeXxIVE1MRWxlbWVudH1cbiAqIEBwcml2YXRlXG4gKi9cbmxldCBfJGJvZHk7XG5jb25zdCBhcmdfbmFtZXNfcmVnID0gLyg/PD1efCxcXHM/KVtePVxccyxdKy9nO1xuY29uc3QgY29tbWVuZF9yZWcgPSAvKChcXC9cXC8uKiQpfChcXC9cXCpbXFxzXFxTXSo/XFwqXFwvKSkvZ207XG5cbi8qKlxuICogZ2V0Qm9keSByZXR1cm5zIHRoZSAkYm9keSBqUXVlcnkgb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIHsqfGpRdWVyeXxIVE1MRWxlbWVudH0gLSBib2R5IHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJvZHkoKSB7XG4gIGlmICghXyRib2R5KSB7XG4gICAgXyRib2R5ID0gJChcImJvZHlcIik7XG4gIH1cblxuICByZXR1cm4gXyRib2R5O1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jXG4gKiBAcmV0dXJucyB7UmVnRXhwTWF0Y2hBcnJheXwqW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbihmdW5jKSB7XG4gIHZhciBmbnN0ciA9IGZ1bmMudG9TdHJpbmcoKS5yZXBsYWNlKGNvbW1lbmRfcmVnLCBcIlwiKTtcbiAgdmFyIHJlc3VsdCA9IGZuc3RyXG4gICAgLnNsaWNlKGZuc3RyLmluZGV4T2YoXCIoXCIpICsgMSwgZm5zdHIuaW5kZXhPZihcIilcIikpXG4gICAgLm1hdGNoKGFyZ19uYW1lc19yZWcpO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogcHJvbWlzZUR1bW15RmFjdG9yeSBnZW5lcmF0ZXMgYSBzaW1wbGUgcHJvbWlzZSB3aGljaCByZXR1cm5zIGluc3RhbnRseS5cbiAqIEByZXR1cm4ge1Byb21pc2V9IHdpbmRvdy51dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUR1bW15RmFjdG9yeSgpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZVRvVGFnTmFtZShzdHIpIHtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL1tBLVpdL2csIChsZXR0ZXIpID0+IGAtJHtsZXR0ZXIudG9Mb3dlckNhc2UoKX1gKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL1swLTldKy9nLCAobnVtYmVyKSA9PiBgLSR7bnVtYmVyfWApO1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15bLV0vZywgYGApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnTmFtZVRvQ2FtZWxDYXNlKHN0cikge1xuICBzdHIgPSBzdHIucmVwbGFjZSgvLS4vZywgKGxldHRlcikgPT4gYCR7bGV0dGVyWzFdLnRvVXBwZXJDYXNlKCl9YCk7XG4gIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdOYW1lVG9SZWFkYWJsZU5hbWUoc3RyKSB7XG4gIHN0ciA9IHN0clxuICAgIC5yZXBsYWNlKC8tLi9nLCAobGV0dGVyKSA9PiBgICR7bGV0dGVyWzFdLnRvVXBwZXJDYXNlKCl9YClcbiAgICAucmVwbGFjZSgvXi4vZywgKGxldHRlcikgPT4gYCR7bGV0dGVyLnRvVXBwZXJDYXNlKCl9YCk7XG4gIHJldHVybiBzdHI7XG59XG5cbmNvbnN0IGNvcHlQcm9wcyA9ICh0YXJnZXRDbGFzcywgc291cmNlQ2xhc3MpID0+IHtcbiAgbGV0IHNvdXJjZSA9IHNvdXJjZUNsYXNzO1xuICBsZXQgcHJvcE5hbWVzVGFyZ2V0ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoXG4gICAgdGFyZ2V0Q2xhc3MucHJvdG90eXBlLFxuICApLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldENsYXNzLnByb3RvdHlwZSkpO1xuICB3aGlsZSAoc291cmNlLm5hbWUgIT09IFwiXCIpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UucHJvdG90eXBlKVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZS5wcm90b3R5cGUpKVxuICAgICAgLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3AubWF0Y2goXG4gICAgICAgICAgICAvXig/OmNvbnN0cnVjdG9yfHByb3RvdHlwZXxhcmd1bWVudHN8Y2FsbGVyfG5hbWV8YmluZHxjYWxsfGFwcGx5fHRvU3RyaW5nfGxlbmd0aCkkLyxcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcHJvcE5hbWVzVGFyZ2V0LmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgcHJvcE5hbWVzVGFyZ2V0LnB1c2gocHJvcCk7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgdGFyZ2V0Q2xhc3MucHJvdG90eXBlLFxuICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLnByb3RvdHlwZSwgcHJvcCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgc291cmNlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSk7XG4gIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7dHlwZW9mIEFic3RyYWN0U0RDfSBiYXNlQ2xhc3NcbiAqIEBwYXJhbSB7dHlwZW9mIEFic3RyYWN0U0RDfSBtaXhpbnNcbiAqIEByZXR1cm5zIHt0eXBlb2YgQWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2lsZUFnZ3JlZ2F0aW9uKGJhc2VDbGFzcywgLi4ubWl4aW5zKSB7XG4gIGxldCBiYXNlID0ge1xuICAgIFtiYXNlQ2xhc3MubmFtZV06IGNsYXNzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLl9hcmdzKSB7XG4gICAgICAgIGxldCBfbWl4aW5zID0ge307XG4gICAgICAgIG1peGlucy5mb3JFYWNoKChtaXhpbikgPT4ge1xuICAgICAgICAgIGxldCBuZXdNaXhpbjtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIChuZXdNaXhpbiA9IG5ldyBtaXhpbigpKSk7XG4gICAgICAgICAgbmV3TWl4aW4uX3RhZ05hbWUgPSBtaXhpbi5wcm90b3R5cGUuX3RhZ05hbWU7XG4gICAgICAgICAgbmV3TWl4aW4uX2lzTWl4aW4gPSB0cnVlO1xuICAgICAgICAgIF9taXhpbnNbbWl4aW4ubmFtZV0gPSBuZXdNaXhpbjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBuZXcgYmFzZUNsYXNzKCkpO1xuICAgICAgICB0aGlzLl9taXhpbnMgPSBfbWl4aW5zO1xuICAgICAgfVxuXG4gICAgICBzdGF0aWMgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiBiYXNlQ2xhc3MubmFtZTtcbiAgICAgIH1cblxuICAgICAgc3RhdGljIGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICAgIH1cblxuICAgICAgZ2V0IG1peGlucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21peGlucztcbiAgICAgIH1cbiAgICB9LFxuICB9W2Jhc2VDbGFzcy5uYW1lXTtcblxuICBjb3B5UHJvcHMoYmFzZSwgYmFzZUNsYXNzKTtcblxuICBtaXhpbnMuZm9yRWFjaCgobWl4aW4pID0+IHtcbiAgICBjb3B5UHJvcHMoYmFzZSwgbWl4aW4pO1xuICB9KTtcblxuICByZXR1cm4gYmFzZTtcbn1cblxuZnVuY3Rpb24gY3NyZlNhZmVNZXRob2QobWV0aG9kKSB7XG4gIC8vIHRoZXNlIEhUVFAgbWV0aG9kcyBkbyBub3QgcmVxdWlyZSBDU1JGIHByb3RlY3Rpb25cbiAgcmV0dXJuIC9eKEdFVHxIRUFEfE9QVElPTlN8VFJBQ0UpJC8udGVzdChtZXRob2QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCB1cmwsIG1ldGhvZCkge1xuICByZXR1cm4gJC5hamF4KHtcbiAgICB1cmw6IHVybCwgLy9TZXJ2ZXIgc2NyaXB0IHRvIHByb2Nlc3MgZGF0YVxuICAgIHR5cGU6IG1ldGhvZCB8fCBcIlBPU1RcIixcbiAgICB4aHI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEN1c3RvbSBYTUxIdHRwUmVxdWVzdFxuICAgICAgdmFyIG15WGhyID0gJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICBpZiAobXlYaHIudXBsb2FkKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHVwbG9hZCBwcm9wZXJ0eSBleGlzdHNcbiAgICAgICAgbXlYaHIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgXCJwcm9ncmVzc1wiLFxuICAgICAgICAgIHByb2dyZXNzSGFuZGxpbmdGdW5jdGlvbixcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgKTsgLy8gRm9yIGhhbmRsaW5nIHRoZSBwcm9ncmVzcyBvZiB0aGUgdXBsb2FkXG4gICAgICB9XG4gICAgICByZXR1cm4gbXlYaHI7XG4gICAgfSxcbiAgICAvL0Zvcm0gZGF0YVxuICAgIGRhdGE6IGZvcm1EYXRhLFxuICAgIC8vT3B0aW9ucyB0byB0ZWxsIGpRdWVyeSBub3QgdG8gcHJvY2VzcyBkYXRhIG9yIHdvcnJ5IGFib3V0IGNvbnRlbnQtdHlwZS5cbiAgICBjYWNoZTogZmFsc2UsXG4gICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoeGhyLCBzZXR0aW5ncykge1xuICAgICAgaWYgKCFjc3JmU2FmZU1ldGhvZChzZXR0aW5ncy50eXBlKSAmJiAhdGhpcy5jcm9zc0RvbWFpbikge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIlgtQ1NSRlRva2VuXCIsIHdpbmRvdy5DU1JGX1RPS0VOKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gcHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uKGUpIHtcbiAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgIHZhciBwZXJjZW50VmFsID0gTWF0aC5yb3VuZCgoZS5sb2FkZWQgLyBlLnRvdGFsKSAqIDEwMCk7XG4gICAgdmFyICRwcm9ncmVzc0NvbnRhaW5lciA9ICQoXCIucHJvZ3Jlc3MtY29udGFpbmVyXCIpO1xuICAgIGlmIChwZXJjZW50VmFsID09PSAxMDApIHtcbiAgICAgICRwcm9ncmVzc0NvbnRhaW5lci5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICRwcm9ncmVzc0NvbnRhaW5lci5zaG93KCk7XG4gICAgfVxuXG4gICAgcGVyY2VudFZhbCArPSBcIiVcIjtcblxuICAgICRwcm9ncmVzc0NvbnRhaW5lclxuICAgICAgLmZpbmQoXCIucHJvZ3Jlc3MtYmFyXCIpXG4gICAgICAuY3NzKHt3aWR0aDogcGVyY2VudFZhbH0pXG4gICAgICAudGV4dChwZXJjZW50VmFsKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nKFxuICBwYXJhbUVsZW1lbnQsXG4gIGNvbnRyb2xsZXIgPSBudWxsLFxuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1FbGVtZW50ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHBhcmFtRWxlbWVudDtcbiAgfVxuXG4gIGlmIChjb250cm9sbGVyICYmIHR5cGVvZiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBpZiAodHlwZW9mIGNvbnRyb2xsZXJbcGFyYW1FbGVtZW50XSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gY29udHJvbGxlcltwYXJhbUVsZW1lbnRdLmJpbmQoY29udHJvbGxlcik7XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF07XG4gIH1cblxuICBsZXQgaXNGbG9hdFJlZyA9IC9eLT9cXGQrXFwuP1xcZCskLztcbiAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgbGV0IGlzQm9vbFJlZyA9IC9eKHRydWV8ZmFsc2UpJC87XG4gIGxldCBpc1N0cmluZ1JlZyA9IC9eKFsnXVteJ10qWyddKXwoW1wiXVteXCJdKltcIl0pJC87XG5cbiAgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc0Jvb2xSZWcpKSB7XG4gICAgcmV0dXJuIHBhcmFtRWxlbWVudCA9PT0gXCJ0cnVlXCI7XG4gIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQudG9Mb3dlckNhc2UoKSA9PT0gXCJub25lXCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNJbnRSZWcpKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHBhcmFtRWxlbWVudCk7XG4gIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzRmxvYXRSZWcpKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQocGFyYW1FbGVtZW50KTtcbiAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNTdHJpbmdSZWcpKSB7XG4gICAgcmV0dXJuIHBhcmFtRWxlbWVudC5zdWJzdHIoMSwgcGFyYW1FbGVtZW50Lmxlbmd0aCAtIDIpO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NCgpIHtcbiAgcmV0dXJuIChbMWU3XSArIC0xZTMgKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCAoYykgPT5cbiAgICAoXG4gICAgICBjIF5cbiAgICAgIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmICgxNSA+PiAoYyAvIDQpKSlcbiAgICApLnRvU3RyaW5nKDE2KSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRXJyb3JzSW5Gb3JtKCRmb3JtKSB7XG4gICRmb3JtXG4gICAgLmZpbmQoXCIuaGFzLWVycm9yXCIpXG4gICAgLnJlbW92ZUNsYXNzKFwiaGFzLWVycm9yXCIpXG4gICAgLmZpbmQoXCIuYWxlcnQtZGFuZ2VyXCIpXG4gICAgLnJlbW92ZSgpO1xuICAkZm9ybS5maW5kKFwiLm5vbi1maWVsZC1lcnJvcnNcIikucmVtb3ZlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcnNJbkZvcm0oJGZvcm0sICRyZXNGb3JtKSB7XG4gICRyZXNGb3JtID0gJChcIjxkaXY+XCIpLmFwcGVuZCgkcmVzRm9ybSk7XG5cbiAgJGZvcm1cbiAgICAuZmluZChcIi5oYXMtZXJyb3JcIilcbiAgICAucmVtb3ZlQ2xhc3MoXCJoYXMtZXJyb3JcIilcbiAgICAuZmluZChcIi5hbGVydC1kYW5nZXJcIilcbiAgICAuc2FmZVJlbW92ZSgpO1xuICAkZm9ybS5maW5kKFwiLm5vbi1maWVsZC1lcnJvcnNcIikuc2FmZVJlbW92ZSgpO1xuICBsZXQgJGZpbGVfY29udGFpbmVyID0gJHJlc0Zvcm0uZmluZChcImlucHV0W3R5cGU9ZmlsZV1cIikucGFyZW50KCk7XG4gICRmb3JtXG4gICAgLmZpbmQoXCJpbnB1dFt0eXBlPWZpbGVdXCIpXG4gICAgLnBhcmVudCgpXG4gICAgLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAkKHRoaXMpLnJlcGxhY2VXaXRoKCRmaWxlX2NvbnRhaW5lcltpbmRleF0pO1xuICAgIH0pO1xuXG4gIGxldCBoYXNOb0Vycm9yID1cbiAgICAkcmVzRm9ybVxuICAgICAgLmZpbmQoXCIubm9uLWZpZWxkLWVycm9yc1wiKVxuICAgICAgLmluc2VydEFmdGVyKCRmb3JtLmZpbmQoXCIuaGlkZGVuLWZvcm0tZmllbGRzXCIpKS5sZW5ndGggPT09IDA7XG4gICRyZXNGb3JtLmZpbmQoXCIuaGFzLWVycm9yXCIpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgIGhhc05vRXJyb3IgPSBmYWxzZTtcbiAgICBsZXQgJHJlc0Vycm9yRmllbGQgPSAkKHRoaXMpO1xuICAgIGxldCBjbGFzc05hbWUgPSAkcmVzRXJyb3JGaWVsZC5kYXRhKFwiYXV0by1pZFwiKTtcbiAgICBsZXQgJGVycm9yRmllbGQgPSAkZm9ybS5maW5kKFwiLmZvcm0tZ3JvdXAuXCIgKyBjbGFzc05hbWUpO1xuICAgICRlcnJvckZpZWxkLmFkZENsYXNzKFwiaGFzLWVycm9yXCIpO1xuICAgICRlcnJvckZpZWxkXG4gICAgICAuZmluZChcIi5mb3JtLWlucHV0LWNvbnRhaW5lclwiKVxuICAgICAgLmFwcGVuZCgkcmVzRXJyb3JGaWVsZC5maW5kKFwiLmFsZXJ0LWRhbmdlclwiKSk7XG4gIH0pO1xuXG4gIHJldHVybiBoYXNOb0Vycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganF1ZXJ5SW5zZXJ0QXQoJGNvbnRhaW5lciwgaW5kZXgsICRuZXdFbGVtZW50KSB7XG4gIGxldCBsYXN0SW5kZXggPSAkY29udGFpbmVyLmNoaWxkcmVuKCkuc2l6ZSgpO1xuICBpZiAoaW5kZXggPCBsYXN0SW5kZXgpIHtcbiAgICAkY29udGFpbmVyLmNoaWxkcmVuKCkuZXEoaW5kZXgpLmJlZm9yZSgkbmV3RWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgJGNvbnRhaW5lci5hcHBlbmQoJG5ld0VsZW1lbnQpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIFBhcnNlIGhpZGRlbiBpbnB1dCB2YWx1ZXMgYmFjayBpbnRvIHRoZSBjbG9zZXN0IEphdmFTY3JpcHQgcHJpbWl0aXZlLlxuICpcbiAqIEhpZGRlbiBpbnB1dHMgYXJlIG9mdGVuIHVzZWQgdG8gcHJlc2VydmUgdmFsdWVzIHRoYXQgd2VyZSBvcmlnaW5hbGx5IGJvb2xlYW5zLFxuICogbnVtYmVycyBvciBxdW90ZWQgc3RyaW5ncy4gVGhpcyBrZWVwcyBmb3JtLXRvLW1vZGVsIHN5bmMgZnJvbSB0dXJuaW5nXG4gKiBldmVyeXRoaW5nIGludG8gcGxhaW4gc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBwYXJzZUhpZGRlbklucHV0cyh2YWx1ZSkge1xuICBsZXQgaXNGbG9hdFJlZyA9IC9eLT9cXGQrXFwuP1xcZCskLztcbiAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgbGV0IGlzQm9vbFJlZyA9IC9eKHRydWV8ZmFsc2UpJC87XG4gIGxldCBpc1N0cmluZ1JlZyA9IC9eKFsnXVteJ10qWyddKXwoW1wiXVteXCJdKltcIl0pJC87XG5cbiAgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkubWF0Y2goaXNCb29sUmVnKSkge1xuICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIjtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJub25lXCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmICh2YWx1ZS5tYXRjaChpc0ludFJlZykpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5tYXRjaChpc0Zsb2F0UmVnKSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5tYXRjaChpc1N0cmluZ1JlZykpIHtcbiAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlRnJvbUZpZWxkKGZvcm1JdGVtKSB7XG4gIGxldCB7dHlwZSwgbmFtZX0gPSBmb3JtSXRlbTtcbiAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gXCJcIikge1xuICAgIGlmICh0eXBlID09PSBcImhpZGRlblwiKSB7XG4gICAgICByZXR1cm4gcGFyc2VIaWRkZW5JbnB1dHMoJChmb3JtSXRlbSkudmFsKCkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBcImNoZWNrYm94XCIpIHtcbiAgICAgIHJldHVybiBmb3JtSXRlbS5jaGVja2VkO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBcImZpbGVcIikge1xuICAgICAgcmV0dXJuIGZvcm1JdGVtLmZpbGVzWzBdO1xuICAgIH1cblxuICAgIHJldHVybiAkKGZvcm1JdGVtKS52YWwoKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VmFsdWVJbkZpZWxkKGZvcm1JdGVtLCB2YWx1ZSkge1xuICBsZXQge3R5cGUsIG5hbWV9ID0gZm9ybUl0ZW07XG4gIGlmIChuYW1lICYmIG5hbWUgIT09IFwiXCIpIHtcblxuICAgIGlmICh0eXBlID09PSBcImNoZWNrYm94XCIpIHtcbiAgICAgIGZvcm1JdGVtLmNoZWNrZWQgPSAhIXZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJmaWxlXCIpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBEYXRhVHJhbnNmZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBsZXQgY29udGFpbmVyID0gbmV3IERhdGFUcmFuc2ZlcigpO1xuICAgICAgICAgIGNvbnRhaW5lci5pdGVtcy5hZGQodmFsdWUpO1xuICAgICAgICAgIGZvcm1JdGVtLmZpbGVzID0gY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNkY01vZGVsKSB7XG4gICAgICAkKGZvcm1JdGVtKS52YWwodmFsdWUuaWQpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZGNRdWVyeVNldCkge1xuICAgICAgJChmb3JtSXRlbSkudmFsKGBbJHt2YWx1ZS5nZXRJZHMoKS5qb2luKCcsJyl9XWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgfVxuICAgICAgJChmb3JtSXRlbSkudmFsKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_utils.js\n\n}");
|
|
128
128
|
|
|
129
129
|
/***/ },
|
|
130
130
|
|
|
@@ -134,24 +134,24 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
134
134
|
\******************************************/
|
|
135
135
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
136
136
|
|
|
137
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CONTROLLER_CLASS: () => (/* binding */ CONTROLLER_CLASS),\n/* harmony export */ DATA_CONTROLLER_KEY: () => (/* binding */ DATA_CONTROLLER_KEY),\n/* harmony export */ cleanCache: () => (/* binding */ cleanCache),\n/* harmony export */ getController: () => (/* binding */ getController),\n/* harmony export */ loadFilesFromController: () => (/* binding */ loadFilesFromController),\n/* harmony export */ reconcile: () => (/* binding */ reconcile),\n/* harmony export */ refresh: () => (/* binding */ refresh),\n/* harmony export */ reloadHTMLController: () => (/* binding */ reloadHTMLController),\n/* harmony export */ reloadMethodHTML: () => (/* binding */ reloadMethodHTML),\n/* harmony export */ replaceTagElementsInContainer: () => (/* binding */ replaceTagElementsInContainer),\n/* harmony export */ runControllerFillContent: () => (/* binding */ runControllerFillContent)\n/* harmony export */ });\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\n\n\n\n/**\n * List of HTML files.\n * @type {{}}\n */\nlet htmlFiles = {};\nconst DATA_CONTROLLER_KEY = \"_controller_\";\nconst CONTROLLER_CLASS = \"_sdc_controller_\";\nfunction cleanCache() {\n htmlFiles = {};\n}\n\n/**\n * findSdcTgs Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. It collects all those\n * doms and returns a list of objects containing also the tag name the dom and the tag\n * names of the super controller\n *\n * @param {jquery} $container - jQuery container\n * @param {Array<string>} tagNameList - a string list with tag names.\n * @param {AbstractSDC} parentController - controller in surrounding\n * @return {Array} - a array of objects with all register tags found\n */\nfunction findSdcTgs($container, tagNameList, parentController) {\n if (!$container) {\n return [];\n }\n let $children = $container.children();\n let emptyList = [];\n $children.each(function (_, element) {\n let $element = $(element);\n let tagName = $element.prop(\"tagName\").toLowerCase().split(\"_\");\n if ($.inArray(tagName[0], tagNameList) >= 0) {\n emptyList.push({\n tag: tagName[0],\n super: tagName.splice(1) || [],\n dom: $element\n });\n } else if (tagName[0].startsWith(\"this.\")) {\n $element.addClass(`_bind_to_update_handler sdc_uuid_${parentController._uuid}`);\n } else {\n emptyList = emptyList.concat(findSdcTgs($element, tagNameList, parentController));\n }\n });\n return emptyList;\n}\n\n/**\n * replacePlaceholderController fills the parameter of the content\n * url this function uses the tag parameter\n *\n * @param controller - controller object\n * @param url - the origin content URL\n * @param urlValues - values for the url placeholder. In same order!!\n * @returns {string} - the correct URL with prefix.\n */\nfunction replacePlaceholderController(controller, url, urlValues) {\n for (let key_idx in controller._urlParams) {\n if (controller._urlParams.hasOwnProperty(key_idx)) {\n let key = controller._urlParams[key_idx];\n let re = RegExp(\"%\\\\(\" + key + \"\\\\)\\\\w\", \"gm\");\n const val = urlValues[key];\n if (!val) {\n console.warn(`${key} is not set for controller ${controller._tagName}`);\n }\n url = url.replace(re, val);\n }\n }\n return url;\n}\n\n/**\n * loadHTMLFile loads the HTML content file from the server via ajax request.\n *\n * If the HTML file is loaded already the function takes no action.\n *\n * @param {AbstractSDC} controller - a content URL from the controller.\n * @param {object} args - get args.\n * @returns {Promise<jQuery|Boolean>} - waits for the file to be loaded.\n */\nfunction loadHTMLFile(controller, args) {\n const {\n contentUrl,\n _tagName,\n contentReload\n } = controller;\n if (!contentUrl) {\n return Promise.resolve(false);\n } else if (htmlFiles[_tagName]) {\n return Promise.resolve(htmlFiles[_tagName]);\n }\n args.VERSION = _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.VERSION;\n args._method = \"content\";\n return $.get(contentUrl, args).then(function (data) {\n if (!contentReload) {\n htmlFiles[_tagName] = data;\n }\n return data;\n }).catch(function (err) {\n if (err.status === 301) {\n const data = err.responseJSON;\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)(\"_RedirectOnView\", data[\"url-link\"]);\n }\n if (typeof controller.confirmPageLoaded === \"function\") {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)(\"navLoaded\", {\n controller_name: () => err.status\n });\n }\n throw `<sdc-error data-code=\"${err.status}\">${err.responseText}</sdc-error>`;\n });\n}\n\n/**\n * replaceAllTagElementsInContainer replaces all registered tags by the controller.\n * In this step the life-cycle starts.\n *\n * @param {jquery} $container - given container\n * @param {AbstractSDC} parentController - parent contoller surrounded the container\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceAllTagElementsInContainer($container, parentController, process = null) {\n parentController = parentController || $container.data(DATA_CONTROLLER_KEY);\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $container, parentController, process);\n}\n\n/**\n * parseContentUrl uses the content URL prefix to marge the\n * correct URL. Also parses the url parameter\n *\n * @param {AbstractSDC} controller - controller object\n * @returns {{url: String, args: Array}} - the correct URL with prefix.\n */\nfunction parseContentUrl(controller) {\n let url = controller.contentUrl;\n if (controller && controller._urlParams.length === 0) {\n let re = /%\\(([^)]+)\\)\\w/gm;\n let matches;\n controller._urlParams = [];\n while (matches = re.exec(url)) {\n controller._urlParams.push(matches[1]);\n controller.contentReload = true;\n }\n }\n let {\n args,\n params\n } = (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_1__.getUrlParam)(controller, controller.$container);\n if (controller._urlParams.length) {\n url = replacePlaceholderController(controller, url, params);\n }\n controller.parsedContentUrl = url;\n return {\n url: url,\n args\n };\n}\n\n/**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\nfunction getController($elem) {\n if ($elem.hasClass(CONTROLLER_CLASS)) {\n return $elem.data(`${DATA_CONTROLLER_KEY}`);\n }\n return $elem.closest(`.${CONTROLLER_CLASS}`).data(`${DATA_CONTROLLER_KEY}`);\n}\n\n/**\n * loadFilesFromController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n * The content is saved as jQuery object to the controller.$content property of\n * the controller.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction loadFilesFromController(controller) {\n let getElements = {\n args: {}\n };\n if (controller.contentUrl) {\n getElements = parseContentUrl(controller);\n controller.contentUrl = getElements.url;\n }\n return Promise.all([loadHTMLFile(controller, getElements.args)]).then(function (results) {\n let htmlFile = results[0];\n if (htmlFile) {\n try {\n return $(htmlFile);\n } catch {\n return $(\"<div></div>\").append(htmlFile);\n }\n }\n return null;\n });\n}\n\n/**\n * reloadHTMLController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n *\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction reloadHTMLController(controller) {\n if (controller.contentUrl) {\n let getElements = parseContentUrl(controller);\n controller.contentUrl = getElements.url;\n return loadHTMLFile(controller, getElements.args);\n }\n return new Promise(resolve => {\n resolve($());\n });\n}\n\n/**\n *\n * @param {jquery} $element\n * @param {string} tagName\n * @param {Array<string>} superTagNameList\n * @param {AbstractSDC} parentController\n * @param {Object} process - Process object containing the refresh process\n * @returns {Promise}\n */\nfunction runReplaceTagElementsInContainer($element, tagName, superTagNameList, parentController, process) {\n let controller = $element.data(DATA_CONTROLLER_KEY);\n if (controller) {\n return replaceAllTagElementsInContainer($element, controller, process);\n }\n controller = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.controllerFactory)(parentController, $element, tagName, superTagNameList);\n $element.data(DATA_CONTROLLER_KEY, controller);\n $element.addClass(CONTROLLER_CLASS);\n return (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.runControlFlowFunctions)(controller, process);\n}\n\n/**\n * runControllerFillContent empties the registered tag and replaces it by the controller\n * content. It sets the CSS tags for the relation with the CSS files.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise}\n */\nfunction runControllerFillContent(controller, $html, process = null) {\n if ($html && $html.length > 0) {\n controller.$container.empty();\n controller.$container.attr(controller._tagName, \"\");\n for (let mixinKey in controller._mixins) {\n controller.$container.attr(controller._mixins[mixinKey]._tagName, \"\");\n }\n controller.$container.append($html);\n }\n return replaceAllTagElementsInContainer(controller.$container, controller, process);\n}\n\n/**\n * replaceTagElementsInContainer Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. For each registered tag it loads the content.\n * Afterwards it starts the life cycle of the controller. I the next step it starts the\n * procedure for the child elements of the controller tag.\n *\n * @param {Array<string>} tagList - list of all registered tags\n * @param {jquery} $container - jQuery container to find the tags\n * @param {AbstractSDC} parentController - controller in surrounding\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceTagElementsInContainer(tagList, $container, parentController, process) {\n return new Promise(resolve => {\n let tagDescriptionElements = findSdcTgs($container, tagList, parentController);\n let tagCount = tagDescriptionElements.length;\n if (tagCount === 0) {\n return resolve();\n }\n for (let elementIndex = 0; elementIndex < tagDescriptionElements.length; elementIndex++) {\n runReplaceTagElementsInContainer(tagDescriptionElements[elementIndex].dom, tagDescriptionElements[elementIndex].tag, tagDescriptionElements[elementIndex].super, parentController, process).then(() => {\n tagCount--;\n if (tagCount === 0) {\n return resolve();\n }\n });\n }\n });\n}\nfunction reloadMethodHTML(controller, $container, process) {\n return _reloadMethodHTML(controller, $container ?? controller.$container, process);\n}\nfunction _reloadMethodHTML(controller, $dom, process) {\n const plist = [];\n $dom.find(`._bind_to_update_handler.sdc_uuid_${controller._uuid}`).each(function () {\n const $this = $(this);\n let result = undefined;\n if ($this.hasClass(`_with_handler`)) {\n result = $this.data(\"handler\");\n } else {\n let controller_handler = this.tagName.toLowerCase().replace(/^this./, \"\");\n if (controller[controller_handler]) {\n result = controller[controller_handler];\n }\n }\n if (typeof result === \"function\") {\n const newData = (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_1__.prepareData)($this.data(), controller);\n result = result.bind(controller)(newData);\n }\n if (result) {\n plist.push(Promise.resolve(result).then(x => {\n let $newContent = $(`<div></div>`);\n $newContent.append(x);\n if ($this.html() === \"\") {\n $this.append(\"<div></div>\");\n }\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.reconcile(controller, $newContent, $this.children(), process);\n }));\n }\n });\n return Promise.all(plist);\n}\nfunction getNodeKey(node) {\n if (node[0].nodeType === 3) {\n return `TEXT__${node[0].nodeValue}`;\n }\n const res = [node[0].tagName];\n if (node[0].nodeName === \"INPUT\") {\n [[\"name\", \"\"], [\"type\", \"text\"], [\"id\", \"\"]].forEach(([key, defaultValue]) => {\n const attr = node.attr(key) ?? defaultValue;\n if (attr) {\n res.push(attr);\n }\n });\n }\n return res.join(\"__\");\n}\nfunction reconcileTree({\n $element,\n id = [],\n parent = null\n}) {\n id.push(getNodeKey($element));\n const obj = {\n $element,\n id: id.join(\"::\"),\n depth: id.length,\n idx: 0,\n getRealParent: () => parent,\n getIdx: function () {\n this.idx = Math.max(0, (this.getRealParent()?.getIdx() ?? -1) + $element.index() + 1);\n return this.idx;\n },\n op: null,\n parent\n };\n obj.getIdx.bind(obj);\n return [obj].concat($element.contents().toArray().map(x => reconcileTree({\n $element: $(x),\n id: id.slice(),\n parent: obj\n })).flat());\n}\nfunction reconcile($virtualNode, $realNode) {\n const $old = reconcileTree({\n $element: $realNode\n });\n const $new = reconcileTree({\n $element: $virtualNode\n });\n $old.map((x, i) => x.idx = i);\n $new.map((x, i) => x.idx = i);\n const depth = Math.max(...$new.concat($old).map(x => x.depth));\n const op_steps = lcbDiff($old, $new, depth);\n let toRemove = [];\n window.MAIN = $realNode;\n window.OPS = op_steps;\n op_steps.forEach((op_step, i) => {\n const {\n op,\n $element,\n idx\n } = op_step;\n if (op.type === \"keep_counterpart\") {\n let cIdx = op.counterpart.getIdx();\n if (cIdx !== idx) {\n const elemBefore = op_step.getBefore();\n if (!elemBefore) {\n op_step.getRealParent().$element.prepend(op.counterpart.$element);\n } else {\n op.counterpart.$element.insertAfter(elemBefore.$element);\n }\n }\n syncAttributes(op.counterpart.$element, $element);\n if ($element.hasClass(CONTROLLER_CLASS)) {\n $element.data(DATA_CONTROLLER_KEY).$container = op.counterpart.$element;\n $element.data(DATA_CONTROLLER_KEY, null);\n }\n toRemove.push($element);\n } else if (op.type === \"delete\") {\n $element.safeRemove();\n } else if (op.type === \"insert\") {\n const {\n after,\n target\n } = op_step.op;\n if (after) {\n $element.insertAfter(after.$element);\n } else if (target) {\n target.$element.prepend($element);\n }\n }\n });\n toRemove.forEach($element => $element.safeRemove());\n}\nfunction syncAttributes($real, $virtual) {\n const realAttrs = $real[0].attributes ?? [];\n const virtualAttrs = $virtual[0].attributes ?? [];\n // Remove missing attrs\n [...realAttrs].forEach(attr => {\n if (!$virtual.is(`[${attr.name}]`)) {\n $real.removeAttr(attr.name);\n }\n });\n\n // Add or update\n [...virtualAttrs].forEach(attr => {\n if (!attr.name.startsWith(`data`) && $real.attr(attr.name) !== attr.value) {\n $real.attr(attr.name, attr.value);\n }\n });\n $real.removeData();\n Object.entries($virtual.data()).forEach(([key, value]) => {\n $real.data(key, value);\n });\n}\n\n/**\n * LCB (Longest Common Branch) finds matching branches and reserves them!\n *\n * @param oldNodes\n * @param newNodes\n * @param depth\n * @returns {*|*[]}\n */\nfunction lcbDiff(oldNodes, newNodes, depth) {\n newNodes.filter(x => x.depth === depth && !x.op).forEach(newNode => {\n const oldNode = oldNodes.find(tempOldNode => {\n return !tempOldNode.op && tempOldNode.id === newNode.id;\n });\n if (oldNode) {\n const keepTreeBranch = (oldNode, newNode) => {\n oldNode.op = {\n type: \"keep\",\n idx: newNode.idx\n };\n newNode.op = {\n type: \"keep_counterpart\",\n counterpart: oldNode\n };\n oldNode = oldNode.parent;\n newNode = newNode.parent;\n if (!oldNode || oldNode.op || newNode?.op) {\n return;\n }\n keepTreeBranch(oldNode, newNode);\n };\n keepTreeBranch(oldNode, newNode);\n }\n });\n if (depth > 1) {\n return lcbDiff(oldNodes, newNodes, depth - 1);\n }\n oldNodes.forEach((x, i) => {\n if (!x.op) {\n const idx = (oldNodes[i - 1]?.op.idx ?? -1) + 1;\n x.op = {\n type: \"delete\",\n idx\n };\n }\n });\n function getRealParent(element) {\n if (!element.parent) {\n return null;\n }\n return element.parent.op.type === \"keep_counterpart\" ? element.parent.op.counterpart : element.parent;\n }\n function getBefore(element, idx) {\n const startDepth = element.depth;\n while (idx >= 1 && element.depth >= startDepth) {\n idx -= 1;\n element = newNodes[idx];\n if (element.depth === startDepth) {\n return element.op.type === \"keep_counterpart\" ? element.op.counterpart : element;\n }\n }\n return null;\n }\n newNodes.forEach((x, i) => {\n x.getBefore = () => getBefore(x, i);\n x.getRealParent = () => getRealParent(x);\n if (!x.op) {\n const target = x.getRealParent();\n const type = target?.op.type === \"insert\" ? \"insert_ignore\" : \"insert\";\n x.op = {\n type,\n target,\n after: x.getBefore()\n };\n }\n });\n const tagged = [...oldNodes, ...newNodes];\n return tagged.sort((a, b) => {\n const aVal = a.op?.idx ?? a.idx;\n const bVal = b.op?.idx ?? b.idx;\n return aVal - bVal;\n });\n}\n\n/**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise<void>}\n */\n\nfunction refresh($dom, leafController, process = null) {\n if (!leafController) {\n leafController = getController($dom);\n }\n if (!leafController) {\n return Promise.resolve();\n }\n const {\n refreshProcess,\n isRunningProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.prepareRefreshProcess)(process, leafController);\n $dom ??= leafController.$container;\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $dom, leafController, process).then(() => {\n return reloadMethodHTML(leafController, $dom, refreshProcess).then(() => {\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsTUFBTTtNQUN2RSxJQUFJLENBQUN1SSxnQkFBZ0IsRUFBRTtRQUNyQmxNLGtGQUE4QixDQUFDaU0sY0FBYyxDQUFDO01BQ2hEO0lBQ0YsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3ZpZXcuanM/MjRiNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb250cm9sbGVyRmFjdG9yeSxcbiAgcHJlcGFyZVJlZnJlc2hQcm9jZXNzLFxuICBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyxcbiAgdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoLFxufSBmcm9tIFwiLi9zZGNfY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IHsgZ2V0VXJsUGFyYW0sIHByZXBhcmVEYXRhIH0gZnJvbSBcIi4vc2RjX3BhcmFtcy5qc1wiO1xuaW1wb3J0IHsgYXBwIH0gZnJvbSBcIi4vc2RjX21haW4uanNcIjtcbmltcG9ydCB7IHRyaWdnZXIgfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5cbi8qKlxuICogTGlzdCBvZiBIVE1MIGZpbGVzLlxuICogQHR5cGUge3t9fVxuICovXG5sZXQgaHRtbEZpbGVzID0ge307XG5cbmV4cG9ydCBjb25zdCBEQVRBX0NPTlRST0xMRVJfS0VZID0gXCJfY29udHJvbGxlcl9cIjtcbmV4cG9ydCBjb25zdCBDT05UUk9MTEVSX0NMQVNTID0gXCJfc2RjX2NvbnRyb2xsZXJfXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkNhY2hlKCkge1xuICBodG1sRmlsZXMgPSB7fTtcbn1cblxuLyoqXG4gKiBmaW5kU2RjVGdzIEZpbmRzIGFsbCByZWdpc3RlcmVkIHRhZ3MgaW4gYSBjb250YWluZXIuIEJ1dCBpdCBpZ25vcmVzXG4gKiByZWdpc3RlcmVkIHRhZ3MgaW4gcmVnaXN0ZXJlZCB0YWdzLiBJdCBjb2xsZWN0cyBhbGwgdGhvc2VcbiAqIGRvbXMgYW5kIHJldHVybnMgYSBsaXN0IG9mIG9iamVjdHMgY29udGFpbmluZyBhbHNvIHRoZSB0YWcgbmFtZSB0aGUgZG9tIGFuZCB0aGUgdGFnXG4gKiBuYW1lcyBvZiB0aGUgc3VwZXIgY29udHJvbGxlclxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0galF1ZXJ5IGNvbnRhaW5lclxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSB0YWdOYW1lTGlzdCAtIGEgc3RyaW5nIGxpc3Qgd2l0aCB0YWcgbmFtZXMuXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gY29udHJvbGxlciBpbiBzdXJyb3VuZGluZ1xuICogQHJldHVybiB7QXJyYXl9IC0gYSBhcnJheSBvZiBvYmplY3RzIHdpdGggYWxsIHJlZ2lzdGVyIHRhZ3MgZm91bmRcbiAqL1xuZnVuY3Rpb24gZmluZFNkY1RncygkY29udGFpbmVyLCB0YWdOYW1lTGlzdCwgcGFyZW50Q29udHJvbGxlcikge1xuICBpZiAoISRjb250YWluZXIpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbGV0ICRjaGlsZHJlbiA9ICRjb250YWluZXIuY2hpbGRyZW4oKTtcbiAgbGV0IGVtcHR5TGlzdCA9IFtdO1xuICAkY2hpbGRyZW4uZWFjaChmdW5jdGlvbiAoXywgZWxlbWVudCkge1xuICAgIGxldCAkZWxlbWVudCA9ICQoZWxlbWVudCk7XG4gICAgbGV0IHRhZ05hbWUgPSAkZWxlbWVudC5wcm9wKFwidGFnTmFtZVwiKS50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiX1wiKTtcbiAgICBpZiAoJC5pbkFycmF5KHRhZ05hbWVbMF0sIHRhZ05hbWVMaXN0KSA+PSAwKSB7XG4gICAgICBlbXB0eUxpc3QucHVzaCh7XG4gICAgICAgIHRhZzogdGFnTmFtZVswXSxcbiAgICAgICAgc3VwZXI6IHRhZ05hbWUuc3BsaWNlKDEpIHx8IFtdLFxuICAgICAgICBkb206ICRlbGVtZW50LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0YWdOYW1lWzBdLnN0YXJ0c1dpdGgoXCJ0aGlzLlwiKSkge1xuICAgICAgJGVsZW1lbnQuYWRkQ2xhc3MoXG4gICAgICAgIGBfYmluZF90b191cGRhdGVfaGFuZGxlciBzZGNfdXVpZF8ke3BhcmVudENvbnRyb2xsZXIuX3V1aWR9YCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtcHR5TGlzdCA9IGVtcHR5TGlzdC5jb25jYXQoXG4gICAgICAgIGZpbmRTZGNUZ3MoJGVsZW1lbnQsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZW1wdHlMaXN0O1xufVxuXG4vKipcbiAqIHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIgZmlsbHMgdGhlIHBhcmFtZXRlciBvZiB0aGUgY29udGVudFxuICogdXJsIHRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgdGFnIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBjb250cm9sbGVyIC0gY29udHJvbGxlciBvYmplY3RcbiAqIEBwYXJhbSB1cmwgLSB0aGUgb3JpZ2luIGNvbnRlbnQgVVJMXG4gKiBAcGFyYW0gdXJsVmFsdWVzIC0gdmFsdWVzIGZvciB0aGUgdXJsIHBsYWNlaG9sZGVyLiBJbiBzYW1lIG9yZGVyISFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGNvcnJlY3QgVVJMIHdpdGggcHJlZml4LlxuICovXG5mdW5jdGlvbiByZXBsYWNlUGxhY2Vob2xkZXJDb250cm9sbGVyKGNvbnRyb2xsZXIsIHVybCwgdXJsVmFsdWVzKSB7XG4gIGZvciAobGV0IGtleV9pZHggaW4gY29udHJvbGxlci5fdXJsUGFyYW1zKSB7XG4gICAgaWYgKGNvbnRyb2xsZXIuX3VybFBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrZXlfaWR4KSkge1xuICAgICAgbGV0IGtleSA9IGNvbnRyb2xsZXIuX3VybFBhcmFtc1trZXlfaWR4XTtcbiAgICAgIGxldCByZSA9IFJlZ0V4cChcIiVcXFxcKFwiICsga2V5ICsgXCJcXFxcKVxcXFx3XCIsIFwiZ21cIik7XG4gICAgICBjb25zdCB2YWwgPSB1cmxWYWx1ZXNba2V5XTtcbiAgICAgIGlmKCF2YWwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAke2tleX0gaXMgbm90IHNldCBmb3IgY29udHJvbGxlciAkeyBjb250cm9sbGVyLl90YWdOYW1lIH1gKTtcbiAgICAgIH1cbiAgICAgIHVybCA9IHVybC5yZXBsYWNlKHJlLCB2YWwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG5cbi8qKlxuICogbG9hZEhUTUxGaWxlIGxvYWRzIHRoZSBIVE1MIGNvbnRlbnQgZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgdmlhIGFqYXggcmVxdWVzdC5cbiAqXG4gKiBJZiB0aGUgSFRNTCBmaWxlIGlzIGxvYWRlZCBhbHJlYWR5IHRoZSBmdW5jdGlvbiB0YWtlcyBubyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGEgY29udGVudCBVUkwgZnJvbSB0aGUgY29udHJvbGxlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gZ2V0IGFyZ3MuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxqUXVlcnl8Qm9vbGVhbj59IC0gd2FpdHMgZm9yIHRoZSBmaWxlIHRvIGJlIGxvYWRlZC5cbiAqL1xuZnVuY3Rpb24gbG9hZEhUTUxGaWxlKGNvbnRyb2xsZXIsIGFyZ3MpIHtcbiAgY29uc3QgeyBjb250ZW50VXJsLCBfdGFnTmFtZSwgY29udGVudFJlbG9hZCB9ID0gY29udHJvbGxlcjtcbiAgaWYgKCFjb250ZW50VXJsKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gIH0gZWxzZSBpZiAoaHRtbEZpbGVzW190YWdOYW1lXSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaHRtbEZpbGVzW190YWdOYW1lXSk7XG4gIH1cblxuICBhcmdzLlZFUlNJT04gPSBhcHAuVkVSU0lPTjtcbiAgYXJncy5fbWV0aG9kID0gXCJjb250ZW50XCI7XG5cbiAgcmV0dXJuICQuZ2V0KGNvbnRlbnRVcmwsIGFyZ3MpXG4gICAgLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmICghY29udGVudFJlbG9hZCkge1xuICAgICAgICBodG1sRmlsZXNbX3RhZ05hbWVdID0gZGF0YTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSlcbiAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDMwMSkge1xuICAgICAgICBjb25zdCBkYXRhID0gZXJyLnJlc3BvbnNlSlNPTjtcbiAgICAgICAgdHJpZ2dlcihcIl9SZWRpcmVjdE9uVmlld1wiLCBkYXRhW1widXJsLWxpbmtcIl0pO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBjb250cm9sbGVyLmNvbmZpcm1QYWdlTG9hZGVkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJpZ2dlcihcIm5hdkxvYWRlZFwiLCB7IGNvbnRyb2xsZXJfbmFtZTogKCkgPT4gZXJyLnN0YXR1cyB9KTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgYDxzZGMtZXJyb3IgZGF0YS1jb2RlPVwiJHtlcnIuc3RhdHVzfVwiPiR7ZXJyLnJlc3BvbnNlVGV4dH08L3NkYy1lcnJvcj5gO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyIHJlcGxhY2VzIGFsbCByZWdpc3RlcmVkIHRhZ3MgYnkgdGhlIGNvbnRyb2xsZXIuXG4gKiBJbiB0aGlzIHN0ZXAgdGhlIGxpZmUtY3ljbGUgc3RhcnRzLlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0gZ2l2ZW4gY29udGFpbmVyXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gcGFyZW50IGNvbnRvbGxlciBzdXJyb3VuZGVkIHRoZSBjb250YWluZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyKFxuICAkY29udGFpbmVyLFxuICBwYXJlbnRDb250cm9sbGVyLFxuICBwcm9jZXNzID0gbnVsbCxcbikge1xuICBwYXJlbnRDb250cm9sbGVyID0gcGFyZW50Q29udHJvbGxlciB8fCAkY29udGFpbmVyLmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSk7XG4gIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihcbiAgICBhcHAudGFnTmFtZXMsXG4gICAgJGNvbnRhaW5lcixcbiAgICBwYXJlbnRDb250cm9sbGVyLFxuICAgIHByb2Nlc3MsXG4gICk7XG59XG5cbi8qKlxuICogcGFyc2VDb250ZW50VXJsIHVzZXMgdGhlIGNvbnRlbnQgVVJMIHByZWZpeCB0byBtYXJnZSB0aGVcbiAqIGNvcnJlY3QgVVJMLiBBbHNvIHBhcnNlcyB0aGUgdXJsIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBjb250cm9sbGVyIG9iamVjdFxuICogQHJldHVybnMge3t1cmw6IFN0cmluZywgYXJnczogQXJyYXl9fSAtIHRoZSBjb3JyZWN0IFVSTCB3aXRoIHByZWZpeC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIpIHtcbiAgbGV0IHVybCA9IGNvbnRyb2xsZXIuY29udGVudFVybDtcbiAgaWYgKGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci5fdXJsUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIGxldCByZSA9IC8lXFwoKFteKV0rKVxcKVxcdy9nbTtcbiAgICBsZXQgbWF0Y2hlcztcbiAgICBjb250cm9sbGVyLl91cmxQYXJhbXMgPSBbXTtcbiAgICB3aGlsZSAoKG1hdGNoZXMgPSByZS5leGVjKHVybCkpKSB7XG4gICAgICBjb250cm9sbGVyLl91cmxQYXJhbXMucHVzaChtYXRjaGVzWzFdKTtcbiAgICAgIGNvbnRyb2xsZXIuY29udGVudFJlbG9hZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbGV0IHsgYXJncywgcGFyYW1zIH0gPSBnZXRVcmxQYXJhbShjb250cm9sbGVyLCBjb250cm9sbGVyLiRjb250YWluZXIpO1xuICBpZiAoY29udHJvbGxlci5fdXJsUGFyYW1zLmxlbmd0aCkge1xuICAgIHVybCA9IHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCBwYXJhbXMpO1xuICB9XG5cbiAgY29udHJvbGxlci5wYXJzZWRDb250ZW50VXJsID0gdXJsO1xuXG4gIHJldHVybiB7IHVybDogdXJsLCBhcmdzIH07XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICogQHJldHVybiB7QWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sbGVyKCRlbGVtKSB7XG4gIGlmICgkZWxlbS5oYXNDbGFzcyhDT05UUk9MTEVSX0NMQVNTKSkge1xuICAgIHJldHVybiAkZWxlbS5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCk7XG4gIH1cbiAgcmV0dXJuICRlbGVtLmNsb3Nlc3QoYC4ke0NPTlRST0xMRVJfQ0xBU1N9YCkuZGF0YShgJHtEQVRBX0NPTlRST0xMRVJfS0VZfWApO1xufVxuXG4vKipcbiAqIGxvYWRGaWxlc0Zyb21Db250cm9sbGVyIGxvYWRzIHRoZSBjb250ZW50IChIVE1MKSBvZiBhXG4gKiBDb250cm9sbGVyLiBJZiB5b3UgaGF2ZSBhbiBhbHRlcm5hdGl2ZSBjb250ZW50IFVSTCBpcyByZWdpc3RlcmVkLCBmb3IgdGhpc1xuICogY29udHJvbGxlciB0aGUgb3JpZ2luIGNvbnRlbnQgVVJMIGlzIGlnbm9yZWQuXG4gKlxuICogVGhlIGNvbnRlbnQgaXMgc2F2ZWQgYXMgalF1ZXJ5IG9iamVjdCB0byB0aGUgY29udHJvbGxlci4kY29udGVudCBwcm9wZXJ0eSBvZlxuICogdGhlIGNvbnRyb2xsZXIuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGEgaW5zdGFuY2Ugb2YgYSBKYXZhU2NyaXB0IGNvbnRyb2xsZXIgb2JqZWN0LlxuICogQHJldHVybnMge1Byb21pc2U8alF1ZXJ5Pn0gLSB0aGUgcHJvbWlzZSB3YWl0cyB0byB0aGUgZmlsZXMgYXJlIGxvYWRlZC4gaXQgcmV0dXJucyB0aGUgalF1ZXJ5IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlc0Zyb21Db250cm9sbGVyKGNvbnRyb2xsZXIpIHtcbiAgbGV0IGdldEVsZW1lbnRzID0geyBhcmdzOiB7fSB9O1xuICBpZiAoY29udHJvbGxlci5jb250ZW50VXJsKSB7XG4gICAgZ2V0RWxlbWVudHMgPSBwYXJzZUNvbnRlbnRVcmwoY29udHJvbGxlcik7XG4gICAgY29udHJvbGxlci5jb250ZW50VXJsID0gZ2V0RWxlbWVudHMudXJsO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UuYWxsKFtsb2FkSFRNTEZpbGUoY29udHJvbGxlciwgZ2V0RWxlbWVudHMuYXJncyldKS50aGVuKFxuICAgIGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICBsZXQgaHRtbEZpbGUgPSByZXN1bHRzWzBdO1xuICAgICAgaWYgKGh0bWxGaWxlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuICQoaHRtbEZpbGUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gJChcIjxkaXY+PC9kaXY+XCIpLmFwcGVuZChodG1sRmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgKTtcbn1cblxuLyoqXG4gKiByZWxvYWRIVE1MQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0gYSBpbnN0YW5jZSBvZiBhIEphdmFTY3JpcHQgY29udHJvbGxlciBvYmplY3QuXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8alF1ZXJ5Pn0gLSB0aGUgcHJvbWlzZSB3YWl0cyB0byB0aGUgZmlsZXMgYXJlIGxvYWRlZC4gaXQgcmV0dXJucyB0aGUgalF1ZXJ5IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpIHtcbiAgaWYgKGNvbnRyb2xsZXIuY29udGVudFVybCkge1xuICAgIGxldCBnZXRFbGVtZW50cyA9IHBhcnNlQ29udGVudFVybChjb250cm9sbGVyKTtcbiAgICBjb250cm9sbGVyLmNvbnRlbnRVcmwgPSBnZXRFbGVtZW50cy51cmw7XG4gICAgcmV0dXJuIGxvYWRIVE1MRmlsZShjb250cm9sbGVyLCBnZXRFbGVtZW50cy5hcmdzKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHJlc29sdmUoJCgpKTtcbiAgfSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWVcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdFxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlclxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5mdW5jdGlvbiBydW5SZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihcbiAgJGVsZW1lbnQsXG4gIHRhZ05hbWUsXG4gIHN1cGVyVGFnTmFtZUxpc3QsXG4gIHBhcmVudENvbnRyb2xsZXIsXG4gIHByb2Nlc3MsXG4pIHtcbiAgbGV0IGNvbnRyb2xsZXIgPSAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpO1xuICBpZiAoY29udHJvbGxlcikge1xuICAgIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcigkZWxlbWVudCwgY29udHJvbGxlciwgcHJvY2Vzcyk7XG4gIH1cblxuXG4gIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyRmFjdG9yeShcbiAgICBwYXJlbnRDb250cm9sbGVyLFxuICAgICRlbGVtZW50LFxuICAgIHRhZ05hbWUsXG4gICAgc3VwZXJUYWdOYW1lTGlzdCxcbiAgKTtcbiAgJGVsZW1lbnQuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZLCBjb250cm9sbGVyKTtcbiAgJGVsZW1lbnQuYWRkQ2xhc3MoQ09OVFJPTExFUl9DTEFTUyk7XG4gIHJldHVybiBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyhjb250cm9sbGVyLCBwcm9jZXNzKTtcbn1cblxuLyoqXG4gKiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQgZW1wdGllcyB0aGUgcmVnaXN0ZXJlZCB0YWcgYW5kIHJlcGxhY2VzIGl0IGJ5IHRoZSBjb250cm9sbGVyXG4gKiBjb250ZW50LiBJdCBzZXRzIHRoZSBDU1MgdGFncyBmb3IgdGhlIHJlbGF0aW9uIHdpdGggdGhlIENTUyBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudChjb250cm9sbGVyLCAkaHRtbCwgcHJvY2VzcyA9IG51bGwpIHtcbiAgaWYgKCRodG1sICYmICRodG1sLmxlbmd0aCA+IDApIHtcbiAgICBjb250cm9sbGVyLiRjb250YWluZXIuZW1wdHkoKTtcbiAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXR0cihjb250cm9sbGVyLl90YWdOYW1lLCBcIlwiKTtcbiAgICBmb3IgKGxldCBtaXhpbktleSBpbiBjb250cm9sbGVyLl9taXhpbnMpIHtcbiAgICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lci5hdHRyKGNvbnRyb2xsZXIuX21peGluc1ttaXhpbktleV0uX3RhZ05hbWUsIFwiXCIpO1xuICAgIH1cbiAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXBwZW5kKCRodG1sKTtcbiAgfVxuXG4gIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcihcbiAgICBjb250cm9sbGVyLiRjb250YWluZXIsXG4gICAgY29udHJvbGxlcixcbiAgICBwcm9jZXNzLFxuICApO1xufVxuXG4vKipcbiAqIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIEZpbmRzIGFsbCByZWdpc3RlcmVkIHRhZ3MgaW4gYSBjb250YWluZXIuIEJ1dCBpdCBpZ25vcmVzXG4gKiByZWdpc3RlcmVkIHRhZ3MgaW4gcmVnaXN0ZXJlZCB0YWdzLiBGb3IgZWFjaCByZWdpc3RlcmVkIHRhZyBpdCBsb2FkcyB0aGUgY29udGVudC5cbiAqIEFmdGVyd2FyZHMgaXQgc3RhcnRzIHRoZSBsaWZlIGN5Y2xlIG9mIHRoZSBjb250cm9sbGVyLiBJIHRoZSBuZXh0IHN0ZXAgaXQgc3RhcnRzIHRoZVxuICogcHJvY2VkdXJlIGZvciB0aGUgY2hpbGQgZWxlbWVudHMgb2YgdGhlIGNvbnRyb2xsZXIgdGFnLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdGFnTGlzdCAtIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgdGFnc1xuICogQHBhcmFtIHtqcXVlcnl9ICRjb250YWluZXIgLSBqUXVlcnkgY29udGFpbmVyIHRvIGZpbmQgdGhlIHRhZ3NcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBjb250cm9sbGVyIGluIHN1cnJvdW5kaW5nXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoXG4gIHRhZ0xpc3QsXG4gICRjb250YWluZXIsXG4gIHBhcmVudENvbnRyb2xsZXIsXG4gIHByb2Nlc3MsXG4pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgbGV0IHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMgPSBmaW5kU2RjVGdzKFxuICAgICAgJGNvbnRhaW5lcixcbiAgICAgIHRhZ0xpc3QsXG4gICAgICBwYXJlbnRDb250cm9sbGVyLFxuICAgICk7XG4gICAgbGV0IHRhZ0NvdW50ID0gdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAodGFnQ291bnQgPT09IDApIHtcbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgZm9yIChcbiAgICAgIGxldCBlbGVtZW50SW5kZXggPSAwO1xuICAgICAgZWxlbWVudEluZGV4IDwgdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7XG4gICAgICBlbGVtZW50SW5kZXgrK1xuICAgICkge1xuICAgICAgcnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoXG4gICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS5kb20sXG4gICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS50YWcsXG4gICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS5zdXBlcixcbiAgICAgICAgcGFyZW50Q29udHJvbGxlcixcbiAgICAgICAgcHJvY2VzcyxcbiAgICAgICkudGhlbigoKSA9PiB7XG4gICAgICAgIHRhZ0NvdW50LS07XG4gICAgICAgIGlmICh0YWdDb3VudCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWRNZXRob2RIVE1MKGNvbnRyb2xsZXIsICRjb250YWluZXIsIHByb2Nlc3MpIHtcbiAgcmV0dXJuIF9yZWxvYWRNZXRob2RIVE1MKFxuICAgIGNvbnRyb2xsZXIsXG4gICAgJGNvbnRhaW5lciA/PyBjb250cm9sbGVyLiRjb250YWluZXIsXG4gICAgcHJvY2VzcyxcbiAgKTtcbn1cblxuZnVuY3Rpb24gX3JlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJGRvbSwgcHJvY2Vzcykge1xuICBjb25zdCBwbGlzdCA9IFtdO1xuXG4gICRkb21cbiAgICAuZmluZChgLl9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyLnNkY191dWlkXyR7Y29udHJvbGxlci5fdXVpZH1gKVxuICAgIC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICAgIGxldCByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoJHRoaXMuaGFzQ2xhc3MoYF93aXRoX2hhbmRsZXJgKSkge1xuICAgICAgICByZXN1bHQgPSAkdGhpcy5kYXRhKFwiaGFuZGxlclwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb250cm9sbGVyX2hhbmRsZXIgPSB0aGlzLnRhZ05hbWVcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIC5yZXBsYWNlKC9edGhpcy4vLCBcIlwiKTtcbiAgICAgICAgaWYgKGNvbnRyb2xsZXJbY29udHJvbGxlcl9oYW5kbGVyXSkge1xuICAgICAgICAgIHJlc3VsdCA9IGNvbnRyb2xsZXJbY29udHJvbGxlcl9oYW5kbGVyXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBwcmVwYXJlRGF0YSgkdGhpcy5kYXRhKCksIGNvbnRyb2xsZXIpO1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuYmluZChjb250cm9sbGVyKShuZXdEYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcGxpc3QucHVzaChcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKCh4KSA9PiB7XG4gICAgICAgICAgICBsZXQgJG5ld0NvbnRlbnQgPSAkKGA8ZGl2PjwvZGl2PmApO1xuICAgICAgICAgICAgJG5ld0NvbnRlbnQuYXBwZW5kKHgpO1xuXG4gICAgICAgICAgICBpZiAoJHRoaXMuaHRtbCgpID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICR0aGlzLmFwcGVuZChcIjxkaXY+PC9kaXY+XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYXBwLnJlY29uY2lsZShcbiAgICAgICAgICAgICAgY29udHJvbGxlcixcbiAgICAgICAgICAgICAgJG5ld0NvbnRlbnQsXG4gICAgICAgICAgICAgICR0aGlzLmNoaWxkcmVuKCksXG4gICAgICAgICAgICAgIHByb2Nlc3MsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHJldHVybiBQcm9taXNlLmFsbChwbGlzdCk7XG59XG5cbmZ1bmN0aW9uIGdldE5vZGVLZXkobm9kZSkge1xuICBpZiAobm9kZVswXS5ub2RlVHlwZSA9PT0gMykge1xuICAgIHJldHVybiBgVEVYVF9fJHtub2RlWzBdLm5vZGVWYWx1ZX1gO1xuICB9XG4gIGNvbnN0IHJlcyA9IFtub2RlWzBdLnRhZ05hbWVdO1xuICBpZiAobm9kZVswXS5ub2RlTmFtZSA9PT0gXCJJTlBVVFwiKSB7XG4gICAgW1xuICAgICAgW1wibmFtZVwiLCBcIlwiXSxcbiAgICAgIFtcInR5cGVcIiwgXCJ0ZXh0XCJdLFxuICAgICAgW1wiaWRcIiwgXCJcIl0sXG4gICAgXS5mb3JFYWNoKChba2V5LCBkZWZhdWx0VmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBhdHRyID0gbm9kZS5hdHRyKGtleSkgPz8gZGVmYXVsdFZhbHVlO1xuICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgcmVzLnB1c2goYXR0cik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlcy5qb2luKFwiX19cIik7XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZVRyZWUoeyAkZWxlbWVudCwgaWQgPSBbXSwgcGFyZW50ID0gbnVsbCB9KSB7XG4gIGlkLnB1c2goZ2V0Tm9kZUtleSgkZWxlbWVudCkpO1xuICBjb25zdCBvYmogPSB7XG4gICAgJGVsZW1lbnQsXG4gICAgaWQ6IGlkLmpvaW4oXCI6OlwiKSxcbiAgICBkZXB0aDogaWQubGVuZ3RoLFxuICAgIGlkeDogMCxcbiAgICBnZXRSZWFsUGFyZW50OiAoKSA9PiBwYXJlbnQsXG4gICAgZ2V0SWR4OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmlkeCA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICAodGhpcy5nZXRSZWFsUGFyZW50KCk/LmdldElkeCgpID8/IC0xKSArICRlbGVtZW50LmluZGV4KCkgKyAxLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLmlkeDtcbiAgICB9LFxuICAgIG9wOiBudWxsLFxuICAgIHBhcmVudCxcbiAgfTtcbiAgb2JqLmdldElkeC5iaW5kKG9iaik7XG4gIHJldHVybiBbb2JqXS5jb25jYXQoXG4gICAgJGVsZW1lbnRcbiAgICAgIC5jb250ZW50cygpXG4gICAgICAudG9BcnJheSgpXG4gICAgICAubWFwKCh4KSA9PlxuICAgICAgICByZWNvbmNpbGVUcmVlKHtcbiAgICAgICAgICAkZWxlbWVudDogJCh4KSxcbiAgICAgICAgICBpZDogaWQuc2xpY2UoKSxcbiAgICAgICAgICBwYXJlbnQ6IG9iaixcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuZmxhdCgpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjb25jaWxlKCR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlKSB7XG4gIGNvbnN0ICRvbGQgPSByZWNvbmNpbGVUcmVlKHsgJGVsZW1lbnQ6ICRyZWFsTm9kZSB9KTtcbiAgY29uc3QgJG5ldyA9IHJlY29uY2lsZVRyZWUoeyAkZWxlbWVudDogJHZpcnR1YWxOb2RlIH0pO1xuICAkb2xkLm1hcCgoeCwgaSkgPT4gKHguaWR4ID0gaSkpO1xuICAkbmV3Lm1hcCgoeCwgaSkgPT4gKHguaWR4ID0gaSkpO1xuICBjb25zdCBkZXB0aCA9IE1hdGgubWF4KC4uLiRuZXcuY29uY2F0KCRvbGQpLm1hcCgoeCkgPT4geC5kZXB0aCkpO1xuICBjb25zdCBvcF9zdGVwcyA9IGxjYkRpZmYoJG9sZCwgJG5ldywgZGVwdGgpO1xuICBsZXQgdG9SZW1vdmUgPSBbXTtcbiAgd2luZG93Lk1BSU4gPSAkcmVhbE5vZGU7XG4gIHdpbmRvdy5PUFMgPSBvcF9zdGVwcztcblxuICBvcF9zdGVwcy5mb3JFYWNoKChvcF9zdGVwLCBpKSA9PiB7XG4gICAgY29uc3QgeyBvcCwgJGVsZW1lbnQsIGlkeCB9ID0gb3Bfc3RlcDtcblxuICAgIGlmIChvcC50eXBlID09PSBcImtlZXBfY291bnRlcnBhcnRcIikge1xuICAgICAgbGV0IGNJZHggPSBvcC5jb3VudGVycGFydC5nZXRJZHgoKTtcbiAgICAgIGlmIChjSWR4ICE9PSBpZHgpIHtcbiAgICAgICAgY29uc3QgZWxlbUJlZm9yZSA9IG9wX3N0ZXAuZ2V0QmVmb3JlKCk7XG4gICAgICAgIGlmICghZWxlbUJlZm9yZSkge1xuICAgICAgICAgIG9wX3N0ZXAuZ2V0UmVhbFBhcmVudCgpLiRlbGVtZW50LnByZXBlbmQob3AuY291bnRlcnBhcnQuJGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wLmNvdW50ZXJwYXJ0LiRlbGVtZW50Lmluc2VydEFmdGVyKGVsZW1CZWZvcmUuJGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN5bmNBdHRyaWJ1dGVzKG9wLmNvdW50ZXJwYXJ0LiRlbGVtZW50LCAkZWxlbWVudCk7XG4gICAgICBpZiAoJGVsZW1lbnQuaGFzQ2xhc3MoQ09OVFJPTExFUl9DTEFTUykpIHtcbiAgICAgICAgJGVsZW1lbnQuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZKS4kY29udGFpbmVyID0gb3AuY291bnRlcnBhcnQuJGVsZW1lbnQ7XG4gICAgICAgICRlbGVtZW50LmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRvUmVtb3ZlLnB1c2goJGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAob3AudHlwZSA9PT0gXCJkZWxldGVcIikge1xuICAgICAgJGVsZW1lbnQuc2FmZVJlbW92ZSgpO1xuICAgIH0gZWxzZSBpZiAob3AudHlwZSA9PT0gXCJpbnNlcnRcIikge1xuICAgICAgY29uc3QgeyBhZnRlciwgdGFyZ2V0IH0gPSBvcF9zdGVwLm9wO1xuICAgICAgaWYgKGFmdGVyKSB7XG4gICAgICAgICRlbGVtZW50Lmluc2VydEFmdGVyKGFmdGVyLiRlbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC4kZWxlbWVudC5wcmVwZW5kKCRlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHRvUmVtb3ZlLmZvckVhY2goKCRlbGVtZW50KSA9PiAkZWxlbWVudC5zYWZlUmVtb3ZlKCkpO1xufVxuXG5mdW5jdGlvbiBzeW5jQXR0cmlidXRlcygkcmVhbCwgJHZpcnR1YWwpIHtcbiAgY29uc3QgcmVhbEF0dHJzID0gJHJlYWxbMF0uYXR0cmlidXRlcyA/PyBbXTtcbiAgY29uc3QgdmlydHVhbEF0dHJzID0gJHZpcnR1YWxbMF0uYXR0cmlidXRlcyA/PyBbXTtcbiAgLy8gUmVtb3ZlIG1pc3NpbmcgYXR0cnNcbiAgWy4uLnJlYWxBdHRyc10uZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgIGlmICghJHZpcnR1YWwuaXMoYFske2F0dHIubmFtZX1dYCkpIHtcbiAgICAgICRyZWFsLnJlbW92ZUF0dHIoYXR0ci5uYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEFkZCBvciB1cGRhdGVcbiAgWy4uLnZpcnR1YWxBdHRyc10uZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgIGlmICghYXR0ci5uYW1lLnN0YXJ0c1dpdGgoYGRhdGFgKSAmJiAkcmVhbC5hdHRyKGF0dHIubmFtZSkgIT09IGF0dHIudmFsdWUpIHtcbiAgICAgICRyZWFsLmF0dHIoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gICRyZWFsLnJlbW92ZURhdGEoKTtcbiAgT2JqZWN0LmVudHJpZXMoJHZpcnR1YWwuZGF0YSgpKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAkcmVhbC5kYXRhKGtleSwgdmFsdWUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBMQ0IgKExvbmdlc3QgQ29tbW9uIEJyYW5jaCkgZmluZHMgbWF0Y2hpbmcgYnJhbmNoZXMgYW5kIHJlc2VydmVzIHRoZW0hXG4gKlxuICogQHBhcmFtIG9sZE5vZGVzXG4gKiBAcGFyYW0gbmV3Tm9kZXNcbiAqIEBwYXJhbSBkZXB0aFxuICogQHJldHVybnMgeyp8KltdfVxuICovXG5mdW5jdGlvbiBsY2JEaWZmKG9sZE5vZGVzLCBuZXdOb2RlcywgZGVwdGgpIHtcbiAgbmV3Tm9kZXNcbiAgICAuZmlsdGVyKCh4KSA9PiB4LmRlcHRoID09PSBkZXB0aCAmJiAheC5vcClcbiAgICAuZm9yRWFjaCgobmV3Tm9kZSkgPT4ge1xuICAgICAgY29uc3Qgb2xkTm9kZSA9IG9sZE5vZGVzLmZpbmQoKHRlbXBPbGROb2RlKSA9PiB7XG4gICAgICAgIHJldHVybiAhdGVtcE9sZE5vZGUub3AgJiYgdGVtcE9sZE5vZGUuaWQgPT09IG5ld05vZGUuaWQ7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG9sZE5vZGUpIHtcbiAgICAgICAgY29uc3Qga2VlcFRyZWVCcmFuY2ggPSAob2xkTm9kZSwgbmV3Tm9kZSkgPT4ge1xuICAgICAgICAgIG9sZE5vZGUub3AgPSB7IHR5cGU6IFwia2VlcFwiLCBpZHg6IG5ld05vZGUuaWR4IH07XG4gICAgICAgICAgbmV3Tm9kZS5vcCA9IHsgdHlwZTogXCJrZWVwX2NvdW50ZXJwYXJ0XCIsIGNvdW50ZXJwYXJ0OiBvbGROb2RlIH07XG4gICAgICAgICAgb2xkTm9kZSA9IG9sZE5vZGUucGFyZW50O1xuICAgICAgICAgIG5ld05vZGUgPSBuZXdOb2RlLnBhcmVudDtcbiAgICAgICAgICBpZiAoIW9sZE5vZGUgfHwgb2xkTm9kZS5vcCB8fCBuZXdOb2RlPy5vcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBrZWVwVHJlZUJyYW5jaChvbGROb2RlLCBuZXdOb2RlKTtcbiAgICAgICAgfTtcbiAgICAgICAga2VlcFRyZWVCcmFuY2gob2xkTm9kZSwgbmV3Tm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIGlmIChkZXB0aCA+IDEpIHtcbiAgICByZXR1cm4gbGNiRGlmZihvbGROb2RlcywgbmV3Tm9kZXMsIGRlcHRoIC0gMSk7XG4gIH1cblxuICBvbGROb2Rlcy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgaWYgKCF4Lm9wKSB7XG4gICAgICBjb25zdCBpZHggPSAob2xkTm9kZXNbaSAtIDFdPy5vcC5pZHggPz8gLTEpICsgMTtcbiAgICAgIHgub3AgPSB7IHR5cGU6IFwiZGVsZXRlXCIsIGlkeCB9O1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0UmVhbFBhcmVudChlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50LnBhcmVudC5vcC50eXBlID09PSBcImtlZXBfY291bnRlcnBhcnRcIlxuICAgICAgPyBlbGVtZW50LnBhcmVudC5vcC5jb3VudGVycGFydFxuICAgICAgOiBlbGVtZW50LnBhcmVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJlZm9yZShlbGVtZW50LCBpZHgpIHtcbiAgICBjb25zdCBzdGFydERlcHRoID0gZWxlbWVudC5kZXB0aDtcbiAgICB3aGlsZSAoaWR4ID49IDEgJiYgZWxlbWVudC5kZXB0aCA+PSBzdGFydERlcHRoKSB7XG4gICAgICBpZHggLT0gMTtcbiAgICAgIGVsZW1lbnQgPSBuZXdOb2Rlc1tpZHhdO1xuICAgICAgaWYgKGVsZW1lbnQuZGVwdGggPT09IHN0YXJ0RGVwdGgpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub3AudHlwZSA9PT0gXCJrZWVwX2NvdW50ZXJwYXJ0XCJcbiAgICAgICAgICA/IGVsZW1lbnQub3AuY291bnRlcnBhcnRcbiAgICAgICAgICA6IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBuZXdOb2Rlcy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgeC5nZXRCZWZvcmUgPSAoKSA9PiBnZXRCZWZvcmUoeCwgaSk7XG4gICAgeC5nZXRSZWFsUGFyZW50ID0gKCkgPT4gZ2V0UmVhbFBhcmVudCh4KTtcblxuICAgIGlmICgheC5vcCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0geC5nZXRSZWFsUGFyZW50KCk7XG4gICAgICBjb25zdCB0eXBlID0gdGFyZ2V0Py5vcC50eXBlID09PSBcImluc2VydFwiID8gXCJpbnNlcnRfaWdub3JlXCIgOiBcImluc2VydFwiO1xuICAgICAgeC5vcCA9IHsgdHlwZSwgdGFyZ2V0LCBhZnRlcjogeC5nZXRCZWZvcmUoKSB9O1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdGFnZ2VkID0gWy4uLm9sZE5vZGVzLCAuLi5uZXdOb2Rlc107XG5cbiAgcmV0dXJuIHRhZ2dlZC5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgYVZhbCA9IGEub3A/LmlkeCA/PyBhLmlkeDtcbiAgICBjb25zdCBiVmFsID0gYi5vcD8uaWR4ID8/IGIuaWR4O1xuXG4gICAgcmV0dXJuIGFWYWwgLSBiVmFsO1xuICB9KTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRkb21cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGxlYWZDb250cm9sbGVyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaCgkZG9tLCBsZWFmQ29udHJvbGxlciwgcHJvY2VzcyA9IG51bGwpIHtcbiAgaWYgKCFsZWFmQ29udHJvbGxlcikge1xuICAgIGxlYWZDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkZG9tKTtcbiAgfVxuXG4gIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBjb25zdCB7IHJlZnJlc2hQcm9jZXNzLCBpc1J1bm5pbmdQcm9jZXNzIH0gPSBwcmVwYXJlUmVmcmVzaFByb2Nlc3MoXG4gICAgcHJvY2VzcyxcbiAgICBsZWFmQ29udHJvbGxlcixcbiAgKTtcblxuICAkZG9tID8/PSBsZWFmQ29udHJvbGxlci4kY29udGFpbmVyO1xuXG4gIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihcbiAgICBhcHAudGFnTmFtZXMsXG4gICAgJGRvbSxcbiAgICBsZWFmQ29udHJvbGxlcixcbiAgICBwcm9jZXNzLFxuICApLnRoZW4oKCkgPT4ge1xuICAgIHJldHVybiByZWxvYWRNZXRob2RIVE1MKGxlYWZDb250cm9sbGVyLCAkZG9tLCByZWZyZXNoUHJvY2VzcykudGhlbigoKSA9PiB7XG4gICAgICBpZiAoIWlzUnVubmluZ1Byb2Nlc3MpIHtcbiAgICAgICAgdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoKHJlZnJlc2hQcm9jZXNzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiY29udHJvbGxlckZhY3RvcnkiLCJwcmVwYXJlUmVmcmVzaFByb2Nlc3MiLCJydW5Db250cm9sRmxvd0Z1bmN0aW9ucyIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsImdldFVybFBhcmFtIiwicHJlcGFyZURhdGEiLCJhcHAiLCJ0cmlnZ2VyIiwiaHRtbEZpbGVzIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsIkNPTlRST0xMRVJfQ0xBU1MiLCJjbGVhbkNhY2hlIiwiZmluZFNkY1RncyIsIiRjb250YWluZXIiLCJ0YWdOYW1lTGlzdCIsInBhcmVudENvbnRyb2xsZXIiLCIkY2hpbGRyZW4iLCJjaGlsZHJlbiIsImVtcHR5TGlzdCIsImVhY2giLCJfIiwiZWxlbWVudCIsIiRlbGVtZW50IiwiJCIsInRhZ05hbWUiLCJwcm9wIiwidG9Mb3dlckNhc2UiLCJzcGxpdCIsImluQXJyYXkiLCJwdXNoIiwidGFnIiwic3VwZXIiLCJzcGxpY2UiLCJkb20iLCJzdGFydHNXaXRoIiwiYWRkQ2xhc3MiLCJfdXVpZCIsImNvbmNhdCIsInJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIiLCJjb250cm9sbGVyIiwidXJsIiwidXJsVmFsdWVzIiwia2V5X2lkeCIsIl91cmxQYXJhbXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleSIsInJlIiwiUmVnRXhwIiwidmFsIiwiY29uc29sZSIsIndhcm4iLCJfdGFnTmFtZSIsInJlcGxhY2UiLCJsb2FkSFRNTEZpbGUiLCJhcmdzIiwiY29udGVudFVybCIsImNvbnRlbnRSZWxvYWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlZFUlNJT04iLCJfbWV0aG9kIiwiZ2V0IiwidGhlbiIsImRhdGEiLCJjYXRjaCIsImVyciIsInN0YXR1cyIsInJlc3BvbnNlSlNPTiIsImNvbmZpcm1QYWdlTG9hZGVkIiwiY29udHJvbGxlcl9uYW1lIiwicmVzcG9uc2VUZXh0IiwicmVwbGFjZUFsbFRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJwcm9jZXNzIiwicmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJ0YWdOYW1lcyIsInBhcnNlQ29udGVudFVybCIsImxlbmd0aCIsIm1hdGNoZXMiLCJleGVjIiwicGFyYW1zIiwicGFyc2VkQ29udGVudFVybCIsImdldENvbnRyb2xsZXIiLCIkZWxlbSIsImhhc0NsYXNzIiwiY2xvc2VzdCIsImxvYWRGaWxlc0Zyb21Db250cm9sbGVyIiwiZ2V0RWxlbWVudHMiLCJhbGwiLCJyZXN1bHRzIiwiaHRtbEZpbGUiLCJhcHBlbmQiLCJyZWxvYWRIVE1MQ29udHJvbGxlciIsInJ1blJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwic3VwZXJUYWdOYW1lTGlzdCIsInJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudCIsIiRodG1sIiwiZW1wdHkiLCJhdHRyIiwibWl4aW5LZXkiLCJfbWl4aW5zIiwidGFnTGlzdCIsInRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMiLCJ0YWdDb3VudCIsImVsZW1lbnRJbmRleCIsInJlbG9hZE1ldGhvZEhUTUwiLCJfcmVsb2FkTWV0aG9kSFRNTCIsIiRkb20iLCJwbGlzdCIsImZpbmQiLCIkdGhpcyIsInJlc3VsdCIsInVuZGVmaW5lZCIsImNvbnRyb2xsZXJfaGFuZGxlciIsIm5ld0RhdGEiLCJiaW5kIiwieCIsIiRuZXdDb250ZW50IiwiaHRtbCIsInJlY29uY2lsZSIsImdldE5vZGVLZXkiLCJub2RlIiwibm9kZVR5cGUiLCJub2RlVmFsdWUiLCJyZXMiLCJub2RlTmFtZSIsImZvckVhY2giLCJkZWZhdWx0VmFsdWUiLCJqb2luIiwicmVjb25jaWxlVHJlZSIsImlkIiwicGFyZW50Iiwib2JqIiwiZGVwdGgiLCJpZHgiLCJnZXRSZWFsUGFyZW50IiwiZ2V0SWR4IiwiTWF0aCIsIm1heCIsImluZGV4Iiwib3AiLCJjb250ZW50cyIsInRvQXJyYXkiLCJtYXAiLCJzbGljZSIsImZsYXQiLCIkdmlydHVhbE5vZGUiLCIkcmVhbE5vZGUiLCIkb2xkIiwiJG5ldyIsImkiLCJvcF9zdGVwcyIsImxjYkRpZmYiLCJ0b1JlbW92ZSIsIndpbmRvdyIsIk1BSU4iLCJPUFMiLCJvcF9zdGVwIiwidHlwZSIsImNJZHgiLCJjb3VudGVycGFydCIsImVsZW1CZWZvcmUiLCJnZXRCZWZvcmUiLCJwcmVwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJzeW5jQXR0cmlidXRlcyIsInNhZmVSZW1vdmUiLCJhZnRlciIsInRhcmdldCIsIiRyZWFsIiwiJHZpcnR1YWwiLCJyZWFsQXR0cnMiLCJhdHRyaWJ1dGVzIiwidmlydHVhbEF0dHJzIiwiaXMiLCJuYW1lIiwicmVtb3ZlQXR0ciIsInZhbHVlIiwicmVtb3ZlRGF0YSIsIk9iamVjdCIsImVudHJpZXMiLCJvbGROb2RlcyIsIm5ld05vZGVzIiwiZmlsdGVyIiwibmV3Tm9kZSIsIm9sZE5vZGUiLCJ0ZW1wT2xkTm9kZSIsImtlZXBUcmVlQnJhbmNoIiwic3RhcnREZXB0aCIsInRhZ2dlZCIsInNvcnQiLCJhIiwiYiIsImFWYWwiLCJiVmFsIiwicmVmcmVzaCIsImxlYWZDb250cm9sbGVyIiwicmVmcmVzaFByb2Nlc3MiLCJpc1J1bm5pbmdQcm9jZXNzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_view.js\n\n}");
|
|
137
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CONTROLLER_CLASS: () => (/* binding */ CONTROLLER_CLASS),\n/* harmony export */ DATA_CONTROLLER_KEY: () => (/* binding */ DATA_CONTROLLER_KEY),\n/* harmony export */ cleanCache: () => (/* binding */ cleanCache),\n/* harmony export */ getController: () => (/* binding */ getController),\n/* harmony export */ loadFilesFromController: () => (/* binding */ loadFilesFromController),\n/* harmony export */ reconcile: () => (/* binding */ reconcile),\n/* harmony export */ refresh: () => (/* binding */ refresh),\n/* harmony export */ reloadHTMLController: () => (/* binding */ reloadHTMLController),\n/* harmony export */ reloadMethodHTML: () => (/* binding */ reloadMethodHTML),\n/* harmony export */ replaceTagElementsInContainer: () => (/* binding */ replaceTagElementsInContainer),\n/* harmony export */ runControllerFillContent: () => (/* binding */ runControllerFillContent)\n/* harmony export */ });\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\n\n\n\n/**\n * List of HTML files.\n * @type {{}}\n */\nlet htmlFiles = {};\n\nconst DATA_CONTROLLER_KEY = \"_controller_\";\nconst CONTROLLER_CLASS = \"_sdc_controller_\";\n\nfunction cleanCache() {\n htmlFiles = {};\n}\n\n/**\n * findSdcTgs Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. It collects all those\n * doms and returns a list of objects containing also the tag name the dom and the tag\n * names of the super controller\n *\n * @param {jquery} $container - jQuery container\n * @param {Array<string>} tagNameList - a string list with tag names.\n * @param {AbstractSDC} parentController - controller in surrounding\n * @return {Array} - a array of objects with all register tags found\n */\nfunction findSdcTgs($container, tagNameList, parentController) {\n if (!$container) {\n return [];\n }\n let $children = $container.children();\n let emptyList = [];\n $children.each(function (_, element) {\n let $element = $(element);\n let tagName = $element.prop(\"tagName\").toLowerCase().split(\"_\");\n if ($.inArray(tagName[0], tagNameList) >= 0) {\n emptyList.push({\n tag: tagName[0],\n super: tagName.splice(1) || [],\n dom: $element,\n });\n } else if (tagName[0].startsWith(\"this.\")) {\n $element.addClass(\n `_bind_to_update_handler sdc_uuid_${parentController._uuid}`,\n );\n } else {\n emptyList = emptyList.concat(\n findSdcTgs($element, tagNameList, parentController),\n );\n }\n });\n\n return emptyList;\n}\n\n/**\n * replacePlaceholderController fills the parameter of the content\n * url this function uses the tag parameter\n *\n * @param controller - controller object\n * @param url - the origin content URL\n * @param urlValues - values for the url placeholder. In same order!!\n * @returns {string} - the correct URL with prefix.\n */\nfunction replacePlaceholderController(controller, url, urlValues) {\n for (let key_idx in controller._urlParams) {\n if (controller._urlParams.hasOwnProperty(key_idx)) {\n let key = controller._urlParams[key_idx];\n let re = RegExp(\"%\\\\(\" + key + \"\\\\)\\\\w\", \"gm\");\n const val = urlValues[key];\n if(!val) {\n console.warn(`${key} is not set for controller ${ controller._tagName }`);\n }\n url = url.replace(re, val);\n }\n }\n\n return url;\n}\n\n/**\n * loadHTMLFile loads the HTML content file from the server via ajax request.\n *\n * If the HTML file is loaded already the function takes no action.\n *\n * @param {AbstractSDC} controller - a content URL from the controller.\n * @param {object} args - get args.\n * @returns {Promise<jQuery|Boolean>} - waits for the file to be loaded.\n */\nfunction loadHTMLFile(controller, args) {\n const { contentUrl, _tagName, contentReload } = controller;\n if (!contentUrl) {\n return Promise.resolve(false);\n } else if (htmlFiles[_tagName]) {\n return Promise.resolve(htmlFiles[_tagName]);\n }\n\n args.VERSION = _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.VERSION;\n args._method = \"content\";\n\n return $.get(contentUrl, args)\n .then(function (data) {\n if (!contentReload) {\n htmlFiles[_tagName] = data;\n }\n\n return data;\n })\n .catch(function (err) {\n if (err.status === 301) {\n const data = err.responseJSON;\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)(\"_RedirectOnView\", data[\"url-link\"]);\n if (!contentReload) {\n controller.autoRedirect = data[\"url-link\"];\n }\n return '<p>Redirected</p>';\n }\n controller.autoRedirect = null;\n if (typeof controller.confirmPageLoaded === \"function\") {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)(\"navLoaded\", { controller_name: () => err.status });\n }\n\n throw `<sdc-error data-code=\"${err.status}\">${err.responseText}</sdc-error>`;\n });\n}\n\n/**\n * replaceAllTagElementsInContainer replaces all registered tags by the controller.\n * In this step the life-cycle starts.\n *\n * @param {jquery} $container - given container\n * @param {AbstractSDC} parentController - parent contoller surrounded the container\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceAllTagElementsInContainer(\n $container,\n parentController,\n process = null,\n) {\n parentController = parentController || $container.data(DATA_CONTROLLER_KEY);\n return replaceTagElementsInContainer(\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames,\n $container,\n parentController,\n process,\n );\n}\n\n/**\n * parseContentUrl uses the content URL prefix to marge the\n * correct URL. Also parses the url parameter\n *\n * @param {AbstractSDC} controller - controller object\n * @returns {{url: String, args: Array}} - the correct URL with prefix.\n */\nfunction parseContentUrl(controller) {\n let url = controller.contentUrl;\n if (controller && controller._urlParams.length === 0) {\n let re = /%\\(([^)]+)\\)\\w/gm;\n let matches;\n controller._urlParams = [];\n while ((matches = re.exec(url))) {\n controller._urlParams.push(matches[1]);\n controller.contentReload = true;\n }\n }\n\n let { args, params } = (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_1__.getUrlParam)(controller, controller.$container);\n if (controller._urlParams.length) {\n url = replacePlaceholderController(controller, url, params);\n }\n\n controller.parsedContentUrl = url;\n\n return { url: url, args };\n}\n\n/**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\nfunction getController($elem) {\n if ($elem.hasClass(CONTROLLER_CLASS)) {\n return $elem.data(`${DATA_CONTROLLER_KEY}`);\n }\n return $elem.closest(`.${CONTROLLER_CLASS}`).data(`${DATA_CONTROLLER_KEY}`);\n}\n\n/**\n * loadFilesFromController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n * The content is saved as jQuery object to the controller.$content property of\n * the controller.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction loadFilesFromController(controller) {\n let getElements = { args: {} };\n if (controller.contentUrl) {\n getElements = parseContentUrl(controller);\n controller.contentUrl = getElements.url;\n }\n\n return Promise.all([loadHTMLFile(controller, getElements.args)]).then(\n function (results) {\n let htmlFile = results[0];\n if (htmlFile) {\n try {\n return $(htmlFile);\n } catch {\n return $(\"<div></div>\").append(htmlFile);\n }\n }\n\n return null;\n },\n );\n}\n\n/**\n * reloadHTMLController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n *\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction reloadHTMLController(controller) {\n if (controller.contentUrl) {\n let getElements = parseContentUrl(controller);\n controller.contentUrl = getElements.url;\n return loadHTMLFile(controller, getElements.args);\n }\n\n return new Promise((resolve) => {\n resolve($());\n });\n}\n\n/**\n *\n * @param {jquery} $element\n * @param {string} tagName\n * @param {Array<string>} superTagNameList\n * @param {AbstractSDC} parentController\n * @param {Object} process - Process object containing the refresh process\n * @returns {Promise}\n */\nfunction runReplaceTagElementsInContainer(\n $element,\n tagName,\n superTagNameList,\n parentController,\n process,\n) {\n let controller = $element.data(DATA_CONTROLLER_KEY);\n if (controller) {\n return replaceAllTagElementsInContainer($element, controller, process);\n }\n\n\n controller = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.controllerFactory)(\n parentController,\n $element,\n tagName,\n superTagNameList,\n );\n $element.data(DATA_CONTROLLER_KEY, controller);\n $element.addClass(CONTROLLER_CLASS);\n return (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.runControlFlowFunctions)(controller, process);\n}\n\n/**\n * runControllerFillContent empties the registered tag and replaces it by the controller\n * content. It sets the CSS tags for the relation with the CSS files.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise}\n */\nfunction runControllerFillContent(controller, $html, process = null) {\n if ($html && $html.length > 0) {\n controller.$container.empty();\n controller.$container.attr(controller._tagName, \"\");\n for (let mixinKey in controller._mixins) {\n controller.$container.attr(controller._mixins[mixinKey]._tagName, \"\");\n }\n controller.$container.append($html);\n }\n\n return replaceAllTagElementsInContainer(\n controller.$container,\n controller,\n process,\n );\n}\n\n/**\n * replaceTagElementsInContainer Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. For each registered tag it loads the content.\n * Afterwards it starts the life cycle of the controller. I the next step it starts the\n * procedure for the child elements of the controller tag.\n *\n * @param {Array<string>} tagList - list of all registered tags\n * @param {jquery} $container - jQuery container to find the tags\n * @param {AbstractSDC} parentController - controller in surrounding\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceTagElementsInContainer(\n tagList,\n $container,\n parentController,\n process,\n) {\n return new Promise((resolve) => {\n let tagDescriptionElements = findSdcTgs(\n $container,\n tagList,\n parentController,\n );\n let tagCount = tagDescriptionElements.length;\n\n if (tagCount === 0) {\n return resolve();\n }\n\n for (\n let elementIndex = 0;\n elementIndex < tagDescriptionElements.length;\n elementIndex++\n ) {\n runReplaceTagElementsInContainer(\n tagDescriptionElements[elementIndex].dom,\n tagDescriptionElements[elementIndex].tag,\n tagDescriptionElements[elementIndex].super,\n parentController,\n process,\n ).then(() => {\n tagCount--;\n if (tagCount === 0) {\n return resolve();\n }\n });\n }\n });\n}\n\nfunction reloadMethodHTML(controller, $container, process) {\n return _reloadMethodHTML(\n controller,\n $container ?? controller.$container,\n process,\n );\n}\n\nfunction _reloadMethodHTML(controller, $dom, process) {\n const plist = [];\n\n $dom\n .find(`._bind_to_update_handler.sdc_uuid_${controller._uuid}`)\n .each(function () {\n const $this = $(this);\n let result = undefined;\n if ($this.hasClass(`_with_handler`)) {\n result = $this.data(\"handler\");\n } else {\n let controller_handler = this.tagName\n .toLowerCase()\n .replace(/^this./, \"\");\n if (controller[controller_handler]) {\n result = controller[controller_handler];\n }\n }\n\n if (typeof result === \"function\") {\n const newData = (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_1__.prepareData)($this.data(), controller);\n result = result.bind(controller)(newData);\n }\n if (result) {\n plist.push(\n Promise.resolve(result).then((x) => {\n let $newContent = $(`<div></div>`);\n $newContent.append(x);\n\n if ($this.html() === \"\") {\n $this.append(\"<div></div>\");\n }\n\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.reconcile(\n controller,\n $newContent,\n $this.children(),\n process,\n );\n }),\n );\n }\n });\n\n return Promise.all(plist);\n}\n\nfunction getNodeKey(node) {\n if (node[0].nodeType === 3) {\n return `TEXT__${node[0].nodeValue}`;\n }\n const res = [node[0].tagName];\n if (node[0].nodeName === \"INPUT\") {\n [\n [\"name\", \"\"],\n [\"type\", \"text\"],\n [\"id\", \"\"],\n ].forEach(([key, defaultValue]) => {\n const attr = node.attr(key) ?? defaultValue;\n if (attr) {\n res.push(attr);\n }\n });\n }\n return res.join(\"__\");\n}\n\nfunction reconcileTree({ $element, id = [], parent = null }) {\n id.push(getNodeKey($element));\n const obj = {\n $element,\n id: id.join(\"::\"),\n depth: id.length,\n idx: 0,\n getRealParent: () => parent,\n getIdx: function () {\n this.idx = Math.max(\n 0,\n (this.getRealParent()?.getIdx() ?? -1) + $element.index() + 1,\n );\n return this.idx;\n },\n op: null,\n parent,\n };\n obj.getIdx.bind(obj);\n return [obj].concat(\n $element\n .contents()\n .toArray()\n .map((x) =>\n reconcileTree({\n $element: $(x),\n id: id.slice(),\n parent: obj,\n }),\n )\n .flat(),\n );\n}\n\nfunction reconcile($virtualNode, $realNode) {\n const $old = reconcileTree({ $element: $realNode });\n const $new = reconcileTree({ $element: $virtualNode });\n $old.map((x, i) => (x.idx = i));\n $new.map((x, i) => (x.idx = i));\n const depth = Math.max(...$new.concat($old).map((x) => x.depth));\n const op_steps = lcbDiff($old, $new, depth);\n let toRemove = [];\n window.MAIN = $realNode;\n window.OPS = op_steps;\n\n op_steps.forEach((op_step, i) => {\n const { op, $element, idx } = op_step;\n\n if (op.type === \"keep_counterpart\") {\n let cIdx = op.counterpart.getIdx();\n if (cIdx !== idx) {\n const elemBefore = op_step.getBefore();\n if (!elemBefore) {\n op_step.getRealParent().$element.prepend(op.counterpart.$element);\n } else {\n op.counterpart.$element.insertAfter(elemBefore.$element);\n }\n }\n\n syncAttributes(op.counterpart.$element, $element);\n if ($element.hasClass(CONTROLLER_CLASS)) {\n $element.data(DATA_CONTROLLER_KEY).$container = op.counterpart.$element;\n $element.data(DATA_CONTROLLER_KEY, null);\n }\n\n toRemove.push($element);\n } else if (op.type === \"delete\") {\n $element.safeRemove();\n } else if (op.type === \"insert\") {\n const { after, target } = op_step.op;\n if (after) {\n $element.insertAfter(after.$element);\n } else if (target) {\n target.$element.prepend($element);\n }\n }\n });\n\n toRemove.forEach(($element) => $element.safeRemove());\n}\n\nfunction syncAttributes($real, $virtual) {\n const realAttrs = $real[0].attributes ?? [];\n const virtualAttrs = $virtual[0].attributes ?? [];\n // Remove missing attrs\n [...realAttrs].forEach((attr) => {\n if (!$virtual.is(`[${attr.name}]`)) {\n $real.removeAttr(attr.name);\n }\n });\n\n // Add or update\n [...virtualAttrs].forEach((attr) => {\n if (!attr.name.startsWith(`data`) && $real.attr(attr.name) !== attr.value) {\n $real.attr(attr.name, attr.value);\n }\n });\n\n $real.removeData();\n Object.entries($virtual.data()).forEach(([key, value]) => {\n $real.data(key, value);\n });\n}\n\n/**\n * LCB (Longest Common Branch) finds matching branches and reserves them!\n *\n * @param oldNodes\n * @param newNodes\n * @param depth\n * @returns {*|*[]}\n */\nfunction lcbDiff(oldNodes, newNodes, depth) {\n newNodes\n .filter((x) => x.depth === depth && !x.op)\n .forEach((newNode) => {\n const oldNode = oldNodes.find((tempOldNode) => {\n return !tempOldNode.op && tempOldNode.id === newNode.id;\n });\n\n if (oldNode) {\n const keepTreeBranch = (oldNode, newNode) => {\n oldNode.op = { type: \"keep\", idx: newNode.idx };\n newNode.op = { type: \"keep_counterpart\", counterpart: oldNode };\n oldNode = oldNode.parent;\n newNode = newNode.parent;\n if (!oldNode || oldNode.op || newNode?.op) {\n return;\n }\n keepTreeBranch(oldNode, newNode);\n };\n keepTreeBranch(oldNode, newNode);\n }\n });\n if (depth > 1) {\n return lcbDiff(oldNodes, newNodes, depth - 1);\n }\n\n oldNodes.forEach((x, i) => {\n if (!x.op) {\n const idx = (oldNodes[i - 1]?.op.idx ?? -1) + 1;\n x.op = { type: \"delete\", idx };\n }\n });\n\n function getRealParent(element) {\n if (!element.parent) {\n return null;\n }\n return element.parent.op.type === \"keep_counterpart\"\n ? element.parent.op.counterpart\n : element.parent;\n }\n\n function getBefore(element, idx) {\n const startDepth = element.depth;\n while (idx >= 1 && element.depth >= startDepth) {\n idx -= 1;\n element = newNodes[idx];\n if (element.depth === startDepth) {\n return element.op.type === \"keep_counterpart\"\n ? element.op.counterpart\n : element;\n }\n }\n\n return null;\n }\n\n newNodes.forEach((x, i) => {\n x.getBefore = () => getBefore(x, i);\n x.getRealParent = () => getRealParent(x);\n\n if (!x.op) {\n const target = x.getRealParent();\n const type = target?.op.type === \"insert\" ? \"insert_ignore\" : \"insert\";\n x.op = { type, target, after: x.getBefore() };\n }\n });\n\n const tagged = [...oldNodes, ...newNodes];\n\n return tagged.sort((a, b) => {\n const aVal = a.op?.idx ?? a.idx;\n const bVal = b.op?.idx ?? b.idx;\n\n return aVal - bVal;\n });\n}\n\n/**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise<void>}\n */\n\nfunction refresh($dom, leafController, process = null) {\n if (!leafController) {\n leafController = getController($dom);\n }\n\n if (!leafController) {\n return Promise.resolve();\n }\n\n const { refreshProcess, isRunningProcess } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.prepareRefreshProcess)(\n process,\n leafController,\n );\n\n $dom ??= leafController.$container;\n\n return replaceTagElementsInContainer(\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames,\n $dom,\n leafController,\n process,\n ).then(() => {\n return reloadMethodHTML(leafController, $dom, refreshProcess).then(() => {\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n });\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLGFBQWE7QUFDeEIsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjs7QUFFTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxtQ0FBbUMsRUFBRSx5RUFBcUI7QUFDcEU7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsSUFBSSw2Q0FBRztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsa0ZBQThCO0FBQ3RDO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdmlldy5qcz9jYTAwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNvbnRyb2xsZXJGYWN0b3J5LFxuICBwcmVwYXJlUmVmcmVzaFByb2Nlc3MsXG4gIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zLFxuICB1cGRhdGVFdmVudEFuZFRyaWdnZXJPblJlZnJlc2gsXG59IGZyb20gXCIuL3NkY19jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbSwgcHJlcGFyZURhdGEgfSBmcm9tIFwiLi9zZGNfcGFyYW1zLmpzXCI7XG5pbXBvcnQgeyBhcHAgfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuaW1wb3J0IHsgdHJpZ2dlciB9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcblxuLyoqXG4gKiBMaXN0IG9mIEhUTUwgZmlsZXMuXG4gKiBAdHlwZSB7e319XG4gKi9cbmxldCBodG1sRmlsZXMgPSB7fTtcblxuZXhwb3J0IGNvbnN0IERBVEFfQ09OVFJPTExFUl9LRVkgPSBcIl9jb250cm9sbGVyX1wiO1xuZXhwb3J0IGNvbnN0IENPTlRST0xMRVJfQ0xBU1MgPSBcIl9zZGNfY29udHJvbGxlcl9cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuQ2FjaGUoKSB7XG4gIGh0bWxGaWxlcyA9IHt9O1xufVxuXG4vKipcbiAqIGZpbmRTZGNUZ3MgRmluZHMgYWxsIHJlZ2lzdGVyZWQgdGFncyBpbiBhIGNvbnRhaW5lci4gQnV0IGl0IGlnbm9yZXNcbiAqIHJlZ2lzdGVyZWQgdGFncyBpbiByZWdpc3RlcmVkIHRhZ3MuIEl0IGNvbGxlY3RzIGFsbCB0aG9zZVxuICogZG9tcyBhbmQgcmV0dXJucyBhIGxpc3Qgb2Ygb2JqZWN0cyBjb250YWluaW5nIGFsc28gdGhlIHRhZyBuYW1lIHRoZSBkb20gYW5kIHRoZSB0YWdcbiAqIG5hbWVzIG9mIHRoZSBzdXBlciBjb250cm9sbGVyXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRjb250YWluZXIgLSBqUXVlcnkgY29udGFpbmVyXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHRhZ05hbWVMaXN0IC0gYSBzdHJpbmcgbGlzdCB3aXRoIHRhZyBuYW1lcy5cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBjb250cm9sbGVyIGluIHN1cnJvdW5kaW5nXG4gKiBAcmV0dXJuIHtBcnJheX0gLSBhIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhbGwgcmVnaXN0ZXIgdGFncyBmb3VuZFxuICovXG5mdW5jdGlvbiBmaW5kU2RjVGdzKCRjb250YWluZXIsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSB7XG4gIGlmICghJGNvbnRhaW5lcikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgJGNoaWxkcmVuID0gJGNvbnRhaW5lci5jaGlsZHJlbigpO1xuICBsZXQgZW1wdHlMaXN0ID0gW107XG4gICRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uIChfLCBlbGVtZW50KSB7XG4gICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICBsZXQgdGFnTmFtZSA9ICRlbGVtZW50LnByb3AoXCJ0YWdOYW1lXCIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCJfXCIpO1xuICAgIGlmICgkLmluQXJyYXkodGFnTmFtZVswXSwgdGFnTmFtZUxpc3QpID49IDApIHtcbiAgICAgIGVtcHR5TGlzdC5wdXNoKHtcbiAgICAgICAgdGFnOiB0YWdOYW1lWzBdLFxuICAgICAgICBzdXBlcjogdGFnTmFtZS5zcGxpY2UoMSkgfHwgW10sXG4gICAgICAgIGRvbTogJGVsZW1lbnQsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRhZ05hbWVbMF0uc3RhcnRzV2l0aChcInRoaXMuXCIpKSB7XG4gICAgICAkZWxlbWVudC5hZGRDbGFzcyhcbiAgICAgICAgYF9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyIHNkY191dWlkXyR7cGFyZW50Q29udHJvbGxlci5fdXVpZH1gLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1wdHlMaXN0ID0gZW1wdHlMaXN0LmNvbmNhdChcbiAgICAgICAgZmluZFNkY1RncygkZWxlbWVudCwgdGFnTmFtZUxpc3QsIHBhcmVudENvbnRyb2xsZXIpLFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbXB0eUxpc3Q7XG59XG5cbi8qKlxuICogcmVwbGFjZVBsYWNlaG9sZGVyQ29udHJvbGxlciBmaWxscyB0aGUgcGFyYW1ldGVyIG9mIHRoZSBjb250ZW50XG4gKiB1cmwgdGhpcyBmdW5jdGlvbiB1c2VzIHRoZSB0YWcgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIGNvbnRyb2xsZXIgLSBjb250cm9sbGVyIG9iamVjdFxuICogQHBhcmFtIHVybCAtIHRoZSBvcmlnaW4gY29udGVudCBVUkxcbiAqIEBwYXJhbSB1cmxWYWx1ZXMgLSB2YWx1ZXMgZm9yIHRoZSB1cmwgcGxhY2Vob2xkZXIuIEluIHNhbWUgb3JkZXIhIVxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgY29ycmVjdCBVUkwgd2l0aCBwcmVmaXguXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCB1cmxWYWx1ZXMpIHtcbiAgZm9yIChsZXQga2V5X2lkeCBpbiBjb250cm9sbGVyLl91cmxQYXJhbXMpIHtcbiAgICBpZiAoY29udHJvbGxlci5fdXJsUGFyYW1zLmhhc093blByb3BlcnR5KGtleV9pZHgpKSB7XG4gICAgICBsZXQga2V5ID0gY29udHJvbGxlci5fdXJsUGFyYW1zW2tleV9pZHhdO1xuICAgICAgbGV0IHJlID0gUmVnRXhwKFwiJVxcXFwoXCIgKyBrZXkgKyBcIlxcXFwpXFxcXHdcIiwgXCJnbVwiKTtcbiAgICAgIGNvbnN0IHZhbCA9IHVybFZhbHVlc1trZXldO1xuICAgICAgaWYoIXZhbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYCR7a2V5fSBpcyBub3Qgc2V0IGZvciBjb250cm9sbGVyICR7IGNvbnRyb2xsZXIuX3RhZ05hbWUgfWApO1xuICAgICAgfVxuICAgICAgdXJsID0gdXJsLnJlcGxhY2UocmUsIHZhbCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuLyoqXG4gKiBsb2FkSFRNTEZpbGUgbG9hZHMgdGhlIEhUTUwgY29udGVudCBmaWxlIGZyb20gdGhlIHNlcnZlciB2aWEgYWpheCByZXF1ZXN0LlxuICpcbiAqIElmIHRoZSBIVE1MIGZpbGUgaXMgbG9hZGVkIGFscmVhZHkgdGhlIGZ1bmN0aW9uIHRha2VzIG5vIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0gYSBjb250ZW50IFVSTCBmcm9tIHRoZSBjb250cm9sbGVyLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBnZXQgYXJncy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGpRdWVyeXxCb29sZWFuPn0gLSB3YWl0cyBmb3IgdGhlIGZpbGUgdG8gYmUgbG9hZGVkLlxuICovXG5mdW5jdGlvbiBsb2FkSFRNTEZpbGUoY29udHJvbGxlciwgYXJncykge1xuICBjb25zdCB7IGNvbnRlbnRVcmwsIF90YWdOYW1lLCBjb250ZW50UmVsb2FkIH0gPSBjb250cm9sbGVyO1xuICBpZiAoIWNvbnRlbnRVcmwpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgfSBlbHNlIGlmIChodG1sRmlsZXNbX3RhZ05hbWVdKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShodG1sRmlsZXNbX3RhZ05hbWVdKTtcbiAgfVxuXG4gIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICBhcmdzLl9tZXRob2QgPSBcImNvbnRlbnRcIjtcblxuICByZXR1cm4gJC5nZXQoY29udGVudFVybCwgYXJncylcbiAgICAudGhlbihmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgaWYgKCFjb250ZW50UmVsb2FkKSB7XG4gICAgICAgIGh0bWxGaWxlc1tfdGFnTmFtZV0gPSBkYXRhO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KVxuICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gMzAxKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBlcnIucmVzcG9uc2VKU09OO1xuICAgICAgICB0cmlnZ2VyKFwiX1JlZGlyZWN0T25WaWV3XCIsIGRhdGFbXCJ1cmwtbGlua1wiXSk7XG4gICAgICAgIGlmICghY29udGVudFJlbG9hZCkge1xuICAgICAgICAgIGNvbnRyb2xsZXIuYXV0b1JlZGlyZWN0ID0gZGF0YVtcInVybC1saW5rXCJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnPHA+UmVkaXJlY3RlZDwvcD4nO1xuICAgICAgfVxuICAgICAgY29udHJvbGxlci5hdXRvUmVkaXJlY3QgPSBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBjb250cm9sbGVyLmNvbmZpcm1QYWdlTG9hZGVkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJpZ2dlcihcIm5hdkxvYWRlZFwiLCB7IGNvbnRyb2xsZXJfbmFtZTogKCkgPT4gZXJyLnN0YXR1cyB9KTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgYDxzZGMtZXJyb3IgZGF0YS1jb2RlPVwiJHtlcnIuc3RhdHVzfVwiPiR7ZXJyLnJlc3BvbnNlVGV4dH08L3NkYy1lcnJvcj5gO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyIHJlcGxhY2VzIGFsbCByZWdpc3RlcmVkIHRhZ3MgYnkgdGhlIGNvbnRyb2xsZXIuXG4gKiBJbiB0aGlzIHN0ZXAgdGhlIGxpZmUtY3ljbGUgc3RhcnRzLlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0gZ2l2ZW4gY29udGFpbmVyXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gcGFyZW50IGNvbnRvbGxlciBzdXJyb3VuZGVkIHRoZSBjb250YWluZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyKFxuICAkY29udGFpbmVyLFxuICBwYXJlbnRDb250cm9sbGVyLFxuICBwcm9jZXNzID0gbnVsbCxcbikge1xuICBwYXJlbnRDb250cm9sbGVyID0gcGFyZW50Q29udHJvbGxlciB8fCAkY29udGFpbmVyLmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSk7XG4gIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihcbiAgICBhcHAudGFnTmFtZXMsXG4gICAgJGNvbnRhaW5lcixcbiAgICBwYXJlbnRDb250cm9sbGVyLFxuICAgIHByb2Nlc3MsXG4gICk7XG59XG5cbi8qKlxuICogcGFyc2VDb250ZW50VXJsIHVzZXMgdGhlIGNvbnRlbnQgVVJMIHByZWZpeCB0byBtYXJnZSB0aGVcbiAqIGNvcnJlY3QgVVJMLiBBbHNvIHBhcnNlcyB0aGUgdXJsIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBjb250cm9sbGVyIG9iamVjdFxuICogQHJldHVybnMge3t1cmw6IFN0cmluZywgYXJnczogQXJyYXl9fSAtIHRoZSBjb3JyZWN0IFVSTCB3aXRoIHByZWZpeC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIpIHtcbiAgbGV0IHVybCA9IGNvbnRyb2xsZXIuY29udGVudFVybDtcbiAgaWYgKGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci5fdXJsUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIGxldCByZSA9IC8lXFwoKFteKV0rKVxcKVxcdy9nbTtcbiAgICBsZXQgbWF0Y2hlcztcbiAgICBjb250cm9sbGVyLl91cmxQYXJhbXMgPSBbXTtcbiAgICB3aGlsZSAoKG1hdGNoZXMgPSByZS5leGVjKHVybCkpKSB7XG4gICAgICBjb250cm9sbGVyLl91cmxQYXJhbXMucHVzaChtYXRjaGVzWzFdKTtcbiAgICAgIGNvbnRyb2xsZXIuY29udGVudFJlbG9hZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbGV0IHsgYXJncywgcGFyYW1zIH0gPSBnZXRVcmxQYXJhbShjb250cm9sbGVyLCBjb250cm9sbGVyLiRjb250YWluZXIpO1xuICBpZiAoY29udHJvbGxlci5fdXJsUGFyYW1zLmxlbmd0aCkge1xuICAgIHVybCA9IHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCBwYXJhbXMpO1xuICB9XG5cbiAgY29udHJvbGxlci5wYXJzZWRDb250ZW50VXJsID0gdXJsO1xuXG4gIHJldHVybiB7IHVybDogdXJsLCBhcmdzIH07XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICogQHJldHVybiB7QWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sbGVyKCRlbGVtKSB7XG4gIGlmICgkZWxlbS5oYXNDbGFzcyhDT05UUk9MTEVSX0NMQVNTKSkge1xuICAgIHJldHVybiAkZWxlbS5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCk7XG4gIH1cbiAgcmV0dXJuICRlbGVtLmNsb3Nlc3QoYC4ke0NPTlRST0xMRVJfQ0xBU1N9YCkuZGF0YShgJHtEQVRBX0NPTlRST0xMRVJfS0VZfWApO1xufVxuXG4vKipcbiAqIGxvYWRGaWxlc0Zyb21Db250cm9sbGVyIGxvYWRzIHRoZSBjb250ZW50IChIVE1MKSBvZiBhXG4gKiBDb250cm9sbGVyLiBJZiB5b3UgaGF2ZSBhbiBhbHRlcm5hdGl2ZSBjb250ZW50IFVSTCBpcyByZWdpc3RlcmVkLCBmb3IgdGhpc1xuICogY29udHJvbGxlciB0aGUgb3JpZ2luIGNvbnRlbnQgVVJMIGlzIGlnbm9yZWQuXG4gKlxuICogVGhlIGNvbnRlbnQgaXMgc2F2ZWQgYXMgalF1ZXJ5IG9iamVjdCB0byB0aGUgY29udHJvbGxlci4kY29udGVudCBwcm9wZXJ0eSBvZlxuICogdGhlIGNvbnRyb2xsZXIuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGEgaW5zdGFuY2Ugb2YgYSBKYXZhU2NyaXB0IGNvbnRyb2xsZXIgb2JqZWN0LlxuICogQHJldHVybnMge1Byb21pc2U8alF1ZXJ5Pn0gLSB0aGUgcHJvbWlzZSB3YWl0cyB0byB0aGUgZmlsZXMgYXJlIGxvYWRlZC4gaXQgcmV0dXJucyB0aGUgalF1ZXJ5IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlc0Zyb21Db250cm9sbGVyKGNvbnRyb2xsZXIpIHtcbiAgbGV0IGdldEVsZW1lbnRzID0geyBhcmdzOiB7fSB9O1xuICBpZiAoY29udHJvbGxlci5jb250ZW50VXJsKSB7XG4gICAgZ2V0RWxlbWVudHMgPSBwYXJzZUNvbnRlbnRVcmwoY29udHJvbGxlcik7XG4gICAgY29udHJvbGxlci5jb250ZW50VXJsID0gZ2V0RWxlbWVudHMudXJsO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UuYWxsKFtsb2FkSFRNTEZpbGUoY29udHJvbGxlciwgZ2V0RWxlbWVudHMuYXJncyldKS50aGVuKFxuICAgIGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICBsZXQgaHRtbEZpbGUgPSByZXN1bHRzWzBdO1xuICAgICAgaWYgKGh0bWxGaWxlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuICQoaHRtbEZpbGUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gJChcIjxkaXY+PC9kaXY+XCIpLmFwcGVuZChodG1sRmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgKTtcbn1cblxuLyoqXG4gKiByZWxvYWRIVE1MQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0gYSBpbnN0YW5jZSBvZiBhIEphdmFTY3JpcHQgY29udHJvbGxlciBvYmplY3QuXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8alF1ZXJ5Pn0gLSB0aGUgcHJvbWlzZSB3YWl0cyB0byB0aGUgZmlsZXMgYXJlIGxvYWRlZC4gaXQgcmV0dXJucyB0aGUgalF1ZXJ5IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpIHtcbiAgaWYgKGNvbnRyb2xsZXIuY29udGVudFVybCkge1xuICAgIGxldCBnZXRFbGVtZW50cyA9IHBhcnNlQ29udGVudFVybChjb250cm9sbGVyKTtcbiAgICBjb250cm9sbGVyLmNvbnRlbnRVcmwgPSBnZXRFbGVtZW50cy51cmw7XG4gICAgcmV0dXJuIGxvYWRIVE1MRmlsZShjb250cm9sbGVyLCBnZXRFbGVtZW50cy5hcmdzKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHJlc29sdmUoJCgpKTtcbiAgfSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWVcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdFxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlclxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5mdW5jdGlvbiBydW5SZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihcbiAgJGVsZW1lbnQsXG4gIHRhZ05hbWUsXG4gIHN1cGVyVGFnTmFtZUxpc3QsXG4gIHBhcmVudENvbnRyb2xsZXIsXG4gIHByb2Nlc3MsXG4pIHtcbiAgbGV0IGNvbnRyb2xsZXIgPSAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpO1xuICBpZiAoY29udHJvbGxlcikge1xuICAgIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcigkZWxlbWVudCwgY29udHJvbGxlciwgcHJvY2Vzcyk7XG4gIH1cblxuXG4gIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyRmFjdG9yeShcbiAgICBwYXJlbnRDb250cm9sbGVyLFxuICAgICRlbGVtZW50LFxuICAgIHRhZ05hbWUsXG4gICAgc3VwZXJUYWdOYW1lTGlzdCxcbiAgKTtcbiAgJGVsZW1lbnQuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZLCBjb250cm9sbGVyKTtcbiAgJGVsZW1lbnQuYWRkQ2xhc3MoQ09OVFJPTExFUl9DTEFTUyk7XG4gIHJldHVybiBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyhjb250cm9sbGVyLCBwcm9jZXNzKTtcbn1cblxuLyoqXG4gKiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQgZW1wdGllcyB0aGUgcmVnaXN0ZXJlZCB0YWcgYW5kIHJlcGxhY2VzIGl0IGJ5IHRoZSBjb250cm9sbGVyXG4gKiBjb250ZW50LiBJdCBzZXRzIHRoZSBDU1MgdGFncyBmb3IgdGhlIHJlbGF0aW9uIHdpdGggdGhlIENTUyBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudChjb250cm9sbGVyLCAkaHRtbCwgcHJvY2VzcyA9IG51bGwpIHtcbiAgaWYgKCRodG1sICYmICRodG1sLmxlbmd0aCA+IDApIHtcbiAgICBjb250cm9sbGVyLiRjb250YWluZXIuZW1wdHkoKTtcbiAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXR0cihjb250cm9sbGVyLl90YWdOYW1lLCBcIlwiKTtcbiAgICBmb3IgKGxldCBtaXhpbktleSBpbiBjb250cm9sbGVyLl9taXhpbnMpIHtcbiAgICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lci5hdHRyKGNvbnRyb2xsZXIuX21peGluc1ttaXhpbktleV0uX3RhZ05hbWUsIFwiXCIpO1xuICAgIH1cbiAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXBwZW5kKCRodG1sKTtcbiAgfVxuXG4gIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcihcbiAgICBjb250cm9sbGVyLiRjb250YWluZXIsXG4gICAgY29udHJvbGxlcixcbiAgICBwcm9jZXNzLFxuICApO1xufVxuXG4vKipcbiAqIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIEZpbmRzIGFsbCByZWdpc3RlcmVkIHRhZ3MgaW4gYSBjb250YWluZXIuIEJ1dCBpdCBpZ25vcmVzXG4gKiByZWdpc3RlcmVkIHRhZ3MgaW4gcmVnaXN0ZXJlZCB0YWdzLiBGb3IgZWFjaCByZWdpc3RlcmVkIHRhZyBpdCBsb2FkcyB0aGUgY29udGVudC5cbiAqIEFmdGVyd2FyZHMgaXQgc3RhcnRzIHRoZSBsaWZlIGN5Y2xlIG9mIHRoZSBjb250cm9sbGVyLiBJIHRoZSBuZXh0IHN0ZXAgaXQgc3RhcnRzIHRoZVxuICogcHJvY2VkdXJlIGZvciB0aGUgY2hpbGQgZWxlbWVudHMgb2YgdGhlIGNvbnRyb2xsZXIgdGFnLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdGFnTGlzdCAtIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgdGFnc1xuICogQHBhcmFtIHtqcXVlcnl9ICRjb250YWluZXIgLSBqUXVlcnkgY29udGFpbmVyIHRvIGZpbmQgdGhlIHRhZ3NcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBjb250cm9sbGVyIGluIHN1cnJvdW5kaW5nXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoXG4gIHRhZ0xpc3QsXG4gICRjb250YWluZXIsXG4gIHBhcmVudENvbnRyb2xsZXIsXG4gIHByb2Nlc3MsXG4pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgbGV0IHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMgPSBmaW5kU2RjVGdzKFxuICAgICAgJGNvbnRhaW5lcixcbiAgICAgIHRhZ0xpc3QsXG4gICAgICBwYXJlbnRDb250cm9sbGVyLFxuICAgICk7XG4gICAgbGV0IHRhZ0NvdW50ID0gdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAodGFnQ291bnQgPT09IDApIHtcbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgZm9yIChcbiAgICAgIGxldCBlbGVtZW50SW5kZXggPSAwO1xuICAgICAgZWxlbWVudEluZGV4IDwgdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7XG4gICAgICBlbGVtZW50SW5kZXgrK1xuICAgICkge1xuICAgICAgcnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoXG4gICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS5kb20sXG4gICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS50YWcsXG4gICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS5zdXBlcixcbiAgICAgICAgcGFyZW50Q29udHJvbGxlcixcbiAgICAgICAgcHJvY2VzcyxcbiAgICAgICkudGhlbigoKSA9PiB7XG4gICAgICAgIHRhZ0NvdW50LS07XG4gICAgICAgIGlmICh0YWdDb3VudCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWRNZXRob2RIVE1MKGNvbnRyb2xsZXIsICRjb250YWluZXIsIHByb2Nlc3MpIHtcbiAgcmV0dXJuIF9yZWxvYWRNZXRob2RIVE1MKFxuICAgIGNvbnRyb2xsZXIsXG4gICAgJGNvbnRhaW5lciA/PyBjb250cm9sbGVyLiRjb250YWluZXIsXG4gICAgcHJvY2VzcyxcbiAgKTtcbn1cblxuZnVuY3Rpb24gX3JlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJGRvbSwgcHJvY2Vzcykge1xuICBjb25zdCBwbGlzdCA9IFtdO1xuXG4gICRkb21cbiAgICAuZmluZChgLl9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyLnNkY191dWlkXyR7Y29udHJvbGxlci5fdXVpZH1gKVxuICAgIC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICAgIGxldCByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoJHRoaXMuaGFzQ2xhc3MoYF93aXRoX2hhbmRsZXJgKSkge1xuICAgICAgICByZXN1bHQgPSAkdGhpcy5kYXRhKFwiaGFuZGxlclwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb250cm9sbGVyX2hhbmRsZXIgPSB0aGlzLnRhZ05hbWVcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIC5yZXBsYWNlKC9edGhpcy4vLCBcIlwiKTtcbiAgICAgICAgaWYgKGNvbnRyb2xsZXJbY29udHJvbGxlcl9oYW5kbGVyXSkge1xuICAgICAgICAgIHJlc3VsdCA9IGNvbnRyb2xsZXJbY29udHJvbGxlcl9oYW5kbGVyXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBwcmVwYXJlRGF0YSgkdGhpcy5kYXRhKCksIGNvbnRyb2xsZXIpO1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuYmluZChjb250cm9sbGVyKShuZXdEYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcGxpc3QucHVzaChcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKCh4KSA9PiB7XG4gICAgICAgICAgICBsZXQgJG5ld0NvbnRlbnQgPSAkKGA8ZGl2PjwvZGl2PmApO1xuICAgICAgICAgICAgJG5ld0NvbnRlbnQuYXBwZW5kKHgpO1xuXG4gICAgICAgICAgICBpZiAoJHRoaXMuaHRtbCgpID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICR0aGlzLmFwcGVuZChcIjxkaXY+PC9kaXY+XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYXBwLnJlY29uY2lsZShcbiAgICAgICAgICAgICAgY29udHJvbGxlcixcbiAgICAgICAgICAgICAgJG5ld0NvbnRlbnQsXG4gICAgICAgICAgICAgICR0aGlzLmNoaWxkcmVuKCksXG4gICAgICAgICAgICAgIHByb2Nlc3MsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHJldHVybiBQcm9taXNlLmFsbChwbGlzdCk7XG59XG5cbmZ1bmN0aW9uIGdldE5vZGVLZXkobm9kZSkge1xuICBpZiAobm9kZVswXS5ub2RlVHlwZSA9PT0gMykge1xuICAgIHJldHVybiBgVEVYVF9fJHtub2RlWzBdLm5vZGVWYWx1ZX1gO1xuICB9XG4gIGNvbnN0IHJlcyA9IFtub2RlWzBdLnRhZ05hbWVdO1xuICBpZiAobm9kZVswXS5ub2RlTmFtZSA9PT0gXCJJTlBVVFwiKSB7XG4gICAgW1xuICAgICAgW1wibmFtZVwiLCBcIlwiXSxcbiAgICAgIFtcInR5cGVcIiwgXCJ0ZXh0XCJdLFxuICAgICAgW1wiaWRcIiwgXCJcIl0sXG4gICAgXS5mb3JFYWNoKChba2V5LCBkZWZhdWx0VmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBhdHRyID0gbm9kZS5hdHRyKGtleSkgPz8gZGVmYXVsdFZhbHVlO1xuICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgcmVzLnB1c2goYXR0cik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlcy5qb2luKFwiX19cIik7XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZVRyZWUoeyAkZWxlbWVudCwgaWQgPSBbXSwgcGFyZW50ID0gbnVsbCB9KSB7XG4gIGlkLnB1c2goZ2V0Tm9kZUtleSgkZWxlbWVudCkpO1xuICBjb25zdCBvYmogPSB7XG4gICAgJGVsZW1lbnQsXG4gICAgaWQ6IGlkLmpvaW4oXCI6OlwiKSxcbiAgICBkZXB0aDogaWQubGVuZ3RoLFxuICAgIGlkeDogMCxcbiAgICBnZXRSZWFsUGFyZW50OiAoKSA9PiBwYXJlbnQsXG4gICAgZ2V0SWR4OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmlkeCA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICAodGhpcy5nZXRSZWFsUGFyZW50KCk/LmdldElkeCgpID8/IC0xKSArICRlbGVtZW50LmluZGV4KCkgKyAxLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLmlkeDtcbiAgICB9LFxuICAgIG9wOiBudWxsLFxuICAgIHBhcmVudCxcbiAgfTtcbiAgb2JqLmdldElkeC5iaW5kKG9iaik7XG4gIHJldHVybiBbb2JqXS5jb25jYXQoXG4gICAgJGVsZW1lbnRcbiAgICAgIC5jb250ZW50cygpXG4gICAgICAudG9BcnJheSgpXG4gICAgICAubWFwKCh4KSA9PlxuICAgICAgICByZWNvbmNpbGVUcmVlKHtcbiAgICAgICAgICAkZWxlbWVudDogJCh4KSxcbiAgICAgICAgICBpZDogaWQuc2xpY2UoKSxcbiAgICAgICAgICBwYXJlbnQ6IG9iaixcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuZmxhdCgpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjb25jaWxlKCR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlKSB7XG4gIGNvbnN0ICRvbGQgPSByZWNvbmNpbGVUcmVlKHsgJGVsZW1lbnQ6ICRyZWFsTm9kZSB9KTtcbiAgY29uc3QgJG5ldyA9IHJlY29uY2lsZVRyZWUoeyAkZWxlbWVudDogJHZpcnR1YWxOb2RlIH0pO1xuICAkb2xkLm1hcCgoeCwgaSkgPT4gKHguaWR4ID0gaSkpO1xuICAkbmV3Lm1hcCgoeCwgaSkgPT4gKHguaWR4ID0gaSkpO1xuICBjb25zdCBkZXB0aCA9IE1hdGgubWF4KC4uLiRuZXcuY29uY2F0KCRvbGQpLm1hcCgoeCkgPT4geC5kZXB0aCkpO1xuICBjb25zdCBvcF9zdGVwcyA9IGxjYkRpZmYoJG9sZCwgJG5ldywgZGVwdGgpO1xuICBsZXQgdG9SZW1vdmUgPSBbXTtcbiAgd2luZG93Lk1BSU4gPSAkcmVhbE5vZGU7XG4gIHdpbmRvdy5PUFMgPSBvcF9zdGVwcztcblxuICBvcF9zdGVwcy5mb3JFYWNoKChvcF9zdGVwLCBpKSA9PiB7XG4gICAgY29uc3QgeyBvcCwgJGVsZW1lbnQsIGlkeCB9ID0gb3Bfc3RlcDtcblxuICAgIGlmIChvcC50eXBlID09PSBcImtlZXBfY291bnRlcnBhcnRcIikge1xuICAgICAgbGV0IGNJZHggPSBvcC5jb3VudGVycGFydC5nZXRJZHgoKTtcbiAgICAgIGlmIChjSWR4ICE9PSBpZHgpIHtcbiAgICAgICAgY29uc3QgZWxlbUJlZm9yZSA9IG9wX3N0ZXAuZ2V0QmVmb3JlKCk7XG4gICAgICAgIGlmICghZWxlbUJlZm9yZSkge1xuICAgICAgICAgIG9wX3N0ZXAuZ2V0UmVhbFBhcmVudCgpLiRlbGVtZW50LnByZXBlbmQob3AuY291bnRlcnBhcnQuJGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wLmNvdW50ZXJwYXJ0LiRlbGVtZW50Lmluc2VydEFmdGVyKGVsZW1CZWZvcmUuJGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN5bmNBdHRyaWJ1dGVzKG9wLmNvdW50ZXJwYXJ0LiRlbGVtZW50LCAkZWxlbWVudCk7XG4gICAgICBpZiAoJGVsZW1lbnQuaGFzQ2xhc3MoQ09OVFJPTExFUl9DTEFTUykpIHtcbiAgICAgICAgJGVsZW1lbnQuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZKS4kY29udGFpbmVyID0gb3AuY291bnRlcnBhcnQuJGVsZW1lbnQ7XG4gICAgICAgICRlbGVtZW50LmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRvUmVtb3ZlLnB1c2goJGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAob3AudHlwZSA9PT0gXCJkZWxldGVcIikge1xuICAgICAgJGVsZW1lbnQuc2FmZVJlbW92ZSgpO1xuICAgIH0gZWxzZSBpZiAob3AudHlwZSA9PT0gXCJpbnNlcnRcIikge1xuICAgICAgY29uc3QgeyBhZnRlciwgdGFyZ2V0IH0gPSBvcF9zdGVwLm9wO1xuICAgICAgaWYgKGFmdGVyKSB7XG4gICAgICAgICRlbGVtZW50Lmluc2VydEFmdGVyKGFmdGVyLiRlbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC4kZWxlbWVudC5wcmVwZW5kKCRlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHRvUmVtb3ZlLmZvckVhY2goKCRlbGVtZW50KSA9PiAkZWxlbWVudC5zYWZlUmVtb3ZlKCkpO1xufVxuXG5mdW5jdGlvbiBzeW5jQXR0cmlidXRlcygkcmVhbCwgJHZpcnR1YWwpIHtcbiAgY29uc3QgcmVhbEF0dHJzID0gJHJlYWxbMF0uYXR0cmlidXRlcyA/PyBbXTtcbiAgY29uc3QgdmlydHVhbEF0dHJzID0gJHZpcnR1YWxbMF0uYXR0cmlidXRlcyA/PyBbXTtcbiAgLy8gUmVtb3ZlIG1pc3NpbmcgYXR0cnNcbiAgWy4uLnJlYWxBdHRyc10uZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgIGlmICghJHZpcnR1YWwuaXMoYFske2F0dHIubmFtZX1dYCkpIHtcbiAgICAgICRyZWFsLnJlbW92ZUF0dHIoYXR0ci5uYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEFkZCBvciB1cGRhdGVcbiAgWy4uLnZpcnR1YWxBdHRyc10uZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgIGlmICghYXR0ci5uYW1lLnN0YXJ0c1dpdGgoYGRhdGFgKSAmJiAkcmVhbC5hdHRyKGF0dHIubmFtZSkgIT09IGF0dHIudmFsdWUpIHtcbiAgICAgICRyZWFsLmF0dHIoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gICRyZWFsLnJlbW92ZURhdGEoKTtcbiAgT2JqZWN0LmVudHJpZXMoJHZpcnR1YWwuZGF0YSgpKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAkcmVhbC5kYXRhKGtleSwgdmFsdWUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBMQ0IgKExvbmdlc3QgQ29tbW9uIEJyYW5jaCkgZmluZHMgbWF0Y2hpbmcgYnJhbmNoZXMgYW5kIHJlc2VydmVzIHRoZW0hXG4gKlxuICogQHBhcmFtIG9sZE5vZGVzXG4gKiBAcGFyYW0gbmV3Tm9kZXNcbiAqIEBwYXJhbSBkZXB0aFxuICogQHJldHVybnMgeyp8KltdfVxuICovXG5mdW5jdGlvbiBsY2JEaWZmKG9sZE5vZGVzLCBuZXdOb2RlcywgZGVwdGgpIHtcbiAgbmV3Tm9kZXNcbiAgICAuZmlsdGVyKCh4KSA9PiB4LmRlcHRoID09PSBkZXB0aCAmJiAheC5vcClcbiAgICAuZm9yRWFjaCgobmV3Tm9kZSkgPT4ge1xuICAgICAgY29uc3Qgb2xkTm9kZSA9IG9sZE5vZGVzLmZpbmQoKHRlbXBPbGROb2RlKSA9PiB7XG4gICAgICAgIHJldHVybiAhdGVtcE9sZE5vZGUub3AgJiYgdGVtcE9sZE5vZGUuaWQgPT09IG5ld05vZGUuaWQ7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG9sZE5vZGUpIHtcbiAgICAgICAgY29uc3Qga2VlcFRyZWVCcmFuY2ggPSAob2xkTm9kZSwgbmV3Tm9kZSkgPT4ge1xuICAgICAgICAgIG9sZE5vZGUub3AgPSB7IHR5cGU6IFwia2VlcFwiLCBpZHg6IG5ld05vZGUuaWR4IH07XG4gICAgICAgICAgbmV3Tm9kZS5vcCA9IHsgdHlwZTogXCJrZWVwX2NvdW50ZXJwYXJ0XCIsIGNvdW50ZXJwYXJ0OiBvbGROb2RlIH07XG4gICAgICAgICAgb2xkTm9kZSA9IG9sZE5vZGUucGFyZW50O1xuICAgICAgICAgIG5ld05vZGUgPSBuZXdOb2RlLnBhcmVudDtcbiAgICAgICAgICBpZiAoIW9sZE5vZGUgfHwgb2xkTm9kZS5vcCB8fCBuZXdOb2RlPy5vcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBrZWVwVHJlZUJyYW5jaChvbGROb2RlLCBuZXdOb2RlKTtcbiAgICAgICAgfTtcbiAgICAgICAga2VlcFRyZWVCcmFuY2gob2xkTm9kZSwgbmV3Tm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIGlmIChkZXB0aCA+IDEpIHtcbiAgICByZXR1cm4gbGNiRGlmZihvbGROb2RlcywgbmV3Tm9kZXMsIGRlcHRoIC0gMSk7XG4gIH1cblxuICBvbGROb2Rlcy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgaWYgKCF4Lm9wKSB7XG4gICAgICBjb25zdCBpZHggPSAob2xkTm9kZXNbaSAtIDFdPy5vcC5pZHggPz8gLTEpICsgMTtcbiAgICAgIHgub3AgPSB7IHR5cGU6IFwiZGVsZXRlXCIsIGlkeCB9O1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0UmVhbFBhcmVudChlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50LnBhcmVudC5vcC50eXBlID09PSBcImtlZXBfY291bnRlcnBhcnRcIlxuICAgICAgPyBlbGVtZW50LnBhcmVudC5vcC5jb3VudGVycGFydFxuICAgICAgOiBlbGVtZW50LnBhcmVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJlZm9yZShlbGVtZW50LCBpZHgpIHtcbiAgICBjb25zdCBzdGFydERlcHRoID0gZWxlbWVudC5kZXB0aDtcbiAgICB3aGlsZSAoaWR4ID49IDEgJiYgZWxlbWVudC5kZXB0aCA+PSBzdGFydERlcHRoKSB7XG4gICAgICBpZHggLT0gMTtcbiAgICAgIGVsZW1lbnQgPSBuZXdOb2Rlc1tpZHhdO1xuICAgICAgaWYgKGVsZW1lbnQuZGVwdGggPT09IHN0YXJ0RGVwdGgpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub3AudHlwZSA9PT0gXCJrZWVwX2NvdW50ZXJwYXJ0XCJcbiAgICAgICAgICA/IGVsZW1lbnQub3AuY291bnRlcnBhcnRcbiAgICAgICAgICA6IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBuZXdOb2Rlcy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgeC5nZXRCZWZvcmUgPSAoKSA9PiBnZXRCZWZvcmUoeCwgaSk7XG4gICAgeC5nZXRSZWFsUGFyZW50ID0gKCkgPT4gZ2V0UmVhbFBhcmVudCh4KTtcblxuICAgIGlmICgheC5vcCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0geC5nZXRSZWFsUGFyZW50KCk7XG4gICAgICBjb25zdCB0eXBlID0gdGFyZ2V0Py5vcC50eXBlID09PSBcImluc2VydFwiID8gXCJpbnNlcnRfaWdub3JlXCIgOiBcImluc2VydFwiO1xuICAgICAgeC5vcCA9IHsgdHlwZSwgdGFyZ2V0LCBhZnRlcjogeC5nZXRCZWZvcmUoKSB9O1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdGFnZ2VkID0gWy4uLm9sZE5vZGVzLCAuLi5uZXdOb2Rlc107XG5cbiAgcmV0dXJuIHRhZ2dlZC5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgYVZhbCA9IGEub3A/LmlkeCA/PyBhLmlkeDtcbiAgICBjb25zdCBiVmFsID0gYi5vcD8uaWR4ID8/IGIuaWR4O1xuXG4gICAgcmV0dXJuIGFWYWwgLSBiVmFsO1xuICB9KTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRkb21cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGxlYWZDb250cm9sbGVyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaCgkZG9tLCBsZWFmQ29udHJvbGxlciwgcHJvY2VzcyA9IG51bGwpIHtcbiAgaWYgKCFsZWFmQ29udHJvbGxlcikge1xuICAgIGxlYWZDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkZG9tKTtcbiAgfVxuXG4gIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBjb25zdCB7IHJlZnJlc2hQcm9jZXNzLCBpc1J1bm5pbmdQcm9jZXNzIH0gPSBwcmVwYXJlUmVmcmVzaFByb2Nlc3MoXG4gICAgcHJvY2VzcyxcbiAgICBsZWFmQ29udHJvbGxlcixcbiAgKTtcblxuICAkZG9tID8/PSBsZWFmQ29udHJvbGxlci4kY29udGFpbmVyO1xuXG4gIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihcbiAgICBhcHAudGFnTmFtZXMsXG4gICAgJGRvbSxcbiAgICBsZWFmQ29udHJvbGxlcixcbiAgICBwcm9jZXNzLFxuICApLnRoZW4oKCkgPT4ge1xuICAgIHJldHVybiByZWxvYWRNZXRob2RIVE1MKGxlYWZDb250cm9sbGVyLCAkZG9tLCByZWZyZXNoUHJvY2VzcykudGhlbigoKSA9PiB7XG4gICAgICBpZiAoIWlzUnVubmluZ1Byb2Nlc3MpIHtcbiAgICAgICAgdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoKHJlZnJlc2hQcm9jZXNzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_view.js\n\n}");
|
|
138
138
|
|
|
139
139
|
/***/ }
|
|
140
140
|
|
|
141
141
|
/******/ });
|
|
142
142
|
/************************************************************************/
|
|
143
143
|
/******/ // The module cache
|
|
144
|
-
/******/
|
|
144
|
+
/******/ const __webpack_module_cache__ = {};
|
|
145
145
|
/******/
|
|
146
146
|
/******/ // The require function
|
|
147
147
|
/******/ function __webpack_require__(moduleId) {
|
|
148
148
|
/******/ // Check if module is in cache
|
|
149
|
-
/******/
|
|
149
|
+
/******/ const cachedModule = __webpack_module_cache__[moduleId];
|
|
150
150
|
/******/ if (cachedModule !== undefined) {
|
|
151
151
|
/******/ return cachedModule.exports;
|
|
152
152
|
/******/ }
|
|
153
153
|
/******/ // Create a new module (and put it into the cache)
|
|
154
|
-
/******/
|
|
154
|
+
/******/ const module = __webpack_module_cache__[moduleId] = {
|
|
155
155
|
/******/ // no module.id needed
|
|
156
156
|
/******/ // no module.loaded needed
|
|
157
157
|
/******/ exports: {}
|
|
@@ -160,7 +160,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
160
160
|
/******/ // Execute the module function
|
|
161
161
|
/******/ if (!(moduleId in __webpack_modules__)) {
|
|
162
162
|
/******/ delete __webpack_module_cache__[moduleId];
|
|
163
|
-
/******/
|
|
163
|
+
/******/ const e = new Error("Cannot find module '" + moduleId + "'");
|
|
164
164
|
/******/ e.code = 'MODULE_NOT_FOUND';
|
|
165
165
|
/******/ throw e;
|
|
166
166
|
/******/ }
|
|
@@ -173,11 +173,26 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
173
173
|
/************************************************************************/
|
|
174
174
|
/******/ /* webpack/runtime/define property getters */
|
|
175
175
|
/******/ (() => {
|
|
176
|
-
/******/ // define getter functions for harmony exports
|
|
176
|
+
/******/ // define getter/value functions for harmony exports
|
|
177
177
|
/******/ __webpack_require__.d = (exports, definition) => {
|
|
178
|
-
/******/
|
|
179
|
-
/******/
|
|
180
|
-
/******/
|
|
178
|
+
/******/ if(Array.isArray(definition)) {
|
|
179
|
+
/******/ var i = 0;
|
|
180
|
+
/******/ while(i < definition.length) {
|
|
181
|
+
/******/ var key = definition[i++];
|
|
182
|
+
/******/ var binding = definition[i++];
|
|
183
|
+
/******/ if(!__webpack_require__.o(exports, key)) {
|
|
184
|
+
/******/ if(binding === 0) {
|
|
185
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
|
|
186
|
+
/******/ } else {
|
|
187
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
|
|
188
|
+
/******/ }
|
|
189
|
+
/******/ } else if(binding === 0) { i++; }
|
|
190
|
+
/******/ }
|
|
191
|
+
/******/ } else {
|
|
192
|
+
/******/ for(var key in definition) {
|
|
193
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
194
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
195
|
+
/******/ }
|
|
181
196
|
/******/ }
|
|
182
197
|
/******/ }
|
|
183
198
|
/******/ };
|
|
@@ -192,7 +207,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
192
207
|
/******/ (() => {
|
|
193
208
|
/******/ // define __esModule on exports
|
|
194
209
|
/******/ __webpack_require__.r = (exports) => {
|
|
195
|
-
/******/ if(
|
|
210
|
+
/******/ if(Symbol.toStringTag) {
|
|
196
211
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
197
212
|
/******/ }
|
|
198
213
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
@@ -204,7 +219,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
204
219
|
/******/ // startup
|
|
205
220
|
/******/ // Load entry module and return exports
|
|
206
221
|
/******/ // This entry module is referenced by other modules so it can't be inlined
|
|
207
|
-
/******/
|
|
222
|
+
/******/ let __webpack_exports__ = __webpack_require__("./src/index.js");
|
|
208
223
|
/******/ const __webpack_exports__AbstractSDC = __webpack_exports__.AbstractSDC;
|
|
209
224
|
/******/ const __webpack_exports__SdcModel = __webpack_exports__.SdcModel;
|
|
210
225
|
/******/ const __webpack_exports__SdcQuerySet = __webpack_exports__.SdcQuerySet;
|
|
@@ -224,4 +239,4 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
224
239
|
/******/ export { __webpack_exports__AbstractSDC as AbstractSDC, __webpack_exports__SdcModel as SdcModel, __webpack_exports__SdcQuerySet as SdcQuerySet, __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__registerModel as registerModel, __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 };
|
|
225
240
|
/******/
|
|
226
241
|
|
|
227
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
242
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQUFBO1NBQ0E7O1NBRUE7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7O1NBRUE7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTs7U0FFQTtTQUNBO1NBQ0E7Ozs7O1VDNUJBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBLDJDQUEyQywwQ0FBMEM7VUFDckYsTUFBTTtVQUNOLDJDQUEyQyxnQ0FBZ0M7VUFDM0U7VUFDQSxLQUFLLHlCQUF5QjtVQUM5QjtVQUNBLEdBQUc7VUFDSDtVQUNBO1VBQ0EsMENBQTBDLHdDQUF3QztVQUNsRjtVQUNBO1VBQ0E7VUFDQSxFOzs7OztVQ3RCQSx3Rjs7Ozs7VUNBQTtVQUNBO1VBQ0E7VUFDQSx1REFBdUQsaUJBQWlCO1VBQ3hFO1VBQ0EsZ0RBQWdELGFBQWE7VUFDN0QsRTs7Ozs7U0VOQTtTQUNBO1NBQ0E7U0FDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovLy93ZWJwYWNrL2JlZm9yZS1zdGFydHVwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYWZ0ZXItc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgbW9kdWxlIGNhY2hlXG5jb25zdCBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGNvbnN0IGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHRjb25zdCBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdGlmICghKG1vZHVsZUlkIGluIF9fd2VicGFja19tb2R1bGVzX18pKSB7XG5cdFx0ZGVsZXRlIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdFx0Y29uc3QgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyBtb2R1bGVJZCArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIvdmFsdWUgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGlmKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikpIHtcblx0XHR2YXIgaSA9IDA7XG5cdFx0d2hpbGUoaSA8IGRlZmluaXRpb24ubGVuZ3RoKSB7XG5cdFx0XHR2YXIga2V5ID0gZGVmaW5pdGlvbltpKytdO1xuXHRcdFx0dmFyIGJpbmRpbmcgPSBkZWZpbml0aW9uW2krK107XG5cdFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdFx0aWYoYmluZGluZyA9PT0gMCkge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGRlZmluaXRpb25baSsrXSB9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogYmluZGluZyB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmKGJpbmRpbmcgPT09IDApIHsgaSsrOyB9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxubGV0IF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvaW5kZXguanNcIik7XG4iLCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=
|