@vue/devtools 6.0.13 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/backend.js CHANGED
@@ -23,11 +23,11 @@ eval("/**\n * An abstraction for slicing an arraybuffer even when\n * ArrayBuffe
23
23
 
24
24
  /***/ }),
25
25
 
26
- /***/ 72039:
26
+ /***/ 13508:
27
27
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28
28
 
29
29
  "use strict";
30
- eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"setupDevtoolsPlugin\": () => (/* binding */ setupDevtoolsPlugin)\n});\n\n;// CONCATENATED MODULE: ../api/lib/esm/env.js\nfunction getDevtoolsGlobalHook() {\n return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;\n}\nfunction getTarget() {\n // @ts-ignore\n return typeof navigator !== 'undefined' && typeof window !== 'undefined' ? window : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : {};\n}\nconst isProxyAvailable = typeof Proxy === 'function';\n;// CONCATENATED MODULE: ../api/lib/esm/const.js\nconst HOOK_SETUP = 'devtools-plugin:setup';\nconst HOOK_PLUGIN_SETTINGS_SET = 'plugin:settings:set';\n;// CONCATENATED MODULE: ../api/lib/esm/proxy.js\n\nclass ApiProxy {\n constructor(plugin, hook) {\n this.target = null;\n this.targetQueue = [];\n this.onQueue = [];\n this.plugin = plugin;\n this.hook = hook;\n const defaultSettings = {};\n\n if (plugin.settings) {\n for (const id in plugin.settings) {\n const item = plugin.settings[id];\n defaultSettings[id] = item.defaultValue;\n }\n }\n\n const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;\n let currentSettings = Object.assign({}, defaultSettings);\n\n try {\n const raw = localStorage.getItem(localSettingsSaveId);\n const data = JSON.parse(raw);\n Object.assign(currentSettings, data);\n } catch (e) {// noop\n }\n\n this.fallbacks = {\n getSettings() {\n return currentSettings;\n },\n\n setSettings(value) {\n try {\n localStorage.setItem(localSettingsSaveId, JSON.stringify(value));\n } catch (e) {// noop\n }\n\n currentSettings = value;\n }\n\n };\n\n if (hook) {\n hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {\n if (pluginId === this.plugin.id) {\n this.fallbacks.setSettings(value);\n }\n });\n }\n\n this.proxiedOn = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target.on[prop];\n } else {\n return (...args) => {\n this.onQueue.push({\n method: prop,\n args\n });\n };\n }\n }\n });\n this.proxiedTarget = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target[prop];\n } else if (prop === 'on') {\n return this.proxiedOn;\n } else if (Object.keys(this.fallbacks).includes(prop)) {\n return (...args) => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve: () => {}\n });\n return this.fallbacks[prop](...args);\n };\n } else {\n return (...args) => {\n return new Promise(resolve => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve\n });\n });\n };\n }\n }\n });\n }\n\n async setRealTarget(target) {\n this.target = target;\n\n for (const item of this.onQueue) {\n this.target.on[item.method](...item.args);\n }\n\n for (const item of this.targetQueue) {\n item.resolve(await this.target[item.method](...item.args));\n }\n }\n\n}\n;// CONCATENATED MODULE: ../api/lib/esm/index.js\n\n\n\n\n\nfunction setupDevtoolsPlugin(pluginDescriptor, setupFn) {\n const descriptor = pluginDescriptor;\n const target = getTarget();\n const hook = getDevtoolsGlobalHook();\n const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;\n\n if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {\n hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);\n } else {\n const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;\n const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];\n list.push({\n pluginDescriptor: descriptor,\n setupFn,\n proxy\n });\n if (proxy) setupFn(proxy.proxiedTarget);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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VUFBTU0sS0FBSyxHQUFHSixXQUFXLEdBQUcsSUFBSWhELFFBQUosQ0FBYStDLFVBQWIsRUFBeUI1QyxJQUF6QixDQUFILEdBQW9DLElBQTdEO0FBQ0EsVUFBTWtELElBQUksR0FBR2pELE1BQU0sQ0FBQ2tELHdCQUFQLEdBQWtDbEQsTUFBTSxDQUFDa0Qsd0JBQVAsSUFBbUMsRUFBbEY7QUFDQUQsSUFBQUEsSUFBSSxDQUFDakIsSUFBTCxDQUFVO0FBQ05TLE1BQUFBLGdCQUFnQixFQUFFRSxVQURaO0FBRU5ELE1BQUFBLE9BRk07QUFHTk0sTUFBQUE7QUFITSxLQUFWO0FBS0EsUUFBSUEsS0FBSixFQUNJTixPQUFPLENBQUNNLEtBQUssQ0FBQ2QsYUFBUCxDQUFQO0FBQ1A7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vYXBpL2xpYi9lc20vZW52LmpzP2NkZjMiLCJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9hcGkvbGliL2VzbS9jb25zdC5qcz8xODA1Iiwid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vYXBpL2xpYi9lc20vcHJveHkuanM/NzUyMCIsIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL2FwaS9saWIvZXNtL2luZGV4LmpzPzcyMDUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGdldERldnRvb2xzR2xvYmFsSG9vaygpIHtcbiAgICByZXR1cm4gZ2V0VGFyZ2V0KCkuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXJnZXQoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgID8gd2luZG93XG4gICAgICAgIDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gZ2xvYmFsXG4gICAgICAgICAgICA6IHt9O1xufVxuZXhwb3J0IGNvbnN0IGlzUHJveHlBdmFpbGFibGUgPSB0eXBlb2YgUHJveHkgPT09ICdmdW5jdGlvbic7XG4iLCJleHBvcnQgY29uc3QgSE9PS19TRVRVUCA9ICdkZXZ0b29scy1wbHVnaW46c2V0dXAnO1xuZXhwb3J0IGNvbnN0IEhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCA9ICdwbHVnaW46c2V0dGluZ3M6c2V0JztcbiIsImltcG9ydCB7IEhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCB9IGZyb20gJy4vY29uc3QnO1xuZXhwb3J0IGNsYXNzIEFwaVByb3h5IHtcbiAgICBjb25zdHJ1Y3RvcihwbHVnaW4sIGhvb2spIHtcbiAgICAgICAgdGhpcy50YXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLnRhcmdldFF1ZXVlID0gW107XG4gICAgICAgIHRoaXMub25RdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICAgICAgdGhpcy5ob29rID0gaG9vaztcbiAgICAgICAgY29uc3QgZGVmYXVsdFNldHRpbmdzID0ge307XG4gICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gcGx1Z2luLnNldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHBsdWdpbi5zZXR0aW5nc1tpZF07XG4gICAgICAgICAgICAgICAgZGVmYXVsdFNldHRpbmdzW2lkXSA9IGl0ZW0uZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsU2V0dGluZ3NTYXZlSWQgPSBgX192dWUtZGV2dG9vbHMtcGx1Z2luLXNldHRpbmdzX18ke3BsdWdpbi5pZH1gO1xuICAgICAgICBsZXQgY3VycmVudFNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGxvY2FsU2V0dGluZ3NTYXZlSWQpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmF3KTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY3VycmVudFNldHRpbmdzLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmFsbGJhY2tzID0ge1xuICAgICAgICAgICAgZ2V0U2V0dGluZ3MoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTZXR0aW5ncztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRTZXR0aW5ncyh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGxvY2FsU2V0dGluZ3NTYXZlSWQsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFNldHRpbmdzID0gdmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaG9vaykge1xuICAgICAgICAgICAgaG9vay5vbihIT09LX1BMVUdJTl9TRVRUSU5HU19TRVQsIChwbHVnaW5JZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGx1Z2luSWQgPT09IHRoaXMucGx1Z2luLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFsbGJhY2tzLnNldFNldHRpbmdzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3hpZWRPbiA9IG5ldyBQcm94eSh7fSwge1xuICAgICAgICAgICAgZ2V0OiAoX3RhcmdldCwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQub25bcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25RdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHByb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb3hpZWRUYXJnZXQgPSBuZXcgUHJveHkoe30sIHtcbiAgICAgICAgICAgIGdldDogKF90YXJnZXQsIHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSAnb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3hpZWRPbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoT2JqZWN0LmtleXModGhpcy5mYWxsYmFja3MpLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHByb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiAoKSA9PiB7IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrc1twcm9wXSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0UXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogcHJvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBzZXRSZWFsVGFyZ2V0KHRhcmdldCkge1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMub25RdWV1ZSkge1xuICAgICAgICAgICAgdGhpcy50YXJnZXQub25baXRlbS5tZXRob2RdKC4uLml0ZW0uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMudGFyZ2V0UXVldWUpIHtcbiAgICAgICAgICAgIGl0ZW0ucmVzb2x2ZShhd2FpdCB0aGlzLnRhcmdldFtpdGVtLm1ldGhvZF0oLi4uaXRlbS5hcmdzKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBnZXRUYXJnZXQsIGdldERldnRvb2xzR2xvYmFsSG9vaywgaXNQcm94eUF2YWlsYWJsZSB9IGZyb20gJy4vZW52JztcbmltcG9ydCB7IEhPT0tfU0VUVVAgfSBmcm9tICcuL2NvbnN0JztcbmltcG9ydCB7IEFwaVByb3h5IH0gZnJvbSAnLi9wcm94eSc7XG5leHBvcnQgKiBmcm9tICcuL2FwaSc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbic7XG5leHBvcnQgZnVuY3Rpb24gc2V0dXBEZXZ0b29sc1BsdWdpbihwbHVnaW5EZXNjcmlwdG9yLCBzZXR1cEZuKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHBsdWdpbkRlc2NyaXB0b3I7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0KCk7XG4gICAgY29uc3QgaG9vayA9IGdldERldnRvb2xzR2xvYmFsSG9vaygpO1xuICAgIGNvbnN0IGVuYWJsZVByb3h5ID0gaXNQcm94eUF2YWlsYWJsZSAmJiBkZXNjcmlwdG9yLmVuYWJsZUVhcmx5UHJveHk7XG4gICAgaWYgKGhvb2sgJiYgKHRhcmdldC5fX1ZVRV9ERVZUT09MU19QTFVHSU5fQVBJX0FWQUlMQUJMRV9fIHx8ICFlbmFibGVQcm94eSkpIHtcbiAgICAgICAgaG9vay5lbWl0KEhPT0tfU0VUVVAsIHBsdWdpbkRlc2NyaXB0b3IsIHNldHVwRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJveHkgPSBlbmFibGVQcm94eSA/IG5ldyBBcGlQcm94eShkZXNjcmlwdG9yLCBob29rKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0YXJnZXQuX19WVUVfREVWVE9PTFNfUExVR0lOU19fID0gdGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX1BMVUdJTlNfXyB8fCBbXTtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICAgIHBsdWdpbkRlc2NyaXB0b3I6IGRlc2NyaXB0b3IsXG4gICAgICAgICAgICBzZXR1cEZuLFxuICAgICAgICAgICAgcHJveHksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocHJveHkpXG4gICAgICAgICAgICBzZXR1cEZuKHByb3h5LnByb3hpZWRUYXJnZXQpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJnZXREZXZ0b29sc0dsb2JhbEhvb2siLCJnZXRUYXJnZXQiLCJfX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fIiwibmF2aWdhdG9yIiwid2luZG93IiwiZ2xvYmFsIiwiaXNQcm94eUF2YWlsYWJsZSIsIlByb3h5IiwiSE9PS19TRVRVUCIsIkhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCIsIkFwaVByb3h5IiwiY29uc3RydWN0b3IiLCJwbHVnaW4iLCJob29rIiwidGFyZ2V0IiwidGFyZ2V0UXVldWUiLCJvblF1ZXVlIiwiZGVmYXVsdFNldHRpbmdzIiwic2V0dGluZ3MiLCJpZCIsIml0ZW0iLCJkZWZhdWx0VmFsdWUiLCJsb2NhbFNldHRpbmdzU2F2ZUlkIiwiY3VycmVudFNldHRpbmdzIiwiT2JqZWN0IiwiYXNzaWduIiwicmF3IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJlIiwiZmFsbGJhY2tzIiwiZ2V0U2V0dGluZ3MiLCJzZXRTZXR0aW5ncyIsInZhbHVlIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsIm9uIiwicGx1Z2luSWQiLCJwcm94aWVkT24iLCJnZXQiLCJfdGFyZ2V0IiwicHJvcCIsImFyZ3MiLCJwdXNoIiwibWV0aG9kIiwicHJveGllZFRhcmdldCIsImtleXMiLCJpbmNsdWRlcyIsInJlc29sdmUiLCJQcm9taXNlIiwic2V0UmVhbFRhcmdldCIsInNldHVwRGV2dG9vbHNQbHVnaW4iLCJwbHVnaW5EZXNjcmlwdG9yIiwic2V0dXBGbiIsImRlc2NyaXB0b3IiLCJlbmFibGVQcm94eSIsImVuYWJsZUVhcmx5UHJveHkiLCJfX1ZVRV9ERVZUT09MU19QTFVHSU5fQVBJX0FWQUlMQUJMRV9fIiwiZW1pdCIsInByb3h5IiwibGlzdCIsIl9fVlVFX0RFVlRPT0xTX1BMVUdJTlNfXyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72039\n");
30
+ eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"now\": () => (/* reexport */ now),\n \"setupDevtoolsPlugin\": () => (/* binding */ setupDevtoolsPlugin)\n});\n\n;// CONCATENATED MODULE: ../api/lib/esm/env.js\nfunction getDevtoolsGlobalHook() {\n return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;\n}\nfunction getTarget() {\n // @ts-ignore\n return typeof navigator !== 'undefined' && typeof window !== 'undefined' ? window : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : {};\n}\nconst isProxyAvailable = typeof Proxy === 'function';\n;// CONCATENATED MODULE: ../api/lib/esm/const.js\nconst HOOK_SETUP = 'devtools-plugin:setup';\nconst HOOK_PLUGIN_SETTINGS_SET = 'plugin:settings:set';\n;// CONCATENATED MODULE: ../api/lib/esm/time.js\nlet supported;\nlet perf;\n\nfunction isSupported() {\n if (supported !== undefined) {\n return supported;\n }\n\n if (typeof window !== 'undefined' && window.performance) {\n supported = true;\n perf = window.performance;\n } else {\n supported = false;\n }\n\n return supported;\n}\n\nfunction now() {\n return isSupported() ? perf.now() : Date.now();\n}\n;// CONCATENATED MODULE: ../api/lib/esm/proxy.js\n\n\nclass ApiProxy {\n constructor(plugin, hook) {\n this.target = null;\n this.targetQueue = [];\n this.onQueue = [];\n this.plugin = plugin;\n this.hook = hook;\n const defaultSettings = {};\n\n if (plugin.settings) {\n for (const id in plugin.settings) {\n const item = plugin.settings[id];\n defaultSettings[id] = item.defaultValue;\n }\n }\n\n const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;\n let currentSettings = Object.assign({}, defaultSettings);\n\n try {\n const raw = localStorage.getItem(localSettingsSaveId);\n const data = JSON.parse(raw);\n Object.assign(currentSettings, data);\n } catch (e) {// noop\n }\n\n this.fallbacks = {\n getSettings() {\n return currentSettings;\n },\n\n setSettings(value) {\n try {\n localStorage.setItem(localSettingsSaveId, JSON.stringify(value));\n } catch (e) {// noop\n }\n\n currentSettings = value;\n },\n\n now() {\n return now();\n }\n\n };\n\n if (hook) {\n hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {\n if (pluginId === this.plugin.id) {\n this.fallbacks.setSettings(value);\n }\n });\n }\n\n this.proxiedOn = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target.on[prop];\n } else {\n return (...args) => {\n this.onQueue.push({\n method: prop,\n args\n });\n };\n }\n }\n });\n this.proxiedTarget = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target[prop];\n } else if (prop === 'on') {\n return this.proxiedOn;\n } else if (Object.keys(this.fallbacks).includes(prop)) {\n return (...args) => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve: () => {}\n });\n return this.fallbacks[prop](...args);\n };\n } else {\n return (...args) => {\n return new Promise(resolve => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve\n });\n });\n };\n }\n }\n });\n }\n\n async setRealTarget(target) {\n this.target = target;\n\n for (const item of this.onQueue) {\n this.target.on[item.method](...item.args);\n }\n\n for (const item of this.targetQueue) {\n item.resolve(await this.target[item.method](...item.args));\n }\n }\n\n}\n;// CONCATENATED MODULE: ../api/lib/esm/index.js\n\n\n\n\n\n\nfunction setupDevtoolsPlugin(pluginDescriptor, setupFn) {\n const descriptor = pluginDescriptor;\n const target = getTarget();\n const hook = getDevtoolsGlobalHook();\n const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;\n\n if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {\n hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);\n } else {\n const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;\n const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];\n list.push({\n pluginDescriptor: descriptor,\n setupFn,\n proxy\n });\n if (proxy) setupFn(proxy.proxiedTarget);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM1MDguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFPLFNBQVNBLHFCQUFULEdBQWlDO0FBQ3BDLFNBQU9DLFNBQVMsR0FBR0MsNEJBQW5CO0FBQ0g7QUFDTSxTQUFTRCxTQUFULEdBQXFCO0FBQ3hCO0FBQ0EsU0FBUSxPQUFPRSxTQUFQLEtBQXFCLFdBQXJCLElBQW9DLE9BQU9DLE1BQVAsS0FBa0IsV0FBdkQsR0FDREEsTUFEQyxHQUVELE9BQU9DLHFCQUFQLEtBQWtCLFdBQWxCLEdBQ0lBLHFCQURKLEdBRUksRUFKVjtBQUtIO0FBQ00sTUFBTUMsZ0JBQWdCLEdBQUcsT0FBT0MsS0FBUCxLQUFpQixVQUExQyxDOztBQ1hBLE1BQU1DLFVBQVUsR0FBRyx1QkFBbkI7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxxQkFBakMsQzs7QUNEUCxJQUFJQyxTQUFKO0FBQ0EsSUFBSUMsSUFBSjs7QUFDQSxTQUFTQyxXQUFULEdBQXVCO0FBQ25CLE1BQUlGLFNBQVMsS0FBS0csU0FBbEIsRUFBNkI7QUFDekIsV0FBT0gsU0FBUDtBQUNIOztBQUNELE1BQUksT0FBT04sTUFBUCxLQUFrQixXQUFsQixJQUFpQ0EsTUFBTSxDQUFDVSxXQUE1QyxFQUF5RDtBQUNyREosSUFBQUEsU0FBUyxHQUFHLElBQVo7QUFDQUMsSUFBQUEsSUFBSSxHQUFHUCxNQUFNLENBQUNVLFdBQWQ7QUFDSCxHQUhELE1BSUs7QUFDREosSUFBQUEsU0FBUyxHQUFHLEtBQVo7QUFDSDs7QUFDRCxTQUFPQSxTQUFQO0FBQ0g7O0FBQ00sU0FBU0ssR0FBVCxHQUFlO0FBQ2xCLFNBQU9ILFdBQVcsS0FBS0QsSUFBSSxDQUFDSSxHQUFMLEVBQUwsR0FBa0JDLElBQUksQ0FBQ0QsR0FBTCxFQUFwQztBQUNILEM7O0FDakJEO0FBQ0E7QUFDTyxNQUFNRSxRQUFOLENBQWU7QUFDbEJDLEVBQUFBLFdBQVcsQ0FBQ0MsTUFBRCxFQUFTQyxJQUFULEVBQWU7QUFDdEIsU0FBS0MsTUFBTCxHQUFjLElBQWQ7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEVBQW5CO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEVBQWY7QUFDQSxTQUFLSixNQUFMLEdBQWNBLE1BQWQ7QUFDQSxTQUFLQyxJQUFMLEdBQVlBLElBQVo7QUFDQSxVQUFNSSxlQUFlLEdBQUcsRUFBeEI7O0FBQ0EsUUFBSUwsTUFBTSxDQUFDTSxRQUFYLEVBQXFCO0FBQ2pCLFdBQUssTUFBTUMsRUFBWCxJQUFpQlAsTUFBTSxDQUFDTSxRQUF4QixFQUFrQztBQUM5QixjQUFNRSxJQUFJLEdBQUdSLE1BQU0sQ0FBQ00sUUFBUCxDQUFnQkMsRUFBaEIsQ0FBYjtBQUNBRixRQUFBQSxlQUFlLENBQUNFLEVBQUQsQ0FBZixHQUFzQkMsSUFBSSxDQUFDQyxZQUEzQjtBQUNIO0FBQ0o7O0FBQ0QsVUFBTUMsbUJBQW1CLEdBQUksbUNBQWtDVixNQUFNLENBQUNPLEVBQUcsRUFBekU7QUFDQSxRQUFJSSxlQUFlLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JSLGVBQWxCLENBQXRCOztBQUNBLFFBQUk7QUFDQSxZQUFNUyxHQUFHLEdBQUdDLFlBQVksQ0FBQ0MsT0FBYixDQUFxQk4sbUJBQXJCLENBQVo7QUFDQSxZQUFNTyxJQUFJLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFXTCxHQUFYLENBQWI7QUFDQUYsTUFBQUEsTUFBTSxDQUFDQyxNQUFQLENBQWNGLGVBQWQsRUFBK0JNLElBQS9CO0FBQ0gsS0FKRCxDQUtBLE9BQU9HLENBQVAsRUFBVSxDQUNOO0FBQ0g7O0FBQ0QsU0FBS0MsU0FBTCxHQUFpQjtBQUNiQyxNQUFBQSxXQUFXLEdBQUc7QUFDVixlQUFPWCxlQUFQO0FBQ0gsT0FIWTs7QUFJYlksTUFBQUEsV0FBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixZQUFJO0FBQ0FULFVBQUFBLFlBQVksQ0FBQ1UsT0FBYixDQUFxQmYsbUJBQXJCLEVBQTBDUSxJQUFJLENBQUNRLFNBQUwsQ0FBZUYsS0FBZixDQUExQztBQUNILFNBRkQsQ0FHQSxPQUFPSixDQUFQLEVBQVUsQ0FDTjtBQUNIOztBQUNEVCxRQUFBQSxlQUFlLEdBQUdhLEtBQWxCO0FBQ0gsT0FaWTs7QUFhYjVCLE1BQUFBLEdBQUcsR0FBRztBQUNGLGVBQU9BLEdBQUcsRUFBVjtBQUNIOztBQWZZLEtBQWpCOztBQWlCQSxRQUFJSyxJQUFKLEVBQVU7QUFDTkEsTUFBQUEsSUFBSSxDQUFDMEIsRUFBTCxDQUFRckMsd0JBQVIsRUFBa0MsQ0FBQ3NDLFFBQUQsRUFBV0osS0FBWCxLQUFxQjtBQUNuRCxZQUFJSSxRQUFRLEtBQUssS0FBSzVCLE1BQUwsQ0FBWU8sRUFBN0IsRUFBaUM7QUFDN0IsZUFBS2MsU0FBTCxDQUFlRSxXQUFmLENBQTJCQyxLQUEzQjtBQUNIO0FBQ0osT0FKRDtBQUtIOztBQUNELFNBQUtLLFNBQUwsR0FBaUIsSUFBSXpDLEtBQUosQ0FBVSxFQUFWLEVBQWM7QUFDM0IwQyxNQUFBQSxHQUFHLEVBQUUsQ0FBQ0MsT0FBRCxFQUFVQyxJQUFWLEtBQW1CO0FBQ3BCLFlBQUksS0FBSzlCLE1BQVQsRUFBaUI7QUFDYixpQkFBTyxLQUFLQSxNQUFMLENBQVl5QixFQUFaLENBQWVLLElBQWYsQ0FBUDtBQUNILFNBRkQsTUFHSztBQUNELGlCQUFPLENBQUMsR0FBR0MsSUFBSixLQUFhO0FBQ2hCLGlCQUFLN0IsT0FBTCxDQUFhOEIsSUFBYixDQUFrQjtBQUNkQyxjQUFBQSxNQUFNLEVBQUVILElBRE07QUFFZEMsY0FBQUE7QUFGYyxhQUFsQjtBQUlILFdBTEQ7QUFNSDtBQUNKO0FBYjBCLEtBQWQsQ0FBakI7QUFlQSxTQUFLRyxhQUFMLEdBQXFCLElBQUloRCxLQUFKLENBQVUsRUFBVixFQUFjO0FBQy9CMEMsTUFBQUEsR0FBRyxFQUFFLENBQUNDLE9BQUQsRUFBVUMsSUFBVixLQUFtQjtBQUNwQixZQUFJLEtBQUs5QixNQUFULEVBQWlCO0FBQ2IsaUJBQU8sS0FBS0EsTUFBTCxDQUFZOEIsSUFBWixDQUFQO0FBQ0gsU0FGRCxNQUdLLElBQUlBLElBQUksS0FBSyxJQUFiLEVBQW1CO0FBQ3BCLGlCQUFPLEtBQUtILFNBQVo7QUFDSCxTQUZJLE1BR0EsSUFBSWpCLE1BQU0sQ0FBQ3lCLElBQVAsQ0FBWSxLQUFLaEIsU0FBakIsRUFBNEJpQixRQUE1QixDQUFxQ04sSUFBckMsQ0FBSixFQUFnRDtBQUNqRCxpQkFBTyxDQUFDLEdBQUdDLElBQUosS0FBYTtBQUNoQixpQkFBSzlCLFdBQUwsQ0FBaUIrQixJQUFqQixDQUFzQjtBQUNsQkMsY0FBQUEsTUFBTSxFQUFFSCxJQURVO0FBRWxCQyxjQUFBQSxJQUZrQjtBQUdsQk0sY0FBQUEsT0FBTyxFQUFFLE1BQU0sQ0FBRztBQUhBLGFBQXRCO0FBS0EsbUJBQU8sS0FBS2xCLFNBQUwsQ0FBZVcsSUFBZixFQUFxQixHQUFHQyxJQUF4QixDQUFQO0FBQ0gsV0FQRDtBQVFILFNBVEksTUFVQTtBQUNELGlCQUFPLENBQUMsR0FBR0EsSUFBSixLQUFhO0FBQ2hCLG1CQUFPLElBQUlPLE9BQUosQ0FBWUQsT0FBTyxJQUFJO0FBQzFCLG1CQUFLcEMsV0FBTCxDQUFpQitCLElBQWpCLENBQXNCO0FBQ2xCQyxnQkFBQUEsTUFBTSxFQUFFSCxJQURVO0FBRWxCQyxnQkFBQUEsSUFGa0I7QUFHbEJNLGdCQUFBQTtBQUhrQixlQUF0QjtBQUtILGFBTk0sQ0FBUDtBQU9ILFdBUkQ7QUFTSDtBQUNKO0FBN0I4QixLQUFkLENBQXJCO0FBK0JIOztBQUNrQixRQUFiRSxhQUFhLENBQUN2QyxNQUFELEVBQVM7QUFDeEIsU0FBS0EsTUFBTCxHQUFjQSxNQUFkOztBQUNBLFNBQUssTUFBTU0sSUFBWCxJQUFtQixLQUFLSixPQUF4QixFQUFpQztBQUM3QixXQUFLRixNQUFMLENBQVl5QixFQUFaLENBQWVuQixJQUFJLENBQUMyQixNQUFwQixFQUE0QixHQUFHM0IsSUFBSSxDQUFDeUIsSUFBcEM7QUFDSDs7QUFDRCxTQUFLLE1BQU16QixJQUFYLElBQW1CLEtBQUtMLFdBQXhCLEVBQXFDO0FBQ2pDSyxNQUFBQSxJQUFJLENBQUMrQixPQUFMLENBQWEsTUFBTSxLQUFLckMsTUFBTCxDQUFZTSxJQUFJLENBQUMyQixNQUFqQixFQUF5QixHQUFHM0IsSUFBSSxDQUFDeUIsSUFBakMsQ0FBbkI7QUFDSDtBQUNKOztBQXZHaUIsQzs7QUNGdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU1MsbUJBQVQsQ0FBNkJDLGdCQUE3QixFQUErQ0MsT0FBL0MsRUFBd0Q7QUFDM0QsUUFBTUMsVUFBVSxHQUFHRixnQkFBbkI7QUFDQSxRQUFNekMsTUFBTSxHQUFHcEIsU0FBUyxFQUF4QjtBQUNBLFFBQU1tQixJQUFJLEdBQUdwQixxQkFBcUIsRUFBbEM7QUFDQSxRQUFNaUUsV0FBVyxHQUFHM0QsZ0JBQWdCLElBQUkwRCxVQUFVLENBQUNFLGdCQUFuRDs7QUFDQSxNQUFJOUMsSUFBSSxLQUFLQyxNQUFNLENBQUM4QyxxQ0FBUCxJQUFnRCxDQUFDRixXQUF0RCxDQUFSLEVBQTRFO0FBQ3hFN0MsSUFBQUEsSUFBSSxDQUFDZ0QsSUFBTCxDQUFVNUQsVUFBVixFQUFzQnNELGdCQUF0QixFQUF3Q0MsT0FBeEM7QUFDSCxHQUZELE1BR0s7QUFDRCxVQUFNTSxLQUFLLEdBQUdKLFdBQVcsR0FBRyxJQUFJaEQsUUFBSixDQUFhK0MsVUFBYixFQUF5QjVDLElBQXpCLENBQUgsR0FBb0MsSUFBN0Q7QUFDQSxVQUFNa0QsSUFBSSxHQUFHakQsTUFBTSxDQUFDa0Qsd0JBQVAsR0FBa0NsRCxNQUFNLENBQUNrRCx3QkFBUCxJQUFtQyxFQUFsRjtBQUNBRCxJQUFBQSxJQUFJLENBQUNqQixJQUFMLENBQVU7QUFDTlMsTUFBQUEsZ0JBQWdCLEVBQUVFLFVBRFo7QUFFTkQsTUFBQUEsT0FGTTtBQUdOTSxNQUFBQTtBQUhNLEtBQVY7QUFLQSxRQUFJQSxLQUFKLEVBQ0lOLE9BQU8sQ0FBQ00sS0FBSyxDQUFDZCxhQUFQLENBQVA7QUFDUDtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9hcGkvbGliL2VzbS9lbnYuanM/Y2RmMyIsIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL2FwaS9saWIvZXNtL2NvbnN0LmpzPzE4MDUiLCJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9hcGkvbGliL2VzbS90aW1lLmpzP2FhNGIiLCJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9hcGkvbGliL2VzbS9wcm94eS5qcz83NTIwIiwid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vYXBpL2xpYi9lc20vaW5kZXguanM/NzIwNSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2V0RGV2dG9vbHNHbG9iYWxIb29rKCkge1xuICAgIHJldHVybiBnZXRUYXJnZXQoKS5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldCgpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJylcbiAgICAgICAgPyB3aW5kb3dcbiAgICAgICAgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBnbG9iYWxcbiAgICAgICAgICAgIDoge307XG59XG5leHBvcnQgY29uc3QgaXNQcm94eUF2YWlsYWJsZSA9IHR5cGVvZiBQcm94eSA9PT0gJ2Z1bmN0aW9uJztcbiIsImV4cG9ydCBjb25zdCBIT09LX1NFVFVQID0gJ2RldnRvb2xzLXBsdWdpbjpzZXR1cCc7XG5leHBvcnQgY29uc3QgSE9PS19QTFVHSU5fU0VUVElOR1NfU0VUID0gJ3BsdWdpbjpzZXR0aW5nczpzZXQnO1xuIiwibGV0IHN1cHBvcnRlZDtcbmxldCBwZXJmO1xuZnVuY3Rpb24gaXNTdXBwb3J0ZWQoKSB7XG4gICAgaWYgKHN1cHBvcnRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcGVyZiA9IHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN1cHBvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwcG9ydGVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vdygpIHtcbiAgICByZXR1cm4gaXNTdXBwb3J0ZWQoKSA/IHBlcmYubm93KCkgOiBEYXRlLm5vdygpO1xufVxuIiwiaW1wb3J0IHsgSE9PS19QTFVHSU5fU0VUVElOR1NfU0VUIH0gZnJvbSAnLi9jb25zdCc7XG5pbXBvcnQgeyBub3cgfSBmcm9tICcuL3RpbWUnO1xuZXhwb3J0IGNsYXNzIEFwaVByb3h5IHtcbiAgICBjb25zdHJ1Y3RvcihwbHVnaW4sIGhvb2spIHtcbiAgICAgICAgdGhpcy50YXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLnRhcmdldFF1ZXVlID0gW107XG4gICAgICAgIHRoaXMub25RdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICAgICAgdGhpcy5ob29rID0gaG9vaztcbiAgICAgICAgY29uc3QgZGVmYXVsdFNldHRpbmdzID0ge307XG4gICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gcGx1Z2luLnNldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHBsdWdpbi5zZXR0aW5nc1tpZF07XG4gICAgICAgICAgICAgICAgZGVmYXVsdFNldHRpbmdzW2lkXSA9IGl0ZW0uZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsU2V0dGluZ3NTYXZlSWQgPSBgX192dWUtZGV2dG9vbHMtcGx1Z2luLXNldHRpbmdzX18ke3BsdWdpbi5pZH1gO1xuICAgICAgICBsZXQgY3VycmVudFNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGxvY2FsU2V0dGluZ3NTYXZlSWQpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmF3KTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY3VycmVudFNldHRpbmdzLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmFsbGJhY2tzID0ge1xuICAgICAgICAgICAgZ2V0U2V0dGluZ3MoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTZXR0aW5ncztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRTZXR0aW5ncyh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGxvY2FsU2V0dGluZ3NTYXZlSWQsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFNldHRpbmdzID0gdmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm93KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub3coKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChob29rKSB7XG4gICAgICAgICAgICBob29rLm9uKEhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCwgKHBsdWdpbklkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwbHVnaW5JZCA9PT0gdGhpcy5wbHVnaW4uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWxsYmFja3Muc2V0U2V0dGluZ3ModmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJveGllZE9uID0gbmV3IFByb3h5KHt9LCB7XG4gICAgICAgICAgICBnZXQ6IChfdGFyZ2V0LCBwcm9wKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRhcmdldC5vbltwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogcHJvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJveGllZFRhcmdldCA9IG5ldyBQcm94eSh7fSwge1xuICAgICAgICAgICAgZ2V0OiAoX3RhcmdldCwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YXJnZXRbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09ICdvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJveGllZE9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChPYmplY3Qua2V5cyh0aGlzLmZhbGxiYWNrcykuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldFF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogcHJvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmU6ICgpID0+IHsgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2tzW3Byb3BdKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBwcm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHNldFJlYWxUYXJnZXQodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5vblF1ZXVlKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldC5vbltpdGVtLm1ldGhvZF0oLi4uaXRlbS5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy50YXJnZXRRdWV1ZSkge1xuICAgICAgICAgICAgaXRlbS5yZXNvbHZlKGF3YWl0IHRoaXMudGFyZ2V0W2l0ZW0ubWV0aG9kXSguLi5pdGVtLmFyZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7IGdldFRhcmdldCwgZ2V0RGV2dG9vbHNHbG9iYWxIb29rLCBpc1Byb3h5QXZhaWxhYmxlIH0gZnJvbSAnLi9lbnYnO1xuaW1wb3J0IHsgSE9PS19TRVRVUCB9IGZyb20gJy4vY29uc3QnO1xuaW1wb3J0IHsgQXBpUHJveHkgfSBmcm9tICcuL3Byb3h5JztcbmV4cG9ydCAqIGZyb20gJy4vYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2luJztcbmV4cG9ydCAqIGZyb20gJy4vdGltZSc7XG5leHBvcnQgZnVuY3Rpb24gc2V0dXBEZXZ0b29sc1BsdWdpbihwbHVnaW5EZXNjcmlwdG9yLCBzZXR1cEZuKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHBsdWdpbkRlc2NyaXB0b3I7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0KCk7XG4gICAgY29uc3QgaG9vayA9IGdldERldnRvb2xzR2xvYmFsSG9vaygpO1xuICAgIGNvbnN0IGVuYWJsZVByb3h5ID0gaXNQcm94eUF2YWlsYWJsZSAmJiBkZXNjcmlwdG9yLmVuYWJsZUVhcmx5UHJveHk7XG4gICAgaWYgKGhvb2sgJiYgKHRhcmdldC5fX1ZVRV9ERVZUT09MU19QTFVHSU5fQVBJX0FWQUlMQUJMRV9fIHx8ICFlbmFibGVQcm94eSkpIHtcbiAgICAgICAgaG9vay5lbWl0KEhPT0tfU0VUVVAsIHBsdWdpbkRlc2NyaXB0b3IsIHNldHVwRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJveHkgPSBlbmFibGVQcm94eSA/IG5ldyBBcGlQcm94eShkZXNjcmlwdG9yLCBob29rKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0YXJnZXQuX19WVUVfREVWVE9PTFNfUExVR0lOU19fID0gdGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX1BMVUdJTlNfXyB8fCBbXTtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICAgIHBsdWdpbkRlc2NyaXB0b3I6IGRlc2NyaXB0b3IsXG4gICAgICAgICAgICBzZXR1cEZuLFxuICAgICAgICAgICAgcHJveHksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocHJveHkpXG4gICAgICAgICAgICBzZXR1cEZuKHByb3h5LnByb3hpZWRUYXJnZXQpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJnZXREZXZ0b29sc0dsb2JhbEhvb2siLCJnZXRUYXJnZXQiLCJfX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fIiwibmF2aWdhdG9yIiwid2luZG93IiwiZ2xvYmFsIiwiaXNQcm94eUF2YWlsYWJsZSIsIlByb3h5IiwiSE9PS19TRVRVUCIsIkhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCIsInN1cHBvcnRlZCIsInBlcmYiLCJpc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIsInBlcmZvcm1hbmNlIiwibm93IiwiRGF0ZSIsIkFwaVByb3h5IiwiY29uc3RydWN0b3IiLCJwbHVnaW4iLCJob29rIiwidGFyZ2V0IiwidGFyZ2V0UXVldWUiLCJvblF1ZXVlIiwiZGVmYXVsdFNldHRpbmdzIiwic2V0dGluZ3MiLCJpZCIsIml0ZW0iLCJkZWZhdWx0VmFsdWUiLCJsb2NhbFNldHRpbmdzU2F2ZUlkIiwiY3VycmVudFNldHRpbmdzIiwiT2JqZWN0IiwiYXNzaWduIiwicmF3IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJlIiwiZmFsbGJhY2tzIiwiZ2V0U2V0dGluZ3MiLCJzZXRTZXR0aW5ncyIsInZhbHVlIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsIm9uIiwicGx1Z2luSWQiLCJwcm94aWVkT24iLCJnZXQiLCJfdGFyZ2V0IiwicHJvcCIsImFyZ3MiLCJwdXNoIiwibWV0aG9kIiwicHJveGllZFRhcmdldCIsImtleXMiLCJpbmNsdWRlcyIsInJlc29sdmUiLCJQcm9taXNlIiwic2V0UmVhbFRhcmdldCIsInNldHVwRGV2dG9vbHNQbHVnaW4iLCJwbHVnaW5EZXNjcmlwdG9yIiwic2V0dXBGbiIsImRlc2NyaXB0b3IiLCJlbmFibGVQcm94eSIsImVuYWJsZUVhcmx5UHJveHkiLCJfX1ZVRV9ERVZUT09MU19QTFVHSU5fQVBJX0FWQUlMQUJMRV9fIiwiZW1pdCIsInByb3h5IiwibGlzdCIsIl9fVlVFX0RFVlRPT0xTX1BMVUdJTlNfXyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///13508\n");
31
31
 
32
32
  /***/ }),
33
33
 
@@ -35,7 +35,7 @@ eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPO
35
35
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
36
36
 
37
37
  "use strict";
38
- eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.DevtoolsPluginApiInstance = exports.DevtoolsApi = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst hooks_1 = __webpack_require__(29618);\n\nconst time_js_1 = __webpack_require__(15460);\n\nconst pluginOn = [];\n\nclass DevtoolsApi {\n constructor(backend, ctx) {\n this.stateEditor = new shared_utils_1.StateEditor();\n this.backend = backend;\n this.ctx = ctx;\n this.bridge = ctx.bridge;\n this.on = new hooks_1.DevtoolsHookable(ctx);\n }\n\n async callHook(eventType, payload, ctx = this.ctx) {\n payload = await this.on.callHandlers(eventType, payload, ctx);\n\n for (const on of pluginOn) {\n payload = await on.callHandlers(eventType, payload, ctx);\n }\n\n return payload;\n }\n\n async transformCall(callName, ...args) {\n const payload = await this.callHook(\"transformCall\"\n /* TRANSFORM_CALL */\n , {\n callName,\n inArgs: args,\n outArgs: args.slice()\n });\n return payload.outArgs;\n }\n\n async getAppRecordName(app, defaultName) {\n const payload = await this.callHook(\"getAppRecordName\"\n /* GET_APP_RECORD_NAME */\n , {\n app,\n name: null\n });\n\n if (payload.name) {\n return payload.name;\n } else {\n return `App ${defaultName}`;\n }\n }\n\n async getAppRootInstance(app) {\n const payload = await this.callHook(\"getAppRootInstance\"\n /* GET_APP_ROOT_INSTANCE */\n , {\n app,\n root: null\n });\n return payload.root;\n }\n\n async registerApplication(app) {\n await this.callHook(\"registerApplication\"\n /* REGISTER_APPLICATION */\n , {\n app\n });\n }\n\n async walkComponentTree(instance, maxDepth = -1, filter = null) {\n const payload = await this.callHook(\"walkComponentTree\"\n /* WALK_COMPONENT_TREE */\n , {\n componentInstance: instance,\n componentTreeData: null,\n maxDepth,\n filter\n });\n return payload.componentTreeData;\n }\n\n async visitComponentTree(instance, treeNode, filter = null, app) {\n const payload = await this.callHook(\"visitComponentTree\"\n /* VISIT_COMPONENT_TREE */\n , {\n app,\n componentInstance: instance,\n treeNode,\n filter\n });\n return payload.treeNode;\n }\n\n async walkComponentParents(instance) {\n const payload = await this.callHook(\"walkComponentParents\"\n /* WALK_COMPONENT_PARENTS */\n , {\n componentInstance: instance,\n parentInstances: []\n });\n return payload.parentInstances;\n }\n\n async inspectComponent(instance, app) {\n const payload = await this.callHook(\"inspectComponent\"\n /* INSPECT_COMPONENT */\n , {\n app,\n componentInstance: instance,\n instanceData: null\n });\n return payload.instanceData;\n }\n\n async getComponentBounds(instance) {\n const payload = await this.callHook(\"getComponentBounds\"\n /* GET_COMPONENT_BOUNDS */\n , {\n componentInstance: instance,\n bounds: null\n });\n return payload.bounds;\n }\n\n async getComponentName(instance) {\n const payload = await this.callHook(\"getComponentName\"\n /* GET_COMPONENT_NAME */\n , {\n componentInstance: instance,\n name: null\n });\n return payload.name;\n }\n\n async getComponentInstances(app) {\n const payload = await this.callHook(\"getComponentInstances\"\n /* GET_COMPONENT_INSTANCES */\n , {\n app,\n componentInstances: []\n });\n return payload.componentInstances;\n }\n\n async getElementComponent(element) {\n const payload = await this.callHook(\"getElementComponent\"\n /* GET_ELEMENT_COMPONENT */\n , {\n element,\n componentInstance: null\n });\n return payload.componentInstance;\n }\n\n async getComponentRootElements(instance) {\n const payload = await this.callHook(\"getComponentRootElements\"\n /* GET_COMPONENT_ROOT_ELEMENTS */\n , {\n componentInstance: instance,\n rootElements: []\n });\n return payload.rootElements;\n }\n\n async editComponentState(instance, dotPath, type, state, app) {\n const arrayPath = dotPath.split('.');\n const payload = await this.callHook(\"editComponentState\"\n /* EDIT_COMPONENT_STATE */\n , {\n app,\n componentInstance: instance,\n path: arrayPath,\n type,\n state,\n set: (object, path = arrayPath, value = state.value, cb) => this.stateEditor.set(object, path, value, cb || this.stateEditor.createDefaultSetCallback(state))\n });\n return payload.componentInstance;\n }\n\n async getComponentDevtoolsOptions(instance) {\n const payload = await this.callHook(\"getAppDevtoolsOptions\"\n /* GET_COMPONENT_DEVTOOLS_OPTIONS */\n , {\n componentInstance: instance,\n options: null\n });\n return payload.options || {};\n }\n\n async getComponentRenderCode(instance) {\n const payload = await this.callHook(\"getComponentRenderCode\"\n /* GET_COMPONENT_RENDER_CODE */\n , {\n componentInstance: instance,\n code: null\n });\n return {\n code: payload.code\n };\n }\n\n async inspectTimelineEvent(eventData, app) {\n const payload = await this.callHook(\"inspectTimelineEvent\"\n /* INSPECT_TIMELINE_EVENT */\n , {\n event: eventData.event,\n layerId: eventData.layerId,\n app,\n data: eventData.event.data,\n all: eventData.all\n });\n return payload.data;\n }\n\n async clearTimeline() {\n await this.callHook(\"timelineCleared\"\n /* TIMELINE_CLEARED */\n , {});\n }\n\n async getInspectorTree(inspectorId, app, filter) {\n const payload = await this.callHook(\"getInspectorTree\"\n /* GET_INSPECTOR_TREE */\n , {\n inspectorId,\n app,\n filter,\n rootNodes: []\n });\n return payload.rootNodes;\n }\n\n async getInspectorState(inspectorId, app, nodeId) {\n const payload = await this.callHook(\"getInspectorState\"\n /* GET_INSPECTOR_STATE */\n , {\n inspectorId,\n app,\n nodeId,\n state: null\n });\n return payload.state;\n }\n\n async editInspectorState(inspectorId, app, nodeId, dotPath, type, state) {\n const arrayPath = dotPath.split('.');\n await this.callHook(\"editInspectorState\"\n /* EDIT_INSPECTOR_STATE */\n , {\n inspectorId,\n app,\n nodeId,\n path: arrayPath,\n type,\n state,\n set: (object, path = arrayPath, value = state.value, cb) => this.stateEditor.set(object, path, value, cb || this.stateEditor.createDefaultSetCallback(state))\n });\n }\n\n now() {\n return (0, time_js_1.now)();\n }\n\n}\n\nexports.DevtoolsApi = DevtoolsApi;\n\nclass DevtoolsPluginApiInstance {\n constructor(plugin, appRecord, ctx) {\n this.bridge = ctx.bridge;\n this.ctx = ctx;\n this.plugin = plugin;\n this.appRecord = appRecord;\n this.backendApi = appRecord.backend.api;\n this.defaultSettings = (0, shared_utils_1.getPluginDefaultSettings)(plugin.descriptor.settings);\n this.on = new hooks_1.DevtoolsHookable(ctx, plugin);\n pluginOn.push(this.on);\n } // Plugin API\n\n\n async notifyComponentUpdate(instance = null) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.COMPONENTS)) return;\n\n if (instance) {\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_UPDATED, ...(await this.backendApi.transformCall(shared_utils_1.HookEvents.COMPONENT_UPDATED, instance)));\n } else {\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_UPDATED);\n }\n }\n\n addTimelineLayer(options) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.TIMELINE)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.TIMELINE_LAYER_ADDED, options, this.plugin);\n return true;\n }\n\n addTimelineEvent(options) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.TIMELINE)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.TIMELINE_EVENT_ADDED, options, this.plugin);\n return true;\n }\n\n addInspector(options) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_ADD, options, this.plugin);\n return true;\n }\n\n sendInspectorTree(inspectorId) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_TREE, inspectorId, this.plugin);\n return true;\n }\n\n sendInspectorState(inspectorId) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_STATE, inspectorId, this.plugin);\n return true;\n }\n\n selectInspectorNode(inspectorId, nodeId) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SELECT_NODE, inspectorId, nodeId, this.plugin);\n return true;\n }\n\n getComponentBounds(instance) {\n return this.backendApi.getComponentBounds(instance);\n }\n\n getComponentName(instance) {\n return this.backendApi.getComponentName(instance);\n }\n\n getComponentInstances(app) {\n return this.backendApi.getComponentInstances(app);\n }\n\n highlightElement(instance) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.COMPONENTS)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_HIGHLIGHT, instance.__VUE_DEVTOOLS_UID__, this.plugin);\n return true;\n }\n\n unhighlightElement() {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.COMPONENTS)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_UNHIGHLIGHT, this.plugin);\n return true;\n }\n\n getSettings(pluginId) {\n return (0, shared_utils_1.getPluginSettings)(pluginId !== null && pluginId !== void 0 ? pluginId : this.plugin.descriptor.id, this.defaultSettings);\n }\n\n setSettings(value, pluginId) {\n (0, shared_utils_1.setPluginSettings)(pluginId !== null && pluginId !== void 0 ? pluginId : this.plugin.descriptor.id, value);\n }\n\n now() {\n return (0, time_js_1.now)();\n }\n\n get enabled() {\n return (0, shared_utils_1.hasPluginPermission)(this.plugin.descriptor.id, shared_utils_1.PluginPermission.ENABLED);\n }\n\n hasPermission(permission) {\n return (0, shared_utils_1.hasPluginPermission)(this.plugin.descriptor.id, permission);\n }\n\n}\n\nexports.DevtoolsPluginApiInstance = DevtoolsPluginApiInstance;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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cEMsQ0FBdEIsRUFBdUUsT0FBTyxLQUFQO0FBRXZFLFNBQUssR0FBTCxDQUFTLElBQVQsQ0FBYyxJQUFkLENBQW1CLDBCQUFXLHFCQUE5QixFQUFxRCxLQUFLLE1BQTFEO0FBQ0EsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsYUFBVyxDQUFFLFFBQUYsRUFBbUI7QUFDNUIsV0FBTyxzQ0FBa0IsUUFBUSxTQUFSLFlBQVEsV0FBUixjQUFZLEtBQUssTUFBTCxDQUFZLFVBQVosQ0FBdUIsRUFBckQsRUFBeUQsS0FBSyxlQUE5RCxDQUFQO0FBQ0Q7O0FBRUQsYUFBVyxDQUFFLEtBQUYsRUFBb0IsUUFBcEIsRUFBcUM7QUFDOUMsMENBQWtCLFFBQVEsU0FBUixZQUFRLFdBQVIsY0FBWSxLQUFLLE1BQUwsQ0FBWSxVQUFaLENBQXVCLEVBQXJELEVBQXlELEtBQXpEO0FBQ0Q7O0FBRUQsS0FBRztBQUNELFdBQU8sb0JBQVA7QUFDRDs7QUFFa0IsTUFBUCxPQUFPO0FBQ2pCLFdBQU8sd0NBQW9CLEtBQUssTUFBTCxDQUFZLFVBQVosQ0FBdUIsRUFBM0MsRUFBK0MsZ0NBQWlCLE9BQWhFLENBQVA7QUFDRDs7QUFFTyxlQUFhLENBQUUsVUFBRixFQUE4QjtBQUNqRCxXQUFPLHdDQUFvQixLQUFLLE1BQUwsQ0FBWSxVQUFaLENBQXVCLEVBQTNDLEVBQStDLFVBQS9DLENBQVA7QUFDRDs7QUF0SG1DOztBQUF0QyIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2FwaS50cz9hZDE1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZXZ0b29sc1BsdWdpbkFwaUluc3RhbmNlID0gZXhwb3J0cy5EZXZ0b29sc0FwaSA9IHZvaWQgMDtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuY29uc3QgaG9va3NfMSA9IHJlcXVpcmUoXCIuL2hvb2tzXCIpO1xuY29uc3QgdGltZV9qc18xID0gcmVxdWlyZShcIi4vdGltZS5qc1wiKTtcbmNvbnN0IHBsdWdpbk9uID0gW107XG5jbGFzcyBEZXZ0b29sc0FwaSB7XG4gICAgY29uc3RydWN0b3IoYmFja2VuZCwgY3R4KSB7XG4gICAgICAgIHRoaXMuc3RhdGVFZGl0b3IgPSBuZXcgc2hhcmVkX3V0aWxzXzEuU3RhdGVFZGl0b3IoKTtcbiAgICAgICAgdGhpcy5iYWNrZW5kID0gYmFja2VuZDtcbiAgICAgICAgdGhpcy5jdHggPSBjdHg7XG4gICAgICAgIHRoaXMuYnJpZGdlID0gY3R4LmJyaWRnZTtcbiAgICAgICAgdGhpcy5vbiA9IG5ldyBob29rc18xLkRldnRvb2xzSG9va2FibGUoY3R4KTtcbiAgICB9XG4gICAgYXN5bmMgY2FsbEhvb2soZXZlbnRUeXBlLCBwYXlsb2FkLCBjdHggPSB0aGlzLmN0eCkge1xuICAgICAgICBwYXlsb2FkID0gYXdhaXQgdGhpcy5vbi5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBwYXlsb2FkLCBjdHgpO1xuICAgICAgICBmb3IgKGNvbnN0IG9uIG9mIHBsdWdpbk9uKSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gYXdhaXQgb24uY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgcGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG4gICAgYXN5bmMgdHJhbnNmb3JtQ2FsbChjYWxsTmFtZSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcInRyYW5zZm9ybUNhbGxcIiAvKiBUUkFOU0ZPUk1fQ0FMTCAqLywge1xuICAgICAgICAgICAgY2FsbE5hbWUsXG4gICAgICAgICAgICBpbkFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICBvdXRBcmdzOiBhcmdzLnNsaWNlKCksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5vdXRBcmdzO1xuICAgIH1cbiAgICBhc3luYyBnZXRBcHBSZWNvcmROYW1lKGFwcCwgZGVmYXVsdE5hbWUpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRBcHBSZWNvcmROYW1lXCIgLyogR0VUX0FQUF9SRUNPUkRfTkFNRSAqLywge1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwYXlsb2FkLm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYEFwcCAke2RlZmF1bHROYW1lfWA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0QXBwUm9vdEluc3RhbmNlKGFwcCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldEFwcFJvb3RJbnN0YW5jZVwiIC8qIEdFVF9BUFBfUk9PVF9JTlNUQU5DRSAqLywge1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgcm9vdDogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLnJvb3Q7XG4gICAgfVxuICAgIGFzeW5jIHJlZ2lzdGVyQXBwbGljYXRpb24oYXBwKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbEhvb2soXCJyZWdpc3RlckFwcGxpY2F0aW9uXCIgLyogUkVHSVNURVJfQVBQTElDQVRJT04gKi8sIHtcbiAgICAgICAgICAgIGFwcCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHdhbGtDb21wb25lbnRUcmVlKGluc3RhbmNlLCBtYXhEZXB0aCA9IC0xLCBmaWx0ZXIgPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwid2Fsa0NvbXBvbmVudFRyZWVcIiAvKiBXQUxLX0NPTVBPTkVOVF9UUkVFICovLCB7XG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBjb21wb25lbnRUcmVlRGF0YTogbnVsbCxcbiAgICAgICAgICAgIG1heERlcHRoLFxuICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQuY29tcG9uZW50VHJlZURhdGE7XG4gICAgfVxuICAgIGFzeW5jIHZpc2l0Q29tcG9uZW50VHJlZShpbnN0YW5jZSwgdHJlZU5vZGUsIGZpbHRlciA9IG51bGwsIGFwcCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcInZpc2l0Q29tcG9uZW50VHJlZVwiIC8qIFZJU0lUX0NPTVBPTkVOVF9UUkVFICovLCB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICB0cmVlTm9kZSxcbiAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLnRyZWVOb2RlO1xuICAgIH1cbiAgICBhc3luYyB3YWxrQ29tcG9uZW50UGFyZW50cyhpbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcIndhbGtDb21wb25lbnRQYXJlbnRzXCIgLyogV0FMS19DT01QT05FTlRfUEFSRU5UUyAqLywge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgcGFyZW50SW5zdGFuY2VzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLnBhcmVudEluc3RhbmNlcztcbiAgICB9XG4gICAgYXN5bmMgaW5zcGVjdENvbXBvbmVudChpbnN0YW5jZSwgYXBwKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiaW5zcGVjdENvbXBvbmVudFwiIC8qIElOU1BFQ1RfQ09NUE9ORU5UICovLCB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBpbnN0YW5jZURhdGE6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5pbnN0YW5jZURhdGE7XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudEJvdW5kcyhpbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldENvbXBvbmVudEJvdW5kc1wiIC8qIEdFVF9DT01QT05FTlRfQk9VTkRTICovLCB7XG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBib3VuZHM6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5ib3VuZHM7XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudE5hbWUoaW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRDb21wb25lbnROYW1lXCIgLyogR0VUX0NPTVBPTkVOVF9OQU1FICovLCB7XG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQubmFtZTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0Q29tcG9uZW50SW5zdGFuY2VzKGFwcCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldENvbXBvbmVudEluc3RhbmNlc1wiIC8qIEdFVF9DT01QT05FTlRfSU5TVEFOQ0VTICovLCB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZXM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2VzO1xuICAgIH1cbiAgICBhc3luYyBnZXRFbGVtZW50Q29tcG9uZW50KGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRFbGVtZW50Q29tcG9uZW50XCIgLyogR0VUX0VMRU1FTlRfQ09NUE9ORU5UICovLCB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzKGluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzXCIgLyogR0VUX0NPTVBPTkVOVF9ST09UX0VMRU1FTlRTICovLCB7XG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICByb290RWxlbWVudHM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQucm9vdEVsZW1lbnRzO1xuICAgIH1cbiAgICBhc3luYyBlZGl0Q29tcG9uZW50U3RhdGUoaW5zdGFuY2UsIGRvdFBhdGgsIHR5cGUsIHN0YXRlLCBhcHApIHtcbiAgICAgICAgY29uc3QgYXJyYXlQYXRoID0gZG90UGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImVkaXRDb21wb25lbnRTdGF0ZVwiIC8qIEVESVRfQ09NUE9ORU5UX1NUQVRFICovLCB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBwYXRoOiBhcnJheVBhdGgsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBzZXQ6IChvYmplY3QsIHBhdGggPSBhcnJheVBhdGgsIHZhbHVlID0gc3RhdGUudmFsdWUsIGNiKSA9PiB0aGlzLnN0YXRlRWRpdG9yLnNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjYiB8fCB0aGlzLnN0YXRlRWRpdG9yLmNyZWF0ZURlZmF1bHRTZXRDYWxsYmFjayhzdGF0ZSkpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudERldnRvb2xzT3B0aW9ucyhpbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldEFwcERldnRvb2xzT3B0aW9uc1wiIC8qIEdFVF9DT01QT05FTlRfREVWVE9PTFNfT1BUSU9OUyAqLywge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLm9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudFJlbmRlckNvZGUoaW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRDb21wb25lbnRSZW5kZXJDb2RlXCIgLyogR0VUX0NPTVBPTkVOVF9SRU5ERVJfQ09ERSAqLywge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgY29kZTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2RlOiBwYXlsb2FkLmNvZGUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIGluc3BlY3RUaW1lbGluZUV2ZW50KGV2ZW50RGF0YSwgYXBwKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiaW5zcGVjdFRpbWVsaW5lRXZlbnRcIiAvKiBJTlNQRUNUX1RJTUVMSU5FX0VWRU5UICovLCB7XG4gICAgICAgICAgICBldmVudDogZXZlbnREYXRhLmV2ZW50LFxuICAgICAgICAgICAgbGF5ZXJJZDogZXZlbnREYXRhLmxheWVySWQsXG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBkYXRhOiBldmVudERhdGEuZXZlbnQuZGF0YSxcbiAgICAgICAgICAgIGFsbDogZXZlbnREYXRhLmFsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLmRhdGE7XG4gICAgfVxuICAgIGFzeW5jIGNsZWFyVGltZWxpbmUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbEhvb2soXCJ0aW1lbGluZUNsZWFyZWRcIiAvKiBUSU1FTElORV9DTEVBUkVEICovLCB7fSk7XG4gICAgfVxuICAgIGFzeW5jIGdldEluc3BlY3RvclRyZWUoaW5zcGVjdG9ySWQsIGFwcCwgZmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZ2V0SW5zcGVjdG9yVHJlZVwiIC8qIEdFVF9JTlNQRUNUT1JfVFJFRSAqLywge1xuICAgICAgICAgICAgaW5zcGVjdG9ySWQsXG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICByb290Tm9kZXM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQucm9vdE5vZGVzO1xuICAgIH1cbiAgICBhc3luYyBnZXRJbnNwZWN0b3JTdGF0ZShpbnNwZWN0b3JJZCwgYXBwLCBub2RlSWQpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRJbnNwZWN0b3JTdGF0ZVwiIC8qIEdFVF9JTlNQRUNUT1JfU1RBVEUgKi8sIHtcbiAgICAgICAgICAgIGluc3BlY3RvcklkLFxuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgICAgc3RhdGU6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5zdGF0ZTtcbiAgICB9XG4gICAgYXN5bmMgZWRpdEluc3BlY3RvclN0YXRlKGluc3BlY3RvcklkLCBhcHAsIG5vZGVJZCwgZG90UGF0aCwgdHlwZSwgc3RhdGUpIHtcbiAgICAgICAgY29uc3QgYXJyYXlQYXRoID0gZG90UGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZWRpdEluc3BlY3RvclN0YXRlXCIgLyogRURJVF9JTlNQRUNUT1JfU1RBVEUgKi8sIHtcbiAgICAgICAgICAgIGluc3BlY3RvcklkLFxuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgICAgcGF0aDogYXJyYXlQYXRoLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgc2V0OiAob2JqZWN0LCBwYXRoID0gYXJyYXlQYXRoLCB2YWx1ZSA9IHN0YXRlLnZhbHVlLCBjYikgPT4gdGhpcy5zdGF0ZUVkaXRvci5zZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY2IgfHwgdGhpcy5zdGF0ZUVkaXRvci5jcmVhdGVEZWZhdWx0U2V0Q2FsbGJhY2soc3RhdGUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vdygpIHtcbiAgICAgICAgcmV0dXJuICgwLCB0aW1lX2pzXzEubm93KSgpO1xuICAgIH1cbn1cbmV4cG9ydHMuRGV2dG9vbHNBcGkgPSBEZXZ0b29sc0FwaTtcbmNsYXNzIERldnRvb2xzUGx1Z2luQXBpSW5zdGFuY2Uge1xuICAgIGNvbnN0cnVjdG9yKHBsdWdpbiwgYXBwUmVjb3JkLCBjdHgpIHtcbiAgICAgICAgdGhpcy5icmlkZ2UgPSBjdHguYnJpZGdlO1xuICAgICAgICB0aGlzLmN0eCA9IGN0eDtcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgICAgIHRoaXMuYXBwUmVjb3JkID0gYXBwUmVjb3JkO1xuICAgICAgICB0aGlzLmJhY2tlbmRBcGkgPSBhcHBSZWNvcmQuYmFja2VuZC5hcGk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFNldHRpbmdzID0gKDAsIHNoYXJlZF91dGlsc18xLmdldFBsdWdpbkRlZmF1bHRTZXR0aW5ncykocGx1Z2luLmRlc2NyaXB0b3Iuc2V0dGluZ3MpO1xuICAgICAgICB0aGlzLm9uID0gbmV3IGhvb2tzXzEuRGV2dG9vbHNIb29rYWJsZShjdHgsIHBsdWdpbik7XG4gICAgICAgIHBsdWdpbk9uLnB1c2godGhpcy5vbik7XG4gICAgfVxuICAgIC8vIFBsdWdpbiBBUElcbiAgICBhc3luYyBub3RpZnlDb21wb25lbnRVcGRhdGUoaW5zdGFuY2UgPSBudWxsKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8ICF0aGlzLmhhc1Blcm1pc3Npb24oc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DT01QT05FTlRTKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfVVBEQVRFRCwgLi4uYXdhaXQgdGhpcy5iYWNrZW5kQXBpLnRyYW5zZm9ybUNhbGwoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfVVBEQVRFRCwgaW5zdGFuY2UpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9VUERBVEVEKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGRUaW1lbGluZUxheWVyKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRoaXMuaGFzUGVybWlzc2lvbihzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLlRJTUVMSU5FKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5jdHguaG9vay5lbWl0KHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuVElNRUxJTkVfTEFZRVJfQURERUQsIG9wdGlvbnMsIHRoaXMucGx1Z2luKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGFkZFRpbWVsaW5lRXZlbnQob3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uVElNRUxJTkUpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5USU1FTElORV9FVkVOVF9BRERFRCwgb3B0aW9ucywgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYWRkSW5zcGVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRoaXMuaGFzUGVybWlzc2lvbihzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNVU1RPTV9JTlNQRUNUT1IpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DVVNUT01fSU5TUEVDVE9SX0FERCwgb3B0aW9ucywgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2VuZEluc3BlY3RvclRyZWUoaW5zcGVjdG9ySWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRoaXMuaGFzUGVybWlzc2lvbihzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNVU1RPTV9JTlNQRUNUT1IpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DVVNUT01fSU5TUEVDVE9SX1NFTkRfVFJFRSwgaW5zcGVjdG9ySWQsIHRoaXMucGx1Z2luKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNlbmRJbnNwZWN0b3JTdGF0ZShpbnNwZWN0b3JJZCkge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ1VTVE9NX0lOU1BFQ1RPUikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNVU1RPTV9JTlNQRUNUT1JfU0VORF9TVEFURSwgaW5zcGVjdG9ySWQsIHRoaXMucGx1Z2luKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNlbGVjdEluc3BlY3Rvck5vZGUoaW5zcGVjdG9ySWQsIG5vZGVJZCkge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ1VTVE9NX0lOU1BFQ1RPUikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNVU1RPTV9JTlNQRUNUT1JfU0VMRUNUX05PREUsIGluc3BlY3RvcklkLCBub2RlSWQsIHRoaXMucGx1Z2luKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldENvbXBvbmVudEJvdW5kcyhpbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kQXBpLmdldENvbXBvbmVudEJvdW5kcyhpbnN0YW5jZSk7XG4gICAgfVxuICAgIGdldENvbXBvbmVudE5hbWUoaW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZEFwaS5nZXRDb21wb25lbnROYW1lKGluc3RhbmNlKTtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50SW5zdGFuY2VzKGFwcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kQXBpLmdldENvbXBvbmVudEluc3RhbmNlcyhhcHApO1xuICAgIH1cbiAgICBoaWdobGlnaHRFbGVtZW50KGluc3RhbmNlKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8ICF0aGlzLmhhc1Blcm1pc3Npb24oc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DT01QT05FTlRTKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5jdHguaG9vay5lbWl0KHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX0hJR0hMSUdIVCwgaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18sIHRoaXMucGx1Z2luKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHVuaGlnaGxpZ2h0RWxlbWVudCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRoaXMuaGFzUGVybWlzc2lvbihzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfVU5ISUdITElHSFQsIHRoaXMucGx1Z2luKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldFNldHRpbmdzKHBsdWdpbklkKSB7XG4gICAgICAgIHJldHVybiAoMCwgc2hhcmVkX3V0aWxzXzEuZ2V0UGx1Z2luU2V0dGluZ3MpKHBsdWdpbklkICE9PSBudWxsICYmIHBsdWdpbklkICE9PSB2b2lkIDAgPyBwbHVnaW5JZCA6IHRoaXMucGx1Z2luLmRlc2NyaXB0b3IuaWQsIHRoaXMuZGVmYXVsdFNldHRpbmdzKTtcbiAgICB9XG4gICAgc2V0U2V0dGluZ3ModmFsdWUsIHBsdWdpbklkKSB7XG4gICAgICAgICgwLCBzaGFyZWRfdXRpbHNfMS5zZXRQbHVnaW5TZXR0aW5ncykocGx1Z2luSWQgIT09IG51bGwgJiYgcGx1Z2luSWQgIT09IHZvaWQgMCA/IHBsdWdpbklkIDogdGhpcy5wbHVnaW4uZGVzY3JpcHRvci5pZCwgdmFsdWUpO1xuICAgIH1cbiAgICBub3coKSB7XG4gICAgICAgIHJldHVybiAoMCwgdGltZV9qc18xLm5vdykoKTtcbiAgICB9XG4gICAgZ2V0IGVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAoMCwgc2hhcmVkX3V0aWxzXzEuaGFzUGx1Z2luUGVybWlzc2lvbikodGhpcy5wbHVnaW4uZGVzY3JpcHRvci5pZCwgc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5FTkFCTEVEKTtcbiAgICB9XG4gICAgaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uKSB7XG4gICAgICAgIHJldHVybiAoMCwgc2hhcmVkX3V0aWxzXzEuaGFzUGx1Z2luUGVybWlzc2lvbikodGhpcy5wbHVnaW4uZGVzY3JpcHRvci5pZCwgcGVybWlzc2lvbik7XG4gICAgfVxufVxuZXhwb3J0cy5EZXZ0b29sc1BsdWdpbkFwaUluc3RhbmNlID0gRGV2dG9vbHNQbHVnaW5BcGlJbnN0YW5jZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwaS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///32423\n");
38
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.DevtoolsPluginApiInstance = exports.DevtoolsApi = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst devtools_api_1 = __webpack_require__(13508);\n\nconst hooks_1 = __webpack_require__(29618);\n\nconst pluginOn = [];\n\nclass DevtoolsApi {\n constructor(backend, ctx) {\n this.stateEditor = new shared_utils_1.StateEditor();\n this.backend = backend;\n this.ctx = ctx;\n this.bridge = ctx.bridge;\n this.on = new hooks_1.DevtoolsHookable(ctx);\n }\n\n async callHook(eventType, payload, ctx = this.ctx) {\n payload = await this.on.callHandlers(eventType, payload, ctx);\n\n for (const on of pluginOn) {\n payload = await on.callHandlers(eventType, payload, ctx);\n }\n\n return payload;\n }\n\n async transformCall(callName, ...args) {\n const payload = await this.callHook(\"transformCall\"\n /* TRANSFORM_CALL */\n , {\n callName,\n inArgs: args,\n outArgs: args.slice()\n });\n return payload.outArgs;\n }\n\n async getAppRecordName(app, defaultName) {\n const payload = await this.callHook(\"getAppRecordName\"\n /* GET_APP_RECORD_NAME */\n , {\n app,\n name: null\n });\n\n if (payload.name) {\n return payload.name;\n } else {\n return `App ${defaultName}`;\n }\n }\n\n async getAppRootInstance(app) {\n const payload = await this.callHook(\"getAppRootInstance\"\n /* GET_APP_ROOT_INSTANCE */\n , {\n app,\n root: null\n });\n return payload.root;\n }\n\n async registerApplication(app) {\n await this.callHook(\"registerApplication\"\n /* REGISTER_APPLICATION */\n , {\n app\n });\n }\n\n async walkComponentTree(instance, maxDepth = -1, filter = null) {\n const payload = await this.callHook(\"walkComponentTree\"\n /* WALK_COMPONENT_TREE */\n , {\n componentInstance: instance,\n componentTreeData: null,\n maxDepth,\n filter\n });\n return payload.componentTreeData;\n }\n\n async visitComponentTree(instance, treeNode, filter = null, app) {\n const payload = await this.callHook(\"visitComponentTree\"\n /* VISIT_COMPONENT_TREE */\n , {\n app,\n componentInstance: instance,\n treeNode,\n filter\n });\n return payload.treeNode;\n }\n\n async walkComponentParents(instance) {\n const payload = await this.callHook(\"walkComponentParents\"\n /* WALK_COMPONENT_PARENTS */\n , {\n componentInstance: instance,\n parentInstances: []\n });\n return payload.parentInstances;\n }\n\n async inspectComponent(instance, app) {\n const payload = await this.callHook(\"inspectComponent\"\n /* INSPECT_COMPONENT */\n , {\n app,\n componentInstance: instance,\n instanceData: null\n });\n return payload.instanceData;\n }\n\n async getComponentBounds(instance) {\n const payload = await this.callHook(\"getComponentBounds\"\n /* GET_COMPONENT_BOUNDS */\n , {\n componentInstance: instance,\n bounds: null\n });\n return payload.bounds;\n }\n\n async getComponentName(instance) {\n const payload = await this.callHook(\"getComponentName\"\n /* GET_COMPONENT_NAME */\n , {\n componentInstance: instance,\n name: null\n });\n return payload.name;\n }\n\n async getComponentInstances(app) {\n const payload = await this.callHook(\"getComponentInstances\"\n /* GET_COMPONENT_INSTANCES */\n , {\n app,\n componentInstances: []\n });\n return payload.componentInstances;\n }\n\n async getElementComponent(element) {\n const payload = await this.callHook(\"getElementComponent\"\n /* GET_ELEMENT_COMPONENT */\n , {\n element,\n componentInstance: null\n });\n return payload.componentInstance;\n }\n\n async getComponentRootElements(instance) {\n const payload = await this.callHook(\"getComponentRootElements\"\n /* GET_COMPONENT_ROOT_ELEMENTS */\n , {\n componentInstance: instance,\n rootElements: []\n });\n return payload.rootElements;\n }\n\n async editComponentState(instance, dotPath, type, state, app) {\n const arrayPath = dotPath.split('.');\n const payload = await this.callHook(\"editComponentState\"\n /* EDIT_COMPONENT_STATE */\n , {\n app,\n componentInstance: instance,\n path: arrayPath,\n type,\n state,\n set: (object, path = arrayPath, value = state.value, cb) => this.stateEditor.set(object, path, value, cb || this.stateEditor.createDefaultSetCallback(state))\n });\n return payload.componentInstance;\n }\n\n async getComponentDevtoolsOptions(instance) {\n const payload = await this.callHook(\"getAppDevtoolsOptions\"\n /* GET_COMPONENT_DEVTOOLS_OPTIONS */\n , {\n componentInstance: instance,\n options: null\n });\n return payload.options || {};\n }\n\n async getComponentRenderCode(instance) {\n const payload = await this.callHook(\"getComponentRenderCode\"\n /* GET_COMPONENT_RENDER_CODE */\n , {\n componentInstance: instance,\n code: null\n });\n return {\n code: payload.code\n };\n }\n\n async inspectTimelineEvent(eventData, app) {\n const payload = await this.callHook(\"inspectTimelineEvent\"\n /* INSPECT_TIMELINE_EVENT */\n , {\n event: eventData.event,\n layerId: eventData.layerId,\n app,\n data: eventData.event.data,\n all: eventData.all\n });\n return payload.data;\n }\n\n async clearTimeline() {\n await this.callHook(\"timelineCleared\"\n /* TIMELINE_CLEARED */\n , {});\n }\n\n async getInspectorTree(inspectorId, app, filter) {\n const payload = await this.callHook(\"getInspectorTree\"\n /* GET_INSPECTOR_TREE */\n , {\n inspectorId,\n app,\n filter,\n rootNodes: []\n });\n return payload.rootNodes;\n }\n\n async getInspectorState(inspectorId, app, nodeId) {\n const payload = await this.callHook(\"getInspectorState\"\n /* GET_INSPECTOR_STATE */\n , {\n inspectorId,\n app,\n nodeId,\n state: null\n });\n return payload.state;\n }\n\n async editInspectorState(inspectorId, app, nodeId, dotPath, type, state) {\n const arrayPath = dotPath.split('.');\n await this.callHook(\"editInspectorState\"\n /* EDIT_INSPECTOR_STATE */\n , {\n inspectorId,\n app,\n nodeId,\n path: arrayPath,\n type,\n state,\n set: (object, path = arrayPath, value = state.value, cb) => this.stateEditor.set(object, path, value, cb || this.stateEditor.createDefaultSetCallback(state))\n });\n }\n\n now() {\n return (0, devtools_api_1.now)();\n }\n\n}\n\nexports.DevtoolsApi = DevtoolsApi;\n\nclass DevtoolsPluginApiInstance {\n constructor(plugin, appRecord, ctx) {\n this.bridge = ctx.bridge;\n this.ctx = ctx;\n this.plugin = plugin;\n this.appRecord = appRecord;\n this.backendApi = appRecord.backend.api;\n this.defaultSettings = (0, shared_utils_1.getPluginDefaultSettings)(plugin.descriptor.settings);\n this.on = new hooks_1.DevtoolsHookable(ctx, plugin);\n pluginOn.push(this.on);\n } // Plugin API\n\n\n async notifyComponentUpdate(instance = null) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.COMPONENTS)) return;\n\n if (instance) {\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_UPDATED, ...(await this.backendApi.transformCall(shared_utils_1.HookEvents.COMPONENT_UPDATED, instance)));\n } else {\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_UPDATED);\n }\n }\n\n addTimelineLayer(options) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.TIMELINE)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.TIMELINE_LAYER_ADDED, options, this.plugin);\n return true;\n }\n\n addTimelineEvent(options) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.TIMELINE)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.TIMELINE_EVENT_ADDED, options, this.plugin);\n return true;\n }\n\n addInspector(options) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_ADD, options, this.plugin);\n return true;\n }\n\n sendInspectorTree(inspectorId) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_TREE, inspectorId, this.plugin);\n return true;\n }\n\n sendInspectorState(inspectorId) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_STATE, inspectorId, this.plugin);\n return true;\n }\n\n selectInspectorNode(inspectorId, nodeId) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SELECT_NODE, inspectorId, nodeId, this.plugin);\n return true;\n }\n\n getComponentBounds(instance) {\n return this.backendApi.getComponentBounds(instance);\n }\n\n getComponentName(instance) {\n return this.backendApi.getComponentName(instance);\n }\n\n getComponentInstances(app) {\n return this.backendApi.getComponentInstances(app);\n }\n\n highlightElement(instance) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.COMPONENTS)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_HIGHLIGHT, instance.__VUE_DEVTOOLS_UID__, this.plugin);\n return true;\n }\n\n unhighlightElement() {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.COMPONENTS)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_UNHIGHLIGHT, this.plugin);\n return true;\n }\n\n getSettings(pluginId) {\n return (0, shared_utils_1.getPluginSettings)(pluginId !== null && pluginId !== void 0 ? pluginId : this.plugin.descriptor.id, this.defaultSettings);\n }\n\n setSettings(value, pluginId) {\n (0, shared_utils_1.setPluginSettings)(pluginId !== null && pluginId !== void 0 ? pluginId : this.plugin.descriptor.id, value);\n }\n\n now() {\n return (0, devtools_api_1.now)();\n }\n\n get enabled() {\n return (0, shared_utils_1.hasPluginPermission)(this.plugin.descriptor.id, shared_utils_1.PluginPermission.ENABLED);\n }\n\n hasPermission(permission) {\n return (0, shared_utils_1.hasPluginPermission)(this.plugin.descriptor.id, permission);\n }\n\n}\n\nexports.DevtoolsPluginApiInstance = DevtoolsPluginApiInstance;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxDQUF0QixFQUF1RSxPQUFPLEtBQVA7QUFFdkUsU0FBSyxHQUFMLENBQVMsSUFBVCxDQUFjLElBQWQsQ0FBbUIsMEJBQVcscUJBQTlCLEVBQXFELEtBQUssTUFBMUQ7QUFDQSxXQUFPLElBQVA7QUFDRDs7QUFFRCxhQUFXLENBQUUsUUFBRixFQUFtQjtBQUM1QixXQUFPLHNDQUFrQixRQUFRLFNBQVIsWUFBUSxXQUFSLGNBQVksS0FBSyxNQUFMLENBQVksVUFBWixDQUF1QixFQUFyRCxFQUF5RCxLQUFLLGVBQTlELENBQVA7QUFDRDs7QUFFRCxhQUFXLENBQUUsS0FBRixFQUFvQixRQUFwQixFQUFxQztBQUM5QywwQ0FBa0IsUUFBUSxTQUFSLFlBQVEsV0FBUixjQUFZLEtBQUssTUFBTCxDQUFZLFVBQVosQ0FBdUIsRUFBckQsRUFBeUQsS0FBekQ7QUFDRDs7QUFFRCxLQUFHO0FBQ0QsV0FBTyx5QkFBUDtBQUNEOztBQUVrQixNQUFQLE9BQU87QUFDakIsV0FBTyx3Q0FBb0IsS0FBSyxNQUFMLENBQVksVUFBWixDQUF1QixFQUEzQyxFQUErQyxnQ0FBaUIsT0FBaEUsQ0FBUDtBQUNEOztBQUVPLGVBQWEsQ0FBRSxVQUFGLEVBQThCO0FBQ2pELFdBQU8sd0NBQW9CLEtBQUssTUFBTCxDQUFZLFVBQVosQ0FBdUIsRUFBM0MsRUFBK0MsVUFBL0MsQ0FBUDtBQUNEOztBQXRIbUM7O0FBQXRDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvYXBpLnRzP2FkMTUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRldnRvb2xzUGx1Z2luQXBpSW5zdGFuY2UgPSBleHBvcnRzLkRldnRvb2xzQXBpID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBkZXZ0b29sc19hcGlfMSA9IHJlcXVpcmUoXCJAdnVlL2RldnRvb2xzLWFwaVwiKTtcbmNvbnN0IGhvb2tzXzEgPSByZXF1aXJlKFwiLi9ob29rc1wiKTtcbmNvbnN0IHBsdWdpbk9uID0gW107XG5jbGFzcyBEZXZ0b29sc0FwaSB7XG4gICAgY29uc3RydWN0b3IoYmFja2VuZCwgY3R4KSB7XG4gICAgICAgIHRoaXMuc3RhdGVFZGl0b3IgPSBuZXcgc2hhcmVkX3V0aWxzXzEuU3RhdGVFZGl0b3IoKTtcbiAgICAgICAgdGhpcy5iYWNrZW5kID0gYmFja2VuZDtcbiAgICAgICAgdGhpcy5jdHggPSBjdHg7XG4gICAgICAgIHRoaXMuYnJpZGdlID0gY3R4LmJyaWRnZTtcbiAgICAgICAgdGhpcy5vbiA9IG5ldyBob29rc18xLkRldnRvb2xzSG9va2FibGUoY3R4KTtcbiAgICB9XG4gICAgYXN5bmMgY2FsbEhvb2soZXZlbnRUeXBlLCBwYXlsb2FkLCBjdHggPSB0aGlzLmN0eCkge1xuICAgICAgICBwYXlsb2FkID0gYXdhaXQgdGhpcy5vbi5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBwYXlsb2FkLCBjdHgpO1xuICAgICAgICBmb3IgKGNvbnN0IG9uIG9mIHBsdWdpbk9uKSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gYXdhaXQgb24uY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgcGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG4gICAgYXN5bmMgdHJhbnNmb3JtQ2FsbChjYWxsTmFtZSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcInRyYW5zZm9ybUNhbGxcIiAvKiBUUkFOU0ZPUk1fQ0FMTCAqLywge1xuICAgICAgICAgICAgY2FsbE5hbWUsXG4gICAgICAgICAgICBpbkFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICBvdXRBcmdzOiBhcmdzLnNsaWNlKCksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5vdXRBcmdzO1xuICAgIH1cbiAgICBhc3luYyBnZXRBcHBSZWNvcmROYW1lKGFwcCwgZGVmYXVsdE5hbWUpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRBcHBSZWNvcmROYW1lXCIgLyogR0VUX0FQUF9SRUNPUkRfTkFNRSAqLywge1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwYXlsb2FkLm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYEFwcCAke2RlZmF1bHROYW1lfWA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0QXBwUm9vdEluc3RhbmNlKGFwcCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldEFwcFJvb3RJbnN0YW5jZVwiIC8qIEdFVF9BUFBfUk9PVF9JTlNUQU5DRSAqLywge1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgcm9vdDogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLnJvb3Q7XG4gICAgfVxuICAgIGFzeW5jIHJlZ2lzdGVyQXBwbGljYXRpb24oYXBwKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbEhvb2soXCJyZWdpc3RlckFwcGxpY2F0aW9uXCIgLyogUkVHSVNURVJfQVBQTElDQVRJT04gKi8sIHtcbiAgICAgICAgICAgIGFwcCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHdhbGtDb21wb25lbnRUcmVlKGluc3RhbmNlLCBtYXhEZXB0aCA9IC0xLCBmaWx0ZXIgPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwid2Fsa0NvbXBvbmVudFRyZWVcIiAvKiBXQUxLX0NPTVBPTkVOVF9UUkVFICovLCB7XG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBjb21wb25lbnRUcmVlRGF0YTogbnVsbCxcbiAgICAgICAgICAgIG1heERlcHRoLFxuICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQuY29tcG9uZW50VHJlZURhdGE7XG4gICAgfVxuICAgIGFzeW5jIHZpc2l0Q29tcG9uZW50VHJlZShpbnN0YW5jZSwgdHJlZU5vZGUsIGZpbHRlciA9IG51bGwsIGFwcCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcInZpc2l0Q29tcG9uZW50VHJlZVwiIC8qIFZJU0lUX0NPTVBPTkVOVF9UUkVFICovLCB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICB0cmVlTm9kZSxcbiAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLnRyZWVOb2RlO1xuICAgIH1cbiAgICBhc3luYyB3YWxrQ29tcG9uZW50UGFyZW50cyhpbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcIndhbGtDb21wb25lbnRQYXJlbnRzXCIgLyogV0FMS19DT01QT05FTlRfUEFSRU5UUyAqLywge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgcGFyZW50SW5zdGFuY2VzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLnBhcmVudEluc3RhbmNlcztcbiAgICB9XG4gICAgYXN5bmMgaW5zcGVjdENvbXBvbmVudChpbnN0YW5jZSwgYXBwKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiaW5zcGVjdENvbXBvbmVudFwiIC8qIElOU1BFQ1RfQ09NUE9ORU5UICovLCB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBpbnN0YW5jZURhdGE6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5pbnN0YW5jZURhdGE7XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudEJvdW5kcyhpbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldENvbXBvbmVudEJvdW5kc1wiIC8qIEdFVF9DT01QT05FTlRfQk9VTkRTICovLCB7XG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBib3VuZHM6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5ib3VuZHM7XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudE5hbWUoaW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRDb21wb25lbnROYW1lXCIgLyogR0VUX0NPTVBPTkVOVF9OQU1FICovLCB7XG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQubmFtZTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0Q29tcG9uZW50SW5zdGFuY2VzKGFwcCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldENvbXBvbmVudEluc3RhbmNlc1wiIC8qIEdFVF9DT01QT05FTlRfSU5TVEFOQ0VTICovLCB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZXM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2VzO1xuICAgIH1cbiAgICBhc3luYyBnZXRFbGVtZW50Q29tcG9uZW50KGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRFbGVtZW50Q29tcG9uZW50XCIgLyogR0VUX0VMRU1FTlRfQ09NUE9ORU5UICovLCB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzKGluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzXCIgLyogR0VUX0NPTVBPTkVOVF9ST09UX0VMRU1FTlRTICovLCB7XG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICByb290RWxlbWVudHM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQucm9vdEVsZW1lbnRzO1xuICAgIH1cbiAgICBhc3luYyBlZGl0Q29tcG9uZW50U3RhdGUoaW5zdGFuY2UsIGRvdFBhdGgsIHR5cGUsIHN0YXRlLCBhcHApIHtcbiAgICAgICAgY29uc3QgYXJyYXlQYXRoID0gZG90UGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImVkaXRDb21wb25lbnRTdGF0ZVwiIC8qIEVESVRfQ09NUE9ORU5UX1NUQVRFICovLCB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBwYXRoOiBhcnJheVBhdGgsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBzZXQ6IChvYmplY3QsIHBhdGggPSBhcnJheVBhdGgsIHZhbHVlID0gc3RhdGUudmFsdWUsIGNiKSA9PiB0aGlzLnN0YXRlRWRpdG9yLnNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjYiB8fCB0aGlzLnN0YXRlRWRpdG9yLmNyZWF0ZURlZmF1bHRTZXRDYWxsYmFjayhzdGF0ZSkpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudERldnRvb2xzT3B0aW9ucyhpbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldEFwcERldnRvb2xzT3B0aW9uc1wiIC8qIEdFVF9DT01QT05FTlRfREVWVE9PTFNfT1BUSU9OUyAqLywge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLm9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudFJlbmRlckNvZGUoaW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRDb21wb25lbnRSZW5kZXJDb2RlXCIgLyogR0VUX0NPTVBPTkVOVF9SRU5ERVJfQ09ERSAqLywge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgY29kZTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2RlOiBwYXlsb2FkLmNvZGUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIGluc3BlY3RUaW1lbGluZUV2ZW50KGV2ZW50RGF0YSwgYXBwKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiaW5zcGVjdFRpbWVsaW5lRXZlbnRcIiAvKiBJTlNQRUNUX1RJTUVMSU5FX0VWRU5UICovLCB7XG4gICAgICAgICAgICBldmVudDogZXZlbnREYXRhLmV2ZW50LFxuICAgICAgICAgICAgbGF5ZXJJZDogZXZlbnREYXRhLmxheWVySWQsXG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBkYXRhOiBldmVudERhdGEuZXZlbnQuZGF0YSxcbiAgICAgICAgICAgIGFsbDogZXZlbnREYXRhLmFsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLmRhdGE7XG4gICAgfVxuICAgIGFzeW5jIGNsZWFyVGltZWxpbmUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbEhvb2soXCJ0aW1lbGluZUNsZWFyZWRcIiAvKiBUSU1FTElORV9DTEVBUkVEICovLCB7fSk7XG4gICAgfVxuICAgIGFzeW5jIGdldEluc3BlY3RvclRyZWUoaW5zcGVjdG9ySWQsIGFwcCwgZmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZ2V0SW5zcGVjdG9yVHJlZVwiIC8qIEdFVF9JTlNQRUNUT1JfVFJFRSAqLywge1xuICAgICAgICAgICAgaW5zcGVjdG9ySWQsXG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICByb290Tm9kZXM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQucm9vdE5vZGVzO1xuICAgIH1cbiAgICBhc3luYyBnZXRJbnNwZWN0b3JTdGF0ZShpbnNwZWN0b3JJZCwgYXBwLCBub2RlSWQpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRJbnNwZWN0b3JTdGF0ZVwiIC8qIEdFVF9JTlNQRUNUT1JfU1RBVEUgKi8sIHtcbiAgICAgICAgICAgIGluc3BlY3RvcklkLFxuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgICAgc3RhdGU6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5zdGF0ZTtcbiAgICB9XG4gICAgYXN5bmMgZWRpdEluc3BlY3RvclN0YXRlKGluc3BlY3RvcklkLCBhcHAsIG5vZGVJZCwgZG90UGF0aCwgdHlwZSwgc3RhdGUpIHtcbiAgICAgICAgY29uc3QgYXJyYXlQYXRoID0gZG90UGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZWRpdEluc3BlY3RvclN0YXRlXCIgLyogRURJVF9JTlNQRUNUT1JfU1RBVEUgKi8sIHtcbiAgICAgICAgICAgIGluc3BlY3RvcklkLFxuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgICAgcGF0aDogYXJyYXlQYXRoLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgc2V0OiAob2JqZWN0LCBwYXRoID0gYXJyYXlQYXRoLCB2YWx1ZSA9IHN0YXRlLnZhbHVlLCBjYikgPT4gdGhpcy5zdGF0ZUVkaXRvci5zZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY2IgfHwgdGhpcy5zdGF0ZUVkaXRvci5jcmVhdGVEZWZhdWx0U2V0Q2FsbGJhY2soc3RhdGUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vdygpIHtcbiAgICAgICAgcmV0dXJuICgwLCBkZXZ0b29sc19hcGlfMS5ub3cpKCk7XG4gICAgfVxufVxuZXhwb3J0cy5EZXZ0b29sc0FwaSA9IERldnRvb2xzQXBpO1xuY2xhc3MgRGV2dG9vbHNQbHVnaW5BcGlJbnN0YW5jZSB7XG4gICAgY29uc3RydWN0b3IocGx1Z2luLCBhcHBSZWNvcmQsIGN0eCkge1xuICAgICAgICB0aGlzLmJyaWRnZSA9IGN0eC5icmlkZ2U7XG4gICAgICAgIHRoaXMuY3R4ID0gY3R4O1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICAgICAgdGhpcy5hcHBSZWNvcmQgPSBhcHBSZWNvcmQ7XG4gICAgICAgIHRoaXMuYmFja2VuZEFwaSA9IGFwcFJlY29yZC5iYWNrZW5kLmFwaTtcbiAgICAgICAgdGhpcy5kZWZhdWx0U2V0dGluZ3MgPSAoMCwgc2hhcmVkX3V0aWxzXzEuZ2V0UGx1Z2luRGVmYXVsdFNldHRpbmdzKShwbHVnaW4uZGVzY3JpcHRvci5zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMub24gPSBuZXcgaG9va3NfMS5EZXZ0b29sc0hvb2thYmxlKGN0eCwgcGx1Z2luKTtcbiAgICAgICAgcGx1Z2luT24ucHVzaCh0aGlzLm9uKTtcbiAgICB9XG4gICAgLy8gUGx1Z2luIEFQSVxuICAgIGFzeW5jIG5vdGlmeUNvbXBvbmVudFVwZGF0ZShpbnN0YW5jZSA9IG51bGwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRoaXMuaGFzUGVybWlzc2lvbihzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9VUERBVEVELCAuLi5hd2FpdCB0aGlzLmJhY2tlbmRBcGkudHJhbnNmb3JtQ2FsbChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9VUERBVEVELCBpbnN0YW5jZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdHguaG9vay5lbWl0KHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX1VQREFURUQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZFRpbWVsaW5lTGF5ZXIob3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uVElNRUxJTkUpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5USU1FTElORV9MQVlFUl9BRERFRCwgb3B0aW9ucywgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYWRkVGltZWxpbmVFdmVudChvcHRpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8ICF0aGlzLmhhc1Blcm1pc3Npb24oc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5USU1FTElORSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlRJTUVMSU5FX0VWRU5UX0FEREVELCBvcHRpb25zLCB0aGlzLnBsdWdpbik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhZGRJbnNwZWN0b3Iob3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ1VTVE9NX0lOU1BFQ1RPUikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNVU1RPTV9JTlNQRUNUT1JfQURELCBvcHRpb25zLCB0aGlzLnBsdWdpbik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzZW5kSW5zcGVjdG9yVHJlZShpbnNwZWN0b3JJZCkge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ1VTVE9NX0lOU1BFQ1RPUikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNVU1RPTV9JTlNQRUNUT1JfU0VORF9UUkVFLCBpbnNwZWN0b3JJZCwgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2VuZEluc3BlY3RvclN0YXRlKGluc3BlY3RvcklkKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8ICF0aGlzLmhhc1Blcm1pc3Npb24oc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DVVNUT01fSU5TUEVDVE9SKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5jdHguaG9vay5lbWl0KHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ1VTVE9NX0lOU1BFQ1RPUl9TRU5EX1NUQVRFLCBpbnNwZWN0b3JJZCwgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2VsZWN0SW5zcGVjdG9yTm9kZShpbnNwZWN0b3JJZCwgbm9kZUlkKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8ICF0aGlzLmhhc1Blcm1pc3Npb24oc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DVVNUT01fSU5TUEVDVE9SKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5jdHguaG9vay5lbWl0KHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ1VTVE9NX0lOU1BFQ1RPUl9TRUxFQ1RfTk9ERSwgaW5zcGVjdG9ySWQsIG5vZGVJZCwgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50Qm91bmRzKGluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhY2tlbmRBcGkuZ2V0Q29tcG9uZW50Qm91bmRzKGluc3RhbmNlKTtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50TmFtZShpbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kQXBpLmdldENvbXBvbmVudE5hbWUoaW5zdGFuY2UpO1xuICAgIH1cbiAgICBnZXRDb21wb25lbnRJbnN0YW5jZXMoYXBwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhY2tlbmRBcGkuZ2V0Q29tcG9uZW50SW5zdGFuY2VzKGFwcCk7XG4gICAgfVxuICAgIGhpZ2hsaWdodEVsZW1lbnQoaW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRoaXMuaGFzUGVybWlzc2lvbihzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfSElHSExJR0hULCBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXywgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdW5oaWdobGlnaHRFbGVtZW50KCkge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ09NUE9ORU5UUykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9VTkhJR0hMSUdIVCwgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0U2V0dGluZ3MocGx1Z2luSWQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBzaGFyZWRfdXRpbHNfMS5nZXRQbHVnaW5TZXR0aW5ncykocGx1Z2luSWQgIT09IG51bGwgJiYgcGx1Z2luSWQgIT09IHZvaWQgMCA/IHBsdWdpbklkIDogdGhpcy5wbHVnaW4uZGVzY3JpcHRvci5pZCwgdGhpcy5kZWZhdWx0U2V0dGluZ3MpO1xuICAgIH1cbiAgICBzZXRTZXR0aW5ncyh2YWx1ZSwgcGx1Z2luSWQpIHtcbiAgICAgICAgKDAsIHNoYXJlZF91dGlsc18xLnNldFBsdWdpblNldHRpbmdzKShwbHVnaW5JZCAhPT0gbnVsbCAmJiBwbHVnaW5JZCAhPT0gdm9pZCAwID8gcGx1Z2luSWQgOiB0aGlzLnBsdWdpbi5kZXNjcmlwdG9yLmlkLCB2YWx1ZSk7XG4gICAgfVxuICAgIG5vdygpIHtcbiAgICAgICAgcmV0dXJuICgwLCBkZXZ0b29sc19hcGlfMS5ub3cpKCk7XG4gICAgfVxuICAgIGdldCBlbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gKDAsIHNoYXJlZF91dGlsc18xLmhhc1BsdWdpblBlcm1pc3Npb24pKHRoaXMucGx1Z2luLmRlc2NyaXB0b3IuaWQsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uRU5BQkxFRCk7XG4gICAgfVxuICAgIGhhc1Blcm1pc3Npb24ocGVybWlzc2lvbikge1xuICAgICAgICByZXR1cm4gKDAsIHNoYXJlZF91dGlsc18xLmhhc1BsdWdpblBlcm1pc3Npb24pKHRoaXMucGx1Z2luLmRlc2NyaXB0b3IuaWQsIHBlcm1pc3Npb24pO1xuICAgIH1cbn1cbmV4cG9ydHMuRGV2dG9vbHNQbHVnaW5BcGlJbnN0YW5jZSA9IERldnRvb2xzUGx1Z2luQXBpSW5zdGFuY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcGkuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///32423\n");
39
39
 
40
40
  /***/ }),
41
41
 
@@ -87,7 +87,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
87
87
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
88
88
 
89
89
  "use strict";
90
- eval("\n\nvar __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function () {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nvar __exportStar = this && this.__exportStar || function (m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n__exportStar(__webpack_require__(32423), exports);\n\n__exportStar(__webpack_require__(62393), exports);\n\n__exportStar(__webpack_require__(30346), exports);\n\n__exportStar(__webpack_require__(64930), exports);\n\n__exportStar(__webpack_require__(2107), exports);\n\n__exportStar(__webpack_require__(29618), exports);\n\n__exportStar(__webpack_require__(445), exports);\n\n__exportStar(__webpack_require__(15460), exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQ4MDMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2luZGV4LnRzPzZmMzciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9hcGlcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2FwcC1yZWNvcmRcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2JhY2tlbmRcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2JhY2tlbmQtY29udGV4dFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ2xvYmFsLWhvb2tcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2hvb2tzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wbHVnaW5cIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3RpbWVcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///64803\n");
90
+ eval("\n\nvar __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function () {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nvar __exportStar = this && this.__exportStar || function (m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\n__exportStar(__webpack_require__(32423), exports);\n\n__exportStar(__webpack_require__(62393), exports);\n\n__exportStar(__webpack_require__(30346), exports);\n\n__exportStar(__webpack_require__(64930), exports);\n\n__exportStar(__webpack_require__(2107), exports);\n\n__exportStar(__webpack_require__(29618), exports);\n\n__exportStar(__webpack_require__(445), exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQ4MDMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2luZGV4LnRzPzZmMzciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9hcGlcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2FwcC1yZWNvcmRcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2JhY2tlbmRcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2JhY2tlbmQtY29udGV4dFwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ2xvYmFsLWhvb2tcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2hvb2tzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9wbHVnaW5cIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///64803\n");
91
91
 
92
92
  /***/ }),
93
93
 
@@ -103,14 +103,6 @@ Object.defineProperty(exports, "__esModule", ({
103
103
 
104
104
  /***/ }),
105
105
 
106
- /***/ 15460:
107
- /***/ ((__unused_webpack_module, exports) => {
108
-
109
- "use strict";
110
- eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.now = void 0;\nlet supported;\nlet perf;\n\nfunction isSupported() {\n if (supported !== undefined) {\n return supported;\n }\n\n if (typeof window !== 'undefined' && window.performance) {\n supported = true;\n perf = window.performance;\n } else {\n supported = false;\n }\n\n return supported;\n}\n\nfunction now() {\n return isSupported() ? perf.now() : Date.now();\n}\n\nexports.now = now;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTU0NjAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBSSxTQUFKO0FBQ0EsSUFBSSxJQUFKOztBQUVBLFNBQVMsV0FBVCxHQUFvQjtBQUNsQixNQUFJLFNBQVMsS0FBSyxTQUFsQixFQUE2QjtBQUMzQixXQUFPLFNBQVA7QUFDRDs7QUFDRCxNQUFJLE9BQU8sTUFBUCxLQUFrQixXQUFsQixJQUFpQyxNQUFNLENBQUMsV0FBNUMsRUFBeUQ7QUFDdkQsYUFBUyxHQUFHLElBQVo7QUFDQSxRQUFJLEdBQUcsTUFBTSxDQUFDLFdBQWQ7QUFDRCxHQUhELE1BR087QUFDTCxhQUFTLEdBQUcsS0FBWjtBQUNEOztBQUNELFNBQU8sU0FBUDtBQUNEOztBQUVELFNBQWdCLEdBQWhCLEdBQW1CO0FBQ2pCLFNBQU8sV0FBVyxLQUFLLElBQUksQ0FBQyxHQUFMLEVBQUwsR0FBa0IsSUFBSSxDQUFDLEdBQUwsRUFBcEM7QUFDRDs7QUFGRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3RpbWUudHM/ZTA0YyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubm93ID0gdm9pZCAwO1xubGV0IHN1cHBvcnRlZDtcbmxldCBwZXJmO1xuZnVuY3Rpb24gaXNTdXBwb3J0ZWQoKSB7XG4gICAgaWYgKHN1cHBvcnRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcGVyZiA9IHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN1cHBvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwcG9ydGVkO1xufVxuZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiBpc1N1cHBvcnRlZCgpID8gcGVyZi5ub3coKSA6IERhdGUubm93KCk7XG59XG5leHBvcnRzLm5vdyA9IG5vdztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWUuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///15460\n");
111
-
112
- /***/ }),
113
-
114
106
  /***/ 79132:
115
107
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
116
108
 
@@ -139,7 +131,15 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
139
131
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
140
132
 
141
133
  "use strict";
142
- eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.refreshComponentTreeSearch = exports.getComponentInstance = exports.getComponentId = exports.editComponentState = exports.sendEmptyComponentData = exports.markSelectedInstance = exports.sendSelectedComponentData = exports.sendComponentTreeData = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst app_1 = __webpack_require__(79132);\n\nconst MAX_$VM = 10;\nconst $vmQueue = [];\n\nasync function sendComponentTreeData(appRecord, instanceId, filter = '', maxDepth = null, ctx) {\n if (!instanceId || appRecord !== ctx.currentAppRecord) return; // Flush will send all components in the tree\n // So we skip individiual tree updates\n\n if (instanceId !== '_root' && ctx.currentAppRecord.backend.options.features.includes(app_backend_api_1.BuiltinBackendFeature.FLUSH)) {\n return;\n }\n\n const instance = getComponentInstance(appRecord, instanceId, ctx);\n\n if (!instance) {\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_TREE, {\n instanceId,\n treeData: null,\n notFound: true\n });\n } else {\n if (filter) filter = filter.toLowerCase();\n\n if (maxDepth == null) {\n maxDepth = instance === ctx.currentAppRecord.rootInstance ? 2 : 1;\n }\n\n const data = await appRecord.backend.api.walkComponentTree(instance, maxDepth, filter);\n const payload = {\n instanceId,\n treeData: (0, shared_utils_1.stringify)(data)\n };\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_TREE, payload);\n }\n}\n\nexports.sendComponentTreeData = sendComponentTreeData;\n\nasync function sendSelectedComponentData(appRecord, instanceId, ctx) {\n if (!instanceId || appRecord !== ctx.currentAppRecord) return;\n const instance = getComponentInstance(appRecord, instanceId, ctx);\n\n if (!instance) {\n sendEmptyComponentData(instanceId, ctx);\n } else {\n // Expose instance on window\n if (typeof window !== 'undefined') {\n const win = window;\n win.$vm = instance; // $vm0, $vm1, $vm2, ...\n\n if ($vmQueue[0] !== instance) {\n if ($vmQueue.length >= MAX_$VM) {\n $vmQueue.pop();\n }\n\n for (let i = $vmQueue.length; i > 0; i--) {\n win[`$vm${i}`] = $vmQueue[i] = $vmQueue[i - 1];\n }\n\n win.$vm0 = $vmQueue[0] = instance;\n }\n }\n\n if (shared_utils_1.SharedData.debugInfo) {\n // eslint-disable-next-line no-console\n console.log('[DEBUG] inspect', instance);\n }\n\n const parentInstances = await appRecord.backend.api.walkComponentParents(instance);\n const payload = {\n instanceId,\n data: (0, shared_utils_1.stringify)(await appRecord.backend.api.inspectComponent(instance, ctx.currentAppRecord.options.app)),\n parentIds: parentInstances.map(i => i.__VUE_DEVTOOLS_UID__)\n };\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_SELECTED_DATA, payload);\n markSelectedInstance(instanceId, ctx);\n }\n}\n\nexports.sendSelectedComponentData = sendSelectedComponentData;\n\nfunction markSelectedInstance(instanceId, ctx) {\n ctx.currentInspectedComponentId = instanceId;\n ctx.currentAppRecord.lastInspectedComponentId = instanceId;\n}\n\nexports.markSelectedInstance = markSelectedInstance;\n\nfunction sendEmptyComponentData(instanceId, ctx) {\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_SELECTED_DATA, {\n instanceId,\n data: null\n });\n}\n\nexports.sendEmptyComponentData = sendEmptyComponentData;\n\nasync function editComponentState(instanceId, dotPath, type, state, ctx) {\n if (!instanceId) return;\n const instance = getComponentInstance(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n if ('value' in state && state.value != null) {\n state.value = (0, shared_utils_1.parse)(state.value, true);\n }\n\n await ctx.currentAppRecord.backend.api.editComponentState(instance, dotPath, type, state, ctx.currentAppRecord.options.app);\n await sendSelectedComponentData(ctx.currentAppRecord, instanceId, ctx);\n }\n}\n\nexports.editComponentState = editComponentState;\n\nasync function getComponentId(app, uid, instance, ctx) {\n try {\n if (instance.__VUE_DEVTOOLS_UID__) return instance.__VUE_DEVTOOLS_UID__;\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n if (!appRecord) return null;\n const isRoot = appRecord.rootInstance === instance;\n return `${appRecord.id}:${isRoot ? 'root' : uid}`;\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n\n return null;\n }\n}\n\nexports.getComponentId = getComponentId;\n\nfunction getComponentInstance(appRecord, instanceId, ctx) {\n if (instanceId === '_root') {\n instanceId = `${appRecord.id}:root`;\n }\n\n const instance = appRecord.instanceMap.get(instanceId);\n\n if (!instance && shared_utils_1.SharedData.debugInfo) {\n console.warn(`Instance uid=${instanceId} not found`);\n }\n\n return instance;\n}\n\nexports.getComponentInstance = getComponentInstance;\n\nasync function refreshComponentTreeSearch(ctx) {\n if (!ctx.currentAppRecord.componentFilter) return;\n await sendComponentTreeData(ctx.currentAppRecord, '_root', ctx.currentAppRecord.componentFilter, null, ctx);\n}\n\nexports.refreshComponentTreeSearch = refreshComponentTreeSearch;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDVixRQUFJLDBCQUFXLFNBQWYsRUFBMEI7QUFDeEIsYUFBTyxDQUFDLEtBQVIsQ0FBYyxDQUFkO0FBQ0Q7O0FBQ0QsV0FBTyxJQUFQO0FBQ0Q7QUFDRjs7QUFiRDs7QUFlQSxTQUFnQixvQkFBaEIsQ0FBc0MsU0FBdEMsRUFBNEQsVUFBNUQsRUFBZ0YsR0FBaEYsRUFBbUc7QUFDakcsTUFBSSxVQUFVLEtBQUssT0FBbkIsRUFBNEI7QUFDMUIsY0FBVSxHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUUsT0FBNUI7QUFDRDs7QUFDRCxRQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsV0FBVixDQUFzQixHQUF0QixDQUEwQixVQUExQixDQUFqQjs7QUFDQSxNQUFJLENBQUMsUUFBRCxJQUFhLDBCQUFXLFNBQTVCLEVBQXVDO0FBQ3JDLFdBQU8sQ0FBQyxJQUFSLENBQWEsZ0JBQWdCLFVBQVUsWUFBdkM7QUFDRDs7QUFDRCxTQUFPLFFBQVA7QUFDRDs7QUFURDs7QUFXTyxlQUFlLDBCQUFmLENBQTJDLEdBQTNDLEVBQThEO0FBQ25FLE1BQUksQ0FBQyxHQUFHLENBQUMsZ0JBQUosQ0FBcUIsZUFBMUIsRUFBMkM7QUFDM0MsUUFBTSxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsZ0JBQUwsRUFBdUIsT0FBdkIsRUFBZ0MsR0FBRyxDQUFDLGdCQUFKLENBQXFCLGVBQXJELEVBQXNFLElBQXRFLEVBQTRFLEdBQTVFLENBQTNCO0FBQ0Q7O0FBSEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL3NyYy9jb21wb25lbnQudHM/YTc2YyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmcmVzaENvbXBvbmVudFRyZWVTZWFyY2ggPSBleHBvcnRzLmdldENvbXBvbmVudEluc3RhbmNlID0gZXhwb3J0cy5nZXRDb21wb25lbnRJZCA9IGV4cG9ydHMuZWRpdENvbXBvbmVudFN0YXRlID0gZXhwb3J0cy5zZW5kRW1wdHlDb21wb25lbnREYXRhID0gZXhwb3J0cy5tYXJrU2VsZWN0ZWRJbnN0YW5jZSA9IGV4cG9ydHMuc2VuZFNlbGVjdGVkQ29tcG9uZW50RGF0YSA9IGV4cG9ydHMuc2VuZENvbXBvbmVudFRyZWVEYXRhID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBhcHBfYmFja2VuZF9hcGlfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL2FwcC1iYWNrZW5kLWFwaVwiKTtcbmNvbnN0IGFwcF8xID0gcmVxdWlyZShcIi4vYXBwXCIpO1xuY29uc3QgTUFYXyRWTSA9IDEwO1xuY29uc3QgJHZtUXVldWUgPSBbXTtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRDb21wb25lbnRUcmVlRGF0YShhcHBSZWNvcmQsIGluc3RhbmNlSWQsIGZpbHRlciA9ICcnLCBtYXhEZXB0aCA9IG51bGwsIGN0eCkge1xuICAgIGlmICghaW5zdGFuY2VJZCB8fCBhcHBSZWNvcmQgIT09IGN0eC5jdXJyZW50QXBwUmVjb3JkKVxuICAgICAgICByZXR1cm47XG4gICAgLy8gRmx1c2ggd2lsbCBzZW5kIGFsbCBjb21wb25lbnRzIGluIHRoZSB0cmVlXG4gICAgLy8gU28gd2Ugc2tpcCBpbmRpdmlkaXVhbCB0cmVlIHVwZGF0ZXNcbiAgICBpZiAoaW5zdGFuY2VJZCAhPT0gJ19yb290JyAmJlxuICAgICAgICBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLm9wdGlvbnMuZmVhdHVyZXMuaW5jbHVkZXMoYXBwX2JhY2tlbmRfYXBpXzEuQnVpbHRpbkJhY2tlbmRGZWF0dXJlLkZMVVNIKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q29tcG9uZW50SW5zdGFuY2UoYXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9DT01QT05FTlRfVFJFRSwge1xuICAgICAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgICAgIHRyZWVEYXRhOiBudWxsLFxuICAgICAgICAgICAgbm90Rm91bmQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGZpbHRlcilcbiAgICAgICAgICAgIGZpbHRlciA9IGZpbHRlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobWF4RGVwdGggPT0gbnVsbCkge1xuICAgICAgICAgICAgbWF4RGVwdGggPSBpbnN0YW5jZSA9PT0gY3R4LmN1cnJlbnRBcHBSZWNvcmQucm9vdEluc3RhbmNlID8gMiA6IDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGFwcFJlY29yZC5iYWNrZW5kLmFwaS53YWxrQ29tcG9uZW50VHJlZShpbnN0YW5jZSwgbWF4RGVwdGgsIGZpbHRlcik7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICAgICAgdHJlZURhdGE6ICgwLCBzaGFyZWRfdXRpbHNfMS5zdHJpbmdpZnkpKGRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0NPTVBPTkVOVF9UUkVFLCBwYXlsb2FkKTtcbiAgICB9XG59XG5leHBvcnRzLnNlbmRDb21wb25lbnRUcmVlRGF0YSA9IHNlbmRDb21wb25lbnRUcmVlRGF0YTtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRTZWxlY3RlZENvbXBvbmVudERhdGEoYXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBpZiAoIWluc3RhbmNlSWQgfHwgYXBwUmVjb3JkICE9PSBjdHguY3VycmVudEFwcFJlY29yZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q29tcG9uZW50SW5zdGFuY2UoYXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgc2VuZEVtcHR5Q29tcG9uZW50RGF0YShpbnN0YW5jZUlkLCBjdHgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gRXhwb3NlIGluc3RhbmNlIG9uIHdpbmRvd1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpbiA9IHdpbmRvdztcbiAgICAgICAgICAgIHdpbi4kdm0gPSBpbnN0YW5jZTtcbiAgICAgICAgICAgIC8vICR2bTAsICR2bTEsICR2bTIsIC4uLlxuICAgICAgICAgICAgaWYgKCR2bVF1ZXVlWzBdICE9PSBpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGlmICgkdm1RdWV1ZS5sZW5ndGggPj0gTUFYXyRWTSkge1xuICAgICAgICAgICAgICAgICAgICAkdm1RdWV1ZS5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9ICR2bVF1ZXVlLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5bYCR2bSR7aX1gXSA9ICR2bVF1ZXVlW2ldID0gJHZtUXVldWVbaSAtIDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aW4uJHZtMCA9ICR2bVF1ZXVlWzBdID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tERUJVR10gaW5zcGVjdCcsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZXMgPSBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkud2Fsa0NvbXBvbmVudFBhcmVudHMoaW5zdGFuY2UpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgICAgIGRhdGE6ICgwLCBzaGFyZWRfdXRpbHNfMS5zdHJpbmdpZnkpKGF3YWl0IGFwcFJlY29yZC5iYWNrZW5kLmFwaS5pbnNwZWN0Q29tcG9uZW50KGluc3RhbmNlLCBjdHguY3VycmVudEFwcFJlY29yZC5vcHRpb25zLmFwcCkpLFxuICAgICAgICAgICAgcGFyZW50SWRzOiBwYXJlbnRJbnN0YW5jZXMubWFwKGkgPT4gaS5fX1ZVRV9ERVZUT09MU19VSURfXyksXG4gICAgICAgIH07XG4gICAgICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQ09NUE9ORU5UX1NFTEVDVEVEX0RBVEEsIHBheWxvYWQpO1xuICAgICAgICBtYXJrU2VsZWN0ZWRJbnN0YW5jZShpbnN0YW5jZUlkLCBjdHgpO1xuICAgIH1cbn1cbmV4cG9ydHMuc2VuZFNlbGVjdGVkQ29tcG9uZW50RGF0YSA9IHNlbmRTZWxlY3RlZENvbXBvbmVudERhdGE7XG5mdW5jdGlvbiBtYXJrU2VsZWN0ZWRJbnN0YW5jZShpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkID0gaW5zdGFuY2VJZDtcbiAgICBjdHguY3VycmVudEFwcFJlY29yZC5sYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQgPSBpbnN0YW5jZUlkO1xufVxuZXhwb3J0cy5tYXJrU2VsZWN0ZWRJbnN0YW5jZSA9IG1hcmtTZWxlY3RlZEluc3RhbmNlO1xuZnVuY3Rpb24gc2VuZEVtcHR5Q29tcG9uZW50RGF0YShpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0NPTVBPTkVOVF9TRUxFQ1RFRF9EQVRBLCB7XG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIGRhdGE6IG51bGwsXG4gICAgfSk7XG59XG5leHBvcnRzLnNlbmRFbXB0eUNvbXBvbmVudERhdGEgPSBzZW5kRW1wdHlDb21wb25lbnREYXRhO1xuYXN5bmMgZnVuY3Rpb24gZWRpdENvbXBvbmVudFN0YXRlKGluc3RhbmNlSWQsIGRvdFBhdGgsIHR5cGUsIHN0YXRlLCBjdHgpIHtcbiAgICBpZiAoIWluc3RhbmNlSWQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldENvbXBvbmVudEluc3RhbmNlKGN0eC5jdXJyZW50QXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpO1xuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICBpZiAoJ3ZhbHVlJyBpbiBzdGF0ZSAmJiBzdGF0ZS52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0ZS52YWx1ZSA9ICgwLCBzaGFyZWRfdXRpbHNfMS5wYXJzZSkoc3RhdGUudmFsdWUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQuYXBpLmVkaXRDb21wb25lbnRTdGF0ZShpbnN0YW5jZSwgZG90UGF0aCwgdHlwZSwgc3RhdGUsIGN0eC5jdXJyZW50QXBwUmVjb3JkLm9wdGlvbnMuYXBwKTtcbiAgICAgICAgYXdhaXQgc2VuZFNlbGVjdGVkQ29tcG9uZW50RGF0YShjdHguY3VycmVudEFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KTtcbiAgICB9XG59XG5leHBvcnRzLmVkaXRDb21wb25lbnRTdGF0ZSA9IGVkaXRDb21wb25lbnRTdGF0ZTtcbmFzeW5jIGZ1bmN0aW9uIGdldENvbXBvbmVudElkKGFwcCwgdWlkLCBpbnN0YW5jZSwgY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fKVxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fO1xuICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShhcHAsIGN0eCk7XG4gICAgICAgIGlmICghYXBwUmVjb3JkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGlzUm9vdCA9IGFwcFJlY29yZC5yb290SW5zdGFuY2UgPT09IGluc3RhbmNlO1xuICAgICAgICByZXR1cm4gYCR7YXBwUmVjb3JkLmlkfToke2lzUm9vdCA/ICdyb290JyA6IHVpZH1gO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21wb25lbnRJZCA9IGdldENvbXBvbmVudElkO1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50SW5zdGFuY2UoYXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBpZiAoaW5zdGFuY2VJZCA9PT0gJ19yb290Jykge1xuICAgICAgICBpbnN0YW5jZUlkID0gYCR7YXBwUmVjb3JkLmlkfTpyb290YDtcbiAgICB9XG4gICAgY29uc3QgaW5zdGFuY2UgPSBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlSWQpO1xuICAgIGlmICghaW5zdGFuY2UgJiYgc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnN0YW5jZSB1aWQ9JHtpbnN0YW5jZUlkfSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xufVxuZXhwb3J0cy5nZXRDb21wb25lbnRJbnN0YW5jZSA9IGdldENvbXBvbmVudEluc3RhbmNlO1xuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaENvbXBvbmVudFRyZWVTZWFyY2goY3R4KSB7XG4gICAgaWYgKCFjdHguY3VycmVudEFwcFJlY29yZC5jb21wb25lbnRGaWx0ZXIpXG4gICAgICAgIHJldHVybjtcbiAgICBhd2FpdCBzZW5kQ29tcG9uZW50VHJlZURhdGEoY3R4LmN1cnJlbnRBcHBSZWNvcmQsICdfcm9vdCcsIGN0eC5jdXJyZW50QXBwUmVjb3JkLmNvbXBvbmVudEZpbHRlciwgbnVsbCwgY3R4KTtcbn1cbmV4cG9ydHMucmVmcmVzaENvbXBvbmVudFRyZWVTZWFyY2ggPSByZWZyZXNoQ29tcG9uZW50VHJlZVNlYXJjaDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBvbmVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63304\n");
134
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.sendComponentUpdateTracking = exports.refreshComponentTreeSearch = exports.getComponentInstance = exports.getComponentId = exports.editComponentState = exports.sendEmptyComponentData = exports.markSelectedInstance = exports.sendSelectedComponentData = exports.sendComponentTreeData = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst app_1 = __webpack_require__(79132);\n\nconst MAX_$VM = 10;\nconst $vmQueue = [];\n\nasync function sendComponentTreeData(appRecord, instanceId, filter = '', maxDepth = null, ctx) {\n if (!instanceId || appRecord !== ctx.currentAppRecord) return; // Flush will send all components in the tree\n // So we skip individiual tree updates\n\n if (instanceId !== '_root' && ctx.currentAppRecord.backend.options.features.includes(app_backend_api_1.BuiltinBackendFeature.FLUSH)) {\n return;\n }\n\n const instance = getComponentInstance(appRecord, instanceId, ctx);\n\n if (!instance) {\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_TREE, {\n instanceId,\n treeData: null,\n notFound: true\n });\n } else {\n if (filter) filter = filter.toLowerCase();\n\n if (maxDepth == null) {\n maxDepth = instance === ctx.currentAppRecord.rootInstance ? 2 : 1;\n }\n\n const data = await appRecord.backend.api.walkComponentTree(instance, maxDepth, filter);\n const payload = {\n instanceId,\n treeData: (0, shared_utils_1.stringify)(data)\n };\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_TREE, payload);\n }\n}\n\nexports.sendComponentTreeData = sendComponentTreeData;\n\nasync function sendSelectedComponentData(appRecord, instanceId, ctx) {\n if (!instanceId || appRecord !== ctx.currentAppRecord) return;\n const instance = getComponentInstance(appRecord, instanceId, ctx);\n\n if (!instance) {\n sendEmptyComponentData(instanceId, ctx);\n } else {\n // Expose instance on window\n if (typeof window !== 'undefined') {\n const win = window;\n win.$vm = instance; // $vm0, $vm1, $vm2, ...\n\n if ($vmQueue[0] !== instance) {\n if ($vmQueue.length >= MAX_$VM) {\n $vmQueue.pop();\n }\n\n for (let i = $vmQueue.length; i > 0; i--) {\n win[`$vm${i}`] = $vmQueue[i] = $vmQueue[i - 1];\n }\n\n win.$vm0 = $vmQueue[0] = instance;\n }\n }\n\n if (shared_utils_1.SharedData.debugInfo) {\n // eslint-disable-next-line no-console\n console.log('[DEBUG] inspect', instance);\n }\n\n const parentInstances = await appRecord.backend.api.walkComponentParents(instance);\n const payload = {\n instanceId,\n data: (0, shared_utils_1.stringify)(await appRecord.backend.api.inspectComponent(instance, ctx.currentAppRecord.options.app)),\n parentIds: parentInstances.map(i => i.__VUE_DEVTOOLS_UID__)\n };\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_SELECTED_DATA, payload);\n markSelectedInstance(instanceId, ctx);\n }\n}\n\nexports.sendSelectedComponentData = sendSelectedComponentData;\n\nfunction markSelectedInstance(instanceId, ctx) {\n ctx.currentInspectedComponentId = instanceId;\n ctx.currentAppRecord.lastInspectedComponentId = instanceId;\n}\n\nexports.markSelectedInstance = markSelectedInstance;\n\nfunction sendEmptyComponentData(instanceId, ctx) {\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_SELECTED_DATA, {\n instanceId,\n data: null\n });\n}\n\nexports.sendEmptyComponentData = sendEmptyComponentData;\n\nasync function editComponentState(instanceId, dotPath, type, state, ctx) {\n if (!instanceId) return;\n const instance = getComponentInstance(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n if ('value' in state && state.value != null) {\n state.value = (0, shared_utils_1.parse)(state.value, true);\n }\n\n await ctx.currentAppRecord.backend.api.editComponentState(instance, dotPath, type, state, ctx.currentAppRecord.options.app);\n await sendSelectedComponentData(ctx.currentAppRecord, instanceId, ctx);\n }\n}\n\nexports.editComponentState = editComponentState;\n\nasync function getComponentId(app, uid, instance, ctx) {\n try {\n if (instance.__VUE_DEVTOOLS_UID__) return instance.__VUE_DEVTOOLS_UID__;\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n if (!appRecord) return null;\n const isRoot = appRecord.rootInstance === instance;\n return `${appRecord.id}:${isRoot ? 'root' : uid}`;\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n\n return null;\n }\n}\n\nexports.getComponentId = getComponentId;\n\nfunction getComponentInstance(appRecord, instanceId, ctx) {\n if (instanceId === '_root') {\n instanceId = `${appRecord.id}:root`;\n }\n\n const instance = appRecord.instanceMap.get(instanceId);\n\n if (!instance && shared_utils_1.SharedData.debugInfo) {\n console.warn(`Instance uid=${instanceId} not found`);\n }\n\n return instance;\n}\n\nexports.getComponentInstance = getComponentInstance;\n\nasync function refreshComponentTreeSearch(ctx) {\n if (!ctx.currentAppRecord.componentFilter) return;\n await sendComponentTreeData(ctx.currentAppRecord, '_root', ctx.currentAppRecord.componentFilter, null, ctx);\n}\n\nexports.refreshComponentTreeSearch = refreshComponentTreeSearch;\n\nasync function sendComponentUpdateTracking(instanceId, ctx) {\n if (!instanceId) return;\n const payload = {\n instanceId,\n time: Date.now() // Use normal date\n\n };\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_UPDATED, payload);\n}\n\nexports.sendComponentUpdateTracking = sendComponentUpdateTracking;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Li9zcmMvY29tcG9uZW50LnRzP2E3NmMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlbmRDb21wb25lbnRVcGRhdGVUcmFja2luZyA9IGV4cG9ydHMucmVmcmVzaENvbXBvbmVudFRyZWVTZWFyY2ggPSBleHBvcnRzLmdldENvbXBvbmVudEluc3RhbmNlID0gZXhwb3J0cy5nZXRDb21wb25lbnRJZCA9IGV4cG9ydHMuZWRpdENvbXBvbmVudFN0YXRlID0gZXhwb3J0cy5zZW5kRW1wdHlDb21wb25lbnREYXRhID0gZXhwb3J0cy5tYXJrU2VsZWN0ZWRJbnN0YW5jZSA9IGV4cG9ydHMuc2VuZFNlbGVjdGVkQ29tcG9uZW50RGF0YSA9IGV4cG9ydHMuc2VuZENvbXBvbmVudFRyZWVEYXRhID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBhcHBfYmFja2VuZF9hcGlfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL2FwcC1iYWNrZW5kLWFwaVwiKTtcbmNvbnN0IGFwcF8xID0gcmVxdWlyZShcIi4vYXBwXCIpO1xuY29uc3QgTUFYXyRWTSA9IDEwO1xuY29uc3QgJHZtUXVldWUgPSBbXTtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRDb21wb25lbnRUcmVlRGF0YShhcHBSZWNvcmQsIGluc3RhbmNlSWQsIGZpbHRlciA9ICcnLCBtYXhEZXB0aCA9IG51bGwsIGN0eCkge1xuICAgIGlmICghaW5zdGFuY2VJZCB8fCBhcHBSZWNvcmQgIT09IGN0eC5jdXJyZW50QXBwUmVjb3JkKVxuICAgICAgICByZXR1cm47XG4gICAgLy8gRmx1c2ggd2lsbCBzZW5kIGFsbCBjb21wb25lbnRzIGluIHRoZSB0cmVlXG4gICAgLy8gU28gd2Ugc2tpcCBpbmRpdmlkaXVhbCB0cmVlIHVwZGF0ZXNcbiAgICBpZiAoaW5zdGFuY2VJZCAhPT0gJ19yb290JyAmJlxuICAgICAgICBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLm9wdGlvbnMuZmVhdHVyZXMuaW5jbHVkZXMoYXBwX2JhY2tlbmRfYXBpXzEuQnVpbHRpbkJhY2tlbmRGZWF0dXJlLkZMVVNIKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q29tcG9uZW50SW5zdGFuY2UoYXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9DT01QT05FTlRfVFJFRSwge1xuICAgICAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgICAgIHRyZWVEYXRhOiBudWxsLFxuICAgICAgICAgICAgbm90Rm91bmQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGZpbHRlcilcbiAgICAgICAgICAgIGZpbHRlciA9IGZpbHRlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobWF4RGVwdGggPT0gbnVsbCkge1xuICAgICAgICAgICAgbWF4RGVwdGggPSBpbnN0YW5jZSA9PT0gY3R4LmN1cnJlbnRBcHBSZWNvcmQucm9vdEluc3RhbmNlID8gMiA6IDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGFwcFJlY29yZC5iYWNrZW5kLmFwaS53YWxrQ29tcG9uZW50VHJlZShpbnN0YW5jZSwgbWF4RGVwdGgsIGZpbHRlcik7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICAgICAgdHJlZURhdGE6ICgwLCBzaGFyZWRfdXRpbHNfMS5zdHJpbmdpZnkpKGRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0NPTVBPTkVOVF9UUkVFLCBwYXlsb2FkKTtcbiAgICB9XG59XG5leHBvcnRzLnNlbmRDb21wb25lbnRUcmVlRGF0YSA9IHNlbmRDb21wb25lbnRUcmVlRGF0YTtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRTZWxlY3RlZENvbXBvbmVudERhdGEoYXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBpZiAoIWluc3RhbmNlSWQgfHwgYXBwUmVjb3JkICE9PSBjdHguY3VycmVudEFwcFJlY29yZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q29tcG9uZW50SW5zdGFuY2UoYXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgc2VuZEVtcHR5Q29tcG9uZW50RGF0YShpbnN0YW5jZUlkLCBjdHgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gRXhwb3NlIGluc3RhbmNlIG9uIHdpbmRvd1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpbiA9IHdpbmRvdztcbiAgICAgICAgICAgIHdpbi4kdm0gPSBpbnN0YW5jZTtcbiAgICAgICAgICAgIC8vICR2bTAsICR2bTEsICR2bTIsIC4uLlxuICAgICAgICAgICAgaWYgKCR2bVF1ZXVlWzBdICE9PSBpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGlmICgkdm1RdWV1ZS5sZW5ndGggPj0gTUFYXyRWTSkge1xuICAgICAgICAgICAgICAgICAgICAkdm1RdWV1ZS5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9ICR2bVF1ZXVlLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5bYCR2bSR7aX1gXSA9ICR2bVF1ZXVlW2ldID0gJHZtUXVldWVbaSAtIDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aW4uJHZtMCA9ICR2bVF1ZXVlWzBdID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tERUJVR10gaW5zcGVjdCcsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZXMgPSBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkud2Fsa0NvbXBvbmVudFBhcmVudHMoaW5zdGFuY2UpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgICAgIGRhdGE6ICgwLCBzaGFyZWRfdXRpbHNfMS5zdHJpbmdpZnkpKGF3YWl0IGFwcFJlY29yZC5iYWNrZW5kLmFwaS5pbnNwZWN0Q29tcG9uZW50KGluc3RhbmNlLCBjdHguY3VycmVudEFwcFJlY29yZC5vcHRpb25zLmFwcCkpLFxuICAgICAgICAgICAgcGFyZW50SWRzOiBwYXJlbnRJbnN0YW5jZXMubWFwKGkgPT4gaS5fX1ZVRV9ERVZUT09MU19VSURfXyksXG4gICAgICAgIH07XG4gICAgICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQ09NUE9ORU5UX1NFTEVDVEVEX0RBVEEsIHBheWxvYWQpO1xuICAgICAgICBtYXJrU2VsZWN0ZWRJbnN0YW5jZShpbnN0YW5jZUlkLCBjdHgpO1xuICAgIH1cbn1cbmV4cG9ydHMuc2VuZFNlbGVjdGVkQ29tcG9uZW50RGF0YSA9IHNlbmRTZWxlY3RlZENvbXBvbmVudERhdGE7XG5mdW5jdGlvbiBtYXJrU2VsZWN0ZWRJbnN0YW5jZShpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkID0gaW5zdGFuY2VJZDtcbiAgICBjdHguY3VycmVudEFwcFJlY29yZC5sYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQgPSBpbnN0YW5jZUlkO1xufVxuZXhwb3J0cy5tYXJrU2VsZWN0ZWRJbnN0YW5jZSA9IG1hcmtTZWxlY3RlZEluc3RhbmNlO1xuZnVuY3Rpb24gc2VuZEVtcHR5Q29tcG9uZW50RGF0YShpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0NPTVBPTkVOVF9TRUxFQ1RFRF9EQVRBLCB7XG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIGRhdGE6IG51bGwsXG4gICAgfSk7XG59XG5leHBvcnRzLnNlbmRFbXB0eUNvbXBvbmVudERhdGEgPSBzZW5kRW1wdHlDb21wb25lbnREYXRhO1xuYXN5bmMgZnVuY3Rpb24gZWRpdENvbXBvbmVudFN0YXRlKGluc3RhbmNlSWQsIGRvdFBhdGgsIHR5cGUsIHN0YXRlLCBjdHgpIHtcbiAgICBpZiAoIWluc3RhbmNlSWQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldENvbXBvbmVudEluc3RhbmNlKGN0eC5jdXJyZW50QXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpO1xuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICBpZiAoJ3ZhbHVlJyBpbiBzdGF0ZSAmJiBzdGF0ZS52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0ZS52YWx1ZSA9ICgwLCBzaGFyZWRfdXRpbHNfMS5wYXJzZSkoc3RhdGUudmFsdWUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQuYXBpLmVkaXRDb21wb25lbnRTdGF0ZShpbnN0YW5jZSwgZG90UGF0aCwgdHlwZSwgc3RhdGUsIGN0eC5jdXJyZW50QXBwUmVjb3JkLm9wdGlvbnMuYXBwKTtcbiAgICAgICAgYXdhaXQgc2VuZFNlbGVjdGVkQ29tcG9uZW50RGF0YShjdHguY3VycmVudEFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KTtcbiAgICB9XG59XG5leHBvcnRzLmVkaXRDb21wb25lbnRTdGF0ZSA9IGVkaXRDb21wb25lbnRTdGF0ZTtcbmFzeW5jIGZ1bmN0aW9uIGdldENvbXBvbmVudElkKGFwcCwgdWlkLCBpbnN0YW5jZSwgY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fKVxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fO1xuICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShhcHAsIGN0eCk7XG4gICAgICAgIGlmICghYXBwUmVjb3JkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGlzUm9vdCA9IGFwcFJlY29yZC5yb290SW5zdGFuY2UgPT09IGluc3RhbmNlO1xuICAgICAgICByZXR1cm4gYCR7YXBwUmVjb3JkLmlkfToke2lzUm9vdCA/ICdyb290JyA6IHVpZH1gO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21wb25lbnRJZCA9IGdldENvbXBvbmVudElkO1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50SW5zdGFuY2UoYXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBpZiAoaW5zdGFuY2VJZCA9PT0gJ19yb290Jykge1xuICAgICAgICBpbnN0YW5jZUlkID0gYCR7YXBwUmVjb3JkLmlkfTpyb290YDtcbiAgICB9XG4gICAgY29uc3QgaW5zdGFuY2UgPSBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlSWQpO1xuICAgIGlmICghaW5zdGFuY2UgJiYgc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnN0YW5jZSB1aWQ9JHtpbnN0YW5jZUlkfSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xufVxuZXhwb3J0cy5nZXRDb21wb25lbnRJbnN0YW5jZSA9IGdldENvbXBvbmVudEluc3RhbmNlO1xuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaENvbXBvbmVudFRyZWVTZWFyY2goY3R4KSB7XG4gICAgaWYgKCFjdHguY3VycmVudEFwcFJlY29yZC5jb21wb25lbnRGaWx0ZXIpXG4gICAgICAgIHJldHVybjtcbiAgICBhd2FpdCBzZW5kQ29tcG9uZW50VHJlZURhdGEoY3R4LmN1cnJlbnRBcHBSZWNvcmQsICdfcm9vdCcsIGN0eC5jdXJyZW50QXBwUmVjb3JkLmNvbXBvbmVudEZpbHRlciwgbnVsbCwgY3R4KTtcbn1cbmV4cG9ydHMucmVmcmVzaENvbXBvbmVudFRyZWVTZWFyY2ggPSByZWZyZXNoQ29tcG9uZW50VHJlZVNlYXJjaDtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRDb21wb25lbnRVcGRhdGVUcmFja2luZyhpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBpZiAoIWluc3RhbmNlSWQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICB0aW1lOiBEYXRlLm5vdygpLCAvLyBVc2Ugbm9ybWFsIGRhdGVcbiAgICB9O1xuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQ09NUE9ORU5UX1VQREFURUQsIHBheWxvYWQpO1xufVxuZXhwb3J0cy5zZW5kQ29tcG9uZW50VXBkYXRlVHJhY2tpbmcgPSBzZW5kQ29tcG9uZW50VXBkYXRlVHJhY2tpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wb25lbnQuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///63304\n");
135
+
136
+ /***/ }),
137
+
138
+ /***/ 78693:
139
+ /***/ ((__unused_webpack_module, exports) => {
140
+
141
+ "use strict";
142
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.flashComponent = void 0;\n\nasync function flashComponent(instance, backend) {\n const bounds = await backend.api.getComponentBounds(instance);\n\n if (bounds) {\n let overlay = instance.__VUE_DEVTOOLS_FLASH;\n\n if (!overlay) {\n overlay = document.createElement('div');\n instance.__VUE_DEVTOOLS_FLASH = overlay;\n overlay.style.border = '2px rgba(65, 184, 131, 0.7) solid';\n overlay.style.position = 'fixed';\n overlay.style.zIndex = '99999999999998';\n overlay.style.pointerEvents = 'none';\n overlay.style.borderRadius = '3px';\n overlay.style.boxSizing = 'border-box';\n document.body.appendChild(overlay);\n }\n\n overlay.style.opacity = '1';\n overlay.style.transition = null;\n overlay.style.width = Math.round(bounds.width) + 'px';\n overlay.style.height = Math.round(bounds.height) + 'px';\n overlay.style.left = Math.round(bounds.left) + 'px';\n overlay.style.top = Math.round(bounds.top) + 'px';\n requestAnimationFrame(() => {\n overlay.style.transition = 'opacity 1s';\n overlay.style.opacity = '0';\n });\n clearTimeout(overlay._timer);\n overlay._timer = setTimeout(() => {\n document.body.removeChild(overlay);\n instance.__VUE_DEVTOOLS_FLASH = null;\n }, 1000);\n }\n}\n\nexports.flashComponent = flashComponent;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg2OTMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdPLGVBQWUsY0FBZixDQUErQixRQUEvQixFQUE0RCxPQUE1RCxFQUFvRjtBQUN6RixRQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFSLENBQVksa0JBQVosQ0FBK0IsUUFBL0IsQ0FBckI7O0FBQ0EsTUFBSSxNQUFKLEVBQVk7QUFDVixRQUFJLE9BQU8sR0FBbUIsUUFBUSxDQUFDLG9CQUF2Qzs7QUFDQSxRQUFJLENBQUMsT0FBTCxFQUFjO0FBQ1osYUFBTyxHQUFHLFFBQVEsQ0FBQyxhQUFULENBQXVCLEtBQXZCLENBQVY7QUFDQSxjQUFRLENBQUMsb0JBQVQsR0FBZ0MsT0FBaEM7QUFDQSxhQUFPLENBQUMsS0FBUixDQUFjLE1BQWQsR0FBdUIsbUNBQXZCO0FBQ0EsYUFBTyxDQUFDLEtBQVIsQ0FBYyxRQUFkLEdBQXlCLE9BQXpCO0FBQ0EsYUFBTyxDQUFDLEtBQVIsQ0FBYyxNQUFkLEdBQXVCLGdCQUF2QjtBQUNBLGFBQU8sQ0FBQyxLQUFSLENBQWMsYUFBZCxHQUE4QixNQUE5QjtBQUNBLGFBQU8sQ0FBQyxLQUFSLENBQWMsWUFBZCxHQUE2QixLQUE3QjtBQUNBLGFBQU8sQ0FBQyxLQUFSLENBQWMsU0FBZCxHQUEwQixZQUExQjtBQUNBLGNBQVEsQ0FBQyxJQUFULENBQWMsV0FBZCxDQUEwQixPQUExQjtBQUNEOztBQUNELFdBQU8sQ0FBQyxLQUFSLENBQWMsT0FBZCxHQUF3QixHQUF4QjtBQUNBLFdBQU8sQ0FBQyxLQUFSLENBQWMsVUFBZCxHQUEyQixJQUEzQjtBQUNBLFdBQU8sQ0FBQyxLQUFSLENBQWMsS0FBZCxHQUFzQixJQUFJLENBQUMsS0FBTCxDQUFXLE1BQU0sQ0FBQyxLQUFsQixJQUEyQixJQUFqRDtBQUNBLFdBQU8sQ0FBQyxLQUFSLENBQWMsTUFBZCxHQUF1QixJQUFJLENBQUMsS0FBTCxDQUFXLE1BQU0sQ0FBQyxNQUFsQixJQUE0QixJQUFuRDtBQUNBLFdBQU8sQ0FBQyxLQUFSLENBQWMsSUFBZCxHQUFxQixJQUFJLENBQUMsS0FBTCxDQUFXLE1BQU0sQ0FBQyxJQUFsQixJQUEwQixJQUEvQztBQUNBLFdBQU8sQ0FBQyxLQUFSLENBQWMsR0FBZCxHQUFvQixJQUFJLENBQUMsS0FBTCxDQUFXLE1BQU0sQ0FBQyxHQUFsQixJQUF5QixJQUE3QztBQUNBLHlCQUFxQixDQUFDLE1BQUs7QUFDekIsYUFBTyxDQUFDLEtBQVIsQ0FBYyxVQUFkLEdBQTJCLFlBQTNCO0FBQ0EsYUFBTyxDQUFDLEtBQVIsQ0FBYyxPQUFkLEdBQXdCLEdBQXhCO0FBQ0QsS0FIb0IsQ0FBckI7QUFJQSxnQkFBWSxDQUFFLE9BQWUsQ0FBQyxNQUFsQixDQUFaO0FBQ0UsV0FBZSxDQUFDLE1BQWhCLEdBQXlCLFVBQVUsQ0FBQyxNQUFLO0FBQ3pDLGNBQVEsQ0FBQyxJQUFULENBQWMsV0FBZCxDQUEwQixPQUExQjtBQUNBLGNBQVEsQ0FBQyxvQkFBVCxHQUFnQyxJQUFoQztBQUNELEtBSG9DLEVBR2xDLElBSGtDLENBQW5DO0FBSUg7QUFDRjs7QUEvQkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL3NyYy9mbGFzaC50cz9kNzU3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mbGFzaENvbXBvbmVudCA9IHZvaWQgMDtcbmFzeW5jIGZ1bmN0aW9uIGZsYXNoQ29tcG9uZW50KGluc3RhbmNlLCBiYWNrZW5kKSB7XG4gICAgY29uc3QgYm91bmRzID0gYXdhaXQgYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50Qm91bmRzKGluc3RhbmNlKTtcbiAgICBpZiAoYm91bmRzKSB7XG4gICAgICAgIGxldCBvdmVybGF5ID0gaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfRkxBU0g7XG4gICAgICAgIGlmICghb3ZlcmxheSkge1xuICAgICAgICAgICAgb3ZlcmxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfRkxBU0ggPSBvdmVybGF5O1xuICAgICAgICAgICAgb3ZlcmxheS5zdHlsZS5ib3JkZXIgPSAnMnB4IHJnYmEoNjUsIDE4NCwgMTMxLCAwLjcpIHNvbGlkJztcbiAgICAgICAgICAgIG92ZXJsYXkuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgICAgICAgb3ZlcmxheS5zdHlsZS56SW5kZXggPSAnOTk5OTk5OTk5OTk5OTgnO1xuICAgICAgICAgICAgb3ZlcmxheS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgICAgICAgb3ZlcmxheS5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnM3B4JztcbiAgICAgICAgICAgIG92ZXJsYXkuc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdmVybGF5KTtcbiAgICAgICAgfVxuICAgICAgICBvdmVybGF5LnN0eWxlLm9wYWNpdHkgPSAnMSc7XG4gICAgICAgIG92ZXJsYXkuc3R5bGUudHJhbnNpdGlvbiA9IG51bGw7XG4gICAgICAgIG92ZXJsYXkuc3R5bGUud2lkdGggPSBNYXRoLnJvdW5kKGJvdW5kcy53aWR0aCkgKyAncHgnO1xuICAgICAgICBvdmVybGF5LnN0eWxlLmhlaWdodCA9IE1hdGgucm91bmQoYm91bmRzLmhlaWdodCkgKyAncHgnO1xuICAgICAgICBvdmVybGF5LnN0eWxlLmxlZnQgPSBNYXRoLnJvdW5kKGJvdW5kcy5sZWZ0KSArICdweCc7XG4gICAgICAgIG92ZXJsYXkuc3R5bGUudG9wID0gTWF0aC5yb3VuZChib3VuZHMudG9wKSArICdweCc7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBvdmVybGF5LnN0eWxlLnRyYW5zaXRpb24gPSAnb3BhY2l0eSAxcyc7XG4gICAgICAgICAgICBvdmVybGF5LnN0eWxlLm9wYWNpdHkgPSAnMCc7XG4gICAgICAgIH0pO1xuICAgICAgICBjbGVhclRpbWVvdXQob3ZlcmxheS5fdGltZXIpO1xuICAgICAgICBvdmVybGF5Ll90aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdmVybGF5KTtcbiAgICAgICAgICAgIGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX0ZMQVNIID0gbnVsbDtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgfVxufVxuZXhwb3J0cy5mbGFzaENvbXBvbmVudCA9IGZsYXNoQ29tcG9uZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zmxhc2guanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///78693\n");
143
143
 
144
144
  /***/ }),
145
145
 
@@ -163,7 +163,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
163
163
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
164
164
 
165
165
  "use strict";
166
- eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nvar _a, _b;\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.initBackend = void 0;\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst debounce_1 = __importDefault(__webpack_require__(54073));\n\nconst throttle_1 = __importDefault(__webpack_require__(12436));\n\nconst global_hook_1 = __webpack_require__(13179);\n\nconst subscriptions_1 = __webpack_require__(19815);\n\nconst highlighter_1 = __webpack_require__(44877);\n\nconst timeline_1 = __webpack_require__(41515);\n\nconst component_pick_1 = __importDefault(__webpack_require__(76794));\n\nconst component_1 = __webpack_require__(63304);\n\nconst plugin_1 = __webpack_require__(42989);\n\nconst app_1 = __webpack_require__(79132);\n\nconst inspector_1 = __webpack_require__(96048);\n\nconst timeline_screenshot_1 = __webpack_require__(11354);\n\nconst perf_1 = __webpack_require__(75552);\n\nconst page_config_1 = __webpack_require__(26639);\n\nconst timeline_marker_1 = __webpack_require__(72063);\n\nlet ctx = (_a = shared_utils_1.target.__vdevtools_ctx) !== null && _a !== void 0 ? _a : null;\nlet connected = (_b = shared_utils_1.target.__vdevtools_connected) !== null && _b !== void 0 ? _b : false;\n\nasync function initBackend(bridge) {\n await (0, shared_utils_1.initSharedData)({\n bridge,\n persist: false\n });\n (0, page_config_1.initOnPageConfig)();\n\n if (!connected) {\n // connected = false\n ctx = shared_utils_1.target.__vdevtools_ctx = (0, app_backend_api_1.createBackendContext)({\n bridge,\n hook: global_hook_1.hook\n });\n shared_utils_1.SharedData.legacyApps = false;\n\n if (global_hook_1.hook.Vue) {\n connect();\n (0, app_1._legacy_getAndRegisterApps)(ctx, true);\n shared_utils_1.SharedData.legacyApps = true;\n }\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.INIT, () => {\n (0, app_1._legacy_getAndRegisterApps)(ctx, true);\n shared_utils_1.SharedData.legacyApps = true;\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.APP_ADD, async app => {\n await (0, app_1.registerApp)(app, ctx);\n connect();\n }); // Add apps that already sent init\n\n if (global_hook_1.hook.apps.length) {\n global_hook_1.hook.apps.forEach(app => {\n (0, app_1.registerApp)(app, ctx);\n connect();\n });\n }\n } else {\n ctx.bridge = bridge;\n connectBridge();\n }\n}\n\nexports.initBackend = initBackend;\n\nasync function connect() {\n if (connected) {\n return;\n }\n\n connected = shared_utils_1.target.__vdevtools_connected = true;\n await (0, app_1.waitForAppsRegistration)();\n connectBridge();\n ctx.currentTab = shared_utils_1.BuiltinTabs.COMPONENTS; // Apps\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.APP_UNMOUNT, async app => {\n await (0, app_1.removeApp)(app, ctx);\n }); // Components\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_UPDATED, (0, throttle_1.default)(async (app, uid, parentUid, component) => {\n try {\n let id;\n let appRecord;\n\n if (app && uid != null) {\n id = await (0, component_1.getComponentId)(app, uid, component, ctx);\n appRecord = await (0, app_1.getAppRecord)(app, ctx);\n } else {\n id = ctx.currentInspectedComponentId;\n appRecord = ctx.currentAppRecord;\n } // Update component inspector\n\n\n if (id && (0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.SELECTED_COMPONENT_DATA, sub => sub.payload.instanceId === id)) {\n (0, component_1.sendSelectedComponentData)(appRecord, id, ctx);\n } // Update tree (tags)\n\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === id)) {\n (0, component_1.sendComponentTreeData)(appRecord, id, appRecord.componentFilter, 0, ctx);\n }\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n }, 1000 / 10));\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_ADDED, async (app, uid, parentUid, component) => {\n try {\n const id = await (0, component_1.getComponentId)(app, uid, component, ctx);\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n\n if (component) {\n if (component.__VUE_DEVTOOLS_UID__ == null) {\n component.__VUE_DEVTOOLS_UID__ = id;\n }\n\n if (!appRecord.instanceMap.has(id)) {\n appRecord.instanceMap.set(id, component);\n }\n }\n\n if (parentUid != null) {\n const parentInstances = await appRecord.backend.api.walkComponentParents(component);\n\n if (parentInstances.length) {\n // Check two parents level to update `hasChildren\n for (let i = 0; i < 2 && i < parentInstances.length; i++) {\n const parentId = await (0, component_1.getComponentId)(app, parentUid, parentInstances[i], ctx);\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === parentId)) {\n requestAnimationFrame(() => {\n (0, component_1.sendComponentTreeData)(appRecord, parentId, appRecord.componentFilter, null, ctx);\n });\n }\n }\n }\n }\n\n if (ctx.currentInspectedComponentId === id) {\n (0, component_1.sendSelectedComponentData)(appRecord, id, ctx);\n }\n\n await (0, component_1.refreshComponentTreeSearch)(ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_REMOVED, async (app, uid, parentUid, component) => {\n try {\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n\n if (parentUid != null) {\n const parentInstances = await appRecord.backend.api.walkComponentParents(component);\n\n if (parentInstances.length) {\n const parentId = await (0, component_1.getComponentId)(app, parentUid, parentInstances[0], ctx);\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === parentId)) {\n requestAnimationFrame(async () => {\n try {\n (0, component_1.sendComponentTreeData)(await (0, app_1.getAppRecord)(app, ctx), parentId, appRecord.componentFilter, null, ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n }\n }\n }\n\n const id = await (0, component_1.getComponentId)(app, uid, component, ctx);\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.SELECTED_COMPONENT_DATA, sub => sub.payload.instanceId === id)) {\n (0, component_1.sendEmptyComponentData)(id, ctx);\n }\n\n appRecord.instanceMap.delete(id);\n await (0, component_1.refreshComponentTreeSearch)(ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n }); // Component perf\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.PERFORMANCE_START, async (app, uid, vm, type, time) => {\n await (0, perf_1.performanceMarkStart)(app, uid, vm, type, time, ctx);\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.PERFORMANCE_END, async (app, uid, vm, type, time) => {\n await (0, perf_1.performanceMarkEnd)(app, uid, vm, type, time, ctx);\n }); // Highlighter\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_HIGHLIGHT, async instanceId => {\n await (0, highlighter_1.highlight)(ctx.currentAppRecord.instanceMap.get(instanceId), ctx.currentAppRecord.backend, ctx);\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_UNHIGHLIGHT, async () => {\n await (0, highlighter_1.unHighlight)();\n }); // Timeline\n\n (0, timeline_1.setupTimeline)(ctx);\n global_hook_1.hook.on(shared_utils_1.HookEvents.TIMELINE_LAYER_ADDED, async (options, plugin) => {\n const appRecord = await (0, app_1.getAppRecord)(plugin.descriptor.app, ctx);\n ctx.timelineLayers.push({ ...options,\n appRecord,\n plugin,\n events: []\n });\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LAYER_ADD, {});\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.TIMELINE_EVENT_ADDED, async (options, plugin) => {\n await (0, timeline_1.addTimelineEvent)(options, plugin.descriptor.app, ctx);\n }); // Custom inspectors\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_ADD, async (options, plugin) => {\n const appRecord = await (0, app_1.getAppRecord)(plugin.descriptor.app, ctx);\n ctx.customInspectors.push({ ...options,\n appRecord,\n plugin,\n treeFilter: '',\n selectedNodeId: null\n });\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_CUSTOM_INSPECTOR_ADD, {});\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_TREE, async (inspectorId, plugin) => {\n const inspector = (0, inspector_1.getInspector)(inspectorId, plugin.descriptor.app, ctx);\n\n if (inspector) {\n await (0, inspector_1.sendInspectorTree)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_STATE, async (inspectorId, plugin) => {\n const inspector = (0, inspector_1.getInspector)(inspectorId, plugin.descriptor.app, ctx);\n\n if (inspector) {\n await (0, inspector_1.sendInspectorState)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SELECT_NODE, async (inspectorId, nodeId, plugin) => {\n const inspector = (0, inspector_1.getInspector)(inspectorId, plugin.descriptor.app, ctx);\n\n if (inspector) {\n await (0, inspector_1.selectInspectorNode)(inspector, nodeId, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n }); // Plugins\n\n try {\n await (0, plugin_1.addPreviouslyRegisteredPlugins)(ctx);\n } catch (e) {\n console.error(`Error adding previously registered plugins:`);\n console.error(e);\n }\n\n try {\n await (0, plugin_1.addQueuedPlugins)(ctx);\n } catch (e) {\n console.error(`Error adding queued plugins:`);\n console.error(e);\n }\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.SETUP_DEVTOOLS_PLUGIN, async (pluginDescriptor, setupFn) => {\n await (0, plugin_1.addPlugin)({\n pluginDescriptor,\n setupFn\n }, ctx);\n });\n shared_utils_1.target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ = true; // Legacy flush\n\n const handleFlush = (0, debounce_1.default)(async () => {\n var _a;\n\n if ((_a = ctx.currentAppRecord) === null || _a === void 0 ? void 0 : _a.backend.options.features.includes(app_backend_api_1.BuiltinBackendFeature.FLUSH)) {\n await (0, component_1.sendComponentTreeData)(ctx.currentAppRecord, '_root', ctx.currentAppRecord.componentFilter, null, ctx);\n\n if (ctx.currentInspectedComponentId) {\n await (0, component_1.sendSelectedComponentData)(ctx.currentAppRecord, ctx.currentInspectedComponentId, ctx);\n }\n }\n }, 500);\n global_hook_1.hook.off(shared_utils_1.HookEvents.FLUSH);\n global_hook_1.hook.on(shared_utils_1.HookEvents.FLUSH, handleFlush); // Connect done\n\n try {\n await (0, timeline_marker_1.addTimelineMarker)({\n id: 'vue-devtools-init-backend',\n time: (0, app_backend_api_1.now)(),\n label: 'Vue Devtools connected',\n color: 0x41B883,\n all: true\n }, ctx);\n } catch (e) {\n console.error(`Error while adding devtools connected timeline marker:`);\n console.error(e);\n }\n}\n\nfunction connectBridge() {\n // Subscriptions\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_SUBSCRIBE, ({\n type,\n payload\n }) => {\n (0, subscriptions_1.subscribe)(type, payload);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_UNSUBSCRIBE, ({\n type,\n payload\n }) => {\n (0, subscriptions_1.unsubscribe)(type, payload);\n }); // Tabs\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TAB_SWITCH, async tab => {\n ctx.currentTab = tab;\n await (0, highlighter_1.unHighlight)();\n }); // Apps\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_APP_LIST, async () => {\n await (0, app_1.sendApps)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_APP_SELECT, async id => {\n if (id == null) return;\n const record = ctx.appRecords.find(r => r.id === id);\n\n if (record) {\n await (0, app_1.selectApp)(record, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`App with id ${id} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_SCAN_LEGACY_APPS, () => {\n if (global_hook_1.hook.Vue) {\n (0, app_1._legacy_getAndRegisterApps)(ctx);\n }\n }); // Components\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_TREE, async ({\n instanceId,\n filter\n }) => {\n ctx.currentAppRecord.componentFilter = filter;\n (0, subscriptions_1.subscribe)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, {\n instanceId\n });\n await (0, component_1.sendComponentTreeData)(ctx.currentAppRecord, instanceId, filter, null, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_SELECTED_DATA, async instanceId => {\n await (0, component_1.sendSelectedComponentData)(ctx.currentAppRecord, instanceId, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_EDIT_STATE, async ({\n instanceId,\n dotPath,\n type,\n value,\n newKey,\n remove\n }) => {\n await (0, component_1.editComponentState)(instanceId, dotPath, type, {\n value,\n newKey,\n remove\n }, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_INSPECT_DOM, async ({\n instanceId\n }) => {\n const instance = (0, component_1.getComponentInstance)(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n const [el] = await ctx.currentAppRecord.backend.api.getComponentRootElements(instance);\n\n if (el) {\n // @ts-ignore\n window.__VUE_DEVTOOLS_INSPECT_TARGET__ = el;\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_INSPECT_DOM, null);\n }\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_SCROLL_TO, async ({\n instanceId\n }) => {\n const instance = (0, component_1.getComponentInstance)(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n const [el] = await ctx.currentAppRecord.backend.api.getComponentRootElements(instance);\n\n if (el) {\n if (typeof el.scrollIntoView === 'function') {\n el.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center'\n });\n } else {\n // Handle nodes that don't implement scrollIntoView\n const bounds = await ctx.currentAppRecord.backend.api.getComponentBounds(instance);\n const scrollTarget = document.createElement('div');\n scrollTarget.style.position = 'absolute';\n scrollTarget.style.width = `${bounds.width}px`;\n scrollTarget.style.height = `${bounds.height}px`;\n scrollTarget.style.top = `${bounds.top}px`;\n scrollTarget.style.left = `${bounds.left}px`;\n document.body.appendChild(scrollTarget);\n scrollTarget.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center'\n });\n setTimeout(() => {\n document.body.removeChild(scrollTarget);\n }, 2000);\n }\n\n (0, highlighter_1.highlight)(instance, ctx.currentAppRecord.backend, ctx);\n setTimeout(() => {\n (0, highlighter_1.unHighlight)();\n }, 2000);\n }\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_RENDER_CODE, async ({\n instanceId\n }) => {\n const instance = (0, component_1.getComponentInstance)(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n const {\n code\n } = await ctx.currentAppRecord.backend.api.getComponentRenderCode(instance);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_RENDER_CODE, {\n instanceId,\n code\n });\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_STATE_ACTION, async ({\n value,\n actionIndex\n }) => {\n const rawAction = value._custom.actions[actionIndex];\n const action = (0, shared_utils_1.revive)(rawAction === null || rawAction === void 0 ? void 0 : rawAction.action);\n\n if (action) {\n try {\n await action();\n } catch (e) {\n console.error(e);\n }\n } else {\n console.warn(`Couldn't revive action ${actionIndex} from`, value);\n }\n }); // Highlighter\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_MOUSE_OVER, async instanceId => {\n await (0, highlighter_1.highlight)(ctx.currentAppRecord.instanceMap.get(instanceId), ctx.currentAppRecord.backend, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_MOUSE_OUT, async () => {\n await (0, highlighter_1.unHighlight)();\n }); // Component picker\n\n const componentPicker = new component_pick_1.default(ctx);\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_PICK, () => {\n componentPicker.startSelecting();\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_PICK_CANCELED, () => {\n componentPicker.stopSelecting();\n }); // Timeline\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_LAYER_LIST, async () => {\n await (0, timeline_1.sendTimelineLayers)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_SHOW_SCREENSHOT, async ({\n screenshot\n }) => {\n await (0, timeline_screenshot_1.showScreenshot)(screenshot, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_CLEAR, async () => {\n await (0, timeline_1.clearTimeline)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_EVENT_DATA, async ({\n id\n }) => {\n await (0, timeline_1.sendTimelineEventData)(id, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_LAYER_LOAD_EVENTS, async ({\n appId,\n layerId\n }) => {\n await (0, timeline_1.sendTimelineLayerEvents)(appId, layerId, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_LOAD_MARKERS, async () => {\n await (0, timeline_marker_1.sendTimelineMarkers)(ctx);\n }); // Custom inspectors\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_LIST, async () => {\n await (0, inspector_1.sendCustomInspectors)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_TREE, async ({\n inspectorId,\n appId,\n treeFilter\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n inspector.treeFilter = treeFilter;\n (0, inspector_1.sendInspectorTree)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_STATE, async ({\n inspectorId,\n appId,\n nodeId\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n inspector.selectedNodeId = nodeId;\n (0, inspector_1.sendInspectorState)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_EDIT_STATE, async ({\n inspectorId,\n appId,\n nodeId,\n path,\n type,\n payload\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n await (0, inspector_1.editInspectorState)(inspector, nodeId, path, type, payload, ctx);\n inspector.selectedNodeId = nodeId;\n await (0, inspector_1.sendInspectorState)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_ACTION, async ({\n inspectorId,\n appId,\n actionIndex\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n const action = inspector.actions[actionIndex];\n\n try {\n await action.action();\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n }); // Misc\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_LOG, payload => {\n let value = payload.value;\n\n if (payload.serialized) {\n value = (0, shared_utils_1.parse)(value, payload.revive);\n } else if (payload.revive) {\n value = (0, shared_utils_1.revive)(value);\n } // eslint-disable-next-line no-console\n\n\n console[payload.level](value);\n }); // Plugins\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_DEVTOOLS_PLUGIN_LIST, async () => {\n await (0, plugin_1.sendPluginList)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_DEVTOOLS_PLUGIN_SETTING_UPDATED, ({\n pluginId,\n key,\n newValue,\n oldValue\n }) => {\n const settings = (0, shared_utils_1.getPluginSettings)(pluginId);\n ctx.hook.emit(shared_utils_1.HookEvents.PLUGIN_SETTINGS_SET, pluginId, settings);\n ctx.currentAppRecord.backend.api.callHook(\"setPluginSettings\"\n /* SET_PLUGIN_SETTINGS */\n , {\n app: ctx.currentAppRecord.options.app,\n pluginId,\n key,\n newValue,\n oldValue,\n settings\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0QsR0FGRDtBQUlBLEtBQUcsQ0FBQyxNQUFKLENBQVcsRUFBWCxDQUFjLDRCQUFhLHVDQUEzQixFQUFvRSxDQUFDO0FBQUUsWUFBRjtBQUFZLE9BQVo7QUFBaUIsWUFBakI7QUFBMkI7QUFBM0IsR0FBRCxLQUEwQztBQUM1RyxVQUFNLFFBQVEsR0FBRyxzQ0FBa0IsUUFBbEIsQ0FBakI7QUFDQSxPQUFHLENBQUMsSUFBSixDQUFTLElBQVQsQ0FBYywwQkFBVyxtQkFBekIsRUFBOEMsUUFBOUMsRUFBd0QsUUFBeEQ7QUFDQSxPQUFHLENBQUMsZ0JBQUosQ0FBcUIsT0FBckIsQ0FBNkIsR0FBN0IsQ0FBaUMsUUFBakMsQ0FBeUM7QUFBQTtBQUF6QyxNQUFxRTtBQUNuRSxTQUFHLEVBQUUsR0FBRyxDQUFDLGdCQUFKLENBQXFCLE9BQXJCLENBQTZCLEdBRGlDO0FBRW5FLGNBRm1FO0FBR25FLFNBSG1FO0FBSW5FLGNBSm1FO0FBS25FLGNBTG1FO0FBTW5FO0FBTm1FLEtBQXJFO0FBUUQsR0FYRDtBQVlEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvaW5kZXgudHM/NmYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbnZhciBfYSwgX2I7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmluaXRCYWNrZW5kID0gdm9pZCAwO1xuY29uc3QgYXBwX2JhY2tlbmRfYXBpXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9hcHAtYmFja2VuZC1hcGlcIik7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IGRlYm91bmNlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImxvZGFzaC9kZWJvdW5jZVwiKSk7XG5jb25zdCB0aHJvdHRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJsb2Rhc2gvdGhyb3R0bGVcIikpO1xuY29uc3QgZ2xvYmFsX2hvb2tfMSA9IHJlcXVpcmUoXCIuL2dsb2JhbC1ob29rXCIpO1xuY29uc3Qgc3Vic2NyaXB0aW9uc18xID0gcmVxdWlyZShcIi4vdXRpbC9zdWJzY3JpcHRpb25zXCIpO1xuY29uc3QgaGlnaGxpZ2h0ZXJfMSA9IHJlcXVpcmUoXCIuL2hpZ2hsaWdodGVyXCIpO1xuY29uc3QgdGltZWxpbmVfMSA9IHJlcXVpcmUoXCIuL3RpbWVsaW5lXCIpO1xuY29uc3QgY29tcG9uZW50X3BpY2tfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb25lbnQtcGlja1wiKSk7XG5jb25zdCBjb21wb25lbnRfMSA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudFwiKTtcbmNvbnN0IHBsdWdpbl8xID0gcmVxdWlyZShcIi4vcGx1Z2luXCIpO1xuY29uc3QgYXBwXzEgPSByZXF1aXJlKFwiLi9hcHBcIik7XG5jb25zdCBpbnNwZWN0b3JfMSA9IHJlcXVpcmUoXCIuL2luc3BlY3RvclwiKTtcbmNvbnN0IHRpbWVsaW5lX3NjcmVlbnNob3RfMSA9IHJlcXVpcmUoXCIuL3RpbWVsaW5lLXNjcmVlbnNob3RcIik7XG5jb25zdCBwZXJmXzEgPSByZXF1aXJlKFwiLi9wZXJmXCIpO1xuY29uc3QgcGFnZV9jb25maWdfMSA9IHJlcXVpcmUoXCIuL3BhZ2UtY29uZmlnXCIpO1xuY29uc3QgdGltZWxpbmVfbWFya2VyXzEgPSByZXF1aXJlKFwiLi90aW1lbGluZS1tYXJrZXJcIik7XG5sZXQgY3R4ID0gKF9hID0gc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fdmRldnRvb2xzX2N0eCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbDtcbmxldCBjb25uZWN0ZWQgPSAoX2IgPSBzaGFyZWRfdXRpbHNfMS50YXJnZXQuX192ZGV2dG9vbHNfY29ubmVjdGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZTtcbmFzeW5jIGZ1bmN0aW9uIGluaXRCYWNrZW5kKGJyaWRnZSkge1xuICAgIGF3YWl0ICgwLCBzaGFyZWRfdXRpbHNfMS5pbml0U2hhcmVkRGF0YSkoe1xuICAgICAgICBicmlkZ2UsXG4gICAgICAgIHBlcnNpc3Q6IGZhbHNlLFxuICAgIH0pO1xuICAgICgwLCBwYWdlX2NvbmZpZ18xLmluaXRPblBhZ2VDb25maWcpKCk7XG4gICAgaWYgKCFjb25uZWN0ZWQpIHtcbiAgICAgICAgLy8gY29ubmVjdGVkID0gZmFsc2VcbiAgICAgICAgY3R4ID0gc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fdmRldnRvb2xzX2N0eCA9ICgwLCBhcHBfYmFja2VuZF9hcGlfMS5jcmVhdGVCYWNrZW5kQ29udGV4dCkoe1xuICAgICAgICAgICAgYnJpZGdlLFxuICAgICAgICAgICAgaG9vazogZ2xvYmFsX2hvb2tfMS5ob29rLFxuICAgICAgICB9KTtcbiAgICAgICAgc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5sZWdhY3lBcHBzID0gZmFsc2U7XG4gICAgICAgIGlmIChnbG9iYWxfaG9va18xLmhvb2suVnVlKSB7XG4gICAgICAgICAgICBjb25uZWN0KCk7XG4gICAgICAgICAgICAoMCwgYXBwXzEuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMpKGN0eCwgdHJ1ZSk7XG4gICAgICAgICAgICBzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmxlZ2FjeUFwcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLklOSVQsICgpID0+IHtcbiAgICAgICAgICAgICgwLCBhcHBfMS5fbGVnYWN5X2dldEFuZFJlZ2lzdGVyQXBwcykoY3R4LCB0cnVlKTtcbiAgICAgICAgICAgIHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEubGVnYWN5QXBwcyA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5BUFBfQURELCBhc3luYyAoYXBwKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgYXBwXzEucmVnaXN0ZXJBcHApKGFwcCwgY3R4KTtcbiAgICAgICAgICAgIGNvbm5lY3QoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFkZCBhcHBzIHRoYXQgYWxyZWFkeSBzZW50IGluaXRcbiAgICAgICAgaWYgKGdsb2JhbF9ob29rXzEuaG9vay5hcHBzLmxlbmd0aCkge1xuICAgICAgICAgICAgZ2xvYmFsX2hvb2tfMS5ob29rLmFwcHMuZm9yRWFjaChhcHAgPT4ge1xuICAgICAgICAgICAgICAgICgwLCBhcHBfMS5yZWdpc3RlckFwcCkoYXBwLCBjdHgpO1xuICAgICAgICAgICAgICAgIGNvbm5lY3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjdHguYnJpZGdlID0gYnJpZGdlO1xuICAgICAgICBjb25uZWN0QnJpZGdlKCk7XG4gICAgfVxufVxuZXhwb3J0cy5pbml0QmFja2VuZCA9IGluaXRCYWNrZW5kO1xuYXN5bmMgZnVuY3Rpb24gY29ubmVjdCgpIHtcbiAgICBpZiAoY29ubmVjdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29ubmVjdGVkID0gc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fdmRldnRvb2xzX2Nvbm5lY3RlZCA9IHRydWU7XG4gICAgYXdhaXQgKDAsIGFwcF8xLndhaXRGb3JBcHBzUmVnaXN0cmF0aW9uKSgpO1xuICAgIGNvbm5lY3RCcmlkZ2UoKTtcbiAgICBjdHguY3VycmVudFRhYiA9IHNoYXJlZF91dGlsc18xLkJ1aWx0aW5UYWJzLkNPTVBPTkVOVFM7XG4gICAgLy8gQXBwc1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkFQUF9VTk1PVU5ULCBhc3luYyAoYXBwKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBhcHBfMS5yZW1vdmVBcHApKGFwcCwgY3R4KTtcbiAgICB9KTtcbiAgICAvLyBDb21wb25lbnRzXG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX1VQREFURUQsICgwLCB0aHJvdHRsZV8xLmRlZmF1bHQpKGFzeW5jIChhcHAsIHVpZCwgcGFyZW50VWlkLCBjb21wb25lbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBpZDtcbiAgICAgICAgICAgIGxldCBhcHBSZWNvcmQ7XG4gICAgICAgICAgICBpZiAoYXBwICYmIHVpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBhd2FpdCAoMCwgY29tcG9uZW50XzEuZ2V0Q29tcG9uZW50SWQpKGFwcCwgdWlkLCBjb21wb25lbnQsIGN0eCk7XG4gICAgICAgICAgICAgICAgYXBwUmVjb3JkID0gYXdhaXQgKDAsIGFwcF8xLmdldEFwcFJlY29yZCkoYXBwLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWQgPSBjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkO1xuICAgICAgICAgICAgICAgIGFwcFJlY29yZCA9IGN0eC5jdXJyZW50QXBwUmVjb3JkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXBkYXRlIGNvbXBvbmVudCBpbnNwZWN0b3JcbiAgICAgICAgICAgIGlmIChpZCAmJiAoMCwgc3Vic2NyaXB0aW9uc18xLmlzU3Vic2NyaWJlZCkoc2hhcmVkX3V0aWxzXzEuQnJpZGdlU3Vic2NyaXB0aW9ucy5TRUxFQ1RFRF9DT01QT05FTlRfREFUQSwgc3ViID0+IHN1Yi5wYXlsb2FkLmluc3RhbmNlSWQgPT09IGlkKSkge1xuICAgICAgICAgICAgICAgICgwLCBjb21wb25lbnRfMS5zZW5kU2VsZWN0ZWRDb21wb25lbnREYXRhKShhcHBSZWNvcmQsIGlkLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXBkYXRlIHRyZWUgKHRhZ3MpXG4gICAgICAgICAgICBpZiAoKDAsIHN1YnNjcmlwdGlvbnNfMS5pc1N1YnNjcmliZWQpKHNoYXJlZF91dGlsc18xLkJyaWRnZVN1YnNjcmlwdGlvbnMuQ09NUE9ORU5UX1RSRUUsIHN1YiA9PiBzdWIucGF5bG9hZC5pbnN0YW5jZUlkID09PSBpZCkpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29tcG9uZW50XzEuc2VuZENvbXBvbmVudFRyZWVEYXRhKShhcHBSZWNvcmQsIGlkLCBhcHBSZWNvcmQuY29tcG9uZW50RmlsdGVyLCAwLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgMTAwMCAvIDEwKSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX0FEREVELCBhc3luYyAoYXBwLCB1aWQsIHBhcmVudFVpZCwgY29tcG9uZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGF3YWl0ICgwLCBjb21wb25lbnRfMS5nZXRDb21wb25lbnRJZCkoYXBwLCB1aWQsIGNvbXBvbmVudCwgY3R4KTtcbiAgICAgICAgICAgIGNvbnN0IGFwcFJlY29yZCA9IGF3YWl0ICgwLCBhcHBfMS5nZXRBcHBSZWNvcmQpKGFwcCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50Ll9fVlVFX0RFVlRPT0xTX1VJRF9fID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50Ll9fVlVFX0RFVlRPT0xTX1VJRF9fID0gaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghYXBwUmVjb3JkLmluc3RhbmNlTWFwLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwUmVjb3JkLmluc3RhbmNlTWFwLnNldChpZCwgY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyZW50VWlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZXMgPSBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkud2Fsa0NvbXBvbmVudFBhcmVudHMoY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50SW5zdGFuY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0d28gcGFyZW50cyBsZXZlbCB0byB1cGRhdGUgYGhhc0NoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMiAmJiBpIDwgcGFyZW50SW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IGF3YWl0ICgwLCBjb21wb25lbnRfMS5nZXRDb21wb25lbnRJZCkoYXBwLCBwYXJlbnRVaWQsIHBhcmVudEluc3RhbmNlc1tpXSwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgc3Vic2NyaXB0aW9uc18xLmlzU3Vic2NyaWJlZCkoc2hhcmVkX3V0aWxzXzEuQnJpZGdlU3Vic2NyaXB0aW9ucy5DT01QT05FTlRfVFJFRSwgc3ViID0+IHN1Yi5wYXlsb2FkLmluc3RhbmNlSWQgPT09IHBhcmVudElkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBjb21wb25lbnRfMS5zZW5kQ29tcG9uZW50VHJlZURhdGEpKGFwcFJlY29yZCwgcGFyZW50SWQsIGFwcFJlY29yZC5jb21wb25lbnRGaWx0ZXIsIG51bGwsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3R4LmN1cnJlbnRJbnNwZWN0ZWRDb21wb25lbnRJZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29tcG9uZW50XzEuc2VuZFNlbGVjdGVkQ29tcG9uZW50RGF0YSkoYXBwUmVjb3JkLCBpZCwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0ICgwLCBjb21wb25lbnRfMS5yZWZyZXNoQ29tcG9uZW50VHJlZVNlYXJjaCkoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9SRU1PVkVELCBhc3luYyAoYXBwLCB1aWQsIHBhcmVudFVpZCwgY29tcG9uZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShhcHAsIGN0eCk7XG4gICAgICAgICAgICBpZiAocGFyZW50VWlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZXMgPSBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkud2Fsa0NvbXBvbmVudFBhcmVudHMoY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50SW5zdGFuY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IGF3YWl0ICgwLCBjb21wb25lbnRfMS5nZXRDb21wb25lbnRJZCkoYXBwLCBwYXJlbnRVaWQsIHBhcmVudEluc3RhbmNlc1swXSwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBzdWJzY3JpcHRpb25zXzEuaXNTdWJzY3JpYmVkKShzaGFyZWRfdXRpbHNfMS5CcmlkZ2VTdWJzY3JpcHRpb25zLkNPTVBPTkVOVF9UUkVFLCBzdWIgPT4gc3ViLnBheWxvYWQuaW5zdGFuY2VJZCA9PT0gcGFyZW50SWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBjb21wb25lbnRfMS5zZW5kQ29tcG9uZW50VHJlZURhdGEpKGF3YWl0ICgwLCBhcHBfMS5nZXRBcHBSZWNvcmQpKGFwcCwgY3R4KSwgcGFyZW50SWQsIGFwcFJlY29yZC5jb21wb25lbnRGaWx0ZXIsIG51bGwsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaWQgPSBhd2FpdCAoMCwgY29tcG9uZW50XzEuZ2V0Q29tcG9uZW50SWQpKGFwcCwgdWlkLCBjb21wb25lbnQsIGN0eCk7XG4gICAgICAgICAgICBpZiAoKDAsIHN1YnNjcmlwdGlvbnNfMS5pc1N1YnNjcmliZWQpKHNoYXJlZF91dGlsc18xLkJyaWRnZVN1YnNjcmlwdGlvbnMuU0VMRUNURURfQ09NUE9ORU5UX0RBVEEsIHN1YiA9PiBzdWIucGF5bG9hZC5pbnN0YW5jZUlkID09PSBpZCkpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29tcG9uZW50XzEuc2VuZEVtcHR5Q29tcG9uZW50RGF0YSkoaWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBjb21wb25lbnRfMS5yZWZyZXNoQ29tcG9uZW50VHJlZVNlYXJjaCkoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIENvbXBvbmVudCBwZXJmXG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuUEVSRk9STUFOQ0VfU1RBUlQsIGFzeW5jIChhcHAsIHVpZCwgdm0sIHR5cGUsIHRpbWUpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHBlcmZfMS5wZXJmb3JtYW5jZU1hcmtTdGFydCkoYXBwLCB1aWQsIHZtLCB0eXBlLCB0aW1lLCBjdHgpO1xuICAgIH0pO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlBFUkZPUk1BTkNFX0VORCwgYXN5bmMgKGFwcCwgdWlkLCB2bSwgdHlwZSwgdGltZSkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgcGVyZl8xLnBlcmZvcm1hbmNlTWFya0VuZCkoYXBwLCB1aWQsIHZtLCB0eXBlLCB0aW1lLCBjdHgpO1xuICAgIH0pO1xuICAgIC8vIEhpZ2hsaWdodGVyXG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX0hJR0hMSUdIVCwgYXN5bmMgKGluc3RhbmNlSWQpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIGhpZ2hsaWdodGVyXzEuaGlnaGxpZ2h0KShjdHguY3VycmVudEFwcFJlY29yZC5pbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2VJZCksIGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQsIGN0eCk7XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX1VOSElHSExJR0hULCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBoaWdobGlnaHRlcl8xLnVuSGlnaGxpZ2h0KSgpO1xuICAgIH0pO1xuICAgIC8vIFRpbWVsaW5lXG4gICAgKDAsIHRpbWVsaW5lXzEuc2V0dXBUaW1lbGluZSkoY3R4KTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5USU1FTElORV9MQVlFUl9BRERFRCwgYXN5bmMgKG9wdGlvbnMsIHBsdWdpbikgPT4ge1xuICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShwbHVnaW4uZGVzY3JpcHRvci5hcHAsIGN0eCk7XG4gICAgICAgIGN0eC50aW1lbGluZUxheWVycy5wdXNoKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBhcHBSZWNvcmQsXG4gICAgICAgICAgICBwbHVnaW4sXG4gICAgICAgICAgICBldmVudHM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9USU1FTElORV9MQVlFUl9BREQsIHt9KTtcbiAgICB9KTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5USU1FTElORV9FVkVOVF9BRERFRCwgYXN5bmMgKG9wdGlvbnMsIHBsdWdpbikgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgdGltZWxpbmVfMS5hZGRUaW1lbGluZUV2ZW50KShvcHRpb25zLCBwbHVnaW4uZGVzY3JpcHRvci5hcHAsIGN0eCk7XG4gICAgfSk7XG4gICAgLy8gQ3VzdG9tIGluc3BlY3RvcnNcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DVVNUT01fSU5TUEVDVE9SX0FERCwgYXN5bmMgKG9wdGlvbnMsIHBsdWdpbikgPT4ge1xuICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShwbHVnaW4uZGVzY3JpcHRvci5hcHAsIGN0eCk7XG4gICAgICAgIGN0eC5jdXN0b21JbnNwZWN0b3JzLnB1c2goe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIGFwcFJlY29yZCxcbiAgICAgICAgICAgIHBsdWdpbixcbiAgICAgICAgICAgIHRyZWVGaWx0ZXI6ICcnLFxuICAgICAgICAgICAgc2VsZWN0ZWROb2RlSWQ6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfQURELCB7fSk7XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ1VTVE9NX0lOU1BFQ1RPUl9TRU5EX1RSRUUsIGFzeW5jIChpbnNwZWN0b3JJZCwgcGx1Z2luKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RvciA9ICgwLCBpbnNwZWN0b3JfMS5nZXRJbnNwZWN0b3IpKGluc3BlY3RvcklkLCBwbHVnaW4uZGVzY3JpcHRvci5hcHAsIGN0eCk7XG4gICAgICAgIGlmIChpbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5zZW5kSW5zcGVjdG9yVHJlZSkoaW5zcGVjdG9yLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYEluc3BlY3RvciAke2luc3BlY3RvcklkfSBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNVU1RPTV9JTlNQRUNUT1JfU0VORF9TVEFURSwgYXN5bmMgKGluc3BlY3RvcklkLCBwbHVnaW4pID0+IHtcbiAgICAgICAgY29uc3QgaW5zcGVjdG9yID0gKDAsIGluc3BlY3Rvcl8xLmdldEluc3BlY3RvcikoaW5zcGVjdG9ySWQsIHBsdWdpbi5kZXNjcmlwdG9yLmFwcCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3BlY3Rvcikge1xuICAgICAgICAgICAgYXdhaXQgKDAsIGluc3BlY3Rvcl8xLnNlbmRJbnNwZWN0b3JTdGF0ZSkoaW5zcGVjdG9yLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYEluc3BlY3RvciAke2luc3BlY3RvcklkfSBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNVU1RPTV9JTlNQRUNUT1JfU0VMRUNUX05PREUsIGFzeW5jIChpbnNwZWN0b3JJZCwgbm9kZUlkLCBwbHVnaW4pID0+IHtcbiAgICAgICAgY29uc3QgaW5zcGVjdG9yID0gKDAsIGluc3BlY3Rvcl8xLmdldEluc3BlY3RvcikoaW5zcGVjdG9ySWQsIHBsdWdpbi5kZXNjcmlwdG9yLmFwcCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3BlY3Rvcikge1xuICAgICAgICAgICAgYXdhaXQgKDAsIGluc3BlY3Rvcl8xLnNlbGVjdEluc3BlY3Rvck5vZGUpKGluc3BlY3Rvciwgbm9kZUlkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYEluc3BlY3RvciAke2luc3BlY3RvcklkfSBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIFBsdWdpbnNcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCAoMCwgcGx1Z2luXzEuYWRkUHJldmlvdXNseVJlZ2lzdGVyZWRQbHVnaW5zKShjdHgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBhZGRpbmcgcHJldmlvdXNseSByZWdpc3RlcmVkIHBsdWdpbnM6YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0ICgwLCBwbHVnaW5fMS5hZGRRdWV1ZWRQbHVnaW5zKShjdHgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBhZGRpbmcgcXVldWVkIHBsdWdpbnM6YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlNFVFVQX0RFVlRPT0xTX1BMVUdJTiwgYXN5bmMgKHBsdWdpbkRlc2NyaXB0b3IsIHNldHVwRm4pID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHBsdWdpbl8xLmFkZFBsdWdpbikoeyBwbHVnaW5EZXNjcmlwdG9yLCBzZXR1cEZuIH0sIGN0eCk7XG4gICAgfSk7XG4gICAgc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX1BMVUdJTl9BUElfQVZBSUxBQkxFX18gPSB0cnVlO1xuICAgIC8vIExlZ2FjeSBmbHVzaFxuICAgIGNvbnN0IGhhbmRsZUZsdXNoID0gKDAsIGRlYm91bmNlXzEuZGVmYXVsdCkoYXN5bmMgKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICgoX2EgPSBjdHguY3VycmVudEFwcFJlY29yZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmJhY2tlbmQub3B0aW9ucy5mZWF0dXJlcy5pbmNsdWRlcyhhcHBfYmFja2VuZF9hcGlfMS5CdWlsdGluQmFja2VuZEZlYXR1cmUuRkxVU0gpKSB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgY29tcG9uZW50XzEuc2VuZENvbXBvbmVudFRyZWVEYXRhKShjdHguY3VycmVudEFwcFJlY29yZCwgJ19yb290JywgY3R4LmN1cnJlbnRBcHBSZWNvcmQuY29tcG9uZW50RmlsdGVyLCBudWxsLCBjdHgpO1xuICAgICAgICAgICAgaWYgKGN0eC5jdXJyZW50SW5zcGVjdGVkQ29tcG9uZW50SWQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCAoMCwgY29tcG9uZW50XzEuc2VuZFNlbGVjdGVkQ29tcG9uZW50RGF0YSkoY3R4LmN1cnJlbnRBcHBSZWNvcmQsIGN0eC5jdXJyZW50SW5zcGVjdGVkQ29tcG9uZW50SWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCA1MDApO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vZmYoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5GTFVTSCk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuRkxVU0gsIGhhbmRsZUZsdXNoKTtcbiAgICAvLyBDb25uZWN0IGRvbmVcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCAoMCwgdGltZWxpbmVfbWFya2VyXzEuYWRkVGltZWxpbmVNYXJrZXIpKHtcbiAgICAgICAgICAgIGlkOiAndnVlLWRldnRvb2xzLWluaXQtYmFja2VuZCcsXG4gICAgICAgICAgICB0aW1lOiAoMCwgYXBwX2JhY2tlbmRfYXBpXzEubm93KSgpLFxuICAgICAgICAgICAgbGFiZWw6ICdWdWUgRGV2dG9vbHMgY29ubmVjdGVkJyxcbiAgICAgICAgICAgIGNvbG9yOiAweDQxQjg4MyxcbiAgICAgICAgICAgIGFsbDogdHJ1ZSxcbiAgICAgICAgfSwgY3R4KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3Igd2hpbGUgYWRkaW5nIGRldnRvb2xzIGNvbm5lY3RlZCB0aW1lbGluZSBtYXJrZXI6YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gY29ubmVjdEJyaWRnZSgpIHtcbiAgICAvLyBTdWJzY3JpcHRpb25zXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19TVUJTQ1JJQkUsICh7IHR5cGUsIHBheWxvYWQgfSkgPT4ge1xuICAgICAgICAoMCwgc3Vic2NyaXB0aW9uc18xLnN1YnNjcmliZSkodHlwZSwgcGF5bG9hZCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19VTlNVQlNDUklCRSwgKHsgdHlwZSwgcGF5bG9hZCB9KSA9PiB7XG4gICAgICAgICgwLCBzdWJzY3JpcHRpb25zXzEudW5zdWJzY3JpYmUpKHR5cGUsIHBheWxvYWQpO1xuICAgIH0pO1xuICAgIC8vIFRhYnNcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX1RBQl9TV0lUQ0gsIGFzeW5jICh0YWIpID0+IHtcbiAgICAgICAgY3R4LmN1cnJlbnRUYWIgPSB0YWI7XG4gICAgICAgIGF3YWl0ICgwLCBoaWdobGlnaHRlcl8xLnVuSGlnaGxpZ2h0KSgpO1xuICAgIH0pO1xuICAgIC8vIEFwcHNcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0FQUF9MSVNULCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBhcHBfMS5zZW5kQXBwcykoY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0FQUF9TRUxFQ1QsIGFzeW5jIChpZCkgPT4ge1xuICAgICAgICBpZiAoaWQgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gY3R4LmFwcFJlY29yZHMuZmluZChyID0+IHIuaWQgPT09IGlkKTtcbiAgICAgICAgaWYgKHJlY29yZCkge1xuICAgICAgICAgICAgYXdhaXQgKDAsIGFwcF8xLnNlbGVjdEFwcCkocmVjb3JkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYEFwcCB3aXRoIGlkICR7aWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19TQ0FOX0xFR0FDWV9BUFBTLCAoKSA9PiB7XG4gICAgICAgIGlmIChnbG9iYWxfaG9va18xLmhvb2suVnVlKSB7XG4gICAgICAgICAgICAoMCwgYXBwXzEuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMpKGN0eCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBDb21wb25lbnRzXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfVFJFRSwgYXN5bmMgKHsgaW5zdGFuY2VJZCwgZmlsdGVyIH0pID0+IHtcbiAgICAgICAgY3R4LmN1cnJlbnRBcHBSZWNvcmQuY29tcG9uZW50RmlsdGVyID0gZmlsdGVyO1xuICAgICAgICAoMCwgc3Vic2NyaXB0aW9uc18xLnN1YnNjcmliZSkoc2hhcmVkX3V0aWxzXzEuQnJpZGdlU3Vic2NyaXB0aW9ucy5DT01QT05FTlRfVFJFRSwgeyBpbnN0YW5jZUlkIH0pO1xuICAgICAgICBhd2FpdCAoMCwgY29tcG9uZW50XzEuc2VuZENvbXBvbmVudFRyZWVEYXRhKShjdHguY3VycmVudEFwcFJlY29yZCwgaW5zdGFuY2VJZCwgZmlsdGVyLCBudWxsLCBjdHgpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ09NUE9ORU5UX1NFTEVDVEVEX0RBVEEsIGFzeW5jIChpbnN0YW5jZUlkKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBjb21wb25lbnRfMS5zZW5kU2VsZWN0ZWRDb21wb25lbnREYXRhKShjdHguY3VycmVudEFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9FRElUX1NUQVRFLCBhc3luYyAoeyBpbnN0YW5jZUlkLCBkb3RQYXRoLCB0eXBlLCB2YWx1ZSwgbmV3S2V5LCByZW1vdmUgfSkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgY29tcG9uZW50XzEuZWRpdENvbXBvbmVudFN0YXRlKShpbnN0YW5jZUlkLCBkb3RQYXRoLCB0eXBlLCB7IHZhbHVlLCBuZXdLZXksIHJlbW92ZSB9LCBjdHgpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ09NUE9ORU5UX0lOU1BFQ1RfRE9NLCBhc3luYyAoeyBpbnN0YW5jZUlkIH0pID0+IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSAoMCwgY29tcG9uZW50XzEuZ2V0Q29tcG9uZW50SW5zdGFuY2UpKGN0eC5jdXJyZW50QXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpO1xuICAgICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IFtlbF0gPSBhd2FpdCBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLmFwaS5nZXRDb21wb25lbnRSb290RWxlbWVudHMoaW5zdGFuY2UpO1xuICAgICAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHdpbmRvdy5fX1ZVRV9ERVZUT09MU19JTlNQRUNUX1RBUkdFVF9fID0gZWw7XG4gICAgICAgICAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9DT01QT05FTlRfSU5TUEVDVF9ET00sIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfU0NST0xMX1RPLCBhc3luYyAoeyBpbnN0YW5jZUlkIH0pID0+IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSAoMCwgY29tcG9uZW50XzEuZ2V0Q29tcG9uZW50SW5zdGFuY2UpKGN0eC5jdXJyZW50QXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpO1xuICAgICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IFtlbF0gPSBhd2FpdCBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLmFwaS5nZXRDb21wb25lbnRSb290RWxlbWVudHMoaW5zdGFuY2UpO1xuICAgICAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbC5zY3JvbGxJbnRvVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9jazogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmU6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBub2RlcyB0aGF0IGRvbid0IGltcGxlbWVudCBzY3JvbGxJbnRvVmlld1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZHMgPSBhd2FpdCBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLmFwaS5nZXRDb21wb25lbnRCb3VuZHMoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxUYXJnZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVGFyZ2V0LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVGFyZ2V0LnN0eWxlLndpZHRoID0gYCR7Ym91bmRzLndpZHRofXB4YDtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVGFyZ2V0LnN0eWxlLmhlaWdodCA9IGAke2JvdW5kcy5oZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUYXJnZXQuc3R5bGUudG9wID0gYCR7Ym91bmRzLnRvcH1weGA7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRhcmdldC5zdHlsZS5sZWZ0ID0gYCR7Ym91bmRzLmxlZnR9cHhgO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcm9sbFRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRhcmdldC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9jazogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmU6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNjcm9sbFRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoMCwgaGlnaGxpZ2h0ZXJfMS5oaWdobGlnaHQpKGluc3RhbmNlLCBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLCBjdHgpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoMCwgaGlnaGxpZ2h0ZXJfMS51bkhpZ2hsaWdodCkoKTtcbiAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ09NUE9ORU5UX1JFTkRFUl9DT0RFLCBhc3luYyAoeyBpbnN0YW5jZUlkIH0pID0+IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSAoMCwgY29tcG9uZW50XzEuZ2V0Q29tcG9uZW50SW5zdGFuY2UpKGN0eC5jdXJyZW50QXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpO1xuICAgICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50UmVuZGVyQ29kZShpbnN0YW5jZSk7XG4gICAgICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0NPTVBPTkVOVF9SRU5ERVJfQ09ERSwge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DVVNUT01fU1RBVEVfQUNUSU9OLCBhc3luYyAoeyB2YWx1ZSwgYWN0aW9uSW5kZXggfSkgPT4ge1xuICAgICAgICBjb25zdCByYXdBY3Rpb24gPSB2YWx1ZS5fY3VzdG9tLmFjdGlvbnNbYWN0aW9uSW5kZXhdO1xuICAgICAgICBjb25zdCBhY3Rpb24gPSAoMCwgc2hhcmVkX3V0aWxzXzEucmV2aXZlKShyYXdBY3Rpb24gPT09IG51bGwgfHwgcmF3QWN0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiByYXdBY3Rpb24uYWN0aW9uKTtcbiAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBhY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQ291bGRuJ3QgcmV2aXZlIGFjdGlvbiAke2FjdGlvbkluZGV4fSBmcm9tYCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gSGlnaGxpZ2h0ZXJcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9NT1VTRV9PVkVSLCBhc3luYyAoaW5zdGFuY2VJZCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgaGlnaGxpZ2h0ZXJfMS5oaWdobGlnaHQpKGN0eC5jdXJyZW50QXBwUmVjb3JkLmluc3RhbmNlTWFwLmdldChpbnN0YW5jZUlkKSwgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZCwgY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9NT1VTRV9PVVQsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIGhpZ2hsaWdodGVyXzEudW5IaWdobGlnaHQpKCk7XG4gICAgfSk7XG4gICAgLy8gQ29tcG9uZW50IHBpY2tlclxuICAgIGNvbnN0IGNvbXBvbmVudFBpY2tlciA9IG5ldyBjb21wb25lbnRfcGlja18xLmRlZmF1bHQoY3R4KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9QSUNLLCAoKSA9PiB7XG4gICAgICAgIGNvbXBvbmVudFBpY2tlci5zdGFydFNlbGVjdGluZygpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ09NUE9ORU5UX1BJQ0tfQ0FOQ0VMRUQsICgpID0+IHtcbiAgICAgICAgY29tcG9uZW50UGlja2VyLnN0b3BTZWxlY3RpbmcoKTtcbiAgICB9KTtcbiAgICAvLyBUaW1lbGluZVxuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfVElNRUxJTkVfTEFZRVJfTElTVCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgdGltZWxpbmVfMS5zZW5kVGltZWxpbmVMYXllcnMpKGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19USU1FTElORV9TSE9XX1NDUkVFTlNIT1QsIGFzeW5jICh7IHNjcmVlbnNob3QgfSkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgdGltZWxpbmVfc2NyZWVuc2hvdF8xLnNob3dTY3JlZW5zaG90KShzY3JlZW5zaG90LCBjdHgpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfVElNRUxJTkVfQ0xFQVIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHRpbWVsaW5lXzEuY2xlYXJUaW1lbGluZSkoY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX1RJTUVMSU5FX0VWRU5UX0RBVEEsIGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHRpbWVsaW5lXzEuc2VuZFRpbWVsaW5lRXZlbnREYXRhKShpZCwgY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX1RJTUVMSU5FX0xBWUVSX0xPQURfRVZFTlRTLCBhc3luYyAoeyBhcHBJZCwgbGF5ZXJJZCB9KSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCB0aW1lbGluZV8xLnNlbmRUaW1lbGluZUxheWVyRXZlbnRzKShhcHBJZCwgbGF5ZXJJZCwgY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX1RJTUVMSU5FX0xPQURfTUFSS0VSUywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgdGltZWxpbmVfbWFya2VyXzEuc2VuZFRpbWVsaW5lTWFya2VycykoY3R4KTtcbiAgICB9KTtcbiAgICAvLyBDdXN0b20gaW5zcGVjdG9yc1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9MSVNULCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5zZW5kQ3VzdG9tSW5zcGVjdG9ycykoY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NVU1RPTV9JTlNQRUNUT1JfVFJFRSwgYXN5bmMgKHsgaW5zcGVjdG9ySWQsIGFwcElkLCB0cmVlRmlsdGVyIH0pID0+IHtcbiAgICAgICAgY29uc3QgaW5zcGVjdG9yID0gYXdhaXQgKDAsIGluc3BlY3Rvcl8xLmdldEluc3BlY3RvcldpdGhBcHBJZCkoaW5zcGVjdG9ySWQsIGFwcElkLCBjdHgpO1xuICAgICAgICBpZiAoaW5zcGVjdG9yKSB7XG4gICAgICAgICAgICBpbnNwZWN0b3IudHJlZUZpbHRlciA9IHRyZWVGaWx0ZXI7XG4gICAgICAgICAgICAoMCwgaW5zcGVjdG9yXzEuc2VuZEluc3BlY3RvclRyZWUpKGluc3BlY3RvciwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnNwZWN0b3IgJHtpbnNwZWN0b3JJZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NVU1RPTV9JTlNQRUNUT1JfU1RBVEUsIGFzeW5jICh7IGluc3BlY3RvcklkLCBhcHBJZCwgbm9kZUlkIH0pID0+IHtcbiAgICAgICAgY29uc3QgaW5zcGVjdG9yID0gYXdhaXQgKDAsIGluc3BlY3Rvcl8xLmdldEluc3BlY3RvcldpdGhBcHBJZCkoaW5zcGVjdG9ySWQsIGFwcElkLCBjdHgpO1xuICAgICAgICBpZiAoaW5zcGVjdG9yKSB7XG4gICAgICAgICAgICBpbnNwZWN0b3Iuc2VsZWN0ZWROb2RlSWQgPSBub2RlSWQ7XG4gICAgICAgICAgICAoMCwgaW5zcGVjdG9yXzEuc2VuZEluc3BlY3RvclN0YXRlKShpbnNwZWN0b3IsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW5zcGVjdG9yICR7aW5zcGVjdG9ySWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX0VESVRfU1RBVEUsIGFzeW5jICh7IGluc3BlY3RvcklkLCBhcHBJZCwgbm9kZUlkLCBwYXRoLCB0eXBlLCBwYXlsb2FkIH0pID0+IHtcbiAgICAgICAgY29uc3QgaW5zcGVjdG9yID0gYXdhaXQgKDAsIGluc3BlY3Rvcl8xLmdldEluc3BlY3RvcldpdGhBcHBJZCkoaW5zcGVjdG9ySWQsIGFwcElkLCBjdHgpO1xuICAgICAgICBpZiAoaW5zcGVjdG9yKSB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgaW5zcGVjdG9yXzEuZWRpdEluc3BlY3RvclN0YXRlKShpbnNwZWN0b3IsIG5vZGVJZCwgcGF0aCwgdHlwZSwgcGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIGluc3BlY3Rvci5zZWxlY3RlZE5vZGVJZCA9IG5vZGVJZDtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5zZW5kSW5zcGVjdG9yU3RhdGUpKGluc3BlY3RvciwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnNwZWN0b3IgJHtpbnNwZWN0b3JJZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NVU1RPTV9JTlNQRUNUT1JfQUNUSU9OLCBhc3luYyAoeyBpbnNwZWN0b3JJZCwgYXBwSWQsIGFjdGlvbkluZGV4IH0pID0+IHtcbiAgICAgICAgY29uc3QgaW5zcGVjdG9yID0gYXdhaXQgKDAsIGluc3BlY3Rvcl8xLmdldEluc3BlY3RvcldpdGhBcHBJZCkoaW5zcGVjdG9ySWQsIGFwcElkLCBjdHgpO1xuICAgICAgICBpZiAoaW5zcGVjdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBpbnNwZWN0b3IuYWN0aW9uc1thY3Rpb25JbmRleF07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGFjdGlvbi5hY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYEluc3BlY3RvciAke2luc3BlY3RvcklkfSBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIE1pc2NcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0xPRywgKHBheWxvYWQpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKHBheWxvYWQuc2VyaWFsaXplZCkge1xuICAgICAgICAgICAgdmFsdWUgPSAoMCwgc2hhcmVkX3V0aWxzXzEucGFyc2UpKHZhbHVlLCBwYXlsb2FkLnJldml2ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGF5bG9hZC5yZXZpdmUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gKDAsIHNoYXJlZF91dGlsc18xLnJldml2ZSkodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGVbcGF5bG9hZC5sZXZlbF0odmFsdWUpO1xuICAgIH0pO1xuICAgIC8vIFBsdWdpbnNcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0RFVlRPT0xTX1BMVUdJTl9MSVNULCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBwbHVnaW5fMS5zZW5kUGx1Z2luTGlzdCkoY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0RFVlRPT0xTX1BMVUdJTl9TRVRUSU5HX1VQREFURUQsICh7IHBsdWdpbklkLCBrZXksIG5ld1ZhbHVlLCBvbGRWYWx1ZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gKDAsIHNoYXJlZF91dGlsc18xLmdldFBsdWdpblNldHRpbmdzKShwbHVnaW5JZCk7XG4gICAgICAgIGN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5QTFVHSU5fU0VUVElOR1NfU0VULCBwbHVnaW5JZCwgc2V0dGluZ3MpO1xuICAgICAgICBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLmFwaS5jYWxsSG9vayhcInNldFBsdWdpblNldHRpbmdzXCIgLyogU0VUX1BMVUdJTl9TRVRUSU5HUyAqLywge1xuICAgICAgICAgICAgYXBwOiBjdHguY3VycmVudEFwcFJlY29yZC5vcHRpb25zLmFwcCxcbiAgICAgICAgICAgIHBsdWdpbklkLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgICAgICBvbGRWYWx1ZSxcbiAgICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6895\n");
166
+ eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nvar _a, _b;\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.initBackend = void 0;\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst debounce_1 = __importDefault(__webpack_require__(54073));\n\nconst throttle_1 = __importDefault(__webpack_require__(12436));\n\nconst global_hook_1 = __webpack_require__(13179);\n\nconst subscriptions_1 = __webpack_require__(19815);\n\nconst highlighter_1 = __webpack_require__(44877);\n\nconst timeline_1 = __webpack_require__(41515);\n\nconst component_pick_1 = __importDefault(__webpack_require__(76794));\n\nconst component_1 = __webpack_require__(63304);\n\nconst plugin_1 = __webpack_require__(42989);\n\nconst devtools_api_1 = __webpack_require__(13508);\n\nconst app_1 = __webpack_require__(79132);\n\nconst inspector_1 = __webpack_require__(96048);\n\nconst timeline_screenshot_1 = __webpack_require__(11354);\n\nconst perf_1 = __webpack_require__(75552);\n\nconst page_config_1 = __webpack_require__(26639);\n\nconst timeline_marker_1 = __webpack_require__(72063);\n\nconst flash_js_1 = __webpack_require__(78693);\n\nlet ctx = (_a = shared_utils_1.target.__vdevtools_ctx) !== null && _a !== void 0 ? _a : null;\nlet connected = (_b = shared_utils_1.target.__vdevtools_connected) !== null && _b !== void 0 ? _b : false;\n\nasync function initBackend(bridge) {\n await (0, shared_utils_1.initSharedData)({\n bridge,\n persist: false\n });\n (0, page_config_1.initOnPageConfig)();\n\n if (!connected) {\n // connected = false\n ctx = shared_utils_1.target.__vdevtools_ctx = (0, app_backend_api_1.createBackendContext)({\n bridge,\n hook: global_hook_1.hook\n });\n shared_utils_1.SharedData.legacyApps = false;\n\n if (global_hook_1.hook.Vue) {\n connect();\n (0, app_1._legacy_getAndRegisterApps)(ctx, true);\n shared_utils_1.SharedData.legacyApps = true;\n }\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.INIT, () => {\n (0, app_1._legacy_getAndRegisterApps)(ctx, true);\n shared_utils_1.SharedData.legacyApps = true;\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.APP_ADD, async app => {\n await (0, app_1.registerApp)(app, ctx);\n connect();\n }); // Add apps that already sent init\n\n if (global_hook_1.hook.apps.length) {\n global_hook_1.hook.apps.forEach(app => {\n (0, app_1.registerApp)(app, ctx);\n connect();\n });\n }\n } else {\n ctx.bridge = bridge;\n connectBridge();\n }\n}\n\nexports.initBackend = initBackend;\n\nasync function connect() {\n if (connected) {\n return;\n }\n\n connected = shared_utils_1.target.__vdevtools_connected = true;\n await (0, app_1.waitForAppsRegistration)();\n connectBridge();\n ctx.currentTab = shared_utils_1.BuiltinTabs.COMPONENTS; // Apps\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.APP_UNMOUNT, async app => {\n await (0, app_1.removeApp)(app, ctx);\n }); // Components\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_UPDATED, (0, throttle_1.default)(async (app, uid, parentUid, component) => {\n try {\n let id;\n let appRecord;\n\n if (app && uid != null) {\n id = await (0, component_1.getComponentId)(app, uid, component, ctx);\n appRecord = await (0, app_1.getAppRecord)(app, ctx);\n } else {\n id = ctx.currentInspectedComponentId;\n appRecord = ctx.currentAppRecord;\n } // Update component inspector\n\n\n if (id && (0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.SELECTED_COMPONENT_DATA, sub => sub.payload.instanceId === id)) {\n (0, component_1.sendSelectedComponentData)(appRecord, id, ctx);\n } // Update tree (tags)\n\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === id)) {\n (0, component_1.sendComponentTreeData)(appRecord, id, appRecord.componentFilter, 0, ctx);\n }\n\n if (shared_utils_1.SharedData.trackUpdates) {\n (0, component_1.sendComponentUpdateTracking)(id, ctx);\n }\n\n if (shared_utils_1.SharedData.flashUpdates) {\n (0, flash_js_1.flashComponent)(component, appRecord.backend);\n }\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n }, 1000 / 10));\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_ADDED, async (app, uid, parentUid, component) => {\n try {\n const id = await (0, component_1.getComponentId)(app, uid, component, ctx);\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n\n if (component) {\n if (component.__VUE_DEVTOOLS_UID__ == null) {\n component.__VUE_DEVTOOLS_UID__ = id;\n }\n\n if (!appRecord.instanceMap.has(id)) {\n appRecord.instanceMap.set(id, component);\n }\n }\n\n if (parentUid != null) {\n const parentInstances = await appRecord.backend.api.walkComponentParents(component);\n\n if (parentInstances.length) {\n // Check two parents level to update `hasChildren\n for (let i = 0; i < parentInstances.length; i++) {\n const parentId = await (0, component_1.getComponentId)(app, parentUid, parentInstances[i], ctx);\n\n if (i < 2 && (0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === parentId)) {\n requestAnimationFrame(() => {\n (0, component_1.sendComponentTreeData)(appRecord, parentId, appRecord.componentFilter, null, ctx);\n });\n }\n\n if (shared_utils_1.SharedData.trackUpdates) {\n (0, component_1.sendComponentUpdateTracking)(parentId, ctx);\n }\n }\n }\n }\n\n if (ctx.currentInspectedComponentId === id) {\n (0, component_1.sendSelectedComponentData)(appRecord, id, ctx);\n }\n\n if (shared_utils_1.SharedData.trackUpdates) {\n (0, component_1.sendComponentUpdateTracking)(id, ctx);\n }\n\n if (shared_utils_1.SharedData.flashUpdates) {\n (0, flash_js_1.flashComponent)(component, appRecord.backend);\n }\n\n await (0, component_1.refreshComponentTreeSearch)(ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_REMOVED, async (app, uid, parentUid, component) => {\n try {\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n\n if (parentUid != null) {\n const parentInstances = await appRecord.backend.api.walkComponentParents(component);\n\n if (parentInstances.length) {\n const parentId = await (0, component_1.getComponentId)(app, parentUid, parentInstances[0], ctx);\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === parentId)) {\n requestAnimationFrame(async () => {\n try {\n (0, component_1.sendComponentTreeData)(await (0, app_1.getAppRecord)(app, ctx), parentId, appRecord.componentFilter, null, ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n }\n }\n }\n\n const id = await (0, component_1.getComponentId)(app, uid, component, ctx);\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.SELECTED_COMPONENT_DATA, sub => sub.payload.instanceId === id)) {\n (0, component_1.sendEmptyComponentData)(id, ctx);\n }\n\n appRecord.instanceMap.delete(id);\n await (0, component_1.refreshComponentTreeSearch)(ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.TRACK_UPDATE, (id, ctx) => {\n (0, component_1.sendComponentUpdateTracking)(id, ctx);\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.FLASH_UPDATE, (instance, backend) => {\n (0, flash_js_1.flashComponent)(instance, backend);\n }); // Component perf\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.PERFORMANCE_START, async (app, uid, vm, type, time) => {\n await (0, perf_1.performanceMarkStart)(app, uid, vm, type, time, ctx);\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.PERFORMANCE_END, async (app, uid, vm, type, time) => {\n await (0, perf_1.performanceMarkEnd)(app, uid, vm, type, time, ctx);\n }); // Highlighter\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_HIGHLIGHT, async instanceId => {\n await (0, highlighter_1.highlight)(ctx.currentAppRecord.instanceMap.get(instanceId), ctx.currentAppRecord.backend, ctx);\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_UNHIGHLIGHT, async () => {\n await (0, highlighter_1.unHighlight)();\n }); // Timeline\n\n (0, timeline_1.setupTimeline)(ctx);\n global_hook_1.hook.on(shared_utils_1.HookEvents.TIMELINE_LAYER_ADDED, async (options, plugin) => {\n const appRecord = await (0, app_1.getAppRecord)(plugin.descriptor.app, ctx);\n ctx.timelineLayers.push({ ...options,\n appRecord,\n plugin,\n events: []\n });\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LAYER_ADD, {});\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.TIMELINE_EVENT_ADDED, async (options, plugin) => {\n await (0, timeline_1.addTimelineEvent)(options, plugin.descriptor.app, ctx);\n }); // Custom inspectors\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_ADD, async (options, plugin) => {\n const appRecord = await (0, app_1.getAppRecord)(plugin.descriptor.app, ctx);\n ctx.customInspectors.push({ ...options,\n appRecord,\n plugin,\n treeFilter: '',\n selectedNodeId: null\n });\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_CUSTOM_INSPECTOR_ADD, {});\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_TREE, async (inspectorId, plugin) => {\n const inspector = (0, inspector_1.getInspector)(inspectorId, plugin.descriptor.app, ctx);\n\n if (inspector) {\n await (0, inspector_1.sendInspectorTree)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_STATE, async (inspectorId, plugin) => {\n const inspector = (0, inspector_1.getInspector)(inspectorId, plugin.descriptor.app, ctx);\n\n if (inspector) {\n await (0, inspector_1.sendInspectorState)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SELECT_NODE, async (inspectorId, nodeId, plugin) => {\n const inspector = (0, inspector_1.getInspector)(inspectorId, plugin.descriptor.app, ctx);\n\n if (inspector) {\n await (0, inspector_1.selectInspectorNode)(inspector, nodeId, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n }); // Plugins\n\n try {\n await (0, plugin_1.addPreviouslyRegisteredPlugins)(ctx);\n } catch (e) {\n console.error(`Error adding previously registered plugins:`);\n console.error(e);\n }\n\n try {\n await (0, plugin_1.addQueuedPlugins)(ctx);\n } catch (e) {\n console.error(`Error adding queued plugins:`);\n console.error(e);\n }\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.SETUP_DEVTOOLS_PLUGIN, async (pluginDescriptor, setupFn) => {\n await (0, plugin_1.addPlugin)({\n pluginDescriptor,\n setupFn\n }, ctx);\n });\n shared_utils_1.target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ = true; // Legacy flush\n\n const handleFlush = (0, debounce_1.default)(async () => {\n var _a;\n\n if ((_a = ctx.currentAppRecord) === null || _a === void 0 ? void 0 : _a.backend.options.features.includes(app_backend_api_1.BuiltinBackendFeature.FLUSH)) {\n await (0, component_1.sendComponentTreeData)(ctx.currentAppRecord, '_root', ctx.currentAppRecord.componentFilter, null, ctx);\n\n if (ctx.currentInspectedComponentId) {\n await (0, component_1.sendSelectedComponentData)(ctx.currentAppRecord, ctx.currentInspectedComponentId, ctx);\n }\n }\n }, 500);\n global_hook_1.hook.off(shared_utils_1.HookEvents.FLUSH);\n global_hook_1.hook.on(shared_utils_1.HookEvents.FLUSH, handleFlush); // Connect done\n\n try {\n await (0, timeline_marker_1.addTimelineMarker)({\n id: 'vue-devtools-init-backend',\n time: (0, devtools_api_1.now)(),\n label: 'Vue Devtools connected',\n color: 0x41B883,\n all: true\n }, ctx);\n } catch (e) {\n console.error(`Error while adding devtools connected timeline marker:`);\n console.error(e);\n }\n}\n\nfunction connectBridge() {\n // Subscriptions\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_SUBSCRIBE, ({\n type,\n payload\n }) => {\n (0, subscriptions_1.subscribe)(type, payload);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_UNSUBSCRIBE, ({\n type,\n payload\n }) => {\n (0, subscriptions_1.unsubscribe)(type, payload);\n }); // Tabs\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TAB_SWITCH, async tab => {\n ctx.currentTab = tab;\n await (0, highlighter_1.unHighlight)();\n }); // Apps\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_APP_LIST, async () => {\n await (0, app_1.sendApps)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_APP_SELECT, async id => {\n if (id == null) return;\n const record = ctx.appRecords.find(r => r.id === id);\n\n if (record) {\n await (0, app_1.selectApp)(record, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`App with id ${id} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_SCAN_LEGACY_APPS, () => {\n if (global_hook_1.hook.Vue) {\n (0, app_1._legacy_getAndRegisterApps)(ctx);\n }\n }); // Components\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_TREE, async ({\n instanceId,\n filter\n }) => {\n ctx.currentAppRecord.componentFilter = filter;\n (0, subscriptions_1.subscribe)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, {\n instanceId\n });\n await (0, component_1.sendComponentTreeData)(ctx.currentAppRecord, instanceId, filter, null, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_SELECTED_DATA, async instanceId => {\n await (0, component_1.sendSelectedComponentData)(ctx.currentAppRecord, instanceId, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_EDIT_STATE, async ({\n instanceId,\n dotPath,\n type,\n value,\n newKey,\n remove\n }) => {\n await (0, component_1.editComponentState)(instanceId, dotPath, type, {\n value,\n newKey,\n remove\n }, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_INSPECT_DOM, async ({\n instanceId\n }) => {\n const instance = (0, component_1.getComponentInstance)(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n const [el] = await ctx.currentAppRecord.backend.api.getComponentRootElements(instance);\n\n if (el) {\n // @ts-ignore\n window.__VUE_DEVTOOLS_INSPECT_TARGET__ = el;\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_INSPECT_DOM, null);\n }\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_SCROLL_TO, async ({\n instanceId\n }) => {\n const instance = (0, component_1.getComponentInstance)(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n const [el] = await ctx.currentAppRecord.backend.api.getComponentRootElements(instance);\n\n if (el) {\n if (typeof el.scrollIntoView === 'function') {\n el.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center'\n });\n } else {\n // Handle nodes that don't implement scrollIntoView\n const bounds = await ctx.currentAppRecord.backend.api.getComponentBounds(instance);\n const scrollTarget = document.createElement('div');\n scrollTarget.style.position = 'absolute';\n scrollTarget.style.width = `${bounds.width}px`;\n scrollTarget.style.height = `${bounds.height}px`;\n scrollTarget.style.top = `${bounds.top}px`;\n scrollTarget.style.left = `${bounds.left}px`;\n document.body.appendChild(scrollTarget);\n scrollTarget.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center'\n });\n setTimeout(() => {\n document.body.removeChild(scrollTarget);\n }, 2000);\n }\n\n (0, highlighter_1.highlight)(instance, ctx.currentAppRecord.backend, ctx);\n setTimeout(() => {\n (0, highlighter_1.unHighlight)();\n }, 2000);\n }\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_RENDER_CODE, async ({\n instanceId\n }) => {\n const instance = (0, component_1.getComponentInstance)(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n const {\n code\n } = await ctx.currentAppRecord.backend.api.getComponentRenderCode(instance);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_RENDER_CODE, {\n instanceId,\n code\n });\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_STATE_ACTION, async ({\n value,\n actionIndex\n }) => {\n const rawAction = value._custom.actions[actionIndex];\n const action = (0, shared_utils_1.revive)(rawAction === null || rawAction === void 0 ? void 0 : rawAction.action);\n\n if (action) {\n try {\n await action();\n } catch (e) {\n console.error(e);\n }\n } else {\n console.warn(`Couldn't revive action ${actionIndex} from`, value);\n }\n }); // Highlighter\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_MOUSE_OVER, async instanceId => {\n await (0, highlighter_1.highlight)(ctx.currentAppRecord.instanceMap.get(instanceId), ctx.currentAppRecord.backend, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_MOUSE_OUT, async () => {\n await (0, highlighter_1.unHighlight)();\n }); // Component picker\n\n const componentPicker = new component_pick_1.default(ctx);\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_PICK, () => {\n componentPicker.startSelecting();\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_PICK_CANCELED, () => {\n componentPicker.stopSelecting();\n }); // Timeline\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_LAYER_LIST, async () => {\n await (0, timeline_1.sendTimelineLayers)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_SHOW_SCREENSHOT, async ({\n screenshot\n }) => {\n await (0, timeline_screenshot_1.showScreenshot)(screenshot, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_CLEAR, async () => {\n await (0, timeline_1.clearTimeline)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_EVENT_DATA, async ({\n id\n }) => {\n await (0, timeline_1.sendTimelineEventData)(id, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_LAYER_LOAD_EVENTS, async ({\n appId,\n layerId\n }) => {\n await (0, timeline_1.sendTimelineLayerEvents)(appId, layerId, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_LOAD_MARKERS, async () => {\n await (0, timeline_marker_1.sendTimelineMarkers)(ctx);\n }); // Custom inspectors\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_LIST, async () => {\n await (0, inspector_1.sendCustomInspectors)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_TREE, async ({\n inspectorId,\n appId,\n treeFilter\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n inspector.treeFilter = treeFilter;\n (0, inspector_1.sendInspectorTree)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_STATE, async ({\n inspectorId,\n appId,\n nodeId\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n inspector.selectedNodeId = nodeId;\n (0, inspector_1.sendInspectorState)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_EDIT_STATE, async ({\n inspectorId,\n appId,\n nodeId,\n path,\n type,\n payload\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n await (0, inspector_1.editInspectorState)(inspector, nodeId, path, type, payload, ctx);\n inspector.selectedNodeId = nodeId;\n await (0, inspector_1.sendInspectorState)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_ACTION, async ({\n inspectorId,\n appId,\n actionIndex\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n const action = inspector.actions[actionIndex];\n\n try {\n await action.action();\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n }); // Misc\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_LOG, payload => {\n let value = payload.value;\n\n if (payload.serialized) {\n value = (0, shared_utils_1.parse)(value, payload.revive);\n } else if (payload.revive) {\n value = (0, shared_utils_1.revive)(value);\n } // eslint-disable-next-line no-console\n\n\n console[payload.level](value);\n }); // Plugins\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_DEVTOOLS_PLUGIN_LIST, async () => {\n await (0, plugin_1.sendPluginList)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_DEVTOOLS_PLUGIN_SETTING_UPDATED, ({\n pluginId,\n key,\n newValue,\n oldValue\n }) => {\n const settings = (0, shared_utils_1.getPluginSettings)(pluginId);\n ctx.hook.emit(shared_utils_1.HookEvents.PLUGIN_SETTINGS_SET, pluginId, settings);\n ctx.currentAppRecord.backend.api.callHook(\"setPluginSettings\"\n /* SET_PLUGIN_SETTINGS */\n , {\n app: ctx.currentAppRecord.options.app,\n pluginId,\n key,\n newValue,\n oldValue,\n settings\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxnQkFBSixDQUFxQixPQUFyQixDQUE2QixHQURpQztBQUVuRSxjQUZtRTtBQUduRSxTQUhtRTtBQUluRSxjQUptRTtBQUtuRSxjQUxtRTtBQU1uRTtBQU5tRSxLQUFyRTtBQVFELEdBWEQ7QUFZRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2luZGV4LnRzPzZmMzciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG52YXIgX2EsIF9iO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbml0QmFja2VuZCA9IHZvaWQgMDtcbmNvbnN0IGFwcF9iYWNrZW5kX2FwaV8xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvYXBwLWJhY2tlbmQtYXBpXCIpO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBkZWJvdW5jZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJsb2Rhc2gvZGVib3VuY2VcIikpO1xuY29uc3QgdGhyb3R0bGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibG9kYXNoL3Rocm90dGxlXCIpKTtcbmNvbnN0IGdsb2JhbF9ob29rXzEgPSByZXF1aXJlKFwiLi9nbG9iYWwtaG9va1wiKTtcbmNvbnN0IHN1YnNjcmlwdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3V0aWwvc3Vic2NyaXB0aW9uc1wiKTtcbmNvbnN0IGhpZ2hsaWdodGVyXzEgPSByZXF1aXJlKFwiLi9oaWdobGlnaHRlclwiKTtcbmNvbnN0IHRpbWVsaW5lXzEgPSByZXF1aXJlKFwiLi90aW1lbGluZVwiKTtcbmNvbnN0IGNvbXBvbmVudF9waWNrXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vY29tcG9uZW50LXBpY2tcIikpO1xuY29uc3QgY29tcG9uZW50XzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRcIik7XG5jb25zdCBwbHVnaW5fMSA9IHJlcXVpcmUoXCIuL3BsdWdpblwiKTtcbmNvbnN0IGRldnRvb2xzX2FwaV8xID0gcmVxdWlyZShcIkB2dWUvZGV2dG9vbHMtYXBpXCIpO1xuY29uc3QgYXBwXzEgPSByZXF1aXJlKFwiLi9hcHBcIik7XG5jb25zdCBpbnNwZWN0b3JfMSA9IHJlcXVpcmUoXCIuL2luc3BlY3RvclwiKTtcbmNvbnN0IHRpbWVsaW5lX3NjcmVlbnNob3RfMSA9IHJlcXVpcmUoXCIuL3RpbWVsaW5lLXNjcmVlbnNob3RcIik7XG5jb25zdCBwZXJmXzEgPSByZXF1aXJlKFwiLi9wZXJmXCIpO1xuY29uc3QgcGFnZV9jb25maWdfMSA9IHJlcXVpcmUoXCIuL3BhZ2UtY29uZmlnXCIpO1xuY29uc3QgdGltZWxpbmVfbWFya2VyXzEgPSByZXF1aXJlKFwiLi90aW1lbGluZS1tYXJrZXJcIik7XG5jb25zdCBmbGFzaF9qc18xID0gcmVxdWlyZShcIi4vZmxhc2guanNcIik7XG5sZXQgY3R4ID0gKF9hID0gc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fdmRldnRvb2xzX2N0eCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbDtcbmxldCBjb25uZWN0ZWQgPSAoX2IgPSBzaGFyZWRfdXRpbHNfMS50YXJnZXQuX192ZGV2dG9vbHNfY29ubmVjdGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZTtcbmFzeW5jIGZ1bmN0aW9uIGluaXRCYWNrZW5kKGJyaWRnZSkge1xuICAgIGF3YWl0ICgwLCBzaGFyZWRfdXRpbHNfMS5pbml0U2hhcmVkRGF0YSkoe1xuICAgICAgICBicmlkZ2UsXG4gICAgICAgIHBlcnNpc3Q6IGZhbHNlLFxuICAgIH0pO1xuICAgICgwLCBwYWdlX2NvbmZpZ18xLmluaXRPblBhZ2VDb25maWcpKCk7XG4gICAgaWYgKCFjb25uZWN0ZWQpIHtcbiAgICAgICAgLy8gY29ubmVjdGVkID0gZmFsc2VcbiAgICAgICAgY3R4ID0gc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fdmRldnRvb2xzX2N0eCA9ICgwLCBhcHBfYmFja2VuZF9hcGlfMS5jcmVhdGVCYWNrZW5kQ29udGV4dCkoe1xuICAgICAgICAgICAgYnJpZGdlLFxuICAgICAgICAgICAgaG9vazogZ2xvYmFsX2hvb2tfMS5ob29rLFxuICAgICAgICB9KTtcbiAgICAgICAgc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5sZWdhY3lBcHBzID0gZmFsc2U7XG4gICAgICAgIGlmIChnbG9iYWxfaG9va18xLmhvb2suVnVlKSB7XG4gICAgICAgICAgICBjb25uZWN0KCk7XG4gICAgICAgICAgICAoMCwgYXBwXzEuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMpKGN0eCwgdHJ1ZSk7XG4gICAgICAgICAgICBzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmxlZ2FjeUFwcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLklOSVQsICgpID0+IHtcbiAgICAgICAgICAgICgwLCBhcHBfMS5fbGVnYWN5X2dldEFuZFJlZ2lzdGVyQXBwcykoY3R4LCB0cnVlKTtcbiAgICAgICAgICAgIHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEubGVnYWN5QXBwcyA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5BUFBfQURELCBhc3luYyAoYXBwKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgYXBwXzEucmVnaXN0ZXJBcHApKGFwcCwgY3R4KTtcbiAgICAgICAgICAgIGNvbm5lY3QoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFkZCBhcHBzIHRoYXQgYWxyZWFkeSBzZW50IGluaXRcbiAgICAgICAgaWYgKGdsb2JhbF9ob29rXzEuaG9vay5hcHBzLmxlbmd0aCkge1xuICAgICAgICAgICAgZ2xvYmFsX2hvb2tfMS5ob29rLmFwcHMuZm9yRWFjaChhcHAgPT4ge1xuICAgICAgICAgICAgICAgICgwLCBhcHBfMS5yZWdpc3RlckFwcCkoYXBwLCBjdHgpO1xuICAgICAgICAgICAgICAgIGNvbm5lY3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjdHguYnJpZGdlID0gYnJpZGdlO1xuICAgICAgICBjb25uZWN0QnJpZGdlKCk7XG4gICAgfVxufVxuZXhwb3J0cy5pbml0QmFja2VuZCA9IGluaXRCYWNrZW5kO1xuYXN5bmMgZnVuY3Rpb24gY29ubmVjdCgpIHtcbiAgICBpZiAoY29ubmVjdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29ubmVjdGVkID0gc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fdmRldnRvb2xzX2Nvbm5lY3RlZCA9IHRydWU7XG4gICAgYXdhaXQgKDAsIGFwcF8xLndhaXRGb3JBcHBzUmVnaXN0cmF0aW9uKSgpO1xuICAgIGNvbm5lY3RCcmlkZ2UoKTtcbiAgICBjdHguY3VycmVudFRhYiA9IHNoYXJlZF91dGlsc18xLkJ1aWx0aW5UYWJzLkNPTVBPTkVOVFM7XG4gICAgLy8gQXBwc1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkFQUF9VTk1PVU5ULCBhc3luYyAoYXBwKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBhcHBfMS5yZW1vdmVBcHApKGFwcCwgY3R4KTtcbiAgICB9KTtcbiAgICAvLyBDb21wb25lbnRzXG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX1VQREFURUQsICgwLCB0aHJvdHRsZV8xLmRlZmF1bHQpKGFzeW5jIChhcHAsIHVpZCwgcGFyZW50VWlkLCBjb21wb25lbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBpZDtcbiAgICAgICAgICAgIGxldCBhcHBSZWNvcmQ7XG4gICAgICAgICAgICBpZiAoYXBwICYmIHVpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBhd2FpdCAoMCwgY29tcG9uZW50XzEuZ2V0Q29tcG9uZW50SWQpKGFwcCwgdWlkLCBjb21wb25lbnQsIGN0eCk7XG4gICAgICAgICAgICAgICAgYXBwUmVjb3JkID0gYXdhaXQgKDAsIGFwcF8xLmdldEFwcFJlY29yZCkoYXBwLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWQgPSBjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkO1xuICAgICAgICAgICAgICAgIGFwcFJlY29yZCA9IGN0eC5jdXJyZW50QXBwUmVjb3JkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXBkYXRlIGNvbXBvbmVudCBpbnNwZWN0b3JcbiAgICAgICAgICAgIGlmIChpZCAmJiAoMCwgc3Vic2NyaXB0aW9uc18xLmlzU3Vic2NyaWJlZCkoc2hhcmVkX3V0aWxzXzEuQnJpZGdlU3Vic2NyaXB0aW9ucy5TRUxFQ1RFRF9DT01QT05FTlRfREFUQSwgc3ViID0+IHN1Yi5wYXlsb2FkLmluc3RhbmNlSWQgPT09IGlkKSkge1xuICAgICAgICAgICAgICAgICgwLCBjb21wb25lbnRfMS5zZW5kU2VsZWN0ZWRDb21wb25lbnREYXRhKShhcHBSZWNvcmQsIGlkLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXBkYXRlIHRyZWUgKHRhZ3MpXG4gICAgICAgICAgICBpZiAoKDAsIHN1YnNjcmlwdGlvbnNfMS5pc1N1YnNjcmliZWQpKHNoYXJlZF91dGlsc18xLkJyaWRnZVN1YnNjcmlwdGlvbnMuQ09NUE9ORU5UX1RSRUUsIHN1YiA9PiBzdWIucGF5bG9hZC5pbnN0YW5jZUlkID09PSBpZCkpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29tcG9uZW50XzEuc2VuZENvbXBvbmVudFRyZWVEYXRhKShhcHBSZWNvcmQsIGlkLCBhcHBSZWNvcmQuY29tcG9uZW50RmlsdGVyLCAwLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEudHJhY2tVcGRhdGVzKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRVcGRhdGVUcmFja2luZykoaWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5mbGFzaFVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAoMCwgZmxhc2hfanNfMS5mbGFzaENvbXBvbmVudCkoY29tcG9uZW50LCBhcHBSZWNvcmQuYmFja2VuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCAxMDAwIC8gMTApKTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfQURERUQsIGFzeW5jIChhcHAsIHVpZCwgcGFyZW50VWlkLCBjb21wb25lbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gYXdhaXQgKDAsIGNvbXBvbmVudF8xLmdldENvbXBvbmVudElkKShhcHAsIHVpZCwgY29tcG9uZW50LCBjdHgpO1xuICAgICAgICAgICAgY29uc3QgYXBwUmVjb3JkID0gYXdhaXQgKDAsIGFwcF8xLmdldEFwcFJlY29yZCkoYXBwLCBjdHgpO1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuX19WVUVfREVWVE9PTFNfVUlEX18gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuX19WVUVfREVWVE9PTFNfVUlEX18gPSBpZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFhcHBSZWNvcmQuaW5zdGFuY2VNYXAuaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgICAgICBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuc2V0KGlkLCBjb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJlbnRVaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEluc3RhbmNlcyA9IGF3YWl0IGFwcFJlY29yZC5iYWNrZW5kLmFwaS53YWxrQ29tcG9uZW50UGFyZW50cyhjb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJbnN0YW5jZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHR3byBwYXJlbnRzIGxldmVsIHRvIHVwZGF0ZSBgaGFzQ2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRJbnN0YW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gYXdhaXQgKDAsIGNvbXBvbmVudF8xLmdldENvbXBvbmVudElkKShhcHAsIHBhcmVudFVpZCwgcGFyZW50SW5zdGFuY2VzW2ldLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCAyICYmICgwLCBzdWJzY3JpcHRpb25zXzEuaXNTdWJzY3JpYmVkKShzaGFyZWRfdXRpbHNfMS5CcmlkZ2VTdWJzY3JpcHRpb25zLkNPTVBPTkVOVF9UUkVFLCBzdWIgPT4gc3ViLnBheWxvYWQuaW5zdGFuY2VJZCA9PT0gcGFyZW50SWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRUcmVlRGF0YSkoYXBwUmVjb3JkLCBwYXJlbnRJZCwgYXBwUmVjb3JkLmNvbXBvbmVudEZpbHRlciwgbnVsbCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLnRyYWNrVXBkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBjb21wb25lbnRfMS5zZW5kQ29tcG9uZW50VXBkYXRlVHJhY2tpbmcpKHBhcmVudElkLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN0eC5jdXJyZW50SW5zcGVjdGVkQ29tcG9uZW50SWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvbXBvbmVudF8xLnNlbmRTZWxlY3RlZENvbXBvbmVudERhdGEpKGFwcFJlY29yZCwgaWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS50cmFja1VwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29tcG9uZW50XzEuc2VuZENvbXBvbmVudFVwZGF0ZVRyYWNraW5nKShpZCwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmZsYXNoVXBkYXRlcykge1xuICAgICAgICAgICAgICAgICgwLCBmbGFzaF9qc18xLmZsYXNoQ29tcG9uZW50KShjb21wb25lbnQsIGFwcFJlY29yZC5iYWNrZW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0ICgwLCBjb21wb25lbnRfMS5yZWZyZXNoQ29tcG9uZW50VHJlZVNlYXJjaCkoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9SRU1PVkVELCBhc3luYyAoYXBwLCB1aWQsIHBhcmVudFVpZCwgY29tcG9uZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShhcHAsIGN0eCk7XG4gICAgICAgICAgICBpZiAocGFyZW50VWlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZXMgPSBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkud2Fsa0NvbXBvbmVudFBhcmVudHMoY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50SW5zdGFuY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IGF3YWl0ICgwLCBjb21wb25lbnRfMS5nZXRDb21wb25lbnRJZCkoYXBwLCBwYXJlbnRVaWQsIHBhcmVudEluc3RhbmNlc1swXSwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBzdWJzY3JpcHRpb25zXzEuaXNTdWJzY3JpYmVkKShzaGFyZWRfdXRpbHNfMS5CcmlkZ2VTdWJzY3JpcHRpb25zLkNPTVBPTkVOVF9UUkVFLCBzdWIgPT4gc3ViLnBheWxvYWQuaW5zdGFuY2VJZCA9PT0gcGFyZW50SWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBjb21wb25lbnRfMS5zZW5kQ29tcG9uZW50VHJlZURhdGEpKGF3YWl0ICgwLCBhcHBfMS5nZXRBcHBSZWNvcmQpKGFwcCwgY3R4KSwgcGFyZW50SWQsIGFwcFJlY29yZC5jb21wb25lbnRGaWx0ZXIsIG51bGwsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaWQgPSBhd2FpdCAoMCwgY29tcG9uZW50XzEuZ2V0Q29tcG9uZW50SWQpKGFwcCwgdWlkLCBjb21wb25lbnQsIGN0eCk7XG4gICAgICAgICAgICBpZiAoKDAsIHN1YnNjcmlwdGlvbnNfMS5pc1N1YnNjcmliZWQpKHNoYXJlZF91dGlsc18xLkJyaWRnZVN1YnNjcmlwdGlvbnMuU0VMRUNURURfQ09NUE9ORU5UX0RBVEEsIHN1YiA9PiBzdWIucGF5bG9hZC5pbnN0YW5jZUlkID09PSBpZCkpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29tcG9uZW50XzEuc2VuZEVtcHR5Q29tcG9uZW50RGF0YSkoaWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBjb21wb25lbnRfMS5yZWZyZXNoQ29tcG9uZW50VHJlZVNlYXJjaCkoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlRSQUNLX1VQREFURSwgKGlkLCBjdHgpID0+IHtcbiAgICAgICAgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRVcGRhdGVUcmFja2luZykoaWQsIGN0eCk7XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuRkxBU0hfVVBEQVRFLCAoaW5zdGFuY2UsIGJhY2tlbmQpID0+IHtcbiAgICAgICAgKDAsIGZsYXNoX2pzXzEuZmxhc2hDb21wb25lbnQpKGluc3RhbmNlLCBiYWNrZW5kKTtcbiAgICB9KTtcbiAgICAvLyBDb21wb25lbnQgcGVyZlxuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlBFUkZPUk1BTkNFX1NUQVJULCBhc3luYyAoYXBwLCB1aWQsIHZtLCB0eXBlLCB0aW1lKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBwZXJmXzEucGVyZm9ybWFuY2VNYXJrU3RhcnQpKGFwcCwgdWlkLCB2bSwgdHlwZSwgdGltZSwgY3R4KTtcbiAgICB9KTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5QRVJGT1JNQU5DRV9FTkQsIGFzeW5jIChhcHAsIHVpZCwgdm0sIHR5cGUsIHRpbWUpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHBlcmZfMS5wZXJmb3JtYW5jZU1hcmtFbmQpKGFwcCwgdWlkLCB2bSwgdHlwZSwgdGltZSwgY3R4KTtcbiAgICB9KTtcbiAgICAvLyBIaWdobGlnaHRlclxuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9ISUdITElHSFQsIGFzeW5jIChpbnN0YW5jZUlkKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBoaWdobGlnaHRlcl8xLmhpZ2hsaWdodCkoY3R4LmN1cnJlbnRBcHBSZWNvcmQuaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlSWQpLCBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLCBjdHgpO1xuICAgIH0pO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9VTkhJR0hMSUdIVCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgaGlnaGxpZ2h0ZXJfMS51bkhpZ2hsaWdodCkoKTtcbiAgICB9KTtcbiAgICAvLyBUaW1lbGluZVxuICAgICgwLCB0aW1lbGluZV8xLnNldHVwVGltZWxpbmUpKGN0eCk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuVElNRUxJTkVfTEFZRVJfQURERUQsIGFzeW5jIChvcHRpb25zLCBwbHVnaW4pID0+IHtcbiAgICAgICAgY29uc3QgYXBwUmVjb3JkID0gYXdhaXQgKDAsIGFwcF8xLmdldEFwcFJlY29yZCkocGx1Z2luLmRlc2NyaXB0b3IuYXBwLCBjdHgpO1xuICAgICAgICBjdHgudGltZWxpbmVMYXllcnMucHVzaCh7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgYXBwUmVjb3JkLFxuICAgICAgICAgICAgcGx1Z2luLFxuICAgICAgICAgICAgZXZlbnRzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfVElNRUxJTkVfTEFZRVJfQURELCB7fSk7XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuVElNRUxJTkVfRVZFTlRfQURERUQsIGFzeW5jIChvcHRpb25zLCBwbHVnaW4pID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHRpbWVsaW5lXzEuYWRkVGltZWxpbmVFdmVudCkob3B0aW9ucywgcGx1Z2luLmRlc2NyaXB0b3IuYXBwLCBjdHgpO1xuICAgIH0pO1xuICAgIC8vIEN1c3RvbSBpbnNwZWN0b3JzXG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ1VTVE9NX0lOU1BFQ1RPUl9BREQsIGFzeW5jIChvcHRpb25zLCBwbHVnaW4pID0+IHtcbiAgICAgICAgY29uc3QgYXBwUmVjb3JkID0gYXdhaXQgKDAsIGFwcF8xLmdldEFwcFJlY29yZCkocGx1Z2luLmRlc2NyaXB0b3IuYXBwLCBjdHgpO1xuICAgICAgICBjdHguY3VzdG9tSW5zcGVjdG9ycy5wdXNoKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBhcHBSZWNvcmQsXG4gICAgICAgICAgICBwbHVnaW4sXG4gICAgICAgICAgICB0cmVlRmlsdGVyOiAnJyxcbiAgICAgICAgICAgIHNlbGVjdGVkTm9kZUlkOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9DVVNUT01fSU5TUEVDVE9SX0FERCwge30pO1xuICAgIH0pO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNVU1RPTV9JTlNQRUNUT1JfU0VORF9UUkVFLCBhc3luYyAoaW5zcGVjdG9ySWQsIHBsdWdpbikgPT4ge1xuICAgICAgICBjb25zdCBpbnNwZWN0b3IgPSAoMCwgaW5zcGVjdG9yXzEuZ2V0SW5zcGVjdG9yKShpbnNwZWN0b3JJZCwgcGx1Z2luLmRlc2NyaXB0b3IuYXBwLCBjdHgpO1xuICAgICAgICBpZiAoaW5zcGVjdG9yKSB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgaW5zcGVjdG9yXzEuc2VuZEluc3BlY3RvclRyZWUpKGluc3BlY3RvciwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnNwZWN0b3IgJHtpbnNwZWN0b3JJZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DVVNUT01fSU5TUEVDVE9SX1NFTkRfU1RBVEUsIGFzeW5jIChpbnNwZWN0b3JJZCwgcGx1Z2luKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RvciA9ICgwLCBpbnNwZWN0b3JfMS5nZXRJbnNwZWN0b3IpKGluc3BlY3RvcklkLCBwbHVnaW4uZGVzY3JpcHRvci5hcHAsIGN0eCk7XG4gICAgICAgIGlmIChpbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5zZW5kSW5zcGVjdG9yU3RhdGUpKGluc3BlY3RvciwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnNwZWN0b3IgJHtpbnNwZWN0b3JJZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DVVNUT01fSU5TUEVDVE9SX1NFTEVDVF9OT0RFLCBhc3luYyAoaW5zcGVjdG9ySWQsIG5vZGVJZCwgcGx1Z2luKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RvciA9ICgwLCBpbnNwZWN0b3JfMS5nZXRJbnNwZWN0b3IpKGluc3BlY3RvcklkLCBwbHVnaW4uZGVzY3JpcHRvci5hcHAsIGN0eCk7XG4gICAgICAgIGlmIChpbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5zZWxlY3RJbnNwZWN0b3JOb2RlKShpbnNwZWN0b3IsIG5vZGVJZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnNwZWN0b3IgJHtpbnNwZWN0b3JJZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBQbHVnaW5zXG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgKDAsIHBsdWdpbl8xLmFkZFByZXZpb3VzbHlSZWdpc3RlcmVkUGx1Z2lucykoY3R4KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgYWRkaW5nIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBwbHVnaW5zOmApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBhd2FpdCAoMCwgcGx1Z2luXzEuYWRkUXVldWVkUGx1Z2lucykoY3R4KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgYWRkaW5nIHF1ZXVlZCBwbHVnaW5zOmApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5TRVRVUF9ERVZUT09MU19QTFVHSU4sIGFzeW5jIChwbHVnaW5EZXNjcmlwdG9yLCBzZXR1cEZuKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBwbHVnaW5fMS5hZGRQbHVnaW4pKHsgcGx1Z2luRGVzY3JpcHRvciwgc2V0dXBGbiB9LCBjdHgpO1xuICAgIH0pO1xuICAgIHNoYXJlZF91dGlsc18xLnRhcmdldC5fX1ZVRV9ERVZUT09MU19QTFVHSU5fQVBJX0FWQUlMQUJMRV9fID0gdHJ1ZTtcbiAgICAvLyBMZWdhY3kgZmx1c2hcbiAgICBjb25zdCBoYW5kbGVGbHVzaCA9ICgwLCBkZWJvdW5jZV8xLmRlZmF1bHQpKGFzeW5jICgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoKF9hID0gY3R4LmN1cnJlbnRBcHBSZWNvcmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5iYWNrZW5kLm9wdGlvbnMuZmVhdHVyZXMuaW5jbHVkZXMoYXBwX2JhY2tlbmRfYXBpXzEuQnVpbHRpbkJhY2tlbmRGZWF0dXJlLkZMVVNIKSkge1xuICAgICAgICAgICAgYXdhaXQgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRUcmVlRGF0YSkoY3R4LmN1cnJlbnRBcHBSZWNvcmQsICdfcm9vdCcsIGN0eC5jdXJyZW50QXBwUmVjb3JkLmNvbXBvbmVudEZpbHRlciwgbnVsbCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgKDAsIGNvbXBvbmVudF8xLnNlbmRTZWxlY3RlZENvbXBvbmVudERhdGEpKGN0eC5jdXJyZW50QXBwUmVjb3JkLCBjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgNTAwKTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub2ZmKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuRkxVU0gpO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkZMVVNILCBoYW5kbGVGbHVzaCk7XG4gICAgLy8gQ29ubmVjdCBkb25lXG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgKDAsIHRpbWVsaW5lX21hcmtlcl8xLmFkZFRpbWVsaW5lTWFya2VyKSh7XG4gICAgICAgICAgICBpZDogJ3Z1ZS1kZXZ0b29scy1pbml0LWJhY2tlbmQnLFxuICAgICAgICAgICAgdGltZTogKDAsIGRldnRvb2xzX2FwaV8xLm5vdykoKSxcbiAgICAgICAgICAgIGxhYmVsOiAnVnVlIERldnRvb2xzIGNvbm5lY3RlZCcsXG4gICAgICAgICAgICBjb2xvcjogMHg0MUI4ODMsXG4gICAgICAgICAgICBhbGw6IHRydWUsXG4gICAgICAgIH0sIGN0eCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHdoaWxlIGFkZGluZyBkZXZ0b29scyBjb25uZWN0ZWQgdGltZWxpbmUgbWFya2VyOmApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNvbm5lY3RCcmlkZ2UoKSB7XG4gICAgLy8gU3Vic2NyaXB0aW9uc1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfU1VCU0NSSUJFLCAoeyB0eXBlLCBwYXlsb2FkIH0pID0+IHtcbiAgICAgICAgKDAsIHN1YnNjcmlwdGlvbnNfMS5zdWJzY3JpYmUpKHR5cGUsIHBheWxvYWQpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfVU5TVUJTQ1JJQkUsICh7IHR5cGUsIHBheWxvYWQgfSkgPT4ge1xuICAgICAgICAoMCwgc3Vic2NyaXB0aW9uc18xLnVuc3Vic2NyaWJlKSh0eXBlLCBwYXlsb2FkKTtcbiAgICB9KTtcbiAgICAvLyBUYWJzXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19UQUJfU1dJVENILCBhc3luYyAodGFiKSA9PiB7XG4gICAgICAgIGN0eC5jdXJyZW50VGFiID0gdGFiO1xuICAgICAgICBhd2FpdCAoMCwgaGlnaGxpZ2h0ZXJfMS51bkhpZ2hsaWdodCkoKTtcbiAgICB9KTtcbiAgICAvLyBBcHBzXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19BUFBfTElTVCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgYXBwXzEuc2VuZEFwcHMpKGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19BUFBfU0VMRUNULCBhc3luYyAoaWQpID0+IHtcbiAgICAgICAgaWYgKGlkID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGN0eC5hcHBSZWNvcmRzLmZpbmQociA9PiByLmlkID09PSBpZCk7XG4gICAgICAgIGlmIChyZWNvcmQpIHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBhcHBfMS5zZWxlY3RBcHApKHJlY29yZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBBcHAgd2l0aCBpZCAke2lkfSBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfU0NBTl9MRUdBQ1lfQVBQUywgKCkgPT4ge1xuICAgICAgICBpZiAoZ2xvYmFsX2hvb2tfMS5ob29rLlZ1ZSkge1xuICAgICAgICAgICAgKDAsIGFwcF8xLl9sZWdhY3lfZ2V0QW5kUmVnaXN0ZXJBcHBzKShjdHgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQ29tcG9uZW50c1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ09NUE9ORU5UX1RSRUUsIGFzeW5jICh7IGluc3RhbmNlSWQsIGZpbHRlciB9KSA9PiB7XG4gICAgICAgIGN0eC5jdXJyZW50QXBwUmVjb3JkLmNvbXBvbmVudEZpbHRlciA9IGZpbHRlcjtcbiAgICAgICAgKDAsIHN1YnNjcmlwdGlvbnNfMS5zdWJzY3JpYmUpKHNoYXJlZF91dGlsc18xLkJyaWRnZVN1YnNjcmlwdGlvbnMuQ09NUE9ORU5UX1RSRUUsIHsgaW5zdGFuY2VJZCB9KTtcbiAgICAgICAgYXdhaXQgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRUcmVlRGF0YSkoY3R4LmN1cnJlbnRBcHBSZWNvcmQsIGluc3RhbmNlSWQsIGZpbHRlciwgbnVsbCwgY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9TRUxFQ1RFRF9EQVRBLCBhc3luYyAoaW5zdGFuY2VJZCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgY29tcG9uZW50XzEuc2VuZFNlbGVjdGVkQ29tcG9uZW50RGF0YSkoY3R4LmN1cnJlbnRBcHBSZWNvcmQsIGluc3RhbmNlSWQsIGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfRURJVF9TVEFURSwgYXN5bmMgKHsgaW5zdGFuY2VJZCwgZG90UGF0aCwgdHlwZSwgdmFsdWUsIG5ld0tleSwgcmVtb3ZlIH0pID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIGNvbXBvbmVudF8xLmVkaXRDb21wb25lbnRTdGF0ZSkoaW5zdGFuY2VJZCwgZG90UGF0aCwgdHlwZSwgeyB2YWx1ZSwgbmV3S2V5LCByZW1vdmUgfSwgY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9JTlNQRUNUX0RPTSwgYXN5bmMgKHsgaW5zdGFuY2VJZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gKDAsIGNvbXBvbmVudF8xLmdldENvbXBvbmVudEluc3RhbmNlKShjdHguY3VycmVudEFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICBjb25zdCBbZWxdID0gYXdhaXQgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzKGluc3RhbmNlKTtcbiAgICAgICAgICAgIGlmIChlbCkge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICB3aW5kb3cuX19WVUVfREVWVE9PTFNfSU5TUEVDVF9UQVJHRVRfXyA9IGVsO1xuICAgICAgICAgICAgICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQ09NUE9ORU5UX0lOU1BFQ1RfRE9NLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ09NUE9ORU5UX1NDUk9MTF9UTywgYXN5bmMgKHsgaW5zdGFuY2VJZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gKDAsIGNvbXBvbmVudF8xLmdldENvbXBvbmVudEluc3RhbmNlKShjdHguY3VycmVudEFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICBjb25zdCBbZWxdID0gYXdhaXQgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzKGluc3RhbmNlKTtcbiAgICAgICAgICAgIGlmIChlbCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZWwuc2Nyb2xsSW50b1ZpZXcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbm9kZXMgdGhhdCBkb24ndCBpbXBsZW1lbnQgc2Nyb2xsSW50b1ZpZXdcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRzID0gYXdhaXQgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50Qm91bmRzKGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVGFyZ2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRhcmdldC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRhcmdldC5zdHlsZS53aWR0aCA9IGAke2JvdW5kcy53aWR0aH1weGA7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRhcmdldC5zdHlsZS5oZWlnaHQgPSBgJHtib3VuZHMuaGVpZ2h0fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVGFyZ2V0LnN0eWxlLnRvcCA9IGAke2JvdW5kcy50b3B9cHhgO1xuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUYXJnZXQuc3R5bGUubGVmdCA9IGAke2JvdW5kcy5sZWZ0fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JvbGxUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUYXJnZXQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzY3JvbGxUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKDAsIGhpZ2hsaWdodGVyXzEuaGlnaGxpZ2h0KShpbnN0YW5jZSwgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZCwgY3R4KTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGhpZ2hsaWdodGVyXzEudW5IaWdobGlnaHQpKCk7XG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9SRU5ERVJfQ09ERSwgYXN5bmMgKHsgaW5zdGFuY2VJZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gKDAsIGNvbXBvbmVudF8xLmdldENvbXBvbmVudEluc3RhbmNlKShjdHguY3VycmVudEFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQuYXBpLmdldENvbXBvbmVudFJlbmRlckNvZGUoaW5zdGFuY2UpO1xuICAgICAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9DT01QT05FTlRfUkVOREVSX0NPREUsIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ1VTVE9NX1NUQVRFX0FDVElPTiwgYXN5bmMgKHsgdmFsdWUsIGFjdGlvbkluZGV4IH0pID0+IHtcbiAgICAgICAgY29uc3QgcmF3QWN0aW9uID0gdmFsdWUuX2N1c3RvbS5hY3Rpb25zW2FjdGlvbkluZGV4XTtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gKDAsIHNoYXJlZF91dGlsc18xLnJldml2ZSkocmF3QWN0aW9uID09PSBudWxsIHx8IHJhd0FjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmF3QWN0aW9uLmFjdGlvbik7XG4gICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYENvdWxkbid0IHJldml2ZSBhY3Rpb24gJHthY3Rpb25JbmRleH0gZnJvbWAsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEhpZ2hsaWdodGVyXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfTU9VU0VfT1ZFUiwgYXN5bmMgKGluc3RhbmNlSWQpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIGhpZ2hsaWdodGVyXzEuaGlnaGxpZ2h0KShjdHguY3VycmVudEFwcFJlY29yZC5pbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2VJZCksIGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQsIGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfTU9VU0VfT1VULCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBoaWdobGlnaHRlcl8xLnVuSGlnaGxpZ2h0KSgpO1xuICAgIH0pO1xuICAgIC8vIENvbXBvbmVudCBwaWNrZXJcbiAgICBjb25zdCBjb21wb25lbnRQaWNrZXIgPSBuZXcgY29tcG9uZW50X3BpY2tfMS5kZWZhdWx0KGN0eCk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfUElDSywgKCkgPT4ge1xuICAgICAgICBjb21wb25lbnRQaWNrZXIuc3RhcnRTZWxlY3RpbmcoKTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9QSUNLX0NBTkNFTEVELCAoKSA9PiB7XG4gICAgICAgIGNvbXBvbmVudFBpY2tlci5zdG9wU2VsZWN0aW5nKCk7XG4gICAgfSk7XG4gICAgLy8gVGltZWxpbmVcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX1RJTUVMSU5FX0xBWUVSX0xJU1QsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHRpbWVsaW5lXzEuc2VuZFRpbWVsaW5lTGF5ZXJzKShjdHgpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfVElNRUxJTkVfU0hPV19TQ1JFRU5TSE9ULCBhc3luYyAoeyBzY3JlZW5zaG90IH0pID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHRpbWVsaW5lX3NjcmVlbnNob3RfMS5zaG93U2NyZWVuc2hvdCkoc2NyZWVuc2hvdCwgY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX1RJTUVMSU5FX0NMRUFSLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCB0aW1lbGluZV8xLmNsZWFyVGltZWxpbmUpKGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19USU1FTElORV9FVkVOVF9EQVRBLCBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCB0aW1lbGluZV8xLnNlbmRUaW1lbGluZUV2ZW50RGF0YSkoaWQsIGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19USU1FTElORV9MQVlFUl9MT0FEX0VWRU5UUywgYXN5bmMgKHsgYXBwSWQsIGxheWVySWQgfSkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgdGltZWxpbmVfMS5zZW5kVGltZWxpbmVMYXllckV2ZW50cykoYXBwSWQsIGxheWVySWQsIGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19USU1FTElORV9MT0FEX01BUktFUlMsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHRpbWVsaW5lX21hcmtlcl8xLnNlbmRUaW1lbGluZU1hcmtlcnMpKGN0eCk7XG4gICAgfSk7XG4gICAgLy8gQ3VzdG9tIGluc3BlY3RvcnNcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NVU1RPTV9JTlNQRUNUT1JfTElTVCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgaW5zcGVjdG9yXzEuc2VuZEN1c3RvbUluc3BlY3RvcnMpKGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX1RSRUUsIGFzeW5jICh7IGluc3BlY3RvcklkLCBhcHBJZCwgdHJlZUZpbHRlciB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RvciA9IGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5nZXRJbnNwZWN0b3JXaXRoQXBwSWQpKGluc3BlY3RvcklkLCBhcHBJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3BlY3Rvcikge1xuICAgICAgICAgICAgaW5zcGVjdG9yLnRyZWVGaWx0ZXIgPSB0cmVlRmlsdGVyO1xuICAgICAgICAgICAgKDAsIGluc3BlY3Rvcl8xLnNlbmRJbnNwZWN0b3JUcmVlKShpbnNwZWN0b3IsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW5zcGVjdG9yICR7aW5zcGVjdG9ySWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX1NUQVRFLCBhc3luYyAoeyBpbnNwZWN0b3JJZCwgYXBwSWQsIG5vZGVJZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RvciA9IGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5nZXRJbnNwZWN0b3JXaXRoQXBwSWQpKGluc3BlY3RvcklkLCBhcHBJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3BlY3Rvcikge1xuICAgICAgICAgICAgaW5zcGVjdG9yLnNlbGVjdGVkTm9kZUlkID0gbm9kZUlkO1xuICAgICAgICAgICAgKDAsIGluc3BlY3Rvcl8xLnNlbmRJbnNwZWN0b3JTdGF0ZSkoaW5zcGVjdG9yLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYEluc3BlY3RvciAke2luc3BlY3RvcklkfSBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9FRElUX1NUQVRFLCBhc3luYyAoeyBpbnNwZWN0b3JJZCwgYXBwSWQsIG5vZGVJZCwgcGF0aCwgdHlwZSwgcGF5bG9hZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RvciA9IGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5nZXRJbnNwZWN0b3JXaXRoQXBwSWQpKGluc3BlY3RvcklkLCBhcHBJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3BlY3Rvcikge1xuICAgICAgICAgICAgYXdhaXQgKDAsIGluc3BlY3Rvcl8xLmVkaXRJbnNwZWN0b3JTdGF0ZSkoaW5zcGVjdG9yLCBub2RlSWQsIHBhdGgsIHR5cGUsIHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICBpbnNwZWN0b3Iuc2VsZWN0ZWROb2RlSWQgPSBub2RlSWQ7XG4gICAgICAgICAgICBhd2FpdCAoMCwgaW5zcGVjdG9yXzEuc2VuZEluc3BlY3RvclN0YXRlKShpbnNwZWN0b3IsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW5zcGVjdG9yICR7aW5zcGVjdG9ySWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX0FDVElPTiwgYXN5bmMgKHsgaW5zcGVjdG9ySWQsIGFwcElkLCBhY3Rpb25JbmRleCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RvciA9IGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5nZXRJbnNwZWN0b3JXaXRoQXBwSWQpKGluc3BlY3RvcklkLCBhcHBJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3BlY3Rvcikge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gaW5zcGVjdG9yLmFjdGlvbnNbYWN0aW9uSW5kZXhdO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBhY3Rpb24uYWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnNwZWN0b3IgJHtpbnNwZWN0b3JJZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBNaXNjXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19MT0csIChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmIChwYXlsb2FkLnNlcmlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHZhbHVlID0gKDAsIHNoYXJlZF91dGlsc18xLnBhcnNlKSh2YWx1ZSwgcGF5bG9hZC5yZXZpdmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBheWxvYWQucmV2aXZlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICgwLCBzaGFyZWRfdXRpbHNfMS5yZXZpdmUpKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlW3BheWxvYWQubGV2ZWxdKHZhbHVlKTtcbiAgICB9KTtcbiAgICAvLyBQbHVnaW5zXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19ERVZUT09MU19QTFVHSU5fTElTVCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgcGx1Z2luXzEuc2VuZFBsdWdpbkxpc3QpKGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19ERVZUT09MU19QTFVHSU5fU0VUVElOR19VUERBVEVELCAoeyBwbHVnaW5JZCwga2V5LCBuZXdWYWx1ZSwgb2xkVmFsdWUgfSkgPT4ge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9ICgwLCBzaGFyZWRfdXRpbHNfMS5nZXRQbHVnaW5TZXR0aW5ncykocGx1Z2luSWQpO1xuICAgICAgICBjdHguaG9vay5lbWl0KHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuUExVR0lOX1NFVFRJTkdTX1NFVCwgcGx1Z2luSWQsIHNldHRpbmdzKTtcbiAgICAgICAgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZC5hcGkuY2FsbEhvb2soXCJzZXRQbHVnaW5TZXR0aW5nc1wiIC8qIFNFVF9QTFVHSU5fU0VUVElOR1MgKi8sIHtcbiAgICAgICAgICAgIGFwcDogY3R4LmN1cnJlbnRBcHBSZWNvcmQub3B0aW9ucy5hcHAsXG4gICAgICAgICAgICBwbHVnaW5JZCxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6895\n");
167
167
 
168
168
  /***/ }),
169
169
 
@@ -235,7 +235,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
235
235
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
236
236
 
237
237
  "use strict";
238
- eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.sendTimelineLayerEvents = exports.removeLayersForApp = exports.sendTimelineEventData = exports.clearTimeline = exports.addTimelineEvent = exports.sendTimelineLayers = exports.addBuiltinLayers = exports.setupTimeline = void 0;\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst global_hook_1 = __webpack_require__(13179);\n\nconst app_1 = __webpack_require__(79132);\n\nconst timeline_builtins_1 = __webpack_require__(78096);\n\nfunction setupTimeline(ctx) {\n setupBuiltinLayers(ctx);\n}\n\nexports.setupTimeline = setupTimeline;\n\nfunction addBuiltinLayers(appRecord, ctx) {\n for (const layerDef of timeline_builtins_1.builtinLayers) {\n ctx.timelineLayers.push({ ...layerDef,\n appRecord,\n plugin: null,\n events: []\n });\n }\n}\n\nexports.addBuiltinLayers = addBuiltinLayers;\n\nfunction setupBuiltinLayers(ctx) {\n ['mousedown', 'mouseup', 'click', 'dblclick'].forEach(eventType => {\n // @ts-ignore\n window.addEventListener(eventType, async event => {\n await addTimelineEvent({\n layerId: 'mouse',\n event: {\n time: (0, app_backend_api_1.now)(),\n data: {\n type: eventType,\n x: event.clientX,\n y: event.clientY\n },\n title: eventType\n }\n }, null, ctx);\n }, {\n capture: true,\n passive: true\n });\n });\n ['keyup', 'keydown', 'keypress'].forEach(eventType => {\n // @ts-ignore\n window.addEventListener(eventType, async event => {\n await addTimelineEvent({\n layerId: 'keyboard',\n event: {\n time: (0, app_backend_api_1.now)(),\n data: {\n type: eventType,\n key: event.key,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey\n },\n title: event.key\n }\n }, null, ctx);\n }, {\n capture: true,\n passive: true\n });\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_EMIT, async (app, instance, event, params) => {\n try {\n if (!shared_utils_1.SharedData.componentEventsEnabled) return;\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n const componentId = `${appRecord.id}:${instance.uid}`;\n const componentDisplay = (await appRecord.backend.api.getComponentName(instance)) || '<i>Unknown Component</i>';\n await addTimelineEvent({\n layerId: 'component-event',\n event: {\n time: (0, app_backend_api_1.now)(),\n data: {\n component: {\n _custom: {\n type: 'component-definition',\n display: componentDisplay\n }\n },\n event,\n params\n },\n title: event,\n subtitle: `by ${componentDisplay}`,\n meta: {\n componentId,\n bounds: await appRecord.backend.api.getComponentBounds(instance)\n }\n }\n }, app, ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n}\n\nasync function sendTimelineLayers(ctx) {\n var _a, _b;\n\n const layers = [];\n\n for (const layer of ctx.timelineLayers) {\n try {\n layers.push({\n id: layer.id,\n label: layer.label,\n color: layer.color,\n appId: (_a = layer.appRecord) === null || _a === void 0 ? void 0 : _a.id,\n pluginId: (_b = layer.plugin) === null || _b === void 0 ? void 0 : _b.descriptor.id,\n groupsOnly: layer.groupsOnly,\n skipScreenshots: layer.skipScreenshots,\n ignoreNoDurationGroups: layer.ignoreNoDurationGroups\n });\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LAYER_LIST, {\n layers\n });\n}\n\nexports.sendTimelineLayers = sendTimelineLayers;\n\nasync function addTimelineEvent(options, app, ctx) {\n const appId = app ? (0, app_1.getAppRecordId)(app) : null;\n const isAllApps = options.all || !app || appId == null;\n const id = ctx.nextTimelineEventId++;\n const eventData = {\n id,\n ...options,\n all: isAllApps\n };\n ctx.timelineEventMap.set(eventData.id, eventData);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_EVENT, {\n appId: eventData.all ? 'all' : appId,\n layerId: eventData.layerId,\n event: mapTimelineEvent(eventData)\n });\n const layer = ctx.timelineLayers.find(l => {\n var _a;\n\n return (isAllApps || ((_a = l.appRecord) === null || _a === void 0 ? void 0 : _a.options.app) === app) && l.id === options.layerId;\n });\n\n if (layer) {\n layer.events.push(eventData);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Timeline layer ${options.layerId} not found`);\n }\n}\n\nexports.addTimelineEvent = addTimelineEvent;\n\nfunction mapTimelineEvent(eventData) {\n return {\n id: eventData.id,\n time: Math.round(eventData.event.time * 1000),\n logType: eventData.event.logType,\n groupId: eventData.event.groupId,\n title: eventData.event.title,\n subtitle: eventData.event.subtitle\n };\n}\n\nasync function clearTimeline(ctx) {\n ctx.timelineEventMap.clear();\n\n for (const layer of ctx.timelineLayers) {\n layer.events = [];\n }\n\n for (const backend of ctx.backends) {\n await backend.api.clearTimeline();\n }\n}\n\nexports.clearTimeline = clearTimeline;\n\nasync function sendTimelineEventData(id, ctx) {\n let data = null;\n const eventData = ctx.timelineEventMap.get(id);\n\n if (eventData) {\n data = await ctx.currentAppRecord.backend.api.inspectTimelineEvent(eventData, ctx.currentAppRecord.options.app);\n data = (0, shared_utils_1.stringify)(data);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Event ${id} not found`, ctx.timelineEventMap.keys());\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_EVENT_DATA, {\n eventId: id,\n data\n });\n}\n\nexports.sendTimelineEventData = sendTimelineEventData;\n\nfunction removeLayersForApp(app, ctx) {\n const layers = ctx.timelineLayers.filter(l => {\n var _a;\n\n return ((_a = l.appRecord) === null || _a === void 0 ? void 0 : _a.options.app) === app;\n });\n\n for (const layer of layers) {\n const index = ctx.timelineLayers.indexOf(layer);\n if (index !== -1) ctx.timelineLayers.splice(index, 1);\n\n for (const e of layer.events) {\n ctx.timelineEventMap.delete(e.id);\n }\n }\n}\n\nexports.removeLayersForApp = removeLayersForApp;\n\nfunction sendTimelineLayerEvents(appId, layerId, ctx) {\n var _a;\n\n const app = (_a = ctx.appRecords.find(ar => ar.id === appId)) === null || _a === void 0 ? void 0 : _a.options.app;\n if (!app) return;\n const layer = ctx.timelineLayers.find(l => {\n var _a;\n\n return ((_a = l.appRecord) === null || _a === void 0 ? void 0 : _a.options.app) === app && l.id === layerId;\n });\n if (!layer) return;\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LAYER_LOAD_EVENTS, {\n appId,\n layerId,\n events: layer.events.map(e => mapTimelineEvent(e))\n });\n}\n\nexports.sendTimelineLayerEvents = sendTimelineLayerEvents;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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InNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3RpbWVsaW5lLnRzPzkyZmQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlbmRUaW1lbGluZUxheWVyRXZlbnRzID0gZXhwb3J0cy5yZW1vdmVMYXllcnNGb3JBcHAgPSBleHBvcnRzLnNlbmRUaW1lbGluZUV2ZW50RGF0YSA9IGV4cG9ydHMuY2xlYXJUaW1lbGluZSA9IGV4cG9ydHMuYWRkVGltZWxpbmVFdmVudCA9IGV4cG9ydHMuc2VuZFRpbWVsaW5lTGF5ZXJzID0gZXhwb3J0cy5hZGRCdWlsdGluTGF5ZXJzID0gZXhwb3J0cy5zZXR1cFRpbWVsaW5lID0gdm9pZCAwO1xuY29uc3QgYXBwX2JhY2tlbmRfYXBpXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9hcHAtYmFja2VuZC1hcGlcIik7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IGdsb2JhbF9ob29rXzEgPSByZXF1aXJlKFwiLi9nbG9iYWwtaG9va1wiKTtcbmNvbnN0IGFwcF8xID0gcmVxdWlyZShcIi4vYXBwXCIpO1xuY29uc3QgdGltZWxpbmVfYnVpbHRpbnNfMSA9IHJlcXVpcmUoXCIuL3RpbWVsaW5lLWJ1aWx0aW5zXCIpO1xuZnVuY3Rpb24gc2V0dXBUaW1lbGluZShjdHgpIHtcbiAgICBzZXR1cEJ1aWx0aW5MYXllcnMoY3R4KTtcbn1cbmV4cG9ydHMuc2V0dXBUaW1lbGluZSA9IHNldHVwVGltZWxpbmU7XG5mdW5jdGlvbiBhZGRCdWlsdGluTGF5ZXJzKGFwcFJlY29yZCwgY3R4KSB7XG4gICAgZm9yIChjb25zdCBsYXllckRlZiBvZiB0aW1lbGluZV9idWlsdGluc18xLmJ1aWx0aW5MYXllcnMpIHtcbiAgICAgICAgY3R4LnRpbWVsaW5lTGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgLi4ubGF5ZXJEZWYsXG4gICAgICAgICAgICBhcHBSZWNvcmQsXG4gICAgICAgICAgICBwbHVnaW46IG51bGwsXG4gICAgICAgICAgICBldmVudHM6IFtdLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmFkZEJ1aWx0aW5MYXllcnMgPSBhZGRCdWlsdGluTGF5ZXJzO1xuZnVuY3Rpb24gc2V0dXBCdWlsdGluTGF5ZXJzKGN0eCkge1xuICAgIFsnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnY2xpY2snLCAnZGJsY2xpY2snXS5mb3JFYWNoKGV2ZW50VHlwZSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6ICdtb3VzZScsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZTogKDAsIGFwcF9iYWNrZW5kX2FwaV8xLm5vdykoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudFR5cGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sIG51bGwsIGN0eCk7XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBbJ2tleXVwJywgJ2tleWRvd24nLCAna2V5cHJlc3MnXS5mb3JFYWNoKGV2ZW50VHlwZSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6ICdrZXlib2FyZCcsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZTogKDAsIGFwcF9iYWNrZW5kX2FwaV8xLm5vdykoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHJsS2V5OiBldmVudC5jdHJsS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRLZXk6IGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0S2V5OiBldmVudC5hbHRLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhS2V5OiBldmVudC5tZXRhS2V5LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZXZlbnQua2V5LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCBudWxsLCBjdHgpO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX0VNSVQsIGFzeW5jIChhcHAsIGluc3RhbmNlLCBldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIXNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuY29tcG9uZW50RXZlbnRzRW5hYmxlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShhcHAsIGN0eCk7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke2FwcFJlY29yZC5pZH06JHtpbnN0YW5jZS51aWR9YDtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudERpc3BsYXkgPSAoYXdhaXQgYXBwUmVjb3JkLmJhY2tlbmQuYXBpLmdldENvbXBvbmVudE5hbWUoaW5zdGFuY2UpKSB8fCAnPGk+VW5rbm93biBDb21wb25lbnQ8L2k+JztcbiAgICAgICAgICAgIGF3YWl0IGFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6ICdjb21wb25lbnQtZXZlbnQnLFxuICAgICAgICAgICAgICAgIGV2ZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWU6ICgwLCBhcHBfYmFja2VuZF9hcGlfMS5ub3cpKCksXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBvbmVudC1kZWZpbml0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogY29tcG9uZW50RGlzcGxheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBgYnkgJHtjb21wb25lbnREaXNwbGF5fWAsXG4gICAgICAgICAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzOiBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50Qm91bmRzKGluc3RhbmNlKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSwgYXBwLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBzZW5kVGltZWxpbmVMYXllcnMoY3R4KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBsYXllcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGN0eC50aW1lbGluZUxheWVycykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBsYXllci5pZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogbGF5ZXIubGFiZWwsXG4gICAgICAgICAgICAgICAgY29sb3I6IGxheWVyLmNvbG9yLFxuICAgICAgICAgICAgICAgIGFwcElkOiAoX2EgPSBsYXllci5hcHBSZWNvcmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZCxcbiAgICAgICAgICAgICAgICBwbHVnaW5JZDogKF9iID0gbGF5ZXIucGx1Z2luKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVzY3JpcHRvci5pZCxcbiAgICAgICAgICAgICAgICBncm91cHNPbmx5OiBsYXllci5ncm91cHNPbmx5LFxuICAgICAgICAgICAgICAgIHNraXBTY3JlZW5zaG90czogbGF5ZXIuc2tpcFNjcmVlbnNob3RzLFxuICAgICAgICAgICAgICAgIGlnbm9yZU5vRHVyYXRpb25Hcm91cHM6IGxheWVyLmlnbm9yZU5vRHVyYXRpb25Hcm91cHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0xJU1QsIHtcbiAgICAgICAgbGF5ZXJzLFxuICAgIH0pO1xufVxuZXhwb3J0cy5zZW5kVGltZWxpbmVMYXllcnMgPSBzZW5kVGltZWxpbmVMYXllcnM7XG5hc3luYyBmdW5jdGlvbiBhZGRUaW1lbGluZUV2ZW50KG9wdGlvbnMsIGFwcCwgY3R4KSB7XG4gICAgY29uc3QgYXBwSWQgPSBhcHAgPyAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkSWQpKGFwcCkgOiBudWxsO1xuICAgIGNvbnN0IGlzQWxsQXBwcyA9IG9wdGlvbnMuYWxsIHx8ICFhcHAgfHwgYXBwSWQgPT0gbnVsbDtcbiAgICBjb25zdCBpZCA9IGN0eC5uZXh0VGltZWxpbmVFdmVudElkKys7XG4gICAgY29uc3QgZXZlbnREYXRhID0ge1xuICAgICAgICBpZCxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgYWxsOiBpc0FsbEFwcHMsXG4gICAgfTtcbiAgICBjdHgudGltZWxpbmVFdmVudE1hcC5zZXQoZXZlbnREYXRhLmlkLCBldmVudERhdGEpO1xuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfVElNRUxJTkVfRVZFTlQsIHtcbiAgICAgICAgYXBwSWQ6IGV2ZW50RGF0YS5hbGwgPyAnYWxsJyA6IGFwcElkLFxuICAgICAgICBsYXllcklkOiBldmVudERhdGEubGF5ZXJJZCxcbiAgICAgICAgZXZlbnQ6IG1hcFRpbWVsaW5lRXZlbnQoZXZlbnREYXRhKSxcbiAgICB9KTtcbiAgICBjb25zdCBsYXllciA9IGN0eC50aW1lbGluZUxheWVycy5maW5kKGwgPT4geyB2YXIgX2E7IHJldHVybiAoaXNBbGxBcHBzIHx8ICgoX2EgPSBsLmFwcFJlY29yZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnMuYXBwKSA9PT0gYXBwKSAmJiBsLmlkID09PSBvcHRpb25zLmxheWVySWQ7IH0pO1xuICAgIGlmIChsYXllcikge1xuICAgICAgICBsYXllci5ldmVudHMucHVzaChldmVudERhdGEpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICBjb25zb2xlLndhcm4oYFRpbWVsaW5lIGxheWVyICR7b3B0aW9ucy5sYXllcklkfSBub3QgZm91bmRgKTtcbiAgICB9XG59XG5leHBvcnRzLmFkZFRpbWVsaW5lRXZlbnQgPSBhZGRUaW1lbGluZUV2ZW50O1xuZnVuY3Rpb24gbWFwVGltZWxpbmVFdmVudChldmVudERhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogZXZlbnREYXRhLmlkLFxuICAgICAgICB0aW1lOiBNYXRoLnJvdW5kKGV2ZW50RGF0YS5ldmVudC50aW1lICogMTAwMCksXG4gICAgICAgIGxvZ1R5cGU6IGV2ZW50RGF0YS5ldmVudC5sb2dUeXBlLFxuICAgICAgICBncm91cElkOiBldmVudERhdGEuZXZlbnQuZ3JvdXBJZCxcbiAgICAgICAgdGl0bGU6IGV2ZW50RGF0YS5ldmVudC50aXRsZSxcbiAgICAgICAgc3VidGl0bGU6IGV2ZW50RGF0YS5ldmVudC5zdWJ0aXRsZSxcbiAgICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gY2xlYXJUaW1lbGluZShjdHgpIHtcbiAgICBjdHgudGltZWxpbmVFdmVudE1hcC5jbGVhcigpO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgY3R4LnRpbWVsaW5lTGF5ZXJzKSB7XG4gICAgICAgIGxheWVyLmV2ZW50cyA9IFtdO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGJhY2tlbmQgb2YgY3R4LmJhY2tlbmRzKSB7XG4gICAgICAgIGF3YWl0IGJhY2tlbmQuYXBpLmNsZWFyVGltZWxpbmUoKTtcbiAgICB9XG59XG5leHBvcnRzLmNsZWFyVGltZWxpbmUgPSBjbGVhclRpbWVsaW5lO1xuYXN5bmMgZnVuY3Rpb24gc2VuZFRpbWVsaW5lRXZlbnREYXRhKGlkLCBjdHgpIHtcbiAgICBsZXQgZGF0YSA9IG51bGw7XG4gICAgY29uc3QgZXZlbnREYXRhID0gY3R4LnRpbWVsaW5lRXZlbnRNYXAuZ2V0KGlkKTtcbiAgICBpZiAoZXZlbnREYXRhKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLmFwaS5pbnNwZWN0VGltZWxpbmVFdmVudChldmVudERhdGEsIGN0eC5jdXJyZW50QXBwUmVjb3JkLm9wdGlvbnMuYXBwKTtcbiAgICAgICAgZGF0YSA9ICgwLCBzaGFyZWRfdXRpbHNfMS5zdHJpbmdpZnkpKGRhdGEpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICBjb25zb2xlLndhcm4oYEV2ZW50ICR7aWR9IG5vdCBmb3VuZGAsIGN0eC50aW1lbGluZUV2ZW50TWFwLmtleXMoKSk7XG4gICAgfVxuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfVElNRUxJTkVfRVZFTlRfREFUQSwge1xuICAgICAgICBldmVudElkOiBpZCxcbiAgICAgICAgZGF0YSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2VuZFRpbWVsaW5lRXZlbnREYXRhID0gc2VuZFRpbWVsaW5lRXZlbnREYXRhO1xuZnVuY3Rpb24gcmVtb3ZlTGF5ZXJzRm9yQXBwKGFwcCwgY3R4KSB7XG4gICAgY29uc3QgbGF5ZXJzID0gY3R4LnRpbWVsaW5lTGF5ZXJzLmZpbHRlcihsID0+IHsgdmFyIF9hOyByZXR1cm4gKChfYSA9IGwuYXBwUmVjb3JkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucy5hcHApID09PSBhcHA7IH0pO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY3R4LnRpbWVsaW5lTGF5ZXJzLmluZGV4T2YobGF5ZXIpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICAgICAgY3R4LnRpbWVsaW5lTGF5ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBsYXllci5ldmVudHMpIHtcbiAgICAgICAgICAgIGN0eC50aW1lbGluZUV2ZW50TWFwLmRlbGV0ZShlLmlkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMucmVtb3ZlTGF5ZXJzRm9yQXBwID0gcmVtb3ZlTGF5ZXJzRm9yQXBwO1xuZnVuY3Rpb24gc2VuZFRpbWVsaW5lTGF5ZXJFdmVudHMoYXBwSWQsIGxheWVySWQsIGN0eCkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBhcHAgPSAoX2EgPSBjdHguYXBwUmVjb3Jkcy5maW5kKGFyID0+IGFyLmlkID09PSBhcHBJZCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpb25zLmFwcDtcbiAgICBpZiAoIWFwcClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGxheWVyID0gY3R4LnRpbWVsaW5lTGF5ZXJzLmZpbmQobCA9PiB7IHZhciBfYTsgcmV0dXJuICgoX2EgPSBsLmFwcFJlY29yZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnMuYXBwKSA9PT0gYXBwICYmIGwuaWQgPT09IGxheWVySWQ7IH0pO1xuICAgIGlmICghbGF5ZXIpXG4gICAgICAgIHJldHVybjtcbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0xPQURfRVZFTlRTLCB7XG4gICAgICAgIGFwcElkLFxuICAgICAgICBsYXllcklkLFxuICAgICAgICBldmVudHM6IGxheWVyLmV2ZW50cy5tYXAoZSA9PiBtYXBUaW1lbGluZUV2ZW50KGUpKSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2VuZFRpbWVsaW5lTGF5ZXJFdmVudHMgPSBzZW5kVGltZWxpbmVMYXllckV2ZW50cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVsaW5lLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///41515\n");
238
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.sendTimelineLayerEvents = exports.removeLayersForApp = exports.sendTimelineEventData = exports.clearTimeline = exports.addTimelineEvent = exports.sendTimelineLayers = exports.addBuiltinLayers = exports.setupTimeline = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst devtools_api_1 = __webpack_require__(13508);\n\nconst global_hook_1 = __webpack_require__(13179);\n\nconst app_1 = __webpack_require__(79132);\n\nconst timeline_builtins_1 = __webpack_require__(78096);\n\nfunction setupTimeline(ctx) {\n setupBuiltinLayers(ctx);\n}\n\nexports.setupTimeline = setupTimeline;\n\nfunction addBuiltinLayers(appRecord, ctx) {\n for (const layerDef of timeline_builtins_1.builtinLayers) {\n ctx.timelineLayers.push({ ...layerDef,\n appRecord,\n plugin: null,\n events: []\n });\n }\n}\n\nexports.addBuiltinLayers = addBuiltinLayers;\n\nfunction setupBuiltinLayers(ctx) {\n ['mousedown', 'mouseup', 'click', 'dblclick'].forEach(eventType => {\n // @ts-ignore\n window.addEventListener(eventType, async event => {\n await addTimelineEvent({\n layerId: 'mouse',\n event: {\n time: (0, devtools_api_1.now)(),\n data: {\n type: eventType,\n x: event.clientX,\n y: event.clientY\n },\n title: eventType\n }\n }, null, ctx);\n }, {\n capture: true,\n passive: true\n });\n });\n ['keyup', 'keydown', 'keypress'].forEach(eventType => {\n // @ts-ignore\n window.addEventListener(eventType, async event => {\n await addTimelineEvent({\n layerId: 'keyboard',\n event: {\n time: (0, devtools_api_1.now)(),\n data: {\n type: eventType,\n key: event.key,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey\n },\n title: event.key\n }\n }, null, ctx);\n }, {\n capture: true,\n passive: true\n });\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_EMIT, async (app, instance, event, params) => {\n try {\n if (!shared_utils_1.SharedData.componentEventsEnabled) return;\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n const componentId = `${appRecord.id}:${instance.uid}`;\n const componentDisplay = (await appRecord.backend.api.getComponentName(instance)) || '<i>Unknown Component</i>';\n await addTimelineEvent({\n layerId: 'component-event',\n event: {\n time: (0, devtools_api_1.now)(),\n data: {\n component: {\n _custom: {\n type: 'component-definition',\n display: componentDisplay\n }\n },\n event,\n params\n },\n title: event,\n subtitle: `by ${componentDisplay}`,\n meta: {\n componentId,\n bounds: await appRecord.backend.api.getComponentBounds(instance)\n }\n }\n }, app, ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n}\n\nasync function sendTimelineLayers(ctx) {\n var _a, _b;\n\n const layers = [];\n\n for (const layer of ctx.timelineLayers) {\n try {\n layers.push({\n id: layer.id,\n label: layer.label,\n color: layer.color,\n appId: (_a = layer.appRecord) === null || _a === void 0 ? void 0 : _a.id,\n pluginId: (_b = layer.plugin) === null || _b === void 0 ? void 0 : _b.descriptor.id,\n groupsOnly: layer.groupsOnly,\n skipScreenshots: layer.skipScreenshots,\n ignoreNoDurationGroups: layer.ignoreNoDurationGroups\n });\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LAYER_LIST, {\n layers\n });\n}\n\nexports.sendTimelineLayers = sendTimelineLayers;\n\nasync function addTimelineEvent(options, app, ctx) {\n const appId = app ? (0, app_1.getAppRecordId)(app) : null;\n const isAllApps = options.all || !app || appId == null;\n const id = ctx.nextTimelineEventId++;\n const eventData = {\n id,\n ...options,\n all: isAllApps\n };\n ctx.timelineEventMap.set(eventData.id, eventData);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_EVENT, {\n appId: eventData.all ? 'all' : appId,\n layerId: eventData.layerId,\n event: mapTimelineEvent(eventData)\n });\n const layer = ctx.timelineLayers.find(l => {\n var _a;\n\n return (isAllApps || ((_a = l.appRecord) === null || _a === void 0 ? void 0 : _a.options.app) === app) && l.id === options.layerId;\n });\n\n if (layer) {\n layer.events.push(eventData);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Timeline layer ${options.layerId} not found`);\n }\n}\n\nexports.addTimelineEvent = addTimelineEvent;\n\nfunction mapTimelineEvent(eventData) {\n return {\n id: eventData.id,\n time: Math.round(eventData.event.time * 1000),\n logType: eventData.event.logType,\n groupId: eventData.event.groupId,\n title: eventData.event.title,\n subtitle: eventData.event.subtitle\n };\n}\n\nasync function clearTimeline(ctx) {\n ctx.timelineEventMap.clear();\n\n for (const layer of ctx.timelineLayers) {\n layer.events = [];\n }\n\n for (const backend of ctx.backends) {\n await backend.api.clearTimeline();\n }\n}\n\nexports.clearTimeline = clearTimeline;\n\nasync function sendTimelineEventData(id, ctx) {\n let data = null;\n const eventData = ctx.timelineEventMap.get(id);\n\n if (eventData) {\n data = await ctx.currentAppRecord.backend.api.inspectTimelineEvent(eventData, ctx.currentAppRecord.options.app);\n data = (0, shared_utils_1.stringify)(data);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Event ${id} not found`, ctx.timelineEventMap.keys());\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_EVENT_DATA, {\n eventId: id,\n data\n });\n}\n\nexports.sendTimelineEventData = sendTimelineEventData;\n\nfunction removeLayersForApp(app, ctx) {\n const layers = ctx.timelineLayers.filter(l => {\n var _a;\n\n return ((_a = l.appRecord) === null || _a === void 0 ? void 0 : _a.options.app) === app;\n });\n\n for (const layer of layers) {\n const index = ctx.timelineLayers.indexOf(layer);\n if (index !== -1) ctx.timelineLayers.splice(index, 1);\n\n for (const e of layer.events) {\n ctx.timelineEventMap.delete(e.id);\n }\n }\n}\n\nexports.removeLayersForApp = removeLayersForApp;\n\nfunction sendTimelineLayerEvents(appId, layerId, ctx) {\n var _a;\n\n const app = (_a = ctx.appRecords.find(ar => ar.id === appId)) === null || _a === void 0 ? void 0 : _a.options.app;\n if (!app) return;\n const layer = ctx.timelineLayers.find(l => {\n var _a;\n\n return ((_a = l.appRecord) === null || _a === void 0 ? void 0 : _a.options.app) === app && l.id === layerId;\n });\n if (!layer) return;\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LAYER_LOAD_EVENTS, {\n appId,\n layerId,\n events: layer.events.map(e => mapTimelineEvent(e))\n });\n}\n\nexports.sendTimelineLayerEvents = sendTimelineLayerEvents;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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InNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3RpbWVsaW5lLnRzPzkyZmQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlbmRUaW1lbGluZUxheWVyRXZlbnRzID0gZXhwb3J0cy5yZW1vdmVMYXllcnNGb3JBcHAgPSBleHBvcnRzLnNlbmRUaW1lbGluZUV2ZW50RGF0YSA9IGV4cG9ydHMuY2xlYXJUaW1lbGluZSA9IGV4cG9ydHMuYWRkVGltZWxpbmVFdmVudCA9IGV4cG9ydHMuc2VuZFRpbWVsaW5lTGF5ZXJzID0gZXhwb3J0cy5hZGRCdWlsdGluTGF5ZXJzID0gZXhwb3J0cy5zZXR1cFRpbWVsaW5lID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBkZXZ0b29sc19hcGlfMSA9IHJlcXVpcmUoXCJAdnVlL2RldnRvb2xzLWFwaVwiKTtcbmNvbnN0IGdsb2JhbF9ob29rXzEgPSByZXF1aXJlKFwiLi9nbG9iYWwtaG9va1wiKTtcbmNvbnN0IGFwcF8xID0gcmVxdWlyZShcIi4vYXBwXCIpO1xuY29uc3QgdGltZWxpbmVfYnVpbHRpbnNfMSA9IHJlcXVpcmUoXCIuL3RpbWVsaW5lLWJ1aWx0aW5zXCIpO1xuZnVuY3Rpb24gc2V0dXBUaW1lbGluZShjdHgpIHtcbiAgICBzZXR1cEJ1aWx0aW5MYXllcnMoY3R4KTtcbn1cbmV4cG9ydHMuc2V0dXBUaW1lbGluZSA9IHNldHVwVGltZWxpbmU7XG5mdW5jdGlvbiBhZGRCdWlsdGluTGF5ZXJzKGFwcFJlY29yZCwgY3R4KSB7XG4gICAgZm9yIChjb25zdCBsYXllckRlZiBvZiB0aW1lbGluZV9idWlsdGluc18xLmJ1aWx0aW5MYXllcnMpIHtcbiAgICAgICAgY3R4LnRpbWVsaW5lTGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgLi4ubGF5ZXJEZWYsXG4gICAgICAgICAgICBhcHBSZWNvcmQsXG4gICAgICAgICAgICBwbHVnaW46IG51bGwsXG4gICAgICAgICAgICBldmVudHM6IFtdLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmFkZEJ1aWx0aW5MYXllcnMgPSBhZGRCdWlsdGluTGF5ZXJzO1xuZnVuY3Rpb24gc2V0dXBCdWlsdGluTGF5ZXJzKGN0eCkge1xuICAgIFsnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnY2xpY2snLCAnZGJsY2xpY2snXS5mb3JFYWNoKGV2ZW50VHlwZSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6ICdtb3VzZScsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZTogKDAsIGRldnRvb2xzX2FwaV8xLm5vdykoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudFR5cGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sIG51bGwsIGN0eCk7XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBbJ2tleXVwJywgJ2tleWRvd24nLCAna2V5cHJlc3MnXS5mb3JFYWNoKGV2ZW50VHlwZSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6ICdrZXlib2FyZCcsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZTogKDAsIGRldnRvb2xzX2FwaV8xLm5vdykoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHJsS2V5OiBldmVudC5jdHJsS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRLZXk6IGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0S2V5OiBldmVudC5hbHRLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhS2V5OiBldmVudC5tZXRhS2V5LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZXZlbnQua2V5LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCBudWxsLCBjdHgpO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX0VNSVQsIGFzeW5jIChhcHAsIGluc3RhbmNlLCBldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIXNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuY29tcG9uZW50RXZlbnRzRW5hYmxlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShhcHAsIGN0eCk7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke2FwcFJlY29yZC5pZH06JHtpbnN0YW5jZS51aWR9YDtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudERpc3BsYXkgPSAoYXdhaXQgYXBwUmVjb3JkLmJhY2tlbmQuYXBpLmdldENvbXBvbmVudE5hbWUoaW5zdGFuY2UpKSB8fCAnPGk+VW5rbm93biBDb21wb25lbnQ8L2k+JztcbiAgICAgICAgICAgIGF3YWl0IGFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6ICdjb21wb25lbnQtZXZlbnQnLFxuICAgICAgICAgICAgICAgIGV2ZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWU6ICgwLCBkZXZ0b29sc19hcGlfMS5ub3cpKCksXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBvbmVudC1kZWZpbml0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogY29tcG9uZW50RGlzcGxheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBgYnkgJHtjb21wb25lbnREaXNwbGF5fWAsXG4gICAgICAgICAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzOiBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50Qm91bmRzKGluc3RhbmNlKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSwgYXBwLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBzZW5kVGltZWxpbmVMYXllcnMoY3R4KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBsYXllcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGN0eC50aW1lbGluZUxheWVycykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBsYXllci5pZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogbGF5ZXIubGFiZWwsXG4gICAgICAgICAgICAgICAgY29sb3I6IGxheWVyLmNvbG9yLFxuICAgICAgICAgICAgICAgIGFwcElkOiAoX2EgPSBsYXllci5hcHBSZWNvcmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZCxcbiAgICAgICAgICAgICAgICBwbHVnaW5JZDogKF9iID0gbGF5ZXIucGx1Z2luKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVzY3JpcHRvci5pZCxcbiAgICAgICAgICAgICAgICBncm91cHNPbmx5OiBsYXllci5ncm91cHNPbmx5LFxuICAgICAgICAgICAgICAgIHNraXBTY3JlZW5zaG90czogbGF5ZXIuc2tpcFNjcmVlbnNob3RzLFxuICAgICAgICAgICAgICAgIGlnbm9yZU5vRHVyYXRpb25Hcm91cHM6IGxheWVyLmlnbm9yZU5vRHVyYXRpb25Hcm91cHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0xJU1QsIHtcbiAgICAgICAgbGF5ZXJzLFxuICAgIH0pO1xufVxuZXhwb3J0cy5zZW5kVGltZWxpbmVMYXllcnMgPSBzZW5kVGltZWxpbmVMYXllcnM7XG5hc3luYyBmdW5jdGlvbiBhZGRUaW1lbGluZUV2ZW50KG9wdGlvbnMsIGFwcCwgY3R4KSB7XG4gICAgY29uc3QgYXBwSWQgPSBhcHAgPyAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkSWQpKGFwcCkgOiBudWxsO1xuICAgIGNvbnN0IGlzQWxsQXBwcyA9IG9wdGlvbnMuYWxsIHx8ICFhcHAgfHwgYXBwSWQgPT0gbnVsbDtcbiAgICBjb25zdCBpZCA9IGN0eC5uZXh0VGltZWxpbmVFdmVudElkKys7XG4gICAgY29uc3QgZXZlbnREYXRhID0ge1xuICAgICAgICBpZCxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgYWxsOiBpc0FsbEFwcHMsXG4gICAgfTtcbiAgICBjdHgudGltZWxpbmVFdmVudE1hcC5zZXQoZXZlbnREYXRhLmlkLCBldmVudERhdGEpO1xuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfVElNRUxJTkVfRVZFTlQsIHtcbiAgICAgICAgYXBwSWQ6IGV2ZW50RGF0YS5hbGwgPyAnYWxsJyA6IGFwcElkLFxuICAgICAgICBsYXllcklkOiBldmVudERhdGEubGF5ZXJJZCxcbiAgICAgICAgZXZlbnQ6IG1hcFRpbWVsaW5lRXZlbnQoZXZlbnREYXRhKSxcbiAgICB9KTtcbiAgICBjb25zdCBsYXllciA9IGN0eC50aW1lbGluZUxheWVycy5maW5kKGwgPT4geyB2YXIgX2E7IHJldHVybiAoaXNBbGxBcHBzIHx8ICgoX2EgPSBsLmFwcFJlY29yZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnMuYXBwKSA9PT0gYXBwKSAmJiBsLmlkID09PSBvcHRpb25zLmxheWVySWQ7IH0pO1xuICAgIGlmIChsYXllcikge1xuICAgICAgICBsYXllci5ldmVudHMucHVzaChldmVudERhdGEpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICBjb25zb2xlLndhcm4oYFRpbWVsaW5lIGxheWVyICR7b3B0aW9ucy5sYXllcklkfSBub3QgZm91bmRgKTtcbiAgICB9XG59XG5leHBvcnRzLmFkZFRpbWVsaW5lRXZlbnQgPSBhZGRUaW1lbGluZUV2ZW50O1xuZnVuY3Rpb24gbWFwVGltZWxpbmVFdmVudChldmVudERhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogZXZlbnREYXRhLmlkLFxuICAgICAgICB0aW1lOiBNYXRoLnJvdW5kKGV2ZW50RGF0YS5ldmVudC50aW1lICogMTAwMCksXG4gICAgICAgIGxvZ1R5cGU6IGV2ZW50RGF0YS5ldmVudC5sb2dUeXBlLFxuICAgICAgICBncm91cElkOiBldmVudERhdGEuZXZlbnQuZ3JvdXBJZCxcbiAgICAgICAgdGl0bGU6IGV2ZW50RGF0YS5ldmVudC50aXRsZSxcbiAgICAgICAgc3VidGl0bGU6IGV2ZW50RGF0YS5ldmVudC5zdWJ0aXRsZSxcbiAgICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gY2xlYXJUaW1lbGluZShjdHgpIHtcbiAgICBjdHgudGltZWxpbmVFdmVudE1hcC5jbGVhcigpO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgY3R4LnRpbWVsaW5lTGF5ZXJzKSB7XG4gICAgICAgIGxheWVyLmV2ZW50cyA9IFtdO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGJhY2tlbmQgb2YgY3R4LmJhY2tlbmRzKSB7XG4gICAgICAgIGF3YWl0IGJhY2tlbmQuYXBpLmNsZWFyVGltZWxpbmUoKTtcbiAgICB9XG59XG5leHBvcnRzLmNsZWFyVGltZWxpbmUgPSBjbGVhclRpbWVsaW5lO1xuYXN5bmMgZnVuY3Rpb24gc2VuZFRpbWVsaW5lRXZlbnREYXRhKGlkLCBjdHgpIHtcbiAgICBsZXQgZGF0YSA9IG51bGw7XG4gICAgY29uc3QgZXZlbnREYXRhID0gY3R4LnRpbWVsaW5lRXZlbnRNYXAuZ2V0KGlkKTtcbiAgICBpZiAoZXZlbnREYXRhKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLmFwaS5pbnNwZWN0VGltZWxpbmVFdmVudChldmVudERhdGEsIGN0eC5jdXJyZW50QXBwUmVjb3JkLm9wdGlvbnMuYXBwKTtcbiAgICAgICAgZGF0YSA9ICgwLCBzaGFyZWRfdXRpbHNfMS5zdHJpbmdpZnkpKGRhdGEpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICBjb25zb2xlLndhcm4oYEV2ZW50ICR7aWR9IG5vdCBmb3VuZGAsIGN0eC50aW1lbGluZUV2ZW50TWFwLmtleXMoKSk7XG4gICAgfVxuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfVElNRUxJTkVfRVZFTlRfREFUQSwge1xuICAgICAgICBldmVudElkOiBpZCxcbiAgICAgICAgZGF0YSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2VuZFRpbWVsaW5lRXZlbnREYXRhID0gc2VuZFRpbWVsaW5lRXZlbnREYXRhO1xuZnVuY3Rpb24gcmVtb3ZlTGF5ZXJzRm9yQXBwKGFwcCwgY3R4KSB7XG4gICAgY29uc3QgbGF5ZXJzID0gY3R4LnRpbWVsaW5lTGF5ZXJzLmZpbHRlcihsID0+IHsgdmFyIF9hOyByZXR1cm4gKChfYSA9IGwuYXBwUmVjb3JkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucy5hcHApID09PSBhcHA7IH0pO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY3R4LnRpbWVsaW5lTGF5ZXJzLmluZGV4T2YobGF5ZXIpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICAgICAgY3R4LnRpbWVsaW5lTGF5ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBsYXllci5ldmVudHMpIHtcbiAgICAgICAgICAgIGN0eC50aW1lbGluZUV2ZW50TWFwLmRlbGV0ZShlLmlkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMucmVtb3ZlTGF5ZXJzRm9yQXBwID0gcmVtb3ZlTGF5ZXJzRm9yQXBwO1xuZnVuY3Rpb24gc2VuZFRpbWVsaW5lTGF5ZXJFdmVudHMoYXBwSWQsIGxheWVySWQsIGN0eCkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBhcHAgPSAoX2EgPSBjdHguYXBwUmVjb3Jkcy5maW5kKGFyID0+IGFyLmlkID09PSBhcHBJZCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpb25zLmFwcDtcbiAgICBpZiAoIWFwcClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGxheWVyID0gY3R4LnRpbWVsaW5lTGF5ZXJzLmZpbmQobCA9PiB7IHZhciBfYTsgcmV0dXJuICgoX2EgPSBsLmFwcFJlY29yZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnMuYXBwKSA9PT0gYXBwICYmIGwuaWQgPT09IGxheWVySWQ7IH0pO1xuICAgIGlmICghbGF5ZXIpXG4gICAgICAgIHJldHVybjtcbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0xPQURfRVZFTlRTLCB7XG4gICAgICAgIGFwcElkLFxuICAgICAgICBsYXllcklkLFxuICAgICAgICBldmVudHM6IGxheWVyLmV2ZW50cy5tYXAoZSA9PiBtYXBUaW1lbGluZUV2ZW50KGUpKSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2VuZFRpbWVsaW5lTGF5ZXJFdmVudHMgPSBzZW5kVGltZWxpbmVMYXllckV2ZW50cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVsaW5lLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///41515\n");
239
239
 
240
240
  /***/ }),
241
241
 
@@ -299,7 +299,15 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
299
299
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
300
300
 
301
301
  "use strict";
302
- eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.getComponentParents = exports.walkTree = exports.functionalVnodeMap = exports.instanceMap = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst el_1 = __webpack_require__(66351);\n\nconst perf_js_1 = __webpack_require__(82639);\n\nconst util_1 = __webpack_require__(95136);\n\nlet appRecord;\nlet api;\nconst consoleBoundInstances = Array(5);\nlet filter = '';\nconst functionalIds = new Map(); // Dedupe instances\n// Some instances may be both on a component and on a child abstract/functional component\n\nconst captureIds = new Map();\n\nasync function walkTree(instance, pFilter, api, ctx) {\n initCtx(api, ctx);\n filter = pFilter;\n functionalIds.clear();\n captureIds.clear();\n const result = flatten(await findQualifiedChildren(instance));\n return result;\n}\n\nexports.walkTree = walkTree;\n\nfunction getComponentParents(instance, api, ctx) {\n initCtx(api, ctx);\n const captureIds = new Map();\n\n const captureId = vm => {\n const id = (0, util_1.getUniqueId)(vm);\n if (captureIds.has(id)) return;\n captureIds.set(id, undefined);\n\n if (vm.__VUE_DEVTOOLS_FUNCTIONAL_LEGACY__) {\n markFunctional(id, vm.vnode);\n } else {\n mark(vm);\n }\n };\n\n const parents = [];\n captureId(instance);\n let parent = instance;\n\n while (parent = parent.$parent) {\n captureId(parent);\n parents.push(parent);\n }\n\n return parents;\n}\n\nexports.getComponentParents = getComponentParents;\n\nfunction initCtx(_api, ctx) {\n appRecord = ctx.currentAppRecord;\n api = _api;\n\n if (!appRecord.meta) {\n appRecord.meta = {};\n }\n\n if (!appRecord.meta.instanceMap) {\n appRecord.meta.instanceMap = new Map();\n }\n\n exports.instanceMap = appRecord.meta.instanceMap;\n\n if (!appRecord.meta.functionalVnodeMap) {\n appRecord.meta.functionalVnodeMap = new Map();\n }\n\n exports.functionalVnodeMap = appRecord.meta.functionalVnodeMap;\n}\n/**\n * Iterate through an array of instances and flatten it into\n * an array of qualified instances. This is a depth-first\n * traversal - e.g. if an instance is not matched, we will\n * recursively go deeper until a qualified child is found.\n */\n\n\nfunction findQualifiedChildrenFromList(instances) {\n instances = instances.filter(child => !(0, util_1.isBeingDestroyed)(child));\n return Promise.all(!filter ? instances.map(capture) : Array.prototype.concat.apply([], instances.map(findQualifiedChildren)));\n}\n/**\n * Find qualified children from a single instance.\n * If the instance itself is qualified, just return itself.\n * This is ok because [].concat works in both cases.\n */\n\n\nasync function findQualifiedChildren(instance) {\n if (isQualified(instance)) {\n return [await capture(instance)];\n } else {\n let children = await findQualifiedChildrenFromList(instance.$children); // Find functional components in recursively in non-functional vnodes.\n\n if (instance._vnode && instance._vnode.children) {\n const list = await Promise.all(flatten(instance._vnode.children.filter(child => !child.componentInstance).map(captureChild))); // Filter qualified children.\n\n const additionalChildren = list.filter(instance => isQualified(instance));\n children = children.concat(additionalChildren);\n }\n\n return children;\n }\n}\n/**\n * Get children from a component instance.\n */\n\n\nfunction getInternalInstanceChildren(instance) {\n if (instance.$children) {\n return instance.$children;\n }\n\n return [];\n}\n/**\n * Check if an instance is qualified.\n */\n\n\nfunction isQualified(instance) {\n const name = (0, util_1.getInstanceName)(instance);\n return (0, shared_utils_1.classify)(name).toLowerCase().indexOf(filter) > -1 || (0, shared_utils_1.kebabize)(name).toLowerCase().indexOf(filter) > -1;\n}\n\nfunction flatten(items) {\n const r = items.reduce((acc, item) => {\n if (Array.isArray(item)) {\n let children = [];\n\n for (const i of item) {\n if (Array.isArray(i)) {\n children = children.concat(flatten(i));\n } else {\n children.push(i);\n }\n }\n\n acc.push(...children);\n } else if (item) {\n acc.push(item);\n }\n\n return acc;\n }, []);\n return r;\n}\n\nfunction captureChild(child) {\n if (child.fnContext && !child.componentInstance) {\n return capture(child);\n } else if (child.componentInstance) {\n if (!(0, util_1.isBeingDestroyed)(child.componentInstance)) return capture(child.componentInstance);\n } else if (child.children) {\n return Promise.all(flatten(child.children.map(captureChild)));\n }\n}\n/**\n * Capture the meta information of an instance. (recursive)\n */\n\n\nasync function capture(instance, index, list) {\n var _a, _b, _c, _d, _e, _f;\n\n if (instance.__VUE_DEVTOOLS_FUNCTIONAL_LEGACY__) {\n instance = instance.vnode;\n }\n\n if (instance.$options && instance.$options.abstract && instance._vnode && instance._vnode.componentInstance) {\n instance = instance._vnode.componentInstance;\n }\n\n if ((_b = (_a = instance.$options) === null || _a === void 0 ? void 0 : _a.devtools) === null || _b === void 0 ? void 0 : _b.hide) return; // Functional component.\n\n if (instance.fnContext && !instance.componentInstance) {\n const contextUid = instance.fnContext.__VUE_DEVTOOLS_UID__;\n let id = functionalIds.get(contextUid);\n\n if (id == null) {\n id = 0;\n } else {\n id++;\n }\n\n functionalIds.set(contextUid, id);\n const functionalId = contextUid + ':functional:' + id;\n markFunctional(functionalId, instance);\n const childrenPromise = instance.children ? instance.children.map(child => child.fnContext ? captureChild(child) : child.componentInstance ? capture(child.componentInstance) : undefined) // router-view has both fnContext and componentInstance on vnode.\n : instance.componentInstance ? [capture(instance.componentInstance)] : []; // await all childrenCapture to-be resolved\n\n const children = (await Promise.all(childrenPromise)).filter(Boolean);\n const treeNode = {\n uid: functionalId,\n id: functionalId,\n tags: [{\n label: 'functional',\n textColor: 0x555555,\n backgroundColor: 0xeeeeee\n }],\n name: (0, util_1.getInstanceName)(instance),\n renderKey: (0, util_1.getRenderKey)(instance.key),\n children,\n hasChildren: !!children.length,\n inactive: false,\n isFragment: false // TODO: Check what is it for.\n\n };\n return api.visitComponentTree(instance, treeNode, filter, (_c = appRecord === null || appRecord === void 0 ? void 0 : appRecord.options) === null || _c === void 0 ? void 0 : _c.app);\n } // instance._uid is not reliable in devtools as there\n // may be 2 roots with same _uid which causes unexpected\n // behaviour\n\n\n instance.__VUE_DEVTOOLS_UID__ = (0, util_1.getUniqueId)(instance, appRecord); // Dedupe\n\n if (captureIds.has(instance.__VUE_DEVTOOLS_UID__)) {\n return;\n } else {\n captureIds.set(instance.__VUE_DEVTOOLS_UID__, undefined);\n }\n\n mark(instance);\n const name = (0, util_1.getInstanceName)(instance);\n const children = (await Promise.all((await getInternalInstanceChildren(instance)).filter(child => !(0, util_1.isBeingDestroyed)(child)).map(capture))).filter(Boolean);\n const ret = {\n uid: instance._uid,\n id: instance.__VUE_DEVTOOLS_UID__,\n name,\n renderKey: (0, util_1.getRenderKey)(instance.$vnode ? instance.$vnode.key : null),\n inactive: !!instance._inactive,\n isFragment: !!instance._isFragment,\n children,\n hasChildren: !!children.length,\n tags: [],\n meta: {}\n };\n\n if (instance._vnode && instance._vnode.children) {\n const vnodeChildren = await Promise.all(flatten(instance._vnode.children.map(captureChild)));\n ret.children = ret.children.concat(flatten(vnodeChildren).filter(Boolean));\n ret.hasChildren = !!ret.children.length;\n } // ensure correct ordering\n\n\n const rootElements = (0, el_1.getRootElementsFromComponentInstance)(instance);\n const firstElement = rootElements[0];\n\n if (firstElement === null || firstElement === void 0 ? void 0 : firstElement.parentElement) {\n const parentInstance = instance.$parent;\n const parentRootElements = parentInstance ? (0, el_1.getRootElementsFromComponentInstance)(parentInstance) : [];\n let el = firstElement;\n const indexList = [];\n\n do {\n indexList.push(Array.from(el.parentElement.childNodes).indexOf(el));\n el = el.parentElement;\n } while (el.parentElement && parentRootElements.length && !parentRootElements.includes(el));\n\n ret.domOrder = indexList.reverse();\n } else {\n ret.domOrder = [-1];\n } // check if instance is available in console\n\n\n const consoleId = consoleBoundInstances.indexOf(instance.__VUE_DEVTOOLS_UID__);\n ret.consoleId = consoleId > -1 ? '$vm' + consoleId : null; // check router view\n\n const isRouterView2 = (_e = (_d = instance.$vnode) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.routerView;\n\n if (instance._routerView || isRouterView2) {\n ret.isRouterView = true;\n\n if (!instance._inactive && instance.$route) {\n const matched = instance.$route.matched;\n const depth = isRouterView2 ? instance.$vnode.data.routerViewDepth : instance._routerView.depth;\n ret.meta.matchedRouteSegment = matched && matched[depth] && (isRouterView2 ? matched[depth].path : matched[depth].handler.path);\n }\n\n ret.tags.push({\n label: `router-view${ret.meta.matchedRouteSegment ? `: ${ret.meta.matchedRouteSegment}` : ''}`,\n textColor: 0x000000,\n backgroundColor: 0xff8344\n });\n }\n\n return api.visitComponentTree(instance, ret, filter, (_f = appRecord === null || appRecord === void 0 ? void 0 : appRecord.options) === null || _f === void 0 ? void 0 : _f.app);\n}\n/**\n * Mark an instance as captured and store it in the instance map.\n *\n * @param {Vue} instance\n */\n\n\nfunction mark(instance) {\n const refId = instance.__VUE_DEVTOOLS_UID__;\n\n if (!exports.instanceMap.has(refId)) {\n exports.instanceMap.set(refId, instance);\n appRecord.instanceMap.set(refId, instance);\n instance.$on('hook:beforeDestroy', function () {\n exports.instanceMap.delete(refId);\n });\n (0, perf_js_1.applyPerfHooks)(api, instance, appRecord.options.app);\n }\n}\n\nfunction markFunctional(id, vnode) {\n const refId = vnode.fnContext.__VUE_DEVTOOLS_UID__;\n\n if (!exports.functionalVnodeMap.has(refId)) {\n exports.functionalVnodeMap.set(refId, {});\n vnode.fnContext.$on('hook:beforeDestroy', function () {\n exports.functionalVnodeMap.delete(refId);\n });\n }\n\n exports.functionalVnodeMap.get(refId)[id] = vnode;\n appRecord.instanceMap.set(id, {\n __VUE_DEVTOOLS_UID__: id,\n __VUE_DEVTOOLS_FUNCTIONAL_LEGACY__: true,\n vnode\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUQsU0FBUyxjQUFULENBQXlCLEVBQXpCLEVBQTZCLEtBQTdCLEVBQWtDO0FBQ2hDLFFBQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFOLENBQWdCLG9CQUE5Qjs7QUFDQSxNQUFJLENBQUMsMkJBQW1CLEdBQW5CLENBQXVCLEtBQXZCLENBQUwsRUFBb0M7QUFDbEMsK0JBQW1CLEdBQW5CLENBQXVCLEtBQXZCLEVBQThCLEVBQTlCO0FBQ0EsU0FBSyxDQUFDLFNBQU4sQ0FBZ0IsR0FBaEIsQ0FBb0Isb0JBQXBCLEVBQTBDO0FBQ3hDLGlDQUFtQixNQUFuQixDQUEwQixLQUExQjtBQUNELEtBRkQ7QUFHRDs7QUFFRCw2QkFBbUIsR0FBbkIsQ0FBdUIsS0FBdkIsRUFBOEIsRUFBOUIsSUFBb0MsS0FBcEM7QUFFQSxXQUFTLENBQUMsV0FBVixDQUFzQixHQUF0QixDQUEwQixFQUExQixFQUE4QjtBQUM1Qix3QkFBb0IsRUFBRSxFQURNO0FBRTVCLHNDQUFrQyxFQUFFLElBRlI7QUFHNUI7QUFINEIsR0FBOUI7QUFLRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJlZS50cz80MDczIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDb21wb25lbnRQYXJlbnRzID0gZXhwb3J0cy53YWxrVHJlZSA9IGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwID0gZXhwb3J0cy5pbnN0YW5jZU1hcCA9IHZvaWQgMDtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuY29uc3QgZWxfMSA9IHJlcXVpcmUoXCIuL2VsXCIpO1xuY29uc3QgcGVyZl9qc18xID0gcmVxdWlyZShcIi4vcGVyZi5qc1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5sZXQgYXBwUmVjb3JkO1xubGV0IGFwaTtcbmNvbnN0IGNvbnNvbGVCb3VuZEluc3RhbmNlcyA9IEFycmF5KDUpO1xubGV0IGZpbHRlciA9ICcnO1xuY29uc3QgZnVuY3Rpb25hbElkcyA9IG5ldyBNYXAoKTtcbi8vIERlZHVwZSBpbnN0YW5jZXNcbi8vIFNvbWUgaW5zdGFuY2VzIG1heSBiZSBib3RoIG9uIGEgY29tcG9uZW50IGFuZCBvbiBhIGNoaWxkIGFic3RyYWN0L2Z1bmN0aW9uYWwgY29tcG9uZW50XG5jb25zdCBjYXB0dXJlSWRzID0gbmV3IE1hcCgpO1xuYXN5bmMgZnVuY3Rpb24gd2Fsa1RyZWUoaW5zdGFuY2UsIHBGaWx0ZXIsIGFwaSwgY3R4KSB7XG4gICAgaW5pdEN0eChhcGksIGN0eCk7XG4gICAgZmlsdGVyID0gcEZpbHRlcjtcbiAgICBmdW5jdGlvbmFsSWRzLmNsZWFyKCk7XG4gICAgY2FwdHVyZUlkcy5jbGVhcigpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW4oYXdhaXQgZmluZFF1YWxpZmllZENoaWxkcmVuKGluc3RhbmNlKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMud2Fsa1RyZWUgPSB3YWxrVHJlZTtcbmZ1bmN0aW9uIGdldENvbXBvbmVudFBhcmVudHMoaW5zdGFuY2UsIGFwaSwgY3R4KSB7XG4gICAgaW5pdEN0eChhcGksIGN0eCk7XG4gICAgY29uc3QgY2FwdHVyZUlkcyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBjYXB0dXJlSWQgPSB2bSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gKDAsIHV0aWxfMS5nZXRVbmlxdWVJZCkodm0pO1xuICAgICAgICBpZiAoY2FwdHVyZUlkcy5oYXMoaWQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXB0dXJlSWRzLnNldChpZCwgdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKHZtLl9fVlVFX0RFVlRPT0xTX0ZVTkNUSU9OQUxfTEVHQUNZX18pIHtcbiAgICAgICAgICAgIG1hcmtGdW5jdGlvbmFsKGlkLCB2bS52bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtYXJrKHZtKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgIGNhcHR1cmVJZChpbnN0YW5jZSk7XG4gICAgbGV0IHBhcmVudCA9IGluc3RhbmNlO1xuICAgIHdoaWxlICgocGFyZW50ID0gcGFyZW50LiRwYXJlbnQpKSB7XG4gICAgICAgIGNhcHR1cmVJZChwYXJlbnQpO1xuICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG59XG5leHBvcnRzLmdldENvbXBvbmVudFBhcmVudHMgPSBnZXRDb21wb25lbnRQYXJlbnRzO1xuZnVuY3Rpb24gaW5pdEN0eChfYXBpLCBjdHgpIHtcbiAgICBhcHBSZWNvcmQgPSBjdHguY3VycmVudEFwcFJlY29yZDtcbiAgICBhcGkgPSBfYXBpO1xuICAgIGlmICghYXBwUmVjb3JkLm1ldGEpIHtcbiAgICAgICAgYXBwUmVjb3JkLm1ldGEgPSB7fTtcbiAgICB9XG4gICAgaWYgKCFhcHBSZWNvcmQubWV0YS5pbnN0YW5jZU1hcCkge1xuICAgICAgICBhcHBSZWNvcmQubWV0YS5pbnN0YW5jZU1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgZXhwb3J0cy5pbnN0YW5jZU1hcCA9IGFwcFJlY29yZC5tZXRhLmluc3RhbmNlTWFwO1xuICAgIGlmICghYXBwUmVjb3JkLm1ldGEuZnVuY3Rpb25hbFZub2RlTWFwKSB7XG4gICAgICAgIGFwcFJlY29yZC5tZXRhLmZ1bmN0aW9uYWxWbm9kZU1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAgPSBhcHBSZWNvcmQubWV0YS5mdW5jdGlvbmFsVm5vZGVNYXA7XG59XG4vKipcbiAqIEl0ZXJhdGUgdGhyb3VnaCBhbiBhcnJheSBvZiBpbnN0YW5jZXMgYW5kIGZsYXR0ZW4gaXQgaW50b1xuICogYW4gYXJyYXkgb2YgcXVhbGlmaWVkIGluc3RhbmNlcy4gVGhpcyBpcyBhIGRlcHRoLWZpcnN0XG4gKiB0cmF2ZXJzYWwgLSBlLmcuIGlmIGFuIGluc3RhbmNlIGlzIG5vdCBtYXRjaGVkLCB3ZSB3aWxsXG4gKiByZWN1cnNpdmVseSBnbyBkZWVwZXIgdW50aWwgYSBxdWFsaWZpZWQgY2hpbGQgaXMgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRRdWFsaWZpZWRDaGlsZHJlbkZyb21MaXN0KGluc3RhbmNlcykge1xuICAgIGluc3RhbmNlcyA9IGluc3RhbmNlc1xuICAgICAgICAuZmlsdGVyKGNoaWxkID0+ICEoMCwgdXRpbF8xLmlzQmVpbmdEZXN0cm95ZWQpKGNoaWxkKSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKCFmaWx0ZXJcbiAgICAgICAgPyBpbnN0YW5jZXMubWFwKGNhcHR1cmUpXG4gICAgICAgIDogQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgaW5zdGFuY2VzLm1hcChmaW5kUXVhbGlmaWVkQ2hpbGRyZW4pKSk7XG59XG4vKipcbiAqIEZpbmQgcXVhbGlmaWVkIGNoaWxkcmVuIGZyb20gYSBzaW5nbGUgaW5zdGFuY2UuXG4gKiBJZiB0aGUgaW5zdGFuY2UgaXRzZWxmIGlzIHF1YWxpZmllZCwganVzdCByZXR1cm4gaXRzZWxmLlxuICogVGhpcyBpcyBvayBiZWNhdXNlIFtdLmNvbmNhdCB3b3JrcyBpbiBib3RoIGNhc2VzLlxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kUXVhbGlmaWVkQ2hpbGRyZW4oaW5zdGFuY2UpIHtcbiAgICBpZiAoaXNRdWFsaWZpZWQoaW5zdGFuY2UpKSB7XG4gICAgICAgIHJldHVybiBbYXdhaXQgY2FwdHVyZShpbnN0YW5jZSldO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gYXdhaXQgZmluZFF1YWxpZmllZENoaWxkcmVuRnJvbUxpc3QoaW5zdGFuY2UuJGNoaWxkcmVuKTtcbiAgICAgICAgLy8gRmluZCBmdW5jdGlvbmFsIGNvbXBvbmVudHMgaW4gcmVjdXJzaXZlbHkgaW4gbm9uLWZ1bmN0aW9uYWwgdm5vZGVzLlxuICAgICAgICBpZiAoaW5zdGFuY2UuX3Zub2RlICYmIGluc3RhbmNlLl92bm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IFByb21pc2UuYWxsKGZsYXR0ZW4oaW5zdGFuY2UuX3Zub2RlLmNoaWxkcmVuLmZpbHRlcihjaGlsZCA9PiAhY2hpbGQuY29tcG9uZW50SW5zdGFuY2UpLm1hcChjYXB0dXJlQ2hpbGQpKSk7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgcXVhbGlmaWVkIGNoaWxkcmVuLlxuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbENoaWxkcmVuID0gbGlzdC5maWx0ZXIoaW5zdGFuY2UgPT4gaXNRdWFsaWZpZWQoaW5zdGFuY2UpKTtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uY29uY2F0KGFkZGl0aW9uYWxDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH1cbn1cbi8qKlxuICogR2V0IGNoaWxkcmVuIGZyb20gYSBjb21wb25lbnQgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGdldEludGVybmFsSW5zdGFuY2VDaGlsZHJlbihpbnN0YW5jZSkge1xuICAgIGlmIChpbnN0YW5jZS4kY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLiRjaGlsZHJlbjtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xufVxuLyoqXG4gKiBDaGVjayBpZiBhbiBpbnN0YW5jZSBpcyBxdWFsaWZpZWQuXG4gKi9cbmZ1bmN0aW9uIGlzUXVhbGlmaWVkKGluc3RhbmNlKSB7XG4gICAgY29uc3QgbmFtZSA9ICgwLCB1dGlsXzEuZ2V0SW5zdGFuY2VOYW1lKShpbnN0YW5jZSk7XG4gICAgcmV0dXJuICgwLCBzaGFyZWRfdXRpbHNfMS5jbGFzc2lmeSkobmFtZSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlcikgPiAtMSB8fFxuICAgICAgICAoMCwgc2hhcmVkX3V0aWxzXzEua2ViYWJpemUpKG5hbWUpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXIpID4gLTE7XG59XG5mdW5jdGlvbiBmbGF0dGVuKGl0ZW1zKSB7XG4gICAgY29uc3QgciA9IGl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQoZmxhdHRlbihpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjYy5wdXNoKC4uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBhY2MucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIGNhcHR1cmVDaGlsZChjaGlsZCkge1xuICAgIGlmIChjaGlsZC5mbkNvbnRleHQgJiYgIWNoaWxkLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBjYXB0dXJlKGNoaWxkKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hpbGQuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKCEoMCwgdXRpbF8xLmlzQmVpbmdEZXN0cm95ZWQpKGNoaWxkLmNvbXBvbmVudEluc3RhbmNlKSlcbiAgICAgICAgICAgIHJldHVybiBjYXB0dXJlKGNoaWxkLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZsYXR0ZW4oY2hpbGQuY2hpbGRyZW4ubWFwKGNhcHR1cmVDaGlsZCkpKTtcbiAgICB9XG59XG4vKipcbiAqIENhcHR1cmUgdGhlIG1ldGEgaW5mb3JtYXRpb24gb2YgYW4gaW5zdGFuY2UuIChyZWN1cnNpdmUpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhcHR1cmUoaW5zdGFuY2UsIGluZGV4LCBsaXN0KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgaWYgKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX0ZVTkNUSU9OQUxfTEVHQUNZX18pIHtcbiAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS52bm9kZTtcbiAgICB9XG4gICAgaWYgKGluc3RhbmNlLiRvcHRpb25zICYmIGluc3RhbmNlLiRvcHRpb25zLmFic3RyYWN0ICYmIGluc3RhbmNlLl92bm9kZSAmJiBpbnN0YW5jZS5fdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5fdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgfVxuICAgIGlmICgoX2IgPSAoX2EgPSBpbnN0YW5jZS4kb3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRldnRvb2xzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaGlkZSlcbiAgICAgICAgcmV0dXJuO1xuICAgIC8vIEZ1bmN0aW9uYWwgY29tcG9uZW50LlxuICAgIGlmIChpbnN0YW5jZS5mbkNvbnRleHQgJiYgIWluc3RhbmNlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRVaWQgPSBpbnN0YW5jZS5mbkNvbnRleHQuX19WVUVfREVWVE9PTFNfVUlEX187XG4gICAgICAgIGxldCBpZCA9IGZ1bmN0aW9uYWxJZHMuZ2V0KGNvbnRleHRVaWQpO1xuICAgICAgICBpZiAoaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgaWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWQrKztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbmFsSWRzLnNldChjb250ZXh0VWlkLCBpZCk7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxJZCA9IGNvbnRleHRVaWQgKyAnOmZ1bmN0aW9uYWw6JyArIGlkO1xuICAgICAgICBtYXJrRnVuY3Rpb25hbChmdW5jdGlvbmFsSWQsIGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5Qcm9taXNlID0gKGluc3RhbmNlLmNoaWxkcmVuXG4gICAgICAgICAgICA/IGluc3RhbmNlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZC5mbkNvbnRleHRcbiAgICAgICAgICAgICAgICA/IGNhcHR1cmVDaGlsZChjaGlsZClcbiAgICAgICAgICAgICAgICA6IGNoaWxkLmNvbXBvbmVudEluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgID8gY2FwdHVyZShjaGlsZC5jb21wb25lbnRJbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpXG4gICAgICAgICAgICAvLyByb3V0ZXItdmlldyBoYXMgYm90aCBmbkNvbnRleHQgYW5kIGNvbXBvbmVudEluc3RhbmNlIG9uIHZub2RlLlxuICAgICAgICAgICAgOiBpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSA/IFtjYXB0dXJlKGluc3RhbmNlLmNvbXBvbmVudEluc3RhbmNlKV0gOiBbXSk7XG4gICAgICAgIC8vIGF3YWl0IGFsbCBjaGlsZHJlbkNhcHR1cmUgdG8tYmUgcmVzb2x2ZWRcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSAoYXdhaXQgUHJvbWlzZS5hbGwoY2hpbGRyZW5Qcm9taXNlKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICBjb25zdCB0cmVlTm9kZSA9IHtcbiAgICAgICAgICAgIHVpZDogZnVuY3Rpb25hbElkLFxuICAgICAgICAgICAgaWQ6IGZ1bmN0aW9uYWxJZCxcbiAgICAgICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnZnVuY3Rpb25hbCcsXG4gICAgICAgICAgICAgICAgICAgIHRleHRDb2xvcjogMHg1NTU1NTUsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogMHhlZWVlZWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBuYW1lOiAoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkoaW5zdGFuY2UpLFxuICAgICAgICAgICAgcmVuZGVyS2V5OiAoMCwgdXRpbF8xLmdldFJlbmRlcktleSkoaW5zdGFuY2Uua2V5KSxcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgaGFzQ2hpbGRyZW46ICEhY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICAgICAgaW5hY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgaXNGcmFnbWVudDogZmFsc2UsIC8vIFRPRE86IENoZWNrIHdoYXQgaXMgaXQgZm9yLlxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYXBpLnZpc2l0Q29tcG9uZW50VHJlZShpbnN0YW5jZSwgdHJlZU5vZGUsIGZpbHRlciwgKF9jID0gYXBwUmVjb3JkID09PSBudWxsIHx8IGFwcFJlY29yZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXBwUmVjb3JkLm9wdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5hcHApO1xuICAgIH1cbiAgICAvLyBpbnN0YW5jZS5fdWlkIGlzIG5vdCByZWxpYWJsZSBpbiBkZXZ0b29scyBhcyB0aGVyZVxuICAgIC8vIG1heSBiZSAyIHJvb3RzIHdpdGggc2FtZSBfdWlkIHdoaWNoIGNhdXNlcyB1bmV4cGVjdGVkXG4gICAgLy8gYmVoYXZpb3VyXG4gICAgaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18gPSAoMCwgdXRpbF8xLmdldFVuaXF1ZUlkKShpbnN0YW5jZSwgYXBwUmVjb3JkKTtcbiAgICAvLyBEZWR1cGVcbiAgICBpZiAoY2FwdHVyZUlkcy5oYXMoaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNhcHR1cmVJZHMuc2V0KGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBtYXJrKGluc3RhbmNlKTtcbiAgICBjb25zdCBuYW1lID0gKDAsIHV0aWxfMS5nZXRJbnN0YW5jZU5hbWUpKGluc3RhbmNlKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IChhd2FpdCBQcm9taXNlLmFsbCgoYXdhaXQgZ2V0SW50ZXJuYWxJbnN0YW5jZUNoaWxkcmVuKGluc3RhbmNlKSlcbiAgICAgICAgLmZpbHRlcihjaGlsZCA9PiAhKDAsIHV0aWxfMS5pc0JlaW5nRGVzdHJveWVkKShjaGlsZCkpXG4gICAgICAgIC5tYXAoY2FwdHVyZSkpKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgY29uc3QgcmV0ID0ge1xuICAgICAgICB1aWQ6IGluc3RhbmNlLl91aWQsXG4gICAgICAgIGlkOiBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXyxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcmVuZGVyS2V5OiAoMCwgdXRpbF8xLmdldFJlbmRlcktleSkoaW5zdGFuY2UuJHZub2RlID8gaW5zdGFuY2UuJHZub2RlLmtleSA6IG51bGwpLFxuICAgICAgICBpbmFjdGl2ZTogISFpbnN0YW5jZS5faW5hY3RpdmUsXG4gICAgICAgIGlzRnJhZ21lbnQ6ICEhaW5zdGFuY2UuX2lzRnJhZ21lbnQsXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBoYXNDaGlsZHJlbjogISFjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIHRhZ3M6IFtdLFxuICAgICAgICBtZXRhOiB7fSxcbiAgICB9O1xuICAgIGlmIChpbnN0YW5jZS5fdm5vZGUgJiYgaW5zdGFuY2UuX3Zub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IHZub2RlQ2hpbGRyZW4gPSBhd2FpdCBQcm9taXNlLmFsbChmbGF0dGVuKGluc3RhbmNlLl92bm9kZS5jaGlsZHJlbi5tYXAoY2FwdHVyZUNoaWxkKSkpO1xuICAgICAgICByZXQuY2hpbGRyZW4gPSByZXQuY2hpbGRyZW4uY29uY2F0KGZsYXR0ZW4odm5vZGVDaGlsZHJlbikuZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgICAgcmV0Lmhhc0NoaWxkcmVuID0gISFyZXQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIH1cbiAgICAvLyBlbnN1cmUgY29ycmVjdCBvcmRlcmluZ1xuICAgIGNvbnN0IHJvb3RFbGVtZW50cyA9ICgwLCBlbF8xLmdldFJvb3RFbGVtZW50c0Zyb21Db21wb25lbnRJbnN0YW5jZSkoaW5zdGFuY2UpO1xuICAgIGNvbnN0IGZpcnN0RWxlbWVudCA9IHJvb3RFbGVtZW50c1swXTtcbiAgICBpZiAoZmlyc3RFbGVtZW50ID09PSBudWxsIHx8IGZpcnN0RWxlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmlyc3RFbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2UgPSBpbnN0YW5jZS4kcGFyZW50O1xuICAgICAgICBjb25zdCBwYXJlbnRSb290RWxlbWVudHMgPSBwYXJlbnRJbnN0YW5jZSA/ICgwLCBlbF8xLmdldFJvb3RFbGVtZW50c0Zyb21Db21wb25lbnRJbnN0YW5jZSkocGFyZW50SW5zdGFuY2UpIDogW107XG4gICAgICAgIGxldCBlbCA9IGZpcnN0RWxlbWVudDtcbiAgICAgICAgY29uc3QgaW5kZXhMaXN0ID0gW107XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGluZGV4TGlzdC5wdXNoKEFycmF5LmZyb20oZWwucGFyZW50RWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKGVsKSk7XG4gICAgICAgICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH0gd2hpbGUgKGVsLnBhcmVudEVsZW1lbnQgJiYgcGFyZW50Um9vdEVsZW1lbnRzLmxlbmd0aCAmJiAhcGFyZW50Um9vdEVsZW1lbnRzLmluY2x1ZGVzKGVsKSk7XG4gICAgICAgIHJldC5kb21PcmRlciA9IGluZGV4TGlzdC5yZXZlcnNlKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXQuZG9tT3JkZXIgPSBbLTFdO1xuICAgIH1cbiAgICAvLyBjaGVjayBpZiBpbnN0YW5jZSBpcyBhdmFpbGFibGUgaW4gY29uc29sZVxuICAgIGNvbnN0IGNvbnNvbGVJZCA9IGNvbnNvbGVCb3VuZEluc3RhbmNlcy5pbmRleE9mKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fKTtcbiAgICByZXQuY29uc29sZUlkID0gY29uc29sZUlkID4gLTEgPyAnJHZtJyArIGNvbnNvbGVJZCA6IG51bGw7XG4gICAgLy8gY2hlY2sgcm91dGVyIHZpZXdcbiAgICBjb25zdCBpc1JvdXRlclZpZXcyID0gKF9lID0gKF9kID0gaW5zdGFuY2UuJHZub2RlKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZGF0YSkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLnJvdXRlclZpZXc7XG4gICAgaWYgKGluc3RhbmNlLl9yb3V0ZXJWaWV3IHx8IGlzUm91dGVyVmlldzIpIHtcbiAgICAgICAgcmV0LmlzUm91dGVyVmlldyA9IHRydWU7XG4gICAgICAgIGlmICghaW5zdGFuY2UuX2luYWN0aXZlICYmIGluc3RhbmNlLiRyb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGluc3RhbmNlLiRyb3V0ZS5tYXRjaGVkO1xuICAgICAgICAgICAgY29uc3QgZGVwdGggPSBpc1JvdXRlclZpZXcyXG4gICAgICAgICAgICAgICAgPyBpbnN0YW5jZS4kdm5vZGUuZGF0YS5yb3V0ZXJWaWV3RGVwdGhcbiAgICAgICAgICAgICAgICA6IGluc3RhbmNlLl9yb3V0ZXJWaWV3LmRlcHRoO1xuICAgICAgICAgICAgcmV0Lm1ldGEubWF0Y2hlZFJvdXRlU2VnbWVudCA9XG4gICAgICAgICAgICAgICAgbWF0Y2hlZCAmJlxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkW2RlcHRoXSAmJlxuICAgICAgICAgICAgICAgICAgICAoaXNSb3V0ZXJWaWV3MiA/IG1hdGNoZWRbZGVwdGhdLnBhdGggOiBtYXRjaGVkW2RlcHRoXS5oYW5kbGVyLnBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldC50YWdzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IGByb3V0ZXItdmlldyR7cmV0Lm1ldGEubWF0Y2hlZFJvdXRlU2VnbWVudCA/IGA6ICR7cmV0Lm1ldGEubWF0Y2hlZFJvdXRlU2VnbWVudH1gIDogJyd9YCxcbiAgICAgICAgICAgIHRleHRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4ZmY4MzQ0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFwaS52aXNpdENvbXBvbmVudFRyZWUoaW5zdGFuY2UsIHJldCwgZmlsdGVyLCAoX2YgPSBhcHBSZWNvcmQgPT09IG51bGwgfHwgYXBwUmVjb3JkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhcHBSZWNvcmQub3B0aW9ucykgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmFwcCk7XG59XG4vKipcbiAqIE1hcmsgYW4gaW5zdGFuY2UgYXMgY2FwdHVyZWQgYW5kIHN0b3JlIGl0IGluIHRoZSBpbnN0YW5jZSBtYXAuXG4gKlxuICogQHBhcmFtIHtWdWV9IGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIG1hcmsoaW5zdGFuY2UpIHtcbiAgICBjb25zdCByZWZJZCA9IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fO1xuICAgIGlmICghZXhwb3J0cy5pbnN0YW5jZU1hcC5oYXMocmVmSWQpKSB7XG4gICAgICAgIGV4cG9ydHMuaW5zdGFuY2VNYXAuc2V0KHJlZklkLCBpbnN0YW5jZSk7XG4gICAgICAgIGFwcFJlY29yZC5pbnN0YW5jZU1hcC5zZXQocmVmSWQsIGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2UuJG9uKCdob29rOmJlZm9yZURlc3Ryb3knLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBvcnRzLmluc3RhbmNlTWFwLmRlbGV0ZShyZWZJZCk7XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgcGVyZl9qc18xLmFwcGx5UGVyZkhvb2tzKShhcGksIGluc3RhbmNlLCBhcHBSZWNvcmQub3B0aW9ucy5hcHApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbmFsKGlkLCB2bm9kZSkge1xuICAgIGNvbnN0IHJlZklkID0gdm5vZGUuZm5Db250ZXh0Ll9fVlVFX0RFVlRPT0xTX1VJRF9fO1xuICAgIGlmICghZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAuaGFzKHJlZklkKSkge1xuICAgICAgICBleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcC5zZXQocmVmSWQsIHt9KTtcbiAgICAgICAgdm5vZGUuZm5Db250ZXh0LiRvbignaG9vazpiZWZvcmVEZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAuZGVsZXRlKHJlZklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwLmdldChyZWZJZClbaWRdID0gdm5vZGU7XG4gICAgYXBwUmVjb3JkLmluc3RhbmNlTWFwLnNldChpZCwge1xuICAgICAgICBfX1ZVRV9ERVZUT09MU19VSURfXzogaWQsXG4gICAgICAgIF9fVlVFX0RFVlRPT0xTX0ZVTkNUSU9OQUxfTEVHQUNZX186IHRydWUsXG4gICAgICAgIHZub2RlLFxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJlZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18059\n");
302
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.getComponentParents = exports.walkTree = exports.functionalVnodeMap = exports.instanceMap = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst el_1 = __webpack_require__(66351);\n\nconst perf_js_1 = __webpack_require__(82639);\n\nconst update_tracking_js_1 = __webpack_require__(44615);\n\nconst util_1 = __webpack_require__(95136);\n\nlet appRecord;\nlet api;\nconst consoleBoundInstances = Array(5);\nlet filter = '';\nconst functionalIds = new Map(); // Dedupe instances\n// Some instances may be both on a component and on a child abstract/functional component\n\nconst captureIds = new Map();\n\nasync function walkTree(instance, pFilter, api, ctx) {\n initCtx(api, ctx);\n filter = pFilter;\n functionalIds.clear();\n captureIds.clear();\n const result = flatten(await findQualifiedChildren(instance));\n return result;\n}\n\nexports.walkTree = walkTree;\n\nfunction getComponentParents(instance, api, ctx) {\n initCtx(api, ctx);\n const captureIds = new Map();\n\n const captureId = vm => {\n const id = vm.__VUE_DEVTOOLS_UID__ = (0, util_1.getUniqueId)(vm);\n if (captureIds.has(id)) return;\n captureIds.set(id, undefined);\n\n if (vm.__VUE_DEVTOOLS_FUNCTIONAL_LEGACY__) {\n markFunctional(id, vm.vnode);\n } else {\n mark(vm);\n }\n };\n\n const parents = [];\n captureId(instance);\n let parent = instance;\n\n while (parent = parent.$parent) {\n captureId(parent);\n parents.push(parent);\n }\n\n return parents;\n}\n\nexports.getComponentParents = getComponentParents;\n\nfunction initCtx(_api, ctx) {\n appRecord = ctx.currentAppRecord;\n api = _api;\n\n if (!appRecord.meta) {\n appRecord.meta = {};\n }\n\n if (!appRecord.meta.instanceMap) {\n appRecord.meta.instanceMap = new Map();\n }\n\n exports.instanceMap = appRecord.meta.instanceMap;\n\n if (!appRecord.meta.functionalVnodeMap) {\n appRecord.meta.functionalVnodeMap = new Map();\n }\n\n exports.functionalVnodeMap = appRecord.meta.functionalVnodeMap;\n}\n/**\n * Iterate through an array of instances and flatten it into\n * an array of qualified instances. This is a depth-first\n * traversal - e.g. if an instance is not matched, we will\n * recursively go deeper until a qualified child is found.\n */\n\n\nfunction findQualifiedChildrenFromList(instances) {\n instances = instances.filter(child => !(0, util_1.isBeingDestroyed)(child));\n return Promise.all(!filter ? instances.map(capture) : Array.prototype.concat.apply([], instances.map(findQualifiedChildren)));\n}\n/**\n * Find qualified children from a single instance.\n * If the instance itself is qualified, just return itself.\n * This is ok because [].concat works in both cases.\n */\n\n\nasync function findQualifiedChildren(instance) {\n if (isQualified(instance)) {\n return [await capture(instance)];\n } else {\n let children = await findQualifiedChildrenFromList(instance.$children); // Find functional components in recursively in non-functional vnodes.\n\n if (instance._vnode && instance._vnode.children) {\n const list = await Promise.all(flatten(instance._vnode.children.filter(child => !child.componentInstance).map(captureChild))); // Filter qualified children.\n\n const additionalChildren = list.filter(instance => isQualified(instance));\n children = children.concat(additionalChildren);\n }\n\n return children;\n }\n}\n/**\n * Get children from a component instance.\n */\n\n\nfunction getInternalInstanceChildren(instance) {\n if (instance.$children) {\n return instance.$children;\n }\n\n return [];\n}\n/**\n * Check if an instance is qualified.\n */\n\n\nfunction isQualified(instance) {\n const name = (0, util_1.getInstanceName)(instance);\n return (0, shared_utils_1.classify)(name).toLowerCase().indexOf(filter) > -1 || (0, shared_utils_1.kebabize)(name).toLowerCase().indexOf(filter) > -1;\n}\n\nfunction flatten(items) {\n const r = items.reduce((acc, item) => {\n if (Array.isArray(item)) {\n let children = [];\n\n for (const i of item) {\n if (Array.isArray(i)) {\n children = children.concat(flatten(i));\n } else {\n children.push(i);\n }\n }\n\n acc.push(...children);\n } else if (item) {\n acc.push(item);\n }\n\n return acc;\n }, []);\n return r;\n}\n\nfunction captureChild(child) {\n if (child.fnContext && !child.componentInstance) {\n return capture(child);\n } else if (child.componentInstance) {\n if (!(0, util_1.isBeingDestroyed)(child.componentInstance)) return capture(child.componentInstance);\n } else if (child.children) {\n return Promise.all(flatten(child.children.map(captureChild)));\n }\n}\n/**\n * Capture the meta information of an instance. (recursive)\n */\n\n\nasync function capture(instance, index, list) {\n var _a, _b, _c, _d, _e, _f;\n\n if (instance.__VUE_DEVTOOLS_FUNCTIONAL_LEGACY__) {\n instance = instance.vnode;\n }\n\n if (instance.$options && instance.$options.abstract && instance._vnode && instance._vnode.componentInstance) {\n instance = instance._vnode.componentInstance;\n }\n\n if ((_b = (_a = instance.$options) === null || _a === void 0 ? void 0 : _a.devtools) === null || _b === void 0 ? void 0 : _b.hide) return; // Functional component.\n\n if (instance.fnContext && !instance.componentInstance) {\n const contextUid = instance.fnContext.__VUE_DEVTOOLS_UID__;\n let id = functionalIds.get(contextUid);\n\n if (id == null) {\n id = 0;\n } else {\n id++;\n }\n\n functionalIds.set(contextUid, id);\n const functionalId = contextUid + ':functional:' + id;\n markFunctional(functionalId, instance);\n const childrenPromise = instance.children ? instance.children.map(child => child.fnContext ? captureChild(child) : child.componentInstance ? capture(child.componentInstance) : undefined) // router-view has both fnContext and componentInstance on vnode.\n : instance.componentInstance ? [capture(instance.componentInstance)] : []; // await all childrenCapture to-be resolved\n\n const children = (await Promise.all(childrenPromise)).filter(Boolean);\n const treeNode = {\n uid: functionalId,\n id: functionalId,\n tags: [{\n label: 'functional',\n textColor: 0x555555,\n backgroundColor: 0xeeeeee\n }],\n name: (0, util_1.getInstanceName)(instance),\n renderKey: (0, util_1.getRenderKey)(instance.key),\n children,\n hasChildren: !!children.length,\n inactive: false,\n isFragment: false // TODO: Check what is it for.\n\n };\n return api.visitComponentTree(instance, treeNode, filter, (_c = appRecord === null || appRecord === void 0 ? void 0 : appRecord.options) === null || _c === void 0 ? void 0 : _c.app);\n } // instance._uid is not reliable in devtools as there\n // may be 2 roots with same _uid which causes unexpected\n // behaviour\n\n\n instance.__VUE_DEVTOOLS_UID__ = (0, util_1.getUniqueId)(instance, appRecord); // Dedupe\n\n if (captureIds.has(instance.__VUE_DEVTOOLS_UID__)) {\n return;\n } else {\n captureIds.set(instance.__VUE_DEVTOOLS_UID__, undefined);\n }\n\n mark(instance);\n const name = (0, util_1.getInstanceName)(instance);\n const children = (await Promise.all((await getInternalInstanceChildren(instance)).filter(child => !(0, util_1.isBeingDestroyed)(child)).map(capture))).filter(Boolean);\n const ret = {\n uid: instance._uid,\n id: instance.__VUE_DEVTOOLS_UID__,\n name,\n renderKey: (0, util_1.getRenderKey)(instance.$vnode ? instance.$vnode.key : null),\n inactive: !!instance._inactive,\n isFragment: !!instance._isFragment,\n children,\n hasChildren: !!children.length,\n tags: [],\n meta: {}\n };\n\n if (instance._vnode && instance._vnode.children) {\n const vnodeChildren = await Promise.all(flatten(instance._vnode.children.map(captureChild)));\n ret.children = ret.children.concat(flatten(vnodeChildren).filter(Boolean));\n ret.hasChildren = !!ret.children.length;\n } // ensure correct ordering\n\n\n const rootElements = (0, el_1.getRootElementsFromComponentInstance)(instance);\n const firstElement = rootElements[0];\n\n if (firstElement === null || firstElement === void 0 ? void 0 : firstElement.parentElement) {\n const parentInstance = instance.$parent;\n const parentRootElements = parentInstance ? (0, el_1.getRootElementsFromComponentInstance)(parentInstance) : [];\n let el = firstElement;\n const indexList = [];\n\n do {\n indexList.push(Array.from(el.parentElement.childNodes).indexOf(el));\n el = el.parentElement;\n } while (el.parentElement && parentRootElements.length && !parentRootElements.includes(el));\n\n ret.domOrder = indexList.reverse();\n } else {\n ret.domOrder = [-1];\n } // check if instance is available in console\n\n\n const consoleId = consoleBoundInstances.indexOf(instance.__VUE_DEVTOOLS_UID__);\n ret.consoleId = consoleId > -1 ? '$vm' + consoleId : null; // check router view\n\n const isRouterView2 = (_e = (_d = instance.$vnode) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.routerView;\n\n if (instance._routerView || isRouterView2) {\n ret.isRouterView = true;\n\n if (!instance._inactive && instance.$route) {\n const matched = instance.$route.matched;\n const depth = isRouterView2 ? instance.$vnode.data.routerViewDepth : instance._routerView.depth;\n ret.meta.matchedRouteSegment = matched && matched[depth] && (isRouterView2 ? matched[depth].path : matched[depth].handler.path);\n }\n\n ret.tags.push({\n label: `router-view${ret.meta.matchedRouteSegment ? `: ${ret.meta.matchedRouteSegment}` : ''}`,\n textColor: 0x000000,\n backgroundColor: 0xff8344\n });\n }\n\n return api.visitComponentTree(instance, ret, filter, (_f = appRecord === null || appRecord === void 0 ? void 0 : appRecord.options) === null || _f === void 0 ? void 0 : _f.app);\n}\n/**\n * Mark an instance as captured and store it in the instance map.\n *\n * @param {Vue} instance\n */\n\n\nfunction mark(instance) {\n const refId = instance.__VUE_DEVTOOLS_UID__;\n\n if (!exports.instanceMap.has(refId)) {\n exports.instanceMap.set(refId, instance);\n appRecord.instanceMap.set(refId, instance);\n instance.$on('hook:beforeDestroy', function () {\n exports.instanceMap.delete(refId);\n });\n (0, perf_js_1.applyPerfHooks)(api, instance, appRecord.options.app);\n (0, update_tracking_js_1.applyTrackingUpdateHook)(api, instance);\n }\n}\n\nfunction markFunctional(id, vnode) {\n const refId = vnode.fnContext.__VUE_DEVTOOLS_UID__;\n\n if (!exports.functionalVnodeMap.has(refId)) {\n exports.functionalVnodeMap.set(refId, {});\n vnode.fnContext.$on('hook:beforeDestroy', function () {\n exports.functionalVnodeMap.delete(refId);\n });\n }\n\n exports.functionalVnodeMap.get(refId)[id] = vnode;\n appRecord.instanceMap.set(id, {\n __VUE_DEVTOOLS_UID__: id,\n __VUE_DEVTOOLS_FUNCTIONAL_LEGACY__: true,\n vnode\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFWLENBQWtCLEdBQWhEO0FBQ0Esc0RBQXdCLEdBQXhCLEVBQTZCLFFBQTdCO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTLGNBQVQsQ0FBeUIsRUFBekIsRUFBNkIsS0FBN0IsRUFBa0M7QUFDaEMsUUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQU4sQ0FBZ0Isb0JBQTlCOztBQUNBLE1BQUksQ0FBQywyQkFBbUIsR0FBbkIsQ0FBdUIsS0FBdkIsQ0FBTCxFQUFvQztBQUNsQywrQkFBbUIsR0FBbkIsQ0FBdUIsS0FBdkIsRUFBOEIsRUFBOUI7QUFDQSxTQUFLLENBQUMsU0FBTixDQUFnQixHQUFoQixDQUFvQixvQkFBcEIsRUFBMEM7QUFDeEMsaUNBQW1CLE1BQW5CLENBQTBCLEtBQTFCO0FBQ0QsS0FGRDtBQUdEOztBQUVELDZCQUFtQixHQUFuQixDQUF1QixLQUF2QixFQUE4QixFQUE5QixJQUFvQyxLQUFwQztBQUVBLFdBQVMsQ0FBQyxXQUFWLENBQXNCLEdBQXRCLENBQTBCLEVBQTFCLEVBQThCO0FBQzVCLHdCQUFvQixFQUFFLEVBRE07QUFFNUIsc0NBQWtDLEVBQUUsSUFGUjtBQUc1QjtBQUg0QixHQUE5QjtBQUtEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi8uLi9zcmMvY29tcG9uZW50cy90cmVlLnRzPzQwNzMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENvbXBvbmVudFBhcmVudHMgPSBleHBvcnRzLndhbGtUcmVlID0gZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAgPSBleHBvcnRzLmluc3RhbmNlTWFwID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBlbF8xID0gcmVxdWlyZShcIi4vZWxcIik7XG5jb25zdCBwZXJmX2pzXzEgPSByZXF1aXJlKFwiLi9wZXJmLmpzXCIpO1xuY29uc3QgdXBkYXRlX3RyYWNraW5nX2pzXzEgPSByZXF1aXJlKFwiLi91cGRhdGUtdHJhY2tpbmcuanNcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xubGV0IGFwcFJlY29yZDtcbmxldCBhcGk7XG5jb25zdCBjb25zb2xlQm91bmRJbnN0YW5jZXMgPSBBcnJheSg1KTtcbmxldCBmaWx0ZXIgPSAnJztcbmNvbnN0IGZ1bmN0aW9uYWxJZHMgPSBuZXcgTWFwKCk7XG4vLyBEZWR1cGUgaW5zdGFuY2VzXG4vLyBTb21lIGluc3RhbmNlcyBtYXkgYmUgYm90aCBvbiBhIGNvbXBvbmVudCBhbmQgb24gYSBjaGlsZCBhYnN0cmFjdC9mdW5jdGlvbmFsIGNvbXBvbmVudFxuY29uc3QgY2FwdHVyZUlkcyA9IG5ldyBNYXAoKTtcbmFzeW5jIGZ1bmN0aW9uIHdhbGtUcmVlKGluc3RhbmNlLCBwRmlsdGVyLCBhcGksIGN0eCkge1xuICAgIGluaXRDdHgoYXBpLCBjdHgpO1xuICAgIGZpbHRlciA9IHBGaWx0ZXI7XG4gICAgZnVuY3Rpb25hbElkcy5jbGVhcigpO1xuICAgIGNhcHR1cmVJZHMuY2xlYXIoKTtcbiAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuKGF3YWl0IGZpbmRRdWFsaWZpZWRDaGlsZHJlbihpbnN0YW5jZSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLndhbGtUcmVlID0gd2Fsa1RyZWU7XG5mdW5jdGlvbiBnZXRDb21wb25lbnRQYXJlbnRzKGluc3RhbmNlLCBhcGksIGN0eCkge1xuICAgIGluaXRDdHgoYXBpLCBjdHgpO1xuICAgIGNvbnN0IGNhcHR1cmVJZHMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgY2FwdHVyZUlkID0gdm0gPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHZtLl9fVlVFX0RFVlRPT0xTX1VJRF9fID0gKDAsIHV0aWxfMS5nZXRVbmlxdWVJZCkodm0pO1xuICAgICAgICBpZiAoY2FwdHVyZUlkcy5oYXMoaWQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXB0dXJlSWRzLnNldChpZCwgdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKHZtLl9fVlVFX0RFVlRPT0xTX0ZVTkNUSU9OQUxfTEVHQUNZX18pIHtcbiAgICAgICAgICAgIG1hcmtGdW5jdGlvbmFsKGlkLCB2bS52bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtYXJrKHZtKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgIGNhcHR1cmVJZChpbnN0YW5jZSk7XG4gICAgbGV0IHBhcmVudCA9IGluc3RhbmNlO1xuICAgIHdoaWxlICgocGFyZW50ID0gcGFyZW50LiRwYXJlbnQpKSB7XG4gICAgICAgIGNhcHR1cmVJZChwYXJlbnQpO1xuICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG59XG5leHBvcnRzLmdldENvbXBvbmVudFBhcmVudHMgPSBnZXRDb21wb25lbnRQYXJlbnRzO1xuZnVuY3Rpb24gaW5pdEN0eChfYXBpLCBjdHgpIHtcbiAgICBhcHBSZWNvcmQgPSBjdHguY3VycmVudEFwcFJlY29yZDtcbiAgICBhcGkgPSBfYXBpO1xuICAgIGlmICghYXBwUmVjb3JkLm1ldGEpIHtcbiAgICAgICAgYXBwUmVjb3JkLm1ldGEgPSB7fTtcbiAgICB9XG4gICAgaWYgKCFhcHBSZWNvcmQubWV0YS5pbnN0YW5jZU1hcCkge1xuICAgICAgICBhcHBSZWNvcmQubWV0YS5pbnN0YW5jZU1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgZXhwb3J0cy5pbnN0YW5jZU1hcCA9IGFwcFJlY29yZC5tZXRhLmluc3RhbmNlTWFwO1xuICAgIGlmICghYXBwUmVjb3JkLm1ldGEuZnVuY3Rpb25hbFZub2RlTWFwKSB7XG4gICAgICAgIGFwcFJlY29yZC5tZXRhLmZ1bmN0aW9uYWxWbm9kZU1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAgPSBhcHBSZWNvcmQubWV0YS5mdW5jdGlvbmFsVm5vZGVNYXA7XG59XG4vKipcbiAqIEl0ZXJhdGUgdGhyb3VnaCBhbiBhcnJheSBvZiBpbnN0YW5jZXMgYW5kIGZsYXR0ZW4gaXQgaW50b1xuICogYW4gYXJyYXkgb2YgcXVhbGlmaWVkIGluc3RhbmNlcy4gVGhpcyBpcyBhIGRlcHRoLWZpcnN0XG4gKiB0cmF2ZXJzYWwgLSBlLmcuIGlmIGFuIGluc3RhbmNlIGlzIG5vdCBtYXRjaGVkLCB3ZSB3aWxsXG4gKiByZWN1cnNpdmVseSBnbyBkZWVwZXIgdW50aWwgYSBxdWFsaWZpZWQgY2hpbGQgaXMgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRRdWFsaWZpZWRDaGlsZHJlbkZyb21MaXN0KGluc3RhbmNlcykge1xuICAgIGluc3RhbmNlcyA9IGluc3RhbmNlc1xuICAgICAgICAuZmlsdGVyKGNoaWxkID0+ICEoMCwgdXRpbF8xLmlzQmVpbmdEZXN0cm95ZWQpKGNoaWxkKSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKCFmaWx0ZXJcbiAgICAgICAgPyBpbnN0YW5jZXMubWFwKGNhcHR1cmUpXG4gICAgICAgIDogQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgaW5zdGFuY2VzLm1hcChmaW5kUXVhbGlmaWVkQ2hpbGRyZW4pKSk7XG59XG4vKipcbiAqIEZpbmQgcXVhbGlmaWVkIGNoaWxkcmVuIGZyb20gYSBzaW5nbGUgaW5zdGFuY2UuXG4gKiBJZiB0aGUgaW5zdGFuY2UgaXRzZWxmIGlzIHF1YWxpZmllZCwganVzdCByZXR1cm4gaXRzZWxmLlxuICogVGhpcyBpcyBvayBiZWNhdXNlIFtdLmNvbmNhdCB3b3JrcyBpbiBib3RoIGNhc2VzLlxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kUXVhbGlmaWVkQ2hpbGRyZW4oaW5zdGFuY2UpIHtcbiAgICBpZiAoaXNRdWFsaWZpZWQoaW5zdGFuY2UpKSB7XG4gICAgICAgIHJldHVybiBbYXdhaXQgY2FwdHVyZShpbnN0YW5jZSldO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gYXdhaXQgZmluZFF1YWxpZmllZENoaWxkcmVuRnJvbUxpc3QoaW5zdGFuY2UuJGNoaWxkcmVuKTtcbiAgICAgICAgLy8gRmluZCBmdW5jdGlvbmFsIGNvbXBvbmVudHMgaW4gcmVjdXJzaXZlbHkgaW4gbm9uLWZ1bmN0aW9uYWwgdm5vZGVzLlxuICAgICAgICBpZiAoaW5zdGFuY2UuX3Zub2RlICYmIGluc3RhbmNlLl92bm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IFByb21pc2UuYWxsKGZsYXR0ZW4oaW5zdGFuY2UuX3Zub2RlLmNoaWxkcmVuLmZpbHRlcihjaGlsZCA9PiAhY2hpbGQuY29tcG9uZW50SW5zdGFuY2UpLm1hcChjYXB0dXJlQ2hpbGQpKSk7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgcXVhbGlmaWVkIGNoaWxkcmVuLlxuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbENoaWxkcmVuID0gbGlzdC5maWx0ZXIoaW5zdGFuY2UgPT4gaXNRdWFsaWZpZWQoaW5zdGFuY2UpKTtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uY29uY2F0KGFkZGl0aW9uYWxDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH1cbn1cbi8qKlxuICogR2V0IGNoaWxkcmVuIGZyb20gYSBjb21wb25lbnQgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGdldEludGVybmFsSW5zdGFuY2VDaGlsZHJlbihpbnN0YW5jZSkge1xuICAgIGlmIChpbnN0YW5jZS4kY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLiRjaGlsZHJlbjtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xufVxuLyoqXG4gKiBDaGVjayBpZiBhbiBpbnN0YW5jZSBpcyBxdWFsaWZpZWQuXG4gKi9cbmZ1bmN0aW9uIGlzUXVhbGlmaWVkKGluc3RhbmNlKSB7XG4gICAgY29uc3QgbmFtZSA9ICgwLCB1dGlsXzEuZ2V0SW5zdGFuY2VOYW1lKShpbnN0YW5jZSk7XG4gICAgcmV0dXJuICgwLCBzaGFyZWRfdXRpbHNfMS5jbGFzc2lmeSkobmFtZSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlcikgPiAtMSB8fFxuICAgICAgICAoMCwgc2hhcmVkX3V0aWxzXzEua2ViYWJpemUpKG5hbWUpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXIpID4gLTE7XG59XG5mdW5jdGlvbiBmbGF0dGVuKGl0ZW1zKSB7XG4gICAgY29uc3QgciA9IGl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQoZmxhdHRlbihpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjYy5wdXNoKC4uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBhY2MucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIGNhcHR1cmVDaGlsZChjaGlsZCkge1xuICAgIGlmIChjaGlsZC5mbkNvbnRleHQgJiYgIWNoaWxkLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBjYXB0dXJlKGNoaWxkKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hpbGQuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKCEoMCwgdXRpbF8xLmlzQmVpbmdEZXN0cm95ZWQpKGNoaWxkLmNvbXBvbmVudEluc3RhbmNlKSlcbiAgICAgICAgICAgIHJldHVybiBjYXB0dXJlKGNoaWxkLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZsYXR0ZW4oY2hpbGQuY2hpbGRyZW4ubWFwKGNhcHR1cmVDaGlsZCkpKTtcbiAgICB9XG59XG4vKipcbiAqIENhcHR1cmUgdGhlIG1ldGEgaW5mb3JtYXRpb24gb2YgYW4gaW5zdGFuY2UuIChyZWN1cnNpdmUpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhcHR1cmUoaW5zdGFuY2UsIGluZGV4LCBsaXN0KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgaWYgKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX0ZVTkNUSU9OQUxfTEVHQUNZX18pIHtcbiAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS52bm9kZTtcbiAgICB9XG4gICAgaWYgKGluc3RhbmNlLiRvcHRpb25zICYmIGluc3RhbmNlLiRvcHRpb25zLmFic3RyYWN0ICYmIGluc3RhbmNlLl92bm9kZSAmJiBpbnN0YW5jZS5fdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5fdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgfVxuICAgIGlmICgoX2IgPSAoX2EgPSBpbnN0YW5jZS4kb3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRldnRvb2xzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaGlkZSlcbiAgICAgICAgcmV0dXJuO1xuICAgIC8vIEZ1bmN0aW9uYWwgY29tcG9uZW50LlxuICAgIGlmIChpbnN0YW5jZS5mbkNvbnRleHQgJiYgIWluc3RhbmNlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRVaWQgPSBpbnN0YW5jZS5mbkNvbnRleHQuX19WVUVfREVWVE9PTFNfVUlEX187XG4gICAgICAgIGxldCBpZCA9IGZ1bmN0aW9uYWxJZHMuZ2V0KGNvbnRleHRVaWQpO1xuICAgICAgICBpZiAoaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgaWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWQrKztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbmFsSWRzLnNldChjb250ZXh0VWlkLCBpZCk7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxJZCA9IGNvbnRleHRVaWQgKyAnOmZ1bmN0aW9uYWw6JyArIGlkO1xuICAgICAgICBtYXJrRnVuY3Rpb25hbChmdW5jdGlvbmFsSWQsIGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5Qcm9taXNlID0gKGluc3RhbmNlLmNoaWxkcmVuXG4gICAgICAgICAgICA/IGluc3RhbmNlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZC5mbkNvbnRleHRcbiAgICAgICAgICAgICAgICA/IGNhcHR1cmVDaGlsZChjaGlsZClcbiAgICAgICAgICAgICAgICA6IGNoaWxkLmNvbXBvbmVudEluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgID8gY2FwdHVyZShjaGlsZC5jb21wb25lbnRJbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpXG4gICAgICAgICAgICAvLyByb3V0ZXItdmlldyBoYXMgYm90aCBmbkNvbnRleHQgYW5kIGNvbXBvbmVudEluc3RhbmNlIG9uIHZub2RlLlxuICAgICAgICAgICAgOiBpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSA/IFtjYXB0dXJlKGluc3RhbmNlLmNvbXBvbmVudEluc3RhbmNlKV0gOiBbXSk7XG4gICAgICAgIC8vIGF3YWl0IGFsbCBjaGlsZHJlbkNhcHR1cmUgdG8tYmUgcmVzb2x2ZWRcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSAoYXdhaXQgUHJvbWlzZS5hbGwoY2hpbGRyZW5Qcm9taXNlKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICBjb25zdCB0cmVlTm9kZSA9IHtcbiAgICAgICAgICAgIHVpZDogZnVuY3Rpb25hbElkLFxuICAgICAgICAgICAgaWQ6IGZ1bmN0aW9uYWxJZCxcbiAgICAgICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnZnVuY3Rpb25hbCcsXG4gICAgICAgICAgICAgICAgICAgIHRleHRDb2xvcjogMHg1NTU1NTUsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogMHhlZWVlZWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBuYW1lOiAoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkoaW5zdGFuY2UpLFxuICAgICAgICAgICAgcmVuZGVyS2V5OiAoMCwgdXRpbF8xLmdldFJlbmRlcktleSkoaW5zdGFuY2Uua2V5KSxcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgaGFzQ2hpbGRyZW46ICEhY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICAgICAgaW5hY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgaXNGcmFnbWVudDogZmFsc2UsIC8vIFRPRE86IENoZWNrIHdoYXQgaXMgaXQgZm9yLlxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYXBpLnZpc2l0Q29tcG9uZW50VHJlZShpbnN0YW5jZSwgdHJlZU5vZGUsIGZpbHRlciwgKF9jID0gYXBwUmVjb3JkID09PSBudWxsIHx8IGFwcFJlY29yZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXBwUmVjb3JkLm9wdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5hcHApO1xuICAgIH1cbiAgICAvLyBpbnN0YW5jZS5fdWlkIGlzIG5vdCByZWxpYWJsZSBpbiBkZXZ0b29scyBhcyB0aGVyZVxuICAgIC8vIG1heSBiZSAyIHJvb3RzIHdpdGggc2FtZSBfdWlkIHdoaWNoIGNhdXNlcyB1bmV4cGVjdGVkXG4gICAgLy8gYmVoYXZpb3VyXG4gICAgaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18gPSAoMCwgdXRpbF8xLmdldFVuaXF1ZUlkKShpbnN0YW5jZSwgYXBwUmVjb3JkKTtcbiAgICAvLyBEZWR1cGVcbiAgICBpZiAoY2FwdHVyZUlkcy5oYXMoaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNhcHR1cmVJZHMuc2V0KGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBtYXJrKGluc3RhbmNlKTtcbiAgICBjb25zdCBuYW1lID0gKDAsIHV0aWxfMS5nZXRJbnN0YW5jZU5hbWUpKGluc3RhbmNlKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IChhd2FpdCBQcm9taXNlLmFsbCgoYXdhaXQgZ2V0SW50ZXJuYWxJbnN0YW5jZUNoaWxkcmVuKGluc3RhbmNlKSlcbiAgICAgICAgLmZpbHRlcihjaGlsZCA9PiAhKDAsIHV0aWxfMS5pc0JlaW5nRGVzdHJveWVkKShjaGlsZCkpXG4gICAgICAgIC5tYXAoY2FwdHVyZSkpKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgY29uc3QgcmV0ID0ge1xuICAgICAgICB1aWQ6IGluc3RhbmNlLl91aWQsXG4gICAgICAgIGlkOiBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXyxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcmVuZGVyS2V5OiAoMCwgdXRpbF8xLmdldFJlbmRlcktleSkoaW5zdGFuY2UuJHZub2RlID8gaW5zdGFuY2UuJHZub2RlLmtleSA6IG51bGwpLFxuICAgICAgICBpbmFjdGl2ZTogISFpbnN0YW5jZS5faW5hY3RpdmUsXG4gICAgICAgIGlzRnJhZ21lbnQ6ICEhaW5zdGFuY2UuX2lzRnJhZ21lbnQsXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBoYXNDaGlsZHJlbjogISFjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIHRhZ3M6IFtdLFxuICAgICAgICBtZXRhOiB7fSxcbiAgICB9O1xuICAgIGlmIChpbnN0YW5jZS5fdm5vZGUgJiYgaW5zdGFuY2UuX3Zub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IHZub2RlQ2hpbGRyZW4gPSBhd2FpdCBQcm9taXNlLmFsbChmbGF0dGVuKGluc3RhbmNlLl92bm9kZS5jaGlsZHJlbi5tYXAoY2FwdHVyZUNoaWxkKSkpO1xuICAgICAgICByZXQuY2hpbGRyZW4gPSByZXQuY2hpbGRyZW4uY29uY2F0KGZsYXR0ZW4odm5vZGVDaGlsZHJlbikuZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgICAgcmV0Lmhhc0NoaWxkcmVuID0gISFyZXQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIH1cbiAgICAvLyBlbnN1cmUgY29ycmVjdCBvcmRlcmluZ1xuICAgIGNvbnN0IHJvb3RFbGVtZW50cyA9ICgwLCBlbF8xLmdldFJvb3RFbGVtZW50c0Zyb21Db21wb25lbnRJbnN0YW5jZSkoaW5zdGFuY2UpO1xuICAgIGNvbnN0IGZpcnN0RWxlbWVudCA9IHJvb3RFbGVtZW50c1swXTtcbiAgICBpZiAoZmlyc3RFbGVtZW50ID09PSBudWxsIHx8IGZpcnN0RWxlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmlyc3RFbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2UgPSBpbnN0YW5jZS4kcGFyZW50O1xuICAgICAgICBjb25zdCBwYXJlbnRSb290RWxlbWVudHMgPSBwYXJlbnRJbnN0YW5jZSA/ICgwLCBlbF8xLmdldFJvb3RFbGVtZW50c0Zyb21Db21wb25lbnRJbnN0YW5jZSkocGFyZW50SW5zdGFuY2UpIDogW107XG4gICAgICAgIGxldCBlbCA9IGZpcnN0RWxlbWVudDtcbiAgICAgICAgY29uc3QgaW5kZXhMaXN0ID0gW107XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGluZGV4TGlzdC5wdXNoKEFycmF5LmZyb20oZWwucGFyZW50RWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKGVsKSk7XG4gICAgICAgICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH0gd2hpbGUgKGVsLnBhcmVudEVsZW1lbnQgJiYgcGFyZW50Um9vdEVsZW1lbnRzLmxlbmd0aCAmJiAhcGFyZW50Um9vdEVsZW1lbnRzLmluY2x1ZGVzKGVsKSk7XG4gICAgICAgIHJldC5kb21PcmRlciA9IGluZGV4TGlzdC5yZXZlcnNlKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXQuZG9tT3JkZXIgPSBbLTFdO1xuICAgIH1cbiAgICAvLyBjaGVjayBpZiBpbnN0YW5jZSBpcyBhdmFpbGFibGUgaW4gY29uc29sZVxuICAgIGNvbnN0IGNvbnNvbGVJZCA9IGNvbnNvbGVCb3VuZEluc3RhbmNlcy5pbmRleE9mKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fKTtcbiAgICByZXQuY29uc29sZUlkID0gY29uc29sZUlkID4gLTEgPyAnJHZtJyArIGNvbnNvbGVJZCA6IG51bGw7XG4gICAgLy8gY2hlY2sgcm91dGVyIHZpZXdcbiAgICBjb25zdCBpc1JvdXRlclZpZXcyID0gKF9lID0gKF9kID0gaW5zdGFuY2UuJHZub2RlKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZGF0YSkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLnJvdXRlclZpZXc7XG4gICAgaWYgKGluc3RhbmNlLl9yb3V0ZXJWaWV3IHx8IGlzUm91dGVyVmlldzIpIHtcbiAgICAgICAgcmV0LmlzUm91dGVyVmlldyA9IHRydWU7XG4gICAgICAgIGlmICghaW5zdGFuY2UuX2luYWN0aXZlICYmIGluc3RhbmNlLiRyb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGluc3RhbmNlLiRyb3V0ZS5tYXRjaGVkO1xuICAgICAgICAgICAgY29uc3QgZGVwdGggPSBpc1JvdXRlclZpZXcyXG4gICAgICAgICAgICAgICAgPyBpbnN0YW5jZS4kdm5vZGUuZGF0YS5yb3V0ZXJWaWV3RGVwdGhcbiAgICAgICAgICAgICAgICA6IGluc3RhbmNlLl9yb3V0ZXJWaWV3LmRlcHRoO1xuICAgICAgICAgICAgcmV0Lm1ldGEubWF0Y2hlZFJvdXRlU2VnbWVudCA9XG4gICAgICAgICAgICAgICAgbWF0Y2hlZCAmJlxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkW2RlcHRoXSAmJlxuICAgICAgICAgICAgICAgICAgICAoaXNSb3V0ZXJWaWV3MiA/IG1hdGNoZWRbZGVwdGhdLnBhdGggOiBtYXRjaGVkW2RlcHRoXS5oYW5kbGVyLnBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldC50YWdzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IGByb3V0ZXItdmlldyR7cmV0Lm1ldGEubWF0Y2hlZFJvdXRlU2VnbWVudCA/IGA6ICR7cmV0Lm1ldGEubWF0Y2hlZFJvdXRlU2VnbWVudH1gIDogJyd9YCxcbiAgICAgICAgICAgIHRleHRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4ZmY4MzQ0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFwaS52aXNpdENvbXBvbmVudFRyZWUoaW5zdGFuY2UsIHJldCwgZmlsdGVyLCAoX2YgPSBhcHBSZWNvcmQgPT09IG51bGwgfHwgYXBwUmVjb3JkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhcHBSZWNvcmQub3B0aW9ucykgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmFwcCk7XG59XG4vKipcbiAqIE1hcmsgYW4gaW5zdGFuY2UgYXMgY2FwdHVyZWQgYW5kIHN0b3JlIGl0IGluIHRoZSBpbnN0YW5jZSBtYXAuXG4gKlxuICogQHBhcmFtIHtWdWV9IGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIG1hcmsoaW5zdGFuY2UpIHtcbiAgICBjb25zdCByZWZJZCA9IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fO1xuICAgIGlmICghZXhwb3J0cy5pbnN0YW5jZU1hcC5oYXMocmVmSWQpKSB7XG4gICAgICAgIGV4cG9ydHMuaW5zdGFuY2VNYXAuc2V0KHJlZklkLCBpbnN0YW5jZSk7XG4gICAgICAgIGFwcFJlY29yZC5pbnN0YW5jZU1hcC5zZXQocmVmSWQsIGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2UuJG9uKCdob29rOmJlZm9yZURlc3Ryb3knLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBvcnRzLmluc3RhbmNlTWFwLmRlbGV0ZShyZWZJZCk7XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgcGVyZl9qc18xLmFwcGx5UGVyZkhvb2tzKShhcGksIGluc3RhbmNlLCBhcHBSZWNvcmQub3B0aW9ucy5hcHApO1xuICAgICAgICAoMCwgdXBkYXRlX3RyYWNraW5nX2pzXzEuYXBwbHlUcmFja2luZ1VwZGF0ZUhvb2spKGFwaSwgaW5zdGFuY2UpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbmFsKGlkLCB2bm9kZSkge1xuICAgIGNvbnN0IHJlZklkID0gdm5vZGUuZm5Db250ZXh0Ll9fVlVFX0RFVlRPT0xTX1VJRF9fO1xuICAgIGlmICghZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAuaGFzKHJlZklkKSkge1xuICAgICAgICBleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcC5zZXQocmVmSWQsIHt9KTtcbiAgICAgICAgdm5vZGUuZm5Db250ZXh0LiRvbignaG9vazpiZWZvcmVEZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAuZGVsZXRlKHJlZklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwLmdldChyZWZJZClbaWRdID0gdm5vZGU7XG4gICAgYXBwUmVjb3JkLmluc3RhbmNlTWFwLnNldChpZCwge1xuICAgICAgICBfX1ZVRV9ERVZUT09MU19VSURfXzogaWQsXG4gICAgICAgIF9fVlVFX0RFVlRPT0xTX0ZVTkNUSU9OQUxfTEVHQUNZX186IHRydWUsXG4gICAgICAgIHZub2RlLFxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJlZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18059\n");
303
+
304
+ /***/ }),
305
+
306
+ /***/ 44615:
307
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
308
+
309
+ "use strict";
310
+ eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.applyTrackingUpdateHook = exports.initUpdateTracking = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst throttle_1 = __importDefault(__webpack_require__(12436));\n\nconst util_js_1 = __webpack_require__(95136);\n\nfunction initUpdateTracking(api, Vue) {\n // Global mixin\n Vue.mixin({\n beforeCreate() {\n applyTrackingUpdateHook(api, this);\n }\n\n });\n}\n\nexports.initUpdateTracking = initUpdateTracking;\nconst COMPONENT_HOOKS = ['created', 'updated'];\n\nfunction applyTrackingUpdateHook(api, vm) {\n if (vm.$options.$_devtoolsUpdateTrackingHooks) return;\n vm.$options.$_devtoolsUpdateTrackingHooks = true;\n const handler = (0, throttle_1.default)(async function () {\n if (shared_utils_1.SharedData.trackUpdates) {\n api.ctx.hook.emit(shared_utils_1.HookEvents.TRACK_UPDATE, (0, util_js_1.getUniqueId)(this), api.ctx);\n const parents = await api.walkComponentParents(this);\n\n for (const parent of parents) {\n api.ctx.hook.emit(shared_utils_1.HookEvents.TRACK_UPDATE, (0, util_js_1.getUniqueId)(parent), api.ctx);\n }\n }\n\n if (shared_utils_1.SharedData.flashUpdates) {\n api.ctx.hook.emit(shared_utils_1.HookEvents.FLASH_UPDATE, this, api.backend);\n }\n }, 100);\n\n for (const hook of COMPONENT_HOOKS) {\n const currentValue = vm.$options[hook];\n\n if (Array.isArray(currentValue)) {\n vm.$options[hook] = [handler, ...currentValue];\n } else if (typeof currentValue === 'function') {\n vm.$options[hook] = [handler, currentValue];\n } else {\n vm.$options[hook] = [handler];\n }\n }\n}\n\nexports.applyTrackingUpdateHook = applyTrackingUpdateHook;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ2MTUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUVBLFNBQWdCLGtCQUFoQixDQUFvQyxHQUFwQyxFQUFzRCxHQUF0RCxFQUF5RDtBQUN2RDtBQUNBLEtBQUcsQ0FBQyxLQUFKLENBQVU7QUFDUixnQkFBWTtBQUNWLDZCQUF1QixDQUFDLEdBQUQsRUFBTSxJQUFOLENBQXZCO0FBQ0Q7O0FBSE8sR0FBVjtBQUtEOztBQVBEO0FBU0EsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsU0FEc0IsRUFFdEIsU0FGc0IsQ0FBeEI7O0FBS0EsU0FBZ0IsdUJBQWhCLENBQXlDLEdBQXpDLEVBQTJELEVBQTNELEVBQTZEO0FBQzNELE1BQUksRUFBRSxDQUFDLFFBQUgsQ0FBWSw2QkFBaEIsRUFBK0M7QUFDL0MsSUFBRSxDQUFDLFFBQUgsQ0FBWSw2QkFBWixHQUE0QyxJQUE1QztBQUVBLFFBQU0sT0FBTyxHQUFHLHdCQUFTLGtCQUFLO0FBQzVCLFFBQUksMEJBQVcsWUFBZixFQUE2QjtBQUMzQixTQUFHLENBQUMsR0FBSixDQUFRLElBQVIsQ0FBYSxJQUFiLENBQWtCLDBCQUFXLFlBQTdCLEVBQTJDLDJCQUFZLElBQVosQ0FBM0MsRUFBOEQsR0FBRyxDQUFDLEdBQWxFO0FBRUEsWUFBTSxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUMsb0JBQUosQ0FBeUIsSUFBekIsQ0FBdEI7O0FBQ0EsV0FBSyxNQUFNLE1BQVgsSUFBcUIsT0FBckIsRUFBOEI7QUFDNUIsV0FBRyxDQUFDLEdBQUosQ0FBUSxJQUFSLENBQWEsSUFBYixDQUFrQiwwQkFBVyxZQUE3QixFQUEyQywyQkFBWSxNQUFaLENBQTNDLEVBQWdFLEdBQUcsQ0FBQyxHQUFwRTtBQUNEO0FBQ0Y7O0FBRUQsUUFBSSwwQkFBVyxZQUFmLEVBQTZCO0FBQzNCLFNBQUcsQ0FBQyxHQUFKLENBQVEsSUFBUixDQUFhLElBQWIsQ0FBa0IsMEJBQVcsWUFBN0IsRUFBMkMsSUFBM0MsRUFBaUQsR0FBRyxDQUFDLE9BQXJEO0FBQ0Q7QUFDRixHQWJlLEVBYWIsR0FiYSxDQUFoQjs7QUFjQSxPQUFLLE1BQU0sSUFBWCxJQUFtQixlQUFuQixFQUFvQztBQUNsQyxVQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsUUFBSCxDQUFZLElBQVosQ0FBckI7O0FBQ0EsUUFBSSxLQUFLLENBQUMsT0FBTixDQUFjLFlBQWQsQ0FBSixFQUFpQztBQUMvQixRQUFFLENBQUMsUUFBSCxDQUFZLElBQVosSUFBb0IsQ0FBQyxPQUFELEVBQVUsR0FBRyxZQUFiLENBQXBCO0FBQ0QsS0FGRCxNQUVPLElBQUksT0FBTyxZQUFQLEtBQXdCLFVBQTVCLEVBQXdDO0FBQzdDLFFBQUUsQ0FBQyxRQUFILENBQVksSUFBWixJQUFvQixDQUFDLE9BQUQsRUFBVSxZQUFWLENBQXBCO0FBQ0QsS0FGTSxNQUVBO0FBQ0wsUUFBRSxDQUFDLFFBQUgsQ0FBWSxJQUFaLElBQW9CLENBQUMsT0FBRCxDQUFwQjtBQUNEO0FBQ0Y7QUFDRjs7QUE1QkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uLy4uL3NyYy9jb21wb25lbnRzL3VwZGF0ZS10cmFja2luZy50cz85MzIzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hcHBseVRyYWNraW5nVXBkYXRlSG9vayA9IGV4cG9ydHMuaW5pdFVwZGF0ZVRyYWNraW5nID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCB0aHJvdHRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJsb2Rhc2gvdGhyb3R0bGVcIikpO1xuY29uc3QgdXRpbF9qc18xID0gcmVxdWlyZShcIi4vdXRpbC5qc1wiKTtcbmZ1bmN0aW9uIGluaXRVcGRhdGVUcmFja2luZyhhcGksIFZ1ZSkge1xuICAgIC8vIEdsb2JhbCBtaXhpblxuICAgIFZ1ZS5taXhpbih7XG4gICAgICAgIGJlZm9yZUNyZWF0ZSgpIHtcbiAgICAgICAgICAgIGFwcGx5VHJhY2tpbmdVcGRhdGVIb29rKGFwaSwgdGhpcyk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5leHBvcnRzLmluaXRVcGRhdGVUcmFja2luZyA9IGluaXRVcGRhdGVUcmFja2luZztcbmNvbnN0IENPTVBPTkVOVF9IT09LUyA9IFtcbiAgICAnY3JlYXRlZCcsXG4gICAgJ3VwZGF0ZWQnLFxuXTtcbmZ1bmN0aW9uIGFwcGx5VHJhY2tpbmdVcGRhdGVIb29rKGFwaSwgdm0pIHtcbiAgICBpZiAodm0uJG9wdGlvbnMuJF9kZXZ0b29sc1VwZGF0ZVRyYWNraW5nSG9va3MpXG4gICAgICAgIHJldHVybjtcbiAgICB2bS4kb3B0aW9ucy4kX2RldnRvb2xzVXBkYXRlVHJhY2tpbmdIb29rcyA9IHRydWU7XG4gICAgY29uc3QgaGFuZGxlciA9ICgwLCB0aHJvdHRsZV8xLmRlZmF1bHQpKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEudHJhY2tVcGRhdGVzKSB7XG4gICAgICAgICAgICBhcGkuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlRSQUNLX1VQREFURSwgKDAsIHV0aWxfanNfMS5nZXRVbmlxdWVJZCkodGhpcyksIGFwaS5jdHgpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50cyA9IGF3YWl0IGFwaS53YWxrQ29tcG9uZW50UGFyZW50cyh0aGlzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFyZW50IG9mIHBhcmVudHMpIHtcbiAgICAgICAgICAgICAgICBhcGkuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlRSQUNLX1VQREFURSwgKDAsIHV0aWxfanNfMS5nZXRVbmlxdWVJZCkocGFyZW50KSwgYXBpLmN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZmxhc2hVcGRhdGVzKSB7XG4gICAgICAgICAgICBhcGkuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkZMQVNIX1VQREFURSwgdGhpcywgYXBpLmJhY2tlbmQpO1xuICAgICAgICB9XG4gICAgfSwgMTAwKTtcbiAgICBmb3IgKGNvbnN0IGhvb2sgb2YgQ09NUE9ORU5UX0hPT0tTKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZtLiRvcHRpb25zW2hvb2tdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICB2bS4kb3B0aW9uc1tob29rXSA9IFtoYW5kbGVyLCAuLi5jdXJyZW50VmFsdWVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZtLiRvcHRpb25zW2hvb2tdID0gW2hhbmRsZXIsIGN1cnJlbnRWYWx1ZV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2bS4kb3B0aW9uc1tob29rXSA9IFtoYW5kbGVyXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuYXBwbHlUcmFja2luZ1VwZGF0ZUhvb2sgPSBhcHBseVRyYWNraW5nVXBkYXRlSG9vaztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVwZGF0ZS10cmFja2luZy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///44615\n");
303
311
 
304
312
  /***/ }),
305
313
 
@@ -323,7 +331,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
323
331
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
324
332
 
325
333
  "use strict";
326
- eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.backend = void 0;\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst data_1 = __webpack_require__(4465);\n\nconst el_1 = __webpack_require__(66351);\n\nconst perf_js_1 = __webpack_require__(82639);\n\nconst tree_1 = __webpack_require__(18059);\n\nconst util_1 = __webpack_require__(95136);\n\nconst events_1 = __webpack_require__(16935);\n\nconst plugin_1 = __webpack_require__(7725);\n\nexports.backend = (0, app_backend_api_1.defineBackend)({\n frameworkVersion: 2,\n features: [app_backend_api_1.BuiltinBackendFeature.FLUSH],\n\n setup(api) {\n api.on.getAppRecordName(payload => {\n if (payload.app.name) {\n payload.name = payload.app.name;\n } else if (payload.app.$options.name) {\n payload.name = payload.app.$options.name;\n }\n });\n api.on.getAppRootInstance(payload => {\n payload.root = payload.app;\n });\n api.on.walkComponentTree(async (payload, ctx) => {\n payload.componentTreeData = await (0, tree_1.walkTree)(payload.componentInstance, payload.filter, api, ctx);\n });\n api.on.walkComponentParents((payload, ctx) => {\n payload.parentInstances = (0, tree_1.getComponentParents)(payload.componentInstance, api, ctx);\n });\n api.on.inspectComponent(payload => {\n injectToUtils();\n payload.instanceData = (0, data_1.getInstanceDetails)(payload.componentInstance);\n });\n api.on.getComponentBounds(payload => {\n payload.bounds = (0, el_1.getInstanceOrVnodeRect)(payload.componentInstance);\n });\n api.on.getComponentName(payload => {\n const instance = payload.componentInstance;\n payload.name = instance.fnContext ? (0, shared_utils_1.getComponentName)(instance.fnOptions) : (0, util_1.getInstanceName)(instance);\n });\n api.on.getElementComponent(payload => {\n payload.componentInstance = (0, el_1.findRelatedComponent)(payload.element);\n });\n api.on.editComponentState(payload => {\n (0, data_1.editState)(payload, api.stateEditor);\n });\n api.on.getComponentRootElements(payload => {\n payload.rootElements = (0, el_1.getRootElementsFromComponentInstance)(payload.componentInstance);\n });\n api.on.getComponentDevtoolsOptions(payload => {\n payload.options = payload.componentInstance.$options.devtools;\n });\n api.on.getComponentRenderCode(payload => {\n payload.code = payload.componentInstance.$options.render.toString();\n });\n api.on.getComponentInstances(() => {\n console.warn('on.getComponentInstances is not implemented for Vue 2');\n });\n },\n\n setupApp(api, appRecord) {\n const {\n Vue\n } = appRecord.options.meta;\n const app = appRecord.options.app; // State editor overrides\n\n api.stateEditor.createDefaultSetCallback = state => {\n return (obj, field, value) => {\n if (state.remove || state.newKey) Vue.delete(obj, field);\n if (!state.remove) Vue.set(obj, state.newKey || field, value);\n };\n }; // Utils\n\n\n injectToUtils();\n (0, events_1.wrapVueForEvents)(app, Vue, api.ctx); // Plugin\n\n (0, plugin_1.setupPlugin)(api, app, Vue); // Perf\n\n (0, perf_js_1.initPerf)(api, app, Vue);\n }\n\n}); // @TODO refactor\n\nfunction injectToUtils() {\n shared_utils_1.backendInjections.getCustomInstanceDetails = data_1.getCustomInstanceDetails;\n\n shared_utils_1.backendInjections.getCustomObjectDetails = () => undefined;\n\n shared_utils_1.backendInjections.instanceMap = tree_1.instanceMap;\n\n shared_utils_1.backendInjections.isVueInstance = val => val._isVue;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0Q7O0FBdEZrQyxDQUFkLENBQVYsQyxDQXlGYjs7QUFDQSxTQUFTLGFBQVQsR0FBc0I7QUFDcEIsbUNBQWtCLHdCQUFsQixHQUE2QywrQkFBN0M7O0FBQ0EsbUNBQWtCLHNCQUFsQixHQUEyQyxNQUFNLFNBQWpEOztBQUNBLG1DQUFrQixXQUFsQixHQUFnQyxrQkFBaEM7O0FBQ0EsbUNBQWtCLGFBQWxCLEdBQWtDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBN0M7QUFDRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2luZGV4LnRzPzZmMzciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJhY2tlbmQgPSB2b2lkIDA7XG5jb25zdCBhcHBfYmFja2VuZF9hcGlfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL2FwcC1iYWNrZW5kLWFwaVwiKTtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuY29uc3QgZGF0YV8xID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy9kYXRhXCIpO1xuY29uc3QgZWxfMSA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudHMvZWxcIik7XG5jb25zdCBwZXJmX2pzXzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL3BlcmYuanNcIik7XG5jb25zdCB0cmVlXzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL3RyZWVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL3V0aWxcIik7XG5jb25zdCBldmVudHNfMSA9IHJlcXVpcmUoXCIuL2V2ZW50c1wiKTtcbmNvbnN0IHBsdWdpbl8xID0gcmVxdWlyZShcIi4vcGx1Z2luXCIpO1xuZXhwb3J0cy5iYWNrZW5kID0gKDAsIGFwcF9iYWNrZW5kX2FwaV8xLmRlZmluZUJhY2tlbmQpKHtcbiAgICBmcmFtZXdvcmtWZXJzaW9uOiAyLFxuICAgIGZlYXR1cmVzOiBbXG4gICAgICAgIGFwcF9iYWNrZW5kX2FwaV8xLkJ1aWx0aW5CYWNrZW5kRmVhdHVyZS5GTFVTSCxcbiAgICBdLFxuICAgIHNldHVwKGFwaSkge1xuICAgICAgICBhcGkub24uZ2V0QXBwUmVjb3JkTmFtZShwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmFwcC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5uYW1lID0gcGF5bG9hZC5hcHAubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBheWxvYWQuYXBwLiRvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLm5hbWUgPSBwYXlsb2FkLmFwcC4kb3B0aW9ucy5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldEFwcFJvb3RJbnN0YW5jZShwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQucm9vdCA9IHBheWxvYWQuYXBwO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLndhbGtDb21wb25lbnRUcmVlKGFzeW5jIChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQuY29tcG9uZW50VHJlZURhdGEgPSBhd2FpdCAoMCwgdHJlZV8xLndhbGtUcmVlKShwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlLCBwYXlsb2FkLmZpbHRlciwgYXBpLCBjdHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLndhbGtDb21wb25lbnRQYXJlbnRzKChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQucGFyZW50SW5zdGFuY2VzID0gKDAsIHRyZWVfMS5nZXRDb21wb25lbnRQYXJlbnRzKShwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlLCBhcGksIGN0eCk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uaW5zcGVjdENvbXBvbmVudChwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIGluamVjdFRvVXRpbHMoKTtcbiAgICAgICAgICAgIHBheWxvYWQuaW5zdGFuY2VEYXRhID0gKDAsIGRhdGFfMS5nZXRJbnN0YW5jZURldGFpbHMpKHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldENvbXBvbmVudEJvdW5kcyhwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQuYm91bmRzID0gKDAsIGVsXzEuZ2V0SW5zdGFuY2VPclZub2RlUmVjdCkocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0Q29tcG9uZW50TmFtZShwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgICAgIHBheWxvYWQubmFtZSA9IGluc3RhbmNlLmZuQ29udGV4dCA/ICgwLCBzaGFyZWRfdXRpbHNfMS5nZXRDb21wb25lbnROYW1lKShpbnN0YW5jZS5mbk9wdGlvbnMpIDogKDAsIHV0aWxfMS5nZXRJbnN0YW5jZU5hbWUpKGluc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRFbGVtZW50Q29tcG9uZW50KHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSA9ICgwLCBlbF8xLmZpbmRSZWxhdGVkQ29tcG9uZW50KShwYXlsb2FkLmVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmVkaXRDb21wb25lbnRTdGF0ZShwYXlsb2FkID0+IHtcbiAgICAgICAgICAgICgwLCBkYXRhXzEuZWRpdFN0YXRlKShwYXlsb2FkLCBhcGkuc3RhdGVFZGl0b3IpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldENvbXBvbmVudFJvb3RFbGVtZW50cyhwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQucm9vdEVsZW1lbnRzID0gKDAsIGVsXzEuZ2V0Um9vdEVsZW1lbnRzRnJvbUNvbXBvbmVudEluc3RhbmNlKShwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRDb21wb25lbnREZXZ0b29sc09wdGlvbnMocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLm9wdGlvbnMgPSBwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlLiRvcHRpb25zLmRldnRvb2xzO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldENvbXBvbmVudFJlbmRlckNvZGUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLmNvZGUgPSBwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlLiRvcHRpb25zLnJlbmRlci50b1N0cmluZygpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldENvbXBvbmVudEluc3RhbmNlcygoKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ29uLmdldENvbXBvbmVudEluc3RhbmNlcyBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIFZ1ZSAyJyk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgc2V0dXBBcHAoYXBpLCBhcHBSZWNvcmQpIHtcbiAgICAgICAgY29uc3QgeyBWdWUgfSA9IGFwcFJlY29yZC5vcHRpb25zLm1ldGE7XG4gICAgICAgIGNvbnN0IGFwcCA9IGFwcFJlY29yZC5vcHRpb25zLmFwcDtcbiAgICAgICAgLy8gU3RhdGUgZWRpdG9yIG92ZXJyaWRlc1xuICAgICAgICBhcGkuc3RhdGVFZGl0b3IuY3JlYXRlRGVmYXVsdFNldENhbGxiYWNrID0gc3RhdGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChvYmosIGZpZWxkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZW1vdmUgfHwgc3RhdGUubmV3S2V5KVxuICAgICAgICAgICAgICAgICAgICBWdWUuZGVsZXRlKG9iaiwgZmllbGQpO1xuICAgICAgICAgICAgICAgIGlmICghc3RhdGUucmVtb3ZlKVxuICAgICAgICAgICAgICAgICAgICBWdWUuc2V0KG9iaiwgc3RhdGUubmV3S2V5IHx8IGZpZWxkLCB2YWx1ZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICAvLyBVdGlsc1xuICAgICAgICBpbmplY3RUb1V0aWxzKCk7XG4gICAgICAgICgwLCBldmVudHNfMS53cmFwVnVlRm9yRXZlbnRzKShhcHAsIFZ1ZSwgYXBpLmN0eCk7XG4gICAgICAgIC8vIFBsdWdpblxuICAgICAgICAoMCwgcGx1Z2luXzEuc2V0dXBQbHVnaW4pKGFwaSwgYXBwLCBWdWUpO1xuICAgICAgICAvLyBQZXJmXG4gICAgICAgICgwLCBwZXJmX2pzXzEuaW5pdFBlcmYpKGFwaSwgYXBwLCBWdWUpO1xuICAgIH0sXG59KTtcbi8vIEBUT0RPIHJlZmFjdG9yXG5mdW5jdGlvbiBpbmplY3RUb1V0aWxzKCkge1xuICAgIHNoYXJlZF91dGlsc18xLmJhY2tlbmRJbmplY3Rpb25zLmdldEN1c3RvbUluc3RhbmNlRGV0YWlscyA9IGRhdGFfMS5nZXRDdXN0b21JbnN0YW5jZURldGFpbHM7XG4gICAgc2hhcmVkX3V0aWxzXzEuYmFja2VuZEluamVjdGlvbnMuZ2V0Q3VzdG9tT2JqZWN0RGV0YWlscyA9ICgpID0+IHVuZGVmaW5lZDtcbiAgICBzaGFyZWRfdXRpbHNfMS5iYWNrZW5kSW5qZWN0aW9ucy5pbnN0YW5jZU1hcCA9IHRyZWVfMS5pbnN0YW5jZU1hcDtcbiAgICBzaGFyZWRfdXRpbHNfMS5iYWNrZW5kSW5qZWN0aW9ucy5pc1Z1ZUluc3RhbmNlID0gdmFsID0+IHZhbC5faXNWdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///88690\n");
334
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.backend = void 0;\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst data_1 = __webpack_require__(4465);\n\nconst el_1 = __webpack_require__(66351);\n\nconst perf_js_1 = __webpack_require__(82639);\n\nconst tree_1 = __webpack_require__(18059);\n\nconst update_tracking_js_1 = __webpack_require__(44615);\n\nconst util_1 = __webpack_require__(95136);\n\nconst events_1 = __webpack_require__(16935);\n\nconst plugin_1 = __webpack_require__(7725);\n\nexports.backend = (0, app_backend_api_1.defineBackend)({\n frameworkVersion: 2,\n features: [app_backend_api_1.BuiltinBackendFeature.FLUSH],\n\n setup(api) {\n api.on.getAppRecordName(payload => {\n if (payload.app.name) {\n payload.name = payload.app.name;\n } else if (payload.app.$options.name) {\n payload.name = payload.app.$options.name;\n }\n });\n api.on.getAppRootInstance(payload => {\n payload.root = payload.app;\n });\n api.on.walkComponentTree(async (payload, ctx) => {\n payload.componentTreeData = await (0, tree_1.walkTree)(payload.componentInstance, payload.filter, api, ctx);\n });\n api.on.walkComponentParents((payload, ctx) => {\n payload.parentInstances = (0, tree_1.getComponentParents)(payload.componentInstance, api, ctx);\n });\n api.on.inspectComponent(payload => {\n injectToUtils();\n payload.instanceData = (0, data_1.getInstanceDetails)(payload.componentInstance);\n });\n api.on.getComponentBounds(payload => {\n payload.bounds = (0, el_1.getInstanceOrVnodeRect)(payload.componentInstance);\n });\n api.on.getComponentName(payload => {\n const instance = payload.componentInstance;\n payload.name = instance.fnContext ? (0, shared_utils_1.getComponentName)(instance.fnOptions) : (0, util_1.getInstanceName)(instance);\n });\n api.on.getElementComponent(payload => {\n payload.componentInstance = (0, el_1.findRelatedComponent)(payload.element);\n });\n api.on.editComponentState(payload => {\n (0, data_1.editState)(payload, api.stateEditor);\n });\n api.on.getComponentRootElements(payload => {\n payload.rootElements = (0, el_1.getRootElementsFromComponentInstance)(payload.componentInstance);\n });\n api.on.getComponentDevtoolsOptions(payload => {\n payload.options = payload.componentInstance.$options.devtools;\n });\n api.on.getComponentRenderCode(payload => {\n payload.code = payload.componentInstance.$options.render.toString();\n });\n api.on.getComponentInstances(() => {\n console.warn('on.getComponentInstances is not implemented for Vue 2');\n });\n },\n\n setupApp(api, appRecord) {\n const {\n Vue\n } = appRecord.options.meta;\n const app = appRecord.options.app; // State editor overrides\n\n api.stateEditor.createDefaultSetCallback = state => {\n return (obj, field, value) => {\n if (state.remove || state.newKey) Vue.delete(obj, field);\n if (!state.remove) Vue.set(obj, state.newKey || field, value);\n };\n }; // Utils\n\n\n injectToUtils();\n (0, events_1.wrapVueForEvents)(app, Vue, api.ctx); // Plugin\n\n (0, plugin_1.setupPlugin)(api, app, Vue); // Perf\n\n (0, perf_js_1.initPerf)(api, app, Vue); // Update tracking\n\n (0, update_tracking_js_1.initUpdateTracking)(api, Vue);\n }\n\n}); // @TODO refactor\n\nfunction injectToUtils() {\n shared_utils_1.backendInjections.getCustomInstanceDetails = data_1.getCustomInstanceDetails;\n\n shared_utils_1.backendInjections.getCustomObjectDetails = () => undefined;\n\n shared_utils_1.backendInjections.instanceMap = tree_1.instanceMap;\n\n shared_utils_1.backendInjections.isVueInstance = val => val._isVue;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QW5CLEVBcEJzQixDQXFCdEI7O0FBQ0EsaURBQW1CLEdBQW5CLEVBQXdCLEdBQXhCO0FBQ0Q7O0FBeEZrQyxDQUFkLENBQVYsQyxDQTJGYjs7QUFDQSxTQUFTLGFBQVQsR0FBc0I7QUFDcEIsbUNBQWtCLHdCQUFsQixHQUE2QywrQkFBN0M7O0FBQ0EsbUNBQWtCLHNCQUFsQixHQUEyQyxNQUFNLFNBQWpEOztBQUNBLG1DQUFrQixXQUFsQixHQUFnQyxrQkFBaEM7O0FBQ0EsbUNBQWtCLGFBQWxCLEdBQWtDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBN0M7QUFDRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2luZGV4LnRzPzZmMzciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJhY2tlbmQgPSB2b2lkIDA7XG5jb25zdCBhcHBfYmFja2VuZF9hcGlfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL2FwcC1iYWNrZW5kLWFwaVwiKTtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuY29uc3QgZGF0YV8xID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy9kYXRhXCIpO1xuY29uc3QgZWxfMSA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudHMvZWxcIik7XG5jb25zdCBwZXJmX2pzXzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL3BlcmYuanNcIik7XG5jb25zdCB0cmVlXzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL3RyZWVcIik7XG5jb25zdCB1cGRhdGVfdHJhY2tpbmdfanNfMSA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudHMvdXBkYXRlLXRyYWNraW5nLmpzXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy91dGlsXCIpO1xuY29uc3QgZXZlbnRzXzEgPSByZXF1aXJlKFwiLi9ldmVudHNcIik7XG5jb25zdCBwbHVnaW5fMSA9IHJlcXVpcmUoXCIuL3BsdWdpblwiKTtcbmV4cG9ydHMuYmFja2VuZCA9ICgwLCBhcHBfYmFja2VuZF9hcGlfMS5kZWZpbmVCYWNrZW5kKSh7XG4gICAgZnJhbWV3b3JrVmVyc2lvbjogMixcbiAgICBmZWF0dXJlczogW1xuICAgICAgICBhcHBfYmFja2VuZF9hcGlfMS5CdWlsdGluQmFja2VuZEZlYXR1cmUuRkxVU0gsXG4gICAgXSxcbiAgICBzZXR1cChhcGkpIHtcbiAgICAgICAgYXBpLm9uLmdldEFwcFJlY29yZE5hbWUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBpZiAocGF5bG9hZC5hcHAubmFtZSkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQubmFtZSA9IHBheWxvYWQuYXBwLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwYXlsb2FkLmFwcC4kb3B0aW9ucy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5uYW1lID0gcGF5bG9hZC5hcHAuJG9wdGlvbnMubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRBcHBSb290SW5zdGFuY2UocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLnJvb3QgPSBwYXlsb2FkLmFwcDtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi53YWxrQ29tcG9uZW50VHJlZShhc3luYyAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLmNvbXBvbmVudFRyZWVEYXRhID0gYXdhaXQgKDAsIHRyZWVfMS53YWxrVHJlZSkocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSwgcGF5bG9hZC5maWx0ZXIsIGFwaSwgY3R4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi53YWxrQ29tcG9uZW50UGFyZW50cygocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLnBhcmVudEluc3RhbmNlcyA9ICgwLCB0cmVlXzEuZ2V0Q29tcG9uZW50UGFyZW50cykocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSwgYXBpLCBjdHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmluc3BlY3RDb21wb25lbnQocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBpbmplY3RUb1V0aWxzKCk7XG4gICAgICAgICAgICBwYXlsb2FkLmluc3RhbmNlRGF0YSA9ICgwLCBkYXRhXzEuZ2V0SW5zdGFuY2VEZXRhaWxzKShwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRDb21wb25lbnRCb3VuZHMocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLmJvdW5kcyA9ICgwLCBlbF8xLmdldEluc3RhbmNlT3JWbm9kZVJlY3QpKHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldENvbXBvbmVudE5hbWUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgICAgICBwYXlsb2FkLm5hbWUgPSBpbnN0YW5jZS5mbkNvbnRleHQgPyAoMCwgc2hhcmVkX3V0aWxzXzEuZ2V0Q29tcG9uZW50TmFtZSkoaW5zdGFuY2UuZm5PcHRpb25zKSA6ICgwLCB1dGlsXzEuZ2V0SW5zdGFuY2VOYW1lKShpbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0RWxlbWVudENvbXBvbmVudChwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UgPSAoMCwgZWxfMS5maW5kUmVsYXRlZENvbXBvbmVudCkocGF5bG9hZC5lbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5lZGl0Q29tcG9uZW50U3RhdGUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAoMCwgZGF0YV8xLmVkaXRTdGF0ZSkocGF5bG9hZCwgYXBpLnN0YXRlRWRpdG9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRDb21wb25lbnRSb290RWxlbWVudHMocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLnJvb3RFbGVtZW50cyA9ICgwLCBlbF8xLmdldFJvb3RFbGVtZW50c0Zyb21Db21wb25lbnRJbnN0YW5jZSkocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0Q29tcG9uZW50RGV2dG9vbHNPcHRpb25zKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5vcHRpb25zID0gcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZS4kb3B0aW9ucy5kZXZ0b29scztcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRDb21wb25lbnRSZW5kZXJDb2RlKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5jb2RlID0gcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZS4kb3B0aW9ucy5yZW5kZXIudG9TdHJpbmcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRDb21wb25lbnRJbnN0YW5jZXMoKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdvbi5nZXRDb21wb25lbnRJbnN0YW5jZXMgaXMgbm90IGltcGxlbWVudGVkIGZvciBWdWUgMicpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHNldHVwQXBwKGFwaSwgYXBwUmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHsgVnVlIH0gPSBhcHBSZWNvcmQub3B0aW9ucy5tZXRhO1xuICAgICAgICBjb25zdCBhcHAgPSBhcHBSZWNvcmQub3B0aW9ucy5hcHA7XG4gICAgICAgIC8vIFN0YXRlIGVkaXRvciBvdmVycmlkZXNcbiAgICAgICAgYXBpLnN0YXRlRWRpdG9yLmNyZWF0ZURlZmF1bHRTZXRDYWxsYmFjayA9IHN0YXRlID0+IHtcbiAgICAgICAgICAgIHJldHVybiAob2JqLCBmaWVsZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUucmVtb3ZlIHx8IHN0YXRlLm5ld0tleSlcbiAgICAgICAgICAgICAgICAgICAgVnVlLmRlbGV0ZShvYmosIGZpZWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLnJlbW92ZSlcbiAgICAgICAgICAgICAgICAgICAgVnVlLnNldChvYmosIHN0YXRlLm5ld0tleSB8fCBmaWVsZCwgdmFsdWUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVXRpbHNcbiAgICAgICAgaW5qZWN0VG9VdGlscygpO1xuICAgICAgICAoMCwgZXZlbnRzXzEud3JhcFZ1ZUZvckV2ZW50cykoYXBwLCBWdWUsIGFwaS5jdHgpO1xuICAgICAgICAvLyBQbHVnaW5cbiAgICAgICAgKDAsIHBsdWdpbl8xLnNldHVwUGx1Z2luKShhcGksIGFwcCwgVnVlKTtcbiAgICAgICAgLy8gUGVyZlxuICAgICAgICAoMCwgcGVyZl9qc18xLmluaXRQZXJmKShhcGksIGFwcCwgVnVlKTtcbiAgICAgICAgLy8gVXBkYXRlIHRyYWNraW5nXG4gICAgICAgICgwLCB1cGRhdGVfdHJhY2tpbmdfanNfMS5pbml0VXBkYXRlVHJhY2tpbmcpKGFwaSwgVnVlKTtcbiAgICB9LFxufSk7XG4vLyBAVE9ETyByZWZhY3RvclxuZnVuY3Rpb24gaW5qZWN0VG9VdGlscygpIHtcbiAgICBzaGFyZWRfdXRpbHNfMS5iYWNrZW5kSW5qZWN0aW9ucy5nZXRDdXN0b21JbnN0YW5jZURldGFpbHMgPSBkYXRhXzEuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzO1xuICAgIHNoYXJlZF91dGlsc18xLmJhY2tlbmRJbmplY3Rpb25zLmdldEN1c3RvbU9iamVjdERldGFpbHMgPSAoKSA9PiB1bmRlZmluZWQ7XG4gICAgc2hhcmVkX3V0aWxzXzEuYmFja2VuZEluamVjdGlvbnMuaW5zdGFuY2VNYXAgPSB0cmVlXzEuaW5zdGFuY2VNYXA7XG4gICAgc2hhcmVkX3V0aWxzXzEuYmFja2VuZEluamVjdGlvbnMuaXNWdWVJbnN0YW5jZSA9IHZhbCA9PiB2YWwuX2lzVnVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///88690\n");
327
335
 
328
336
  /***/ }),
329
337
 
@@ -331,7 +339,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
331
339
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
332
340
 
333
341
  "use strict";
334
- eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.setupPlugin = void 0;\n\nconst devtools_api_1 = __webpack_require__(72039);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst clone_deep_1 = __importDefault(__webpack_require__(96206));\n\nlet actionId = 0;\n\nfunction setupPlugin(api, app, Vue) {\n const ROUTER_INSPECTOR_ID = 'vue2-router-inspector';\n const ROUTER_CHANGES_LAYER_ID = 'vue2-router-changes';\n const VUEX_INSPECTOR_ID = 'vue2-vuex-inspector';\n const VUEX_MUTATIONS_ID = 'vue2-vuex-mutations';\n const VUEX_ACTIONS_ID = 'vue2-vuex-actions';\n (0, devtools_api_1.setupDevtoolsPlugin)({\n app,\n id: 'org.vuejs.vue2-internal',\n label: 'Vue 2',\n homepage: 'https://vuejs.org/',\n logo: 'https://vuejs.org/images/icons/favicon-96x96.png',\n settings: {\n legacyActions: {\n label: 'Legacy Actions',\n description: 'Enable this for Vuex < 3.1.0',\n type: 'boolean',\n defaultValue: false\n }\n }\n }, api => {\n var _a;\n\n const hook = shared_utils_1.target.__VUE_DEVTOOLS_GLOBAL_HOOK__; // Vue Router\n\n if (app.$router) {\n const router = app.$router; // Inspector\n\n api.addInspector({\n id: ROUTER_INSPECTOR_ID,\n label: 'Routes',\n icon: 'book',\n treeFilterPlaceholder: 'Search routes'\n });\n api.on.getInspectorTree(payload => {\n if (payload.inspectorId === ROUTER_INSPECTOR_ID) {\n if (router.options.routes) {\n payload.rootNodes = router.options.routes.map(route => formatRouteNode(router, route, '', payload.filter)).filter(Boolean);\n } else {\n console.warn(`[Vue Devtools] No routes found in router`, router.options);\n }\n }\n });\n api.on.getInspectorState(payload => {\n if (payload.inspectorId === ROUTER_INSPECTOR_ID) {\n const route = router.matcher.getRoutes().find(r => getPathId(r) === payload.nodeId);\n\n if (route) {\n payload.state = {\n options: formatRouteData(route)\n };\n }\n }\n }); // Timeline\n\n api.addTimelineLayer({\n id: ROUTER_CHANGES_LAYER_ID,\n label: 'Router Navigations',\n color: 0x40a8c4\n });\n router.afterEach((to, from) => {\n api.addTimelineEvent({\n layerId: ROUTER_CHANGES_LAYER_ID,\n event: {\n time: api.now(),\n title: to.path,\n data: {\n from,\n to\n }\n }\n });\n api.sendInspectorTree(ROUTER_INSPECTOR_ID);\n });\n } // Vuex\n\n\n if (app.$store) {\n const store = app.$store;\n api.addInspector({\n id: VUEX_INSPECTOR_ID,\n label: 'Vuex',\n icon: 'storage',\n treeFilterPlaceholder: 'Filter stores...'\n });\n api.on.getInspectorTree(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n if (payload.filter) {\n const nodes = [];\n flattenStoreForInspectorTree(nodes, store._modules.root, payload.filter, '');\n payload.rootNodes = nodes;\n } else {\n payload.rootNodes = [formatStoreForInspectorTree(store._modules.root, 'Root', '')];\n }\n }\n });\n api.on.getInspectorState(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n const modulePath = payload.nodeId;\n const module = getStoreModule(store._modules, modulePath); // Access the getters prop to init getters cache (which is lazy)\n // eslint-disable-next-line no-unused-expressions\n\n module.context.getters;\n payload.state = formatStoreForInspectorState(module, store._makeLocalGettersCache, modulePath);\n }\n });\n api.on.editInspectorState(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n let path = payload.path;\n\n if (payload.nodeId !== VUEX_ROOT_PATH) {\n path = [...payload.nodeId.split(VUEX_MODULE_PATH_SEPARATOR).slice(0, -1), ...path];\n }\n\n store._committing = true;\n payload.set(store._vm.$data.$$state, path);\n store._committing = false;\n }\n });\n api.addTimelineLayer({\n id: VUEX_MUTATIONS_ID,\n label: 'Vuex Mutations',\n color: LIME_500\n });\n api.addTimelineLayer({\n id: VUEX_ACTIONS_ID,\n label: 'Vuex Actions',\n color: LIME_500\n });\n hook.on('vuex:mutation', (mutation, state) => {\n api.sendInspectorState(VUEX_INSPECTOR_ID);\n const data = {};\n\n if (mutation.payload) {\n data.payload = mutation.payload;\n }\n\n data.state = (0, clone_deep_1.default)(state);\n api.addTimelineEvent({\n layerId: VUEX_MUTATIONS_ID,\n event: {\n time: api.now(),\n title: mutation.type,\n data\n }\n });\n });\n\n function legacySingleActionSub(action, state) {\n const data = {};\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: api.now(),\n title: action.type,\n data\n }\n });\n }\n\n (_a = store.subscribeAction) === null || _a === void 0 ? void 0 : _a.call(store, api.getSettings().legacyActions ? legacySingleActionSub : {\n before: (action, state) => {\n const data = {};\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n action._id = actionId++;\n action._time = api.now();\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: action._time,\n title: action.type,\n groupId: action._id,\n subtitle: 'start',\n data\n }\n });\n },\n after: (action, state) => {\n const data = {};\n\n const duration = api.now() - action._time;\n\n data.duration = {\n _custom: {\n type: 'duration',\n display: `${duration}ms`,\n tooltip: 'Action duration',\n value: duration\n }\n };\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: api.now(),\n title: action.type,\n groupId: action._id,\n subtitle: 'end',\n data\n }\n });\n }\n }, {\n prepend: true\n }); // Inspect getters on mutations\n\n api.on.inspectTimelineEvent(payload => {\n if (payload.layerId === VUEX_MUTATIONS_ID) {\n const getterKeys = Object.keys(store.getters);\n\n if (getterKeys.length) {\n const vm = new Vue({\n data: {\n $$state: payload.data.state\n },\n computed: store._vm.$options.computed\n });\n const originalVm = store._vm;\n store._vm = vm;\n const tree = transformPathsToObjectTree(store.getters);\n payload.data.getters = (0, clone_deep_1.default)(tree);\n store._vm = originalVm;\n vm.$destroy();\n }\n }\n });\n }\n });\n}\n\nexports.setupPlugin = setupPlugin;\n/**\n * Extracted from tailwind palette\n */\n\nconst BLUE_600 = 0x2563eb;\nconst LIME_500 = 0x84cc16;\nconst CYAN_400 = 0x22d3ee;\nconst ORANGE_400 = 0xfb923c;\nconst WHITE = 0xffffff;\nconst DARK = 0x666666;\n\nfunction formatRouteNode(router, route, parentPath, filter) {\n var _a, _b;\n\n const node = {\n id: route.path.startsWith('/') ? route.path : `${parentPath}/${route.path}`,\n label: route.path,\n children: (_a = route.children) === null || _a === void 0 ? void 0 : _a.map(child => formatRouteNode(router, child, route.path, filter)).filter(Boolean),\n tags: []\n };\n if (filter && !node.id.includes(filter) && !((_b = node.children) === null || _b === void 0 ? void 0 : _b.length)) return null;\n\n if (route.name != null) {\n node.tags.push({\n label: String(route.name),\n textColor: 0,\n backgroundColor: CYAN_400\n });\n }\n\n if (route.alias != null) {\n node.tags.push({\n label: 'alias',\n textColor: 0,\n backgroundColor: ORANGE_400\n });\n }\n\n if (node.id === router.currentRoute.path) {\n node.tags.push({\n label: 'active',\n textColor: WHITE,\n backgroundColor: BLUE_600\n });\n }\n\n if (route.redirect) {\n node.tags.push({\n label: 'redirect: ' + (typeof route.redirect === 'string' ? route.redirect : 'Object'),\n textColor: WHITE,\n backgroundColor: DARK\n });\n }\n\n return node;\n}\n\nfunction formatRouteData(route) {\n const data = [];\n data.push({\n key: 'path',\n value: route.path\n });\n\n if (route.redirect) {\n data.push({\n key: 'redirect',\n value: route.redirect\n });\n }\n\n if (route.alias) {\n data.push({\n key: 'alias',\n value: route.alias\n });\n }\n\n if (route.props) {\n data.push({\n key: 'props',\n value: route.props\n });\n }\n\n if (route.name && route.name != null) {\n data.push({\n key: 'name',\n value: route.name\n });\n }\n\n if (route.component) {\n const component = {}; // if (route.component.__file) {\n // component.file = route.component.__file\n // }\n\n if (route.component.template) {\n component.template = route.component.template;\n }\n\n if (route.component.props) {\n component.props = route.component.props;\n }\n\n if (!(0, shared_utils_1.isEmptyObject)(component)) {\n data.push({\n key: 'component',\n value: component\n });\n }\n }\n\n return data;\n}\n\nfunction getPathId(routeMatcher) {\n let path = routeMatcher.path;\n\n if (routeMatcher.parent) {\n path = getPathId(routeMatcher.parent) + path;\n }\n\n return path;\n}\n\nconst TAG_NAMESPACED = {\n label: 'namespaced',\n textColor: WHITE,\n backgroundColor: DARK\n};\nconst VUEX_ROOT_PATH = '__vdt_root';\nconst VUEX_MODULE_PATH_SEPARATOR = '[vdt]';\nconst VUEX_MODULE_PATH_SEPARATOR_REG = /\\[vdt\\]/g;\n\nfunction formatStoreForInspectorTree(module, moduleName, path) {\n var _a;\n\n return {\n id: path || VUEX_ROOT_PATH,\n // all modules end with a `/`, we want the last segment only\n // cart/ -> cart\n // nested/cart/ -> cart\n label: moduleName,\n tags: module.namespaced ? [TAG_NAMESPACED] : [],\n children: Object.keys((_a = module._children) !== null && _a !== void 0 ? _a : {}).map(key => formatStoreForInspectorTree(module._children[key], key, `${path}${key}${VUEX_MODULE_PATH_SEPARATOR}`))\n };\n}\n\nfunction flattenStoreForInspectorTree(result, module, filter, path) {\n if (path.includes(filter)) {\n result.push({\n id: path || VUEX_ROOT_PATH,\n label: path.endsWith(VUEX_MODULE_PATH_SEPARATOR) ? path.slice(0, path.length - 1) : path || 'Root',\n tags: module.namespaced ? [TAG_NAMESPACED] : []\n });\n }\n\n Object.keys(module._children).forEach(moduleName => {\n flattenStoreForInspectorTree(result, module._children[moduleName], filter, path + moduleName + VUEX_MODULE_PATH_SEPARATOR);\n });\n}\n\nfunction extractNameFromPath(path) {\n return path && path !== VUEX_ROOT_PATH ? path.split(VUEX_MODULE_PATH_SEPARATOR).slice(-2, -1)[0] : 'Root';\n}\n\nfunction formatStoreForInspectorState(module, getters, path) {\n var _a, _b;\n\n const storeState = {\n state: Object.keys((_a = module.context.state) !== null && _a !== void 0 ? _a : {}).map(key => ({\n key,\n editable: true,\n value: module.context.state[key]\n }))\n };\n const pathWithSlashes = path.replace(VUEX_MODULE_PATH_SEPARATOR_REG, '/');\n getters = !module.namespaced || path === VUEX_ROOT_PATH ? module.context.getters : getters[pathWithSlashes];\n let gettersKeys = Object.keys(getters);\n const shouldPickGetters = !module.namespaced && path !== VUEX_ROOT_PATH;\n\n if (shouldPickGetters) {\n // Only pick the getters defined in the non-namespaced module\n const definedGettersKeys = Object.keys((_b = module._rawModule.getters) !== null && _b !== void 0 ? _b : {});\n gettersKeys = gettersKeys.filter(key => definedGettersKeys.includes(key));\n }\n\n if (gettersKeys.length) {\n let moduleGetters;\n\n if (shouldPickGetters) {\n // Only pick the getters defined in the non-namespaced module\n moduleGetters = {};\n\n for (const key of gettersKeys) {\n moduleGetters[key] = canThrow(() => getters[key]);\n }\n } else {\n moduleGetters = getters;\n }\n\n const tree = transformPathsToObjectTree(moduleGetters);\n storeState.getters = Object.keys(tree).map(key => ({\n key: key.endsWith('/') ? extractNameFromPath(key) : key,\n editable: false,\n value: canThrow(() => tree[key])\n }));\n }\n\n return storeState;\n}\n\nfunction transformPathsToObjectTree(getters) {\n const result = {};\n Object.keys(getters).forEach(key => {\n const path = key.split('/');\n\n if (path.length > 1) {\n let target = result;\n const leafKey = path.pop();\n\n for (const p of path) {\n if (!target[p]) {\n target[p] = {\n _custom: {\n value: {},\n display: p,\n tooltip: 'Module',\n abstract: true\n }\n };\n }\n\n target = target[p]._custom.value;\n }\n\n target[leafKey] = canThrow(() => getters[key]);\n } else {\n result[key] = canThrow(() => getters[key]);\n }\n });\n return result;\n}\n\nfunction getStoreModule(moduleMap, path) {\n const names = path.split(VUEX_MODULE_PATH_SEPARATOR).filter(n => n);\n return names.reduce((module, moduleName, i) => {\n const child = module[moduleName === VUEX_ROOT_PATH ? 'root' : moduleName];\n\n if (!child) {\n throw new Error(`Missing module \"${moduleName}\" for path \"${path}\".`);\n }\n\n return i === names.length - 1 ? child : child._children;\n }, path === VUEX_ROOT_PATH ? moduleMap : moduleMap.root._children);\n}\n\nfunction canThrow(cb) {\n try {\n return cb();\n } catch (e) {\n return e;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFNBQXpCLEVBQW9DLElBQXBDLEVBQXdDO0FBQ3RDLFFBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFMLENBQVcsMEJBQVgsRUFBdUMsTUFBdkMsQ0FBK0MsQ0FBRCxJQUFPLENBQXJELENBQWQ7QUFDQSxTQUFPLEtBQUssQ0FBQyxNQUFOLENBQ0wsQ0FBQyxNQUFELEVBQVMsVUFBVCxFQUFxQixDQUFyQixLQUEwQjtBQUN4QixVQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxLQUFLLGNBQWYsR0FBZ0MsTUFBaEMsR0FBeUMsVUFBMUMsQ0FBcEI7O0FBQ0EsUUFBSSxDQUFDLEtBQUwsRUFBWTtBQUNWLFlBQU0sSUFBSSxLQUFKLENBQVUsbUJBQW1CLFVBQVUsZUFBZSxJQUFJLElBQTFELENBQU47QUFDRDs7QUFDRCxXQUFPLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTixHQUFlLENBQXJCLEdBQXlCLEtBQXpCLEdBQWlDLEtBQUssQ0FBQyxTQUE5QztBQUNELEdBUEksRUFRTCxJQUFJLEtBQUssY0FBVCxHQUEwQixTQUExQixHQUFzQyxTQUFTLENBQUMsSUFBVixDQUFlLFNBUmhELENBQVA7QUFVRDs7QUFFRCxTQUFTLFFBQVQsQ0FBbUIsRUFBbkIsRUFBZ0M7QUFDOUIsTUFBSTtBQUNGLFdBQU8sRUFBRSxFQUFUO0FBQ0QsR0FGRCxDQUVFLE9BQU8sQ0FBUCxFQUFVO0FBQ1YsV0FBTyxDQUFQO0FBQ0Q7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3BsdWdpbi50cz8wY2NhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXR1cFBsdWdpbiA9IHZvaWQgMDtcbmNvbnN0IGRldnRvb2xzX2FwaV8xID0gcmVxdWlyZShcIkB2dWUvZGV2dG9vbHMtYXBpXCIpO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBjbG9uZV9kZWVwXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsb25lLWRlZXBcIikpO1xubGV0IGFjdGlvbklkID0gMDtcbmZ1bmN0aW9uIHNldHVwUGx1Z2luKGFwaSwgYXBwLCBWdWUpIHtcbiAgICBjb25zdCBST1VURVJfSU5TUEVDVE9SX0lEID0gJ3Z1ZTItcm91dGVyLWluc3BlY3Rvcic7XG4gICAgY29uc3QgUk9VVEVSX0NIQU5HRVNfTEFZRVJfSUQgPSAndnVlMi1yb3V0ZXItY2hhbmdlcyc7XG4gICAgY29uc3QgVlVFWF9JTlNQRUNUT1JfSUQgPSAndnVlMi12dWV4LWluc3BlY3Rvcic7XG4gICAgY29uc3QgVlVFWF9NVVRBVElPTlNfSUQgPSAndnVlMi12dWV4LW11dGF0aW9ucyc7XG4gICAgY29uc3QgVlVFWF9BQ1RJT05TX0lEID0gJ3Z1ZTItdnVleC1hY3Rpb25zJztcbiAgICAoMCwgZGV2dG9vbHNfYXBpXzEuc2V0dXBEZXZ0b29sc1BsdWdpbikoe1xuICAgICAgICBhcHAsXG4gICAgICAgIGlkOiAnb3JnLnZ1ZWpzLnZ1ZTItaW50ZXJuYWwnLFxuICAgICAgICBsYWJlbDogJ1Z1ZSAyJyxcbiAgICAgICAgaG9tZXBhZ2U6ICdodHRwczovL3Z1ZWpzLm9yZy8nLFxuICAgICAgICBsb2dvOiAnaHR0cHM6Ly92dWVqcy5vcmcvaW1hZ2VzL2ljb25zL2Zhdmljb24tOTZ4OTYucG5nJyxcbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAgIGxlZ2FjeUFjdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0xlZ2FjeSBBY3Rpb25zJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0VuYWJsZSB0aGlzIGZvciBWdWV4IDwgMy4xLjAnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LCBhcGkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGhvb2sgPSBzaGFyZWRfdXRpbHNfMS50YXJnZXQuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbiAgICAgICAgLy8gVnVlIFJvdXRlclxuICAgICAgICBpZiAoYXBwLiRyb3V0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlciA9IGFwcC4kcm91dGVyO1xuICAgICAgICAgICAgLy8gSW5zcGVjdG9yXG4gICAgICAgICAgICBhcGkuYWRkSW5zcGVjdG9yKHtcbiAgICAgICAgICAgICAgICBpZDogUk9VVEVSX0lOU1BFQ1RPUl9JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1JvdXRlcycsXG4gICAgICAgICAgICAgICAgaWNvbjogJ2Jvb2snLFxuICAgICAgICAgICAgICAgIHRyZWVGaWx0ZXJQbGFjZWhvbGRlcjogJ1NlYXJjaCByb3V0ZXMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yVHJlZShwYXlsb2FkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gUk9VVEVSX0lOU1BFQ1RPUl9JRCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGVyLm9wdGlvbnMucm91dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3ROb2RlcyA9IHJvdXRlci5vcHRpb25zLnJvdXRlcy5tYXAocm91dGUgPT4gZm9ybWF0Um91dGVOb2RlKHJvdXRlciwgcm91dGUsICcnLCBwYXlsb2FkLmZpbHRlcikpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgW1Z1ZSBEZXZ0b29sc10gTm8gcm91dGVzIGZvdW5kIGluIHJvdXRlcmAsIHJvdXRlci5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclN0YXRlKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmluc3BlY3RvcklkID09PSBST1VURVJfSU5TUEVDVE9SX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gcm91dGVyLm1hdGNoZXIuZ2V0Um91dGVzKCkuZmluZChyID0+IGdldFBhdGhJZChyKSA9PT0gcGF5bG9hZC5ub2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuc3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZm9ybWF0Um91dGVEYXRhKHJvdXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFRpbWVsaW5lXG4gICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVMYXllcih7XG4gICAgICAgICAgICAgICAgaWQ6IFJPVVRFUl9DSEFOR0VTX0xBWUVSX0lELFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnUm91dGVyIE5hdmlnYXRpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogMHg0MGE4YzQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJvdXRlci5hZnRlckVhY2goKHRvLCBmcm9tKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBST1VURVJfQ0hBTkdFU19MQVlFUl9JRCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGFwaS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0by5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yVHJlZShST1VURVJfSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZ1ZXhcbiAgICAgICAgaWYgKGFwcC4kc3RvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gYXBwLiRzdG9yZTtcbiAgICAgICAgICAgIGFwaS5hZGRJbnNwZWN0b3Ioe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX0lOU1BFQ1RPUl9JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXgnLFxuICAgICAgICAgICAgICAgIGljb246ICdzdG9yYWdlJyxcbiAgICAgICAgICAgICAgICB0cmVlRmlsdGVyUGxhY2Vob2xkZXI6ICdGaWx0ZXIgc3RvcmVzLi4uJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclRyZWUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShub2Rlcywgc3RvcmUuX21vZHVsZXMucm9vdCwgcGF5bG9hZC5maWx0ZXIsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQucm9vdE5vZGVzID0gbm9kZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3ROb2RlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUoc3RvcmUuX21vZHVsZXMucm9vdCwgJ1Jvb3QnLCAnJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yU3RhdGUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlUGF0aCA9IHBheWxvYWQubm9kZUlkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBnZXRTdG9yZU1vZHVsZShzdG9yZS5fbW9kdWxlcywgbW9kdWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFjY2VzcyB0aGUgZ2V0dGVycyBwcm9wIHRvIGluaXQgZ2V0dGVycyBjYWNoZSAod2hpY2ggaXMgbGF6eSlcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuY29udGV4dC5nZXR0ZXJzO1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnN0YXRlID0gZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JTdGF0ZShtb2R1bGUsIHN0b3JlLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGUsIG1vZHVsZVBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmVkaXRJbnNwZWN0b3JTdGF0ZSgocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmluc3BlY3RvcklkID09PSBWVUVYX0lOU1BFQ1RPUl9JRCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IHBheWxvYWQucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubm9kZUlkICE9PSBWVUVYX1JPT1RfUEFUSCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXlsb2FkLm5vZGVJZC5zcGxpdChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikuc2xpY2UoMCwgLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLl9jb21taXR0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zZXQoc3RvcmUuX3ZtLiRkYXRhLiQkc3RhdGUsIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5fY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lTGF5ZXIoe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX01VVEFUSU9OU19JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXggTXV0YXRpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogTElNRV81MDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgICAgICAgICBpZDogVlVFWF9BQ1RJT05TX0lELFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVnVleCBBY3Rpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogTElNRV81MDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGhvb2sub24oJ3Z1ZXg6bXV0YXRpb24nLCAobXV0YXRpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JTdGF0ZShWVUVYX0lOU1BFQ1RPUl9JRCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucGF5bG9hZCA9IG11dGF0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSAoMCwgY2xvbmVfZGVlcF8xLmRlZmF1bHQpKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfTVVUQVRJT05TX0lELFxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogYXBpLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG11dGF0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmdW5jdGlvbiBsZWdhY3lTaW5nbGVBY3Rpb25TdWIoYWN0aW9uLCBzdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfQUNUSU9OU19JRCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGFwaS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhY3Rpb24udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoX2EgPSBzdG9yZS5zdWJzY3JpYmVBY3Rpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHN0b3JlLCBhcGkuZ2V0U2V0dGluZ3MoKS5sZWdhY3lBY3Rpb25zXG4gICAgICAgICAgICAgICAgPyBsZWdhY3lTaW5nbGVBY3Rpb25TdWJcbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlOiAoYWN0aW9uLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uX2lkID0gYWN0aW9uSWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5fdGltZSA9IGFwaS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX0FDVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogYWN0aW9uLl90aW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGlvbi5faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXI6IChhY3Rpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGFwaS5ub3coKSAtIGFjdGlvbi5fdGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZHVyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBgJHtkdXJhdGlvbn1tc2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdBY3Rpb24gZHVyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZHVyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX0FDVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogYXBpLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGlvbi5faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiAnZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSwgeyBwcmVwZW5kOiB0cnVlIH0pO1xuICAgICAgICAgICAgLy8gSW5zcGVjdCBnZXR0ZXJzIG9uIG11dGF0aW9uc1xuICAgICAgICAgICAgYXBpLm9uLmluc3BlY3RUaW1lbGluZUV2ZW50KHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmxheWVySWQgPT09IFZVRVhfTVVUQVRJT05TX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldHRlcktleXMgPSBPYmplY3Qua2V5cyhzdG9yZS5nZXR0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldHRlcktleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2bSA9IG5ldyBWdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCRzdGF0ZTogcGF5bG9hZC5kYXRhLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IHN0b3JlLl92bS4kb3B0aW9ucy5jb21wdXRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxWbSA9IHN0b3JlLl92bTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLl92bSA9IHZtO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJlZSA9IHRyYW5zZm9ybVBhdGhzVG9PYmplY3RUcmVlKHN0b3JlLmdldHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5kYXRhLmdldHRlcnMgPSAoMCwgY2xvbmVfZGVlcF8xLmRlZmF1bHQpKHRyZWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuX3ZtID0gb3JpZ2luYWxWbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZtLiRkZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5zZXR1cFBsdWdpbiA9IHNldHVwUGx1Z2luO1xuLyoqXG4gKiBFeHRyYWN0ZWQgZnJvbSB0YWlsd2luZCBwYWxldHRlXG4gKi9cbmNvbnN0IEJMVUVfNjAwID0gMHgyNTYzZWI7XG5jb25zdCBMSU1FXzUwMCA9IDB4ODRjYzE2O1xuY29uc3QgQ1lBTl80MDAgPSAweDIyZDNlZTtcbmNvbnN0IE9SQU5HRV80MDAgPSAweGZiOTIzYztcbmNvbnN0IFdISVRFID0gMHhmZmZmZmY7XG5jb25zdCBEQVJLID0gMHg2NjY2NjY7XG5mdW5jdGlvbiBmb3JtYXRSb3V0ZU5vZGUocm91dGVyLCByb3V0ZSwgcGFyZW50UGF0aCwgZmlsdGVyKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgICBpZDogcm91dGUucGF0aC5zdGFydHNXaXRoKCcvJykgPyByb3V0ZS5wYXRoIDogYCR7cGFyZW50UGF0aH0vJHtyb3V0ZS5wYXRofWAsXG4gICAgICAgIGxhYmVsOiByb3V0ZS5wYXRoLFxuICAgICAgICBjaGlsZHJlbjogKF9hID0gcm91dGUuY2hpbGRyZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXAoY2hpbGQgPT4gZm9ybWF0Um91dGVOb2RlKHJvdXRlciwgY2hpbGQsIHJvdXRlLnBhdGgsIGZpbHRlcikpLmZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgdGFnczogW10sXG4gICAgfTtcbiAgICBpZiAoZmlsdGVyICYmICFub2RlLmlkLmluY2x1ZGVzKGZpbHRlcikgJiYgISgoX2IgPSBub2RlLmNoaWxkcmVuKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubGVuZ3RoKSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgaWYgKHJvdXRlLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogU3RyaW5nKHJvdXRlLm5hbWUpLFxuICAgICAgICAgICAgdGV4dENvbG9yOiAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBDWUFOXzQwMCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5hbGlhcyAhPSBudWxsKSB7XG4gICAgICAgIG5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYWxpYXMnLFxuICAgICAgICAgICAgdGV4dENvbG9yOiAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBPUkFOR0VfNDAwLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG5vZGUuaWQgPT09IHJvdXRlci5jdXJyZW50Um91dGUucGF0aCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogJ2FjdGl2ZScsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IFdISVRFLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBCTFVFXzYwMCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5yZWRpcmVjdCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogJ3JlZGlyZWN0OiAnICtcbiAgICAgICAgICAgICAgICAodHlwZW9mIHJvdXRlLnJlZGlyZWN0ID09PSAnc3RyaW5nJyA/IHJvdXRlLnJlZGlyZWN0IDogJ09iamVjdCcpLFxuICAgICAgICAgICAgdGV4dENvbG9yOiBXSElURSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogREFSSyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gZm9ybWF0Um91dGVEYXRhKHJvdXRlKSB7XG4gICAgY29uc3QgZGF0YSA9IFtdO1xuICAgIGRhdGEucHVzaCh7IGtleTogJ3BhdGgnLCB2YWx1ZTogcm91dGUucGF0aCB9KTtcbiAgICBpZiAocm91dGUucmVkaXJlY3QpIHtcbiAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAncmVkaXJlY3QnLCB2YWx1ZTogcm91dGUucmVkaXJlY3QgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5hbGlhcykge1xuICAgICAgICBkYXRhLnB1c2goeyBrZXk6ICdhbGlhcycsIHZhbHVlOiByb3V0ZS5hbGlhcyB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnByb3BzKSB7XG4gICAgICAgIGRhdGEucHVzaCh7IGtleTogJ3Byb3BzJywgdmFsdWU6IHJvdXRlLnByb3BzIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUubmFtZSAmJiByb3V0ZS5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAnbmFtZScsIHZhbHVlOiByb3V0ZS5uYW1lIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUuY29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHt9O1xuICAgICAgICAvLyBpZiAocm91dGUuY29tcG9uZW50Ll9fZmlsZSkge1xuICAgICAgICAvLyAgIGNvbXBvbmVudC5maWxlID0gcm91dGUuY29tcG9uZW50Ll9fZmlsZVxuICAgICAgICAvLyB9XG4gICAgICAgIGlmIChyb3V0ZS5jb21wb25lbnQudGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC50ZW1wbGF0ZSA9IHJvdXRlLmNvbXBvbmVudC50ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGUuY29tcG9uZW50LnByb3BzKSB7XG4gICAgICAgICAgICBjb21wb25lbnQucHJvcHMgPSByb3V0ZS5jb21wb25lbnQucHJvcHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoMCwgc2hhcmVkX3V0aWxzXzEuaXNFbXB0eU9iamVjdCkoY29tcG9uZW50KSkge1xuICAgICAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAnY29tcG9uZW50JywgdmFsdWU6IGNvbXBvbmVudCB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbmZ1bmN0aW9uIGdldFBhdGhJZChyb3V0ZU1hdGNoZXIpIHtcbiAgICBsZXQgcGF0aCA9IHJvdXRlTWF0Y2hlci5wYXRoO1xuICAgIGlmIChyb3V0ZU1hdGNoZXIucGFyZW50KSB7XG4gICAgICAgIHBhdGggPSBnZXRQYXRoSWQocm91dGVNYXRjaGVyLnBhcmVudCkgKyBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbn1cbmNvbnN0IFRBR19OQU1FU1BBQ0VEID0ge1xuICAgIGxhYmVsOiAnbmFtZXNwYWNlZCcsXG4gICAgdGV4dENvbG9yOiBXSElURSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IERBUkssXG59O1xuY29uc3QgVlVFWF9ST09UX1BBVEggPSAnX192ZHRfcm9vdCc7XG5jb25zdCBWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUiA9ICdbdmR0XSc7XG5jb25zdCBWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUl9SRUcgPSAvXFxbdmR0XFxdL2c7XG5mdW5jdGlvbiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUobW9kdWxlLCBtb2R1bGVOYW1lLCBwYXRoKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwYXRoIHx8IFZVRVhfUk9PVF9QQVRILFxuICAgICAgICAvLyBhbGwgbW9kdWxlcyBlbmQgd2l0aCBhIGAvYCwgd2Ugd2FudCB0aGUgbGFzdCBzZWdtZW50IG9ubHlcbiAgICAgICAgLy8gY2FydC8gLT4gY2FydFxuICAgICAgICAvLyBuZXN0ZWQvY2FydC8gLT4gY2FydFxuICAgICAgICBsYWJlbDogbW9kdWxlTmFtZSxcbiAgICAgICAgdGFnczogbW9kdWxlLm5hbWVzcGFjZWQgPyBbVEFHX05BTUVTUEFDRURdIDogW10sXG4gICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cygoX2EgPSBtb2R1bGUuX2NoaWxkcmVuKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSkubWFwKChrZXkpID0+IGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yVHJlZShtb2R1bGUuX2NoaWxkcmVuW2tleV0sIGtleSwgYCR7cGF0aH0ke2tleX0ke1ZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SfWApKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShyZXN1bHQsIG1vZHVsZSwgZmlsdGVyLCBwYXRoKSB7XG4gICAgaWYgKHBhdGguaW5jbHVkZXMoZmlsdGVyKSkge1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICBpZDogcGF0aCB8fCBWVUVYX1JPT1RfUEFUSCxcbiAgICAgICAgICAgIGxhYmVsOiBwYXRoLmVuZHNXaXRoKFZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SKSA/IHBhdGguc2xpY2UoMCwgcGF0aC5sZW5ndGggLSAxKSA6IHBhdGggfHwgJ1Jvb3QnLFxuICAgICAgICAgICAgdGFnczogbW9kdWxlLm5hbWVzcGFjZWQgPyBbVEFHX05BTUVTUEFDRURdIDogW10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhtb2R1bGUuX2NoaWxkcmVuKS5mb3JFYWNoKG1vZHVsZU5hbWUgPT4ge1xuICAgICAgICBmbGF0dGVuU3RvcmVGb3JJbnNwZWN0b3JUcmVlKHJlc3VsdCwgbW9kdWxlLl9jaGlsZHJlblttb2R1bGVOYW1lXSwgZmlsdGVyLCBwYXRoICsgbW9kdWxlTmFtZSArIFZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICAgIHJldHVybiBwYXRoICYmIHBhdGggIT09IFZVRVhfUk9PVF9QQVRIID8gcGF0aC5zcGxpdChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikuc2xpY2UoLTIsIC0xKVswXSA6ICdSb290Jztcbn1cbmZ1bmN0aW9uIGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yU3RhdGUobW9kdWxlLCBnZXR0ZXJzLCBwYXRoKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBzdG9yZVN0YXRlID0ge1xuICAgICAgICBzdGF0ZTogT2JqZWN0LmtleXMoKF9hID0gbW9kdWxlLmNvbnRleHQuc3RhdGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9KS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG1vZHVsZS5jb250ZXh0LnN0YXRlW2tleV0sXG4gICAgICAgIH0pKSxcbiAgICB9O1xuICAgIGNvbnN0IHBhdGhXaXRoU2xhc2hlcyA9IHBhdGgucmVwbGFjZShWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUl9SRUcsICcvJyk7XG4gICAgZ2V0dGVycyA9ICFtb2R1bGUubmFtZXNwYWNlZCB8fCBwYXRoID09PSBWVUVYX1JPT1RfUEFUSCA/IG1vZHVsZS5jb250ZXh0LmdldHRlcnMgOiBnZXR0ZXJzW3BhdGhXaXRoU2xhc2hlc107XG4gICAgbGV0IGdldHRlcnNLZXlzID0gT2JqZWN0LmtleXMoZ2V0dGVycyk7XG4gICAgY29uc3Qgc2hvdWxkUGlja0dldHRlcnMgPSAhbW9kdWxlLm5hbWVzcGFjZWQgJiYgcGF0aCAhPT0gVlVFWF9ST09UX1BBVEg7XG4gICAgaWYgKHNob3VsZFBpY2tHZXR0ZXJzKSB7XG4gICAgICAgIC8vIE9ubHkgcGljayB0aGUgZ2V0dGVycyBkZWZpbmVkIGluIHRoZSBub24tbmFtZXNwYWNlZCBtb2R1bGVcbiAgICAgICAgY29uc3QgZGVmaW5lZEdldHRlcnNLZXlzID0gT2JqZWN0LmtleXMoKF9iID0gbW9kdWxlLl9yYXdNb2R1bGUuZ2V0dGVycykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge30pO1xuICAgICAgICBnZXR0ZXJzS2V5cyA9IGdldHRlcnNLZXlzLmZpbHRlcihrZXkgPT4gZGVmaW5lZEdldHRlcnNLZXlzLmluY2x1ZGVzKGtleSkpO1xuICAgIH1cbiAgICBpZiAoZ2V0dGVyc0tleXMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBtb2R1bGVHZXR0ZXJzO1xuICAgICAgICBpZiAoc2hvdWxkUGlja0dldHRlcnMpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgcGljayB0aGUgZ2V0dGVycyBkZWZpbmVkIGluIHRoZSBub24tbmFtZXNwYWNlZCBtb2R1bGVcbiAgICAgICAgICAgIG1vZHVsZUdldHRlcnMgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGdldHRlcnNLZXlzKSB7XG4gICAgICAgICAgICAgICAgbW9kdWxlR2V0dGVyc1trZXldID0gY2FuVGhyb3coKCkgPT4gZ2V0dGVyc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1vZHVsZUdldHRlcnMgPSBnZXR0ZXJzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyZWUgPSB0cmFuc2Zvcm1QYXRoc1RvT2JqZWN0VHJlZShtb2R1bGVHZXR0ZXJzKTtcbiAgICAgICAgc3RvcmVTdGF0ZS5nZXR0ZXJzID0gT2JqZWN0LmtleXModHJlZSkubWFwKChrZXkpID0+ICh7XG4gICAgICAgICAgICBrZXk6IGtleS5lbmRzV2l0aCgnLycpID8gZXh0cmFjdE5hbWVGcm9tUGF0aChrZXkpIDoga2V5LFxuICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IGNhblRocm93KCgpID0+IHRyZWVba2V5XSksXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0b3JlU3RhdGU7XG59XG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoc1RvT2JqZWN0VHJlZShnZXR0ZXJzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgT2JqZWN0LmtleXMoZ2V0dGVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCBwYXRoID0ga2V5LnNwbGl0KCcvJyk7XG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSByZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBsZWFmS2V5ID0gcGF0aC5wb3AoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRbcF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3BdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdNb2R1bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic3RyYWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W3BdLl9jdXN0b20udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXRbbGVhZktleV0gPSBjYW5UaHJvdygoKSA9PiBnZXR0ZXJzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBjYW5UaHJvdygoKSA9PiBnZXR0ZXJzW2tleV0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldFN0b3JlTW9kdWxlKG1vZHVsZU1hcCwgcGF0aCkge1xuICAgIGNvbnN0IG5hbWVzID0gcGF0aC5zcGxpdChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikuZmlsdGVyKChuKSA9PiBuKTtcbiAgICByZXR1cm4gbmFtZXMucmVkdWNlKChtb2R1bGUsIG1vZHVsZU5hbWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBtb2R1bGVbbW9kdWxlTmFtZSA9PT0gVlVFWF9ST09UX1BBVEggPyAncm9vdCcgOiBtb2R1bGVOYW1lXTtcbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG1vZHVsZSBcIiR7bW9kdWxlTmFtZX1cIiBmb3IgcGF0aCBcIiR7cGF0aH1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaSA9PT0gbmFtZXMubGVuZ3RoIC0gMSA/IGNoaWxkIDogY2hpbGQuX2NoaWxkcmVuO1xuICAgIH0sIHBhdGggPT09IFZVRVhfUk9PVF9QQVRIID8gbW9kdWxlTWFwIDogbW9kdWxlTWFwLnJvb3QuX2NoaWxkcmVuKTtcbn1cbmZ1bmN0aW9uIGNhblRocm93KGNiKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBsdWdpbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7725\n");
342
+ eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.setupPlugin = void 0;\n\nconst devtools_api_1 = __webpack_require__(13508);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst clone_deep_1 = __importDefault(__webpack_require__(96206));\n\nlet actionId = 0;\n\nfunction setupPlugin(api, app, Vue) {\n const ROUTER_INSPECTOR_ID = 'vue2-router-inspector';\n const ROUTER_CHANGES_LAYER_ID = 'vue2-router-changes';\n const VUEX_INSPECTOR_ID = 'vue2-vuex-inspector';\n const VUEX_MUTATIONS_ID = 'vue2-vuex-mutations';\n const VUEX_ACTIONS_ID = 'vue2-vuex-actions';\n (0, devtools_api_1.setupDevtoolsPlugin)({\n app,\n id: 'org.vuejs.vue2-internal',\n label: 'Vue 2',\n homepage: 'https://vuejs.org/',\n logo: 'https://vuejs.org/images/icons/favicon-96x96.png',\n settings: {\n legacyActions: {\n label: 'Legacy Actions',\n description: 'Enable this for Vuex < 3.1.0',\n type: 'boolean',\n defaultValue: false\n }\n }\n }, api => {\n var _a;\n\n const hook = shared_utils_1.target.__VUE_DEVTOOLS_GLOBAL_HOOK__; // Vue Router\n\n if (app.$router) {\n const router = app.$router; // Inspector\n\n api.addInspector({\n id: ROUTER_INSPECTOR_ID,\n label: 'Routes',\n icon: 'book',\n treeFilterPlaceholder: 'Search routes'\n });\n api.on.getInspectorTree(payload => {\n if (payload.inspectorId === ROUTER_INSPECTOR_ID) {\n if (router.options.routes) {\n payload.rootNodes = router.options.routes.map(route => formatRouteNode(router, route, '', payload.filter)).filter(Boolean);\n } else {\n console.warn(`[Vue Devtools] No routes found in router`, router.options);\n }\n }\n });\n api.on.getInspectorState(payload => {\n if (payload.inspectorId === ROUTER_INSPECTOR_ID) {\n const route = router.matcher.getRoutes().find(r => getPathId(r) === payload.nodeId);\n\n if (route) {\n payload.state = {\n options: formatRouteData(route)\n };\n }\n }\n }); // Timeline\n\n api.addTimelineLayer({\n id: ROUTER_CHANGES_LAYER_ID,\n label: 'Router Navigations',\n color: 0x40a8c4\n });\n router.afterEach((to, from) => {\n api.addTimelineEvent({\n layerId: ROUTER_CHANGES_LAYER_ID,\n event: {\n time: api.now(),\n title: to.path,\n data: {\n from,\n to\n }\n }\n });\n api.sendInspectorTree(ROUTER_INSPECTOR_ID);\n });\n } // Vuex\n\n\n if (app.$store) {\n const store = app.$store;\n api.addInspector({\n id: VUEX_INSPECTOR_ID,\n label: 'Vuex',\n icon: 'storage',\n treeFilterPlaceholder: 'Filter stores...'\n });\n api.on.getInspectorTree(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n if (payload.filter) {\n const nodes = [];\n flattenStoreForInspectorTree(nodes, store._modules.root, payload.filter, '');\n payload.rootNodes = nodes;\n } else {\n payload.rootNodes = [formatStoreForInspectorTree(store._modules.root, 'Root', '')];\n }\n }\n });\n api.on.getInspectorState(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n const modulePath = payload.nodeId;\n const module = getStoreModule(store._modules, modulePath); // Access the getters prop to init getters cache (which is lazy)\n // eslint-disable-next-line no-unused-expressions\n\n module.context.getters;\n payload.state = formatStoreForInspectorState(module, store._makeLocalGettersCache, modulePath);\n }\n });\n api.on.editInspectorState(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n let path = payload.path;\n\n if (payload.nodeId !== VUEX_ROOT_PATH) {\n path = [...payload.nodeId.split(VUEX_MODULE_PATH_SEPARATOR).slice(0, -1), ...path];\n }\n\n store._committing = true;\n payload.set(store._vm.$data.$$state, path);\n store._committing = false;\n }\n });\n api.addTimelineLayer({\n id: VUEX_MUTATIONS_ID,\n label: 'Vuex Mutations',\n color: LIME_500\n });\n api.addTimelineLayer({\n id: VUEX_ACTIONS_ID,\n label: 'Vuex Actions',\n color: LIME_500\n });\n hook.on('vuex:mutation', (mutation, state) => {\n api.sendInspectorState(VUEX_INSPECTOR_ID);\n const data = {};\n\n if (mutation.payload) {\n data.payload = mutation.payload;\n }\n\n data.state = (0, clone_deep_1.default)(state);\n api.addTimelineEvent({\n layerId: VUEX_MUTATIONS_ID,\n event: {\n time: api.now(),\n title: mutation.type,\n data\n }\n });\n });\n\n function legacySingleActionSub(action, state) {\n const data = {};\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: api.now(),\n title: action.type,\n data\n }\n });\n }\n\n (_a = store.subscribeAction) === null || _a === void 0 ? void 0 : _a.call(store, api.getSettings().legacyActions ? legacySingleActionSub : {\n before: (action, state) => {\n const data = {};\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n action._id = actionId++;\n action._time = api.now();\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: action._time,\n title: action.type,\n groupId: action._id,\n subtitle: 'start',\n data\n }\n });\n },\n after: (action, state) => {\n const data = {};\n\n const duration = api.now() - action._time;\n\n data.duration = {\n _custom: {\n type: 'duration',\n display: `${duration}ms`,\n tooltip: 'Action duration',\n value: duration\n }\n };\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: api.now(),\n title: action.type,\n groupId: action._id,\n subtitle: 'end',\n data\n }\n });\n }\n }, {\n prepend: true\n }); // Inspect getters on mutations\n\n api.on.inspectTimelineEvent(payload => {\n if (payload.layerId === VUEX_MUTATIONS_ID) {\n const getterKeys = Object.keys(store.getters);\n\n if (getterKeys.length) {\n const vm = new Vue({\n data: {\n $$state: payload.data.state\n },\n computed: store._vm.$options.computed\n });\n const originalVm = store._vm;\n store._vm = vm;\n const tree = transformPathsToObjectTree(store.getters);\n payload.data.getters = (0, clone_deep_1.default)(tree);\n store._vm = originalVm;\n vm.$destroy();\n }\n }\n });\n }\n });\n}\n\nexports.setupPlugin = setupPlugin;\n/**\n * Extracted from tailwind palette\n */\n\nconst BLUE_600 = 0x2563eb;\nconst LIME_500 = 0x84cc16;\nconst CYAN_400 = 0x22d3ee;\nconst ORANGE_400 = 0xfb923c;\nconst WHITE = 0xffffff;\nconst DARK = 0x666666;\n\nfunction formatRouteNode(router, route, parentPath, filter) {\n var _a, _b;\n\n const node = {\n id: route.path.startsWith('/') ? route.path : `${parentPath}/${route.path}`,\n label: route.path,\n children: (_a = route.children) === null || _a === void 0 ? void 0 : _a.map(child => formatRouteNode(router, child, route.path, filter)).filter(Boolean),\n tags: []\n };\n if (filter && !node.id.includes(filter) && !((_b = node.children) === null || _b === void 0 ? void 0 : _b.length)) return null;\n\n if (route.name != null) {\n node.tags.push({\n label: String(route.name),\n textColor: 0,\n backgroundColor: CYAN_400\n });\n }\n\n if (route.alias != null) {\n node.tags.push({\n label: 'alias',\n textColor: 0,\n backgroundColor: ORANGE_400\n });\n }\n\n if (node.id === router.currentRoute.path) {\n node.tags.push({\n label: 'active',\n textColor: WHITE,\n backgroundColor: BLUE_600\n });\n }\n\n if (route.redirect) {\n node.tags.push({\n label: 'redirect: ' + (typeof route.redirect === 'string' ? route.redirect : 'Object'),\n textColor: WHITE,\n backgroundColor: DARK\n });\n }\n\n return node;\n}\n\nfunction formatRouteData(route) {\n const data = [];\n data.push({\n key: 'path',\n value: route.path\n });\n\n if (route.redirect) {\n data.push({\n key: 'redirect',\n value: route.redirect\n });\n }\n\n if (route.alias) {\n data.push({\n key: 'alias',\n value: route.alias\n });\n }\n\n if (route.props) {\n data.push({\n key: 'props',\n value: route.props\n });\n }\n\n if (route.name && route.name != null) {\n data.push({\n key: 'name',\n value: route.name\n });\n }\n\n if (route.component) {\n const component = {}; // if (route.component.__file) {\n // component.file = route.component.__file\n // }\n\n if (route.component.template) {\n component.template = route.component.template;\n }\n\n if (route.component.props) {\n component.props = route.component.props;\n }\n\n if (!(0, shared_utils_1.isEmptyObject)(component)) {\n data.push({\n key: 'component',\n value: component\n });\n }\n }\n\n return data;\n}\n\nfunction getPathId(routeMatcher) {\n let path = routeMatcher.path;\n\n if (routeMatcher.parent) {\n path = getPathId(routeMatcher.parent) + path;\n }\n\n return path;\n}\n\nconst TAG_NAMESPACED = {\n label: 'namespaced',\n textColor: WHITE,\n backgroundColor: DARK\n};\nconst VUEX_ROOT_PATH = '__vdt_root';\nconst VUEX_MODULE_PATH_SEPARATOR = '[vdt]';\nconst VUEX_MODULE_PATH_SEPARATOR_REG = /\\[vdt\\]/g;\n\nfunction formatStoreForInspectorTree(module, moduleName, path) {\n var _a;\n\n return {\n id: path || VUEX_ROOT_PATH,\n // all modules end with a `/`, we want the last segment only\n // cart/ -> cart\n // nested/cart/ -> cart\n label: moduleName,\n tags: module.namespaced ? [TAG_NAMESPACED] : [],\n children: Object.keys((_a = module._children) !== null && _a !== void 0 ? _a : {}).map(key => formatStoreForInspectorTree(module._children[key], key, `${path}${key}${VUEX_MODULE_PATH_SEPARATOR}`))\n };\n}\n\nfunction flattenStoreForInspectorTree(result, module, filter, path) {\n if (path.includes(filter)) {\n result.push({\n id: path || VUEX_ROOT_PATH,\n label: path.endsWith(VUEX_MODULE_PATH_SEPARATOR) ? path.slice(0, path.length - 1) : path || 'Root',\n tags: module.namespaced ? [TAG_NAMESPACED] : []\n });\n }\n\n Object.keys(module._children).forEach(moduleName => {\n flattenStoreForInspectorTree(result, module._children[moduleName], filter, path + moduleName + VUEX_MODULE_PATH_SEPARATOR);\n });\n}\n\nfunction extractNameFromPath(path) {\n return path && path !== VUEX_ROOT_PATH ? path.split(VUEX_MODULE_PATH_SEPARATOR).slice(-2, -1)[0] : 'Root';\n}\n\nfunction formatStoreForInspectorState(module, getters, path) {\n var _a, _b;\n\n const storeState = {\n state: Object.keys((_a = module.context.state) !== null && _a !== void 0 ? _a : {}).map(key => ({\n key,\n editable: true,\n value: module.context.state[key]\n }))\n };\n const pathWithSlashes = path.replace(VUEX_MODULE_PATH_SEPARATOR_REG, '/');\n getters = !module.namespaced || path === VUEX_ROOT_PATH ? module.context.getters : getters[pathWithSlashes];\n let gettersKeys = Object.keys(getters);\n const shouldPickGetters = !module.namespaced && path !== VUEX_ROOT_PATH;\n\n if (shouldPickGetters) {\n // Only pick the getters defined in the non-namespaced module\n const definedGettersKeys = Object.keys((_b = module._rawModule.getters) !== null && _b !== void 0 ? _b : {});\n gettersKeys = gettersKeys.filter(key => definedGettersKeys.includes(key));\n }\n\n if (gettersKeys.length) {\n let moduleGetters;\n\n if (shouldPickGetters) {\n // Only pick the getters defined in the non-namespaced module\n moduleGetters = {};\n\n for (const key of gettersKeys) {\n moduleGetters[key] = canThrow(() => getters[key]);\n }\n } else {\n moduleGetters = getters;\n }\n\n const tree = transformPathsToObjectTree(moduleGetters);\n storeState.getters = Object.keys(tree).map(key => ({\n key: key.endsWith('/') ? extractNameFromPath(key) : key,\n editable: false,\n value: canThrow(() => tree[key])\n }));\n }\n\n return storeState;\n}\n\nfunction transformPathsToObjectTree(getters) {\n const result = {};\n Object.keys(getters).forEach(key => {\n const path = key.split('/');\n\n if (path.length > 1) {\n let target = result;\n const leafKey = path.pop();\n\n for (const p of path) {\n if (!target[p]) {\n target[p] = {\n _custom: {\n value: {},\n display: p,\n tooltip: 'Module',\n abstract: true\n }\n };\n }\n\n target = target[p]._custom.value;\n }\n\n target[leafKey] = canThrow(() => getters[key]);\n } else {\n result[key] = canThrow(() => getters[key]);\n }\n });\n return result;\n}\n\nfunction getStoreModule(moduleMap, path) {\n const names = path.split(VUEX_MODULE_PATH_SEPARATOR).filter(n => n);\n return names.reduce((module, moduleName, i) => {\n const child = module[moduleName === VUEX_ROOT_PATH ? 'root' : moduleName];\n\n if (!child) {\n throw new Error(`Missing module \"${moduleName}\" for path \"${path}\".`);\n }\n\n return i === names.length - 1 ? child : child._children;\n }, path === VUEX_ROOT_PATH ? moduleMap : moduleMap.root._children);\n}\n\nfunction canThrow(cb) {\n try {\n return cb();\n } catch (e) {\n return e;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyNS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSSxRQUFRLEdBQUcsQ0FBZjs7QUFFQSxTQUFnQixXQUFoQixDQUE2QixHQUE3QixFQUErQyxHQUEvQyxFQUF5RCxHQUF6RCxFQUE0RDtBQUMxRCxRQUFNLG1CQUFtQixHQUFHLHVCQUE1QjtBQUNBLFFBQU0sdUJBQXVCLEdBQUcscUJBQWhDO0FBRUEsUUFBTSxpQkFBaUIsR0FBRyxxQkFBMUI7QUFDQSxRQUFNLGlCQUFpQixHQUFHLHFCQUExQjtBQUNBLFFBQU0sZUFBZSxHQUFHLG1CQUF4QjtBQUVBLDBDQUFvQjtBQUNsQixPQURrQjtBQUVsQixNQUFFLEVBQUUseUJBRmM7QUFHbEIsU0FBSyxFQUFFLE9BSFc7QUFJbEIsWUFBUSxFQUFFLG9CQUpRO0FBS2xCLFFBQUksRUFBRSxrREFMWTtBQU1sQixZQUFRLEVBQUU7QUFDUixtQkFBYSxFQUFFO0FBQ2IsYUFBSyxFQUFFLGdCQURNO0FBRWIsbUJBQVcsRUFBRSw4QkFGQTtBQUdiLFlBQUksRUFBRSxTQUhPO0FBSWIsb0JBQVksRUFBRTtBQUpEO0FBRFA7QUFOUSxHQUFwQixFQWNHLEdBQUcsSUFBRzs7O0FBQ1AsVUFBTSxJQUFJLEdBQUcsc0JBQU8sNEJBQXBCLENBRE8sQ0FHUDs7QUFDQSxRQUFJLEdBQUcsQ0FBQyxPQUFSLEVBQWlCO0FBQ2YsWUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQW5CLENBRGUsQ0FHZjs7QUFFQSxTQUFHLENBQUMsWUFBSixDQUFpQjtBQUNmLFVBQUUsRUFBRSxtQkFEVztBQUVmLGFBQUssRUFBRSxRQUZRO0FBR2YsWUFBSSxFQUFFLE1BSFM7QUFJZiw2QkFBcUIsRUFBRTtBQUpSLE9BQWpCO0FBT0EsU0FBRyxDQUFDLEVBQUosQ0FBTyxnQkFBUCxDQUF3QixPQUFPLElBQUc7QUFDaEMsWUFBSSxPQUFPLENBQUMsV0FBUixLQUF3QixtQkFBNUIsRUFBaUQ7QUFDL0MsY0FBSSxNQUFNLENBQUMsT0FBUCxDQUFlLE1BQW5CLEVBQTJCO0FBQ3pCLG1CQUFPLENBQUMsU0FBUixHQUFvQixNQUFNLENBQUMsT0FBUCxDQUFlLE1BQWYsQ0FBc0IsR0FBdEIsQ0FBMEIsS0FBSyxJQUFJLGVBQWUsQ0FBQyxNQUFELEVBQVMsS0FBVCxFQUFnQixFQUFoQixFQUFvQixPQUFPLENBQUMsTUFBNUIsQ0FBbEQsRUFBdUYsTUFBdkYsQ0FBOEYsT0FBOUYsQ0FBcEI7QUFDRCxXQUZELE1BRU87QUFDTCxtQkFBTyxDQUFDLElBQVIsQ0FBYSwwQ0FBYixFQUF5RCxNQUFNLENBQUMsT0FBaEU7QUFDRDtBQUNGO0FBQ0YsT0FSRDtBQVVBLFNBQUcsQ0FBQyxFQUFKLENBQU8saUJBQVAsQ0FBeUIsT0FBTyxJQUFHO0FBQ2pDLFlBQUksT0FBTyxDQUFDLFdBQVIsS0FBd0IsbUJBQTVCLEVBQWlEO0FBQy9DLGdCQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBUCxDQUFlLFNBQWYsR0FBMkIsSUFBM0IsQ0FBZ0MsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFELENBQVQsS0FBaUIsT0FBTyxDQUFDLE1BQTlELENBQWQ7O0FBQ0EsY0FBSSxLQUFKLEVBQVc7QUFDVCxtQkFBTyxDQUFDLEtBQVIsR0FBZ0I7QUFDZCxxQkFBTyxFQUFFLGVBQWUsQ0FBQyxLQUFEO0FBRFYsYUFBaEI7QUFHRDtBQUNGO0FBQ0YsT0FURCxFQXRCZSxDQWlDZjs7QUFFQSxTQUFHLENBQUMsZ0JBQUosQ0FBcUI7QUFDbkIsVUFBRSxFQUFFLHVCQURlO0FBRW5CLGFBQUssRUFBRSxvQkFGWTtBQUduQixhQUFLLEVBQUU7QUFIWSxPQUFyQjtBQU1BLFlBQU0sQ0FBQyxTQUFQLENBQWlCLENBQUMsRUFBRCxFQUFLLElBQUwsS0FBYTtBQUM1QixXQUFHLENBQUMsZ0JBQUosQ0FBcUI7QUFDbkIsaUJBQU8sRUFBRSx1QkFEVTtBQUVuQixlQUFLLEVBQUU7QUFDTCxnQkFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFKLEVBREQ7QUFFTCxpQkFBSyxFQUFFLEVBQUUsQ0FBQyxJQUZMO0FBR0wsZ0JBQUksRUFBRTtBQUNKLGtCQURJO0FBRUo7QUFGSTtBQUhEO0FBRlksU0FBckI7QUFXQSxXQUFHLENBQUMsaUJBQUosQ0FBc0IsbUJBQXRCO0FBQ0QsT0FiRDtBQWNELEtBM0RNLENBNkRQOzs7QUFDQSxRQUFJLEdBQUcsQ0FBQyxNQUFSLEVBQWdCO0FBQ2QsWUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQWxCO0FBRUEsU0FBRyxDQUFDLFlBQUosQ0FBaUI7QUFDZixVQUFFLEVBQUUsaUJBRFc7QUFFZixhQUFLLEVBQUUsTUFGUTtBQUdmLFlBQUksRUFBRSxTQUhTO0FBSWYsNkJBQXFCLEVBQUU7QUFKUixPQUFqQjtBQU9BLFNBQUcsQ0FBQyxFQUFKLENBQU8sZ0JBQVAsQ0FBeUIsT0FBRCxJQUFZO0FBQ2xDLFlBQUksT0FBTyxDQUFDLFdBQVIsS0FBd0IsaUJBQTVCLEVBQStDO0FBQzdDLGNBQUksT0FBTyxDQUFDLE1BQVosRUFBb0I7QUFDbEIsa0JBQU0sS0FBSyxHQUFHLEVBQWQ7QUFDQSx3Q0FBNEIsQ0FBQyxLQUFELEVBQVEsS0FBSyxDQUFDLFFBQU4sQ0FBZSxJQUF2QixFQUE2QixPQUFPLENBQUMsTUFBckMsRUFBNkMsRUFBN0MsQ0FBNUI7QUFDQSxtQkFBTyxDQUFDLFNBQVIsR0FBb0IsS0FBcEI7QUFDRCxXQUpELE1BSU87QUFDTCxtQkFBTyxDQUFDLFNBQVIsR0FBb0IsQ0FDbEIsMkJBQTJCLENBQUMsS0FBSyxDQUFDLFFBQU4sQ0FBZSxJQUFoQixFQUFzQixNQUF0QixFQUE4QixFQUE5QixDQURULENBQXBCO0FBR0Q7QUFDRjtBQUNGLE9BWkQ7QUFjQSxTQUFHLENBQUMsRUFBSixDQUFPLGlCQUFQLENBQTBCLE9BQUQsSUFBWTtBQUNuQyxZQUFJLE9BQU8sQ0FBQyxXQUFSLEtBQXdCLGlCQUE1QixFQUErQztBQUM3QyxnQkFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQTNCO0FBQ0EsZ0JBQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUCxFQUFpQixVQUFqQixDQUE3QixDQUY2QyxDQUc3QztBQUNBOztBQUNBLGdCQUFNLENBQUMsT0FBUCxDQUFlLE9BQWY7QUFDQSxpQkFBTyxDQUFDLEtBQVIsR0FBZ0IsNEJBQTRCLENBQzFDLE1BRDBDLEVBRTFDLEtBQUssQ0FBQyxzQkFGb0MsRUFHMUMsVUFIMEMsQ0FBNUM7QUFLRDtBQUNGLE9BYkQ7QUFlQSxTQUFHLENBQUMsRUFBSixDQUFPLGtCQUFQLENBQTJCLE9BQUQsSUFBWTtBQUNwQyxZQUFJLE9BQU8sQ0FBQyxXQUFSLEtBQXdCLGlCQUE1QixFQUErQztBQUM3QyxjQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBbkI7O0FBQ0EsY0FBSSxPQUFPLENBQUMsTUFBUixLQUFtQixjQUF2QixFQUF1QztBQUNyQyxnQkFBSSxHQUFHLENBQ0wsR0FBRyxPQUFPLENBQUMsTUFBUixDQUFlLEtBQWYsQ0FBcUIsMEJBQXJCLEVBQWlELEtBQWpELENBQXVELENBQXZELEVBQTBELENBQUMsQ0FBM0QsQ0FERSxFQUVMLEdBQUcsSUFGRSxDQUFQO0FBSUQ7O0FBQ0QsZUFBSyxDQUFDLFdBQU4sR0FBb0IsSUFBcEI7QUFDQSxpQkFBTyxDQUFDLEdBQVIsQ0FBWSxLQUFLLENBQUMsR0FBTixDQUFVLEtBQVYsQ0FBZ0IsT0FBNUIsRUFBcUMsSUFBckM7QUFDQSxlQUFLLENBQUMsV0FBTixHQUFvQixLQUFwQjtBQUNEO0FBQ0YsT0FiRDtBQWVBLFNBQUcsQ0FBQyxnQkFBSixDQUFxQjtBQUNuQixVQUFFLEVBQUUsaUJBRGU7QUFFbkIsYUFBSyxFQUFFLGdCQUZZO0FBR25CLGFBQUssRUFBRTtBQUhZLE9BQXJCO0FBTUEsU0FBRyxDQUFDLGdCQUFKLENBQXFCO0FBQ25CLFVBQUUsRUFBRSxlQURlO0FBRW5CLGFBQUssRUFBRSxjQUZZO0FBR25CLGFBQUssRUFBRTtBQUhZLE9BQXJCO0FBTUEsVUFBSSxDQUFDLEVBQUwsQ0FBUSxlQUFSLEVBQXlCLENBQUMsUUFBRCxFQUFXLEtBQVgsS0FBb0I7QUFDM0MsV0FBRyxDQUFDLGtCQUFKLENBQXVCLGlCQUF2QjtBQUVBLGNBQU0sSUFBSSxHQUFRLEVBQWxCOztBQUVBLFlBQUksUUFBUSxDQUFDLE9BQWIsRUFBc0I7QUFDcEIsY0FBSSxDQUFDLE9BQUwsR0FBZSxRQUFRLENBQUMsT0FBeEI7QUFDRDs7QUFFRCxZQUFJLENBQUMsS0FBTCxHQUFhLDBCQUFLLEtBQUwsQ0FBYjtBQUVBLFdBQUcsQ0FBQyxnQkFBSixDQUFxQjtBQUNuQixpQkFBTyxFQUFFLGlCQURVO0FBRW5CLGVBQUssRUFBRTtBQUNMLGdCQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUosRUFERDtBQUVMLGlCQUFLLEVBQUUsUUFBUSxDQUFDLElBRlg7QUFHTDtBQUhLO0FBRlksU0FBckI7QUFRRCxPQW5CRDs7QUFxQkEsZUFBUyxxQkFBVCxDQUFnQyxNQUFoQyxFQUF3QyxLQUF4QyxFQUE2QztBQUMzQyxjQUFNLElBQUksR0FBUSxFQUFsQjs7QUFDQSxZQUFJLE1BQU0sQ0FBQyxPQUFYLEVBQW9CO0FBQ2xCLGNBQUksQ0FBQyxPQUFMLEdBQWUsTUFBTSxDQUFDLE9BQXRCO0FBQ0Q7O0FBRUQsWUFBSSxDQUFDLEtBQUwsR0FBYSxLQUFiO0FBRUEsV0FBRyxDQUFDLGdCQUFKLENBQXFCO0FBQ25CLGlCQUFPLEVBQUUsZUFEVTtBQUVuQixlQUFLLEVBQUU7QUFDTCxnQkFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFKLEVBREQ7QUFFTCxpQkFBSyxFQUFFLE1BQU0sQ0FBQyxJQUZUO0FBR0w7QUFISztBQUZZLFNBQXJCO0FBUUQ7O0FBRUQsaUJBQUssQ0FBQyxlQUFOLE1BQXFCLElBQXJCLElBQXFCLGFBQXJCLEdBQXFCLE1BQXJCLEdBQXFCLFFBQXJCLEtBQXFCLEVBQUcsR0FBRyxDQUFDLFdBQUosR0FBa0IsYUFBbEIsR0FDcEIscUJBRG9CLEdBRXBCO0FBQ0UsY0FBTSxFQUFFLENBQUMsTUFBRCxFQUFTLEtBQVQsS0FBa0I7QUFDeEIsZ0JBQU0sSUFBSSxHQUFRLEVBQWxCOztBQUNBLGNBQUksTUFBTSxDQUFDLE9BQVgsRUFBb0I7QUFDbEIsZ0JBQUksQ0FBQyxPQUFMLEdBQWUsTUFBTSxDQUFDLE9BQXRCO0FBQ0Q7O0FBQ0QsZ0JBQU0sQ0FBQyxHQUFQLEdBQWEsUUFBUSxFQUFyQjtBQUNBLGdCQUFNLENBQUMsS0FBUCxHQUFlLEdBQUcsQ0FBQyxHQUFKLEVBQWY7QUFDQSxjQUFJLENBQUMsS0FBTCxHQUFhLEtBQWI7QUFFQSxhQUFHLENBQUMsZ0JBQUosQ0FBcUI7QUFDbkIsbUJBQU8sRUFBRSxlQURVO0FBRW5CLGlCQUFLLEVBQUU7QUFDTCxrQkFBSSxFQUFFLE1BQU0sQ0FBQyxLQURSO0FBRUwsbUJBQUssRUFBRSxNQUFNLENBQUMsSUFGVDtBQUdMLHFCQUFPLEVBQUUsTUFBTSxDQUFDLEdBSFg7QUFJTCxzQkFBUSxFQUFFLE9BSkw7QUFLTDtBQUxLO0FBRlksV0FBckI7QUFVRCxTQXBCSDtBQXFCRSxhQUFLLEVBQUUsQ0FBQyxNQUFELEVBQVMsS0FBVCxLQUFrQjtBQUN2QixnQkFBTSxJQUFJLEdBQVEsRUFBbEI7O0FBQ0EsZ0JBQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFKLEtBQVksTUFBTSxDQUFDLEtBQXBDOztBQUNBLGNBQUksQ0FBQyxRQUFMLEdBQWdCO0FBQ2QsbUJBQU8sRUFBRTtBQUNQLGtCQUFJLEVBQUUsVUFEQztBQUVQLHFCQUFPLEVBQUUsR0FBRyxRQUFRLElBRmI7QUFHUCxxQkFBTyxFQUFFLGlCQUhGO0FBSVAsbUJBQUssRUFBRTtBQUpBO0FBREssV0FBaEI7O0FBUUEsY0FBSSxNQUFNLENBQUMsT0FBWCxFQUFvQjtBQUNsQixnQkFBSSxDQUFDLE9BQUwsR0FBZSxNQUFNLENBQUMsT0FBdEI7QUFDRDs7QUFDRCxjQUFJLENBQUMsS0FBTCxHQUFhLEtBQWI7QUFFQSxhQUFHLENBQUMsZ0JBQUosQ0FBcUI7QUFDbkIsbUJBQU8sRUFBRSxlQURVO0FBRW5CLGlCQUFLLEVBQUU7QUFDTCxrQkFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFKLEVBREQ7QUFFTCxtQkFBSyxFQUFFLE1BQU0sQ0FBQyxJQUZUO0FBR0wscUJBQU8sRUFBRSxNQUFNLENBQUMsR0FIWDtBQUlMLHNCQUFRLEVBQUUsS0FKTDtBQUtMO0FBTEs7QUFGWSxXQUFyQjtBQVVEO0FBL0NILE9BRmlCLEVBa0RkO0FBQUUsZUFBTyxFQUFFO0FBQVgsT0FsRGMsQ0FBckIsQ0F6R2MsQ0E2SmQ7O0FBQ0EsU0FBRyxDQUFDLEVBQUosQ0FBTyxvQkFBUCxDQUE0QixPQUFPLElBQUc7QUFDcEMsWUFBSSxPQUFPLENBQUMsT0FBUixLQUFvQixpQkFBeEIsRUFBMkM7QUFDekMsZ0JBQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFQLENBQVksS0FBSyxDQUFDLE9BQWxCLENBQW5COztBQUNBLGNBQUksVUFBVSxDQUFDLE1BQWYsRUFBdUI7QUFDckIsa0JBQU0sRUFBRSxHQUFHLElBQUksR0FBSixDQUFRO0FBQ2pCLGtCQUFJLEVBQUU7QUFDSix1QkFBTyxFQUFFLE9BQU8sQ0FBQyxJQUFSLENBQWE7QUFEbEIsZUFEVztBQUlqQixzQkFBUSxFQUFFLEtBQUssQ0FBQyxHQUFOLENBQVUsUUFBVixDQUFtQjtBQUpaLGFBQVIsQ0FBWDtBQU1BLGtCQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBekI7QUFDQSxpQkFBSyxDQUFDLEdBQU4sR0FBWSxFQUFaO0FBRUEsa0JBQU0sSUFBSSxHQUFHLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxPQUFQLENBQXZDO0FBQ0EsbUJBQU8sQ0FBQyxJQUFSLENBQWEsT0FBYixHQUF1QiwwQkFBSyxJQUFMLENBQXZCO0FBRUEsaUJBQUssQ0FBQyxHQUFOLEdBQVksVUFBWjtBQUNBLGNBQUUsQ0FBQyxRQUFIO0FBQ0Q7QUFDRjtBQUNGLE9BcEJEO0FBcUJEO0FBQ0YsR0FoUUQ7QUFpUUQ7O0FBelFEO0FBMlFBOztBQUVHOztBQUNILE1BQU0sUUFBUSxHQUFHLFFBQWpCO0FBQ0EsTUFBTSxRQUFRLEdBQUcsUUFBakI7QUFDQSxNQUFNLFFBQVEsR0FBRyxRQUFqQjtBQUNBLE1BQU0sVUFBVSxHQUFHLFFBQW5CO0FBQ0EsTUFBTSxLQUFLLEdBQUcsUUFBZDtBQUNBLE1BQU0sSUFBSSxHQUFHLFFBQWI7O0FBRUEsU0FBUyxlQUFULENBQTBCLE1BQTFCLEVBQWtDLEtBQWxDLEVBQXlDLFVBQXpDLEVBQTZELE1BQTdELEVBQTJFOzs7QUFDekUsUUFBTSxJQUFJLEdBQXdCO0FBQ2hDLE1BQUUsRUFBRSxLQUFLLENBQUMsSUFBTixDQUFXLFVBQVgsQ0FBc0IsR0FBdEIsSUFBNkIsS0FBSyxDQUFDLElBQW5DLEdBQTBDLEdBQUcsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBRHpDO0FBRWhDLFNBQUssRUFBRSxLQUFLLENBQUMsSUFGbUI7QUFHaEMsWUFBUSxFQUFFLFdBQUssQ0FBQyxRQUFOLE1BQWMsSUFBZCxJQUFjLGFBQWQsR0FBYyxNQUFkLEdBQWMsR0FBRSxHQUFGLENBQU0sS0FBSyxJQUFJLGVBQWUsQ0FBQyxNQUFELEVBQVMsS0FBVCxFQUFnQixLQUFLLENBQUMsSUFBdEIsRUFBNEIsTUFBNUIsQ0FBOUIsRUFBbUUsTUFBbkUsQ0FBMEUsT0FBMUUsQ0FIUTtBQUloQyxRQUFJLEVBQUU7QUFKMEIsR0FBbEM7QUFPQSxNQUFJLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFMLENBQVEsUUFBUixDQUFpQixNQUFqQixDQUFYLElBQXVDLEVBQUMsVUFBSSxDQUFDLFFBQUwsTUFBYSxJQUFiLElBQWEsYUFBYixHQUFhLE1BQWIsR0FBYSxHQUFFLE1BQWhCLENBQTNDLEVBQW1FLE9BQU8sSUFBUDs7QUFFbkUsTUFBSSxLQUFLLENBQUMsSUFBTixJQUFjLElBQWxCLEVBQXdCO0FBQ3RCLFFBQUksQ0FBQyxJQUFMLENBQVUsSUFBVixDQUFlO0FBQ2IsV0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBUCxDQURBO0FBRWIsZUFBUyxFQUFFLENBRkU7QUFHYixxQkFBZSxFQUFFO0FBSEosS0FBZjtBQUtEOztBQUVELE1BQUksS0FBSyxDQUFDLEtBQU4sSUFBZSxJQUFuQixFQUF5QjtBQUN2QixRQUFJLENBQUMsSUFBTCxDQUFVLElBQVYsQ0FBZTtBQUNiLFdBQUssRUFBRSxPQURNO0FBRWIsZUFBUyxFQUFFLENBRkU7QUFHYixxQkFBZSxFQUFFO0FBSEosS0FBZjtBQUtEOztBQUVELE1BQUksSUFBSSxDQUFDLEVBQUwsS0FBWSxNQUFNLENBQUMsWUFBUCxDQUFvQixJQUFwQyxFQUEwQztBQUN4QyxRQUFJLENBQUMsSUFBTCxDQUFVLElBQVYsQ0FBZTtBQUNiLFdBQUssRUFBRSxRQURNO0FBRWIsZUFBUyxFQUFFLEtBRkU7QUFHYixxQkFBZSxFQUFFO0FBSEosS0FBZjtBQUtEOztBQUVELE1BQUksS0FBSyxDQUFDLFFBQVYsRUFBb0I7QUFDbEIsUUFBSSxDQUFDLElBQUwsQ0FBVSxJQUFWLENBQWU7QUFDYixXQUFLLEVBQ0gsZ0JBQ0MsT0FBTyxLQUFLLENBQUMsUUFBYixLQUEwQixRQUExQixHQUFxQyxLQUFLLENBQUMsUUFBM0MsR0FBc0QsUUFEdkQsQ0FGVztBQUliLGVBQVMsRUFBRSxLQUpFO0FBS2IscUJBQWUsRUFBRTtBQUxKLEtBQWY7QUFPRDs7QUFFRCxTQUFPLElBQVA7QUFDRDs7QUFFRCxTQUFTLGVBQVQsQ0FBMEIsS0FBMUIsRUFBK0I7QUFDN0IsUUFBTSxJQUFJLEdBQW1DLEVBQTdDO0FBRUEsTUFBSSxDQUFDLElBQUwsQ0FBVTtBQUFFLE9BQUcsRUFBRSxNQUFQO0FBQWUsU0FBSyxFQUFFLEtBQUssQ0FBQztBQUE1QixHQUFWOztBQUVBLE1BQUksS0FBSyxDQUFDLFFBQVYsRUFBb0I7QUFDbEIsUUFBSSxDQUFDLElBQUwsQ0FBVTtBQUFFLFNBQUcsRUFBRSxVQUFQO0FBQW1CLFdBQUssRUFBRSxLQUFLLENBQUM7QUFBaEMsS0FBVjtBQUNEOztBQUVELE1BQUksS0FBSyxDQUFDLEtBQVYsRUFBaUI7QUFDZixRQUFJLENBQUMsSUFBTCxDQUFVO0FBQUUsU0FBRyxFQUFFLE9BQVA7QUFBZ0IsV0FBSyxFQUFFLEtBQUssQ0FBQztBQUE3QixLQUFWO0FBQ0Q7O0FBRUQsTUFBSSxLQUFLLENBQUMsS0FBVixFQUFpQjtBQUNmLFFBQUksQ0FBQyxJQUFMLENBQVU7QUFBRSxTQUFHLEVBQUUsT0FBUDtBQUFnQixXQUFLLEVBQUUsS0FBSyxDQUFDO0FBQTdCLEtBQVY7QUFDRDs7QUFFRCxNQUFJLEtBQUssQ0FBQyxJQUFOLElBQWMsS0FBSyxDQUFDLElBQU4sSUFBYyxJQUFoQyxFQUFzQztBQUNwQyxRQUFJLENBQUMsSUFBTCxDQUFVO0FBQUUsU0FBRyxFQUFFLE1BQVA7QUFBZSxXQUFLLEVBQUUsS0FBSyxDQUFDO0FBQTVCLEtBQVY7QUFDRDs7QUFFRCxNQUFJLEtBQUssQ0FBQyxTQUFWLEVBQXFCO0FBQ25CLFVBQU0sU0FBUyxHQUFRLEVBQXZCLENBRG1CLENBRW5CO0FBQ0E7QUFDQTs7QUFDQSxRQUFJLEtBQUssQ0FBQyxTQUFOLENBQWdCLFFBQXBCLEVBQThCO0FBQzVCLGVBQVMsQ0FBQyxRQUFWLEdBQXFCLEtBQUssQ0FBQyxTQUFOLENBQWdCLFFBQXJDO0FBQ0Q7O0FBQ0QsUUFBSSxLQUFLLENBQUMsU0FBTixDQUFnQixLQUFwQixFQUEyQjtBQUN6QixlQUFTLENBQUMsS0FBVixHQUFrQixLQUFLLENBQUMsU0FBTixDQUFnQixLQUFsQztBQUNEOztBQUNELFFBQUksQ0FBQyxrQ0FBYyxTQUFkLENBQUwsRUFBK0I7QUFDN0IsVUFBSSxDQUFDLElBQUwsQ0FBVTtBQUFFLFdBQUcsRUFBRSxXQUFQO0FBQW9CLGFBQUssRUFBRTtBQUEzQixPQUFWO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPLElBQVA7QUFDRDs7QUFFRCxTQUFTLFNBQVQsQ0FBb0IsWUFBcEIsRUFBZ0M7QUFDOUIsTUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQXhCOztBQUNBLE1BQUksWUFBWSxDQUFDLE1BQWpCLEVBQXlCO0FBQ3ZCLFFBQUksR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQWQsQ0FBVCxHQUFpQyxJQUF4QztBQUNEOztBQUNELFNBQU8sSUFBUDtBQUNEOztBQUVELE1BQU0sY0FBYyxHQUFHO0FBQ3JCLE9BQUssRUFBRSxZQURjO0FBRXJCLFdBQVMsRUFBRSxLQUZVO0FBR3JCLGlCQUFlLEVBQUU7QUFISSxDQUF2QjtBQU1BLE1BQU0sY0FBYyxHQUFHLFlBQXZCO0FBQ0EsTUFBTSwwQkFBMEIsR0FBRyxPQUFuQztBQUNBLE1BQU0sOEJBQThCLEdBQUcsVUFBdkM7O0FBRUEsU0FBUywyQkFBVCxDQUFzQyxNQUF0QyxFQUE4QyxVQUE5QyxFQUFrRSxJQUFsRSxFQUE4RTs7O0FBQzVFLFNBQU87QUFDTCxNQUFFLEVBQUUsSUFBSSxJQUFJLGNBRFA7QUFFTDtBQUNBO0FBQ0E7QUFDQSxTQUFLLEVBQUUsVUFMRjtBQU1MLFFBQUksRUFBRSxNQUFNLENBQUMsVUFBUCxHQUFvQixDQUFDLGNBQUQsQ0FBcEIsR0FBdUMsRUFOeEM7QUFPTCxZQUFRLEVBQUUsTUFBTSxDQUFDLElBQVAsQ0FBWSxZQUFNLENBQUMsU0FBUCxNQUFnQixJQUFoQixJQUFnQixhQUFoQixHQUFnQixFQUFoQixHQUFvQixFQUFoQyxFQUFvQyxHQUFwQyxDQUF5QyxHQUFELElBQ2hELDJCQUEyQixDQUN6QixNQUFNLENBQUMsU0FBUCxDQUFpQixHQUFqQixDQUR5QixFQUV6QixHQUZ5QixFQUd6QixHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsMEJBQTBCLEVBSGpCLENBRG5CO0FBUEwsR0FBUDtBQWVEOztBQUVELFNBQVMsNEJBQVQsQ0FBdUMsTUFBdkMsRUFBc0UsTUFBdEUsRUFBOEUsTUFBOUUsRUFBOEYsSUFBOUYsRUFBMEc7QUFDeEcsTUFBSSxJQUFJLENBQUMsUUFBTCxDQUFjLE1BQWQsQ0FBSixFQUEyQjtBQUN6QixVQUFNLENBQUMsSUFBUCxDQUFZO0FBQ1YsUUFBRSxFQUFFLElBQUksSUFBSSxjQURGO0FBRVYsV0FBSyxFQUFFLElBQUksQ0FBQyxRQUFMLENBQWMsMEJBQWQsSUFBNEMsSUFBSSxDQUFDLEtBQUwsQ0FBVyxDQUFYLEVBQWMsSUFBSSxDQUFDLE1BQUwsR0FBYyxDQUE1QixDQUE1QyxHQUE2RSxJQUFJLElBQUksTUFGbEY7QUFHVixVQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVAsR0FBb0IsQ0FBQyxjQUFELENBQXBCLEdBQXVDO0FBSG5DLEtBQVo7QUFLRDs7QUFDRCxRQUFNLENBQUMsSUFBUCxDQUFZLE1BQU0sQ0FBQyxTQUFuQixFQUE4QixPQUE5QixDQUFzQyxVQUFVLElBQUc7QUFDakQsZ0NBQTRCLENBQUMsTUFBRCxFQUFTLE1BQU0sQ0FBQyxTQUFQLENBQWlCLFVBQWpCLENBQVQsRUFBdUMsTUFBdkMsRUFBK0MsSUFBSSxHQUFHLFVBQVAsR0FBb0IsMEJBQW5FLENBQTVCO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVMsbUJBQVQsQ0FBOEIsSUFBOUIsRUFBMEM7QUFDeEMsU0FBTyxJQUFJLElBQUksSUFBSSxLQUFLLGNBQWpCLEdBQWtDLElBQUksQ0FBQyxLQUFMLENBQVcsMEJBQVgsRUFBdUMsS0FBdkMsQ0FBNkMsQ0FBQyxDQUE5QyxFQUFpRCxDQUFDLENBQWxELEVBQXFELENBQXJELENBQWxDLEdBQTRGLE1BQW5HO0FBQ0Q7O0FBRUQsU0FBUyw0QkFBVCxDQUF1QyxNQUF2QyxFQUErQyxPQUEvQyxFQUF3RCxJQUF4RCxFQUE0RDs7O0FBQzFELFFBQU0sVUFBVSxHQUF5QjtBQUN2QyxTQUFLLEVBQUUsTUFBTSxDQUFDLElBQVAsQ0FBWSxZQUFNLENBQUMsT0FBUCxDQUFlLEtBQWYsTUFBb0IsSUFBcEIsSUFBb0IsYUFBcEIsR0FBb0IsRUFBcEIsR0FBd0IsRUFBcEMsRUFBd0MsR0FBeEMsQ0FBNkMsR0FBRCxLQUFVO0FBQzNELFNBRDJEO0FBRTNELGNBQVEsRUFBRSxJQUZpRDtBQUczRCxXQUFLLEVBQUUsTUFBTSxDQUFDLE9BQVAsQ0FBZSxLQUFmLENBQXFCLEdBQXJCO0FBSG9ELEtBQVYsQ0FBNUM7QUFEZ0MsR0FBekM7QUFRQSxRQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTCxDQUFhLDhCQUFiLEVBQTZDLEdBQTdDLENBQXhCO0FBQ0EsU0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVIsSUFBc0IsSUFBSSxLQUFLLGNBQS9CLEdBQWdELE1BQU0sQ0FBQyxPQUFQLENBQWUsT0FBL0QsR0FBeUUsT0FBTyxDQUFDLGVBQUQsQ0FBMUY7QUFDQSxNQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBUCxDQUFZLE9BQVosQ0FBbEI7QUFDQSxRQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVIsSUFBc0IsSUFBSSxLQUFLLGNBQXpEOztBQUNBLE1BQUksaUJBQUosRUFBdUI7QUFDckI7QUFDQSxVQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFQLENBQVksWUFBTSxDQUFDLFVBQVAsQ0FBa0IsT0FBbEIsTUFBeUIsSUFBekIsSUFBeUIsYUFBekIsR0FBeUIsRUFBekIsR0FBNkIsRUFBekMsQ0FBM0I7QUFDQSxlQUFXLEdBQUcsV0FBVyxDQUFDLE1BQVosQ0FBbUIsR0FBRyxJQUFJLGtCQUFrQixDQUFDLFFBQW5CLENBQTRCLEdBQTVCLENBQTFCLENBQWQ7QUFDRDs7QUFDRCxNQUFJLFdBQVcsQ0FBQyxNQUFoQixFQUF3QjtBQUN0QixRQUFJLGFBQUo7O0FBQ0EsUUFBSSxpQkFBSixFQUF1QjtBQUNyQjtBQUNBLG1CQUFhLEdBQUcsRUFBaEI7O0FBQ0EsV0FBSyxNQUFNLEdBQVgsSUFBa0IsV0FBbEIsRUFBK0I7QUFDN0IscUJBQWEsQ0FBQyxHQUFELENBQWIsR0FBcUIsUUFBUSxDQUFDLE1BQU0sT0FBTyxDQUFDLEdBQUQsQ0FBZCxDQUE3QjtBQUNEO0FBQ0YsS0FORCxNQU1PO0FBQ0wsbUJBQWEsR0FBRyxPQUFoQjtBQUNEOztBQUNELFVBQU0sSUFBSSxHQUFHLDBCQUEwQixDQUFDLGFBQUQsQ0FBdkM7QUFDQSxjQUFVLENBQUMsT0FBWCxHQUFxQixNQUFNLENBQUMsSUFBUCxDQUFZLElBQVosRUFBa0IsR0FBbEIsQ0FBdUIsR0FBRCxLQUFVO0FBQ25ELFNBQUcsRUFBRSxHQUFHLENBQUMsUUFBSixDQUFhLEdBQWIsSUFBb0IsbUJBQW1CLENBQUMsR0FBRCxDQUF2QyxHQUErQyxHQUREO0FBRW5ELGNBQVEsRUFBRSxLQUZ5QztBQUduRCxXQUFLLEVBQUUsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUQsQ0FBWDtBQUhvQyxLQUFWLENBQXRCLENBQXJCO0FBS0Q7O0FBRUQsU0FBTyxVQUFQO0FBQ0Q7O0FBRUQsU0FBUywwQkFBVCxDQUFxQyxPQUFyQyxFQUE0QztBQUMxQyxRQUFNLE1BQU0sR0FBRyxFQUFmO0FBQ0EsUUFBTSxDQUFDLElBQVAsQ0FBWSxPQUFaLEVBQXFCLE9BQXJCLENBQTZCLEdBQUcsSUFBRztBQUNqQyxVQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSixDQUFVLEdBQVYsQ0FBYjs7QUFDQSxRQUFJLElBQUksQ0FBQyxNQUFMLEdBQWMsQ0FBbEIsRUFBcUI7QUFDbkIsVUFBSSxNQUFNLEdBQUcsTUFBYjtBQUNBLFlBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFMLEVBQWhCOztBQUNBLFdBQUssTUFBTSxDQUFYLElBQWdCLElBQWhCLEVBQXNCO0FBQ3BCLFlBQUksQ0FBQyxNQUFNLENBQUMsQ0FBRCxDQUFYLEVBQWdCO0FBQ2QsZ0JBQU0sQ0FBQyxDQUFELENBQU4sR0FBWTtBQUNWLG1CQUFPLEVBQUU7QUFDUCxtQkFBSyxFQUFFLEVBREE7QUFFUCxxQkFBTyxFQUFFLENBRkY7QUFHUCxxQkFBTyxFQUFFLFFBSEY7QUFJUCxzQkFBUSxFQUFFO0FBSkg7QUFEQyxXQUFaO0FBUUQ7O0FBQ0QsY0FBTSxHQUFHLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVSxPQUFWLENBQWtCLEtBQTNCO0FBQ0Q7O0FBQ0QsWUFBTSxDQUFDLE9BQUQsQ0FBTixHQUFrQixRQUFRLENBQUMsTUFBTSxPQUFPLENBQUMsR0FBRCxDQUFkLENBQTFCO0FBQ0QsS0FqQkQsTUFpQk87QUFDTCxZQUFNLENBQUMsR0FBRCxDQUFOLEdBQWMsUUFBUSxDQUFDLE1BQU0sT0FBTyxDQUFDLEdBQUQsQ0FBZCxDQUF0QjtBQUNEO0FBQ0YsR0F0QkQ7QUF1QkEsU0FBTyxNQUFQO0FBQ0Q7O0FBRUQsU0FBUyxjQUFULENBQXlCLFNBQXpCLEVBQW9DLElBQXBDLEVBQXdDO0FBQ3RDLFFBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFMLENBQVcsMEJBQVgsRUFBdUMsTUFBdkMsQ0FBK0MsQ0FBRCxJQUFPLENBQXJELENBQWQ7QUFDQSxTQUFPLEtBQUssQ0FBQyxNQUFOLENBQ0wsQ0FBQyxNQUFELEVBQVMsVUFBVCxFQUFxQixDQUFyQixLQUEwQjtBQUN4QixVQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxLQUFLLGNBQWYsR0FBZ0MsTUFBaEMsR0FBeUMsVUFBMUMsQ0FBcEI7O0FBQ0EsUUFBSSxDQUFDLEtBQUwsRUFBWTtBQUNWLFlBQU0sSUFBSSxLQUFKLENBQVUsbUJBQW1CLFVBQVUsZUFBZSxJQUFJLElBQTFELENBQU47QUFDRDs7QUFDRCxXQUFPLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTixHQUFlLENBQXJCLEdBQXlCLEtBQXpCLEdBQWlDLEtBQUssQ0FBQyxTQUE5QztBQUNELEdBUEksRUFRTCxJQUFJLEtBQUssY0FBVCxHQUEwQixTQUExQixHQUFzQyxTQUFTLENBQUMsSUFBVixDQUFlLFNBUmhELENBQVA7QUFVRDs7QUFFRCxTQUFTLFFBQVQsQ0FBbUIsRUFBbkIsRUFBZ0M7QUFDOUIsTUFBSTtBQUNGLFdBQU8sRUFBRSxFQUFUO0FBQ0QsR0FGRCxDQUVFLE9BQU8sQ0FBUCxFQUFVO0FBQ1YsV0FBTyxDQUFQO0FBQ0Q7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3BsdWdpbi50cz8wY2NhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXR1cFBsdWdpbiA9IHZvaWQgMDtcbmNvbnN0IGRldnRvb2xzX2FwaV8xID0gcmVxdWlyZShcIkB2dWUvZGV2dG9vbHMtYXBpXCIpO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBjbG9uZV9kZWVwXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsb25lLWRlZXBcIikpO1xubGV0IGFjdGlvbklkID0gMDtcbmZ1bmN0aW9uIHNldHVwUGx1Z2luKGFwaSwgYXBwLCBWdWUpIHtcbiAgICBjb25zdCBST1VURVJfSU5TUEVDVE9SX0lEID0gJ3Z1ZTItcm91dGVyLWluc3BlY3Rvcic7XG4gICAgY29uc3QgUk9VVEVSX0NIQU5HRVNfTEFZRVJfSUQgPSAndnVlMi1yb3V0ZXItY2hhbmdlcyc7XG4gICAgY29uc3QgVlVFWF9JTlNQRUNUT1JfSUQgPSAndnVlMi12dWV4LWluc3BlY3Rvcic7XG4gICAgY29uc3QgVlVFWF9NVVRBVElPTlNfSUQgPSAndnVlMi12dWV4LW11dGF0aW9ucyc7XG4gICAgY29uc3QgVlVFWF9BQ1RJT05TX0lEID0gJ3Z1ZTItdnVleC1hY3Rpb25zJztcbiAgICAoMCwgZGV2dG9vbHNfYXBpXzEuc2V0dXBEZXZ0b29sc1BsdWdpbikoe1xuICAgICAgICBhcHAsXG4gICAgICAgIGlkOiAnb3JnLnZ1ZWpzLnZ1ZTItaW50ZXJuYWwnLFxuICAgICAgICBsYWJlbDogJ1Z1ZSAyJyxcbiAgICAgICAgaG9tZXBhZ2U6ICdodHRwczovL3Z1ZWpzLm9yZy8nLFxuICAgICAgICBsb2dvOiAnaHR0cHM6Ly92dWVqcy5vcmcvaW1hZ2VzL2ljb25zL2Zhdmljb24tOTZ4OTYucG5nJyxcbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAgIGxlZ2FjeUFjdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0xlZ2FjeSBBY3Rpb25zJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0VuYWJsZSB0aGlzIGZvciBWdWV4IDwgMy4xLjAnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LCBhcGkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGhvb2sgPSBzaGFyZWRfdXRpbHNfMS50YXJnZXQuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbiAgICAgICAgLy8gVnVlIFJvdXRlclxuICAgICAgICBpZiAoYXBwLiRyb3V0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlciA9IGFwcC4kcm91dGVyO1xuICAgICAgICAgICAgLy8gSW5zcGVjdG9yXG4gICAgICAgICAgICBhcGkuYWRkSW5zcGVjdG9yKHtcbiAgICAgICAgICAgICAgICBpZDogUk9VVEVSX0lOU1BFQ1RPUl9JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1JvdXRlcycsXG4gICAgICAgICAgICAgICAgaWNvbjogJ2Jvb2snLFxuICAgICAgICAgICAgICAgIHRyZWVGaWx0ZXJQbGFjZWhvbGRlcjogJ1NlYXJjaCByb3V0ZXMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yVHJlZShwYXlsb2FkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gUk9VVEVSX0lOU1BFQ1RPUl9JRCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGVyLm9wdGlvbnMucm91dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3ROb2RlcyA9IHJvdXRlci5vcHRpb25zLnJvdXRlcy5tYXAocm91dGUgPT4gZm9ybWF0Um91dGVOb2RlKHJvdXRlciwgcm91dGUsICcnLCBwYXlsb2FkLmZpbHRlcikpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgW1Z1ZSBEZXZ0b29sc10gTm8gcm91dGVzIGZvdW5kIGluIHJvdXRlcmAsIHJvdXRlci5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclN0YXRlKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmluc3BlY3RvcklkID09PSBST1VURVJfSU5TUEVDVE9SX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gcm91dGVyLm1hdGNoZXIuZ2V0Um91dGVzKCkuZmluZChyID0+IGdldFBhdGhJZChyKSA9PT0gcGF5bG9hZC5ub2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuc3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZm9ybWF0Um91dGVEYXRhKHJvdXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFRpbWVsaW5lXG4gICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVMYXllcih7XG4gICAgICAgICAgICAgICAgaWQ6IFJPVVRFUl9DSEFOR0VTX0xBWUVSX0lELFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnUm91dGVyIE5hdmlnYXRpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogMHg0MGE4YzQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJvdXRlci5hZnRlckVhY2goKHRvLCBmcm9tKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBST1VURVJfQ0hBTkdFU19MQVlFUl9JRCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGFwaS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0by5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yVHJlZShST1VURVJfSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZ1ZXhcbiAgICAgICAgaWYgKGFwcC4kc3RvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gYXBwLiRzdG9yZTtcbiAgICAgICAgICAgIGFwaS5hZGRJbnNwZWN0b3Ioe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX0lOU1BFQ1RPUl9JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXgnLFxuICAgICAgICAgICAgICAgIGljb246ICdzdG9yYWdlJyxcbiAgICAgICAgICAgICAgICB0cmVlRmlsdGVyUGxhY2Vob2xkZXI6ICdGaWx0ZXIgc3RvcmVzLi4uJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclRyZWUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShub2Rlcywgc3RvcmUuX21vZHVsZXMucm9vdCwgcGF5bG9hZC5maWx0ZXIsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQucm9vdE5vZGVzID0gbm9kZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3ROb2RlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUoc3RvcmUuX21vZHVsZXMucm9vdCwgJ1Jvb3QnLCAnJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yU3RhdGUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlUGF0aCA9IHBheWxvYWQubm9kZUlkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBnZXRTdG9yZU1vZHVsZShzdG9yZS5fbW9kdWxlcywgbW9kdWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFjY2VzcyB0aGUgZ2V0dGVycyBwcm9wIHRvIGluaXQgZ2V0dGVycyBjYWNoZSAod2hpY2ggaXMgbGF6eSlcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuY29udGV4dC5nZXR0ZXJzO1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnN0YXRlID0gZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JTdGF0ZShtb2R1bGUsIHN0b3JlLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGUsIG1vZHVsZVBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmVkaXRJbnNwZWN0b3JTdGF0ZSgocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmluc3BlY3RvcklkID09PSBWVUVYX0lOU1BFQ1RPUl9JRCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IHBheWxvYWQucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubm9kZUlkICE9PSBWVUVYX1JPT1RfUEFUSCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXlsb2FkLm5vZGVJZC5zcGxpdChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikuc2xpY2UoMCwgLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLl9jb21taXR0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zZXQoc3RvcmUuX3ZtLiRkYXRhLiQkc3RhdGUsIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5fY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lTGF5ZXIoe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX01VVEFUSU9OU19JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXggTXV0YXRpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogTElNRV81MDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgICAgICAgICBpZDogVlVFWF9BQ1RJT05TX0lELFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVnVleCBBY3Rpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogTElNRV81MDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGhvb2sub24oJ3Z1ZXg6bXV0YXRpb24nLCAobXV0YXRpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JTdGF0ZShWVUVYX0lOU1BFQ1RPUl9JRCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucGF5bG9hZCA9IG11dGF0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSAoMCwgY2xvbmVfZGVlcF8xLmRlZmF1bHQpKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfTVVUQVRJT05TX0lELFxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogYXBpLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG11dGF0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmdW5jdGlvbiBsZWdhY3lTaW5nbGVBY3Rpb25TdWIoYWN0aW9uLCBzdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfQUNUSU9OU19JRCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGFwaS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhY3Rpb24udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoX2EgPSBzdG9yZS5zdWJzY3JpYmVBY3Rpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHN0b3JlLCBhcGkuZ2V0U2V0dGluZ3MoKS5sZWdhY3lBY3Rpb25zXG4gICAgICAgICAgICAgICAgPyBsZWdhY3lTaW5nbGVBY3Rpb25TdWJcbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlOiAoYWN0aW9uLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uX2lkID0gYWN0aW9uSWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5fdGltZSA9IGFwaS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX0FDVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogYWN0aW9uLl90aW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGlvbi5faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXI6IChhY3Rpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGFwaS5ub3coKSAtIGFjdGlvbi5fdGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZHVyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBgJHtkdXJhdGlvbn1tc2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdBY3Rpb24gZHVyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZHVyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX0FDVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogYXBpLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGlvbi5faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiAnZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSwgeyBwcmVwZW5kOiB0cnVlIH0pO1xuICAgICAgICAgICAgLy8gSW5zcGVjdCBnZXR0ZXJzIG9uIG11dGF0aW9uc1xuICAgICAgICAgICAgYXBpLm9uLmluc3BlY3RUaW1lbGluZUV2ZW50KHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmxheWVySWQgPT09IFZVRVhfTVVUQVRJT05TX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldHRlcktleXMgPSBPYmplY3Qua2V5cyhzdG9yZS5nZXR0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldHRlcktleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2bSA9IG5ldyBWdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCRzdGF0ZTogcGF5bG9hZC5kYXRhLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IHN0b3JlLl92bS4kb3B0aW9ucy5jb21wdXRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxWbSA9IHN0b3JlLl92bTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLl92bSA9IHZtO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJlZSA9IHRyYW5zZm9ybVBhdGhzVG9PYmplY3RUcmVlKHN0b3JlLmdldHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5kYXRhLmdldHRlcnMgPSAoMCwgY2xvbmVfZGVlcF8xLmRlZmF1bHQpKHRyZWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuX3ZtID0gb3JpZ2luYWxWbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZtLiRkZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5zZXR1cFBsdWdpbiA9IHNldHVwUGx1Z2luO1xuLyoqXG4gKiBFeHRyYWN0ZWQgZnJvbSB0YWlsd2luZCBwYWxldHRlXG4gKi9cbmNvbnN0IEJMVUVfNjAwID0gMHgyNTYzZWI7XG5jb25zdCBMSU1FXzUwMCA9IDB4ODRjYzE2O1xuY29uc3QgQ1lBTl80MDAgPSAweDIyZDNlZTtcbmNvbnN0IE9SQU5HRV80MDAgPSAweGZiOTIzYztcbmNvbnN0IFdISVRFID0gMHhmZmZmZmY7XG5jb25zdCBEQVJLID0gMHg2NjY2NjY7XG5mdW5jdGlvbiBmb3JtYXRSb3V0ZU5vZGUocm91dGVyLCByb3V0ZSwgcGFyZW50UGF0aCwgZmlsdGVyKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgICBpZDogcm91dGUucGF0aC5zdGFydHNXaXRoKCcvJykgPyByb3V0ZS5wYXRoIDogYCR7cGFyZW50UGF0aH0vJHtyb3V0ZS5wYXRofWAsXG4gICAgICAgIGxhYmVsOiByb3V0ZS5wYXRoLFxuICAgICAgICBjaGlsZHJlbjogKF9hID0gcm91dGUuY2hpbGRyZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXAoY2hpbGQgPT4gZm9ybWF0Um91dGVOb2RlKHJvdXRlciwgY2hpbGQsIHJvdXRlLnBhdGgsIGZpbHRlcikpLmZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgdGFnczogW10sXG4gICAgfTtcbiAgICBpZiAoZmlsdGVyICYmICFub2RlLmlkLmluY2x1ZGVzKGZpbHRlcikgJiYgISgoX2IgPSBub2RlLmNoaWxkcmVuKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubGVuZ3RoKSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgaWYgKHJvdXRlLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogU3RyaW5nKHJvdXRlLm5hbWUpLFxuICAgICAgICAgICAgdGV4dENvbG9yOiAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBDWUFOXzQwMCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5hbGlhcyAhPSBudWxsKSB7XG4gICAgICAgIG5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYWxpYXMnLFxuICAgICAgICAgICAgdGV4dENvbG9yOiAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBPUkFOR0VfNDAwLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG5vZGUuaWQgPT09IHJvdXRlci5jdXJyZW50Um91dGUucGF0aCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogJ2FjdGl2ZScsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IFdISVRFLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBCTFVFXzYwMCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5yZWRpcmVjdCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogJ3JlZGlyZWN0OiAnICtcbiAgICAgICAgICAgICAgICAodHlwZW9mIHJvdXRlLnJlZGlyZWN0ID09PSAnc3RyaW5nJyA/IHJvdXRlLnJlZGlyZWN0IDogJ09iamVjdCcpLFxuICAgICAgICAgICAgdGV4dENvbG9yOiBXSElURSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogREFSSyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gZm9ybWF0Um91dGVEYXRhKHJvdXRlKSB7XG4gICAgY29uc3QgZGF0YSA9IFtdO1xuICAgIGRhdGEucHVzaCh7IGtleTogJ3BhdGgnLCB2YWx1ZTogcm91dGUucGF0aCB9KTtcbiAgICBpZiAocm91dGUucmVkaXJlY3QpIHtcbiAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAncmVkaXJlY3QnLCB2YWx1ZTogcm91dGUucmVkaXJlY3QgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5hbGlhcykge1xuICAgICAgICBkYXRhLnB1c2goeyBrZXk6ICdhbGlhcycsIHZhbHVlOiByb3V0ZS5hbGlhcyB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnByb3BzKSB7XG4gICAgICAgIGRhdGEucHVzaCh7IGtleTogJ3Byb3BzJywgdmFsdWU6IHJvdXRlLnByb3BzIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUubmFtZSAmJiByb3V0ZS5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAnbmFtZScsIHZhbHVlOiByb3V0ZS5uYW1lIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUuY29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHt9O1xuICAgICAgICAvLyBpZiAocm91dGUuY29tcG9uZW50Ll9fZmlsZSkge1xuICAgICAgICAvLyAgIGNvbXBvbmVudC5maWxlID0gcm91dGUuY29tcG9uZW50Ll9fZmlsZVxuICAgICAgICAvLyB9XG4gICAgICAgIGlmIChyb3V0ZS5jb21wb25lbnQudGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC50ZW1wbGF0ZSA9IHJvdXRlLmNvbXBvbmVudC50ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGUuY29tcG9uZW50LnByb3BzKSB7XG4gICAgICAgICAgICBjb21wb25lbnQucHJvcHMgPSByb3V0ZS5jb21wb25lbnQucHJvcHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoMCwgc2hhcmVkX3V0aWxzXzEuaXNFbXB0eU9iamVjdCkoY29tcG9uZW50KSkge1xuICAgICAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAnY29tcG9uZW50JywgdmFsdWU6IGNvbXBvbmVudCB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbmZ1bmN0aW9uIGdldFBhdGhJZChyb3V0ZU1hdGNoZXIpIHtcbiAgICBsZXQgcGF0aCA9IHJvdXRlTWF0Y2hlci5wYXRoO1xuICAgIGlmIChyb3V0ZU1hdGNoZXIucGFyZW50KSB7XG4gICAgICAgIHBhdGggPSBnZXRQYXRoSWQocm91dGVNYXRjaGVyLnBhcmVudCkgKyBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbn1cbmNvbnN0IFRBR19OQU1FU1BBQ0VEID0ge1xuICAgIGxhYmVsOiAnbmFtZXNwYWNlZCcsXG4gICAgdGV4dENvbG9yOiBXSElURSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IERBUkssXG59O1xuY29uc3QgVlVFWF9ST09UX1BBVEggPSAnX192ZHRfcm9vdCc7XG5jb25zdCBWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUiA9ICdbdmR0XSc7XG5jb25zdCBWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUl9SRUcgPSAvXFxbdmR0XFxdL2c7XG5mdW5jdGlvbiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUobW9kdWxlLCBtb2R1bGVOYW1lLCBwYXRoKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwYXRoIHx8IFZVRVhfUk9PVF9QQVRILFxuICAgICAgICAvLyBhbGwgbW9kdWxlcyBlbmQgd2l0aCBhIGAvYCwgd2Ugd2FudCB0aGUgbGFzdCBzZWdtZW50IG9ubHlcbiAgICAgICAgLy8gY2FydC8gLT4gY2FydFxuICAgICAgICAvLyBuZXN0ZWQvY2FydC8gLT4gY2FydFxuICAgICAgICBsYWJlbDogbW9kdWxlTmFtZSxcbiAgICAgICAgdGFnczogbW9kdWxlLm5hbWVzcGFjZWQgPyBbVEFHX05BTUVTUEFDRURdIDogW10sXG4gICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cygoX2EgPSBtb2R1bGUuX2NoaWxkcmVuKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSkubWFwKChrZXkpID0+IGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yVHJlZShtb2R1bGUuX2NoaWxkcmVuW2tleV0sIGtleSwgYCR7cGF0aH0ke2tleX0ke1ZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SfWApKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShyZXN1bHQsIG1vZHVsZSwgZmlsdGVyLCBwYXRoKSB7XG4gICAgaWYgKHBhdGguaW5jbHVkZXMoZmlsdGVyKSkge1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICBpZDogcGF0aCB8fCBWVUVYX1JPT1RfUEFUSCxcbiAgICAgICAgICAgIGxhYmVsOiBwYXRoLmVuZHNXaXRoKFZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SKSA/IHBhdGguc2xpY2UoMCwgcGF0aC5sZW5ndGggLSAxKSA6IHBhdGggfHwgJ1Jvb3QnLFxuICAgICAgICAgICAgdGFnczogbW9kdWxlLm5hbWVzcGFjZWQgPyBbVEFHX05BTUVTUEFDRURdIDogW10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhtb2R1bGUuX2NoaWxkcmVuKS5mb3JFYWNoKG1vZHVsZU5hbWUgPT4ge1xuICAgICAgICBmbGF0dGVuU3RvcmVGb3JJbnNwZWN0b3JUcmVlKHJlc3VsdCwgbW9kdWxlLl9jaGlsZHJlblttb2R1bGVOYW1lXSwgZmlsdGVyLCBwYXRoICsgbW9kdWxlTmFtZSArIFZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICAgIHJldHVybiBwYXRoICYmIHBhdGggIT09IFZVRVhfUk9PVF9QQVRIID8gcGF0aC5zcGxpdChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikuc2xpY2UoLTIsIC0xKVswXSA6ICdSb290Jztcbn1cbmZ1bmN0aW9uIGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yU3RhdGUobW9kdWxlLCBnZXR0ZXJzLCBwYXRoKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBzdG9yZVN0YXRlID0ge1xuICAgICAgICBzdGF0ZTogT2JqZWN0LmtleXMoKF9hID0gbW9kdWxlLmNvbnRleHQuc3RhdGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9KS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG1vZHVsZS5jb250ZXh0LnN0YXRlW2tleV0sXG4gICAgICAgIH0pKSxcbiAgICB9O1xuICAgIGNvbnN0IHBhdGhXaXRoU2xhc2hlcyA9IHBhdGgucmVwbGFjZShWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUl9SRUcsICcvJyk7XG4gICAgZ2V0dGVycyA9ICFtb2R1bGUubmFtZXNwYWNlZCB8fCBwYXRoID09PSBWVUVYX1JPT1RfUEFUSCA/IG1vZHVsZS5jb250ZXh0LmdldHRlcnMgOiBnZXR0ZXJzW3BhdGhXaXRoU2xhc2hlc107XG4gICAgbGV0IGdldHRlcnNLZXlzID0gT2JqZWN0LmtleXMoZ2V0dGVycyk7XG4gICAgY29uc3Qgc2hvdWxkUGlja0dldHRlcnMgPSAhbW9kdWxlLm5hbWVzcGFjZWQgJiYgcGF0aCAhPT0gVlVFWF9ST09UX1BBVEg7XG4gICAgaWYgKHNob3VsZFBpY2tHZXR0ZXJzKSB7XG4gICAgICAgIC8vIE9ubHkgcGljayB0aGUgZ2V0dGVycyBkZWZpbmVkIGluIHRoZSBub24tbmFtZXNwYWNlZCBtb2R1bGVcbiAgICAgICAgY29uc3QgZGVmaW5lZEdldHRlcnNLZXlzID0gT2JqZWN0LmtleXMoKF9iID0gbW9kdWxlLl9yYXdNb2R1bGUuZ2V0dGVycykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge30pO1xuICAgICAgICBnZXR0ZXJzS2V5cyA9IGdldHRlcnNLZXlzLmZpbHRlcihrZXkgPT4gZGVmaW5lZEdldHRlcnNLZXlzLmluY2x1ZGVzKGtleSkpO1xuICAgIH1cbiAgICBpZiAoZ2V0dGVyc0tleXMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBtb2R1bGVHZXR0ZXJzO1xuICAgICAgICBpZiAoc2hvdWxkUGlja0dldHRlcnMpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgcGljayB0aGUgZ2V0dGVycyBkZWZpbmVkIGluIHRoZSBub24tbmFtZXNwYWNlZCBtb2R1bGVcbiAgICAgICAgICAgIG1vZHVsZUdldHRlcnMgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGdldHRlcnNLZXlzKSB7XG4gICAgICAgICAgICAgICAgbW9kdWxlR2V0dGVyc1trZXldID0gY2FuVGhyb3coKCkgPT4gZ2V0dGVyc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1vZHVsZUdldHRlcnMgPSBnZXR0ZXJzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyZWUgPSB0cmFuc2Zvcm1QYXRoc1RvT2JqZWN0VHJlZShtb2R1bGVHZXR0ZXJzKTtcbiAgICAgICAgc3RvcmVTdGF0ZS5nZXR0ZXJzID0gT2JqZWN0LmtleXModHJlZSkubWFwKChrZXkpID0+ICh7XG4gICAgICAgICAgICBrZXk6IGtleS5lbmRzV2l0aCgnLycpID8gZXh0cmFjdE5hbWVGcm9tUGF0aChrZXkpIDoga2V5LFxuICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IGNhblRocm93KCgpID0+IHRyZWVba2V5XSksXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0b3JlU3RhdGU7XG59XG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoc1RvT2JqZWN0VHJlZShnZXR0ZXJzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgT2JqZWN0LmtleXMoZ2V0dGVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCBwYXRoID0ga2V5LnNwbGl0KCcvJyk7XG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSByZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBsZWFmS2V5ID0gcGF0aC5wb3AoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRbcF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3BdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdNb2R1bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic3RyYWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W3BdLl9jdXN0b20udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXRbbGVhZktleV0gPSBjYW5UaHJvdygoKSA9PiBnZXR0ZXJzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBjYW5UaHJvdygoKSA9PiBnZXR0ZXJzW2tleV0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldFN0b3JlTW9kdWxlKG1vZHVsZU1hcCwgcGF0aCkge1xuICAgIGNvbnN0IG5hbWVzID0gcGF0aC5zcGxpdChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikuZmlsdGVyKChuKSA9PiBuKTtcbiAgICByZXR1cm4gbmFtZXMucmVkdWNlKChtb2R1bGUsIG1vZHVsZU5hbWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBtb2R1bGVbbW9kdWxlTmFtZSA9PT0gVlVFWF9ST09UX1BBVEggPyAncm9vdCcgOiBtb2R1bGVOYW1lXTtcbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG1vZHVsZSBcIiR7bW9kdWxlTmFtZX1cIiBmb3IgcGF0aCBcIiR7cGF0aH1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaSA9PT0gbmFtZXMubGVuZ3RoIC0gMSA/IGNoaWxkIDogY2hpbGQuX2NoaWxkcmVuO1xuICAgIH0sIHBhdGggPT09IFZVRVhfUk9PVF9QQVRIID8gbW9kdWxlTWFwIDogbW9kdWxlTWFwLnJvb3QuX2NoaWxkcmVuKTtcbn1cbmZ1bmN0aW9uIGNhblRocm93KGNiKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBsdWdpbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7725\n");
335
343
 
336
344
  /***/ }),
337
345
 
@@ -411,7 +419,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
411
419
  /***/ ((__unused_webpack_module, exports) => {
412
420
 
413
421
  "use strict";
414
- eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.HookEvents = exports.BridgeSubscriptions = exports.BridgeEvents = exports.BuiltinTabs = void 0;\nvar BuiltinTabs;\n\n(function (BuiltinTabs) {\n BuiltinTabs[\"COMPONENTS\"] = \"components\";\n BuiltinTabs[\"TIMELINE\"] = \"timeline\";\n BuiltinTabs[\"PLUGINS\"] = \"plugins\";\n BuiltinTabs[\"SETTINGS\"] = \"settings\";\n})(BuiltinTabs = exports.BuiltinTabs || (exports.BuiltinTabs = {}));\n\nvar BridgeEvents;\n\n(function (BridgeEvents) {\n // Misc\n BridgeEvents[\"TO_BACK_SUBSCRIBE\"] = \"b:subscribe\";\n BridgeEvents[\"TO_BACK_UNSUBSCRIBE\"] = \"b:unsubscribe\";\n /** Backend is ready */\n\n BridgeEvents[\"TO_FRONT_READY\"] = \"f:ready\";\n /** Displays the \"detected Vue\" console log */\n\n BridgeEvents[\"TO_BACK_LOG_DETECTED_VUE\"] = \"b:log-detected-vue\";\n /** Force refresh */\n\n BridgeEvents[\"TO_BACK_REFRESH\"] = \"b:refresh\";\n /** Tab was switched */\n\n BridgeEvents[\"TO_BACK_TAB_SWITCH\"] = \"b:tab:switch\";\n BridgeEvents[\"TO_BACK_LOG\"] = \"b:log\"; // Apps\n\n /** App was registered */\n\n BridgeEvents[\"TO_FRONT_APP_ADD\"] = \"f:app:add\";\n /** Get app list */\n\n BridgeEvents[\"TO_BACK_APP_LIST\"] = \"b:app:list\";\n BridgeEvents[\"TO_FRONT_APP_LIST\"] = \"f:app:list\";\n BridgeEvents[\"TO_FRONT_APP_REMOVE\"] = \"f:app:remove\";\n BridgeEvents[\"TO_BACK_APP_SELECT\"] = \"b:app:select\";\n BridgeEvents[\"TO_FRONT_APP_SELECTED\"] = \"f:app:selected\";\n BridgeEvents[\"TO_BACK_SCAN_LEGACY_APPS\"] = \"b:app:scan-legacy\"; // Components\n\n BridgeEvents[\"TO_BACK_COMPONENT_TREE\"] = \"b:component:tree\";\n BridgeEvents[\"TO_FRONT_COMPONENT_TREE\"] = \"f:component:tree\";\n BridgeEvents[\"TO_BACK_COMPONENT_SELECTED_DATA\"] = \"b:component:selected-data\";\n BridgeEvents[\"TO_FRONT_COMPONENT_SELECTED_DATA\"] = \"f:component:selected-data\";\n BridgeEvents[\"TO_BACK_COMPONENT_EXPAND\"] = \"b:component:expand\";\n BridgeEvents[\"TO_FRONT_COMPONENT_EXPAND\"] = \"f:component:expand\";\n BridgeEvents[\"TO_BACK_COMPONENT_SCROLL_TO\"] = \"b:component:scroll-to\";\n BridgeEvents[\"TO_BACK_COMPONENT_FILTER\"] = \"b:component:filter\";\n BridgeEvents[\"TO_BACK_COMPONENT_MOUSE_OVER\"] = \"b:component:mouse-over\";\n BridgeEvents[\"TO_BACK_COMPONENT_MOUSE_OUT\"] = \"b:component:mouse-out\";\n BridgeEvents[\"TO_BACK_COMPONENT_CONTEXT_MENU_TARGET\"] = \"b:component:context-menu-target\";\n BridgeEvents[\"TO_BACK_COMPONENT_EDIT_STATE\"] = \"b:component:edit-state\";\n BridgeEvents[\"TO_BACK_COMPONENT_PICK\"] = \"b:component:pick\";\n BridgeEvents[\"TO_FRONT_COMPONENT_PICK\"] = \"f:component:pick\";\n BridgeEvents[\"TO_BACK_COMPONENT_PICK_CANCELED\"] = \"b:component:pick-canceled\";\n BridgeEvents[\"TO_FRONT_COMPONENT_PICK_CANCELED\"] = \"f:component:pick-canceled\";\n BridgeEvents[\"TO_BACK_COMPONENT_INSPECT_DOM\"] = \"b:component:inspect-dom\";\n BridgeEvents[\"TO_FRONT_COMPONENT_INSPECT_DOM\"] = \"f:component:inspect-dom\";\n BridgeEvents[\"TO_BACK_COMPONENT_RENDER_CODE\"] = \"b:component:render-code\";\n BridgeEvents[\"TO_FRONT_COMPONENT_RENDER_CODE\"] = \"f:component:render-code\"; // Timeline\n\n BridgeEvents[\"TO_FRONT_TIMELINE_EVENT\"] = \"f:timeline:event\";\n BridgeEvents[\"TO_BACK_TIMELINE_LAYER_LIST\"] = \"b:timeline:layer-list\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LAYER_LIST\"] = \"f:timeline:layer-list\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LAYER_ADD\"] = \"f:timeline:layer-add\";\n BridgeEvents[\"TO_BACK_TIMELINE_SHOW_SCREENSHOT\"] = \"b:timeline:show-screenshot\";\n BridgeEvents[\"TO_BACK_TIMELINE_CLEAR\"] = \"b:timeline:clear\";\n BridgeEvents[\"TO_BACK_TIMELINE_EVENT_DATA\"] = \"b:timeline:event-data\";\n BridgeEvents[\"TO_FRONT_TIMELINE_EVENT_DATA\"] = \"f:timeline:event-data\";\n BridgeEvents[\"TO_BACK_TIMELINE_LAYER_LOAD_EVENTS\"] = \"b:timeline:layer-load-events\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LAYER_LOAD_EVENTS\"] = \"f:timeline:layer-load-events\";\n BridgeEvents[\"TO_BACK_TIMELINE_LOAD_MARKERS\"] = \"b:timeline:load-markers\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LOAD_MARKERS\"] = \"f:timeline:load-markers\";\n BridgeEvents[\"TO_FRONT_TIMELINE_MARKER\"] = \"f:timeline:marker\"; // Plugins\n\n BridgeEvents[\"TO_BACK_DEVTOOLS_PLUGIN_LIST\"] = \"b:devtools-plugin:list\";\n BridgeEvents[\"TO_FRONT_DEVTOOLS_PLUGIN_LIST\"] = \"f:devtools-plugin:list\";\n BridgeEvents[\"TO_FRONT_DEVTOOLS_PLUGIN_ADD\"] = \"f:devtools-plugin:add\";\n BridgeEvents[\"TO_BACK_DEVTOOLS_PLUGIN_SETTING_UPDATED\"] = \"b:devtools-plugin:setting-updated\"; // Custom inspectors\n\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_LIST\"] = \"b:custom-inspector:list\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_LIST\"] = \"f:custom-inspector:list\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_ADD\"] = \"f:custom-inspector:add\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_TREE\"] = \"b:custom-inspector:tree\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_TREE\"] = \"f:custom-inspector:tree\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_STATE\"] = \"b:custom-inspector:state\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_STATE\"] = \"f:custom-inspector:state\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_EDIT_STATE\"] = \"b:custom-inspector:edit-state\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_ACTION\"] = \"b:custom-inspector:action\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_SELECT_NODE\"] = \"f:custom-inspector:select-node\"; // Custom state\n\n BridgeEvents[\"TO_BACK_CUSTOM_STATE_ACTION\"] = \"b:custom-state:action\";\n})(BridgeEvents = exports.BridgeEvents || (exports.BridgeEvents = {}));\n\nvar BridgeSubscriptions;\n\n(function (BridgeSubscriptions) {\n BridgeSubscriptions[\"SELECTED_COMPONENT_DATA\"] = \"component:selected-data\";\n BridgeSubscriptions[\"COMPONENT_TREE\"] = \"component:tree\";\n})(BridgeSubscriptions = exports.BridgeSubscriptions || (exports.BridgeSubscriptions = {}));\n\nvar HookEvents;\n\n(function (HookEvents) {\n HookEvents[\"INIT\"] = \"init\";\n HookEvents[\"APP_INIT\"] = \"app:init\";\n HookEvents[\"APP_ADD\"] = \"app:add\";\n HookEvents[\"APP_UNMOUNT\"] = \"app:unmount\";\n HookEvents[\"COMPONENT_UPDATED\"] = \"component:updated\";\n HookEvents[\"COMPONENT_ADDED\"] = \"component:added\";\n HookEvents[\"COMPONENT_REMOVED\"] = \"component:removed\";\n HookEvents[\"COMPONENT_EMIT\"] = \"component:emit\";\n HookEvents[\"COMPONENT_HIGHLIGHT\"] = \"component:highlight\";\n HookEvents[\"COMPONENT_UNHIGHLIGHT\"] = \"component:unhighlight\";\n HookEvents[\"SETUP_DEVTOOLS_PLUGIN\"] = \"devtools-plugin:setup\";\n HookEvents[\"TIMELINE_LAYER_ADDED\"] = \"timeline:layer-added\";\n HookEvents[\"TIMELINE_EVENT_ADDED\"] = \"timeline:event-added\";\n HookEvents[\"CUSTOM_INSPECTOR_ADD\"] = \"custom-inspector:add\";\n HookEvents[\"CUSTOM_INSPECTOR_SEND_TREE\"] = \"custom-inspector:send-tree\";\n HookEvents[\"CUSTOM_INSPECTOR_SEND_STATE\"] = \"custom-inspector:send-state\";\n HookEvents[\"CUSTOM_INSPECTOR_SELECT_NODE\"] = \"custom-inspector:select-node\";\n HookEvents[\"PERFORMANCE_START\"] = \"perf:start\";\n HookEvents[\"PERFORMANCE_END\"] = \"perf:end\";\n HookEvents[\"PLUGIN_SETTINGS_SET\"] = \"plugin:settings:set\";\n /**\n * @deprecated\n */\n\n HookEvents[\"FLUSH\"] = \"flush\";\n})(HookEvents = exports.HookEvents || (exports.HookEvents = {}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk0MTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBWSxXQUFaOztBQUFBLFdBQVksV0FBWixFQUF1QjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNELENBTEQsRUFBWSxXQUFXLEdBQVgsOENBQVcsRUFBWCxDQUFaOztBQU9BLElBQVksWUFBWjs7QUFBQSxXQUFZLFlBQVosRUFBd0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQSx3Q0Fac0IsQ0FjdEI7O0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBdkJzQixDQXlCdEI7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUE3Q3NCLENBK0N0Qjs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUE1RHNCLENBOER0Qjs7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnR0FsRXNCLENBb0V0Qjs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkE5RXNCLENBZ0Z0Qjs7QUFDQTtBQUNELENBbEZELEVBQVksWUFBWSxHQUFaLGdEQUFZLEVBQVosQ0FBWjs7QUFvRkEsSUFBWSxtQkFBWjs7QUFBQSxXQUFZLG1CQUFaLEVBQStCO0FBQzdCO0FBQ0E7QUFDRCxDQUhELEVBQVksbUJBQW1CLEdBQW5CLDhEQUFtQixFQUFuQixDQUFaOztBQUtBLElBQVksVUFBWjs7QUFBQSxXQUFZLFVBQVosRUFBc0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVHOztBQUNIO0FBQ0QsQ0F6QkQsRUFBWSxVQUFVLEdBQVYsNENBQVUsRUFBVixDQUFaIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvY29uc3RzLnRzP2Q5MTgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkhvb2tFdmVudHMgPSBleHBvcnRzLkJyaWRnZVN1YnNjcmlwdGlvbnMgPSBleHBvcnRzLkJyaWRnZUV2ZW50cyA9IGV4cG9ydHMuQnVpbHRpblRhYnMgPSB2b2lkIDA7XG52YXIgQnVpbHRpblRhYnM7XG4oZnVuY3Rpb24gKEJ1aWx0aW5UYWJzKSB7XG4gICAgQnVpbHRpblRhYnNbXCJDT01QT05FTlRTXCJdID0gXCJjb21wb25lbnRzXCI7XG4gICAgQnVpbHRpblRhYnNbXCJUSU1FTElORVwiXSA9IFwidGltZWxpbmVcIjtcbiAgICBCdWlsdGluVGFic1tcIlBMVUdJTlNcIl0gPSBcInBsdWdpbnNcIjtcbiAgICBCdWlsdGluVGFic1tcIlNFVFRJTkdTXCJdID0gXCJzZXR0aW5nc1wiO1xufSkoQnVpbHRpblRhYnMgPSBleHBvcnRzLkJ1aWx0aW5UYWJzIHx8IChleHBvcnRzLkJ1aWx0aW5UYWJzID0ge30pKTtcbnZhciBCcmlkZ2VFdmVudHM7XG4oZnVuY3Rpb24gKEJyaWRnZUV2ZW50cykge1xuICAgIC8vIE1pc2NcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1NVQlNDUklCRVwiXSA9IFwiYjpzdWJzY3JpYmVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1VOU1VCU0NSSUJFXCJdID0gXCJiOnVuc3Vic2NyaWJlXCI7XG4gICAgLyoqIEJhY2tlbmQgaXMgcmVhZHkgKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9SRUFEWVwiXSA9IFwiZjpyZWFkeVwiO1xuICAgIC8qKiBEaXNwbGF5cyB0aGUgXCJkZXRlY3RlZCBWdWVcIiBjb25zb2xlIGxvZyAqL1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfTE9HX0RFVEVDVEVEX1ZVRVwiXSA9IFwiYjpsb2ctZGV0ZWN0ZWQtdnVlXCI7XG4gICAgLyoqIEZvcmNlIHJlZnJlc2ggKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1JFRlJFU0hcIl0gPSBcImI6cmVmcmVzaFwiO1xuICAgIC8qKiBUYWIgd2FzIHN3aXRjaGVkICovXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19UQUJfU1dJVENIXCJdID0gXCJiOnRhYjpzd2l0Y2hcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0xPR1wiXSA9IFwiYjpsb2dcIjtcbiAgICAvLyBBcHBzXG4gICAgLyoqIEFwcCB3YXMgcmVnaXN0ZXJlZCAqL1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0FQUF9BRERcIl0gPSBcImY6YXBwOmFkZFwiO1xuICAgIC8qKiBHZXQgYXBwIGxpc3QgKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0FQUF9MSVNUXCJdID0gXCJiOmFwcDpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQVBQX0xJU1RcIl0gPSBcImY6YXBwOmxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9BUFBfUkVNT1ZFXCJdID0gXCJmOmFwcDpyZW1vdmVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0FQUF9TRUxFQ1RcIl0gPSBcImI6YXBwOnNlbGVjdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0FQUF9TRUxFQ1RFRFwiXSA9IFwiZjphcHA6c2VsZWN0ZWRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1NDQU5fTEVHQUNZX0FQUFNcIl0gPSBcImI6YXBwOnNjYW4tbGVnYWN5XCI7XG4gICAgLy8gQ29tcG9uZW50c1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1RSRUVcIl0gPSBcImI6Y29tcG9uZW50OnRyZWVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfVFJFRVwiXSA9IFwiZjpjb21wb25lbnQ6dHJlZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1NFTEVDVEVEX0RBVEFcIl0gPSBcImI6Y29tcG9uZW50OnNlbGVjdGVkLWRhdGFcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfU0VMRUNURURfREFUQVwiXSA9IFwiZjpjb21wb25lbnQ6c2VsZWN0ZWQtZGF0YVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX0VYUEFORFwiXSA9IFwiYjpjb21wb25lbnQ6ZXhwYW5kXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ09NUE9ORU5UX0VYUEFORFwiXSA9IFwiZjpjb21wb25lbnQ6ZXhwYW5kXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfU0NST0xMX1RPXCJdID0gXCJiOmNvbXBvbmVudDpzY3JvbGwtdG9cIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9GSUxURVJcIl0gPSBcImI6Y29tcG9uZW50OmZpbHRlclwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX01PVVNFX09WRVJcIl0gPSBcImI6Y29tcG9uZW50Om1vdXNlLW92ZXJcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9NT1VTRV9PVVRcIl0gPSBcImI6Y29tcG9uZW50Om1vdXNlLW91dFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX0NPTlRFWFRfTUVOVV9UQVJHRVRcIl0gPSBcImI6Y29tcG9uZW50OmNvbnRleHQtbWVudS10YXJnZXRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9FRElUX1NUQVRFXCJdID0gXCJiOmNvbXBvbmVudDplZGl0LXN0YXRlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfUElDS1wiXSA9IFwiYjpjb21wb25lbnQ6cGlja1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9QSUNLXCJdID0gXCJmOmNvbXBvbmVudDpwaWNrXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfUElDS19DQU5DRUxFRFwiXSA9IFwiYjpjb21wb25lbnQ6cGljay1jYW5jZWxlZFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9QSUNLX0NBTkNFTEVEXCJdID0gXCJmOmNvbXBvbmVudDpwaWNrLWNhbmNlbGVkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfSU5TUEVDVF9ET01cIl0gPSBcImI6Y29tcG9uZW50Omluc3BlY3QtZG9tXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ09NUE9ORU5UX0lOU1BFQ1RfRE9NXCJdID0gXCJmOmNvbXBvbmVudDppbnNwZWN0LWRvbVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1JFTkRFUl9DT0RFXCJdID0gXCJiOmNvbXBvbmVudDpyZW5kZXItY29kZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9SRU5ERVJfQ09ERVwiXSA9IFwiZjpjb21wb25lbnQ6cmVuZGVyLWNvZGVcIjtcbiAgICAvLyBUaW1lbGluZVxuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX0VWRU5UXCJdID0gXCJmOnRpbWVsaW5lOmV2ZW50XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9MQVlFUl9MSVNUXCJdID0gXCJiOnRpbWVsaW5lOmxheWVyLWxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9USU1FTElORV9MQVlFUl9MSVNUXCJdID0gXCJmOnRpbWVsaW5lOmxheWVyLWxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9USU1FTElORV9MQVlFUl9BRERcIl0gPSBcImY6dGltZWxpbmU6bGF5ZXItYWRkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9TSE9XX1NDUkVFTlNIT1RcIl0gPSBcImI6dGltZWxpbmU6c2hvdy1zY3JlZW5zaG90XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9DTEVBUlwiXSA9IFwiYjp0aW1lbGluZTpjbGVhclwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfVElNRUxJTkVfRVZFTlRfREFUQVwiXSA9IFwiYjp0aW1lbGluZTpldmVudC1kYXRhXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfRVZFTlRfREFUQVwiXSA9IFwiZjp0aW1lbGluZTpldmVudC1kYXRhXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9MQVlFUl9MT0FEX0VWRU5UU1wiXSA9IFwiYjp0aW1lbGluZTpsYXllci1sb2FkLWV2ZW50c1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0xPQURfRVZFTlRTXCJdID0gXCJmOnRpbWVsaW5lOmxheWVyLWxvYWQtZXZlbnRzXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9MT0FEX01BUktFUlNcIl0gPSBcImI6dGltZWxpbmU6bG9hZC1tYXJrZXJzXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfTE9BRF9NQVJLRVJTXCJdID0gXCJmOnRpbWVsaW5lOmxvYWQtbWFya2Vyc1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX01BUktFUlwiXSA9IFwiZjp0aW1lbGluZTptYXJrZXJcIjtcbiAgICAvLyBQbHVnaW5zXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19ERVZUT09MU19QTFVHSU5fTElTVFwiXSA9IFwiYjpkZXZ0b29scy1wbHVnaW46bGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0RFVlRPT0xTX1BMVUdJTl9MSVNUXCJdID0gXCJmOmRldnRvb2xzLXBsdWdpbjpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfREVWVE9PTFNfUExVR0lOX0FERFwiXSA9IFwiZjpkZXZ0b29scy1wbHVnaW46YWRkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19ERVZUT09MU19QTFVHSU5fU0VUVElOR19VUERBVEVEXCJdID0gXCJiOmRldnRvb2xzLXBsdWdpbjpzZXR0aW5nLXVwZGF0ZWRcIjtcbiAgICAvLyBDdXN0b20gaW5zcGVjdG9yc1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9MSVNUXCJdID0gXCJiOmN1c3RvbS1pbnNwZWN0b3I6bGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfTElTVFwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOmxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DVVNUT01fSU5TUEVDVE9SX0FERFwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOmFkZFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9UUkVFXCJdID0gXCJiOmN1c3RvbS1pbnNwZWN0b3I6dHJlZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfVFJFRVwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOnRyZWVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NVU1RPTV9JTlNQRUNUT1JfU1RBVEVcIl0gPSBcImI6Y3VzdG9tLWluc3BlY3RvcjpzdGF0ZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfU1RBVEVcIl0gPSBcImY6Y3VzdG9tLWluc3BlY3RvcjpzdGF0ZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9FRElUX1NUQVRFXCJdID0gXCJiOmN1c3RvbS1pbnNwZWN0b3I6ZWRpdC1zdGF0ZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9BQ1RJT05cIl0gPSBcImI6Y3VzdG9tLWluc3BlY3RvcjphY3Rpb25cIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DVVNUT01fSU5TUEVDVE9SX1NFTEVDVF9OT0RFXCJdID0gXCJmOmN1c3RvbS1pbnNwZWN0b3I6c2VsZWN0LW5vZGVcIjtcbiAgICAvLyBDdXN0b20gc3RhdGVcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NVU1RPTV9TVEFURV9BQ1RJT05cIl0gPSBcImI6Y3VzdG9tLXN0YXRlOmFjdGlvblwiO1xufSkoQnJpZGdlRXZlbnRzID0gZXhwb3J0cy5CcmlkZ2VFdmVudHMgfHwgKGV4cG9ydHMuQnJpZGdlRXZlbnRzID0ge30pKTtcbnZhciBCcmlkZ2VTdWJzY3JpcHRpb25zO1xuKGZ1bmN0aW9uIChCcmlkZ2VTdWJzY3JpcHRpb25zKSB7XG4gICAgQnJpZGdlU3Vic2NyaXB0aW9uc1tcIlNFTEVDVEVEX0NPTVBPTkVOVF9EQVRBXCJdID0gXCJjb21wb25lbnQ6c2VsZWN0ZWQtZGF0YVwiO1xuICAgIEJyaWRnZVN1YnNjcmlwdGlvbnNbXCJDT01QT05FTlRfVFJFRVwiXSA9IFwiY29tcG9uZW50OnRyZWVcIjtcbn0pKEJyaWRnZVN1YnNjcmlwdGlvbnMgPSBleHBvcnRzLkJyaWRnZVN1YnNjcmlwdGlvbnMgfHwgKGV4cG9ydHMuQnJpZGdlU3Vic2NyaXB0aW9ucyA9IHt9KSk7XG52YXIgSG9va0V2ZW50cztcbihmdW5jdGlvbiAoSG9va0V2ZW50cykge1xuICAgIEhvb2tFdmVudHNbXCJJTklUXCJdID0gXCJpbml0XCI7XG4gICAgSG9va0V2ZW50c1tcIkFQUF9JTklUXCJdID0gXCJhcHA6aW5pdFwiO1xuICAgIEhvb2tFdmVudHNbXCJBUFBfQUREXCJdID0gXCJhcHA6YWRkXCI7XG4gICAgSG9va0V2ZW50c1tcIkFQUF9VTk1PVU5UXCJdID0gXCJhcHA6dW5tb3VudFwiO1xuICAgIEhvb2tFdmVudHNbXCJDT01QT05FTlRfVVBEQVRFRFwiXSA9IFwiY29tcG9uZW50OnVwZGF0ZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ09NUE9ORU5UX0FEREVEXCJdID0gXCJjb21wb25lbnQ6YWRkZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ09NUE9ORU5UX1JFTU9WRURcIl0gPSBcImNvbXBvbmVudDpyZW1vdmVkXCI7XG4gICAgSG9va0V2ZW50c1tcIkNPTVBPTkVOVF9FTUlUXCJdID0gXCJjb21wb25lbnQ6ZW1pdFwiO1xuICAgIEhvb2tFdmVudHNbXCJDT01QT05FTlRfSElHSExJR0hUXCJdID0gXCJjb21wb25lbnQ6aGlnaGxpZ2h0XCI7XG4gICAgSG9va0V2ZW50c1tcIkNPTVBPTkVOVF9VTkhJR0hMSUdIVFwiXSA9IFwiY29tcG9uZW50OnVuaGlnaGxpZ2h0XCI7XG4gICAgSG9va0V2ZW50c1tcIlNFVFVQX0RFVlRPT0xTX1BMVUdJTlwiXSA9IFwiZGV2dG9vbHMtcGx1Z2luOnNldHVwXCI7XG4gICAgSG9va0V2ZW50c1tcIlRJTUVMSU5FX0xBWUVSX0FEREVEXCJdID0gXCJ0aW1lbGluZTpsYXllci1hZGRlZFwiO1xuICAgIEhvb2tFdmVudHNbXCJUSU1FTElORV9FVkVOVF9BRERFRFwiXSA9IFwidGltZWxpbmU6ZXZlbnQtYWRkZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ1VTVE9NX0lOU1BFQ1RPUl9BRERcIl0gPSBcImN1c3RvbS1pbnNwZWN0b3I6YWRkXCI7XG4gICAgSG9va0V2ZW50c1tcIkNVU1RPTV9JTlNQRUNUT1JfU0VORF9UUkVFXCJdID0gXCJjdXN0b20taW5zcGVjdG9yOnNlbmQtdHJlZVwiO1xuICAgIEhvb2tFdmVudHNbXCJDVVNUT01fSU5TUEVDVE9SX1NFTkRfU1RBVEVcIl0gPSBcImN1c3RvbS1pbnNwZWN0b3I6c2VuZC1zdGF0ZVwiO1xuICAgIEhvb2tFdmVudHNbXCJDVVNUT01fSU5TUEVDVE9SX1NFTEVDVF9OT0RFXCJdID0gXCJjdXN0b20taW5zcGVjdG9yOnNlbGVjdC1ub2RlXCI7XG4gICAgSG9va0V2ZW50c1tcIlBFUkZPUk1BTkNFX1NUQVJUXCJdID0gXCJwZXJmOnN0YXJ0XCI7XG4gICAgSG9va0V2ZW50c1tcIlBFUkZPUk1BTkNFX0VORFwiXSA9IFwicGVyZjplbmRcIjtcbiAgICBIb29rRXZlbnRzW1wiUExVR0lOX1NFVFRJTkdTX1NFVFwiXSA9IFwicGx1Z2luOnNldHRpbmdzOnNldFwiO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgSG9va0V2ZW50c1tcIkZMVVNIXCJdID0gXCJmbHVzaFwiO1xufSkoSG9va0V2ZW50cyA9IGV4cG9ydHMuSG9va0V2ZW50cyB8fCAoZXhwb3J0cy5Ib29rRXZlbnRzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0cy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///79410\n");
422
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.HookEvents = exports.BridgeSubscriptions = exports.BridgeEvents = exports.BuiltinTabs = void 0;\nvar BuiltinTabs;\n\n(function (BuiltinTabs) {\n BuiltinTabs[\"COMPONENTS\"] = \"components\";\n BuiltinTabs[\"TIMELINE\"] = \"timeline\";\n BuiltinTabs[\"PLUGINS\"] = \"plugins\";\n BuiltinTabs[\"SETTINGS\"] = \"settings\";\n})(BuiltinTabs = exports.BuiltinTabs || (exports.BuiltinTabs = {}));\n\nvar BridgeEvents;\n\n(function (BridgeEvents) {\n // Misc\n BridgeEvents[\"TO_BACK_SUBSCRIBE\"] = \"b:subscribe\";\n BridgeEvents[\"TO_BACK_UNSUBSCRIBE\"] = \"b:unsubscribe\";\n /** Backend is ready */\n\n BridgeEvents[\"TO_FRONT_READY\"] = \"f:ready\";\n /** Displays the \"detected Vue\" console log */\n\n BridgeEvents[\"TO_BACK_LOG_DETECTED_VUE\"] = \"b:log-detected-vue\";\n /** Force refresh */\n\n BridgeEvents[\"TO_BACK_REFRESH\"] = \"b:refresh\";\n /** Tab was switched */\n\n BridgeEvents[\"TO_BACK_TAB_SWITCH\"] = \"b:tab:switch\";\n BridgeEvents[\"TO_BACK_LOG\"] = \"b:log\"; // Apps\n\n /** App was registered */\n\n BridgeEvents[\"TO_FRONT_APP_ADD\"] = \"f:app:add\";\n /** Get app list */\n\n BridgeEvents[\"TO_BACK_APP_LIST\"] = \"b:app:list\";\n BridgeEvents[\"TO_FRONT_APP_LIST\"] = \"f:app:list\";\n BridgeEvents[\"TO_FRONT_APP_REMOVE\"] = \"f:app:remove\";\n BridgeEvents[\"TO_BACK_APP_SELECT\"] = \"b:app:select\";\n BridgeEvents[\"TO_FRONT_APP_SELECTED\"] = \"f:app:selected\";\n BridgeEvents[\"TO_BACK_SCAN_LEGACY_APPS\"] = \"b:app:scan-legacy\"; // Components\n\n BridgeEvents[\"TO_BACK_COMPONENT_TREE\"] = \"b:component:tree\";\n BridgeEvents[\"TO_FRONT_COMPONENT_TREE\"] = \"f:component:tree\";\n BridgeEvents[\"TO_BACK_COMPONENT_SELECTED_DATA\"] = \"b:component:selected-data\";\n BridgeEvents[\"TO_FRONT_COMPONENT_SELECTED_DATA\"] = \"f:component:selected-data\";\n BridgeEvents[\"TO_BACK_COMPONENT_EXPAND\"] = \"b:component:expand\";\n BridgeEvents[\"TO_FRONT_COMPONENT_EXPAND\"] = \"f:component:expand\";\n BridgeEvents[\"TO_BACK_COMPONENT_SCROLL_TO\"] = \"b:component:scroll-to\";\n BridgeEvents[\"TO_BACK_COMPONENT_FILTER\"] = \"b:component:filter\";\n BridgeEvents[\"TO_BACK_COMPONENT_MOUSE_OVER\"] = \"b:component:mouse-over\";\n BridgeEvents[\"TO_BACK_COMPONENT_MOUSE_OUT\"] = \"b:component:mouse-out\";\n BridgeEvents[\"TO_BACK_COMPONENT_CONTEXT_MENU_TARGET\"] = \"b:component:context-menu-target\";\n BridgeEvents[\"TO_BACK_COMPONENT_EDIT_STATE\"] = \"b:component:edit-state\";\n BridgeEvents[\"TO_BACK_COMPONENT_PICK\"] = \"b:component:pick\";\n BridgeEvents[\"TO_FRONT_COMPONENT_PICK\"] = \"f:component:pick\";\n BridgeEvents[\"TO_BACK_COMPONENT_PICK_CANCELED\"] = \"b:component:pick-canceled\";\n BridgeEvents[\"TO_FRONT_COMPONENT_PICK_CANCELED\"] = \"f:component:pick-canceled\";\n BridgeEvents[\"TO_BACK_COMPONENT_INSPECT_DOM\"] = \"b:component:inspect-dom\";\n BridgeEvents[\"TO_FRONT_COMPONENT_INSPECT_DOM\"] = \"f:component:inspect-dom\";\n BridgeEvents[\"TO_BACK_COMPONENT_RENDER_CODE\"] = \"b:component:render-code\";\n BridgeEvents[\"TO_FRONT_COMPONENT_RENDER_CODE\"] = \"f:component:render-code\";\n BridgeEvents[\"TO_FRONT_COMPONENT_UPDATED\"] = \"f:component:updated\"; // Timeline\n\n BridgeEvents[\"TO_FRONT_TIMELINE_EVENT\"] = \"f:timeline:event\";\n BridgeEvents[\"TO_BACK_TIMELINE_LAYER_LIST\"] = \"b:timeline:layer-list\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LAYER_LIST\"] = \"f:timeline:layer-list\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LAYER_ADD\"] = \"f:timeline:layer-add\";\n BridgeEvents[\"TO_BACK_TIMELINE_SHOW_SCREENSHOT\"] = \"b:timeline:show-screenshot\";\n BridgeEvents[\"TO_BACK_TIMELINE_CLEAR\"] = \"b:timeline:clear\";\n BridgeEvents[\"TO_BACK_TIMELINE_EVENT_DATA\"] = \"b:timeline:event-data\";\n BridgeEvents[\"TO_FRONT_TIMELINE_EVENT_DATA\"] = \"f:timeline:event-data\";\n BridgeEvents[\"TO_BACK_TIMELINE_LAYER_LOAD_EVENTS\"] = \"b:timeline:layer-load-events\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LAYER_LOAD_EVENTS\"] = \"f:timeline:layer-load-events\";\n BridgeEvents[\"TO_BACK_TIMELINE_LOAD_MARKERS\"] = \"b:timeline:load-markers\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LOAD_MARKERS\"] = \"f:timeline:load-markers\";\n BridgeEvents[\"TO_FRONT_TIMELINE_MARKER\"] = \"f:timeline:marker\"; // Plugins\n\n BridgeEvents[\"TO_BACK_DEVTOOLS_PLUGIN_LIST\"] = \"b:devtools-plugin:list\";\n BridgeEvents[\"TO_FRONT_DEVTOOLS_PLUGIN_LIST\"] = \"f:devtools-plugin:list\";\n BridgeEvents[\"TO_FRONT_DEVTOOLS_PLUGIN_ADD\"] = \"f:devtools-plugin:add\";\n BridgeEvents[\"TO_BACK_DEVTOOLS_PLUGIN_SETTING_UPDATED\"] = \"b:devtools-plugin:setting-updated\"; // Custom inspectors\n\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_LIST\"] = \"b:custom-inspector:list\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_LIST\"] = \"f:custom-inspector:list\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_ADD\"] = \"f:custom-inspector:add\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_TREE\"] = \"b:custom-inspector:tree\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_TREE\"] = \"f:custom-inspector:tree\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_STATE\"] = \"b:custom-inspector:state\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_STATE\"] = \"f:custom-inspector:state\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_EDIT_STATE\"] = \"b:custom-inspector:edit-state\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_ACTION\"] = \"b:custom-inspector:action\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_SELECT_NODE\"] = \"f:custom-inspector:select-node\"; // Custom state\n\n BridgeEvents[\"TO_BACK_CUSTOM_STATE_ACTION\"] = \"b:custom-state:action\";\n})(BridgeEvents = exports.BridgeEvents || (exports.BridgeEvents = {}));\n\nvar BridgeSubscriptions;\n\n(function (BridgeSubscriptions) {\n BridgeSubscriptions[\"SELECTED_COMPONENT_DATA\"] = \"component:selected-data\";\n BridgeSubscriptions[\"COMPONENT_TREE\"] = \"component:tree\";\n})(BridgeSubscriptions = exports.BridgeSubscriptions || (exports.BridgeSubscriptions = {}));\n\nvar HookEvents;\n\n(function (HookEvents) {\n HookEvents[\"INIT\"] = \"init\";\n HookEvents[\"APP_INIT\"] = \"app:init\";\n HookEvents[\"APP_ADD\"] = \"app:add\";\n HookEvents[\"APP_UNMOUNT\"] = \"app:unmount\";\n HookEvents[\"COMPONENT_UPDATED\"] = \"component:updated\";\n HookEvents[\"COMPONENT_ADDED\"] = \"component:added\";\n HookEvents[\"COMPONENT_REMOVED\"] = \"component:removed\";\n HookEvents[\"COMPONENT_EMIT\"] = \"component:emit\";\n HookEvents[\"COMPONENT_HIGHLIGHT\"] = \"component:highlight\";\n HookEvents[\"COMPONENT_UNHIGHLIGHT\"] = \"component:unhighlight\";\n HookEvents[\"SETUP_DEVTOOLS_PLUGIN\"] = \"devtools-plugin:setup\";\n HookEvents[\"TIMELINE_LAYER_ADDED\"] = \"timeline:layer-added\";\n HookEvents[\"TIMELINE_EVENT_ADDED\"] = \"timeline:event-added\";\n HookEvents[\"CUSTOM_INSPECTOR_ADD\"] = \"custom-inspector:add\";\n HookEvents[\"CUSTOM_INSPECTOR_SEND_TREE\"] = \"custom-inspector:send-tree\";\n HookEvents[\"CUSTOM_INSPECTOR_SEND_STATE\"] = \"custom-inspector:send-state\";\n HookEvents[\"CUSTOM_INSPECTOR_SELECT_NODE\"] = \"custom-inspector:select-node\";\n HookEvents[\"PERFORMANCE_START\"] = \"perf:start\";\n HookEvents[\"PERFORMANCE_END\"] = \"perf:end\";\n HookEvents[\"PLUGIN_SETTINGS_SET\"] = \"plugin:settings:set\";\n /**\n * @deprecated\n */\n\n HookEvents[\"FLUSH\"] = \"flush\";\n /**\n * @deprecated\n */\n\n HookEvents[\"TRACK_UPDATE\"] = \"_track-update\";\n /**\n * @deprecated\n */\n\n HookEvents[\"FLASH_UPDATE\"] = \"_flash-update\";\n})(HookEvents = exports.HookEvents || (exports.HookEvents = {}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk0MTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBWSxXQUFaOztBQUFBLFdBQVksV0FBWixFQUF1QjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNELENBTEQsRUFBWSxXQUFXLEdBQVgsOENBQVcsRUFBWCxDQUFaOztBQU9BLElBQVksWUFBWjs7QUFBQSxXQUFZLFlBQVosRUFBd0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQSx3Q0Fac0IsQ0FjdEI7O0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBdkJzQixDQXlCdEI7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQTlDc0IsQ0FnRHRCOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQTdEc0IsQ0ErRHRCOztBQUNBO0FBQ0E7QUFDQTtBQUNBLGdHQW5Fc0IsQ0FxRXRCOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJGQS9Fc0IsQ0FpRnRCOztBQUNBO0FBQ0QsQ0FuRkQsRUFBWSxZQUFZLEdBQVosZ0RBQVksRUFBWixDQUFaOztBQXFGQSxJQUFZLG1CQUFaOztBQUFBLFdBQVksbUJBQVosRUFBK0I7QUFDN0I7QUFDQTtBQUNELENBSEQsRUFBWSxtQkFBbUIsR0FBbkIsOERBQW1CLEVBQW5CLENBQVo7O0FBS0EsSUFBWSxVQUFaOztBQUFBLFdBQVksVUFBWixFQUFzQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUc7O0FBQ0g7QUFDQTs7QUFFRzs7QUFDSDtBQUNBOztBQUVHOztBQUNIO0FBQ0QsQ0FqQ0QsRUFBWSxVQUFVLEdBQVYsNENBQVUsRUFBVixDQUFaIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvY29uc3RzLnRzP2Q5MTgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkhvb2tFdmVudHMgPSBleHBvcnRzLkJyaWRnZVN1YnNjcmlwdGlvbnMgPSBleHBvcnRzLkJyaWRnZUV2ZW50cyA9IGV4cG9ydHMuQnVpbHRpblRhYnMgPSB2b2lkIDA7XG52YXIgQnVpbHRpblRhYnM7XG4oZnVuY3Rpb24gKEJ1aWx0aW5UYWJzKSB7XG4gICAgQnVpbHRpblRhYnNbXCJDT01QT05FTlRTXCJdID0gXCJjb21wb25lbnRzXCI7XG4gICAgQnVpbHRpblRhYnNbXCJUSU1FTElORVwiXSA9IFwidGltZWxpbmVcIjtcbiAgICBCdWlsdGluVGFic1tcIlBMVUdJTlNcIl0gPSBcInBsdWdpbnNcIjtcbiAgICBCdWlsdGluVGFic1tcIlNFVFRJTkdTXCJdID0gXCJzZXR0aW5nc1wiO1xufSkoQnVpbHRpblRhYnMgPSBleHBvcnRzLkJ1aWx0aW5UYWJzIHx8IChleHBvcnRzLkJ1aWx0aW5UYWJzID0ge30pKTtcbnZhciBCcmlkZ2VFdmVudHM7XG4oZnVuY3Rpb24gKEJyaWRnZUV2ZW50cykge1xuICAgIC8vIE1pc2NcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1NVQlNDUklCRVwiXSA9IFwiYjpzdWJzY3JpYmVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1VOU1VCU0NSSUJFXCJdID0gXCJiOnVuc3Vic2NyaWJlXCI7XG4gICAgLyoqIEJhY2tlbmQgaXMgcmVhZHkgKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9SRUFEWVwiXSA9IFwiZjpyZWFkeVwiO1xuICAgIC8qKiBEaXNwbGF5cyB0aGUgXCJkZXRlY3RlZCBWdWVcIiBjb25zb2xlIGxvZyAqL1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfTE9HX0RFVEVDVEVEX1ZVRVwiXSA9IFwiYjpsb2ctZGV0ZWN0ZWQtdnVlXCI7XG4gICAgLyoqIEZvcmNlIHJlZnJlc2ggKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1JFRlJFU0hcIl0gPSBcImI6cmVmcmVzaFwiO1xuICAgIC8qKiBUYWIgd2FzIHN3aXRjaGVkICovXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19UQUJfU1dJVENIXCJdID0gXCJiOnRhYjpzd2l0Y2hcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0xPR1wiXSA9IFwiYjpsb2dcIjtcbiAgICAvLyBBcHBzXG4gICAgLyoqIEFwcCB3YXMgcmVnaXN0ZXJlZCAqL1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0FQUF9BRERcIl0gPSBcImY6YXBwOmFkZFwiO1xuICAgIC8qKiBHZXQgYXBwIGxpc3QgKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0FQUF9MSVNUXCJdID0gXCJiOmFwcDpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQVBQX0xJU1RcIl0gPSBcImY6YXBwOmxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9BUFBfUkVNT1ZFXCJdID0gXCJmOmFwcDpyZW1vdmVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0FQUF9TRUxFQ1RcIl0gPSBcImI6YXBwOnNlbGVjdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0FQUF9TRUxFQ1RFRFwiXSA9IFwiZjphcHA6c2VsZWN0ZWRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1NDQU5fTEVHQUNZX0FQUFNcIl0gPSBcImI6YXBwOnNjYW4tbGVnYWN5XCI7XG4gICAgLy8gQ29tcG9uZW50c1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1RSRUVcIl0gPSBcImI6Y29tcG9uZW50OnRyZWVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfVFJFRVwiXSA9IFwiZjpjb21wb25lbnQ6dHJlZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1NFTEVDVEVEX0RBVEFcIl0gPSBcImI6Y29tcG9uZW50OnNlbGVjdGVkLWRhdGFcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfU0VMRUNURURfREFUQVwiXSA9IFwiZjpjb21wb25lbnQ6c2VsZWN0ZWQtZGF0YVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX0VYUEFORFwiXSA9IFwiYjpjb21wb25lbnQ6ZXhwYW5kXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ09NUE9ORU5UX0VYUEFORFwiXSA9IFwiZjpjb21wb25lbnQ6ZXhwYW5kXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfU0NST0xMX1RPXCJdID0gXCJiOmNvbXBvbmVudDpzY3JvbGwtdG9cIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9GSUxURVJcIl0gPSBcImI6Y29tcG9uZW50OmZpbHRlclwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX01PVVNFX09WRVJcIl0gPSBcImI6Y29tcG9uZW50Om1vdXNlLW92ZXJcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9NT1VTRV9PVVRcIl0gPSBcImI6Y29tcG9uZW50Om1vdXNlLW91dFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX0NPTlRFWFRfTUVOVV9UQVJHRVRcIl0gPSBcImI6Y29tcG9uZW50OmNvbnRleHQtbWVudS10YXJnZXRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9FRElUX1NUQVRFXCJdID0gXCJiOmNvbXBvbmVudDplZGl0LXN0YXRlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfUElDS1wiXSA9IFwiYjpjb21wb25lbnQ6cGlja1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9QSUNLXCJdID0gXCJmOmNvbXBvbmVudDpwaWNrXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfUElDS19DQU5DRUxFRFwiXSA9IFwiYjpjb21wb25lbnQ6cGljay1jYW5jZWxlZFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9QSUNLX0NBTkNFTEVEXCJdID0gXCJmOmNvbXBvbmVudDpwaWNrLWNhbmNlbGVkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfSU5TUEVDVF9ET01cIl0gPSBcImI6Y29tcG9uZW50Omluc3BlY3QtZG9tXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ09NUE9ORU5UX0lOU1BFQ1RfRE9NXCJdID0gXCJmOmNvbXBvbmVudDppbnNwZWN0LWRvbVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1JFTkRFUl9DT0RFXCJdID0gXCJiOmNvbXBvbmVudDpyZW5kZXItY29kZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9SRU5ERVJfQ09ERVwiXSA9IFwiZjpjb21wb25lbnQ6cmVuZGVyLWNvZGVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfVVBEQVRFRFwiXSA9IFwiZjpjb21wb25lbnQ6dXBkYXRlZFwiO1xuICAgIC8vIFRpbWVsaW5lXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfRVZFTlRcIl0gPSBcImY6dGltZWxpbmU6ZXZlbnRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1RJTUVMSU5FX0xBWUVSX0xJU1RcIl0gPSBcImI6dGltZWxpbmU6bGF5ZXItbGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0xJU1RcIl0gPSBcImY6dGltZWxpbmU6bGF5ZXItbGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0FERFwiXSA9IFwiZjp0aW1lbGluZTpsYXllci1hZGRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1RJTUVMSU5FX1NIT1dfU0NSRUVOU0hPVFwiXSA9IFwiYjp0aW1lbGluZTpzaG93LXNjcmVlbnNob3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1RJTUVMSU5FX0NMRUFSXCJdID0gXCJiOnRpbWVsaW5lOmNsZWFyXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9FVkVOVF9EQVRBXCJdID0gXCJiOnRpbWVsaW5lOmV2ZW50LWRhdGFcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9USU1FTElORV9FVkVOVF9EQVRBXCJdID0gXCJmOnRpbWVsaW5lOmV2ZW50LWRhdGFcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1RJTUVMSU5FX0xBWUVSX0xPQURfRVZFTlRTXCJdID0gXCJiOnRpbWVsaW5lOmxheWVyLWxvYWQtZXZlbnRzXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfTEFZRVJfTE9BRF9FVkVOVFNcIl0gPSBcImY6dGltZWxpbmU6bGF5ZXItbG9hZC1ldmVudHNcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1RJTUVMSU5FX0xPQURfTUFSS0VSU1wiXSA9IFwiYjp0aW1lbGluZTpsb2FkLW1hcmtlcnNcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9USU1FTElORV9MT0FEX01BUktFUlNcIl0gPSBcImY6dGltZWxpbmU6bG9hZC1tYXJrZXJzXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfTUFSS0VSXCJdID0gXCJmOnRpbWVsaW5lOm1hcmtlclwiO1xuICAgIC8vIFBsdWdpbnNcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0RFVlRPT0xTX1BMVUdJTl9MSVNUXCJdID0gXCJiOmRldnRvb2xzLXBsdWdpbjpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfREVWVE9PTFNfUExVR0lOX0xJU1RcIl0gPSBcImY6ZGV2dG9vbHMtcGx1Z2luOmxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9ERVZUT09MU19QTFVHSU5fQUREXCJdID0gXCJmOmRldnRvb2xzLXBsdWdpbjphZGRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0RFVlRPT0xTX1BMVUdJTl9TRVRUSU5HX1VQREFURURcIl0gPSBcImI6ZGV2dG9vbHMtcGx1Z2luOnNldHRpbmctdXBkYXRlZFwiO1xuICAgIC8vIEN1c3RvbSBpbnNwZWN0b3JzXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX0xJU1RcIl0gPSBcImI6Y3VzdG9tLWluc3BlY3RvcjpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ1VTVE9NX0lOU1BFQ1RPUl9MSVNUXCJdID0gXCJmOmN1c3RvbS1pbnNwZWN0b3I6bGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfQUREXCJdID0gXCJmOmN1c3RvbS1pbnNwZWN0b3I6YWRkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX1RSRUVcIl0gPSBcImI6Y3VzdG9tLWluc3BlY3Rvcjp0cmVlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ1VTVE9NX0lOU1BFQ1RPUl9UUkVFXCJdID0gXCJmOmN1c3RvbS1pbnNwZWN0b3I6dHJlZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9TVEFURVwiXSA9IFwiYjpjdXN0b20taW5zcGVjdG9yOnN0YXRlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ1VTVE9NX0lOU1BFQ1RPUl9TVEFURVwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOnN0YXRlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX0VESVRfU1RBVEVcIl0gPSBcImI6Y3VzdG9tLWluc3BlY3RvcjplZGl0LXN0YXRlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX0FDVElPTlwiXSA9IFwiYjpjdXN0b20taW5zcGVjdG9yOmFjdGlvblwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfU0VMRUNUX05PREVcIl0gPSBcImY6Y3VzdG9tLWluc3BlY3RvcjpzZWxlY3Qtbm9kZVwiO1xuICAgIC8vIEN1c3RvbSBzdGF0ZVxuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX1NUQVRFX0FDVElPTlwiXSA9IFwiYjpjdXN0b20tc3RhdGU6YWN0aW9uXCI7XG59KShCcmlkZ2VFdmVudHMgPSBleHBvcnRzLkJyaWRnZUV2ZW50cyB8fCAoZXhwb3J0cy5CcmlkZ2VFdmVudHMgPSB7fSkpO1xudmFyIEJyaWRnZVN1YnNjcmlwdGlvbnM7XG4oZnVuY3Rpb24gKEJyaWRnZVN1YnNjcmlwdGlvbnMpIHtcbiAgICBCcmlkZ2VTdWJzY3JpcHRpb25zW1wiU0VMRUNURURfQ09NUE9ORU5UX0RBVEFcIl0gPSBcImNvbXBvbmVudDpzZWxlY3RlZC1kYXRhXCI7XG4gICAgQnJpZGdlU3Vic2NyaXB0aW9uc1tcIkNPTVBPTkVOVF9UUkVFXCJdID0gXCJjb21wb25lbnQ6dHJlZVwiO1xufSkoQnJpZGdlU3Vic2NyaXB0aW9ucyA9IGV4cG9ydHMuQnJpZGdlU3Vic2NyaXB0aW9ucyB8fCAoZXhwb3J0cy5CcmlkZ2VTdWJzY3JpcHRpb25zID0ge30pKTtcbnZhciBIb29rRXZlbnRzO1xuKGZ1bmN0aW9uIChIb29rRXZlbnRzKSB7XG4gICAgSG9va0V2ZW50c1tcIklOSVRcIl0gPSBcImluaXRcIjtcbiAgICBIb29rRXZlbnRzW1wiQVBQX0lOSVRcIl0gPSBcImFwcDppbml0XCI7XG4gICAgSG9va0V2ZW50c1tcIkFQUF9BRERcIl0gPSBcImFwcDphZGRcIjtcbiAgICBIb29rRXZlbnRzW1wiQVBQX1VOTU9VTlRcIl0gPSBcImFwcDp1bm1vdW50XCI7XG4gICAgSG9va0V2ZW50c1tcIkNPTVBPTkVOVF9VUERBVEVEXCJdID0gXCJjb21wb25lbnQ6dXBkYXRlZFwiO1xuICAgIEhvb2tFdmVudHNbXCJDT01QT05FTlRfQURERURcIl0gPSBcImNvbXBvbmVudDphZGRlZFwiO1xuICAgIEhvb2tFdmVudHNbXCJDT01QT05FTlRfUkVNT1ZFRFwiXSA9IFwiY29tcG9uZW50OnJlbW92ZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ09NUE9ORU5UX0VNSVRcIl0gPSBcImNvbXBvbmVudDplbWl0XCI7XG4gICAgSG9va0V2ZW50c1tcIkNPTVBPTkVOVF9ISUdITElHSFRcIl0gPSBcImNvbXBvbmVudDpoaWdobGlnaHRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ09NUE9ORU5UX1VOSElHSExJR0hUXCJdID0gXCJjb21wb25lbnQ6dW5oaWdobGlnaHRcIjtcbiAgICBIb29rRXZlbnRzW1wiU0VUVVBfREVWVE9PTFNfUExVR0lOXCJdID0gXCJkZXZ0b29scy1wbHVnaW46c2V0dXBcIjtcbiAgICBIb29rRXZlbnRzW1wiVElNRUxJTkVfTEFZRVJfQURERURcIl0gPSBcInRpbWVsaW5lOmxheWVyLWFkZGVkXCI7XG4gICAgSG9va0V2ZW50c1tcIlRJTUVMSU5FX0VWRU5UX0FEREVEXCJdID0gXCJ0aW1lbGluZTpldmVudC1hZGRlZFwiO1xuICAgIEhvb2tFdmVudHNbXCJDVVNUT01fSU5TUEVDVE9SX0FERFwiXSA9IFwiY3VzdG9tLWluc3BlY3RvcjphZGRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ1VTVE9NX0lOU1BFQ1RPUl9TRU5EX1RSRUVcIl0gPSBcImN1c3RvbS1pbnNwZWN0b3I6c2VuZC10cmVlXCI7XG4gICAgSG9va0V2ZW50c1tcIkNVU1RPTV9JTlNQRUNUT1JfU0VORF9TVEFURVwiXSA9IFwiY3VzdG9tLWluc3BlY3RvcjpzZW5kLXN0YXRlXCI7XG4gICAgSG9va0V2ZW50c1tcIkNVU1RPTV9JTlNQRUNUT1JfU0VMRUNUX05PREVcIl0gPSBcImN1c3RvbS1pbnNwZWN0b3I6c2VsZWN0LW5vZGVcIjtcbiAgICBIb29rRXZlbnRzW1wiUEVSRk9STUFOQ0VfU1RBUlRcIl0gPSBcInBlcmY6c3RhcnRcIjtcbiAgICBIb29rRXZlbnRzW1wiUEVSRk9STUFOQ0VfRU5EXCJdID0gXCJwZXJmOmVuZFwiO1xuICAgIEhvb2tFdmVudHNbXCJQTFVHSU5fU0VUVElOR1NfU0VUXCJdID0gXCJwbHVnaW46c2V0dGluZ3M6c2V0XCI7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBIb29rRXZlbnRzW1wiRkxVU0hcIl0gPSBcImZsdXNoXCI7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBIb29rRXZlbnRzW1wiVFJBQ0tfVVBEQVRFXCJdID0gXCJfdHJhY2stdXBkYXRlXCI7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBIb29rRXZlbnRzW1wiRkxBU0hfVVBEQVRFXCJdID0gXCJfZmxhc2gtdXBkYXRlXCI7XG59KShIb29rRXZlbnRzID0gZXhwb3J0cy5Ib29rRXZlbnRzIHx8IChleHBvcnRzLkhvb2tFdmVudHMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///79410\n");
415
423
 
416
424
  /***/ }),
417
425
 
@@ -459,7 +467,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
459
467
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
460
468
 
461
469
  "use strict";
462
- eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.SharedData = exports.watchSharedData = exports.destroySharedData = exports.onSharedDataInit = exports.initSharedData = void 0;\n\nconst storage_1 = __webpack_require__(58561);\n\nconst env_1 = __webpack_require__(66210); // Initial state\n\n\nconst internalSharedData = {\n openInEditorHost: '/',\n componentNameStyle: 'class',\n theme: 'auto',\n displayDensity: 'low',\n timeFormat: 'default',\n recordVuex: true,\n cacheVuexSnapshotsEvery: 50,\n cacheVuexSnapshotsLimit: 10,\n snapshotLoading: false,\n componentEventsEnabled: true,\n performanceMonitoringEnabled: true,\n editableProps: false,\n logDetected: true,\n vuexNewBackend: false,\n vuexAutoload: false,\n vuexGroupGettersByModule: true,\n showMenuScrollTip: true,\n timelineTimeGrid: true,\n timelineScreenshots: true,\n menuStepScrolling: env_1.isMac,\n pluginPermissions: {},\n pluginSettings: {},\n pageConfig: {},\n legacyApps: false,\n debugInfo: false\n};\nconst persisted = ['componentNameStyle', 'theme', 'displayDensity', 'recordVuex', 'editableProps', 'logDetected', 'vuexNewBackend', 'vuexAutoload', 'vuexGroupGettersByModule', 'timeFormat', 'showMenuScrollTip', 'timelineTimeGrid', 'timelineScreenshots', 'menuStepScrolling', 'pluginPermissions', 'pluginSettings', 'performanceMonitoringEnabled', 'componentEventsEnabled', 'debugInfo'];\nconst storageVersion = '6.0.0-alpha.1'; // ---- INTERNALS ---- //\n\nlet bridge; // List of fields to persist to storage (disabled if 'false')\n// This should be unique to each shared data client to prevent conflicts\n\nlet persist = false;\nlet data;\nlet initRetryInterval;\nlet initRetryCount = 0;\nconst initCbs = [];\n\nfunction initSharedData(params) {\n return new Promise(resolve => {\n // Mandatory params\n bridge = params.bridge;\n persist = !!params.persist;\n\n if (persist) {\n if (false) {} // Load persisted fields\n\n\n persisted.forEach(key => {\n const value = (0, storage_1.getStorage)(`vue-devtools-${storageVersion}:shared-data:${key}`);\n\n if (value !== null) {\n internalSharedData[key] = value;\n }\n });\n bridge.on('shared-data:load', () => {\n // Send all fields\n Object.keys(internalSharedData).forEach(key => {\n sendValue(key, internalSharedData[key]);\n });\n bridge.send('shared-data:load-complete');\n });\n bridge.on('shared-data:init-complete', () => {\n if (false) {}\n\n clearInterval(initRetryInterval);\n resolve();\n });\n bridge.send('shared-data:master-init-waiting'); // In case backend init is executed after frontend\n\n bridge.on('shared-data:minion-init-waiting', () => {\n bridge.send('shared-data:master-init-waiting');\n });\n initRetryCount = 0;\n clearInterval(initRetryInterval);\n initRetryInterval = setInterval(() => {\n if (false) {}\n\n bridge.send('shared-data:master-init-waiting');\n initRetryCount++;\n\n if (initRetryCount > 30) {\n clearInterval(initRetryInterval);\n console.error('[shared data] Master init failed');\n }\n }, 2000);\n } else {\n if (false) {}\n\n bridge.on('shared-data:master-init-waiting', () => {\n if (false) {} // Load all persisted shared data\n\n\n bridge.send('shared-data:load');\n bridge.once('shared-data:load-complete', () => {\n if (false) {}\n\n bridge.send('shared-data:init-complete');\n resolve();\n });\n });\n bridge.send('shared-data:minion-init-waiting');\n }\n\n data = { ...internalSharedData\n };\n\n if (params.Vue) {\n data = params.Vue.observable(data);\n } // Update value from other shared data clients\n\n\n bridge.on('shared-data:set', ({\n key,\n value\n }) => {\n setValue(key, value);\n });\n initCbs.forEach(cb => cb());\n });\n}\n\nexports.initSharedData = initSharedData;\n\nfunction onSharedDataInit(cb) {\n initCbs.push(cb);\n return () => {\n const index = initCbs.indexOf(cb);\n if (index !== -1) initCbs.splice(index, 1);\n };\n}\n\nexports.onSharedDataInit = onSharedDataInit;\n\nfunction destroySharedData() {\n bridge.removeAllListeners('shared-data:set');\n watchers = {};\n}\n\nexports.destroySharedData = destroySharedData;\nlet watchers = {};\n\nfunction setValue(key, value) {\n // Storage\n if (persist && persisted.includes(key)) {\n (0, storage_1.setStorage)(`vue-devtools-${storageVersion}:shared-data:${key}`, value);\n }\n\n const oldValue = data[key];\n data[key] = value;\n const handlers = watchers[key];\n\n if (handlers) {\n handlers.forEach(h => h(value, oldValue));\n } // Validate Proxy set trap\n\n\n return true;\n}\n\nfunction sendValue(key, value) {\n bridge && bridge.send('shared-data:set', {\n key,\n value\n });\n}\n\nfunction watchSharedData(prop, handler) {\n const list = watchers[prop] || (watchers[prop] = []);\n list.push(handler);\n return () => {\n const index = list.indexOf(handler);\n if (index !== -1) list.splice(index, 1);\n };\n}\n\nexports.watchSharedData = watchSharedData;\nconst proxy = {};\nObject.keys(internalSharedData).forEach(key => {\n Object.defineProperty(proxy, key, {\n configurable: false,\n get: () => data[key],\n set: value => {\n sendValue(key, value);\n setValue(key, value);\n }\n });\n});\nexports.SharedData = proxy;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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dG9vbHMvLi4vc3JjL3NoYXJlZC1kYXRhLnRzP2QwYmIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNoYXJlZERhdGEgPSBleHBvcnRzLndhdGNoU2hhcmVkRGF0YSA9IGV4cG9ydHMuZGVzdHJveVNoYXJlZERhdGEgPSBleHBvcnRzLm9uU2hhcmVkRGF0YUluaXQgPSBleHBvcnRzLmluaXRTaGFyZWREYXRhID0gdm9pZCAwO1xuY29uc3Qgc3RvcmFnZV8xID0gcmVxdWlyZShcIi4vc3RvcmFnZVwiKTtcbmNvbnN0IGVudl8xID0gcmVxdWlyZShcIi4vZW52XCIpO1xuLy8gSW5pdGlhbCBzdGF0ZVxuY29uc3QgaW50ZXJuYWxTaGFyZWREYXRhID0ge1xuICAgIG9wZW5JbkVkaXRvckhvc3Q6ICcvJyxcbiAgICBjb21wb25lbnROYW1lU3R5bGU6ICdjbGFzcycsXG4gICAgdGhlbWU6ICdhdXRvJyxcbiAgICBkaXNwbGF5RGVuc2l0eTogJ2xvdycsXG4gICAgdGltZUZvcm1hdDogJ2RlZmF1bHQnLFxuICAgIHJlY29yZFZ1ZXg6IHRydWUsXG4gICAgY2FjaGVWdWV4U25hcHNob3RzRXZlcnk6IDUwLFxuICAgIGNhY2hlVnVleFNuYXBzaG90c0xpbWl0OiAxMCxcbiAgICBzbmFwc2hvdExvYWRpbmc6IGZhbHNlLFxuICAgIGNvbXBvbmVudEV2ZW50c0VuYWJsZWQ6IHRydWUsXG4gICAgcGVyZm9ybWFuY2VNb25pdG9yaW5nRW5hYmxlZDogdHJ1ZSxcbiAgICBlZGl0YWJsZVByb3BzOiBmYWxzZSxcbiAgICBsb2dEZXRlY3RlZDogdHJ1ZSxcbiAgICB2dWV4TmV3QmFja2VuZDogZmFsc2UsXG4gICAgdnVleEF1dG9sb2FkOiBmYWxzZSxcbiAgICB2dWV4R3JvdXBHZXR0ZXJzQnlNb2R1bGU6IHRydWUsXG4gICAgc2hvd01lbnVTY3JvbGxUaXA6IHRydWUsXG4gICAgdGltZWxpbmVUaW1lR3JpZDogdHJ1ZSxcbiAgICB0aW1lbGluZVNjcmVlbnNob3RzOiB0cnVlLFxuICAgIG1lbnVTdGVwU2Nyb2xsaW5nOiBlbnZfMS5pc01hYyxcbiAgICBwbHVnaW5QZXJtaXNzaW9uczoge30sXG4gICAgcGx1Z2luU2V0dGluZ3M6IHt9LFxuICAgIHBhZ2VDb25maWc6IHt9LFxuICAgIGxlZ2FjeUFwcHM6IGZhbHNlLFxuICAgIGRlYnVnSW5mbzogZmFsc2UsXG59O1xuY29uc3QgcGVyc2lzdGVkID0gW1xuICAgICdjb21wb25lbnROYW1lU3R5bGUnLFxuICAgICd0aGVtZScsXG4gICAgJ2Rpc3BsYXlEZW5zaXR5JyxcbiAgICAncmVjb3JkVnVleCcsXG4gICAgJ2VkaXRhYmxlUHJvcHMnLFxuICAgICdsb2dEZXRlY3RlZCcsXG4gICAgJ3Z1ZXhOZXdCYWNrZW5kJyxcbiAgICAndnVleEF1dG9sb2FkJyxcbiAgICAndnVleEdyb3VwR2V0dGVyc0J5TW9kdWxlJyxcbiAgICAndGltZUZvcm1hdCcsXG4gICAgJ3Nob3dNZW51U2Nyb2xsVGlwJyxcbiAgICAndGltZWxpbmVUaW1lR3JpZCcsXG4gICAgJ3RpbWVsaW5lU2NyZWVuc2hvdHMnLFxuICAgICdtZW51U3RlcFNjcm9sbGluZycsXG4gICAgJ3BsdWdpblBlcm1pc3Npb25zJyxcbiAgICAncGx1Z2luU2V0dGluZ3MnLFxuICAgICdwZXJmb3JtYW5jZU1vbml0b3JpbmdFbmFibGVkJyxcbiAgICAnY29tcG9uZW50RXZlbnRzRW5hYmxlZCcsXG4gICAgJ2RlYnVnSW5mbycsXG5dO1xuY29uc3Qgc3RvcmFnZVZlcnNpb24gPSAnNi4wLjAtYWxwaGEuMSc7XG4vLyAtLS0tIElOVEVSTkFMUyAtLS0tIC8vXG5sZXQgYnJpZGdlO1xuLy8gTGlzdCBvZiBmaWVsZHMgdG8gcGVyc2lzdCB0byBzdG9yYWdlIChkaXNhYmxlZCBpZiAnZmFsc2UnKVxuLy8gVGhpcyBzaG91bGQgYmUgdW5pcXVlIHRvIGVhY2ggc2hhcmVkIGRhdGEgY2xpZW50IHRvIHByZXZlbnQgY29uZmxpY3RzXG5sZXQgcGVyc2lzdCA9IGZhbHNlO1xubGV0IGRhdGE7XG5sZXQgaW5pdFJldHJ5SW50ZXJ2YWw7XG5sZXQgaW5pdFJldHJ5Q291bnQgPSAwO1xuY29uc3QgaW5pdENicyA9IFtdO1xuZnVuY3Rpb24gaW5pdFNoYXJlZERhdGEocGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIC8vIE1hbmRhdG9yeSBwYXJhbXNcbiAgICAgICAgYnJpZGdlID0gcGFyYW1zLmJyaWRnZTtcbiAgICAgICAgcGVyc2lzdCA9ICEhcGFyYW1zLnBlcnNpc3Q7XG4gICAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWFzdGVyIGluaXQgaW4gcHJvZ3Jlc3MuLi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIExvYWQgcGVyc2lzdGVkIGZpZWxkc1xuICAgICAgICAgICAgcGVyc2lzdGVkLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICgwLCBzdG9yYWdlXzEuZ2V0U3RvcmFnZSkoYHZ1ZS1kZXZ0b29scy0ke3N0b3JhZ2VWZXJzaW9ufTpzaGFyZWQtZGF0YToke2tleX1gKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxTaGFyZWREYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyaWRnZS5vbignc2hhcmVkLWRhdGE6bG9hZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBTZW5kIGFsbCBmaWVsZHNcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpbnRlcm5hbFNoYXJlZERhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VuZFZhbHVlKGtleSwgaW50ZXJuYWxTaGFyZWREYXRhW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTpsb2FkLWNvbXBsZXRlJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyaWRnZS5vbignc2hhcmVkLWRhdGE6aW5pdC1jb21wbGV0ZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNYXN0ZXIgaW5pdCBjb21wbGV0ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGluaXRSZXRyeUludGVydmFsKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTptYXN0ZXItaW5pdC13YWl0aW5nJyk7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIGJhY2tlbmQgaW5pdCBpcyBleGVjdXRlZCBhZnRlciBmcm9udGVuZFxuICAgICAgICAgICAgYnJpZGdlLm9uKCdzaGFyZWQtZGF0YTptaW5pb24taW5pdC13YWl0aW5nJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTptYXN0ZXItaW5pdC13YWl0aW5nJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluaXRSZXRyeUNvdW50ID0gMDtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW5pdFJldHJ5SW50ZXJ2YWwpO1xuICAgICAgICAgICAgaW5pdFJldHJ5SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWFzdGVyIGluaXQgcmV0cnlpbmcuLi4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOm1hc3Rlci1pbml0LXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICBpbml0UmV0cnlDb3VudCsrO1xuICAgICAgICAgICAgICAgIGlmIChpbml0UmV0cnlDb3VudCA+IDMwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW5pdFJldHJ5SW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbc2hhcmVkIGRhdGFdIE1hc3RlciBpbml0IGZhaWxlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbc2hhcmVkIGRhdGFdIE1pbmlvbiBpbml0IGluIHByb2dyZXNzLi4uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmlkZ2Uub24oJ3NoYXJlZC1kYXRhOm1hc3Rlci1pbml0LXdhaXRpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWluaW9uIGxvYWRpbmcgZGF0YS4uLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBMb2FkIGFsbCBwZXJzaXN0ZWQgc2hhcmVkIGRhdGFcbiAgICAgICAgICAgICAgICBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6bG9hZCcpO1xuICAgICAgICAgICAgICAgIGJyaWRnZS5vbmNlKCdzaGFyZWQtZGF0YTpsb2FkLWNvbXBsZXRlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbc2hhcmVkIGRhdGFdIE1pbmlvbiBpbml0IGNvbXBsZXRlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOmluaXQtY29tcGxldGUnKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6bWluaW9uLWluaXQtd2FpdGluZycpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAuLi5pbnRlcm5hbFNoYXJlZERhdGEsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChwYXJhbXMuVnVlKSB7XG4gICAgICAgICAgICBkYXRhID0gcGFyYW1zLlZ1ZS5vYnNlcnZhYmxlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVwZGF0ZSB2YWx1ZSBmcm9tIG90aGVyIHNoYXJlZCBkYXRhIGNsaWVudHNcbiAgICAgICAgYnJpZGdlLm9uKCdzaGFyZWQtZGF0YTpzZXQnLCAoeyBrZXksIHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgIHNldFZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaW5pdENicy5mb3JFYWNoKGNiID0+IGNiKCkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5pbml0U2hhcmVkRGF0YSA9IGluaXRTaGFyZWREYXRhO1xuZnVuY3Rpb24gb25TaGFyZWREYXRhSW5pdChjYikge1xuICAgIGluaXRDYnMucHVzaChjYik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbml0Q2JzLmluZGV4T2YoY2IpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICAgICAgaW5pdENicy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH07XG59XG5leHBvcnRzLm9uU2hhcmVkRGF0YUluaXQgPSBvblNoYXJlZERhdGFJbml0O1xuZnVuY3Rpb24gZGVzdHJveVNoYXJlZERhdGEoKSB7XG4gICAgYnJpZGdlLnJlbW92ZUFsbExpc3RlbmVycygnc2hhcmVkLWRhdGE6c2V0Jyk7XG4gICAgd2F0Y2hlcnMgPSB7fTtcbn1cbmV4cG9ydHMuZGVzdHJveVNoYXJlZERhdGEgPSBkZXN0cm95U2hhcmVkRGF0YTtcbmxldCB3YXRjaGVycyA9IHt9O1xuZnVuY3Rpb24gc2V0VmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIC8vIFN0b3JhZ2VcbiAgICBpZiAocGVyc2lzdCAmJiBwZXJzaXN0ZWQuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAoMCwgc3RvcmFnZV8xLnNldFN0b3JhZ2UpKGB2dWUtZGV2dG9vbHMtJHtzdG9yYWdlVmVyc2lvbn06c2hhcmVkLWRhdGE6JHtrZXl9YCwgdmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBvbGRWYWx1ZSA9IGRhdGFba2V5XTtcbiAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICBjb25zdCBoYW5kbGVycyA9IHdhdGNoZXJzW2tleV07XG4gICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgIGhhbmRsZXJzLmZvckVhY2goaCA9PiBoKHZhbHVlLCBvbGRWYWx1ZSkpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBQcm94eSBzZXQgdHJhcFxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gc2VuZFZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICBicmlkZ2UgJiYgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOnNldCcsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHdhdGNoU2hhcmVkRGF0YShwcm9wLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgbGlzdCA9IHdhdGNoZXJzW3Byb3BdIHx8ICh3YXRjaGVyc1twcm9wXSA9IFtdKTtcbiAgICBsaXN0LnB1c2goaGFuZGxlcik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0LmluZGV4T2YoaGFuZGxlcik7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICBsaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgfTtcbn1cbmV4cG9ydHMud2F0Y2hTaGFyZWREYXRhID0gd2F0Y2hTaGFyZWREYXRhO1xuY29uc3QgcHJveHkgPSB7fTtcbk9iamVjdC5rZXlzKGludGVybmFsU2hhcmVkRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGdldDogKCkgPT4gZGF0YVtrZXldLFxuICAgICAgICBzZXQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgc2VuZFZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgc2V0VmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59KTtcbmV4cG9ydHMuU2hhcmVkRGF0YSA9IHByb3h5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhcmVkLWRhdGEuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///29556\n");
470
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.SharedData = exports.watchSharedData = exports.destroySharedData = exports.onSharedDataInit = exports.initSharedData = void 0;\n\nconst storage_1 = __webpack_require__(58561);\n\nconst env_1 = __webpack_require__(66210); // Initial state\n\n\nconst internalSharedData = {\n openInEditorHost: '/',\n componentNameStyle: 'class',\n theme: 'auto',\n displayDensity: 'low',\n timeFormat: 'default',\n recordVuex: true,\n cacheVuexSnapshotsEvery: 50,\n cacheVuexSnapshotsLimit: 10,\n snapshotLoading: false,\n componentEventsEnabled: true,\n performanceMonitoringEnabled: true,\n editableProps: false,\n logDetected: true,\n vuexNewBackend: false,\n vuexAutoload: false,\n vuexGroupGettersByModule: true,\n showMenuScrollTip: true,\n timelineTimeGrid: true,\n timelineScreenshots: true,\n menuStepScrolling: env_1.isMac,\n pluginPermissions: {},\n pluginSettings: {},\n pageConfig: {},\n legacyApps: false,\n trackUpdates: true,\n flashUpdates: false,\n debugInfo: false\n};\nconst persisted = ['componentNameStyle', 'theme', 'displayDensity', 'recordVuex', 'editableProps', 'logDetected', 'vuexNewBackend', 'vuexAutoload', 'vuexGroupGettersByModule', 'timeFormat', 'showMenuScrollTip', 'timelineTimeGrid', 'timelineScreenshots', 'menuStepScrolling', 'pluginPermissions', 'pluginSettings', 'performanceMonitoringEnabled', 'componentEventsEnabled', 'trackUpdates', 'flashUpdates', 'debugInfo'];\nconst storageVersion = '6.0.0-alpha.1'; // ---- INTERNALS ---- //\n\nlet bridge; // List of fields to persist to storage (disabled if 'false')\n// This should be unique to each shared data client to prevent conflicts\n\nlet persist = false;\nlet data;\nlet initRetryInterval;\nlet initRetryCount = 0;\nconst initCbs = [];\n\nfunction initSharedData(params) {\n return new Promise(resolve => {\n // Mandatory params\n bridge = params.bridge;\n persist = !!params.persist;\n\n if (persist) {\n if (false) {} // Load persisted fields\n\n\n persisted.forEach(key => {\n const value = (0, storage_1.getStorage)(`vue-devtools-${storageVersion}:shared-data:${key}`);\n\n if (value !== null) {\n internalSharedData[key] = value;\n }\n });\n bridge.on('shared-data:load', () => {\n // Send all fields\n Object.keys(internalSharedData).forEach(key => {\n sendValue(key, internalSharedData[key]);\n });\n bridge.send('shared-data:load-complete');\n });\n bridge.on('shared-data:init-complete', () => {\n if (false) {}\n\n clearInterval(initRetryInterval);\n resolve();\n });\n bridge.send('shared-data:master-init-waiting'); // In case backend init is executed after frontend\n\n bridge.on('shared-data:minion-init-waiting', () => {\n bridge.send('shared-data:master-init-waiting');\n });\n initRetryCount = 0;\n clearInterval(initRetryInterval);\n initRetryInterval = setInterval(() => {\n if (false) {}\n\n bridge.send('shared-data:master-init-waiting');\n initRetryCount++;\n\n if (initRetryCount > 30) {\n clearInterval(initRetryInterval);\n console.error('[shared data] Master init failed');\n }\n }, 2000);\n } else {\n if (false) {}\n\n bridge.on('shared-data:master-init-waiting', () => {\n if (false) {} // Load all persisted shared data\n\n\n bridge.send('shared-data:load');\n bridge.once('shared-data:load-complete', () => {\n if (false) {}\n\n bridge.send('shared-data:init-complete');\n resolve();\n });\n });\n bridge.send('shared-data:minion-init-waiting');\n }\n\n data = { ...internalSharedData\n };\n\n if (params.Vue) {\n data = params.Vue.observable(data);\n } // Update value from other shared data clients\n\n\n bridge.on('shared-data:set', ({\n key,\n value\n }) => {\n setValue(key, value);\n });\n initCbs.forEach(cb => cb());\n });\n}\n\nexports.initSharedData = initSharedData;\n\nfunction onSharedDataInit(cb) {\n initCbs.push(cb);\n return () => {\n const index = initCbs.indexOf(cb);\n if (index !== -1) initCbs.splice(index, 1);\n };\n}\n\nexports.onSharedDataInit = onSharedDataInit;\n\nfunction destroySharedData() {\n bridge.removeAllListeners('shared-data:set');\n watchers = {};\n}\n\nexports.destroySharedData = destroySharedData;\nlet watchers = {};\n\nfunction setValue(key, value) {\n // Storage\n if (persist && persisted.includes(key)) {\n (0, storage_1.setStorage)(`vue-devtools-${storageVersion}:shared-data:${key}`, value);\n }\n\n const oldValue = data[key];\n data[key] = value;\n const handlers = watchers[key];\n\n if (handlers) {\n handlers.forEach(h => h(value, oldValue));\n } // Validate Proxy set trap\n\n\n return true;\n}\n\nfunction sendValue(key, value) {\n bridge && bridge.send('shared-data:set', {\n key,\n value\n });\n}\n\nfunction watchSharedData(prop, handler) {\n const list = watchers[prop] || (watchers[prop] = []);\n list.push(handler);\n return () => {\n const index = list.indexOf(handler);\n if (index !== -1) list.splice(index, 1);\n };\n}\n\nexports.watchSharedData = watchSharedData;\nconst proxy = {};\nObject.keys(internalSharedData).forEach(key => {\n Object.defineProperty(proxy, key, {\n configurable: false,\n get: () => data[key],\n set: value => {\n sendValue(key, value);\n setValue(key, value);\n }\n });\n});\nexports.SharedData = proxy;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDRDtBQU4rQixHQUFsQztBQVFELENBVEQ7QUFXYSxxQkFBYSxLQUFiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvc2hhcmVkLWRhdGEudHM/ZDBiYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2hhcmVkRGF0YSA9IGV4cG9ydHMud2F0Y2hTaGFyZWREYXRhID0gZXhwb3J0cy5kZXN0cm95U2hhcmVkRGF0YSA9IGV4cG9ydHMub25TaGFyZWREYXRhSW5pdCA9IGV4cG9ydHMuaW5pdFNoYXJlZERhdGEgPSB2b2lkIDA7XG5jb25zdCBzdG9yYWdlXzEgPSByZXF1aXJlKFwiLi9zdG9yYWdlXCIpO1xuY29uc3QgZW52XzEgPSByZXF1aXJlKFwiLi9lbnZcIik7XG4vLyBJbml0aWFsIHN0YXRlXG5jb25zdCBpbnRlcm5hbFNoYXJlZERhdGEgPSB7XG4gICAgb3BlbkluRWRpdG9ySG9zdDogJy8nLFxuICAgIGNvbXBvbmVudE5hbWVTdHlsZTogJ2NsYXNzJyxcbiAgICB0aGVtZTogJ2F1dG8nLFxuICAgIGRpc3BsYXlEZW5zaXR5OiAnbG93JyxcbiAgICB0aW1lRm9ybWF0OiAnZGVmYXVsdCcsXG4gICAgcmVjb3JkVnVleDogdHJ1ZSxcbiAgICBjYWNoZVZ1ZXhTbmFwc2hvdHNFdmVyeTogNTAsXG4gICAgY2FjaGVWdWV4U25hcHNob3RzTGltaXQ6IDEwLFxuICAgIHNuYXBzaG90TG9hZGluZzogZmFsc2UsXG4gICAgY29tcG9uZW50RXZlbnRzRW5hYmxlZDogdHJ1ZSxcbiAgICBwZXJmb3JtYW5jZU1vbml0b3JpbmdFbmFibGVkOiB0cnVlLFxuICAgIGVkaXRhYmxlUHJvcHM6IGZhbHNlLFxuICAgIGxvZ0RldGVjdGVkOiB0cnVlLFxuICAgIHZ1ZXhOZXdCYWNrZW5kOiBmYWxzZSxcbiAgICB2dWV4QXV0b2xvYWQ6IGZhbHNlLFxuICAgIHZ1ZXhHcm91cEdldHRlcnNCeU1vZHVsZTogdHJ1ZSxcbiAgICBzaG93TWVudVNjcm9sbFRpcDogdHJ1ZSxcbiAgICB0aW1lbGluZVRpbWVHcmlkOiB0cnVlLFxuICAgIHRpbWVsaW5lU2NyZWVuc2hvdHM6IHRydWUsXG4gICAgbWVudVN0ZXBTY3JvbGxpbmc6IGVudl8xLmlzTWFjLFxuICAgIHBsdWdpblBlcm1pc3Npb25zOiB7fSxcbiAgICBwbHVnaW5TZXR0aW5nczoge30sXG4gICAgcGFnZUNvbmZpZzoge30sXG4gICAgbGVnYWN5QXBwczogZmFsc2UsXG4gICAgdHJhY2tVcGRhdGVzOiB0cnVlLFxuICAgIGZsYXNoVXBkYXRlczogZmFsc2UsXG4gICAgZGVidWdJbmZvOiBmYWxzZSxcbn07XG5jb25zdCBwZXJzaXN0ZWQgPSBbXG4gICAgJ2NvbXBvbmVudE5hbWVTdHlsZScsXG4gICAgJ3RoZW1lJyxcbiAgICAnZGlzcGxheURlbnNpdHknLFxuICAgICdyZWNvcmRWdWV4JyxcbiAgICAnZWRpdGFibGVQcm9wcycsXG4gICAgJ2xvZ0RldGVjdGVkJyxcbiAgICAndnVleE5ld0JhY2tlbmQnLFxuICAgICd2dWV4QXV0b2xvYWQnLFxuICAgICd2dWV4R3JvdXBHZXR0ZXJzQnlNb2R1bGUnLFxuICAgICd0aW1lRm9ybWF0JyxcbiAgICAnc2hvd01lbnVTY3JvbGxUaXAnLFxuICAgICd0aW1lbGluZVRpbWVHcmlkJyxcbiAgICAndGltZWxpbmVTY3JlZW5zaG90cycsXG4gICAgJ21lbnVTdGVwU2Nyb2xsaW5nJyxcbiAgICAncGx1Z2luUGVybWlzc2lvbnMnLFxuICAgICdwbHVnaW5TZXR0aW5ncycsXG4gICAgJ3BlcmZvcm1hbmNlTW9uaXRvcmluZ0VuYWJsZWQnLFxuICAgICdjb21wb25lbnRFdmVudHNFbmFibGVkJyxcbiAgICAndHJhY2tVcGRhdGVzJyxcbiAgICAnZmxhc2hVcGRhdGVzJyxcbiAgICAnZGVidWdJbmZvJyxcbl07XG5jb25zdCBzdG9yYWdlVmVyc2lvbiA9ICc2LjAuMC1hbHBoYS4xJztcbi8vIC0tLS0gSU5URVJOQUxTIC0tLS0gLy9cbmxldCBicmlkZ2U7XG4vLyBMaXN0IG9mIGZpZWxkcyB0byBwZXJzaXN0IHRvIHN0b3JhZ2UgKGRpc2FibGVkIGlmICdmYWxzZScpXG4vLyBUaGlzIHNob3VsZCBiZSB1bmlxdWUgdG8gZWFjaCBzaGFyZWQgZGF0YSBjbGllbnQgdG8gcHJldmVudCBjb25mbGljdHNcbmxldCBwZXJzaXN0ID0gZmFsc2U7XG5sZXQgZGF0YTtcbmxldCBpbml0UmV0cnlJbnRlcnZhbDtcbmxldCBpbml0UmV0cnlDb3VudCA9IDA7XG5jb25zdCBpbml0Q2JzID0gW107XG5mdW5jdGlvbiBpbml0U2hhcmVkRGF0YShwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgLy8gTWFuZGF0b3J5IHBhcmFtc1xuICAgICAgICBicmlkZ2UgPSBwYXJhbXMuYnJpZGdlO1xuICAgICAgICBwZXJzaXN0ID0gISFwYXJhbXMucGVyc2lzdDtcbiAgICAgICAgaWYgKHBlcnNpc3QpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNYXN0ZXIgaW5pdCBpbiBwcm9ncmVzcy4uLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTG9hZCBwZXJzaXN0ZWQgZmllbGRzXG4gICAgICAgICAgICBwZXJzaXN0ZWQuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKDAsIHN0b3JhZ2VfMS5nZXRTdG9yYWdlKShgdnVlLWRldnRvb2xzLSR7c3RvcmFnZVZlcnNpb259OnNoYXJlZC1kYXRhOiR7a2V5fWApO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFNoYXJlZERhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJpZGdlLm9uKCdzaGFyZWQtZGF0YTpsb2FkJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFNlbmQgYWxsIGZpZWxkc1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGludGVybmFsU2hhcmVkRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZW5kVmFsdWUoa2V5LCBpbnRlcm5hbFNoYXJlZERhdGFba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOmxvYWQtY29tcGxldGUnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJpZGdlLm9uKCdzaGFyZWQtZGF0YTppbml0LWNvbXBsZXRlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbc2hhcmVkIGRhdGFdIE1hc3RlciBpbml0IGNvbXBsZXRlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW5pdFJldHJ5SW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOm1hc3Rlci1pbml0LXdhaXRpbmcnKTtcbiAgICAgICAgICAgIC8vIEluIGNhc2UgYmFja2VuZCBpbml0IGlzIGV4ZWN1dGVkIGFmdGVyIGZyb250ZW5kXG4gICAgICAgICAgICBicmlkZ2Uub24oJ3NoYXJlZC1kYXRhOm1pbmlvbi1pbml0LXdhaXRpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOm1hc3Rlci1pbml0LXdhaXRpbmcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5pdFJldHJ5Q291bnQgPSAwO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbml0UmV0cnlJbnRlcnZhbCk7XG4gICAgICAgICAgICBpbml0UmV0cnlJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNYXN0ZXIgaW5pdCByZXRyeWluZy4uLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6bWFzdGVyLWluaXQtd2FpdGluZycpO1xuICAgICAgICAgICAgICAgIGluaXRSZXRyeUNvdW50Kys7XG4gICAgICAgICAgICAgICAgaWYgKGluaXRSZXRyeUNvdW50ID4gMzApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbml0UmV0cnlJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tzaGFyZWQgZGF0YV0gTWFzdGVyIGluaXQgZmFpbGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWluaW9uIGluaXQgaW4gcHJvZ3Jlc3MuLi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyaWRnZS5vbignc2hhcmVkLWRhdGE6bWFzdGVyLWluaXQtd2FpdGluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNaW5pb24gbG9hZGluZyBkYXRhLi4uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIExvYWQgYWxsIHBlcnNpc3RlZCBzaGFyZWQgZGF0YVxuICAgICAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTpsb2FkJyk7XG4gICAgICAgICAgICAgICAgYnJpZGdlLm9uY2UoJ3NoYXJlZC1kYXRhOmxvYWQtY29tcGxldGUnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWluaW9uIGluaXQgY29tcGxldGUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6aW5pdC1jb21wbGV0ZScpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTptaW5pb24taW5pdC13YWl0aW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLmludGVybmFsU2hhcmVkRGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHBhcmFtcy5WdWUpIHtcbiAgICAgICAgICAgIGRhdGEgPSBwYXJhbXMuVnVlLm9ic2VydmFibGUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIHZhbHVlIGZyb20gb3RoZXIgc2hhcmVkIGRhdGEgY2xpZW50c1xuICAgICAgICBicmlkZ2Uub24oJ3NoYXJlZC1kYXRhOnNldCcsICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgICAgc2V0VmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbml0Q2JzLmZvckVhY2goY2IgPT4gY2IoKSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmluaXRTaGFyZWREYXRhID0gaW5pdFNoYXJlZERhdGE7XG5mdW5jdGlvbiBvblNoYXJlZERhdGFJbml0KGNiKSB7XG4gICAgaW5pdENicy5wdXNoKGNiKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGluaXRDYnMuaW5kZXhPZihjYik7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICBpbml0Q2JzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfTtcbn1cbmV4cG9ydHMub25TaGFyZWREYXRhSW5pdCA9IG9uU2hhcmVkRGF0YUluaXQ7XG5mdW5jdGlvbiBkZXN0cm95U2hhcmVkRGF0YSgpIHtcbiAgICBicmlkZ2UucmVtb3ZlQWxsTGlzdGVuZXJzKCdzaGFyZWQtZGF0YTpzZXQnKTtcbiAgICB3YXRjaGVycyA9IHt9O1xufVxuZXhwb3J0cy5kZXN0cm95U2hhcmVkRGF0YSA9IGRlc3Ryb3lTaGFyZWREYXRhO1xubGV0IHdhdGNoZXJzID0ge307XG5mdW5jdGlvbiBzZXRWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgLy8gU3RvcmFnZVxuICAgIGlmIChwZXJzaXN0ICYmIHBlcnNpc3RlZC5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICgwLCBzdG9yYWdlXzEuc2V0U3RvcmFnZSkoYHZ1ZS1kZXZ0b29scy0ke3N0b3JhZ2VWZXJzaW9ufTpzaGFyZWQtZGF0YToke2tleX1gLCB2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IG9sZFZhbHVlID0gZGF0YVtrZXldO1xuICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgIGNvbnN0IGhhbmRsZXJzID0gd2F0Y2hlcnNba2V5XTtcbiAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgaGFuZGxlcnMuZm9yRWFjaChoID0+IGgodmFsdWUsIG9sZFZhbHVlKSk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIFByb3h5IHNldCB0cmFwXG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBzZW5kVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIGJyaWRnZSAmJiBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6c2V0Jywge1xuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgIH0pO1xufVxuZnVuY3Rpb24gd2F0Y2hTaGFyZWREYXRhKHByb3AsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBsaXN0ID0gd2F0Y2hlcnNbcHJvcF0gfHwgKHdhdGNoZXJzW3Byb3BdID0gW10pO1xuICAgIGxpc3QucHVzaChoYW5kbGVyKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3QuaW5kZXhPZihoYW5kbGVyKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xufVxuZXhwb3J0cy53YXRjaFNoYXJlZERhdGEgPSB3YXRjaFNoYXJlZERhdGE7XG5jb25zdCBwcm94eSA9IHt9O1xuT2JqZWN0LmtleXMoaW50ZXJuYWxTaGFyZWREYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZ2V0OiAoKSA9PiBkYXRhW2tleV0sXG4gICAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBzZW5kVmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBzZXRWYWx1ZShrZXksIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn0pO1xuZXhwb3J0cy5TaGFyZWREYXRhID0gcHJveHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZWQtZGF0YS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29556\n");
463
471
 
464
472
  /***/ }),
465
473