@openmrs/esm-app-shell 8.0.1-pre.3648 → 8.0.1-pre.3662

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.
Files changed (103) hide show
  1. package/.turbo/turbo-build.log +10 -10
  2. package/dist/44951914eb97a510.js +1 -0
  3. package/dist/44951914eb97a510.js.map +1 -0
  4. package/dist/index.html +1 -1
  5. package/dist/{openmrs.88a62218d7636be4.js → openmrs.ada851df8b28ca3b.js} +1 -1
  6. package/dist/{openmrs.88a62218d7636be4.js.map → openmrs.ada851df8b28ca3b.js.map} +1 -1
  7. package/dist/service-worker.js +1 -1
  8. package/lib/{dcffdf116aaed49c.js → 721e38fd7139f356.js} +2 -2
  9. package/lib/esm-help-menu-app/185.js +2 -0
  10. package/lib/esm-help-menu-app/185.js.map +1 -0
  11. package/lib/esm-help-menu-app/300.js +1 -0
  12. package/lib/esm-help-menu-app/322.js +1 -0
  13. package/lib/esm-help-menu-app/322.js.map +1 -0
  14. package/lib/esm-help-menu-app/326.js +2 -0
  15. package/lib/{esm-devtools-app → esm-help-menu-app}/326.js.map +1 -1
  16. package/lib/esm-help-menu-app/431.js +2 -0
  17. package/lib/esm-help-menu-app/431.js.map +1 -0
  18. package/lib/esm-help-menu-app/460.js +1 -0
  19. package/lib/{esm-devtools-app → esm-help-menu-app}/460.js.map +1 -1
  20. package/lib/esm-help-menu-app/555.js +1 -0
  21. package/lib/esm-help-menu-app/555.js.map +1 -0
  22. package/lib/esm-help-menu-app/611.js +2 -0
  23. package/lib/esm-help-menu-app/611.js.map +1 -0
  24. package/lib/esm-help-menu-app/623.js +2 -0
  25. package/lib/{esm-devtools-app → esm-help-menu-app}/623.js.map +1 -1
  26. package/lib/esm-help-menu-app/7.js +1 -0
  27. package/lib/esm-help-menu-app/7.js.map +1 -0
  28. package/lib/esm-help-menu-app/76.js +1 -0
  29. package/lib/esm-help-menu-app/76.js.map +1 -0
  30. package/lib/esm-help-menu-app/770.js +2 -0
  31. package/lib/{esm-devtools-app → esm-help-menu-app}/770.js.map +1 -1
  32. package/lib/esm-help-menu-app/802.js +1 -0
  33. package/lib/esm-help-menu-app/802.js.map +1 -0
  34. package/lib/esm-help-menu-app/90.js +1 -0
  35. package/lib/esm-help-menu-app/90.js.map +1 -0
  36. package/lib/esm-help-menu-app/939.js +1 -0
  37. package/lib/{esm-devtools-app → esm-help-menu-app}/939.js.map +1 -1
  38. package/lib/esm-help-menu-app/main.js +1 -0
  39. package/lib/esm-help-menu-app/main.js.map +1 -0
  40. package/lib/esm-help-menu-app/openmrs-esm-help-menu-app.js +1 -0
  41. package/lib/{esm-devtools-app/openmrs-esm-devtools-app.js.buildmanifest.json → esm-help-menu-app/openmrs-esm-help-menu-app.js.buildmanifest.json} +148 -131
  42. package/lib/esm-help-menu-app/openmrs-esm-help-menu-app.js.map +1 -0
  43. package/lib/esm-help-menu-app/routes.json +1 -0
  44. package/lib/esm-implementer-tools-app/5460.js +1 -1
  45. package/lib/esm-implementer-tools-app/5460.js.map +1 -1
  46. package/lib/esm-implementer-tools-app/main.js +1 -1
  47. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js +1 -1
  48. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.buildmanifest.json +5 -5
  49. package/lib/esm-implementer-tools-app/routes.json +1 -1
  50. package/lib/esm-login-app/14.js +1 -1
  51. package/lib/esm-login-app/14.js.map +1 -1
  52. package/lib/esm-login-app/main.js +1 -1
  53. package/lib/esm-login-app/openmrs-esm-login-app.js +1 -1
  54. package/lib/esm-login-app/openmrs-esm-login-app.js.buildmanifest.json +5 -5
  55. package/lib/esm-login-app/routes.json +1 -1
  56. package/lib/esm-offline-tools-app/5460.js +1 -1
  57. package/lib/esm-offline-tools-app/5460.js.map +1 -1
  58. package/lib/esm-offline-tools-app/main.js +1 -1
  59. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js +1 -1
  60. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.buildmanifest.json +5 -5
  61. package/lib/esm-offline-tools-app/routes.json +1 -1
  62. package/lib/esm-primary-navigation-app/5460.js +1 -1
  63. package/lib/esm-primary-navigation-app/5460.js.map +1 -1
  64. package/lib/esm-primary-navigation-app/main.js +1 -1
  65. package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js +1 -1
  66. package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.buildmanifest.json +5 -5
  67. package/lib/esm-primary-navigation-app/routes.json +1 -1
  68. package/lib/index.html +2 -2
  69. package/lib/openmrs.js +4 -4
  70. package/lib/service-worker.js +1 -1
  71. package/package.json +3 -3
  72. package/dist/18e330359ef76f0c.js +0 -1
  73. package/dist/18e330359ef76f0c.js.map +0 -1
  74. package/lib/esm-devtools-app/180.js +0 -2
  75. package/lib/esm-devtools-app/180.js.LICENSE.txt +0 -5
  76. package/lib/esm-devtools-app/180.js.map +0 -1
  77. package/lib/esm-devtools-app/185.js +0 -2
  78. package/lib/esm-devtools-app/185.js.map +0 -1
  79. package/lib/esm-devtools-app/300.js +0 -1
  80. package/lib/esm-devtools-app/326.js +0 -2
  81. package/lib/esm-devtools-app/460.js +0 -1
  82. package/lib/esm-devtools-app/523.js +0 -2
  83. package/lib/esm-devtools-app/523.js.map +0 -1
  84. package/lib/esm-devtools-app/623.js +0 -2
  85. package/lib/esm-devtools-app/723.js +0 -2
  86. package/lib/esm-devtools-app/723.js.map +0 -1
  87. package/lib/esm-devtools-app/770.js +0 -2
  88. package/lib/esm-devtools-app/907.js +0 -1
  89. package/lib/esm-devtools-app/907.js.map +0 -1
  90. package/lib/esm-devtools-app/929.js +0 -1
  91. package/lib/esm-devtools-app/929.js.map +0 -1
  92. package/lib/esm-devtools-app/939.js +0 -1
  93. package/lib/esm-devtools-app/main.js +0 -1
  94. package/lib/esm-devtools-app/main.js.map +0 -1
  95. package/lib/esm-devtools-app/openmrs-esm-devtools-app.js +0 -1
  96. package/lib/esm-devtools-app/openmrs-esm-devtools-app.js.map +0 -1
  97. package/lib/esm-devtools-app/routes.json +0 -1
  98. /package/lib/{esm-devtools-app → esm-help-menu-app}/185.js.LICENSE.txt +0 -0
  99. /package/lib/{esm-devtools-app → esm-help-menu-app}/326.js.LICENSE.txt +0 -0
  100. /package/lib/{esm-devtools-app/723.js.LICENSE.txt → esm-help-menu-app/431.js.LICENSE.txt} +0 -0
  101. /package/lib/{esm-devtools-app/523.js.LICENSE.txt → esm-help-menu-app/611.js.LICENSE.txt} +0 -0
  102. /package/lib/{esm-devtools-app → esm-help-menu-app}/623.js.LICENSE.txt +0 -0
  103. /package/lib/{esm-devtools-app → esm-help-menu-app}/770.js.LICENSE.txt +0 -0
@@ -1245,7 +1245,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1245
1245
  \*******************************************************************************/
1246
1246
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1247
1247
 
1248
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Workspace2: () => (/* binding */ Workspace2)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../../../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _carbon_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @carbon/react */ \"webpack/sharing/consume/default/@carbon/react/@carbon/react\");\n/* harmony import */ var _carbon_react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_carbon_react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _carbon_react_icons__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @carbon/react/icons */ \"../../../node_modules/@carbon/icons-react/es/generated/bucket-11.js\");\n/* harmony import */ var _carbon_react_icons__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @carbon/react/icons */ \"../../../node_modules/@carbon/icons-react/es/generated/bucket-6.js\");\n/* harmony import */ var _openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @openmrs/esm-react-utils */ \"../../framework/esm-react-utils/dist/index.js\");\n/* harmony import */ var _openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @openmrs/esm-translations */ \"../../framework/esm-translations/dist/index.js\");\n/* harmony import */ var _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @openmrs/esm-extensions */ \"../../framework/esm-extensions/dist/index.js\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../icons */ \"../../framework/esm-styleguide/src/icons/index.ts\");\n/* harmony import */ var _workspace2__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./workspace2 */ \"../../framework/esm-styleguide/src/workspaces2/workspace2.ts\");\n/* harmony import */ var _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./workspace2.module.scss */ \"../../framework/esm-styleguide/src/workspaces2/workspace2.module.scss\");\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n\n\n\n\n\n\n\n\n\n\n/**\n * The Workspace2 component is used as a top-level container to render\n * its children as content within a workspace. When creating a workspace\n * component, `<Workspace2>` should be the top-level component returned,\n * wrapping all of the workspace content.\n * @experimental\n */ var Workspace2 = function(param) {\n var title = param.title, children = param.children, _param_hasUnsavedChanges = param.hasUnsavedChanges, hasUnsavedChanges = _param_hasUnsavedChanges === void 0 ? false : _param_hasUnsavedChanges;\n var layout = (0,_openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_3__.useLayoutType)();\n var _useWorkspace2Store = (0,_workspace2__WEBPACK_IMPORTED_MODULE_7__.useWorkspace2Store)(), setWindowMaximized = _useWorkspace2Store.setWindowMaximized, hideWindow = _useWorkspace2Store.hideWindow, setHasUnsavedChanges = _useWorkspace2Store.setHasUnsavedChanges, openedWindows = _useWorkspace2Store.openedWindows, openedGroup = _useWorkspace2Store.openedGroup, registeredGroupsByName = _useWorkspace2Store.registeredGroupsByName, registeredWindowsByName = _useWorkspace2Store.registeredWindowsByName, registeredWorkspacesByName = _useWorkspace2Store.registeredWorkspacesByName, workspaceTitleByWorkspaceName = _useWorkspace2Store.workspaceTitleByWorkspaceName, setWorkspaceTitle = _useWorkspace2Store.setWorkspaceTitle, isMostRecentlyOpenedWindowHidden = _useWorkspace2Store.isMostRecentlyOpenedWindowHidden;\n var _useWorkspace2Context = (0,_workspace2__WEBPACK_IMPORTED_MODULE_7__.useWorkspace2Context)(), workspaceName = _useWorkspace2Context.workspaceName, isRootWorkspace = _useWorkspace2Context.isRootWorkspace, closeWorkspace = _useWorkspace2Context.closeWorkspace;\n var openedWindowIndex = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_5__.getOpenedWindowIndexByWorkspace)(workspaceName);\n var openedWindow = openedWindows[openedWindowIndex];\n var openedWorkspace = openedWindow === null || openedWindow === void 0 ? void 0 : openedWindow.openedWorkspaces.find(function(workspace) {\n return workspace.workspaceName === workspaceName;\n });\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n if ((openedWorkspace === null || openedWorkspace === void 0 ? void 0 : openedWorkspace.hasUnsavedChanges) != hasUnsavedChanges) {\n setHasUnsavedChanges(workspaceName, hasUnsavedChanges !== null && hasUnsavedChanges !== void 0 ? hasUnsavedChanges : false);\n }\n }, [\n openedWorkspace,\n hasUnsavedChanges\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n if (workspaceTitleByWorkspaceName[workspaceName] !== title) {\n setWorkspaceTitle(workspaceName, title);\n }\n }, [\n openedWorkspace,\n title\n ]);\n if (openedWindowIndex < 0 || openedGroup == null || openedWorkspace == null) {\n // workspace window / group has likely just closed\n return null;\n }\n var group = registeredGroupsByName[openedGroup.groupName];\n if (!group) {\n throw new Error(\"Cannot find registered workspace group \".concat(openedGroup.groupName));\n }\n var workspaceDef = registeredWorkspacesByName[workspaceName];\n var windowName = workspaceDef.window;\n var windowDef = registeredWindowsByName[windowName];\n if (!windowDef) {\n throw new Error(\"Cannot find registered workspace window \".concat(windowName));\n }\n var icon = windowDef.icon, canMaximize = windowDef.canMaximize;\n var canHide = !!icon;\n var maximized = openedWindow.maximized;\n var _windowDef_width;\n var width = (_windowDef_width = windowDef === null || windowDef === void 0 ? void 0 : windowDef.width) !== null && _windowDef_width !== void 0 ? _windowDef_width : 'narrow';\n var isActionMenuOpened = Object.values(registeredWindowsByName).some(function(window) {\n return window.group === openedGroup.groupName && window.icon !== undefined;\n });\n var isWindowHidden = openedWindowIndex < openedWindows.length - 1 || isMostRecentlyOpenedWindowHidden;\n var _obj, _obj1, _obj2;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].workspaceOuterContainer, (_obj = {}, _define_property(_obj, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].narrowWorkspace, width === 'narrow'), _define_property(_obj, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].widerWorkspace, width === 'wider'), _define_property(_obj, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].extraWideWorkspace, width === 'extra-wide'), _define_property(_obj, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isActionMenuOpened, isActionMenuOpened), _obj))\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].workspaceSpacer, _define_property({}, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].hidden, isWindowHidden))\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].workspaceMiddleContainer, (_obj1 = {}, _define_property(_obj1, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].maximized, maximized), _define_property(_obj1, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].hidden, isWindowHidden), _define_property(_obj1, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isRootWorkspace, isRootWorkspace), _obj1))\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].workspaceInnerContainer, (_obj2 = {}, _define_property(_obj2, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].maximized, maximized), _define_property(_obj2, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].hidden, isWindowHidden), _define_property(_obj2, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isRootWorkspace, isRootWorkspace), _obj2))\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.Header, {\n \"aria-label\": (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('workspaceHeader'),\n className: _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].header\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderName, {\n prefix: \"\"\n }, title), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].overlayHeaderSpacer\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderGlobalBar, {\n className: _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].headerButtons\n }, (0,_openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_3__.isDesktop)(layout) ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, (canMaximize || maximized) && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderGlobalAction, {\n \"aria-label\": maximized ? (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('minimize') : (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('maximize'),\n onClick: function() {\n return setWindowMaximized(windowName, !maximized);\n }\n }, maximized ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react_icons__WEBPACK_IMPORTED_MODULE_9__.Minimize, null) : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react_icons__WEBPACK_IMPORTED_MODULE_9__.Maximize, null)), canHide ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderGlobalAction, {\n \"aria-label\": (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('hide'),\n onClick: function() {\n return hideWindow();\n }\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons__WEBPACK_IMPORTED_MODULE_6__.ArrowRightIcon, null)) : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderGlobalAction, {\n \"aria-label\": (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('close'),\n onClick: function() {\n return closeWorkspace({\n closeWindow: true\n });\n }\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons__WEBPACK_IMPORTED_MODULE_6__.CloseIcon, null))) : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, canHide && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderGlobalAction, {\n \"aria-label\": (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('hide'),\n onClick: function() {\n return hideWindow();\n }\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react_icons__WEBPACK_IMPORTED_MODULE_10__.DownToBottom, null)), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderGlobalAction, {\n \"aria-label\": (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('close'),\n onClick: function() {\n return closeWorkspace({\n closeWindow: true\n });\n }\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons__WEBPACK_IMPORTED_MODULE_6__.CloseIcon, null))))), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].workspaceContent)\n }, children)))));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1zdHlsZWd1aWRlL3NyYy93b3Jrc3BhY2VzMi93b3Jrc3BhY2UyLmNvbXBvbmVudC50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF5RDtBQUNyQjtBQUNvRDtBQUNqQjtBQUNIO0FBQ0w7QUFDVztBQUNyQjtBQUNtQjtBQUMxQjtBQWtEOUM7Ozs7OztDQU1DLEdBQ00sSUFBTW1CLGFBQXdDO1FBQUdDLGNBQUFBLE9BQU9DLGlCQUFBQSwyQ0FBVUMsbUJBQUFBLDBEQUFvQjtJQUMzRixJQUFNQyxTQUFTWix1RUFBYUE7SUFDNUIsSUFZSUssc0JBQUFBLCtEQUFrQkEsSUFYcEJRLHFCQVdFUixvQkFYRlEsb0JBQ0FDLGFBVUVULG9CQVZGUyxZQUNBQyx1QkFTRVYsb0JBVEZVLHNCQUNBQyxnQkFRRVgsb0JBUkZXLGVBQ0FDLGNBT0VaLG9CQVBGWSxhQUNBQyx5QkFNRWIsb0JBTkZhLHdCQUNBQywwQkFLRWQsb0JBTEZjLHlCQUNBQyw2QkFJRWYsb0JBSkZlLDRCQUNBQyxnQ0FHRWhCLG9CQUhGZ0IsK0JBQ0FDLG9CQUVFakIsb0JBRkZpQixtQkFDQUMsbUNBQ0VsQixvQkFERmtCO0lBRUYsSUFBMkRqQix3QkFBQUEsaUVBQW9CQSxJQUF2RWtCLGdCQUFtRGxCLHNCQUFuRGtCLGVBQWVDLGtCQUFvQ25CLHNCQUFwQ21CLGlCQUFpQkMsaUJBQW1CcEIsc0JBQW5Cb0I7SUFFeEMsSUFBTUMsb0JBQW9CekIsd0ZBQStCQSxDQUFDc0I7SUFFMUQsSUFBTUksZUFBZVosYUFBYSxDQUFDVyxrQkFBa0I7SUFDckQsSUFBTUUsa0JBQWtCRCx5QkFBQUEsbUNBQUFBLGFBQWNFLGdCQUFnQixDQUFDQyxJQUFJLENBQUMsU0FBQ0M7ZUFBY0EsVUFBVVIsYUFBYSxLQUFLQTs7SUFFdkdsQyxnREFBU0EsQ0FBQztRQUNSLElBQUl1QyxDQUFBQSw0QkFBQUEsc0NBQUFBLGdCQUFpQmxCLGlCQUFpQixLQUFJ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Z0JBQWdCO09BQUkzRDtBQU1sRSxFQUFFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLXN0eWxlZ3VpZGUvc3JjL3dvcmtzcGFjZXMyL3dvcmtzcGFjZTIuY29tcG9uZW50LnRzeD8zN2YzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHR5cGUgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBIZWFkZXIsIEhlYWRlckdsb2JhbEFjdGlvbiwgSGVhZGVyR2xvYmFsQmFyLCBIZWFkZXJOYW1lIH0gZnJvbSAnQGNhcmJvbi9yZWFjdCc7XG5pbXBvcnQgeyBEb3duVG9Cb3R0b20sIE1heGltaXplLCBNaW5pbWl6ZSB9IGZyb20gJ0BjYXJib24vcmVhY3QvaWNvbnMnO1xuaW1wb3J0IHsgaXNEZXNrdG9wLCB1c2VMYXlvdXRUeXBlIH0gZnJvbSAnQG9wZW5tcnMvZXNtLXJlYWN0LXV0aWxzJztcbmltcG9ydCB7IGdldENvcmVUcmFuc2xhdGlvbiB9IGZyb20gJ0BvcGVubXJzL2VzbS10cmFuc2xhdGlvbnMnO1xuaW1wb3J0IHsgZ2V0T3BlbmVkV2luZG93SW5kZXhCeVdvcmtzcGFjZSB9IGZyb20gJ0BvcGVubXJzL2VzbS1leHRlbnNpb25zJztcbmltcG9ydCB7IEFycm93UmlnaHRJY29uLCBDbG9zZUljb24gfSBmcm9tICcuLi9pY29ucyc7XG5pbXBvcnQgeyB1c2VXb3Jrc3BhY2UyU3RvcmUsIHVzZVdvcmtzcGFjZTJDb250ZXh0IH0gZnJvbSAnLi93b3Jrc3BhY2UyJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi93b3Jrc3BhY2UyLm1vZHVsZS5zY3NzJztcblxuaW50ZXJmYWNlIFdvcmtzcGFjZTJQcm9wcyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGhhc1Vuc2F2ZWRDaGFuZ2VzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlMkRlZmluaXRpb25Qcm9wczxcbiAgV29ya3NwYWNlUHJvcHMgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3QsXG4gIFdpbmRvd1Byb3BzIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0LFxuICBHcm91cFByb3BzIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0LFxuPiB7XG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGxhdW5jaGVzIGEgY2hpbGQgd29ya3NwYWNlLiBVbmxpa2UgYGxhdW5jaFdvcmtzcGFjZSgpYCwgdGhpcyBmdW5jdGlvbiBpcyBtZWFudFxuICAgKiB0byBiZSBjYWxsZWQgZnJvbSB0aGUgYSB3b3Jrc3BhY2UsIGFuZCBpdCBkb2VzIG5vdCBhbGxvdyBwYXNzaW5nIChvciBjaGFuZ2luZylcbiAgICogdGhlIHdpbmRvdyBwcm9wcyBvciBncm91cCBwcm9wc1xuICAgKiBAcGFyYW0gd29ya3NwYWNlTmFtZVxuICAgKiBAcGFyYW0gd29ya3NwYWNlUHJvcHNcbiAgICovXG4gIGxhdW5jaENoaWxkV29ya3NwYWNlPFByb3BzIGV4dGVuZHMgb2JqZWN0Pih3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHdvcmtzcGFjZVByb3BzPzogUHJvcHMpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBjbG9zZXMgdGhlIGN1cnJlbnQgd29ya3NwYWNlLCBhbG9uZyB3aXRoIGl0cyBjaGlsZHJlbi5cbiAgICogQHBhcmFtIGNsb3NlV2luZG93IElmIHRydWUsIHRoZSB3b3Jrc3BhY2UncyB3aW5kb3csIGFsb25nIHdpdGggYWxsIHdvcmtzcGFjZXMgd2l0aGluIGl0LCB3aWxsIGJlIGNsb3NlZCBhcyB3ZWxsXG4gICAqIEBwYXJhbSBkaXNjYXJkVW5zYXZlZENoYW5nZXMgSWYgdHJ1ZSwgdGhlIFwidW5zYXZlZCBjaGFuZ2VzXCIgbW9kYWwgd2lsbCBiZSBzdXByZXNzZWQsIGFuZCB0aGUgdmFsdWUgb2YgYGhhc1Vuc2F2ZWRDaGFuZ2VzYCB3aWxsIGJlIGlnbm9yZWQuIFVzZSB0aGlzIHdoZW4gY2xvc2luZyB0aGUgd29ya3NwYWNlIGltbWVkaWF0ZWx5IGFmdGVyIGNoYW5nZXMgYXJlIHNhdmVkLlxuICAgKiBAcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSB3b3Jrc3BhY2UgaXMgY2xvc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBjbG9zZVdvcmtzcGFjZShvcHRpb25zPzogeyBjbG9zZVdpbmRvdz86IGJvb2xlYW47IGRpc2NhcmRVbnNhdmVkQ2hhbmdlcz86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgd29ya3NwYWNlUHJvcHM6IFdvcmtzcGFjZVByb3BzIHwgbnVsbDtcbiAgd2luZG93UHJvcHM6IFdpbmRvd1Byb3BzIHwgbnVsbDtcbiAgZ3JvdXBQcm9wczogR3JvdXBQcm9wcyB8IG51bGw7XG4gIHdvcmtzcGFjZU5hbWU6IHN0cmluZztcbiAgd2luZG93TmFtZTogc3RyaW5nO1xuICBpc1Jvb3RXb3Jrc3BhY2U6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgdHlwZSBXb3Jrc3BhY2UyRGVmaW5pdGlvbjxcbiAgV29ya3NwYWNlUHJvcHMgZXh0ZW5kcyBvYmplY3QsXG4gIFdpbmRvd1Byb3BzIGV4dGVuZHMgb2JqZWN0LFxuICBHcm91cFByb3BzIGV4dGVuZHMgb2JqZWN0LFxuPiA9IFJlYWN0LkZDPFdvcmtzcGFjZTJEZWZpbml0aW9uUHJvcHM8V29ya3NwYWNlUHJvcHMsIFdpbmRvd1Byb3BzLCBHcm91cFByb3BzPj47XG5cbi8qKlxuICogVGhlIFdvcmtzcGFjZTIgY29tcG9uZW50IGlzIHVzZWQgYXMgYSB0b3AtbGV2ZWwgY29udGFpbmVyIHRvIHJlbmRlclxuICogaXRzIGNoaWxkcmVuIGFzIGNvbnRlbnQgd2l0aGluIGEgd29ya3NwYWNlLiBXaGVuIGNyZWF0aW5nIGEgd29ya3NwYWNlXG4gKiBjb21wb25lbnQsIGA8V29ya3NwYWNlMj5gIHNob3VsZCBiZSB0aGUgdG9wLWxldmVsIGNvbXBvbmVudCByZXR1cm5lZCxcbiAqIHdyYXBwaW5nIGFsbCBvZiB0aGUgd29ya3NwYWNlIGNvbnRlbnQuXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjb25zdCBXb3Jrc3BhY2UyOiBSZWFjdC5GQzxXb3Jrc3BhY2UyUHJvcHM+ID0gKHsgdGl0bGUsIGNoaWxkcmVuLCBoYXNVbnNhdmVkQ2hhbmdlcyA9IGZhbHNlIH0pID0+IHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0VHlwZSgpO1xuICBjb25zdCB7XG4gICAgc2V0V2luZG93TWF4aW1pemVkLFxuICAgIGhpZGVXaW5kb3csXG4gICAgc2V0SGFzVW5zYXZlZENoYW5nZXMsXG4gICAgb3BlbmVkV2luZG93cyxcbiAgICBvcGVuZWRHcm91cCxcbiAgICByZWdpc3RlcmVkR3JvdXBzQnlOYW1lLFxuICAgIHJlZ2lzdGVyZWRXaW5kb3dzQnlOYW1lLFxuICAgIHJlZ2lzdGVyZWRXb3Jrc3BhY2VzQnlOYW1lLFxuICAgIHdvcmtzcGFjZVRpdGxlQnlXb3Jrc3BhY2VOYW1lLFxuICAgIHNldFdvcmtzcGFjZVRpdGxlLFxuICAgIGlzTW9zdFJlY2VudGx5T3BlbmVkV2luZG93SGlkZGVuLFxuICB9ID0gdXNlV29ya3NwYWNlMlN0b3JlKCk7XG4gIGNvbnN0IHsgd29ya3NwYWNlTmFtZSwgaXNSb290V29ya3NwYWNlLCBjbG9zZVdvcmtzcGFjZSB9ID0gdXNlV29ya3NwYWNlMkNvbnRleHQoKTtcblxuICBjb25zdCBvcGVuZWRXaW5kb3dJbmRleCA9IGdldE9wZW5lZFdpbmRvd0luZGV4QnlXb3Jrc3BhY2Uod29ya3NwYWNlTmFtZSk7XG5cbiAgY29uc3Qgb3BlbmVkV2luZG93ID0gb3BlbmVkV2luZG93c1tvcGVuZWRXaW5kb3dJbmRleF07XG4gIGNvbnN0IG9wZW5lZFdvcmtzcGFjZSA9IG9wZW5lZFdpbmRvdz8ub3BlbmVkV29ya3NwYWNlcy5maW5kKCh3b3Jrc3BhY2UpID0+IHdvcmtzcGFjZS53b3Jrc3BhY2VOYW1lID09PSB3b3Jrc3BhY2VOYW1lKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuZWRXb3Jrc3BhY2U/Lmhhc1Vuc2F2ZWRDaGFuZ2VzICE9IGhhc1Vuc2F2ZWRDaGFuZ2VzKSB7XG4gICAgICBzZXRIYXNVbnNhdmVkQ2hhbmdlcyh3b3Jrc3BhY2VOYW1lLCBoYXNVbnNhdmVkQ2hhbmdlcyA/PyBmYWxzZSk7XG4gICAgfVxuICB9LCBbb3BlbmVkV29ya3NwYWNlLCBoYXNVbnNhdmVkQ2hhbmdlc10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdvcmtzcGFjZVRpdGxlQnlXb3Jrc3BhY2VOYW1lW3dvcmtzcGFjZU5hbWVdICE9PSB0aXRsZSkge1xuICAgICAgc2V0V29ya3NwYWNlVGl0bGUod29ya3NwYWNlTmFtZSwgdGl0bGUpO1xuICAgIH1cbiAgfSwgW29wZW5lZFdvcmtzcGFjZSwgdGl0bGVdKTtcblxuICBpZiAob3BlbmVkV2luZG93SW5kZXggPCAwIHx8IG9wZW5lZEdyb3VwID09IG51bGwgfHwgb3BlbmVkV29ya3NwYWNlID09IG51bGwpIHtcbiAgICAvLyB3b3Jrc3BhY2Ugd2luZG93IC8gZ3JvdXAgaGFzIGxpa2VseSBqdXN0IGNsb3NlZFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZ3JvdXAgPSByZWdpc3RlcmVkR3JvdXBzQnlOYW1lW29wZW5lZEdyb3VwLmdyb3VwTmFtZV07XG4gIGlmICghZ3JvdXApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHJlZ2lzdGVyZWQgd29ya3NwYWNlIGdyb3VwICR7b3BlbmVkR3JvdXAuZ3JvdXBOYW1lfWApO1xuICB9XG4gIGNvbnN0IHdvcmtzcGFjZURlZiA9IHJlZ2lzdGVyZWRXb3Jrc3BhY2VzQnlOYW1lW3dvcmtzcGFjZU5hbWVdO1xuICBjb25zdCB3aW5kb3dOYW1lID0gd29ya3NwYWNlRGVmLndpbmRvdztcbiAgY29uc3Qgd2luZG93RGVmID0gcmVnaXN0ZXJlZFdpbmRvd3NCeU5hbWVbd2luZG93TmFtZV07XG4gIGlmICghd2luZG93RGVmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCByZWdpc3RlcmVkIHdvcmtzcGFjZSB3aW5kb3cgJHt3aW5kb3dOYW1lfWApO1xuICB9XG5cbiAgY29uc3QgeyBpY29uLCBjYW5NYXhpbWl6ZSB9ID0gd2luZG93RGVmO1xuICBjb25zdCBjYW5IaWRlID0gISFpY29uO1xuICBjb25zdCB7IG1heGltaXplZCB9ID0gb3BlbmVkV2luZG93O1xuICBjb25zdCB3aWR0aCA9IHdpbmRvd0RlZj8ud2lkdGggPz8gJ25hcnJvdyc7XG5cbiAgY29uc3QgaXNBY3Rpb25NZW51T3BlbmVkID0gT2JqZWN0LnZhbHVlcyhyZWdpc3RlcmVkV2luZG93c0J5TmFtZSkuc29tZShcbiAgICAod2luZG93KSA9PiB3aW5kb3cuZ3JvdXAgPT09IG9wZW5lZEdyb3VwLmdyb3VwTmFtZSAmJiB3aW5kb3cuaWNvbiAhPT0gdW5kZWZpbmVkLFxuICApO1xuXG4gIGNvbnN0IGlzV2luZG93SGlkZGVuID0gb3BlbmVkV2luZG93SW5kZXggPCBvcGVuZWRXaW5kb3dzLmxlbmd0aCAtIDEgfHwgaXNNb3N0UmVjZW50bHlPcGVuZWRXaW5kb3dIaWRkZW47XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLndvcmtzcGFjZU91dGVyQ29udGFpbmVyLCB7XG4gICAgICAgIFtzdHlsZXMubmFycm93V29ya3NwYWNlXTogd2lkdGggPT09ICduYXJyb3cnLFxuICAgICAgICBbc3R5bGVzLndpZGVyV29ya3NwYWNlXTogd2lkdGggPT09ICd3aWRlcicsXG4gICAgICAgIFtzdHlsZXMuZXh0cmFXaWRlV29ya3NwYWNlXTogd2lkdGggPT09ICdleHRyYS13aWRlJyxcbiAgICAgICAgW3N0eWxlcy5pc0FjdGlvbk1lbnVPcGVuZWRdOiBpc0FjdGlvbk1lbnVPcGVuZWQsXG4gICAgICB9KX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMud29ya3NwYWNlU3BhY2VyLCB7XG4gICAgICAgICAgW3N0eWxlcy5oaWRkZW5dOiBpc1dpbmRvd0hpZGRlbixcbiAgICAgICAgfSl9XG4gICAgICAvPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLndvcmtzcGFjZU1pZGRsZUNvbnRhaW5lciwge1xuICAgICAgICAgIFtzdHlsZXMubWF4aW1pemVkXTogbWF4aW1pemVkLFxuICAgICAgICAgIFtzdHlsZXMuaGlkZGVuXTogaXNXaW5kb3dIaWRkZW4sXG4gICAgICAgICAgW3N0eWxlcy5pc1Jvb3RXb3Jrc3BhY2VdOiBpc1Jvb3RXb3Jrc3BhY2UsXG4gICAgICAgIH0pfVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy53b3Jrc3BhY2VJbm5lckNvbnRhaW5lciwge1xuICAgICAgICAgICAgW3N0eWxlcy5tYXhpbWl6ZWRdOiBtYXhpbWl6ZWQsXG4gICAgICAgICAgICBbc3R5bGVzLmhpZGRlbl06IGlzV2luZG93SGlkZGVuLFxuICAgICAgICAgICAgW3N0eWxlcy5pc1Jvb3RXb3Jrc3BhY2VdOiBpc1Jvb3RXb3Jrc3BhY2UsXG4gICAgICAgICAgfSl9XG4gICAgICAgID5cbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPEhlYWRlciBhcmlhLWxhYmVsPXtnZXRDb3JlVHJhbnNsYXRpb24oJ3dvcmtzcGFjZUhlYWRlcicpfSBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PlxuICAgICAgICAgICAgICA8SGVhZGVyTmFtZSBwcmVmaXg9XCJcIj57dGl0bGV9PC9IZWFkZXJOYW1lPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXlIZWFkZXJTcGFjZXJ9IC8+XG4gICAgICAgICAgICAgIDxIZWFkZXJHbG9iYWxCYXIgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyQnV0dG9uc30+XG4gICAgICAgICAgICAgICAge2lzRGVza3RvcChsYXlvdXQpID8gKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgeyhjYW5NYXhpbWl6ZSB8fCBtYXhpbWl6ZWQpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8SGVhZGVyR2xvYmFsQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXttYXhpbWl6ZWQgPyBnZXRDb3JlVHJhbnNsYXRpb24oJ21pbmltaXplJykgOiBnZXRDb3JlVHJhbnNsYXRpb24oJ21heGltaXplJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRXaW5kb3dNYXhpbWl6ZWQod2luZG93TmFtZSwgIW1heGltaXplZCl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge21heGltaXplZCA/IDxNaW5pbWl6ZSAvPiA6IDxNYXhpbWl6ZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICA8L0hlYWRlckdsb2JhbEFjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAge2NhbkhpZGUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPEhlYWRlckdsb2JhbEFjdGlvbiBhcmlhLWxhYmVsPXtnZXRDb3JlVHJhbnNsYXRpb24oJ2hpZGUnKX0gb25DbGljaz17KCkgPT4gaGlkZVdpbmRvdygpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJvd1JpZ2h0SWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvSGVhZGVyR2xvYmFsQWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgIDxIZWFkZXJHbG9iYWxBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2dldENvcmVUcmFuc2xhdGlvbignY2xvc2UnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNsb3NlV29ya3NwYWNlKHsgY2xvc2VXaW5kb3c6IHRydWUgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvSGVhZGVyR2xvYmFsQWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtjYW5IaWRlICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8SGVhZGVyR2xvYmFsQWN0aW9uIGFyaWEtbGFiZWw9e2dldENvcmVUcmFuc2xhdGlvbignaGlkZScpfSBvbkNsaWNrPXsoKSA9PiBoaWRlV2luZG93KCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPERvd25Ub0JvdHRvbSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvSGVhZGVyR2xvYmFsQWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgICAgIDxIZWFkZXJHbG9iYWxBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtnZXRDb3JlVHJhbnNsYXRpb24oJ2Nsb3NlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2VXb3Jrc3BhY2UoeyBjbG9zZVdpbmRvdzogdHJ1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxDbG9zZUljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9IZWFkZXJHbG9iYWxBY3Rpb24+XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L0hlYWRlckdsb2JhbEJhcj5cbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLndvcmtzcGFjZUNvbnRlbnQpfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbIlJlYWN0IiwidXNlRWZmZWN0IiwiY2xhc3NOYW1lcyIsIkhlYWRlciIsIkhlYWRlckdsb2JhbEFjdGlvbiIsIkhlYWRlckdsb2JhbEJhciIsIkhlYWRlck5hbWUiLCJEb3duVG9Cb3R0b20iLCJNYXhpbWl6ZSIsIk1pbmltaXplIiwiaXNEZXNrdG9wIiwidXNlTGF5b3V0VHlwZSIsImdldENvcmVUcmFuc2xhdGlvbiIsImdldE9wZW5lZFdpbmRvd0luZGV4QnlXb3Jrc3BhY2UiLCJBcnJvd1JpZ2h0SWNvbiIsIkNsb3NlSWNvbiIsInVzZVdvcmtzcGFjZTJTdG9yZSIsInVzZVdvcmtzcGFjZTJDb250ZXh0Iiwic3R5bGVzIiwiV29ya3NwYWNlMiIsInRpdGxlIiwiY2hpbGRyZW4iLCJoYXNVbnNhdmVkQ2hhbmdlcyIsImxheW91dCIsInNldFdpbmRvd01heGltaXplZCIsImhpZGVXaW5kb3ciLCJzZXRIYXNVbnNhdmVkQ2hhbmdlcyIsIm9wZW5lZFdpbmRvd3MiLCJvcGVuZWRHcm91cCIsInJlZ2lzdGVyZWRHcm91cHNCeU5hbWUiLCJyZWdpc3RlcmVkV2luZG93c0J5TmFtZSIsInJlZ2lzdGVyZWRXb3Jrc3BhY2VzQnlOYW1lIiwid29ya3NwYWNlVGl0bGVCeVdvcmtzcGFjZU5hbWUiLCJzZXRXb3Jrc3BhY2VUaXRsZSIsImlzTW9zdFJlY2VudGx5T3BlbmVkV2luZG93SGlkZGVuIiwid29ya3NwYWNlTmFtZSIsImlzUm9vdFdvcmtzcGFjZSIsImNsb3NlV29ya3NwYWNlIiwib3BlbmVkV2luZG93SW5kZXgiLCJvcGVuZWRXaW5kb3ciLCJvcGVuZWRXb3Jrc3BhY2UiLCJvcGVuZWRXb3Jrc3BhY2VzIiwiZmluZCIsIndvcmtzcGFjZSIsImdyb3VwIiwiZ3JvdXBOYW1lIiwiRXJyb3IiLCJ3b3Jrc3BhY2VEZWYiLCJ3aW5kb3dOYW1lIiwid2luZG93Iiwid2luZG93RGVmIiwiaWNvbiIsImNhbk1heGltaXplIiwiY2FuSGlkZSIsIm1heGltaXplZCIsIndpZHRoIiwiaXNBY3Rpb25NZW51T3BlbmVkIiwiT2JqZWN0IiwidmFsdWVzIiwic29tZSIsInVuZGVmaW5lZCIsImlzV2luZG93SGlkZGVuIiwibGVuZ3RoIiwiZGl2IiwiY2xhc3NOYW1lIiwid29ya3NwYWNlT3V0ZXJDb250YWluZXIiLCJuYXJyb3dXb3Jrc3BhY2UiLCJ3aWRlcldvcmtzcGFjZSIsImV4dHJhV2lkZVdvcmtzcGFjZSIsIndvcmtzcGFjZVNwYWNlciIsImhpZGRlbiIsIndvcmtzcGFjZU1pZGRsZUNvbnRhaW5lciIsIndvcmtzcGFjZUlubmVyQ29udGFpbmVyIiwiYXJpYS1sYWJlbCIsImhlYWRlciIsInByZWZpeCIsIm92ZXJsYXlIZWFkZXJTcGFjZXIiLCJoZWFkZXJCdXR0b25zIiwib25DbGljayIsImNsb3NlV2luZG93Iiwid29ya3NwYWNlQ29udGVudCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../framework/esm-styleguide/src/workspaces2/workspace2.component.tsx\n");
1248
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Workspace2: () => (/* binding */ Workspace2)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../../../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _carbon_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @carbon/react */ \"webpack/sharing/consume/default/@carbon/react/@carbon/react\");\n/* harmony import */ var _carbon_react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_carbon_react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _carbon_react_icons__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @carbon/react/icons */ \"../../../node_modules/@carbon/icons-react/es/generated/bucket-11.js\");\n/* harmony import */ var _carbon_react_icons__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @carbon/react/icons */ \"../../../node_modules/@carbon/icons-react/es/generated/bucket-6.js\");\n/* harmony import */ var _openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @openmrs/esm-react-utils */ \"../../framework/esm-react-utils/dist/index.js\");\n/* harmony import */ var _openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @openmrs/esm-translations */ \"../../framework/esm-translations/dist/index.js\");\n/* harmony import */ var _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @openmrs/esm-extensions */ \"../../framework/esm-extensions/dist/index.js\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../icons */ \"../../framework/esm-styleguide/src/icons/index.ts\");\n/* harmony import */ var _workspace2__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./workspace2 */ \"../../framework/esm-styleguide/src/workspaces2/workspace2.ts\");\n/* harmony import */ var _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./workspace2.module.scss */ \"../../framework/esm-styleguide/src/workspaces2/workspace2.module.scss\");\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n\n\n\n\n\n\n\n\n\n\n/**\n * The Workspace2 component is used as a top-level container to render\n * its children as content within a workspace. When creating a workspace\n * component, `<Workspace2>` should be the top-level component returned,\n * wrapping all of the workspace content.\n * @experimental\n */ var Workspace2 = function(param) {\n var title = param.title, children = param.children, _param_hasUnsavedChanges = param.hasUnsavedChanges, hasUnsavedChanges = _param_hasUnsavedChanges === void 0 ? false : _param_hasUnsavedChanges;\n var layout = (0,_openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_3__.useLayoutType)();\n var _useWorkspace2Store = (0,_workspace2__WEBPACK_IMPORTED_MODULE_7__.useWorkspace2Store)(), setWindowMaximized = _useWorkspace2Store.setWindowMaximized, hideWindow = _useWorkspace2Store.hideWindow, setHasUnsavedChanges = _useWorkspace2Store.setHasUnsavedChanges, openedWindows = _useWorkspace2Store.openedWindows, openedGroup = _useWorkspace2Store.openedGroup, registeredGroupsByName = _useWorkspace2Store.registeredGroupsByName, registeredWindowsByName = _useWorkspace2Store.registeredWindowsByName, registeredWorkspacesByName = _useWorkspace2Store.registeredWorkspacesByName, workspaceTitleByWorkspaceName = _useWorkspace2Store.workspaceTitleByWorkspaceName, setWorkspaceTitle = _useWorkspace2Store.setWorkspaceTitle, isMostRecentlyOpenedWindowHidden = _useWorkspace2Store.isMostRecentlyOpenedWindowHidden;\n var _useWorkspace2Context = (0,_workspace2__WEBPACK_IMPORTED_MODULE_7__.useWorkspace2Context)(), workspaceName = _useWorkspace2Context.workspaceName, isRootWorkspace = _useWorkspace2Context.isRootWorkspace, closeWorkspace = _useWorkspace2Context.closeWorkspace;\n var openedWindowIndex = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_5__.getOpenedWindowIndexByWorkspace)(workspaceName);\n var openedWindow = openedWindows[openedWindowIndex];\n var openedWorkspace = openedWindow === null || openedWindow === void 0 ? void 0 : openedWindow.openedWorkspaces.find(function(workspace) {\n return workspace.workspaceName === workspaceName;\n });\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n if ((openedWorkspace === null || openedWorkspace === void 0 ? void 0 : openedWorkspace.hasUnsavedChanges) != hasUnsavedChanges) {\n setHasUnsavedChanges(workspaceName, hasUnsavedChanges !== null && hasUnsavedChanges !== void 0 ? hasUnsavedChanges : false);\n }\n }, [\n openedWorkspace,\n hasUnsavedChanges\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n if (workspaceTitleByWorkspaceName[workspaceName] !== title) {\n setWorkspaceTitle(workspaceName, title);\n }\n }, [\n openedWorkspace,\n title\n ]);\n if (openedWindowIndex < 0 || openedGroup == null || openedWorkspace == null) {\n // workspace window / group has likely just closed\n return null;\n }\n var group = registeredGroupsByName[openedGroup.groupName];\n if (!group) {\n throw new Error(\"Cannot find registered workspace group \".concat(openedGroup.groupName));\n }\n var workspaceDef = registeredWorkspacesByName[workspaceName];\n var windowName = workspaceDef.window;\n var windowDef = registeredWindowsByName[windowName];\n if (!windowDef) {\n throw new Error(\"Cannot find registered workspace window \".concat(windowName));\n }\n var icon = windowDef.icon, canMaximize = windowDef.canMaximize;\n var canCloseGroup = group.persistence === 'closable';\n var canHide = !!icon && !canCloseGroup;\n var maximized = openedWindow.maximized;\n var _windowDef_width;\n var width = (_windowDef_width = windowDef === null || windowDef === void 0 ? void 0 : windowDef.width) !== null && _windowDef_width !== void 0 ? _windowDef_width : 'narrow';\n var isActionMenuOpened = Object.values(registeredWindowsByName).some(function(window) {\n return window.group === openedGroup.groupName && window.icon !== undefined;\n });\n var isWindowHidden = openedWindowIndex < openedWindows.length - 1 || isMostRecentlyOpenedWindowHidden;\n var _obj, _obj1, _obj2;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].workspaceOuterContainer, (_obj = {}, _define_property(_obj, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].narrowWorkspace, width === 'narrow'), _define_property(_obj, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].widerWorkspace, width === 'wider'), _define_property(_obj, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].extraWideWorkspace, width === 'extra-wide'), _define_property(_obj, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isActionMenuOpened, isActionMenuOpened), _obj))\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].workspaceSpacer, _define_property({}, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].hidden, isWindowHidden))\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].workspaceMiddleContainer, (_obj1 = {}, _define_property(_obj1, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].maximized, maximized), _define_property(_obj1, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].hidden, isWindowHidden), _define_property(_obj1, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isRootWorkspace, isRootWorkspace), _obj1))\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].workspaceInnerContainer, (_obj2 = {}, _define_property(_obj2, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].maximized, maximized), _define_property(_obj2, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].hidden, isWindowHidden), _define_property(_obj2, _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isRootWorkspace, isRootWorkspace), _obj2))\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.Header, {\n \"aria-label\": (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('workspaceHeader'),\n className: _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].header\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderName, {\n prefix: \"\"\n }, title), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].overlayHeaderSpacer\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderGlobalBar, {\n className: _workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].headerButtons\n }, (0,_openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_3__.isDesktop)(layout) ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, (canMaximize || maximized) && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderGlobalAction, {\n \"aria-label\": maximized ? (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('minimize') : (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('maximize'),\n onClick: function() {\n return setWindowMaximized(windowName, !maximized);\n }\n }, maximized ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react_icons__WEBPACK_IMPORTED_MODULE_9__.Minimize, null) : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react_icons__WEBPACK_IMPORTED_MODULE_9__.Maximize, null)), canHide ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderGlobalAction, {\n \"aria-label\": (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('hide'),\n onClick: function() {\n return hideWindow();\n }\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons__WEBPACK_IMPORTED_MODULE_6__.ArrowRightIcon, null)) : !canCloseGroup && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderGlobalAction, {\n \"aria-label\": (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('close'),\n onClick: function() {\n return closeWorkspace({\n closeWindow: true\n });\n }\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons__WEBPACK_IMPORTED_MODULE_6__.CloseIcon, null))) : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, canHide && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderGlobalAction, {\n \"aria-label\": (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('hide'),\n onClick: function() {\n return hideWindow();\n }\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react_icons__WEBPACK_IMPORTED_MODULE_10__.DownToBottom, null)), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_carbon_react__WEBPACK_IMPORTED_MODULE_2__.HeaderGlobalAction, {\n \"aria-label\": (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('close'),\n onClick: function() {\n return closeWorkspace({\n closeWindow: true\n });\n }\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons__WEBPACK_IMPORTED_MODULE_6__.CloseIcon, null))))), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_workspace2_module_scss__WEBPACK_IMPORTED_MODULE_8__[\"default\"].workspaceContent)\n }, children)))));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1zdHlsZWd1aWRlL3NyYy93b3Jrc3BhY2VzMi93b3Jrc3BhY2UyLmNvbXBvbmVudC50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF5RDtBQUNyQjtBQUNvRDtBQUNqQjtBQUNIO0FBQ0w7QUFDVztBQUNyQjtBQUNtQjtBQUMxQjtBQWtEOUM7Ozs7OztDQU1DLEdBQ00sSUFBTW1CLGFBQXdDO1FBQUdDLGNBQUFBLE9BQU9DLGlCQUFBQSwyQ0FBVUMsbUJBQUFBLDBEQUFvQjtJQUMzRixJQUFNQyxTQUFTWix1RUFBYUE7SUFDNUIsSUFZSUssc0JBQUFBLCtEQUFrQkEsSUFYcEJRLHFCQVdFUixvQkFYRlEsb0JBQ0FDLGFBVUVULG9CQVZGUyxZQUNBQyx1QkFTRVYsb0JBVEZVLHNCQUNBQyxnQkFRRVgsb0JBUkZXLGVBQ0FDLGNBT0VaLG9CQVBGWSxhQUNBQyx5QkFNRWIsb0JBTkZhLHdCQUNBQywwQkFLRWQsb0JBTEZjLHlCQUNBQyw2QkFJRWYsb0JBSkZlLDRCQUNBQyxnQ0FHRWhCLG9CQUhGZ0IsK0JBQ0FDLG9CQUVFakIsb0JBRkZpQixtQkFDQUMsbUNBQ0VsQixvQkFERmtCO0lBRUYsSUFBMkRqQix3QkFBQUEsaUVBQW9CQSxJQUF2RWtCLGdCQUFtRGxCLHNCQUFuRGtCLGVBQWVDLGtCQUFvQ25CLHNCQUFwQ21CLGlCQUFpQkMsaUJBQW1CcEIsc0JBQW5Cb0I7SUFFeEMsSUFBTUMsb0JBQW9CekIsd0ZBQStCQSxDQUFDc0I7SUFFMUQsSUFBTUksZUFBZVosYUFBYSxDQUFDVyxrQkFBa0I7SUFDckQsSUFBTUUsa0JBQWtCRCx5QkFBQUEsbUNBQUFBLGFBQWNFLGdCQUFnQixDQUFDQyxJQUFJLENBQUMsU0FBQ0M7ZUFBY0EsVUFBVVIsYUFBYSxLQUFLQTs7SUFFdkdsQyxnREFBU0EsQ0FBQztRQUNSLElBQUl1QyxDQUFBQSw0QkFBQUEsc0NBQUFBLGdCQUFpQmxCLGlCQUFpQixLQUFJ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QUFTQSwyQkFNcEIsMkRBQUNrRDtRQUFJQyxXQUFXaEUsaURBQVVBLENBQUNnQiwrREFBTUEsQ0FBQ2dFLGdCQUFnQjtPQUFJN0Q7QUFNbEUsRUFBRSIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1zdHlsZWd1aWRlL3NyYy93b3Jrc3BhY2VzMi93b3Jrc3BhY2UyLmNvbXBvbmVudC50c3g/MzdmMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB0eXBlIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgSGVhZGVyLCBIZWFkZXJHbG9iYWxBY3Rpb24sIEhlYWRlckdsb2JhbEJhciwgSGVhZGVyTmFtZSB9IGZyb20gJ0BjYXJib24vcmVhY3QnO1xuaW1wb3J0IHsgRG93blRvQm90dG9tLCBNYXhpbWl6ZSwgTWluaW1pemUgfSBmcm9tICdAY2FyYm9uL3JlYWN0L2ljb25zJztcbmltcG9ydCB7IGlzRGVza3RvcCwgdXNlTGF5b3V0VHlwZSB9IGZyb20gJ0BvcGVubXJzL2VzbS1yZWFjdC11dGlscyc7XG5pbXBvcnQgeyBnZXRDb3JlVHJhbnNsYXRpb24gfSBmcm9tICdAb3Blbm1ycy9lc20tdHJhbnNsYXRpb25zJztcbmltcG9ydCB7IGdldE9wZW5lZFdpbmRvd0luZGV4QnlXb3Jrc3BhY2UgfSBmcm9tICdAb3Blbm1ycy9lc20tZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBBcnJvd1JpZ2h0SWNvbiwgQ2xvc2VJY29uIH0gZnJvbSAnLi4vaWNvbnMnO1xuaW1wb3J0IHsgdXNlV29ya3NwYWNlMlN0b3JlLCB1c2VXb3Jrc3BhY2UyQ29udGV4dCB9IGZyb20gJy4vd29ya3NwYWNlMic7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vd29ya3NwYWNlMi5tb2R1bGUuc2Nzcyc7XG5cbmludGVyZmFjZSBXb3Jrc3BhY2UyUHJvcHMge1xuICB0aXRsZTogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBoYXNVbnNhdmVkQ2hhbmdlcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZTJEZWZpbml0aW9uUHJvcHM8XG4gIFdvcmtzcGFjZVByb3BzIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0LFxuICBXaW5kb3dQcm9wcyBleHRlbmRzIG9iamVjdCA9IG9iamVjdCxcbiAgR3JvdXBQcm9wcyBleHRlbmRzIG9iamVjdCA9IG9iamVjdCxcbj4ge1xuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBsYXVuY2hlcyBhIGNoaWxkIHdvcmtzcGFjZS4gVW5saWtlIGBsYXVuY2hXb3Jrc3BhY2UoKWAsIHRoaXMgZnVuY3Rpb24gaXMgbWVhbnRcbiAgICogdG8gYmUgY2FsbGVkIGZyb20gdGhlIGEgd29ya3NwYWNlLCBhbmQgaXQgZG9lcyBub3QgYWxsb3cgcGFzc2luZyAob3IgY2hhbmdpbmcpXG4gICAqIHRoZSB3aW5kb3cgcHJvcHMgb3IgZ3JvdXAgcHJvcHNcbiAgICogQHBhcmFtIHdvcmtzcGFjZU5hbWVcbiAgICogQHBhcmFtIHdvcmtzcGFjZVByb3BzXG4gICAqL1xuICBsYXVuY2hDaGlsZFdvcmtzcGFjZTxQcm9wcyBleHRlbmRzIG9iamVjdD4od29ya3NwYWNlTmFtZTogc3RyaW5nLCB3b3Jrc3BhY2VQcm9wcz86IFByb3BzKTogdm9pZDtcblxuICAvKipcbiAgICogY2xvc2VzIHRoZSBjdXJyZW50IHdvcmtzcGFjZSwgYWxvbmcgd2l0aCBpdHMgY2hpbGRyZW4uXG4gICAqIEBwYXJhbSBjbG9zZVdpbmRvdyBJZiB0cnVlLCB0aGUgd29ya3NwYWNlJ3Mgd2luZG93LCBhbG9uZyB3aXRoIGFsbCB3b3Jrc3BhY2VzIHdpdGhpbiBpdCwgd2lsbCBiZSBjbG9zZWQgYXMgd2VsbFxuICAgKiBAcGFyYW0gZGlzY2FyZFVuc2F2ZWRDaGFuZ2VzIElmIHRydWUsIHRoZSBcInVuc2F2ZWQgY2hhbmdlc1wiIG1vZGFsIHdpbGwgYmUgc3VwcmVzc2VkLCBhbmQgdGhlIHZhbHVlIG9mIGBoYXNVbnNhdmVkQ2hhbmdlc2Agd2lsbCBiZSBpZ25vcmVkLiBVc2UgdGhpcyB3aGVuIGNsb3NpbmcgdGhlIHdvcmtzcGFjZSBpbW1lZGlhdGVseSBhZnRlciBjaGFuZ2VzIGFyZSBzYXZlZC5cbiAgICogQHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgd29ya3NwYWNlIGlzIGNsb3NlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgY2xvc2VXb3Jrc3BhY2Uob3B0aW9ucz86IHsgY2xvc2VXaW5kb3c/OiBib29sZWFuOyBkaXNjYXJkVW5zYXZlZENoYW5nZXM/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIHdvcmtzcGFjZVByb3BzOiBXb3Jrc3BhY2VQcm9wcyB8IG51bGw7XG4gIHdpbmRvd1Byb3BzOiBXaW5kb3dQcm9wcyB8IG51bGw7XG4gIGdyb3VwUHJvcHM6IEdyb3VwUHJvcHMgfCBudWxsO1xuICB3b3Jrc3BhY2VOYW1lOiBzdHJpbmc7XG4gIHdpbmRvd05hbWU6IHN0cmluZztcbiAgaXNSb290V29ya3NwYWNlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IHR5cGUgV29ya3NwYWNlMkRlZmluaXRpb248XG4gIFdvcmtzcGFjZVByb3BzIGV4dGVuZHMgb2JqZWN0LFxuICBXaW5kb3dQcm9wcyBleHRlbmRzIG9iamVjdCxcbiAgR3JvdXBQcm9wcyBleHRlbmRzIG9iamVjdCxcbj4gPSBSZWFjdC5GQzxXb3Jrc3BhY2UyRGVmaW5pdGlvblByb3BzPFdvcmtzcGFjZVByb3BzLCBXaW5kb3dQcm9wcywgR3JvdXBQcm9wcz4+O1xuXG4vKipcbiAqIFRoZSBXb3Jrc3BhY2UyIGNvbXBvbmVudCBpcyB1c2VkIGFzIGEgdG9wLWxldmVsIGNvbnRhaW5lciB0byByZW5kZXJcbiAqIGl0cyBjaGlsZHJlbiBhcyBjb250ZW50IHdpdGhpbiBhIHdvcmtzcGFjZS4gV2hlbiBjcmVhdGluZyBhIHdvcmtzcGFjZVxuICogY29tcG9uZW50LCBgPFdvcmtzcGFjZTI+YCBzaG91bGQgYmUgdGhlIHRvcC1sZXZlbCBjb21wb25lbnQgcmV0dXJuZWQsXG4gKiB3cmFwcGluZyBhbGwgb2YgdGhlIHdvcmtzcGFjZSBjb250ZW50LlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY29uc3QgV29ya3NwYWNlMjogUmVhY3QuRkM8V29ya3NwYWNlMlByb3BzPiA9ICh7IHRpdGxlLCBjaGlsZHJlbiwgaGFzVW5zYXZlZENoYW5nZXMgPSBmYWxzZSB9KSA9PiB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dFR5cGUoKTtcbiAgY29uc3Qge1xuICAgIHNldFdpbmRvd01heGltaXplZCxcbiAgICBoaWRlV2luZG93LFxuICAgIHNldEhhc1Vuc2F2ZWRDaGFuZ2VzLFxuICAgIG9wZW5lZFdpbmRvd3MsXG4gICAgb3BlbmVkR3JvdXAsXG4gICAgcmVnaXN0ZXJlZEdyb3Vwc0J5TmFtZSxcbiAgICByZWdpc3RlcmVkV2luZG93c0J5TmFtZSxcbiAgICByZWdpc3RlcmVkV29ya3NwYWNlc0J5TmFtZSxcbiAgICB3b3Jrc3BhY2VUaXRsZUJ5V29ya3NwYWNlTmFtZSxcbiAgICBzZXRXb3Jrc3BhY2VUaXRsZSxcbiAgICBpc01vc3RSZWNlbnRseU9wZW5lZFdpbmRvd0hpZGRlbixcbiAgfSA9IHVzZVdvcmtzcGFjZTJTdG9yZSgpO1xuICBjb25zdCB7IHdvcmtzcGFjZU5hbWUsIGlzUm9vdFdvcmtzcGFjZSwgY2xvc2VXb3Jrc3BhY2UgfSA9IHVzZVdvcmtzcGFjZTJDb250ZXh0KCk7XG5cbiAgY29uc3Qgb3BlbmVkV2luZG93SW5kZXggPSBnZXRPcGVuZWRXaW5kb3dJbmRleEJ5V29ya3NwYWNlKHdvcmtzcGFjZU5hbWUpO1xuXG4gIGNvbnN0IG9wZW5lZFdpbmRvdyA9IG9wZW5lZFdpbmRvd3Nbb3BlbmVkV2luZG93SW5kZXhdO1xuICBjb25zdCBvcGVuZWRXb3Jrc3BhY2UgPSBvcGVuZWRXaW5kb3c/Lm9wZW5lZFdvcmtzcGFjZXMuZmluZCgod29ya3NwYWNlKSA9PiB3b3Jrc3BhY2Uud29ya3NwYWNlTmFtZSA9PT0gd29ya3NwYWNlTmFtZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BlbmVkV29ya3NwYWNlPy5oYXNVbnNhdmVkQ2hhbmdlcyAhPSBoYXNVbnNhdmVkQ2hhbmdlcykge1xuICAgICAgc2V0SGFzVW5zYXZlZENoYW5nZXMod29ya3NwYWNlTmFtZSwgaGFzVW5zYXZlZENoYW5nZXMgPz8gZmFsc2UpO1xuICAgIH1cbiAgfSwgW29wZW5lZFdvcmtzcGFjZSwgaGFzVW5zYXZlZENoYW5nZXNdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3b3Jrc3BhY2VUaXRsZUJ5V29ya3NwYWNlTmFtZVt3b3Jrc3BhY2VOYW1lXSAhPT0gdGl0bGUpIHtcbiAgICAgIHNldFdvcmtzcGFjZVRpdGxlKHdvcmtzcGFjZU5hbWUsIHRpdGxlKTtcbiAgICB9XG4gIH0sIFtvcGVuZWRXb3Jrc3BhY2UsIHRpdGxlXSk7XG5cbiAgaWYgKG9wZW5lZFdpbmRvd0luZGV4IDwgMCB8fCBvcGVuZWRHcm91cCA9PSBudWxsIHx8IG9wZW5lZFdvcmtzcGFjZSA9PSBudWxsKSB7XG4gICAgLy8gd29ya3NwYWNlIHdpbmRvdyAvIGdyb3VwIGhhcyBsaWtlbHkganVzdCBjbG9zZWRcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGdyb3VwID0gcmVnaXN0ZXJlZEdyb3Vwc0J5TmFtZVtvcGVuZWRHcm91cC5ncm91cE5hbWVdO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCByZWdpc3RlcmVkIHdvcmtzcGFjZSBncm91cCAke29wZW5lZEdyb3VwLmdyb3VwTmFtZX1gKTtcbiAgfVxuICBjb25zdCB3b3Jrc3BhY2VEZWYgPSByZWdpc3RlcmVkV29ya3NwYWNlc0J5TmFtZVt3b3Jrc3BhY2VOYW1lXTtcbiAgY29uc3Qgd2luZG93TmFtZSA9IHdvcmtzcGFjZURlZi53aW5kb3c7XG4gIGNvbnN0IHdpbmRvd0RlZiA9IHJlZ2lzdGVyZWRXaW5kb3dzQnlOYW1lW3dpbmRvd05hbWVdO1xuICBpZiAoIXdpbmRvd0RlZikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcmVnaXN0ZXJlZCB3b3Jrc3BhY2Ugd2luZG93ICR7d2luZG93TmFtZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHsgaWNvbiwgY2FuTWF4aW1pemUgfSA9IHdpbmRvd0RlZjtcbiAgY29uc3QgY2FuQ2xvc2VHcm91cCA9IGdyb3VwLnBlcnNpc3RlbmNlID09PSAnY2xvc2FibGUnO1xuICBjb25zdCBjYW5IaWRlID0gISFpY29uICYmICFjYW5DbG9zZUdyb3VwO1xuICBjb25zdCB7IG1heGltaXplZCB9ID0gb3BlbmVkV2luZG93O1xuICBjb25zdCB3aWR0aCA9IHdpbmRvd0RlZj8ud2lkdGggPz8gJ25hcnJvdyc7XG5cbiAgY29uc3QgaXNBY3Rpb25NZW51T3BlbmVkID0gT2JqZWN0LnZhbHVlcyhyZWdpc3RlcmVkV2luZG93c0J5TmFtZSkuc29tZShcbiAgICAod2luZG93KSA9PiB3aW5kb3cuZ3JvdXAgPT09IG9wZW5lZEdyb3VwLmdyb3VwTmFtZSAmJiB3aW5kb3cuaWNvbiAhPT0gdW5kZWZpbmVkLFxuICApO1xuXG4gIGNvbnN0IGlzV2luZG93SGlkZGVuID0gb3BlbmVkV2luZG93SW5kZXggPCBvcGVuZWRXaW5kb3dzLmxlbmd0aCAtIDEgfHwgaXNNb3N0UmVjZW50bHlPcGVuZWRXaW5kb3dIaWRkZW47XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLndvcmtzcGFjZU91dGVyQ29udGFpbmVyLCB7XG4gICAgICAgIFtzdHlsZXMubmFycm93V29ya3NwYWNlXTogd2lkdGggPT09ICduYXJyb3cnLFxuICAgICAgICBbc3R5bGVzLndpZGVyV29ya3NwYWNlXTogd2lkdGggPT09ICd3aWRlcicsXG4gICAgICAgIFtzdHlsZXMuZXh0cmFXaWRlV29ya3NwYWNlXTogd2lkdGggPT09ICdleHRyYS13aWRlJyxcbiAgICAgICAgW3N0eWxlcy5pc0FjdGlvbk1lbnVPcGVuZWRdOiBpc0FjdGlvbk1lbnVPcGVuZWQsXG4gICAgICB9KX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMud29ya3NwYWNlU3BhY2VyLCB7XG4gICAgICAgICAgW3N0eWxlcy5oaWRkZW5dOiBpc1dpbmRvd0hpZGRlbixcbiAgICAgICAgfSl9XG4gICAgICAvPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLndvcmtzcGFjZU1pZGRsZUNvbnRhaW5lciwge1xuICAgICAgICAgIFtzdHlsZXMubWF4aW1pemVkXTogbWF4aW1pemVkLFxuICAgICAgICAgIFtzdHlsZXMuaGlkZGVuXTogaXNXaW5kb3dIaWRkZW4sXG4gICAgICAgICAgW3N0eWxlcy5pc1Jvb3RXb3Jrc3BhY2VdOiBpc1Jvb3RXb3Jrc3BhY2UsXG4gICAgICAgIH0pfVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy53b3Jrc3BhY2VJbm5lckNvbnRhaW5lciwge1xuICAgICAgICAgICAgW3N0eWxlcy5tYXhpbWl6ZWRdOiBtYXhpbWl6ZWQsXG4gICAgICAgICAgICBbc3R5bGVzLmhpZGRlbl06IGlzV2luZG93SGlkZGVuLFxuICAgICAgICAgICAgW3N0eWxlcy5pc1Jvb3RXb3Jrc3BhY2VdOiBpc1Jvb3RXb3Jrc3BhY2UsXG4gICAgICAgICAgfSl9XG4gICAgICAgID5cbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPEhlYWRlciBhcmlhLWxhYmVsPXtnZXRDb3JlVHJhbnNsYXRpb24oJ3dvcmtzcGFjZUhlYWRlcicpfSBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PlxuICAgICAgICAgICAgICA8SGVhZGVyTmFtZSBwcmVmaXg9XCJcIj57dGl0bGV9PC9IZWFkZXJOYW1lPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXlIZWFkZXJTcGFjZXJ9IC8+XG4gICAgICAgICAgICAgIDxIZWFkZXJHbG9iYWxCYXIgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyQnV0dG9uc30+XG4gICAgICAgICAgICAgICAge2lzRGVza3RvcChsYXlvdXQpID8gKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgeyhjYW5NYXhpbWl6ZSB8fCBtYXhpbWl6ZWQpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8SGVhZGVyR2xvYmFsQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXttYXhpbWl6ZWQgPyBnZXRDb3JlVHJhbnNsYXRpb24oJ21pbmltaXplJykgOiBnZXRDb3JlVHJhbnNsYXRpb24oJ21heGltaXplJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRXaW5kb3dNYXhpbWl6ZWQod2luZG93TmFtZSwgIW1heGltaXplZCl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge21heGltaXplZCA/IDxNaW5pbWl6ZSAvPiA6IDxNYXhpbWl6ZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICA8L0hlYWRlckdsb2JhbEFjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAge2NhbkhpZGUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPEhlYWRlckdsb2JhbEFjdGlvbiBhcmlhLWxhYmVsPXtnZXRDb3JlVHJhbnNsYXRpb24oJ2hpZGUnKX0gb25DbGljaz17KCkgPT4gaGlkZVdpbmRvdygpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJvd1JpZ2h0SWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvSGVhZGVyR2xvYmFsQWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICFjYW5DbG9zZUdyb3VwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxIZWFkZXJHbG9iYWxBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Z2V0Q29yZVRyYW5zbGF0aW9uKCdjbG9zZScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbG9zZVdvcmtzcGFjZSh7IGNsb3NlV2luZG93OiB0cnVlIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0hlYWRlckdsb2JhbEFjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2NhbkhpZGUgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxIZWFkZXJHbG9iYWxBY3Rpb24gYXJpYS1sYWJlbD17Z2V0Q29yZVRyYW5zbGF0aW9uKCdoaWRlJyl9IG9uQ2xpY2s9eygpID0+IGhpZGVXaW5kb3coKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RG93blRvQm90dG9tIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9IZWFkZXJHbG9iYWxBY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICAgICAgPEhlYWRlckdsb2JhbEFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2dldENvcmVUcmFuc2xhdGlvbignY2xvc2UnKX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbG9zZVdvcmtzcGFjZSh7IGNsb3NlV2luZG93OiB0cnVlIH0pfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICA8L0hlYWRlckdsb2JhbEFjdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvSGVhZGVyR2xvYmFsQmFyPlxuICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMud29ya3NwYWNlQ29udGVudCl9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VFZmZlY3QiLCJjbGFzc05hbWVzIiwiSGVhZGVyIiwiSGVhZGVyR2xvYmFsQWN0aW9uIiwiSGVhZGVyR2xvYmFsQmFyIiwiSGVhZGVyTmFtZSIsIkRvd25Ub0JvdHRvbSIsIk1heGltaXplIiwiTWluaW1pemUiLCJpc0Rlc2t0b3AiLCJ1c2VMYXlvdXRUeXBlIiwiZ2V0Q29yZVRyYW5zbGF0aW9uIiwiZ2V0T3BlbmVkV2luZG93SW5kZXhCeVdvcmtzcGFjZSIsIkFycm93UmlnaHRJY29uIiwiQ2xvc2VJY29uIiwidXNlV29ya3NwYWNlMlN0b3JlIiwidXNlV29ya3NwYWNlMkNvbnRleHQiLCJzdHlsZXMiLCJXb3Jrc3BhY2UyIiwidGl0bGUiLCJjaGlsZHJlbiIsImhhc1Vuc2F2ZWRDaGFuZ2VzIiwibGF5b3V0Iiwic2V0V2luZG93TWF4aW1pemVkIiwiaGlkZVdpbmRvdyIsInNldEhhc1Vuc2F2ZWRDaGFuZ2VzIiwib3BlbmVkV2luZG93cyIsIm9wZW5lZEdyb3VwIiwicmVnaXN0ZXJlZEdyb3Vwc0J5TmFtZSIsInJlZ2lzdGVyZWRXaW5kb3dzQnlOYW1lIiwicmVnaXN0ZXJlZFdvcmtzcGFjZXNCeU5hbWUiLCJ3b3Jrc3BhY2VUaXRsZUJ5V29ya3NwYWNlTmFtZSIsInNldFdvcmtzcGFjZVRpdGxlIiwiaXNNb3N0UmVjZW50bHlPcGVuZWRXaW5kb3dIaWRkZW4iLCJ3b3Jrc3BhY2VOYW1lIiwiaXNSb290V29ya3NwYWNlIiwiY2xvc2VXb3Jrc3BhY2UiLCJvcGVuZWRXaW5kb3dJbmRleCIsIm9wZW5lZFdpbmRvdyIsIm9wZW5lZFdvcmtzcGFjZSIsIm9wZW5lZFdvcmtzcGFjZXMiLCJmaW5kIiwid29ya3NwYWNlIiwiZ3JvdXAiLCJncm91cE5hbWUiLCJFcnJvciIsIndvcmtzcGFjZURlZiIsIndpbmRvd05hbWUiLCJ3aW5kb3ciLCJ3aW5kb3dEZWYiLCJpY29uIiwiY2FuTWF4aW1pemUiLCJjYW5DbG9zZUdyb3VwIiwicGVyc2lzdGVuY2UiLCJjYW5IaWRlIiwibWF4aW1pemVkIiwid2lkdGgiLCJpc0FjdGlvbk1lbnVPcGVuZWQiLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb21lIiwidW5kZWZpbmVkIiwiaXNXaW5kb3dIaWRkZW4iLCJsZW5ndGgiLCJkaXYiLCJjbGFzc05hbWUiLCJ3b3Jrc3BhY2VPdXRlckNvbnRhaW5lciIsIm5hcnJvd1dvcmtzcGFjZSIsIndpZGVyV29ya3NwYWNlIiwiZXh0cmFXaWRlV29ya3NwYWNlIiwid29ya3NwYWNlU3BhY2VyIiwiaGlkZGVuIiwid29ya3NwYWNlTWlkZGxlQ29udGFpbmVyIiwid29ya3NwYWNlSW5uZXJDb250YWluZXIiLCJhcmlhLWxhYmVsIiwiaGVhZGVyIiwicHJlZml4Iiwib3ZlcmxheUhlYWRlclNwYWNlciIsImhlYWRlckJ1dHRvbnMiLCJvbkNsaWNrIiwiY2xvc2VXaW5kb3ciLCJ3b3Jrc3BhY2VDb250ZW50Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-styleguide/src/workspaces2/workspace2.component.tsx\n");
1249
1249
 
1250
1250
  /***/ }),
1251
1251
 
@@ -1265,7 +1265,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1265
1265
  \********************************************************************/
1266
1266
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1267
1267
 
1268
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ closeWorkspaceGroup2: () => (/* binding */ closeWorkspaceGroup2),\n/* harmony export */ getRegisteredWorkspace2Names: () => (/* binding */ getRegisteredWorkspace2Names),\n/* harmony export */ launchWorkspace2: () => (/* binding */ launchWorkspace2),\n/* harmony export */ launchWorkspaceGroup2: () => (/* binding */ launchWorkspaceGroup2),\n/* harmony export */ promptForClosingWorkspaces: () => (/* binding */ promptForClosingWorkspaces),\n/* harmony export */ useWorkspace2Context: () => (/* binding */ useWorkspace2Context),\n/* harmony export */ useWorkspace2Store: () => (/* binding */ useWorkspace2Store)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var single_spa_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! single-spa-react */ \"../../../node_modules/single-spa-react/lib/esm/single-spa-react.js\");\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! uuid */ \"../../../node_modules/uuid/dist/esm-browser/v4.js\");\n/* harmony import */ var _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @openmrs/esm-extensions */ \"../../framework/esm-extensions/dist/index.js\");\n/* harmony import */ var _openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @openmrs/esm-react-utils */ \"../../framework/esm-react-utils/dist/index.js\");\n/* harmony import */ var _openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @openmrs/esm-utils */ \"../../framework/esm-utils/dist/shallowEqual.js\");\n/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../modals */ \"../../framework/esm-styleguide/src/modals/index.tsx\");\nfunction _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_without_holes(arr) {\n if (Array.isArray(arr)) return _array_like_to_array(arr);\n}\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _non_iterable_spread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _object_spread_props(target, source) {\n source = source != null ? source : {};\n if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _to_consumable_array(arr) {\n return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n }, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(g && (g = 0, op[0] && (_ = 0)), _)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\n\n\n\n\n\n\n/**\n * Attempts to launch the specified workspace group with the given group props. Note that only one workspace group\n * may be opened at any given time. If a workspace group is already opened, calling `launchWorkspaceGroup2` with\n * either a different group name, or same group name but different incompatible props**, will result in prompting to\n * confirm closing workspaces. If the user confirms, the opened group, along with its windows (and their workspaces), is closed, and\n * the requested group is immediately opened.\n *\n * ** 2 sets of props are compatible if either one is nullish, or if they are shallow equal.\n * @experimental\n * @param groupName\n * @param groupProps\n * @returns a Promise that resolves to true if the specified workspace group with the specified group props\n * is successfully opened, or that it already is opened.\n */ function launchWorkspaceGroup2(groupName, groupProps) {\n return _async_to_generator(function() {\n var openedGroup, okToCloseWorkspaces;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n openedGroup = _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.getState().openedGroup;\n if (!openedGroup) return [\n 3,\n 3\n ];\n if (!(openedGroup.groupName !== groupName || !arePropsCompatible(openedGroup.props, groupProps))) return [\n 3,\n 2\n ];\n return [\n 4,\n promptForClosingWorkspaces({\n reason: 'CLOSE_WORKSPACE_GROUP',\n explicit: false\n })\n ];\n case 1:\n okToCloseWorkspaces = _state.sent();\n if (!okToCloseWorkspaces) {\n return [\n 2,\n false\n ];\n }\n return [\n 3,\n 3\n ];\n case 2:\n // no-op, group with group props is already opened\n return [\n 2,\n true\n ];\n case 3:\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n openedGroup: {\n groupName: groupName,\n props: groupProps\n },\n openedWindows: []\n });\n });\n return [\n 2,\n true\n ];\n }\n });\n })();\n}\n/**\n * Closes the workspace group that is currently opened. Note that only one workspace group\n * may be opened at any given time\n * @experimental\n * @param discardUnsavedChanges If true, then the workspace group is forced closed, with no prompt\n * for confirmation for unsaved changes in any opened workspace. This should be used sparingly\n * for clean-up purpose, ex: when exiting an app.\n * @returns a Promise that resolves to true if there is no opened group to begin with or we successfully closed\n * the opened group; false otherwise.\n */ function closeWorkspaceGroup2(discardUnsavedChanges) {\n return _async_to_generator(function() {\n var state, openedGroup, openedWindows, okToCloseWorkspaces, _tmp;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n state = _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.getState();\n openedGroup = state.openedGroup, openedWindows = state.openedWindows;\n if (!openedGroup) return [\n 3,\n 4\n ];\n if (!(openedWindows.length > 0)) return [\n 3,\n 3\n ];\n _tmp = discardUnsavedChanges;\n if (_tmp) return [\n 3,\n 2\n ];\n return [\n 4,\n promptForClosingWorkspaces({\n reason: 'CLOSE_WORKSPACE_GROUP',\n explicit: true\n })\n ];\n case 1:\n _tmp = _state.sent();\n _state.label = 2;\n case 2:\n okToCloseWorkspaces = _tmp;\n if (!okToCloseWorkspaces) {\n return [\n 2,\n false\n ];\n }\n _state.label = 3;\n case 3:\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n openedGroup: null,\n openedWindows: []\n });\n });\n return [\n 2,\n true\n ];\n case 4:\n // no openedGroup with begin with, return true\n return [\n 2,\n true\n ];\n }\n });\n })();\n}\n/**\n * Attempts to launch the specified workspace with the given workspace props. This also implicitly opens\n * the workspace window to which the workspace belongs (if it's not opened already),\n * and the workspace group to which the window belongs (if it's not opened already).\n *\n * When calling `launchWorkspace2`, we need to also pass in the workspace props. While not required,\n * we can also pass in the window props (shared by other workspaces in the window) and the group props\n * (shared by all windows and their workspaces). Omitting the window props or the group props[^1] means the caller\n * explicitly does not care what the current window props and group props are, and that they may be set\n * by other actions (like calling `launchWorkspace2` on a different workspace with those props passed in)\n * at a later time.\n *\n * If there is already an opened workspace group, and it's not the group the workspace belongs to\n * or has incompatible[^2] group props, then we prompt the user to close the group (and its windows and their workspaces).\n * On user confirm, the existing opened group is closed and the new workspace, along with its window and its group,\n * is opened.\n *\n * If the window is already opened, but with incompatible window props, we prompt the user to close\n * the window (and all its opened workspaces), and reopen the window with (only) the newly requested workspace.\n *\n * If the workspace is already opened, but with incompatible workspace props, we also prompt the user to close\n * the **window** (and all its opened workspaces), and reopen the window with (only) the newly requested workspace.\n * This is true regardless of whether the already opened workspace has any child workspaces.\n *\n * Note that calling this function *never* results in creating a child workspace in the affected window.\n * To do so, we need to call `launchChildWorkspace` instead.\n *\n * [^1] Omitting window or group props is useful for workspaces that don't have ties to the window or group \"context\" (props).\n * For example, in the patient chart, the visit notes / clinical forms / order basket action menu button all share\n * a \"group context\" of the current visit. However, the \"patient list\" action menu button does not need to share that group\n * context, so opening that workspace should not need to cause other workspaces / windows / groups to potentially close.\n * The \"patient search\" workspace in the queues and ward apps is another example.\n *\n * [^2] 2 sets of props are compatible if either one is nullish, or if they are shallow equal.\n * @experimental\n */ function launchWorkspace2(workspaceName) {\n var workspaceProps = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null, windowProps = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null, groupProps = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : null;\n return _async_to_generator(function() {\n var storeState, windowDef, openedGroup, windowName, groupDef, openedWindowIndex, isWindowAlreadyOpened, okToCloseWorkspaces, _storeState_openedGroup, openedWindow, _storeState_openedGroup_props, groupProps1, isMostRecentlyOpenedWindowHidden, openedWorkspaces, openedWorkspace, okToCloseWorkspaces1, _storeState_openedGroup1, _storeState_openedGroup_props1, _openedWindow_props, okToCloseWorkspaces2, _storeState_openedGroup2, _storeState_openedGroup3, _ref;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n storeState = _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.getState();\n if (!storeState.registeredWorkspacesByName[workspaceName]) {\n throw new Error(\"Unable to launch workspace \".concat(workspaceName, \". Workspace is not registered\"));\n }\n windowDef = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.getWindowByWorkspaceName)(workspaceName);\n if (!windowDef) {\n throw new Error(\"Unable to launch workspace \".concat(workspaceName, \". Workspace is not registered to a workspace window\"));\n }\n openedGroup = storeState.openedGroup;\n windowName = windowDef.name;\n groupDef = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.getGroupByWindowName)(windowName);\n if (!groupDef) {\n throw new Error(\"Unable to launch workspace \".concat(workspaceName, \". Workspace window \").concat(windowDef.name, \" is not registered to a workspace group\"));\n }\n openedWindowIndex = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.getOpenedWindowIndexByWorkspace)(workspaceName);\n isWindowAlreadyOpened = openedWindowIndex >= 0;\n if (!(openedGroup && (openedGroup.groupName !== groupDef.name || !arePropsCompatible(openedGroup.props, groupProps)))) return [\n 3,\n 2\n ];\n return [\n 4,\n promptForClosingWorkspaces({\n reason: 'CLOSE_WORKSPACE_GROUP',\n explicit: true\n })\n ];\n case 1:\n okToCloseWorkspaces = _state.sent();\n if (okToCloseWorkspaces) {\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(_object_spread_props(_object_spread({}, storeState), {\n openedGroup: {\n groupName: groupDef.name,\n props: groupProps\n },\n openedWindows: [\n // discard all opened windows, open a new one with the requested workspace\n // most recently opened action appended to the end\n {\n windowName: windowName,\n openedWorkspaces: [\n newOpenedWorkspace(workspaceName, workspaceProps)\n ],\n props: windowProps,\n maximized: false\n }\n ],\n isMostRecentlyOpenedWindowHidden: false\n }));\n return [\n 2,\n true\n ];\n } else {\n return [\n 2,\n false\n ];\n }\n // removed by dead control flow\n{}\n case 2:\n if (!isWindowAlreadyOpened) return [\n 3,\n 9\n ];\n openedWindow = storeState.openedWindows[openedWindowIndex];\n groupProps1 = (_storeState_openedGroup_props = (_storeState_openedGroup = storeState.openedGroup) === null || _storeState_openedGroup === void 0 ? void 0 : _storeState_openedGroup.props) !== null && _storeState_openedGroup_props !== void 0 ? _storeState_openedGroup_props : {};\n isMostRecentlyOpenedWindowHidden = storeState.isMostRecentlyOpenedWindowHidden;\n openedWorkspaces = openedWindow.openedWorkspaces;\n if (!arePropsCompatible(openedWindow.props, windowProps)) return [\n 3,\n 6\n ];\n // this case is tricky, this results in restoring the window if:\n // 1. the workspace is opened (but not necessarily as a leaf workspace)\n // 2. the props of the opened workspace is same as workspace props (from the function input)\n //\n // Otherwise, we close all workspaces in this window, and open this newly requested one\n openedWorkspace = openedWorkspaces.find(function(w) {\n return w.workspaceName === workspaceName;\n });\n if (!(openedWorkspace && arePropsCompatible(openedWorkspace.props, workspaceProps))) return [\n 3,\n 3\n ];\n // restore the window if it is hidden or not the most recently opened one\n if (isMostRecentlyOpenedWindowHidden || openedWindowIndex !== storeState.openedWindows.length - 1) {\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(workspace2StoreActions.restoreWindow(storeState, windowName));\n }\n return [\n 2,\n true\n ];\n case 3:\n return [\n 4,\n promptForClosingWorkspaces({\n reason: 'CLOSE_WORKSPACE',\n explicit: false,\n windowName: windowName,\n workspaceName: workspaceName\n })\n ];\n case 4:\n okToCloseWorkspaces1 = _state.sent();\n if (okToCloseWorkspaces1) {\n ;\n ;\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(_object_spread_props(_object_spread({}, storeState), {\n openedGroup: {\n groupName: groupDef.name,\n props: (_storeState_openedGroup_props1 = storeState === null || storeState === void 0 ? void 0 : (_storeState_openedGroup1 = storeState.openedGroup) === null || _storeState_openedGroup1 === void 0 ? void 0 : _storeState_openedGroup1.props) !== null && _storeState_openedGroup_props1 !== void 0 ? _storeState_openedGroup_props1 : groupProps1\n },\n openedWindows: _to_consumable_array(storeState.openedWindows.filter(function(_, i) {\n return i !== openedWindowIndex;\n })).concat([\n // most recently opened workspace at the end of the array\n {\n windowName: windowName,\n openedWorkspaces: [\n newOpenedWorkspace(workspaceName, workspaceProps)\n ],\n props: (_openedWindow_props = openedWindow === null || openedWindow === void 0 ? void 0 : openedWindow.props) !== null && _openedWindow_props !== void 0 ? _openedWindow_props : windowProps,\n maximized: false\n }\n ]),\n isMostRecentlyOpenedWindowHidden: false\n }));\n return [\n 2,\n true\n ];\n } else {\n return [\n 2,\n false\n ];\n }\n // removed by dead control flow\n{}\n case 5:\n return [\n 3,\n 8\n ];\n case 6:\n return [\n 4,\n promptForClosingWorkspaces({\n reason: 'CLOSE_WINDOW',\n explicit: false,\n windowName: windowName\n })\n ];\n case 7:\n okToCloseWorkspaces2 = _state.sent();\n if (okToCloseWorkspaces2) {\n ;\n // discard the openedWindows element at openedWindowIndex\n // and create a new one with the requested workspace opened\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(_object_spread_props(_object_spread({}, storeState), {\n openedGroup: {\n groupName: groupDef.name,\n props: groupProps1 !== null && groupProps1 !== void 0 ? groupProps1 : storeState === null || storeState === void 0 ? void 0 : (_storeState_openedGroup2 = storeState.openedGroup) === null || _storeState_openedGroup2 === void 0 ? void 0 : _storeState_openedGroup2.props\n },\n openedWindows: _to_consumable_array(storeState.openedWindows.filter(function(_, i) {\n return i !== openedWindowIndex;\n })).concat([\n // most recently opened workspace at the end of the array\n {\n windowName: windowName,\n openedWorkspaces: [\n newOpenedWorkspace(workspaceName, workspaceProps)\n ],\n props: windowProps,\n maximized: false\n }\n ]),\n isMostRecentlyOpenedWindowHidden: false\n }));\n return [\n 2,\n true\n ];\n } else {\n return [\n 2,\n false\n ];\n }\n // removed by dead control flow\n{}\n case 8:\n return [\n 3,\n 10\n ];\n case 9:\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(_object_spread_props(_object_spread({}, storeState), {\n openedGroup: {\n groupName: groupDef.name,\n props: (_ref = groupProps !== null && groupProps !== void 0 ? groupProps : storeState === null || storeState === void 0 ? void 0 : (_storeState_openedGroup3 = storeState.openedGroup) === null || _storeState_openedGroup3 === void 0 ? void 0 : _storeState_openedGroup3.props) !== null && _ref !== void 0 ? _ref : null\n },\n openedWindows: _to_consumable_array(storeState.openedWindows).concat([\n // most recently opened workspace at the end of the array\n {\n windowName: windowName,\n openedWorkspaces: [\n newOpenedWorkspace(workspaceName, workspaceProps)\n ],\n props: windowProps,\n maximized: false\n }\n ]),\n isMostRecentlyOpenedWindowHidden: false\n }));\n return [\n 2,\n true\n ];\n case 10:\n return [\n 2\n ];\n }\n });\n })();\n}\n/**\n * When we launch a workspace, we may pass in workspace / windows / group props. If the workspace or\n * window or group is currently opened, we have to check whether the current props are compatible with\n * the passed in props. 2 props A and B are compatible if:\n * either one is nullish (because this indicates that the caller does not care about prop incompatibility)\n * neither is nullish, and A and B are shallow equal.\n * @param a props\n * @param b props\n * @returns whether props a and b are compatible\n */ function arePropsCompatible(a, b) {\n if (a == null || b == null) {\n return true;\n }\n return (0,_openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_5__.shallowEqual)(a, b);\n}\n/**\n * A user can perform actions that explicitly result in closing workspaces\n * (such that clicking the 'X' button for the workspace or workspace group), or\n * implicitly (by opening a workspace with different props than the one that is already opened).\n * Calls to closeWorkspace2() or closeWorkspaceGroup2() are considered explicit, while calls\n * to launchWorkspace2() or launchWorkspaceGroup2() are considered implicit.\n *\n * This function prompts the user for confirmation to close workspaces with a modal dialog.\n * When the closing is explicit, it prompts for confirmation for affected workspaces with unsaved changes.\n * When the closing is implicit, it prompts for confirmation for all affected workspaces, regardless of\n * whether they have unsaved changes.\n * @experimental\n * @param promptReason\n * @returns a Promise that resolves to true if the user confirmed closing the workspaces; false otherwise.\n */ function promptForClosingWorkspaces(promptReason) {\n // if onlyUpToThisWorkspace is provided, we will only loop till we hit that workspace\n function getAffectedWorkspacesInWindow(openedWindow, onlyUpToThisWorkspace) {\n var ret = [];\n for(var i = openedWindow.openedWorkspaces.length - 1; i >= 0; i--){\n var openedWorkspace = openedWindow.openedWorkspaces[i];\n if (openedWorkspace.hasUnsavedChanges || !promptReason.explicit) {\n ret.push(openedWorkspace);\n }\n if (onlyUpToThisWorkspace && openedWorkspace.workspaceName === onlyUpToThisWorkspace) {\n break;\n }\n }\n return ret;\n }\n var _workspace2Store_getState = _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.getState(), openedWindows = _workspace2Store_getState.openedWindows, workspaceTitleByWorkspaceName = _workspace2Store_getState.workspaceTitleByWorkspaceName;\n var affectedWorkspaces = [];\n switch(promptReason.reason){\n case 'CLOSE_WORKSPACE_GROUP':\n {\n affectedWorkspaces = openedWindows.flatMap(function(window) {\n return getAffectedWorkspacesInWindow(window);\n });\n break;\n }\n case 'CLOSE_WINDOW':\n {\n var openedWindow = openedWindows.find(function(window) {\n return window.windowName === promptReason.windowName;\n });\n if (!openedWindow) {\n throw new Error(\"Window \".concat(promptReason.windowName, \" not found in opened windows.\"));\n }\n affectedWorkspaces = getAffectedWorkspacesInWindow(openedWindow);\n break;\n }\n case 'CLOSE_WORKSPACE':\n {\n var openedWindow1 = openedWindows.find(function(window) {\n return window.windowName === promptReason.windowName;\n });\n if (!openedWindow1) {\n throw new Error(\"Window \".concat(promptReason.windowName, \" not found in opened windows.\"));\n }\n affectedWorkspaces = getAffectedWorkspacesInWindow(openedWindow1, promptReason.workspaceName);\n }\n }\n if (affectedWorkspaces.length === 0) {\n return Promise.resolve(true); // no unsaved changes, no need to prompt\n }\n return new Promise(function(resolve) {\n var dispose = (0,_modals__WEBPACK_IMPORTED_MODULE_4__.showModal)('workspace2-close-prompt', {\n onConfirm: function() {\n dispose();\n resolve(true);\n },\n onCancel: function() {\n dispose();\n resolve(false);\n },\n affectedWorkspaceTitles: affectedWorkspaces.map(function(workspace) {\n return workspaceTitleByWorkspaceName[workspace.workspaceName];\n })\n });\n });\n}\nvar workspace2StoreActions = {\n setWindowMaximized: function setWindowMaximized(state, windowName, maximized) {\n var openedWindowIndex = state.openedWindows.findIndex(function(a) {\n return a.windowName === windowName;\n });\n var openedWindows = _to_consumable_array(state.openedWindows);\n var currentWindow = _object_spread_props(_object_spread({}, openedWindows[openedWindowIndex]), {\n maximized: maximized\n });\n openedWindows[openedWindowIndex] = currentWindow;\n return _object_spread_props(_object_spread({}, state), {\n openedWindows: openedWindows\n });\n },\n // hides the most recently opened window (all other opened windows are implicitly hidden)\n hideWindow: function hideWindow(state) {\n return _object_spread_props(_object_spread({}, state), {\n isMostRecentlyOpenedWindowHidden: true\n });\n },\n restoreWindow: function restoreWindow(state, windowName) {\n var openedWindowIndex = state.openedWindows.findIndex(function(a) {\n return a.windowName === windowName;\n });\n var currentWindow = state.openedWindows[openedWindowIndex];\n var openedWindows = _to_consumable_array(state.openedWindows.filter(function(_, i) {\n return i !== openedWindowIndex;\n })).concat([\n currentWindow\n ]);\n return _object_spread_props(_object_spread({}, state), {\n openedWindows: openedWindows,\n isMostRecentlyOpenedWindowHidden: false\n });\n },\n closeWorkspace: function closeWorkspace(state, workspaceName) {\n var openedWindowIndex = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.getOpenedWindowIndexByWorkspace)(workspaceName);\n if (openedWindowIndex < 0) {\n return state; // no-op if the window does not exist\n }\n var window = _object_spread({}, state.openedWindows[openedWindowIndex]);\n var workspaceIndex = window.openedWorkspaces.findIndex(function(w) {\n return w.workspaceName === workspaceName;\n });\n var openedWindows = _to_consumable_array(state.openedWindows);\n // close all children of the input workspace as well\n window.openedWorkspaces = window.openedWorkspaces.slice(0, workspaceIndex);\n var hidden = state.isMostRecentlyOpenedWindowHidden;\n if (window.openedWorkspaces.length === 0) {\n var wasMostRecentWindow = openedWindowIndex === state.openedWindows.length - 1;\n // if no workspaces left, remove the window\n openedWindows.splice(openedWindowIndex, 1);\n // If we removed the most recent window and there are still windows left,\n // the new most recent window should be shown\n if (wasMostRecentWindow && openedWindows.length > 0) {\n hidden = false;\n }\n } else {\n // if there are still workspaces left, just update the window\n openedWindows[openedWindowIndex] = window;\n }\n return _object_spread_props(_object_spread({}, state), {\n openedWindows: openedWindows,\n isMostRecentlyOpenedWindowHidden: hidden\n });\n },\n openChildWorkspace: function openChildWorkspace(state, parentWorkspaceName, childWorkspaceName, childWorkspaceProps) {\n var childWorkspaceDef = state.registeredWorkspacesByName[childWorkspaceName];\n if (!childWorkspaceDef) {\n throw new Error('No workspace named \"'.concat(childWorkspaceName, '\" registered'));\n }\n var parentWorkspaceDef = state.registeredWorkspacesByName[parentWorkspaceName];\n if (!parentWorkspaceDef) {\n throw new Error('No workspace named \"'.concat(parentWorkspaceName, '\" registered'));\n }\n if (parentWorkspaceDef.window !== childWorkspaceDef.window) {\n throw new Error(\"Child workspace \".concat(childWorkspaceName, \" does not belong to the same workspace window as parent workspace \").concat(parentWorkspaceName));\n }\n // as the request workspace should be a child workspace, the corresponding window\n // to contain the workspace should already be opened\n var openedWindowIndex = state.openedWindows.findIndex(function(window) {\n return window.windowName === childWorkspaceDef.window;\n });\n if (openedWindowIndex == -1) {\n throw new Error(\"Cannot open child workspace \".concat(childWorkspaceName, \" as window \").concat(childWorkspaceDef.window, \" is not opened\"));\n }\n var openedWindow = state.openedWindows[openedWindowIndex];\n var openedWorkspaces = openedWindow.openedWorkspaces;\n if (openedWorkspaces[openedWorkspaces.length - 1].workspaceName !== parentWorkspaceName) {\n throw new Error(\"Cannot open child workspace \".concat(childWorkspaceName, \" from parent workspace \").concat(parentWorkspaceName, \" as the parent is not the most recently opened workspace within the workspace window\"));\n }\n return {\n openedWindows: state.openedWindows.map(function(w, i) {\n if (i == openedWindowIndex) {\n return _object_spread_props(_object_spread({}, w), {\n openedWorkspaces: _to_consumable_array(w.openedWorkspaces).concat([\n newOpenedWorkspace(childWorkspaceName, childWorkspaceProps)\n ])\n });\n } else {\n return w;\n }\n })\n };\n },\n setHasUnsavedChanges: function setHasUnsavedChanges(state, workspaceName, hasUnsavedChanges) {\n var openedWindowIndex = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.getOpenedWindowIndexByWorkspace)(workspaceName);\n if (openedWindowIndex < 0) {\n return state; // no-op if the window does not exist\n }\n var openedWindow = _object_spread({}, state.openedWindows[openedWindowIndex]);\n var workspaceIndex = openedWindow.openedWorkspaces.findIndex(function(w) {\n return w.workspaceName === workspaceName;\n });\n if (workspaceIndex < 0) {\n return state; // no-op if the workspace is not found\n }\n openedWindow.openedWorkspaces[workspaceIndex] = _object_spread_props(_object_spread({}, openedWindow.openedWorkspaces[workspaceIndex]), {\n hasUnsavedChanges: hasUnsavedChanges\n });\n var openedWindows = _to_consumable_array(state.openedWindows);\n openedWindows[openedWindowIndex] = openedWindow;\n return _object_spread_props(_object_spread({}, state), {\n openedWindows: openedWindows\n });\n },\n setWorkspaceTitle: function setWorkspaceTitle(state, workspaceName, title) {\n var newWorkspaceTitleByWorkspaceName = _object_spread({}, state.workspaceTitleByWorkspaceName);\n if (title === null) {\n delete newWorkspaceTitleByWorkspaceName[workspaceName];\n } else {\n newWorkspaceTitleByWorkspaceName[workspaceName] = title;\n }\n return _object_spread_props(_object_spread({}, state), {\n workspaceTitleByWorkspaceName: newWorkspaceTitleByWorkspaceName\n });\n }\n};\nfunction useWorkspace2Store() {\n return (0,_openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_3__.useStoreWithActions)(_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store, workspace2StoreActions);\n}\n/**\n * Returns the react Context containing props passed into a workspace.\n * This hook MUST be called inside a child of <Workspace2>\n */ var useWorkspace2Context = function() {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(single_spa_react__WEBPACK_IMPORTED_MODULE_1__.SingleSpaContext);\n};\n/**\n * @returns a list of registered workspaces.\n */ var getRegisteredWorkspace2Names = function() {\n return Object.keys(_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.getState().registeredWorkspacesByName);\n};\nfunction newOpenedWorkspace(workspaceName, workspaceProps) {\n return {\n workspaceName: workspaceName,\n props: workspaceProps !== null && workspaceProps !== void 0 ? workspaceProps : {},\n hasUnsavedChanges: false,\n uuid: (0,uuid__WEBPACK_IMPORTED_MODULE_6__[\"default\"])()\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1zdHlsZWd1aWRlL3NyYy93b3Jrc3BhY2VzMi93b3Jrc3BhY2UyLnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWlEO0FBQ0c7QUFDaEI7QUFTSDtBQUM0QztBQUMzQjtBQUNaO0FBR3RDOzs7Ozs7Ozs7Ozs7O0NBYUMsR0FDTSxTQUFlVyxzQkFDcEJDLFNBQWlCLEVBQ2pCQyxVQUE2Qjs7WUFFckJDLGFBR0VDOzs7O29CQUhGRCxjQUFnQlAsb0VBQWVBLENBQUNTLFFBQVEsR0FBeENGO3lCQUNKQSxhQUFBQTs7Ozt5QkFDRUEsQ0FBQUEsWUFBWUYsU0FBUyxLQUFLQSxhQUFhLENBQUNLLG1CQUFtQkgsWUFBWUksS0FBSyxFQUFFTCxXQUFVLEdBQXhGQzs7OztvQkFDMEI7O3dCQUFNSywyQkFBMkI7NEJBQzNEQyxRQUFROzRCQUNSQyxVQUFVO3dCQUNaOzs7b0JBSE1OLHNCQUFzQjtvQkFJNUIsSUFBSSxDQUFDQSxxQkFBcUI7d0JBQ3hCOzs0QkFBTzs7b0JBQ1Q7Ozs7OztvQkFHQSxrREFBa0Q7b0JBQ2xEOzt3QkFBTzs7O29CQUlYUixvRUFBZUEsQ0FBQ2UsUUFBUSxDQUFDLFNBQUNDOytCQUFXLHdDQUNoQ0E7NEJBQ0hULGFBQWE7Z0NBQ1hGLFdBQUFBO2dDQUNBTSxPQUFPTDs0QkFDVDs0QkFDQVcsZUFBZSxFQUFFOzs7b0JBR25COzt3QkFBTzs7OztJQUNUOztBQUVBOzs7Ozs7Ozs7Q0FTQyxHQUNNLFNBQWVDLHFCQUFxQkMscUJBQStCOztZQUNsRUgs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UyxRQUFRLEdBQUcwQiwwQkFBMEI7QUFDMUUsRUFBRTtBQUVGLFNBQVNHLG1CQUFtQmhCLGFBQXFCLEVBQUVDLGNBQTBDO0lBQzNGLE9BQU87UUFDTEQsZUFBQUE7UUFDQVgsT0FBT1ksMkJBQUFBLDRCQUFBQSxpQkFBa0IsQ0FBQztRQUMxQjhCLG1CQUFtQjtRQUNuQnVDLE1BQU1oRyxnREFBTUE7SUFDZDtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLXN0eWxlZ3VpZGUvc3JjL3dvcmtzcGFjZXMyL3dvcmtzcGFjZTIudHM/M2Y4YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTaW5nbGVTcGFDb250ZXh0IH0gZnJvbSAnc2luZ2xlLXNwYS1yZWFjdCc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkVjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7XG4gIGdldEdyb3VwQnlXaW5kb3dOYW1lLFxuICBnZXRPcGVuZWRXaW5kb3dJbmRleEJ5V29ya3NwYWNlLFxuICBnZXRXaW5kb3dCeVdvcmtzcGFjZU5hbWUsXG4gIHR5cGUgT3BlbmVkV2luZG93LFxuICB0eXBlIE9wZW5lZFdvcmtzcGFjZSxcbiAgd29ya3NwYWNlMlN0b3JlLFxuICB0eXBlIFdvcmtzcGFjZVN0b3JlU3RhdGUyLFxufSBmcm9tICdAb3Blbm1ycy9lc20tZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyB1c2VTdG9yZVdpdGhBY3Rpb25zLCB0eXBlIEFjdGlvbnMgfSBmcm9tICdAb3Blbm1ycy9lc20tcmVhY3QtdXRpbHMnO1xuaW1wb3J0IHsgc2hhbGxvd0VxdWFsIH0gZnJvbSAnQG9wZW5tcnMvZXNtLXV0aWxzJztcbmltcG9ydCB7IHNob3dNb2RhbCB9IGZyb20gJy4uL21vZGFscyc7XG5pbXBvcnQgeyB0eXBlIFdvcmtzcGFjZTJEZWZpbml0aW9uUHJvcHMgfSBmcm9tICcuL3dvcmtzcGFjZTIuY29tcG9uZW50JztcblxuLyoqXG4gKiBBdHRlbXB0cyB0byBsYXVuY2ggdGhlIHNwZWNpZmllZCB3b3Jrc3BhY2UgZ3JvdXAgd2l0aCB0aGUgZ2l2ZW4gZ3JvdXAgcHJvcHMuIE5vdGUgdGhhdCBvbmx5IG9uZSB3b3Jrc3BhY2UgZ3JvdXBcbiAqIG1heSBiZSBvcGVuZWQgYXQgYW55IGdpdmVuIHRpbWUuIElmIGEgd29ya3NwYWNlIGdyb3VwIGlzIGFscmVhZHkgb3BlbmVkLCBjYWxsaW5nIGBsYXVuY2hXb3Jrc3BhY2VHcm91cDJgIHdpdGhcbiAqIGVpdGhlciBhIGRpZmZlcmVudCBncm91cCBuYW1lLCBvciBzYW1lIGdyb3VwIG5hbWUgYnV0IGRpZmZlcmVudCBpbmNvbXBhdGlibGUgcHJvcHMqKiwgd2lsbCByZXN1bHQgaW4gcHJvbXB0aW5nIHRvXG4gKiBjb25maXJtIGNsb3Npbmcgd29ya3NwYWNlcy4gSWYgdGhlIHVzZXIgY29uZmlybXMsIHRoZSBvcGVuZWQgZ3JvdXAsIGFsb25nIHdpdGggaXRzIHdpbmRvd3MgKGFuZCB0aGVpciB3b3Jrc3BhY2VzKSwgaXMgY2xvc2VkLCBhbmRcbiAqIHRoZSByZXF1ZXN0ZWQgZ3JvdXAgaXMgaW1tZWRpYXRlbHkgb3BlbmVkLlxuICpcbiAqICoqIDIgc2V0cyBvZiBwcm9wcyBhcmUgY29tcGF0aWJsZSBpZiBlaXRoZXIgb25lIGlzIG51bGxpc2gsIG9yIGlmIHRoZXkgYXJlIHNoYWxsb3cgZXF1YWwuXG4gKiBAZXhwZXJpbWVudGFsXG4gKiBAcGFyYW0gZ3JvdXBOYW1lXG4gKiBAcGFyYW0gZ3JvdXBQcm9wc1xuICogQHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHdvcmtzcGFjZSBncm91cCB3aXRoIHRoZSBzcGVjaWZpZWQgZ3JvdXAgcHJvcHNcbiAqICBpcyBzdWNjZXNzZnVsbHkgb3BlbmVkLCBvciB0aGF0IGl0IGFscmVhZHkgaXMgb3BlbmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF1bmNoV29ya3NwYWNlR3JvdXAyPEdyb3VwUHJvcHMgZXh0ZW5kcyBvYmplY3Q+KFxuICBncm91cE5hbWU6IHN0cmluZyxcbiAgZ3JvdXBQcm9wczogR3JvdXBQcm9wcyB8IG51bGwsXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgeyBvcGVuZWRHcm91cCB9ID0gd29ya3NwYWNlMlN0b3JlLmdldFN0YXRlKCk7XG4gIGlmIChvcGVuZWRHcm91cCkge1xuICAgIGlmIChvcGVuZWRHcm91cC5ncm91cE5hbWUgIT09IGdyb3VwTmFtZSB8fCAhYXJlUHJvcHNDb21wYXRpYmxlKG9wZW5lZEdyb3VwLnByb3BzLCBncm91cFByb3BzKSkge1xuICAgICAgY29uc3Qgb2tUb0Nsb3NlV29ya3NwYWNlcyA9IGF3YWl0IHByb21wdEZvckNsb3NpbmdXb3Jrc3BhY2VzKHtcbiAgICAgICAgcmVhc29uOiAnQ0xPU0VfV09SS1NQQUNFX0dST1VQJyxcbiAgICAgICAgZXhwbGljaXQ6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBpZiAoIW9rVG9DbG9zZVdvcmtzcGFjZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gZWxzZSwgcHJvY2VlZCB0byBvcGVuIHRoZSBuZXcgZ3JvdXAgd2l0aCBubyBvcGVuZWRXaW5kb3dzXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vLW9wLCBncm91cCB3aXRoIGdyb3VwIHByb3BzIGlzIGFscmVhZHkgb3BlbmVkXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB3b3Jrc3BhY2UyU3RvcmUuc2V0U3RhdGUoKHN0YXRlKSA9PiAoe1xuICAgIC4uLnN0YXRlLFxuICAgIG9wZW5lZEdyb3VwOiB7XG4gICAgICBncm91cE5hbWUsXG4gICAgICBwcm9wczogZ3JvdXBQcm9wcyxcbiAgICB9LFxuICAgIG9wZW5lZFdpbmRvd3M6IFtdLFxuICB9KSk7XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ2xvc2VzIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgdGhhdCBpcyBjdXJyZW50bHkgb3BlbmVkLiBOb3RlIHRoYXQgb25seSBvbmUgd29ya3NwYWNlIGdyb3VwXG4gKiBtYXkgYmUgb3BlbmVkIGF0IGFueSBnaXZlbiB0aW1lXG4gKiBAZXhwZXJpbWVudGFsXG4gKiBAcGFyYW0gZGlzY2FyZFVuc2F2ZWRDaGFuZ2VzIElmIHRydWUsIHRoZW4gdGhlIHdvcmtzcGFjZSBncm91cCBpcyBmb3JjZWQgY2xvc2VkLCB3aXRoIG5vIHByb21wdFxuICogZm9yIGNvbmZpcm1hdGlvbiBmb3IgdW5zYXZlZCBjaGFuZ2VzIGluIGFueSBvcGVuZWQgd29ya3NwYWNlLiBUaGlzIHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseVxuICogZm9yIGNsZWFuLXVwIHB1cnBvc2UsIGV4OiB3aGVuIGV4aXRpbmcgYW4gYXBwLlxuICogQHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGVyZSBpcyBubyBvcGVuZWQgZ3JvdXAgdG8gYmVnaW4gd2l0aCBvciB3ZSBzdWNjZXNzZnVsbHkgY2xvc2VkXG4gKiB0aGUgb3BlbmVkIGdyb3VwOyBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZVdvcmtzcGFjZUdyb3VwMihkaXNjYXJkVW5zYXZlZENoYW5nZXM/OiBib29sZWFuKSB7XG4gIGNvbnN0IHN0YXRlID0gd29ya3NwYWNlMlN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHsgb3BlbmVkR3JvdXAsIG9wZW5lZFdpbmRvd3MgfSA9IHN0YXRlO1xuICBpZiAob3BlbmVkR3JvdXApIHtcbiAgICBpZiAob3BlbmVkV2luZG93cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBva1RvQ2xvc2VXb3Jrc3BhY2VzID1cbiAgICAgICAgZGlzY2FyZFVuc2F2ZWRDaGFuZ2VzIHx8XG4gICAgICAgIChhd2FpdCBwcm9tcHRGb3JDbG9zaW5nV29ya3NwYWNlcyh7IHJlYXNvbjogJ0NMT1NFX1dPUktTUEFDRV9HUk9VUCcsIGV4cGxpY2l0OiB0cnVlIH0pKTtcbiAgICAgIGlmICghb2tUb0Nsb3NlV29ya3NwYWNlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHdvcmtzcGFjZTJTdG9yZS5zZXRTdGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG9wZW5lZEdyb3VwOiBudWxsLFxuICAgICAgb3BlbmVkV2luZG93czogW10sXG4gICAgfSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gbm8gb3BlbmVkR3JvdXAgd2l0aCBiZWdpbiB3aXRoLCByZXR1cm4gdHJ1ZVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBBdHRlbXB0cyB0byBsYXVuY2ggdGhlIHNwZWNpZmllZCB3b3Jrc3BhY2Ugd2l0aCB0aGUgZ2l2ZW4gd29ya3NwYWNlIHByb3BzLiBUaGlzIGFsc28gaW1wbGljaXRseSBvcGVuc1xuICogdGhlIHdvcmtzcGFjZSB3aW5kb3cgdG8gd2hpY2ggdGhlIHdvcmtzcGFjZSBiZWxvbmdzIChpZiBpdCdzIG5vdCBvcGVuZWQgYWxyZWFkeSksXG4gKiBhbmQgdGhlIHdvcmtzcGFjZSBncm91cCB0byB3aGljaCB0aGUgd2luZG93IGJlbG9uZ3MgKGlmIGl0J3Mgbm90IG9wZW5lZCBhbHJlYWR5KS5cbiAqXG4gKiBXaGVuIGNhbGxpbmcgYGxhdW5jaFdvcmtzcGFjZTJgLCB3ZSBuZWVkIHRvIGFsc28gcGFzcyBpbiB0aGUgd29ya3NwYWNlIHByb3BzLiBXaGlsZSBub3QgcmVxdWlyZWQsXG4gKiB3ZSBjYW4gYWxzbyBwYXNzIGluIHRoZSB3aW5kb3cgcHJvcHMgKHNoYXJlZCBieSBvdGhlciB3b3Jrc3BhY2VzIGluIHRoZSB3aW5kb3cpIGFuZCB0aGUgZ3JvdXAgcHJvcHNcbiAqIChzaGFyZWQgYnkgYWxsIHdpbmRvd3MgYW5kIHRoZWlyIHdvcmtzcGFjZXMpLiBPbWl0dGluZyB0aGUgd2luZG93IHByb3BzIG9yIHRoZSBncm91cCBwcm9wc1teMV0gbWVhbnMgdGhlIGNhbGxlclxuICogZXhwbGljaXRseSBkb2VzIG5vdCBjYXJlIHdoYXQgdGhlIGN1cnJlbnQgd2luZG93IHByb3BzIGFuZCBncm91cCBwcm9wcyBhcmUsIGFuZCB0aGF0IHRoZXkgbWF5IGJlIHNldFxuICogYnkgb3RoZXIgYWN0aW9ucyAobGlrZSBjYWxsaW5nIGBsYXVuY2hXb3Jrc3BhY2UyYCBvbiBhIGRpZmZlcmVudCB3b3Jrc3BhY2Ugd2l0aCB0aG9zZSBwcm9wcyBwYXNzZWQgaW4pXG4gKiBhdCBhIGxhdGVyIHRpbWUuXG4gKlxuICogSWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBvcGVuZWQgd29ya3NwYWNlIGdyb3VwLCBhbmQgaXQncyBub3QgdGhlIGdyb3VwIHRoZSB3b3Jrc3BhY2UgYmVsb25ncyB0b1xuICogb3IgaGFzIGluY29tcGF0aWJsZVteMl0gZ3JvdXAgcHJvcHMsIHRoZW4gd2UgcHJvbXB0IHRoZSB1c2VyIHRvIGNsb3NlIHRoZSBncm91cCAoYW5kIGl0cyB3aW5kb3dzIGFuZCB0aGVpciB3b3Jrc3BhY2VzKS5cbiAqIE9uIHVzZXIgY29uZmlybSwgdGhlIGV4aXN0aW5nIG9wZW5lZCBncm91cCBpcyBjbG9zZWQgYW5kIHRoZSBuZXcgd29ya3NwYWNlLCBhbG9uZyB3aXRoIGl0cyB3aW5kb3cgYW5kIGl0cyBncm91cCxcbiAqIGlzIG9wZW5lZC5cbiAqXG4gKiBJZiB0aGUgd2luZG93IGlzIGFscmVhZHkgb3BlbmVkLCBidXQgd2l0aCBpbmNvbXBhdGlibGUgd2luZG93IHByb3BzLCB3ZSBwcm9tcHQgdGhlIHVzZXIgdG8gY2xvc2VcbiAqIHRoZSB3aW5kb3cgKGFuZCBhbGwgaXRzIG9wZW5lZCB3b3Jrc3BhY2VzKSwgYW5kIHJlb3BlbiB0aGUgd2luZG93IHdpdGggKG9ubHkpIHRoZSBuZXdseSByZXF1ZXN0ZWQgd29ya3NwYWNlLlxuICpcbiAqIElmIHRoZSB3b3Jrc3BhY2UgaXMgYWxyZWFkeSBvcGVuZWQsIGJ1dCB3aXRoIGluY29tcGF0aWJsZSB3b3Jrc3BhY2UgcHJvcHMsIHdlIGFsc28gcHJvbXB0IHRoZSB1c2VyIHRvIGNsb3NlXG4gKiB0aGUgKip3aW5kb3cqKiAoYW5kIGFsbCBpdHMgb3BlbmVkIHdvcmtzcGFjZXMpLCBhbmQgcmVvcGVuIHRoZSB3aW5kb3cgd2l0aCAob25seSkgdGhlIG5ld2x5IHJlcXVlc3RlZCB3b3Jrc3BhY2UuXG4gKiBUaGlzIGlzIHRydWUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBhbHJlYWR5IG9wZW5lZCB3b3Jrc3BhY2UgaGFzIGFueSBjaGlsZCB3b3Jrc3BhY2VzLlxuICpcbiAqIE5vdGUgdGhhdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gKm5ldmVyKiByZXN1bHRzIGluIGNyZWF0aW5nIGEgY2hpbGQgd29ya3NwYWNlIGluIHRoZSBhZmZlY3RlZCB3aW5kb3cuXG4gKiBUbyBkbyBzbywgd2UgbmVlZCB0byBjYWxsIGBsYXVuY2hDaGlsZFdvcmtzcGFjZWAgaW5zdGVhZC5cbiAqXG4gKiBbXjFdIE9taXR0aW5nIHdpbmRvdyBvciBncm91cCBwcm9wcyBpcyB1c2VmdWwgZm9yIHdvcmtzcGFjZXMgdGhhdCBkb24ndCBoYXZlIHRpZXMgdG8gdGhlIHdpbmRvdyBvciBncm91cCBcImNvbnRleHRcIiAocHJvcHMpLlxuICogRm9yIGV4YW1wbGUsIGluIHRoZSBwYXRpZW50IGNoYXJ0LCB0aGUgdmlzaXQgbm90ZXMgLyBjbGluaWNhbCBmb3JtcyAvIG9yZGVyIGJhc2tldCBhY3Rpb24gbWVudSBidXR0b24gYWxsIHNoYXJlXG4gKiBhIFwiZ3JvdXAgY29udGV4dFwiIG9mIHRoZSBjdXJyZW50IHZpc2l0LiBIb3dldmVyLCB0aGUgXCJwYXRpZW50IGxpc3RcIiBhY3Rpb24gbWVudSBidXR0b24gZG9lcyBub3QgbmVlZCB0byBzaGFyZSB0aGF0IGdyb3VwXG4gKiBjb250ZXh0LCBzbyBvcGVuaW5nIHRoYXQgd29ya3NwYWNlIHNob3VsZCBub3QgbmVlZCB0byBjYXVzZSBvdGhlciB3b3Jrc3BhY2VzIC8gd2luZG93cyAvIGdyb3VwcyB0byBwb3RlbnRpYWxseSBjbG9zZS5cbiAqIFRoZSBcInBhdGllbnQgc2VhcmNoXCIgd29ya3NwYWNlIGluIHRoZSBxdWV1ZXMgYW5kIHdhcmQgYXBwcyBpcyBhbm90aGVyIGV4YW1wbGUuXG4gKlxuICogW14yXSAyIHNldHMgb2YgcHJvcHMgYXJlIGNvbXBhdGlibGUgaWYgZWl0aGVyIG9uZSBpcyBudWxsaXNoLCBvciBpZiB0aGV5IGFyZSBzaGFsbG93IGVxdWFsLlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF1bmNoV29ya3NwYWNlMjxcbiAgV29ya3NwYWNlUHJvcHMgZXh0ZW5kcyBvYmplY3QsXG4gIFdpbmRvd1Byb3BzIGV4dGVuZHMgb2JqZWN0LFxuICBHcm91cFByb3AgZXh0ZW5kcyBvYmplY3QsXG4+KFxuICB3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsXG4gIHdvcmtzcGFjZVByb3BzOiBXb3Jrc3BhY2VQcm9wcyB8IG51bGwgPSBudWxsLFxuICB3aW5kb3dQcm9wczogV2luZG93UHJvcHMgfCBudWxsID0gbnVsbCxcbiAgZ3JvdXBQcm9wczogR3JvdXBQcm9wIHwgbnVsbCA9IG51bGwsXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qgc3RvcmVTdGF0ZSA9IHdvcmtzcGFjZTJTdG9yZS5nZXRTdGF0ZSgpO1xuXG4gIGlmICghc3RvcmVTdGF0ZS5yZWdpc3RlcmVkV29ya3NwYWNlc0J5TmFtZVt3b3Jrc3BhY2VOYW1lXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxhdW5jaCB3b3Jrc3BhY2UgJHt3b3Jrc3BhY2VOYW1lfS4gV29ya3NwYWNlIGlzIG5vdCByZWdpc3RlcmVkYCk7XG4gIH1cbiAgY29uc3Qgd2luZG93RGVmID0gZ2V0V2luZG93QnlXb3Jrc3BhY2VOYW1lKHdvcmtzcGFjZU5hbWUpO1xuICBpZiAoIXdpbmRvd0RlZikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxhdW5jaCB3b3Jrc3BhY2UgJHt3b3Jrc3BhY2VOYW1lfS4gV29ya3NwYWNlIGlzIG5vdCByZWdpc3RlcmVkIHRvIGEgd29ya3NwYWNlIHdpbmRvd2ApO1xuICB9XG5cbiAgY29uc3QgeyBvcGVuZWRHcm91cCB9ID0gc3RvcmVTdGF0ZTtcbiAgY29uc3QgeyBuYW1lOiB3aW5kb3dOYW1lIH0gPSB3aW5kb3dEZWY7XG4gIGNvbnN0IGdyb3VwRGVmID0gZ2V0R3JvdXBCeVdpbmRvd05hbWUod2luZG93TmFtZSk7XG4gIGlmICghZ3JvdXBEZWYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5hYmxlIHRvIGxhdW5jaCB3b3Jrc3BhY2UgJHt3b3Jrc3BhY2VOYW1lfS4gV29ya3NwYWNlIHdpbmRvdyAke3dpbmRvd0RlZi5uYW1lfSBpcyBub3QgcmVnaXN0ZXJlZCB0byBhIHdvcmtzcGFjZSBncm91cGAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG9wZW5lZFdpbmRvd0luZGV4ID0gZ2V0T3BlbmVkV2luZG93SW5kZXhCeVdvcmtzcGFjZSh3b3Jrc3BhY2VOYW1lKTtcbiAgY29uc3QgaXNXaW5kb3dBbHJlYWR5T3BlbmVkID0gb3BlbmVkV2luZG93SW5kZXggPj0gMDtcblxuICAvLyBpZiBjdXJyZW50IG9wZW5lZCBncm91cCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHJlcXVlc3RlZCBncm91cCwgb3IgaWYgdGhlIGdyb3VwIHByb3BzIGFyZSBkaWZmZXJlbnQsIHRoZW4gcHJvbXB0IGZvciB1bnNhdmVkIGNoYW5nZXNcbiAgaWYgKG9wZW5lZEdyb3VwICYmIChvcGVuZWRHcm91cC5ncm91cE5hbWUgIT09IGdyb3VwRGVmLm5hbWUgfHwgIWFyZVByb3BzQ29tcGF0aWJsZShvcGVuZWRHcm91cC5wcm9wcywgZ3JvdXBQcm9wcykpKSB7XG4gICAgY29uc3Qgb2tUb0Nsb3NlV29ya3NwYWNlcyA9IGF3YWl0IHByb21wdEZvckNsb3NpbmdXb3Jrc3BhY2VzKHsgcmVhc29uOiAnQ0xPU0VfV09SS1NQQUNFX0dST1VQJywgZXhwbGljaXQ6IHRydWUgfSk7XG4gICAgaWYgKG9rVG9DbG9zZVdvcmtzcGFjZXMpIHtcbiAgICAgIHdvcmtzcGFjZTJTdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgIC4uLnN0b3JlU3RhdGUsXG4gICAgICAgIG9wZW5lZEdyb3VwOiB7XG4gICAgICAgICAgZ3JvdXBOYW1lOiBncm91cERlZi5uYW1lLFxuICAgICAgICAgIHByb3BzOiBncm91cFByb3BzLFxuICAgICAgICB9LFxuICAgICAgICBvcGVuZWRXaW5kb3dzOiBbXG4gICAgICAgICAgLy8gZGlzY2FyZCBhbGwgb3BlbmVkIHdpbmRvd3MsIG9wZW4gYSBuZXcgb25lIHdpdGggdGhlIHJlcXVlc3RlZCB3b3Jrc3BhY2VcbiAgICAgICAgICAvLyBtb3N0IHJlY2VudGx5IG9wZW5lZCBhY3Rpb24gYXBwZW5kZWQgdG8gdGhlIGVuZFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdpbmRvd05hbWU6IHdpbmRvd05hbWUsXG4gICAgICAgICAgICBvcGVuZWRXb3Jrc3BhY2VzOiBbbmV3T3BlbmVkV29ya3NwYWNlKHdvcmtzcGFjZU5hbWUsIHdvcmtzcGFjZVByb3BzKV0sIC8vIHJvb3Qgd29ya3NwYWNlIGF0IGluZGV4IDBcbiAgICAgICAgICAgIHByb3BzOiB3aW5kb3dQcm9wcyxcbiAgICAgICAgICAgIG1heGltaXplZDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgaXNNb3N0UmVjZW50bHlPcGVuZWRXaW5kb3dIaWRkZW46IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1dpbmRvd0FscmVhZHlPcGVuZWQpIHtcbiAgICBjb25zdCBvcGVuZWRXaW5kb3cgPSBzdG9yZVN0YXRlLm9wZW5lZFdpbmRvd3Nbb3BlbmVkV2luZG93SW5kZXhdO1xuICAgIGNvbnN0IGdyb3VwUHJvcHMgPSBzdG9yZVN0YXRlLm9wZW5lZEdyb3VwPy5wcm9wcyA/PyB7fTtcbiAgICBjb25zdCBpc01vc3RSZWNlbnRseU9wZW5lZFdpbmRvd0hpZGRlbiA9IHN0b3JlU3RhdGUuaXNNb3N0UmVjZW50bHlPcGVuZWRXaW5kb3dIaWRkZW47XG4gICAgY29uc3QgeyBvcGVuZWRXb3Jrc3BhY2VzIH0gPSBvcGVuZWRXaW5kb3c7XG5cbiAgICBpZiAoYXJlUHJvcHNDb21wYXRpYmxlKG9wZW5lZFdpbmRvdy5wcm9wcywgd2luZG93UHJvcHMpKSB7XG4gICAgICAvLyB0aGlzIGNhc2UgaXMgdHJpY2t5LCB0aGlzIHJlc3VsdHMgaW4gcmVzdG9yaW5nIHRoZSB3aW5kb3cgaWY6XG4gICAgICAvLyAxLiB0aGUgd29ya3NwYWNlIGlzIG9wZW5lZCAoYnV0IG5vdCBuZWNlc3NhcmlseSBhcyBhIGxlYWYgd29ya3NwYWNlKVxuICAgICAgLy8gMi4gdGhlIHByb3BzIG9mIHRoZSBvcGVuZWQgd29ya3NwYWNlIGlzIHNhbWUgYXMgd29ya3NwYWNlIHByb3BzIChmcm9tIHRoZSBmdW5jdGlvbiBpbnB1dClcbiAgICAgIC8vXG4gICAgICAvLyBPdGhlcndpc2UsIHdlIGNsb3NlIGFsbCB3b3Jrc3BhY2VzIGluIHRoaXMgd2luZG93LCBhbmQgb3BlbiB0aGlzIG5ld2x5IHJlcXVlc3RlZCBvbmVcbiAgICAgIGNvbnN0IG9wZW5lZFdvcmtzcGFjZSA9IG9wZW5lZFdvcmtzcGFjZXMuZmluZCgodykgPT4gdy53b3Jrc3BhY2VOYW1lID09PSB3b3Jrc3BhY2VOYW1lKTtcbiAgICAgIGlmIChvcGVuZWRXb3Jrc3BhY2UgJiYgYXJlUHJvcHNDb21wYXRpYmxlKG9wZW5lZFdvcmtzcGFjZS5wcm9wcywgd29ya3NwYWNlUHJvcHMpKSB7XG4gICAgICAgIC8vIHJlc3RvcmUgdGhlIHdpbmRvdyBpZiBpdCBpcyBoaWRkZW4gb3Igbm90IHRoZSBtb3N0IHJlY2VudGx5IG9wZW5lZCBvbmVcbiAgICAgICAgaWYgKGlzTW9zdFJlY2VudGx5T3BlbmVkV2luZG93SGlkZGVuIHx8IG9wZW5lZFdpbmRvd0luZGV4ICE9PSBzdG9yZVN0YXRlLm9wZW5lZFdpbmRvd3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHdvcmtzcGFjZTJTdG9yZS5zZXRTdGF0ZSh3b3Jrc3BhY2UyU3RvcmVBY3Rpb25zLnJlc3RvcmVXaW5kb3coc3RvcmVTdGF0ZSwgd2luZG93TmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb2tUb0Nsb3NlV29ya3NwYWNlcyA9IGF3YWl0IHByb21wdEZvckNsb3NpbmdXb3Jrc3BhY2VzKHtcbiAgICAgICAgICByZWFzb246ICdDTE9TRV9XT1JLU1BBQ0UnLFxuICAgICAgICAgIGV4cGxpY2l0OiBmYWxzZSxcbiAgICAgICAgICB3aW5kb3dOYW1lLFxuICAgICAgICAgIHdvcmtzcGFjZU5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob2tUb0Nsb3NlV29ya3NwYWNlcykge1xuICAgICAgICAgIHdvcmtzcGFjZTJTdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi5zdG9yZVN0YXRlLFxuICAgICAgICAgICAgb3BlbmVkR3JvdXA6IHtcbiAgICAgICAgICAgICAgZ3JvdXBOYW1lOiBncm91cERlZi5uYW1lLFxuICAgICAgICAgICAgICBwcm9wczogc3RvcmVTdGF0ZT8ub3BlbmVkR3JvdXA/LnByb3BzID8/IGdyb3VwUHJvcHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3BlbmVkV2luZG93czogW1xuICAgICAgICAgICAgICAuLi5zdG9yZVN0YXRlLm9wZW5lZFdpbmRvd3MuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBvcGVuZWRXaW5kb3dJbmRleCksXG4gICAgICAgICAgICAgIC8vIG1vc3QgcmVjZW50bHkgb3BlbmVkIHdvcmtzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheVxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2luZG93TmFtZTogd2luZG93TmFtZSxcbiAgICAgICAgICAgICAgICBvcGVuZWRXb3Jrc3BhY2VzOiBbbmV3T3BlbmVkV29ya3NwYWNlKHdvcmtzcGFjZU5hbWUsIHdvcmtzcGFjZVByb3BzKV0sXG4gICAgICAgICAgICAgICAgcHJvcHM6IG9wZW5lZFdpbmRvdz8ucHJvcHMgPz8gd2luZG93UHJvcHMsXG4gICAgICAgICAgICAgICAgbWF4aW1pemVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpc01vc3RSZWNlbnRseU9wZW5lZFdpbmRvd0hpZGRlbjogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9rVG9DbG9zZVdvcmtzcGFjZXMgPSBhd2FpdCBwcm9tcHRGb3JDbG9zaW5nV29ya3NwYWNlcyh7XG4gICAgICAgIHJlYXNvbjogJ0NMT1NFX1dJTkRPVycsXG4gICAgICAgIGV4cGxpY2l0OiBmYWxzZSxcbiAgICAgICAgd2luZG93TmFtZSxcbiAgICAgIH0pO1xuICAgICAgaWYgKG9rVG9DbG9zZVdvcmtzcGFjZXMpIHtcbiAgICAgICAgLy8gZGlzY2FyZCB0aGUgb3BlbmVkV2luZG93cyBlbGVtZW50IGF0IG9wZW5lZFdpbmRvd0luZGV4XG4gICAgICAgIC8vIGFuZCBjcmVhdGUgYSBuZXcgb25lIHdpdGggdGhlIHJlcXVlc3RlZCB3b3Jrc3BhY2Ugb3BlbmVkXG4gICAgICAgIHdvcmtzcGFjZTJTdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgLi4uc3RvcmVTdGF0ZSxcbiAgICAgICAgICBvcGVuZWRHcm91cDoge1xuICAgICAgICAgICAgZ3JvdXBOYW1lOiBncm91cERlZi5uYW1lLFxuICAgICAgICAgICAgcHJvcHM6IGdyb3VwUHJvcHMgPz8gc3RvcmVTdGF0ZT8ub3BlbmVkR3JvdXA/LnByb3BzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3BlbmVkV2luZG93czogW1xuICAgICAgICAgICAgLi4uc3RvcmVTdGF0ZS5vcGVuZWRXaW5kb3dzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gb3BlbmVkV2luZG93SW5kZXgpLFxuICAgICAgICAgICAgLy8gbW9zdCByZWNlbnRseSBvcGVuZWQgd29ya3NwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHdpbmRvd05hbWU6IHdpbmRvd05hbWUsXG4gICAgICAgICAgICAgIG9wZW5lZFdvcmtzcGFjZXM6IFtuZXdPcGVuZWRXb3Jrc3BhY2Uod29ya3NwYWNlTmFtZSwgd29ya3NwYWNlUHJvcHMpXSxcbiAgICAgICAgICAgICAgcHJvcHM6IHdpbmRvd1Byb3BzLFxuICAgICAgICAgICAgICBtYXhpbWl6ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGlzTW9zdFJlY2VudGx5T3BlbmVkV2luZG93SGlkZGVuOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3b3Jrc3BhY2UyU3RvcmUuc2V0U3RhdGUoe1xuICAgICAgLi4uc3RvcmVTdGF0ZSxcbiAgICAgIG9wZW5lZEdyb3VwOiB7XG4gICAgICAgIGdyb3VwTmFtZTogZ3JvdXBEZWYubmFtZSxcbiAgICAgICAgcHJvcHM6IGdyb3VwUHJvcHMgPz8gc3RvcmVTdGF0ZT8ub3BlbmVkR3JvdXA/LnByb3BzID8/IG51bGwsXG4gICAgICB9LFxuICAgICAgb3BlbmVkV2luZG93czogW1xuICAgICAgICAuLi5zdG9yZVN0YXRlLm9wZW5lZFdpbmRvd3MsXG4gICAgICAgIC8vIG1vc3QgcmVjZW50bHkgb3BlbmVkIHdvcmtzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheVxuICAgICAgICB7XG4gICAgICAgICAgd2luZG93TmFtZTogd2luZG93TmFtZSxcbiAgICAgICAgICBvcGVuZWRXb3Jrc3BhY2VzOiBbbmV3T3BlbmVkV29ya3NwYWNlKHdvcmtzcGFjZU5hbWUsIHdvcmtzcGFjZVByb3BzKV0sIC8vIHJvb3Qgd29ya3NwYWNlIGF0IGluZGV4IDBcbiAgICAgICAgICBwcm9wczogd2luZG93UHJvcHMsXG4gICAgICAgICAgbWF4aW1pemVkOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBpc01vc3RSZWNlbnRseU9wZW5lZFdpbmRvd0hpZGRlbjogZmFsc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGVuIHdlIGxhdW5jaCBhIHdvcmtzcGFjZSwgd2UgbWF5IHBhc3MgaW4gd29ya3NwYWNlIC8gd2luZG93cyAvIGdyb3VwIHByb3BzLiBJZiB0aGUgd29ya3NwYWNlIG9yXG4gKiB3aW5kb3cgb3IgZ3JvdXAgaXMgY3VycmVudGx5IG9wZW5lZCwgd2UgaGF2ZSB0byBjaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IHByb3BzIGFyZSBjb21wYXRpYmxlIHdpdGhcbiAqIHRoZSBwYXNzZWQgaW4gcHJvcHMuIDIgcHJvcHMgQSBhbmQgQiBhcmUgY29tcGF0aWJsZSBpZjpcbiAqICAgZWl0aGVyIG9uZSBpcyBudWxsaXNoIChiZWNhdXNlIHRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGxlciBkb2VzIG5vdCBjYXJlIGFib3V0IHByb3AgaW5jb21wYXRpYmlsaXR5KVxuICogICBuZWl0aGVyIGlzIG51bGxpc2gsIGFuZCBBIGFuZCBCIGFyZSBzaGFsbG93IGVxdWFsLlxuICogQHBhcmFtIGEgcHJvcHNcbiAqIEBwYXJhbSBiIHByb3BzXG4gKiBAcmV0dXJucyB3aGV0aGVyIHByb3BzIGEgYW5kIGIgYXJlIGNvbXBhdGlibGVcbiAqL1xuZnVuY3Rpb24gYXJlUHJvcHNDb21wYXRpYmxlKGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBiOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCkge1xuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHNoYWxsb3dFcXVhbChhLCBiKTtcbn1cblxudHlwZSBQcm9tcHRSZWFzb24gPVxuICB8IHsgcmVhc29uOiAnQ0xPU0VfV09SS1NQQUNFX0dST1VQJzsgZXhwbGljaXQ6IGJvb2xlYW4gfVxuICB8IHsgcmVhc29uOiAnQ0xPU0VfV0lORE9XJzsgZXhwbGljaXQ6IGJvb2xlYW47IHdpbmRvd05hbWU6IHN0cmluZyB9XG4gIHwgeyByZWFzb246ICdDTE9TRV9XT1JLU1BBQ0UnOyBleHBsaWNpdDogYm9vbGVhbjsgd2luZG93TmFtZTogc3RyaW5nOyB3b3Jrc3BhY2VOYW1lOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBBIHVzZXIgY2FuIHBlcmZvcm0gYWN0aW9ucyB0aGF0IGV4cGxpY2l0bHkgcmVzdWx0IGluIGNsb3Npbmcgd29ya3NwYWNlc1xuICogKHN1Y2ggdGhhdCBjbGlja2luZyB0aGUgJ1gnIGJ1dHRvbiBmb3IgdGhlIHdvcmtzcGFjZSBvciB3b3Jrc3BhY2UgZ3JvdXApLCBvclxuICogaW1wbGljaXRseSAoYnkgb3BlbmluZyBhIHdvcmtzcGFjZSB3aXRoIGRpZmZlcmVudCBwcm9wcyB0aGFuIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IG9wZW5lZCkuXG4gKiBDYWxscyB0byBjbG9zZVdvcmtzcGFjZTIoKSBvciBjbG9zZVdvcmtzcGFjZUdyb3VwMigpIGFyZSBjb25zaWRlcmVkIGV4cGxpY2l0LCB3aGlsZSBjYWxsc1xuICogdG8gbGF1bmNoV29ya3NwYWNlMigpIG9yIGxhdW5jaFdvcmtzcGFjZUdyb3VwMigpIGFyZSBjb25zaWRlcmVkIGltcGxpY2l0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcHJvbXB0cyB0aGUgdXNlciBmb3IgY29uZmlybWF0aW9uIHRvIGNsb3NlIHdvcmtzcGFjZXMgd2l0aCBhIG1vZGFsIGRpYWxvZy5cbiAqIFdoZW4gdGhlIGNsb3NpbmcgaXMgZXhwbGljaXQsIGl0IHByb21wdHMgZm9yIGNvbmZpcm1hdGlvbiBmb3IgYWZmZWN0ZWQgd29ya3NwYWNlcyB3aXRoIHVuc2F2ZWQgY2hhbmdlcy5cbiAqIFdoZW4gdGhlIGNsb3NpbmcgaXMgaW1wbGljaXQsIGl0IHByb21wdHMgZm9yIGNvbmZpcm1hdGlvbiBmb3IgYWxsIGFmZmVjdGVkIHdvcmtzcGFjZXMsIHJlZ2FyZGxlc3Mgb2ZcbiAqIHdoZXRoZXIgdGhleSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy5cbiAqIEBleHBlcmltZW50YWxcbiAqIEBwYXJhbSBwcm9tcHRSZWFzb25cbiAqIEByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIHVzZXIgY29uZmlybWVkIGNsb3NpbmcgdGhlIHdvcmtzcGFjZXM7IGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21wdEZvckNsb3NpbmdXb3Jrc3BhY2VzKHByb21wdFJlYXNvbjogUHJvbXB0UmVhc29uKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIC8vIGlmIG9ubHlVcFRvVGhpc1dvcmtzcGFjZSBpcyBwcm92aWRlZCwgd2Ugd2lsbCBvbmx5IGxvb3AgdGlsbCB3ZSBoaXQgdGhhdCB3b3Jrc3BhY2VcbiAgZnVuY3Rpb24gZ2V0QWZmZWN0ZWRXb3Jrc3BhY2VzSW5XaW5kb3cob3BlbmVkV2luZG93OiBPcGVuZWRXaW5kb3csIG9ubHlVcFRvVGhpc1dvcmtzcGFjZT86IHN0cmluZykge1xuICAgIGNvbnN0IHJldDogQXJyYXk8T3BlbmVkV29ya3NwYWNlPiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBvcGVuZWRXaW5kb3cub3BlbmVkV29ya3NwYWNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3Qgb3BlbmVkV29ya3NwYWNlID0gb3BlbmVkV2luZG93Lm9wZW5lZFdvcmtzcGFjZXNbaV07XG5cbiAgICAgIGlmIChvcGVuZWRXb3Jrc3BhY2UuaGFzVW5zYXZlZENoYW5nZXMgfHwgIXByb21wdFJlYXNvbi5leHBsaWNpdCkge1xuICAgICAgICByZXQucHVzaChvcGVuZWRXb3Jrc3BhY2UpO1xuICAgICAgfVxuICAgICAgaWYgKG9ubHlVcFRvVGhpc1dvcmtzcGFjZSAmJiBvcGVuZWRXb3Jrc3BhY2Uud29ya3NwYWNlTmFtZSA9PT0gb25seVVwVG9UaGlzV29ya3NwYWNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgY29uc3QgeyBvcGVuZWRXaW5kb3dzLCB3b3Jrc3BhY2VUaXRsZUJ5V29ya3NwYWNlTmFtZSB9ID0gd29ya3NwYWNlMlN0b3JlLmdldFN0YXRlKCk7XG4gIGxldCBhZmZlY3RlZFdvcmtzcGFjZXM6IE9wZW5lZFdvcmtzcGFjZVtdID0gW107XG4gIHN3aXRjaCAocHJvbXB0UmVhc29uLnJlYXNvbikge1xuICAgIGNhc2UgJ0NMT1NFX1dPUktTUEFDRV9HUk9VUCc6IHtcbiAgICAgIGFmZmVjdGVkV29ya3NwYWNlcyA9IG9wZW5lZFdpbmRvd3MuZmxhdE1hcCgod2luZG93KSA9PiBnZXRBZmZlY3RlZFdvcmtzcGFjZXNJbldpbmRvdyh3aW5kb3cpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICdDTE9TRV9XSU5ET1cnOiB7XG4gICAgICBjb25zdCBvcGVuZWRXaW5kb3cgPSBvcGVuZWRXaW5kb3dzLmZpbmQoKHdpbmRvdykgPT4gd2luZG93LndpbmRvd05hbWUgPT09IHByb21wdFJlYXNvbi53aW5kb3dOYW1lKTtcbiAgICAgIGlmICghb3BlbmVkV2luZG93KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgV2luZG93ICR7cHJvbXB0UmVhc29uLndpbmRvd05hbWV9IG5vdCBmb3VuZCBpbiBvcGVuZWQgd2luZG93cy5gKTtcbiAgICAgIH1cbiAgICAgIGFmZmVjdGVkV29ya3NwYWNlcyA9IGdldEFmZmVjdGVkV29ya3NwYWNlc0luV2luZG93KG9wZW5lZFdpbmRvdyk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnQ0xPU0VfV09SS1NQQUNFJzoge1xuICAgICAgY29uc3Qgb3BlbmVkV2luZG93ID0gb3BlbmVkV2luZG93cy5maW5kKCh3aW5kb3cpID0+IHdpbmRvdy53aW5kb3dOYW1lID09PSBwcm9tcHRSZWFzb24ud2luZG93TmFtZSk7XG4gICAgICBpZiAoIW9wZW5lZFdpbmRvdykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdpbmRvdyAke3Byb21wdFJlYXNvbi53aW5kb3dOYW1lfSBub3QgZm91bmQgaW4gb3BlbmVkIHdpbmRvd3MuYCk7XG4gICAgICB9XG4gICAgICBhZmZlY3RlZFdvcmtzcGFjZXMgPSBnZXRBZmZlY3RlZFdvcmtzcGFjZXNJbldpbmRvdyhvcGVuZWRXaW5kb3csIHByb21wdFJlYXNvbi53b3Jrc3BhY2VOYW1lKTtcbiAgICB9XG4gIH1cblxuICBpZiAoYWZmZWN0ZWRXb3Jrc3BhY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7IC8vIG5vIHVuc2F2ZWQgY2hhbmdlcywgbm8gbmVlZCB0byBwcm9tcHRcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGRpc3Bvc2UgPSBzaG93TW9kYWwoJ3dvcmtzcGFjZTItY2xvc2UtcHJvbXB0Jywge1xuICAgICAgb25Db25maXJtOiAoKSA9PiB7XG4gICAgICAgIGRpc3Bvc2UoKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0sXG4gICAgICBvbkNhbmNlbDogKCkgPT4ge1xuICAgICAgICBkaXNwb3NlKCk7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIGFmZmVjdGVkV29ya3NwYWNlVGl0bGVzOiBhZmZlY3RlZFdvcmtzcGFjZXMubWFwKFxuICAgICAgICAod29ya3NwYWNlKSA9PiB3b3Jrc3BhY2VUaXRsZUJ5V29ya3NwYWNlTmFtZVt3b3Jrc3BhY2Uud29ya3NwYWNlTmFtZV0sXG4gICAgICApLFxuICAgIH0pO1xuICB9KTtcbn1cblxuY29uc3Qgd29ya3NwYWNlMlN0b3JlQWN0aW9ucyA9IHtcbiAgc2V0V2luZG93TWF4aW1pemVkKHN0YXRlOiBXb3Jrc3BhY2VTdG9yZVN0YXRlMiwgd2luZG93TmFtZTogc3RyaW5nLCBtYXhpbWl6ZWQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBvcGVuZWRXaW5kb3dJbmRleCA9IHN0YXRlLm9wZW5lZFdpbmRvd3MuZmluZEluZGV4KChhKSA9PiBhLndpbmRvd05hbWUgPT09IHdpbmRvd05hbWUpO1xuICAgIGNvbnN0IG9wZW5lZFdpbmRvd3MgPSBbLi4uc3RhdGUub3BlbmVkV2luZG93c107XG4gICAgY29uc3QgY3VycmVudFdpbmRvdyA9IHsgLi4ub3BlbmVkV2luZG93c1tvcGVuZWRXaW5kb3dJbmRleF0sIG1heGltaXplZCB9O1xuXG4gICAgb3BlbmVkV2luZG93c1tvcGVuZWRXaW5kb3dJbmRleF0gPSBjdXJyZW50V2luZG93O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3BlbmVkV2luZG93cyxcbiAgICB9O1xuICB9LFxuICAvLyBoaWRlcyB0aGUgbW9zdCByZWNlbnRseSBvcGVuZWQgd2luZG93IChhbGwgb3RoZXIgb3BlbmVkIHdpbmRvd3MgYXJlIGltcGxpY2l0bHkgaGlkZGVuKVxuICBoaWRlV2luZG93KHN0YXRlOiBXb3Jrc3BhY2VTdG9yZVN0YXRlMikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGlzTW9zdFJlY2VudGx5T3BlbmVkV2luZG93SGlkZGVuOiB0cnVlLFxuICAgIH07XG4gIH0sXG4gIHJlc3RvcmVXaW5kb3coc3RhdGU6IFdvcmtzcGFjZVN0b3JlU3RhdGUyLCB3aW5kb3dOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBvcGVuZWRXaW5kb3dJbmRleCA9IHN0YXRlLm9wZW5lZFdpbmRvd3MuZmluZEluZGV4KChhKSA9PiBhLndpbmRvd05hbWUgPT09IHdpbmRvd05hbWUpO1xuICAgIGNvbnN0IGN1cnJlbnRXaW5kb3cgPSBzdGF0ZS5vcGVuZWRXaW5kb3dzW29wZW5lZFdpbmRvd0luZGV4XTtcbiAgICBjb25zdCBvcGVuZWRXaW5kb3dzID0gWy4uLnN0YXRlLm9wZW5lZFdpbmRvd3MuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBvcGVuZWRXaW5kb3dJbmRleCksIGN1cnJlbnRXaW5kb3ddO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG9wZW5lZFdpbmRvd3MsXG4gICAgICBpc01vc3RSZWNlbnRseU9wZW5lZFdpbmRvd0hpZGRlbjogZmFsc2UsXG4gICAgfTtcbiAgfSxcbiAgY2xvc2VXb3Jrc3BhY2Uoc3RhdGUsIHdvcmtzcGFjZU5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IG9wZW5lZFdpbmRvd0luZGV4ID0gZ2V0T3BlbmVkV2luZG93SW5kZXhCeVdvcmtzcGFjZSh3b3Jrc3BhY2VOYW1lKTtcbiAgICBpZiAob3BlbmVkV2luZG93SW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gc3RhdGU7IC8vIG5vLW9wIGlmIHRoZSB3aW5kb3cgZG9lcyBub3QgZXhpc3RcbiAgICB9XG5cbiAgICBjb25zdCB3aW5kb3cgPSB7IC4uLnN0YXRlLm9wZW5lZFdpbmRvd3Nbb3BlbmVkV2luZG93SW5kZXhdIH07XG4gICAgY29uc3Qgd29ya3NwYWNlSW5kZXggPSB3aW5kb3cub3BlbmVkV29ya3NwYWNlcy5maW5kSW5kZXgoKHcpID0+IHcud29ya3NwYWNlTmFtZSA9PT0gd29ya3NwYWNlTmFtZSk7XG4gICAgY29uc3Qgb3BlbmVkV2luZG93cyA9IFsuLi5zdGF0ZS5vcGVuZWRXaW5kb3dzXTtcbiAgICAvLyBjbG9zZSBhbGwgY2hpbGRyZW4gb2YgdGhlIGlucHV0IHdvcmtzcGFjZSBhcyB3ZWxsXG4gICAgd2luZG93Lm9wZW5lZFdvcmtzcGFjZXMgPSB3aW5kb3cub3BlbmVkV29ya3NwYWNlcy5zbGljZSgwLCB3b3Jrc3BhY2VJbmRleCk7XG5cbiAgICBsZXQgaGlkZGVuID0gc3RhdGUuaXNNb3N0UmVjZW50bHlPcGVuZWRXaW5kb3dIaWRkZW47XG4gICAgaWYgKHdpbmRvdy5vcGVuZWRXb3Jrc3BhY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3Qgd2FzTW9zdFJlY2VudFdpbmRvdyA9IG9wZW5lZFdpbmRvd0luZGV4ID09PSBzdGF0ZS5vcGVuZWRXaW5kb3dzLmxlbmd0aCAtIDE7XG4gICAgICAvLyBpZiBubyB3b3Jrc3BhY2VzIGxlZnQsIHJlbW92ZSB0aGUgd2luZG93XG4gICAgICBvcGVuZWRXaW5kb3dzLnNwbGljZShvcGVuZWRXaW5kb3dJbmRleCwgMSk7XG4gICAgICAvLyBJZiB3ZSByZW1vdmVkIHRoZSBtb3N0IHJlY2VudCB3aW5kb3cgYW5kIHRoZXJlIGFyZSBzdGlsbCB3aW5kb3dzIGxlZnQsXG4gICAgICAvLyB0aGUgbmV3IG1vc3QgcmVjZW50IHdpbmRvdyBzaG91bGQgYmUgc2hvd25cbiAgICAgIGlmICh3YXNNb3N0UmVjZW50V2luZG93ICYmIG9wZW5lZFdpbmRvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICBoaWRkZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgdGhlcmUgYXJlIHN0aWxsIHdvcmtzcGFjZXMgbGVmdCwganVzdCB1cGRhdGUgdGhlIHdpbmRvd1xuICAgICAgb3BlbmVkV2luZG93c1tvcGVuZWRXaW5kb3dJbmRleF0gPSB3aW5kb3c7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3BlbmVkV2luZG93cyxcbiAgICAgIGlzTW9zdFJlY2VudGx5T3BlbmVkV2luZG93SGlkZGVuOiBoaWRkZW4sXG4gICAgfTtcbiAgfSxcbiAgb3BlbkNoaWxkV29ya3NwYWNlKFxuICAgIHN0YXRlLFxuICAgIHBhcmVudFdvcmtzcGFjZU5hbWU6IHN0cmluZyxcbiAgICBjaGlsZFdvcmtzcGFjZU5hbWU6IHN0cmluZyxcbiAgICBjaGlsZFdvcmtzcGFjZVByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICApIHtcbiAgICBjb25zdCBjaGlsZFdvcmtzcGFjZURlZiA9IHN0YXRlLnJlZ2lzdGVyZWRXb3Jrc3BhY2VzQnlOYW1lW2NoaWxkV29ya3NwYWNlTmFtZV07XG4gICAgaWYgKCFjaGlsZFdvcmtzcGFjZURlZikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyB3b3Jrc3BhY2UgbmFtZWQgXCIke2NoaWxkV29ya3NwYWNlTmFtZX1cIiByZWdpc3RlcmVkYCk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudFdvcmtzcGFjZURlZiA9IHN0YXRlLnJlZ2lzdGVyZWRXb3Jrc3BhY2VzQnlOYW1lW3BhcmVudFdvcmtzcGFjZU5hbWVdO1xuICAgIGlmICghcGFyZW50V29ya3NwYWNlRGVmKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHdvcmtzcGFjZSBuYW1lZCBcIiR7cGFyZW50V29ya3NwYWNlTmFtZX1cIiByZWdpc3RlcmVkYCk7XG4gICAgfVxuICAgIGlmIChwYXJlbnRXb3Jrc3BhY2VEZWYud2luZG93ICE9PSBjaGlsZFdvcmtzcGFjZURlZi53aW5kb3cpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENoaWxkIHdvcmtzcGFjZSAke2NoaWxkV29ya3NwYWNlTmFtZX0gZG9lcyBub3QgYmVsb25nIHRvIHRoZSBzYW1lIHdvcmtzcGFjZSB3aW5kb3cgYXMgcGFyZW50IHdvcmtzcGFjZSAke3BhcmVudFdvcmtzcGFjZU5hbWV9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gYXMgdGhlIHJlcXVlc3Qgd29ya3NwYWNlIHNob3VsZCBiZSBhIGNoaWxkIHdvcmtzcGFjZSwgdGhlIGNvcnJlc3BvbmRpbmcgd2luZG93XG4gICAgLy8gdG8gY29udGFpbiB0aGUgd29ya3NwYWNlIHNob3VsZCBhbHJlYWR5IGJlIG9wZW5lZFxuICAgIGNvbnN0IG9wZW5lZFdpbmRvd0luZGV4ID0gc3RhdGUub3BlbmVkV2luZG93cy5maW5kSW5kZXgoKHdpbmRvdykgPT4gd2luZG93LndpbmRvd05hbWUgPT09IGNoaWxkV29ya3NwYWNlRGVmLndpbmRvdyk7XG4gICAgaWYgKG9wZW5lZFdpbmRvd0luZGV4ID09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgb3BlbiBjaGlsZCB3b3Jrc3BhY2UgJHtjaGlsZFdvcmtzcGFjZU5hbWV9IGFzIHdpbmRvdyAke2NoaWxkV29ya3NwYWNlRGVmLndpbmRvd30gaXMgbm90IG9wZW5lZGAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBvcGVuZWRXaW5kb3cgPSBzdGF0ZS5vcGVuZWRXaW5kb3dzW29wZW5lZFdpbmRvd0luZGV4XTtcbiAgICBjb25zdCB7IG9wZW5lZFdvcmtzcGFjZXMgfSA9IG9wZW5lZFdpbmRvdztcbiAgICBpZiAob3BlbmVkV29ya3NwYWNlc1tvcGVuZWRXb3Jrc3BhY2VzLmxlbmd0aCAtIDFdLndvcmtzcGFjZU5hbWUgIT09IHBhcmVudFdvcmtzcGFjZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBvcGVuIGNoaWxkIHdvcmtzcGFjZSAke2NoaWxkV29ya3NwYWNlTmFtZX0gZnJvbSBwYXJlbnQgd29ya3NwYWNlICR7cGFyZW50V29ya3NwYWNlTmFtZX0gYXMgdGhlIHBhcmVudCBpcyBub3QgdGhlIG1vc3QgcmVjZW50bHkgb3BlbmVkIHdvcmtzcGFjZSB3aXRoaW4gdGhlIHdvcmtzcGFjZSB3aW5kb3dgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkV2luZG93czogc3RhdGUub3BlbmVkV2luZG93cy5tYXAoKHcsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgPT0gb3BlbmVkV2luZG93SW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udyxcbiAgICAgICAgICAgIG9wZW5lZFdvcmtzcGFjZXM6IFsuLi53Lm9wZW5lZFdvcmtzcGFjZXMsIG5ld09wZW5lZFdvcmtzcGFjZShjaGlsZFdvcmtzcGFjZU5hbWUsIGNoaWxkV29ya3NwYWNlUHJvcHMpXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB3O1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICB9O1xuICB9LFxuICBzZXRIYXNVbnNhdmVkQ2hhbmdlcyhzdGF0ZTogV29ya3NwYWNlU3RvcmVTdGF0ZTIsIHdvcmtzcGFjZU5hbWU6IHN0cmluZywgaGFzVW5zYXZlZENoYW5nZXM6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBvcGVuZWRXaW5kb3dJbmRleCA9IGdldE9wZW5lZFdpbmRvd0luZGV4QnlXb3Jrc3BhY2Uod29ya3NwYWNlTmFtZSk7XG4gICAgaWYgKG9wZW5lZFdpbmRvd0luZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIHN0YXRlOyAvLyBuby1vcCBpZiB0aGUgd2luZG93IGRvZXMgbm90IGV4aXN0XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbmVkV2luZG93ID0geyAuLi5zdGF0ZS5vcGVuZWRXaW5kb3dzW29wZW5lZFdpbmRvd0luZGV4XSB9O1xuICAgIGNvbnN0IHdvcmtzcGFjZUluZGV4ID0gb3BlbmVkV2luZG93Lm9wZW5lZFdvcmtzcGFjZXMuZmluZEluZGV4KCh3KSA9PiB3LndvcmtzcGFjZU5hbWUgPT09IHdvcmtzcGFjZU5hbWUpO1xuXG4gICAgaWYgKHdvcmtzcGFjZUluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIHN0YXRlOyAvLyBuby1vcCBpZiB0aGUgd29ya3NwYWNlIGlzIG5vdCBmb3VuZFxuICAgIH1cblxuICAgIG9wZW5lZFdpbmRvdy5vcGVuZWRXb3Jrc3BhY2VzW3dvcmtzcGFjZUluZGV4XSA9IHtcbiAgICAgIC4uLm9wZW5lZFdpbmRvdy5vcGVuZWRXb3Jrc3BhY2VzW3dvcmtzcGFjZUluZGV4XSxcbiAgICAgIGhhc1Vuc2F2ZWRDaGFuZ2VzLFxuICAgIH07XG5cbiAgICBjb25zdCBvcGVuZWRXaW5kb3dzID0gWy4uLnN0YXRlLm9wZW5lZFdpbmRvd3NdO1xuICAgIG9wZW5lZFdpbmRvd3Nbb3BlbmVkV2luZG93SW5kZXhdID0gb3BlbmVkV2luZG93O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3BlbmVkV2luZG93cyxcbiAgICB9O1xuICB9LFxuICBzZXRXb3Jrc3BhY2VUaXRsZShzdGF0ZTogV29ya3NwYWNlU3RvcmVTdGF0ZTIsIHdvcmtzcGFjZU5hbWU6IHN0cmluZywgdGl0bGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBjb25zdCBuZXdXb3Jrc3BhY2VUaXRsZUJ5V29ya3NwYWNlTmFtZSA9IHsgLi4uc3RhdGUud29ya3NwYWNlVGl0bGVCeVdvcmtzcGFjZU5hbWUgfTtcblxuICAgIGlmICh0aXRsZSA9PT0gbnVsbCkge1xuICAgICAgZGVsZXRlIG5ld1dvcmtzcGFjZVRpdGxlQnlXb3Jrc3BhY2VOYW1lW3dvcmtzcGFjZU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdXb3Jrc3BhY2VUaXRsZUJ5V29ya3NwYWNlTmFtZVt3b3Jrc3BhY2VOYW1lXSA9IHRpdGxlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHdvcmtzcGFjZVRpdGxlQnlXb3Jrc3BhY2VOYW1lOiBuZXdXb3Jrc3BhY2VUaXRsZUJ5V29ya3NwYWNlTmFtZSxcbiAgICB9O1xuICB9LFxufSBzYXRpc2ZpZXMgQWN0aW9uczxXb3Jrc3BhY2VTdG9yZVN0YXRlMj47XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VXb3Jrc3BhY2UyU3RvcmUoKSB7XG4gIHJldHVybiB1c2VTdG9yZVdpdGhBY3Rpb25zKHdvcmtzcGFjZTJTdG9yZSwgd29ya3NwYWNlMlN0b3JlQWN0aW9ucyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVhY3QgQ29udGV4dCBjb250YWluaW5nIHByb3BzIHBhc3NlZCBpbnRvIGEgd29ya3NwYWNlLlxuICogVGhpcyBob29rIE1VU1QgYmUgY2FsbGVkIGluc2lkZSBhIGNoaWxkIG9mIDxXb3Jrc3BhY2UyPlxuICovXG5leHBvcnQgY29uc3QgdXNlV29ya3NwYWNlMkNvbnRleHQgPSAoKSA9PlxuICB1c2VDb250ZXh0PFdvcmtzcGFjZTJEZWZpbml0aW9uUHJvcHM+KFNpbmdsZVNwYUNvbnRleHQgYXMgdW5rbm93biBhcyBDb250ZXh0PFdvcmtzcGFjZTJEZWZpbml0aW9uUHJvcHM+KTtcblxuLyoqXG4gKiBAcmV0dXJucyBhIGxpc3Qgb2YgcmVnaXN0ZXJlZCB3b3Jrc3BhY2VzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVnaXN0ZXJlZFdvcmtzcGFjZTJOYW1lcyA9ICgpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHdvcmtzcGFjZTJTdG9yZS5nZXRTdGF0ZSgpLnJlZ2lzdGVyZWRXb3Jrc3BhY2VzQnlOYW1lKTtcbn07XG5cbmZ1bmN0aW9uIG5ld09wZW5lZFdvcmtzcGFjZSh3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHdvcmtzcGFjZVByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCk6IE9wZW5lZFdvcmtzcGFjZSB7XG4gIHJldHVybiB7XG4gICAgd29ya3NwYWNlTmFtZSxcbiAgICBwcm9wczogd29ya3NwYWNlUHJvcHMgPz8ge30sXG4gICAgaGFzVW5zYXZlZENoYW5nZXM6IGZhbHNlLFxuICAgIHV1aWQ6IHV1aWRWNCgpLFxuICB9O1xufVxuIl0sIm5hbWVzIjpbInVzZUNvbnRleHQiLCJTaW5nbGVTcGFDb250ZXh0IiwidjQiLCJ1dWlkVjQiLCJnZXRHcm91cEJ5V2luZG93TmFtZSIsImdldE9wZW5lZFdpbmRvd0luZGV4QnlXb3Jrc3BhY2UiLCJnZXRXaW5kb3dCeVdvcmtzcGFjZU5hbWUiLCJ3b3Jrc3BhY2UyU3RvcmUiLCJ1c2VTdG9yZVdpdGhBY3Rpb25zIiwic2hhbGxvd0VxdWFsIiwic2hvd01vZGFsIiwibGF1bmNoV29ya3NwYWNlR3JvdXAyIiwiZ3JvdXBOYW1lIiwiZ3JvdXBQcm9wcyIsIm9wZW5lZEdyb3VwIiwib2tUb0Nsb3NlV29ya3NwYWNlcyIsImdldFN0YXRlIiwiYXJlUHJvcHNDb21wYXRpYmxlIiwicHJvcHMiLCJwcm9tcHRGb3JDbG9zaW5nV29ya3NwYWNlcyIsInJlYXNvbiIsImV4cGxpY2l0Iiwic2V0U3RhdGUiLCJzdGF0ZSIsIm9wZW5lZFdpbmRvd3MiLCJjbG9zZVdvcmtzcGFjZUdyb3VwMiIsImRpc2NhcmRVbnNhdmVkQ2hhbmdlcyIsImxlbmd0aCIsImxhdW5jaFdvcmtzcGFjZTIiLCJ3b3Jrc3BhY2VOYW1lIiwid29ya3NwYWNlUHJvcHMiLCJ3aW5kb3dQcm9wcyIsInN0b3JlU3RhdGUiLCJ3aW5kb3dEZWYiLCJ3aW5kb3dOYW1lIiwiZ3JvdXBEZWYiLCJvcGVuZWRXaW5kb3dJbmRleCIsImlzV2luZG93QWxyZWFkeU9wZW5lZCIsIm9wZW5lZFdpbmRvdyIsImlzTW9zdFJlY2VudGx5T3BlbmVkV2luZG93SGlkZGVuIiwib3BlbmVkV29ya3NwYWNlcyIsIm9wZW5lZFdvcmtzcGFjZSIsInJlZ2lzdGVyZWRXb3Jrc3BhY2VzQnlOYW1lIiwiRXJyb3IiLCJuYW1lIiwibmV3T3BlbmVkV29ya3NwYWNlIiwibWF4aW1pemVkIiwiZmluZCIsInciLCJ3b3Jrc3BhY2UyU3RvcmVBY3Rpb25zIiwicmVzdG9yZVdpbmRvdyIsImZpbHRlciIsIl8iLCJpIiwiYSIsImIiLCJwcm9tcHRSZWFzb24iLCJnZXRBZmZlY3RlZFdvcmtzcGFjZXNJbldpbmRvdyIsIm9ubHlVcFRvVGhpc1dvcmtzcGFjZSIsInJldCIsImhhc1Vuc2F2ZWRDaGFuZ2VzIiwicHVzaCIsIndvcmtzcGFjZVRpdGxlQnlXb3Jrc3BhY2VOYW1lIiwiYWZmZWN0ZWRXb3Jrc3BhY2VzIiwiZmxhdE1hcCIsIndpbmRvdyIsIlByb21pc2UiLCJyZXNvbHZlIiwiZGlzcG9zZSIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIiwiYWZmZWN0ZWRXb3Jrc3BhY2VUaXRsZXMiLCJtYXAiLCJ3b3Jrc3BhY2UiLCJzZXRXaW5kb3dNYXhpbWl6ZWQiLCJmaW5kSW5kZXgiLCJjdXJyZW50V2luZG93IiwiaGlkZVdpbmRvdyIsImNsb3NlV29ya3NwYWNlIiwid29ya3NwYWNlSW5kZXgiLCJzbGljZSIsImhpZGRlbiIsIndhc01vc3RSZWNlbnRXaW5kb3ciLCJzcGxpY2UiLCJvcGVuQ2hpbGRXb3Jrc3BhY2UiLCJwYXJlbnRXb3Jrc3BhY2VOYW1lIiwiY2hpbGRXb3Jrc3BhY2VOYW1lIiwiY2hpbGRXb3Jrc3BhY2VQcm9wcyIsImNoaWxkV29ya3NwYWNlRGVmIiwicGFyZW50V29ya3NwYWNlRGVmIiwic2V0SGFzVW5zYXZlZENoYW5nZXMiLCJzZXRXb3Jrc3BhY2VUaXRsZSIsInRpdGxlIiwibmV3V29ya3NwYWNlVGl0bGVCeVdvcmtzcGFjZU5hbWUiLCJ1c2VXb3Jrc3BhY2UyU3RvcmUiLCJ1c2VXb3Jrc3BhY2UyQ29udGV4dCIsImdldFJlZ2lzdGVyZWRXb3Jrc3BhY2UyTmFtZXMiLCJPYmplY3QiLCJrZXlzIiwidXVpZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../framework/esm-styleguide/src/workspaces2/workspace2.ts\n");
1268
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ closeWorkspaceGroup2: () => (/* binding */ closeWorkspaceGroup2),\n/* harmony export */ getRegisteredWorkspace2Names: () => (/* binding */ getRegisteredWorkspace2Names),\n/* harmony export */ launchWorkspace2: () => (/* binding */ launchWorkspace2),\n/* harmony export */ launchWorkspaceGroup2: () => (/* binding */ launchWorkspaceGroup2),\n/* harmony export */ promptForClosingWorkspaces: () => (/* binding */ promptForClosingWorkspaces),\n/* harmony export */ useWorkspace2Context: () => (/* binding */ useWorkspace2Context),\n/* harmony export */ useWorkspace2Store: () => (/* binding */ useWorkspace2Store)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var single_spa_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! single-spa-react */ \"../../../node_modules/single-spa-react/lib/esm/single-spa-react.js\");\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! uuid */ \"../../../node_modules/uuid/dist/esm-browser/v4.js\");\n/* harmony import */ var _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @openmrs/esm-extensions */ \"../../framework/esm-extensions/dist/index.js\");\n/* harmony import */ var _openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @openmrs/esm-react-utils */ \"../../framework/esm-react-utils/dist/index.js\");\n/* harmony import */ var _openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @openmrs/esm-utils */ \"../../framework/esm-utils/dist/shallowEqual.js\");\n/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../modals */ \"../../framework/esm-styleguide/src/modals/index.tsx\");\nfunction _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_without_holes(arr) {\n if (Array.isArray(arr)) return _array_like_to_array(arr);\n}\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _non_iterable_spread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _object_spread_props(target, source) {\n source = source != null ? source : {};\n if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _to_consumable_array(arr) {\n return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n }, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(g && (g = 0, op[0] && (_ = 0)), _)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\n\n\n\n\n\n\n/**\n * Attempts to launch the specified workspace group with the given group props. Note that only one workspace group\n * may be opened at any given time. If a workspace group is already opened, calling `launchWorkspaceGroup2` with\n * either a different group name, or same group name but different incompatible props**, will result in prompting to\n * confirm closing workspaces. If the user confirms, the opened group, along with its windows (and their workspaces), is closed, and\n * the requested group is immediately opened.\n *\n * ** 2 sets of props are compatible if either one is nullish, or if they are shallow equal.\n * @experimental\n * @param groupName\n * @param groupProps\n * @returns a Promise that resolves to true if the specified workspace group with the specified group props\n * is successfully opened, or that it already is opened.\n */ function launchWorkspaceGroup2(groupName, groupProps) {\n return _async_to_generator(function() {\n var openedGroup, okToCloseWorkspaces;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n openedGroup = _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.getState().openedGroup;\n if (!openedGroup) return [\n 3,\n 3\n ];\n if (!(openedGroup.groupName !== groupName || !arePropsCompatible(openedGroup.props, groupProps))) return [\n 3,\n 2\n ];\n return [\n 4,\n promptForClosingWorkspaces({\n reason: 'CLOSE_WORKSPACE_GROUP',\n explicit: false\n })\n ];\n case 1:\n okToCloseWorkspaces = _state.sent();\n if (!okToCloseWorkspaces) {\n return [\n 2,\n false\n ];\n }\n return [\n 3,\n 3\n ];\n case 2:\n // no-op, group with group props is already opened\n return [\n 2,\n true\n ];\n case 3:\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n openedGroup: {\n groupName: groupName,\n props: groupProps\n },\n openedWindows: []\n });\n });\n return [\n 2,\n true\n ];\n }\n });\n })();\n}\n/**\n * Closes the workspace group that is currently opened. Note that only one workspace group\n * may be opened at any given time\n * @experimental\n * @param discardUnsavedChanges If true, then the workspace group is forced closed, with no prompt\n * for confirmation for unsaved changes in any opened workspace. This should be used sparingly\n * for clean-up purpose, ex: when exiting an app.\n * @returns a Promise that resolves to true if there is no opened group to begin with or we successfully closed\n * the opened group; false otherwise.\n */ function closeWorkspaceGroup2(discardUnsavedChanges) {\n return _async_to_generator(function() {\n var state, openedGroup, openedWindows, okToCloseWorkspaces, _tmp;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n state = _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.getState();\n openedGroup = state.openedGroup, openedWindows = state.openedWindows;\n if (!openedGroup) return [\n 3,\n 4\n ];\n if (!(openedWindows.length > 0)) return [\n 3,\n 3\n ];\n _tmp = discardUnsavedChanges;\n if (_tmp) return [\n 3,\n 2\n ];\n return [\n 4,\n promptForClosingWorkspaces({\n reason: 'CLOSE_WORKSPACE_GROUP',\n explicit: true\n })\n ];\n case 1:\n _tmp = _state.sent();\n _state.label = 2;\n case 2:\n okToCloseWorkspaces = _tmp;\n if (!okToCloseWorkspaces) {\n return [\n 2,\n false\n ];\n }\n _state.label = 3;\n case 3:\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n openedGroup: null,\n openedWindows: []\n });\n });\n return [\n 2,\n true\n ];\n case 4:\n // no openedGroup with begin with, return true\n return [\n 2,\n true\n ];\n }\n });\n })();\n}\n/**\n * Attempts to launch the specified workspace with the given workspace props. This also implicitly opens\n * the workspace window to which the workspace belongs (if it's not opened already),\n * and the workspace group to which the window belongs (if it's not opened already).\n *\n * When calling `launchWorkspace2`, we need to also pass in the workspace props. While not required,\n * we can also pass in the window props (shared by other workspaces in the window) and the group props\n * (shared by all windows and their workspaces). Omitting the window props or the group props[^1] means the caller\n * explicitly does not care what the current window props and group props are, and that they may be set\n * by other actions (like calling `launchWorkspace2` on a different workspace with those props passed in)\n * at a later time.\n *\n * If there is already an opened workspace group, and it's not the group the workspace belongs to\n * or has incompatible[^2] group props, then we prompt the user to close the group (and its windows and their workspaces).\n * On user confirm, the existing opened group is closed and the new workspace, along with its window and its group,\n * is opened.\n *\n * If the window is already opened, but with incompatible window props, we prompt the user to close\n * the window (and all its opened workspaces), and reopen the window with (only) the newly requested workspace.\n *\n * If the workspace is already opened, but with incompatible workspace props, we also prompt the user to close\n * the **window** (and all its opened workspaces), and reopen the window with (only) the newly requested workspace.\n * This is true regardless of whether the already opened workspace has any child workspaces.\n *\n * Note that calling this function *never* results in creating a child workspace in the affected window.\n * To do so, we need to call `launchChildWorkspace` instead.\n *\n * [^1] Omitting window or group props is useful for workspaces that don't have ties to the window or group \"context\" (props).\n * For example, in the patient chart, the visit notes / clinical forms / order basket action menu button all share\n * a \"group context\" of the current visit. However, the \"patient list\" action menu button does not need to share that group\n * context, so opening that workspace should not need to cause other workspaces / windows / groups to potentially close.\n * The \"patient search\" workspace in the queues and ward apps is another example.\n *\n * [^2] 2 sets of props are compatible if either one is nullish, or if they are shallow equal.\n * @experimental\n */ function launchWorkspace2(workspaceName) {\n var workspaceProps = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null, windowProps = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null, groupProps = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : null;\n return _async_to_generator(function() {\n var storeState, windowDef, openedGroup, windowName, groupDef, openedWindowIndex, isWindowAlreadyOpened, okToCloseWorkspaces, _storeState_openedGroup, openedWindow, _storeState_openedGroup_props, groupProps1, isMostRecentlyOpenedWindowHidden, openedWorkspaces, openedWorkspace, okToCloseWorkspaces1, _storeState_openedGroup1, _storeState_openedGroup_props1, _openedWindow_props, okToCloseWorkspaces2, _storeState_openedGroup2, okToCloseWorkspaces3, _storeState_openedGroup3, _ref, _storeState_openedGroup4, _ref1;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n storeState = _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.getState();\n if (!storeState.registeredWorkspacesByName[workspaceName]) {\n throw new Error(\"Unable to launch workspace \".concat(workspaceName, \". Workspace is not registered\"));\n }\n windowDef = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.getWindowByWorkspaceName)(workspaceName);\n if (!windowDef) {\n throw new Error(\"Unable to launch workspace \".concat(workspaceName, \". Workspace is not registered to a workspace window\"));\n }\n openedGroup = storeState.openedGroup;\n windowName = windowDef.name;\n groupDef = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.getGroupByWindowName)(windowName);\n if (!groupDef) {\n throw new Error(\"Unable to launch workspace \".concat(workspaceName, \". Workspace window \").concat(windowDef.name, \" is not registered to a workspace group\"));\n }\n openedWindowIndex = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.getOpenedWindowIndexByWorkspace)(workspaceName);\n isWindowAlreadyOpened = openedWindowIndex >= 0;\n if (!(openedGroup && (openedGroup.groupName !== groupDef.name || !arePropsCompatible(openedGroup.props, groupProps)))) return [\n 3,\n 2\n ];\n return [\n 4,\n promptForClosingWorkspaces({\n reason: 'CLOSE_WORKSPACE_GROUP',\n explicit: true\n })\n ];\n case 1:\n okToCloseWorkspaces = _state.sent();\n if (okToCloseWorkspaces) {\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(_object_spread_props(_object_spread({}, storeState), {\n openedGroup: {\n groupName: groupDef.name,\n props: groupProps\n },\n openedWindows: [\n // discard all opened windows, open a new one with the requested workspace\n // most recently opened action appended to the end\n {\n windowName: windowName,\n openedWorkspaces: [\n newOpenedWorkspace(workspaceName, workspaceProps)\n ],\n props: windowProps,\n maximized: false\n }\n ],\n isMostRecentlyOpenedWindowHidden: false\n }));\n return [\n 2,\n true\n ];\n } else {\n return [\n 2,\n false\n ];\n }\n // removed by dead control flow\n{}\n case 2:\n if (!isWindowAlreadyOpened) return [\n 3,\n 9\n ];\n openedWindow = storeState.openedWindows[openedWindowIndex];\n groupProps1 = (_storeState_openedGroup_props = (_storeState_openedGroup = storeState.openedGroup) === null || _storeState_openedGroup === void 0 ? void 0 : _storeState_openedGroup.props) !== null && _storeState_openedGroup_props !== void 0 ? _storeState_openedGroup_props : {};\n isMostRecentlyOpenedWindowHidden = storeState.isMostRecentlyOpenedWindowHidden;\n openedWorkspaces = openedWindow.openedWorkspaces;\n if (!arePropsCompatible(openedWindow.props, windowProps)) return [\n 3,\n 6\n ];\n // this case is tricky, this results in restoring the window if:\n // 1. the workspace is opened (but not necessarily as a leaf workspace)\n // 2. the props of the opened workspace is same as workspace props (from the function input)\n //\n // Otherwise, we close all workspaces in this window, and open this newly requested one\n openedWorkspace = openedWorkspaces.find(function(w) {\n return w.workspaceName === workspaceName;\n });\n if (!(openedWorkspace && arePropsCompatible(openedWorkspace.props, workspaceProps))) return [\n 3,\n 3\n ];\n // restore the window if it is hidden or not the most recently opened one\n if (isMostRecentlyOpenedWindowHidden || openedWindowIndex !== storeState.openedWindows.length - 1) {\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(workspace2StoreActions.restoreWindow(storeState, windowName));\n }\n return [\n 2,\n true\n ];\n case 3:\n return [\n 4,\n promptForClosingWorkspaces({\n reason: 'CLOSE_WORKSPACE',\n explicit: false,\n windowName: windowName,\n workspaceName: workspaceName\n })\n ];\n case 4:\n okToCloseWorkspaces1 = _state.sent();\n if (okToCloseWorkspaces1) {\n ;\n ;\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(_object_spread_props(_object_spread({}, storeState), {\n openedGroup: {\n groupName: groupDef.name,\n props: (_storeState_openedGroup_props1 = storeState === null || storeState === void 0 ? void 0 : (_storeState_openedGroup1 = storeState.openedGroup) === null || _storeState_openedGroup1 === void 0 ? void 0 : _storeState_openedGroup1.props) !== null && _storeState_openedGroup_props1 !== void 0 ? _storeState_openedGroup_props1 : groupProps1\n },\n openedWindows: _to_consumable_array(storeState.openedWindows.filter(function(_, i) {\n return i !== openedWindowIndex;\n })).concat([\n // most recently opened workspace at the end of the array\n {\n windowName: windowName,\n openedWorkspaces: [\n newOpenedWorkspace(workspaceName, workspaceProps)\n ],\n props: (_openedWindow_props = openedWindow === null || openedWindow === void 0 ? void 0 : openedWindow.props) !== null && _openedWindow_props !== void 0 ? _openedWindow_props : windowProps,\n maximized: false\n }\n ]),\n isMostRecentlyOpenedWindowHidden: false\n }));\n return [\n 2,\n true\n ];\n } else {\n return [\n 2,\n false\n ];\n }\n // removed by dead control flow\n{}\n case 5:\n return [\n 3,\n 8\n ];\n case 6:\n return [\n 4,\n promptForClosingWorkspaces({\n reason: 'CLOSE_WINDOW',\n explicit: false,\n windowName: windowName\n })\n ];\n case 7:\n okToCloseWorkspaces2 = _state.sent();\n if (okToCloseWorkspaces2) {\n ;\n // discard the openedWindows element at openedWindowIndex\n // and create a new one with the requested workspace opened\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(_object_spread_props(_object_spread({}, storeState), {\n openedGroup: {\n groupName: groupDef.name,\n props: groupProps1 !== null && groupProps1 !== void 0 ? groupProps1 : storeState === null || storeState === void 0 ? void 0 : (_storeState_openedGroup2 = storeState.openedGroup) === null || _storeState_openedGroup2 === void 0 ? void 0 : _storeState_openedGroup2.props\n },\n openedWindows: _to_consumable_array(storeState.openedWindows.filter(function(_, i) {\n return i !== openedWindowIndex;\n })).concat([\n // most recently opened workspace at the end of the array\n {\n windowName: windowName,\n openedWorkspaces: [\n newOpenedWorkspace(workspaceName, workspaceProps)\n ],\n props: windowProps,\n maximized: false\n }\n ]),\n isMostRecentlyOpenedWindowHidden: false\n }));\n return [\n 2,\n true\n ];\n } else {\n return [\n 2,\n false\n ];\n }\n // removed by dead control flow\n{}\n case 8:\n return [\n 3,\n 12\n ];\n case 9:\n if (!(groupDef.persistence == 'closable')) return [\n 3,\n 11\n ];\n return [\n 4,\n promptForClosingWorkspaces({\n reason: 'CLOSE_OTHER_WINDOWS',\n explicit: false,\n windowNameToSpare: windowDef.name\n })\n ];\n case 10:\n okToCloseWorkspaces3 = _state.sent();\n if (okToCloseWorkspaces3) {\n ;\n ;\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(_object_spread_props(_object_spread({}, storeState), {\n openedGroup: {\n groupName: groupDef.name,\n props: (_ref = groupProps !== null && groupProps !== void 0 ? groupProps : storeState === null || storeState === void 0 ? void 0 : (_storeState_openedGroup3 = storeState.openedGroup) === null || _storeState_openedGroup3 === void 0 ? void 0 : _storeState_openedGroup3.props) !== null && _ref !== void 0 ? _ref : null\n },\n openedWindows: [\n {\n windowName: windowName,\n openedWorkspaces: [\n newOpenedWorkspace(workspaceName, workspaceProps)\n ],\n props: windowProps,\n maximized: false\n }\n ],\n isMostRecentlyOpenedWindowHidden: false\n }));\n return [\n 2,\n true\n ];\n } else {\n return [\n 2,\n false\n ];\n }\n // removed by dead control flow\n{}\n case 11:\n _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.setState(_object_spread_props(_object_spread({}, storeState), {\n openedGroup: {\n groupName: groupDef.name,\n props: (_ref1 = groupProps !== null && groupProps !== void 0 ? groupProps : storeState === null || storeState === void 0 ? void 0 : (_storeState_openedGroup4 = storeState.openedGroup) === null || _storeState_openedGroup4 === void 0 ? void 0 : _storeState_openedGroup4.props) !== null && _ref1 !== void 0 ? _ref1 : null\n },\n openedWindows: _to_consumable_array(storeState.openedWindows).concat([\n // most recently opened workspace at the end of the array\n {\n windowName: windowName,\n openedWorkspaces: [\n newOpenedWorkspace(workspaceName, workspaceProps)\n ],\n props: windowProps,\n maximized: false\n }\n ]),\n isMostRecentlyOpenedWindowHidden: false\n }));\n return [\n 2,\n true\n ];\n case 12:\n return [\n 2\n ];\n }\n });\n })();\n}\n/**\n * When we launch a workspace, we may pass in workspace / windows / group props. If the workspace or\n * window or group is currently opened, we have to check whether the current props are compatible with\n * the passed in props. 2 props A and B are compatible if:\n * either one is nullish (because this indicates that the caller does not care about prop incompatibility)\n * neither is nullish, and A and B are shallow equal.\n * @param a props\n * @param b props\n * @returns whether props a and b are compatible\n */ function arePropsCompatible(a, b) {\n if (a == null || b == null) {\n return true;\n }\n return (0,_openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_5__.shallowEqual)(a, b);\n}\n/**\n * A user can perform actions that explicitly result in closing workspaces\n * (such that clicking the 'X' button for the workspace or workspace group), or\n * implicitly (by opening a workspace with different props than the one that is already opened).\n * Calls to closeWorkspace2() or closeWorkspaceGroup2() are considered explicit, while calls\n * to launchWorkspace2() or launchWorkspaceGroup2() are considered implicit.\n *\n * This function prompts the user for confirmation to close workspaces with a modal dialog.\n * When the closing is explicit, it prompts for confirmation for affected workspaces with unsaved changes.\n * When the closing is implicit, it prompts for confirmation for all affected workspaces, regardless of\n * whether they have unsaved changes.\n * @experimental\n * @param promptReason\n * @returns a Promise that resolves to true if the user confirmed closing the workspaces; false otherwise.\n */ function promptForClosingWorkspaces(promptReason) {\n // if onlyUpToThisWorkspace is provided, we will only loop till we hit that workspace\n function getAffectedWorkspacesInWindow(openedWindow, onlyUpToThisWorkspace) {\n var ret = [];\n for(var i = openedWindow.openedWorkspaces.length - 1; i >= 0; i--){\n var openedWorkspace = openedWindow.openedWorkspaces[i];\n if (openedWorkspace.hasUnsavedChanges) {\n ret.push(openedWorkspace);\n }\n if (onlyUpToThisWorkspace && openedWorkspace.workspaceName === onlyUpToThisWorkspace) {\n break;\n }\n }\n return ret;\n }\n var _workspace2Store_getState = _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.getState(), openedWindows = _workspace2Store_getState.openedWindows, workspaceTitleByWorkspaceName = _workspace2Store_getState.workspaceTitleByWorkspaceName;\n var affectedWorkspaces = [];\n switch(promptReason.reason){\n case 'CLOSE_WORKSPACE_GROUP':\n {\n affectedWorkspaces = openedWindows.flatMap(function(window) {\n return getAffectedWorkspacesInWindow(window);\n });\n break;\n }\n case 'CLOSE_WINDOW':\n {\n var openedWindow = openedWindows.find(function(window) {\n return window.windowName === promptReason.windowName;\n });\n if (!openedWindow) {\n throw new Error(\"Window \".concat(promptReason.windowName, \" not found in opened windows.\"));\n }\n affectedWorkspaces = getAffectedWorkspacesInWindow(openedWindow);\n break;\n }\n case 'CLOSE_WORKSPACE':\n {\n var openedWindow1 = openedWindows.find(function(window) {\n return window.windowName === promptReason.windowName;\n });\n if (!openedWindow1) {\n throw new Error(\"Window \".concat(promptReason.windowName, \" not found in opened windows.\"));\n }\n affectedWorkspaces = getAffectedWorkspacesInWindow(openedWindow1, promptReason.workspaceName);\n break;\n }\n case 'CLOSE_OTHER_WINDOWS':\n {\n var windowsToClose = openedWindows.filter(function(window) {\n return window.windowName !== promptReason.windowNameToSpare;\n });\n affectedWorkspaces = windowsToClose.flatMap(function(w) {\n return getAffectedWorkspacesInWindow(w);\n });\n break;\n }\n }\n if (affectedWorkspaces.length === 0) {\n return Promise.resolve(true); // no unsaved changes, no need to prompt\n }\n return new Promise(function(resolve) {\n var dispose = (0,_modals__WEBPACK_IMPORTED_MODULE_4__.showModal)('workspace2-close-prompt', {\n onConfirm: function() {\n dispose();\n resolve(true);\n },\n onCancel: function() {\n dispose();\n resolve(false);\n },\n affectedWorkspaceTitles: affectedWorkspaces.map(function(workspace) {\n return workspaceTitleByWorkspaceName[workspace.workspaceName];\n })\n });\n });\n}\nvar workspace2StoreActions = {\n setWindowMaximized: function setWindowMaximized(state, windowName, maximized) {\n var openedWindowIndex = state.openedWindows.findIndex(function(a) {\n return a.windowName === windowName;\n });\n var openedWindows = _to_consumable_array(state.openedWindows);\n var currentWindow = _object_spread_props(_object_spread({}, openedWindows[openedWindowIndex]), {\n maximized: maximized\n });\n openedWindows[openedWindowIndex] = currentWindow;\n return _object_spread_props(_object_spread({}, state), {\n openedWindows: openedWindows\n });\n },\n // hides the most recently opened window (all other opened windows are implicitly hidden)\n hideWindow: function hideWindow(state) {\n return _object_spread_props(_object_spread({}, state), {\n isMostRecentlyOpenedWindowHidden: true\n });\n },\n restoreWindow: function restoreWindow(state, windowName) {\n var openedWindowIndex = state.openedWindows.findIndex(function(a) {\n return a.windowName === windowName;\n });\n var currentWindow = state.openedWindows[openedWindowIndex];\n var openedWindows = _to_consumable_array(state.openedWindows.filter(function(_, i) {\n return i !== openedWindowIndex;\n })).concat([\n currentWindow\n ]);\n return _object_spread_props(_object_spread({}, state), {\n openedWindows: openedWindows,\n isMostRecentlyOpenedWindowHidden: false\n });\n },\n closeWorkspace: function closeWorkspace(state, workspaceName) {\n var openedWindowIndex = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.getOpenedWindowIndexByWorkspace)(workspaceName);\n if (openedWindowIndex < 0) {\n return state; // no-op if the window does not exist\n }\n var window = _object_spread({}, state.openedWindows[openedWindowIndex]);\n var workspaceIndex = window.openedWorkspaces.findIndex(function(w) {\n return w.workspaceName === workspaceName;\n });\n var openedWindows = _to_consumable_array(state.openedWindows);\n // close all children of the input workspace as well\n window.openedWorkspaces = window.openedWorkspaces.slice(0, workspaceIndex);\n var hidden = state.isMostRecentlyOpenedWindowHidden;\n if (window.openedWorkspaces.length === 0) {\n var wasMostRecentWindow = openedWindowIndex === state.openedWindows.length - 1;\n // if no workspaces left, remove the window\n openedWindows.splice(openedWindowIndex, 1);\n // If we removed the most recent window and there are still windows left,\n // the new most recent window should be shown\n if (wasMostRecentWindow && openedWindows.length > 0) {\n hidden = false;\n }\n } else {\n // if there are still workspaces left, just update the window\n openedWindows[openedWindowIndex] = window;\n }\n return _object_spread_props(_object_spread({}, state), {\n openedWindows: openedWindows,\n isMostRecentlyOpenedWindowHidden: hidden\n });\n },\n openChildWorkspace: function openChildWorkspace(state, parentWorkspaceName, childWorkspaceName, childWorkspaceProps) {\n var childWorkspaceDef = state.registeredWorkspacesByName[childWorkspaceName];\n if (!childWorkspaceDef) {\n throw new Error('No workspace named \"'.concat(childWorkspaceName, '\" registered'));\n }\n var parentWorkspaceDef = state.registeredWorkspacesByName[parentWorkspaceName];\n if (!parentWorkspaceDef) {\n throw new Error('No workspace named \"'.concat(parentWorkspaceName, '\" registered'));\n }\n if (parentWorkspaceDef.window !== childWorkspaceDef.window) {\n throw new Error(\"Child workspace \".concat(childWorkspaceName, \" does not belong to the same workspace window as parent workspace \").concat(parentWorkspaceName));\n }\n // as the request workspace should be a child workspace, the corresponding window\n // to contain the workspace should already be opened\n var openedWindowIndex = state.openedWindows.findIndex(function(window) {\n return window.windowName === childWorkspaceDef.window;\n });\n if (openedWindowIndex == -1) {\n throw new Error(\"Cannot open child workspace \".concat(childWorkspaceName, \" as window \").concat(childWorkspaceDef.window, \" is not opened\"));\n }\n var openedWindow = state.openedWindows[openedWindowIndex];\n var openedWorkspaces = openedWindow.openedWorkspaces;\n if (openedWorkspaces[openedWorkspaces.length - 1].workspaceName !== parentWorkspaceName) {\n throw new Error(\"Cannot open child workspace \".concat(childWorkspaceName, \" from parent workspace \").concat(parentWorkspaceName, \" as the parent is not the most recently opened workspace within the workspace window\"));\n }\n return {\n openedWindows: state.openedWindows.map(function(w, i) {\n if (i == openedWindowIndex) {\n return _object_spread_props(_object_spread({}, w), {\n openedWorkspaces: _to_consumable_array(w.openedWorkspaces).concat([\n newOpenedWorkspace(childWorkspaceName, childWorkspaceProps)\n ])\n });\n } else {\n return w;\n }\n })\n };\n },\n setHasUnsavedChanges: function setHasUnsavedChanges(state, workspaceName, hasUnsavedChanges) {\n var openedWindowIndex = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.getOpenedWindowIndexByWorkspace)(workspaceName);\n if (openedWindowIndex < 0) {\n return state; // no-op if the window does not exist\n }\n var openedWindow = _object_spread({}, state.openedWindows[openedWindowIndex]);\n var workspaceIndex = openedWindow.openedWorkspaces.findIndex(function(w) {\n return w.workspaceName === workspaceName;\n });\n if (workspaceIndex < 0) {\n return state; // no-op if the workspace is not found\n }\n openedWindow.openedWorkspaces[workspaceIndex] = _object_spread_props(_object_spread({}, openedWindow.openedWorkspaces[workspaceIndex]), {\n hasUnsavedChanges: hasUnsavedChanges\n });\n var openedWindows = _to_consumable_array(state.openedWindows);\n openedWindows[openedWindowIndex] = openedWindow;\n return _object_spread_props(_object_spread({}, state), {\n openedWindows: openedWindows\n });\n },\n setWorkspaceTitle: function setWorkspaceTitle(state, workspaceName, title) {\n var newWorkspaceTitleByWorkspaceName = _object_spread({}, state.workspaceTitleByWorkspaceName);\n if (title === null) {\n delete newWorkspaceTitleByWorkspaceName[workspaceName];\n } else {\n newWorkspaceTitleByWorkspaceName[workspaceName] = title;\n }\n return _object_spread_props(_object_spread({}, state), {\n workspaceTitleByWorkspaceName: newWorkspaceTitleByWorkspaceName\n });\n }\n};\nfunction useWorkspace2Store() {\n return (0,_openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_3__.useStoreWithActions)(_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store, workspace2StoreActions);\n}\n/**\n * Returns the react Context containing props passed into a workspace.\n * This hook MUST be called inside a child of <Workspace2>\n */ var useWorkspace2Context = function() {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(single_spa_react__WEBPACK_IMPORTED_MODULE_1__.SingleSpaContext);\n};\n/**\n * @returns a list of registered workspaces.\n */ var getRegisteredWorkspace2Names = function() {\n return Object.keys(_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_2__.workspace2Store.getState().registeredWorkspacesByName);\n};\nfunction newOpenedWorkspace(workspaceName, workspaceProps) {\n return {\n workspaceName: workspaceName,\n props: workspaceProps !== null && workspaceProps !== void 0 ? workspaceProps : {},\n hasUnsavedChanges: false,\n uuid: (0,uuid__WEBPACK_IMPORTED_MODULE_6__[\"default\"])()\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1zdHlsZWd1aWRlL3NyYy93b3Jrc3BhY2VzMi93b3Jrc3BhY2UyLnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWlEO0FBQ0c7QUFDaEI7QUFTSDtBQUM0QztBQUMzQjtBQUNaO0FBR3RDOzs7Ozs7Ozs7Ozs7O0NBYUMsR0FDTSxTQUFlVyxzQkFDcEJDLFNBQWlCLEVBQ2pCQyxVQUE2Qjs7WUFFckJDLGFBR0VDOzs7O29CQUhGRCxjQUFnQlAsb0VBQWVBLENBQUNTLFFBQVEsR0FBeENGO3lCQUNKQSxhQUFBQTs7Ozt5QkFDRUEsQ0FBQUEsWUFBWUYsU0FBUyxLQUFLQSxhQUFhLENBQUNLLG1CQUFtQkgsWUFBWUksS0FBSyxFQUFFTCxXQUFVLEdBQXhGQzs7OztvQkFDMEI7O3dCQUFNSywyQkFBMkI7NEJBQzNEQyxRQUFROzRCQUNSQyxVQUFVO3dCQUNaOzs7b0JBSE1OLHNCQUFzQjtvQkFJNUIsSUFBSSxDQUFDQSxxQkFBcUI7d0JBQ3hCOzs0QkFBTzs7b0JBQ1Q7Ozs7OztvQkFHQSxrREFBa0Q7b0JBQ2xEOzt3QkFBTzs7O29CQUlYUixvRUFBZUEsQ0FBQ2UsUUFBUSxDQUFDLFNBQUNDOytCQUFXLHdDQUNoQ0E7NEJBQ0hULGFBQWE7Z0NBQ1hGLFdBQUFBO2dDQUNBTSxPQUFPTDs0QkFDVDs0QkFDQVcsZUFBZSxFQUFFOzs7b0JBR25COzt3QkFBTzs7OztJQUNUOztBQUVBOzs7Ozs7Ozs7Q0FTQyxHQUNNLFNBQWVDLHFCQUFxQkMscUJBQStCOztZQUNsRUgsT0FDRVQsYUFBYVUsZUFHWFQ7Ozs7b0JBSkpRLFFBQVFoQixvRUFBZUEsQ0FBQ1MsUUFBUTtvQkFDOUJGLGNBQStCUyxNQUEvQlQsYUFBYVUsZ0JBQWtCRCxNQUFsQkM7eUJBQ2pCVixhQUFBQTs7Ozt5QkFDRVUsQ0FBQUEsY0FBY0csTUFBTSxHQUFHLElBQXZCSDs7OzsyQkFFQUU7OEJBQUFBOzs7O29CQUNDOzt3QkFBTVAsMkJBQTJCOzRCQUFFQyxRQUFROzRCQUF5QkMsVUFBVTt3QkFBSzs7OzJCQUFuRjs7O29CQUZHTjtvQkFHTixJQUFJLENBQUNBLHFCQUFxQjt3QkFDeEI7OzRCQUFPOztvQkFDVDs7O29CQUVGUixvRUFBZUEsQ0FBQ2UsUUFBUSxDQUFDLFNBQUNDOytCQUFXLHdDQUNoQ0E7NEJBQ0hULGFBQWE7NEJBQ2JVLGVBQWUsRUFBRTs7O29CQUVuQjs7d0JBQU87OztvQkFHVCw4Q0FBOEM7b0JBQzlDOzt3QkFBTzs7OztJQUNUOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1DQyxHQUNNLFNBQWVJLGlCQUtwQkMsYUFBcUI7UUFDckJDLGlCQUFBQSxpRUFBd0MsTUFDeENDLGNBQUFBLGlFQUFrQyxNQUNsQ2xCLGFBQUFBLGlFQUErQjs7WUFFekJtQixZQUtBQyxXQUtFbkIsYUFDTW9CLFlBQ1JDLFVBT0FDLG1CQUNBQyx1QkFJRXRCLHFCQTBCYWlCLHlCQURiTSxjQUNhTiwrQkFBYm5CLGFBQ0EwQixrQ0FDRUMsa0JBUUFDLGlCQVFFMUIsc0JBV09pQiwwQkFBQUEsZ0NBUUVNLHFCQVlYdkIsc0JBWXFCaUIsMEJBb0J2QmpCLHNCQVVxQmlCLDBCQUFkbkIsTUFxQlltQiwwQkFBZG5COzs7O29CQWxLUG1CLGFBQWF6QixvRUFBZUEsQ0FBQ1MsUUFBUTtvQkFFM0MsSUFBSSxDQUFDZ0IsV0FBV1UsMEJBQTBCLENBQUNiLGNBQWMsRUFBRTt3QkFDekQsTUFBTSxJQUFJYyxNQUFNLDhCQUE0QyxPQUFkZCxlQUFjO29CQUM5RDtvQkFDTUksWUFBWTNCLGlGQUF3QkEsQ0FBQ3VCO29CQUMzQyxJQUFJLENBQUNJLFdBQVc7d0JBQ2QsTUFBTSxJQUFJVSxNQUFNLDhCQUE0QyxPQUFkZCxlQUFjO29CQUM5RDtvQkFFUWYsY0FBZ0JrQixXQUFoQmxCO29CQUNNb0IsYUFBZUQsVUFBckJXO29CQUNGVCxXQUFXL0IsNkVBQW9CQSxDQUFDOEI7b0JBQ3RDLElBQUksQ0FBQ0MsVUFBVTt3QkFDYixNQUFNLElBQUlRLE1BQ1IsOEJBQWlFVixPQUFuQ0osZUFBYyx1QkFBb0MsT0FBZkksVUFBVVcsSUFBSSxFQUFDO29CQUVwRjtvQkFFTVIsb0JBQW9CL0Isd0ZBQStCQSxDQUFDd0I7b0JBQ3BEUSx3QkFBd0JELHFCQUFxQjt5QkFHL0N0QixDQUFBQSxlQUFnQkEsQ0FBQUEsWUFBWUYsU0FBUyxLQUFLdUIsU0FBU1MsSUFBSSxJQUFJLENBQUMzQixtQkFBbUJILFlBQVlJLEtBQUssRUFBRUwsV0FBVSxDQUFDLEdBQTdHQzs7OztvQkFDMEI7O3dCQUFNSywyQkFBMkI7NEJBQUVDLFFBQVE7NEJBQXlCQyxVQUFVO3dCQUFLOzs7b0JBQXpHTixzQkFBc0I7b0JBQzVCLElBQUlBLHFCQUFxQjt3QkFDdkJSLG9FQUFlQSxDQUFDZSxRQUFRLENBQUMsd0NBQ3BCVTs0QkFDSGxCLGFBQWE7Z0NBQ1hGLFdBQVd1QixTQUFTUyxJQUFJO2dDQUN4QjFCLE9BQU9MOzRCQUNUOzRCQUNBVyxhQUFhO2dDQUNYLDBFQUEwRTtnQ0FDMUUsa0RBQWtEO2dDQUNsRDtvQ0FDRVUsWUFBWUE7b0NBQ1pNLGdCQUFnQjt3Q0FBR0ssbUJBQW1CaEIsZUFBZUM7O29DQUNyRFosT0FBT2E7b0NBQ1BlLFdBQVc7Z0NBQ2I7OzRCQUVGUCxrQ0FBa0M7O3dCQUVwQzs7NEJBQU87O29CQUNULE9BQU87d0JBQ0w7OzRCQUFPOztvQkFDVDs7Ozt5QkFDU0YsdUJBQUFBOzs7O29CQUNIQyxlQUFlTixXQUFXUixhQUFhLENBQUNZLGtCQUFrQjtvQkFDMUR2QixjQUFhbUIsQ0FBQUEsaUNBQUFBLDBCQUFBQSxXQUFXbEIsV0FBVyxjQUF0QmtCLDhDQUFBQSx3QkFBd0JkLEtBQUssY0FBN0JjLDJDQUFBQSxnQ0FBaUMsQ0FBQztvQkFDL0NPLG1DQUFtQ1AsV0FBV08sZ0NBQWdDO29CQUM1RUMsbUJBQXFCRixhQUFyQkU7eUJBRUp2QixtQkFBbUJxQixhQUFhcEIsS0FBSyxFQUFFYSxjQUF2Q2Q7Ozs7b0JBQ0YsZ0VBQWdFO29CQUNoRSx1RUFBdUU7b0JBQ3ZFLDRGQUE0RjtvQkFDNUYsRUFBRTtvQkFDRix1RkFBdUY7b0JBQ2pGd0Isa0JBQWtCRCxpQkFBaUJPLElBQUksQ0FBQyxTQUFDQzsrQkFBTUEsRUFBRW5CLGFBQWEsS0FBS0E7O3lCQUNyRVksQ0FBQUEsbUJBQW1CeEIsbUJBQW1Cd0IsZ0JBQWdCdkIsS0FBSyxFQUFFWSxlQUFjLEdBQTNFVzs7OztvQkFDRix5RUFBeUU7b0JBQ3pFLElBQUlGLG9DQUFvQ0gsc0JBQXNCSixXQUFXUixhQUFhLENBQUNHLE1BQU0sR0FBRyxHQUFHO3dCQUNqR3BCLG9FQUFlQSxDQUFDZSxRQUFRLENBQUMyQix1QkFBdUJDLGFBQWEsQ0FBQ2xCLFlBQVlFO29CQUM1RTtvQkFDQTs7d0JBQU87OztvQkFFcUI7O3dCQUFNZiwyQkFBMkI7NEJBQzNEQyxRQUFROzRCQUNSQyxVQUFVOzRCQUNWYSxZQUFBQTs0QkFDQUwsZUFBQUE7d0JBQ0Y7OztvQkFMTWQsdUJBQXNCO29CQU01QixJQUFJQSxzQkFBcUI7Ozt3QkFDdkJSLG9FQUFlQSxDQUFDZSxRQUFRLENBQUMsd0NBQ3BCVTs0QkFDSGxCLGFBQWE7Z0NBQ1hGLFdBQVd1QixTQUFTUyxJQUFJO2dDQUN4QjFCLE9BQU9jLENBQUFBLGlDQUFBQSx1QkFBQUEsa0NBQUFBLDJCQUFBQSxXQUFZbEIsV0FBVyxjQUF2QmtCLCtDQUFBQSx5QkFBeUJkLEtBQUssY0FBOUJjLDRDQUFBQSxpQ0FBa0NuQjs0QkFDM0M7NEJBQ0FXLGVBQWUscUJBQ1ZRLFdBQVdSLGFBQWEsQ0FBQzJCLE1BQU0sQ0FBQyxTQUFDQyxHQUFHQzt1Q0FBTUEsTUFBTWpCOztnQ0FDbkQseURBQXlEO2dDQUN6RDtvQ0FDRUYsWUFBWUE7b0NBQ1pNLGdCQUFnQjt3Q0FBR0ssbUJBQW1CaEIsZUFBZUM7O29DQUNyRFosT0FBT29CLENBQUFBLHNCQUFBQSx5QkFBQUEsbUNBQUFBLGFBQWNwQixLQUFLLGNBQW5Cb0IsaUNBQUFBLHNCQUF1QlA7b0NBQzlCZSxXQUFXO2dDQUNiOzs0QkFFRlAsa0NBQWtDOzt3QkFFcEM7OzRCQUFPOztvQkFDVCxPQUFPO3dCQUNMOzs0QkFBTzs7b0JBQ1Q7Ozs7Ozs7OztvQkFHMEI7O3dCQUFNcEIsMkJBQTJCOzRCQUMzREMsUUFBUTs0QkFDUkMsVUFBVTs0QkFDVmEsWUFBQUE7d0JBQ0Y7OztvQkFKTW5CLHVCQUFzQjtvQkFLNUIsSUFBSUEsc0JBQXFCOzt3QkFDdkIseURBQXlEO3dCQUN6RCwyREFBMkQ7d0JBQzNEUixvRUFBZUEsQ0FBQ2UsUUFBUSxDQUFDLHdDQUNwQlU7NEJBQ0hsQixhQUFhO2dDQUNYRixXQUFXdUIsU0FBU1MsSUFBSTtnQ0FDeEIxQixPQUFPTCx3QkFBQUEseUJBQUFBLGNBQWNtQix1QkFBQUEsa0NBQUFBLDJCQUFBQSxXQUFZbEIsV0FBVyxjQUF2QmtCLCtDQUFBQSx5QkFBeUJkLEtBQUs7NEJBQ3JEOzRCQUNBTSxlQUFlLHFCQUNWUSxXQUFXUixhQUFhLENBQUMyQixNQUFNLENBQUMsU0FBQ0MsR0FBR0M7dUNBQU1BLE1BQU1qQjs7Z0NBQ25ELHlEQUF5RDtnQ0FDekQ7b0NBQ0VGLFlBQVlBO29DQUNaTSxnQkFBZ0I7d0NBQUdLLG1CQUFtQmhCLGVBQWVDOztvQ0FDckRaLE9BQU9hO29DQUNQZSxXQUFXO2dDQUNiOzs0QkFFRlAsa0NBQWtDOzt3QkFFcEM7OzRCQUFPOztvQkFDVCxPQUFPO3dCQUNMOzs0QkFBTzs7b0JBQ1Q7Ozs7Ozs7Ozt5QkFFT0osQ0FBQUEsU0FBU21CLFdBQVcsSUFBSSxVQUFTLEdBQWpDbkI7Ozs7b0JBQ21COzt3QkFBTWhCLDJCQUEyQjs0QkFDM0RDLFFBQVE7NEJBQ1JDLFVBQVU7NEJBQ1ZrQyxtQkFBbUJ0QixVQUFVVyxJQUFJO3dCQUNuQzs7O29CQUpNN0IsdUJBQXNCO29CQUs1QixJQUFJQSxzQkFBcUI7Ozt3QkFDdkJSLG9FQUFlQSxDQUFDZSxRQUFRLENBQUMsd0NBQ3BCVTs0QkFDSGxCLGFBQWE7Z0NBQ1hGLFdBQVd1QixTQUFTUyxJQUFJO2dDQUN4QjFCLE9BQU9MLENBQUFBLE9BQUFBLHVCQUFBQSx3QkFBQUEsYUFBY21CLHVCQUFBQSxrQ0FBQUEsMkJBQUFBLFdBQVlsQixXQUFXLGNBQXZCa0IsK0NBQUFBLHlCQUF5QmQsS0FBSyxjQUE1Q0wsa0JBQUFBLE9BQWdEOzRCQUN6RDs0QkFDQVcsYUFBYTtnQ0FDWDtvQ0FDRVUsWUFBWUE7b0NBQ1pNLGdCQUFnQjt3Q0FBR0ssbUJBQW1CaEIsZUFBZUM7O29DQUNyRFosT0FBT2E7b0NBQ1BlLFdBQVc7Z0NBQ2I7OzRCQUVGUCxrQ0FBa0M7O3dCQUVwQzs7NEJBQU87O29CQUNULE9BQU87d0JBQ0w7OzRCQUFPOztvQkFDVDs7OztvQkFFQWhDLG9FQUFlQSxDQUFDZSxRQUFRLENBQUMsd0NBQ3BCVTt3QkFDSGxCLGFBQWE7NEJBQ1hGLFdBQVd1QixTQUFTUyxJQUFJOzRCQUN4QjFCLE9BQU9MLENBQUFBLFFBQUFBLHVCQUFBQSx3QkFBQUEsYUFBY21CLHVCQUFBQSxrQ0FBQUEsMkJBQUFBLFdBQVlsQixXQUFXLGNBQXZCa0IsK0NBQUFBLHlCQUF5QmQsS0FBSyxjQUE1Q0wsbUJBQUFBLFFBQWdEO3dCQUN6RDt3QkFDQVcsZUFBZSxxQkFDVlEsV0FBV1IsYUFBYTs0QkFDM0IseURBQXlEOzRCQUN6RDtnQ0FDRVUsWUFBWUE7Z0NBQ1pNLGdCQUFnQjtvQ0FBR0ssbUJBQW1CaEIsZUFBZUM7O2dDQUNyRFosT0FBT2E7Z0NBQ1BlLFdBQVc7NEJBQ2I7O3dCQUVGUCxrQ0FBa0M7O29CQUVwQzs7d0JBQU87Ozs7Ozs7O0lBRVg7O0FBRUE7Ozs7Ozs7OztDQVNDLEdBQ0QsU0FBU3RCLG1CQUFtQnVDLENBQTZCLEVBQUVDLENBQTZCO0lBQ3RGLElBQUlELEtBQUssUUFBUUMsS0FBSyxNQUFNO1FBQzFCLE9BQU87SUFDVDtJQUVBLE9BQU9oRCxnRUFBWUEsQ0FBQytDLEdBQUdDO0FBQ3pCO0FBUUE7Ozs7Ozs7Ozs7Ozs7O0NBY0MsR0FDTSxTQUFTdEMsMkJBQTJCdUMsWUFBMEI7SUFDbkUscUZBQXFGO0lBQ3JGLFNBQVNDLDhCQUE4QnJCLFlBQTBCLEVBQUVzQixxQkFBOEI7UUFDL0YsSUFBTUMsTUFBOEIsRUFBRTtRQUN0QyxJQUFLLElBQUlSLElBQUlmLGFBQWFFLGdCQUFnQixDQUFDYixNQUFNLEdBQUcsR0FBRzBCLEtBQUssR0FBR0EsSUFBSztZQUNsRSxJQUFNWixrQkFBa0JILGFBQWFFLGdCQUFnQixDQUFDYSxFQUFFO1lBRXhELElBQUlaLGdCQUFnQnFCLGlCQUFpQixFQUFFO2dCQUNyQ0QsSUFBSUUsSUFBSSxDQUFDdEI7WUFDWDtZQUNBLElBQUltQix5QkFBeUJuQixnQkFBZ0JaLGFBQWEsS0FBSytCLHVCQUF1QjtnQkFDcEY7WUFDRjtRQUNGO1FBQ0EsT0FBT0M7SUFDVDtJQUVBLElBQXlEdEQsNEJBQUFBLG9FQUFlQSxDQUFDUyxRQUFRLElBQXpFUSxnQkFBaURqQiwwQkFBakRpQixlQUFld0MsZ0NBQWtDekQsMEJBQWxDeUQ7SUFDdkIsSUFBSUMscUJBQXdDLEVBQUU7SUFDOUMsT0FBUVAsYUFBYXRDLE1BQU07UUFDekIsS0FBSztZQUF5QjtnQkFDNUI2QyxxQkFBcUJ6QyxjQUFjMEMsT0FBTyxDQUFDLFNBQUNDOzJCQUFXUiw4QkFBOEJROztnQkFDckY7WUFDRjtRQUNBLEtBQUs7WUFBZ0I7Z0JBQ25CLElBQU03QixlQUFlZCxjQUFjdUIsSUFBSSxDQUFDLFNBQUNvQjsyQkFBV0EsT0FBT2pDLFVBQVUsS0FBS3dCLGFBQWF4QixVQUFVOztnQkFDakcsSUFBSSxDQUFDSSxjQUFjO29CQUNqQixNQUFNLElBQUlLLE1BQU0sVUFBa0MsT0FBeEJlLGFBQWF4QixVQUFVLEVBQUM7Z0JBQ3BEO2dCQUNBK0IscUJBQXFCTiw4QkFBOEJyQjtnQkFDbkQ7WUFDRjtRQUNBLEtBQUs7WUFBbUI7Z0JBQ3RCLElBQU1BLGdCQUFlZCxjQUFjdUIsSUFBSSxDQUFDLFNBQUNvQjsyQkFBV0EsT0FBT2pDLFVBQVUsS0FBS3dCLGFBQWF4QixVQUFVOztnQkFDakcsSUFBSSxDQUFDSSxlQUFjO29CQUNqQixNQUFNLElBQUlLLE1BQU0sVUFBa0MsT0FBeEJlLGFBQWF4QixVQUFVLEVBQUM7Z0JBQ3BEO2dCQUNBK0IscUJBQXFCTiw4QkFBOEJyQixlQUFjb0IsYUFBYTdCLGFBQWE7Z0JBQzNGO1lBQ0Y7UUFDQSxLQUFLO1lBQXVCO2dCQUMxQixJQUFNdUMsaUJBQWlCNUMsY0FBYzJCLE1BQU0sQ0FBQyxTQUFDZ0I7MkJBQVdBLE9BQU9qQyxVQUFVLEtBQUt3QixhQUFhSCxpQkFBaUI7O2dCQUM1R1UscUJBQXFCRyxlQUFlRixPQUFPLENBQUMsU0FBQ2xCOzJCQUFNVyw4QkFBOEJYOztnQkFDakY7WUFDRjtJQUNGO0lBRUEsSUFBSWlCLG1CQUFtQnRDLE1BQU0sS0FBSyxHQUFHO1FBQ25DLE9BQU8wQyxRQUFRQyxPQUFPLENBQUMsT0FBTyx3Q0FBd0M7SUFDeEU7SUFFQSxPQUFPLElBQUlELFFBQVEsU0FBQ0M7UUFDbEIsSUFBTUMsVUFBVTdELGtEQUFTQSxDQUFDLDJCQUEyQjtZQUNuRDhELFdBQVc7Z0JBQ1REO2dCQUNBRCxRQUFRO1lBQ1Y7WUFDQUcsVUFBVTtnQkFDUkY7Z0JBQ0FELFFBQVE7WUFDVjtZQUNBSSx5QkFBeUJULG1CQUFtQlUsR0FBRyxDQUM3QyxTQUFDQzt1QkFBY1osNkJBQTZCLENBQUNZLFVBQVUvQyxhQUFhLENBQUM7O1FBRXpFO0lBQ0Y7QUFDRjtBQUVBLElBQU1vQix5QkFBeUI7SUFDN0I0QixvQkFBQUEsU0FBQUEsbUJBQW1CdEQsS0FBMkIsRUFBRVcsVUFBa0IsRUFBRVksU0FBa0I7UUFDcEYsSUFBTVYsb0JBQW9CYixNQUFNQyxhQUFhLENBQUNzRCxTQUFTLENBQUMsU0FBQ3RCO21CQUFNQSxFQUFFdEIsVUFBVSxLQUFLQTs7UUFDaEYsSUFBTVYsZ0JBQWlCLHFCQUFHRCxNQUFNQyxhQUFhO1FBQzdDLElBQU11RCxnQkFBZ0Isd0NBQUt2RCxhQUFhLENBQUNZLGtCQUFrQjtZQUFFVSxXQUFBQTs7UUFFN0R0QixhQUFhLENBQUNZLGtCQUFrQixHQUFHMkM7UUFFbkMsT0FBTyx3Q0FDRnhEO1lBQ0hDLGVBQUFBOztJQUVKO0lBQ0EseUZBQXlGO0lBQ3pGd0QsWUFBQUEsU0FBQUEsV0FBV3pELEtBQTJCO1FBQ3BDLE9BQU8sd0NBQ0ZBO1lBQ0hnQixrQ0FBa0M7O0lBRXRDO0lBQ0FXLGVBQUFBLFNBQUFBLGNBQWMzQixLQUEyQixFQUFFVyxVQUFrQjtRQUMzRCxJQUFNRSxvQkFBb0JiLE1BQU1DLGFBQWEsQ0FBQ3NELFNBQVMsQ0FBQyxTQUFDdEI7bUJBQU1BLEVBQUV0QixVQUFVLEtBQUtBOztRQUNoRixJQUFNNkMsZ0JBQWdCeEQsTUFBTUMsYUFBYSxDQUFDWSxrQkFBa0I7UUFDNUQsSUFBTVosZ0JBQWdCLHFCQUFJRCxNQUFNQyxhQUFhLENBQUMyQixNQUFNLENBQUMsU0FBQ0MsR0FBR0M7bUJBQU1BLE1BQU1qQjttQkFBL0M7WUFBbUUyQztTQUFjO1FBQ3ZHLE9BQU8sd0NBQ0Z4RDtZQUNIQyxlQUFBQTtZQUNBZSxrQ0FBa0M7O0lBRXRDO0lBQ0EwQyxnQkFBQUEsU0FBQUEsZUFBZTFELEtBQUssRUFBRU0sYUFBcUI7UUFDekMsSUFBTU8sb0JBQW9CL0Isd0ZBQStCQSxDQUFDd0I7UUFDMUQsSUFBSU8sb0JBQW9CLEdBQUc7WUFDekIsT0FBT2IsT0FBTyxxQ0FBcUM7UUFDckQ7UUFFQSxJQUFNNEMsU0FBUyxtQkFBSzVDLE1BQU1DLGFBQWEsQ0FBQ1ksa0JBQWtCO1FBQzFELElBQU04QyxpQkFBaUJmLE9BQU8zQixnQkFBZ0IsQ0FBQ3NDLFNBQVMsQ0FBQyxTQUFDOUI7bUJBQU1BLEVBQUVuQixhQUFhLEtBQUtBOztRQUNwRixJQUFNTCxnQkFBaUIscUJBQUdELE1BQU1DLGFBQWE7UUFDN0Msb0RBQW9EO1FBQ3BEMkMsT0FBTzNCLGdCQUFnQixHQUFHMkIsT0FBTzNCLGdCQUFnQixDQUFDMkMsS0FBSyxDQUFDLEdBQUdEO1FBRTNELElBQUlFLFNBQVM3RCxNQUFNZ0IsZ0NBQWdDO1FBQ25ELElBQUk0QixPQUFPM0IsZ0JBQWdCLENBQUNiLE1BQU0sS0FBSyxHQUFHO1lBQ3hDLElBQU0wRCxzQkFBc0JqRCxzQkFBc0JiLE1BQU1DLGFBQWEsQ0FBQ0csTUFBTSxHQUFHO1lBQy9FLDJDQUEyQztZQUMzQ0gsY0FBYzhELE1BQU0sQ0FBQ2xELG1CQUFtQjtZQUN4Qyx5RUFBeUU7WUFDekUsNkNBQTZDO1lBQzdDLElBQUlpRCx1QkFBdUI3RCxjQUFjRyxNQUFNLEdBQUcsR0FBRztnQkFDbkR5RCxTQUFTO1lBQ1g7UUFDRixPQUFPO1lBQ0wsNkRBQTZEO1lBQzdENUQsYUFBYSxDQUFDWSxrQkFBa0IsR0FBRytCO1FBQ3JDO1FBRUEsT0FBTyx3Q0FDRjVDO1lBQ0hDLGVBQUFBO1lBQ0FlLGtDQUFrQzZDOztJQUV0QztJQUNBRyxvQkFBQUEsU0FBQUEsbUJBQ0VoRSxLQUFLLEVBQ0xpRSxtQkFBMkIsRUFDM0JDLGtCQUEwQixFQUMxQkMsbUJBQXdDO1FBRXhDLElBQU1DLG9CQUFvQnBFLE1BQU1tQiwwQkFBMEIsQ0FBQytDLG1CQUFtQjtRQUM5RSxJQUFJLENBQUNFLG1CQUFtQjtZQUN0QixNQUFNLElBQUloRCxNQUFNLHVCQUEwQyxPQUFuQjhDLG9CQUFtQjtRQUM1RDtRQUNBLElBQU1HLHFCQUFxQnJFLE1BQU1tQiwwQkFBMEIsQ0FBQzhDLG9CQUFvQjtRQUNoRixJQUFJLENBQUNJLG9CQUFvQjtZQUN2QixNQUFNLElBQUlqRCxNQUFNLHVCQUEyQyxPQUFwQjZDLHFCQUFvQjtRQUM3RDtRQUNBLElBQUlJLG1CQUFtQnpCLE1BQU0sS0FBS3dCLGtCQUFrQnhCLE1BQU0sRUFBRTtZQUMxRCxNQUFNLElBQUl4QixNQUNSLG1CQUEwRzZDLE9BQXZGQyxvQkFBbUIsc0VBQXdGLE9BQXBCRDtRQUU5RztRQUVBLGlGQUFpRjtRQUNqRixvREFBb0Q7UUFDcEQsSUFBTXBELG9CQUFvQmIsTUFBTUMsYUFBYSxDQUFDc0QsU0FBUyxDQUFDLFNBQUNYO21CQUFXQSxPQUFPakMsVUFBVSxLQUFLeUQsa0JBQWtCeEIsTUFBTTs7UUFDbEgsSUFBSS9CLHFCQUFxQixDQUFDLEdBQUc7WUFDM0IsTUFBTSxJQUFJTyxNQUNSLCtCQUErRGdELE9BQWhDRixvQkFBbUIsZUFBc0MsT0FBekJFLGtCQUFrQnhCLE1BQU0sRUFBQztRQUU1RjtRQUNBLElBQU03QixlQUFlZixNQUFNQyxhQUFhLENBQUNZLGtCQUFrQjtRQUMzRCxJQUFNLG1CQUF1QkUsYUFBckJFO1FBQ1IsSUFBSUEsZ0JBQWdCLENBQUNBLGlCQUFpQmIsTUFBTSxHQUFHLEVBQUUsQ0FBQ0UsYUFBYSxLQUFLMkQscUJBQXFCO1lBQ3ZGLE1BQU0sSUFBSTdDLE1BQ1IsK0JBQTJFNkMsT0FBNUNDLG9CQUFtQiwyQkFBNkMsT0FBcEJELHFCQUFvQjtRQUVuRztRQUVBLE9BQU87WUFDTGhFLGVBQWVELE1BQU1DLGFBQWEsQ0FBQ21ELEdBQUcsQ0FBQyxTQUFDM0IsR0FBR0s7Z0JBQ3pDLElBQUlBLEtBQUtqQixtQkFBbUI7b0JBQzFCLE9BQU8sd0NBQ0ZZO3dCQUNIUixrQkFBa0IscUJBQUlRLEVBQUVSLGdCQUFnQixTQUF0Qjs0QkFBd0JLLG1CQUFtQjRDLG9CQUFvQkM7eUJBQXFCOztnQkFFMUcsT0FBTztvQkFDTCxPQUFPMUM7Z0JBQ1Q7WUFDRjtRQUNGO0lBQ0Y7SUFDQTZDLHNCQUFBQSxTQUFBQSxxQkFBcUJ0RSxLQUEyQixFQUFFTSxhQUFxQixFQUFFaUMsaUJBQTBCO1FBQ2pHLElBQU0xQixvQkFBb0IvQix3RkFBK0JBLENBQUN3QjtRQUMxRCxJQUFJTyxvQkFBb0IsR0FBRztZQUN6QixPQUFPYixPQUFPLHFDQUFxQztRQUNyRDtRQUVBLElBQU1lLGVBQWUsbUJBQUtmLE1BQU1DLGFBQWEsQ0FBQ1ksa0JBQWtCO1FBQ2hFLElBQU04QyxpQkFBaUI1QyxhQUFhRSxnQkFBZ0IsQ0FBQ3NDLFNBQVMsQ0FBQyxTQUFDOUI7bUJBQU1BLEVBQUVuQixhQUFhLEtBQUtBOztRQUUxRixJQUFJcUQsaUJBQWlCLEdBQUc7WUFDdEIsT0FBTzNELE9BQU8sc0NBQXNDO1FBQ3REO1FBRUFlLGFBQWFFLGdCQUFnQixDQUFDMEMsZUFBZSxHQUFHLHdDQUMzQzVDLGFBQWFFLGdCQUFnQixDQUFDMEMsZUFBZTtZQUNoRHBCLG1CQUFBQTs7UUFHRixJQUFNdEMsZ0JBQWlCLHFCQUFHRCxNQUFNQyxhQUFhO1FBQzdDQSxhQUFhLENBQUNZLGtCQUFrQixHQUFHRTtRQUVuQyxPQUFPLHdDQUNGZjtZQUNIQyxlQUFBQTs7SUFFSjtJQUNBc0UsbUJBQUFBLFNBQUFBLGtCQUFrQnZFLEtBQTJCLEVBQUVNLGFBQXFCLEVBQUVrRSxLQUFvQjtRQUN4RixJQUFNQyxtQ0FBbUMsbUJBQUt6RSxNQUFNeUMsNkJBQTZCO1FBRWpGLElBQUkrQixVQUFVLE1BQU07WUFDbEIsT0FBT0MsZ0NBQWdDLENBQUNuRSxjQUFjO1FBQ3hELE9BQU87WUFDTG1FLGdDQUFnQyxDQUFDbkUsY0FBYyxHQUFHa0U7UUFDcEQ7UUFFQSxPQUFPLHdDQUNGeEU7WUFDSHlDLCtCQUErQmdDOztJQUVuQztBQUNGO0FBRU8sU0FBU0M7SUFDZCxPQUFPekYsNkVBQW1CQSxDQUFDRCxvRUFBZUEsRUFBRTBDO0FBQzlDO0FBRUE7OztDQUdDLEdBQ00sSUFBTWlELHVCQUF1QjtXQUNsQ2xHLGlEQUFVQSxDQUE0QkMsOERBQWdCQTtFQUFtRDtBQUUzRzs7Q0FFQyxHQUNNLElBQU1rRywrQkFBK0I7SUFDMUMsT0FBT0MsT0FBT0MsSUFBSSxDQUFDOUYsb0VBQWVBLENBQUNTLFFBQVEsR0FBRzBCLDBCQUEwQjtBQUMxRSxFQUFFO0FBRUYsU0FBU0csbUJBQW1CaEIsYUFBcUIsRUFBRUMsY0FBMEM7SUFDM0YsT0FBTztRQUNMRCxlQUFBQTtRQUNBWCxPQUFPWSwyQkFBQUEsNEJBQUFBLGlCQUFrQixDQUFDO1FBQzFCZ0MsbUJBQW1CO1FBQ25Cd0MsTUFBTW5HLGdEQUFNQTtJQUNkO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uL2ZyYW1ld29yay9lc20tc3R5bGVndWlkZS9zcmMvd29ya3NwYWNlczIvd29ya3NwYWNlMi50cz8zZjhhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNpbmdsZVNwYUNvbnRleHQgfSBmcm9tICdzaW5nbGUtc3BhLXJlYWN0JztcbmltcG9ydCB7IHY0IGFzIHV1aWRWNCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHtcbiAgZ2V0R3JvdXBCeVdpbmRvd05hbWUsXG4gIGdldE9wZW5lZFdpbmRvd0luZGV4QnlXb3Jrc3BhY2UsXG4gIGdldFdpbmRvd0J5V29ya3NwYWNlTmFtZSxcbiAgdHlwZSBPcGVuZWRXaW5kb3csXG4gIHR5cGUgT3BlbmVkV29ya3NwYWNlLFxuICB3b3Jrc3BhY2UyU3RvcmUsXG4gIHR5cGUgV29ya3NwYWNlU3RvcmVTdGF0ZTIsXG59IGZyb20gJ0BvcGVubXJzL2VzbS1leHRlbnNpb25zJztcbmltcG9ydCB7IHVzZVN0b3JlV2l0aEFjdGlvbnMsIHR5cGUgQWN0aW9ucyB9IGZyb20gJ0BvcGVubXJzL2VzbS1yZWFjdC11dGlscyc7XG5pbXBvcnQgeyBzaGFsbG93RXF1YWwgfSBmcm9tICdAb3Blbm1ycy9lc20tdXRpbHMnO1xuaW1wb3J0IHsgc2hvd01vZGFsIH0gZnJvbSAnLi4vbW9kYWxzJztcbmltcG9ydCB7IHR5cGUgV29ya3NwYWNlMkRlZmluaXRpb25Qcm9wcyB9IGZyb20gJy4vd29ya3NwYWNlMi5jb21wb25lbnQnO1xuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGxhdW5jaCB0aGUgc3BlY2lmaWVkIHdvcmtzcGFjZSBncm91cCB3aXRoIHRoZSBnaXZlbiBncm91cCBwcm9wcy4gTm90ZSB0aGF0IG9ubHkgb25lIHdvcmtzcGFjZSBncm91cFxuICogbWF5IGJlIG9wZW5lZCBhdCBhbnkgZ2l2ZW4gdGltZS4gSWYgYSB3b3Jrc3BhY2UgZ3JvdXAgaXMgYWxyZWFkeSBvcGVuZWQsIGNhbGxpbmcgYGxhdW5jaFdvcmtzcGFjZUdyb3VwMmAgd2l0aFxuICogZWl0aGVyIGEgZGlmZmVyZW50IGdyb3VwIG5hbWUsIG9yIHNhbWUgZ3JvdXAgbmFtZSBidXQgZGlmZmVyZW50IGluY29tcGF0aWJsZSBwcm9wcyoqLCB3aWxsIHJlc3VsdCBpbiBwcm9tcHRpbmcgdG9cbiAqIGNvbmZpcm0gY2xvc2luZyB3b3Jrc3BhY2VzLiBJZiB0aGUgdXNlciBjb25maXJtcywgdGhlIG9wZW5lZCBncm91cCwgYWxvbmcgd2l0aCBpdHMgd2luZG93cyAoYW5kIHRoZWlyIHdvcmtzcGFjZXMpLCBpcyBjbG9zZWQsIGFuZFxuICogdGhlIHJlcXVlc3RlZCBncm91cCBpcyBpbW1lZGlhdGVseSBvcGVuZWQuXG4gKlxuICogKiogMiBzZXRzIG9mIHByb3BzIGFyZSBjb21wYXRpYmxlIGlmIGVpdGhlciBvbmUgaXMgbnVsbGlzaCwgb3IgaWYgdGhleSBhcmUgc2hhbGxvdyBlcXVhbC5cbiAqIEBleHBlcmltZW50YWxcbiAqIEBwYXJhbSBncm91cE5hbWVcbiAqIEBwYXJhbSBncm91cFByb3BzXG4gKiBAcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgd29ya3NwYWNlIGdyb3VwIHdpdGggdGhlIHNwZWNpZmllZCBncm91cCBwcm9wc1xuICogIGlzIHN1Y2Nlc3NmdWxseSBvcGVuZWQsIG9yIHRoYXQgaXQgYWxyZWFkeSBpcyBvcGVuZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXVuY2hXb3Jrc3BhY2VHcm91cDI8R3JvdXBQcm9wcyBleHRlbmRzIG9iamVjdD4oXG4gIGdyb3VwTmFtZTogc3RyaW5nLFxuICBncm91cFByb3BzOiBHcm91cFByb3BzIHwgbnVsbCxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IG9wZW5lZEdyb3VwIH0gPSB3b3Jrc3BhY2UyU3RvcmUuZ2V0U3RhdGUoKTtcbiAgaWYgKG9wZW5lZEdyb3VwKSB7XG4gICAgaWYgKG9wZW5lZEdyb3VwLmdyb3VwTmFtZSAhPT0gZ3JvdXBOYW1lIHx8ICFhcmVQcm9wc0NvbXBhdGlibGUob3BlbmVkR3JvdXAucHJvcHMsIGdyb3VwUHJvcHMpKSB7XG4gICAgICBjb25zdCBva1RvQ2xvc2VXb3Jrc3BhY2VzID0gYXdhaXQgcHJvbXB0Rm9yQ2xvc2luZ1dvcmtzcGFjZXMoe1xuICAgICAgICByZWFzb246ICdDTE9TRV9XT1JLU1BBQ0VfR1JPVVAnLFxuICAgICAgICBleHBsaWNpdDogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGlmICghb2tUb0Nsb3NlV29ya3NwYWNlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBlbHNlLCBwcm9jZWVkIHRvIG9wZW4gdGhlIG5ldyBncm91cCB3aXRoIG5vIG9wZW5lZFdpbmRvd3NcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm8tb3AsIGdyb3VwIHdpdGggZ3JvdXAgcHJvcHMgaXMgYWxyZWFkeSBvcGVuZWRcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtzcGFjZTJTdG9yZS5zZXRTdGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgLi4uc3RhdGUsXG4gICAgb3BlbmVkR3JvdXA6IHtcbiAgICAgIGdyb3VwTmFtZSxcbiAgICAgIHByb3BzOiBncm91cFByb3BzLFxuICAgIH0sXG4gICAgb3BlbmVkV2luZG93czogW10sXG4gIH0pKTtcblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDbG9zZXMgdGhlIHdvcmtzcGFjZSBncm91cCB0aGF0IGlzIGN1cnJlbnRseSBvcGVuZWQuIE5vdGUgdGhhdCBvbmx5IG9uZSB3b3Jrc3BhY2UgZ3JvdXBcbiAqIG1heSBiZSBvcGVuZWQgYXQgYW55IGdpdmVuIHRpbWVcbiAqIEBleHBlcmltZW50YWxcbiAqIEBwYXJhbSBkaXNjYXJkVW5zYXZlZENoYW5nZXMgSWYgdHJ1ZSwgdGhlbiB0aGUgd29ya3NwYWNlIGdyb3VwIGlzIGZvcmNlZCBjbG9zZWQsIHdpdGggbm8gcHJvbXB0XG4gKiBmb3IgY29uZmlybWF0aW9uIGZvciB1bnNhdmVkIGNoYW5nZXMgaW4gYW55IG9wZW5lZCB3b3Jrc3BhY2UuIFRoaXMgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5XG4gKiBmb3IgY2xlYW4tdXAgcHVycG9zZSwgZXg6IHdoZW4gZXhpdGluZyBhbiBhcHAuXG4gKiBAcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZXJlIGlzIG5vIG9wZW5lZCBncm91cCB0byBiZWdpbiB3aXRoIG9yIHdlIHN1Y2Nlc3NmdWxseSBjbG9zZWRcbiAqIHRoZSBvcGVuZWQgZ3JvdXA7IGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb3NlV29ya3NwYWNlR3JvdXAyKGRpc2NhcmRVbnNhdmVkQ2hhbmdlcz86IGJvb2xlYW4pIHtcbiAgY29uc3Qgc3RhdGUgPSB3b3Jrc3BhY2UyU3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uc3QgeyBvcGVuZWRHcm91cCwgb3BlbmVkV2luZG93cyB9ID0gc3RhdGU7XG4gIGlmIChvcGVuZWRHcm91cCkge1xuICAgIGlmIChvcGVuZWRXaW5kb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG9rVG9DbG9zZVdvcmtzcGFjZXMgPVxuICAgICAgICBkaXNjYXJkVW5zYXZlZENoYW5nZXMgfHxcbiAgICAgICAgKGF3YWl0IHByb21wdEZvckNsb3NpbmdXb3Jrc3BhY2VzKHsgcmVhc29uOiAnQ0xPU0VfV09SS1NQQUNFX0dST1VQJywgZXhwbGljaXQ6IHRydWUgfSkpO1xuICAgICAgaWYgKCFva1RvQ2xvc2VXb3Jrc3BhY2VzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgd29ya3NwYWNlMlN0b3JlLnNldFN0YXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3BlbmVkR3JvdXA6IG51bGwsXG4gICAgICBvcGVuZWRXaW5kb3dzOiBbXSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBubyBvcGVuZWRHcm91cCB3aXRoIGJlZ2luIHdpdGgsIHJldHVybiB0cnVlXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGxhdW5jaCB0aGUgc3BlY2lmaWVkIHdvcmtzcGFjZSB3aXRoIHRoZSBnaXZlbiB3b3Jrc3BhY2UgcHJvcHMuIFRoaXMgYWxzbyBpbXBsaWNpdGx5IG9wZW5zXG4gKiB0aGUgd29ya3NwYWNlIHdpbmRvdyB0byB3aGljaCB0aGUgd29ya3NwYWNlIGJlbG9uZ3MgKGlmIGl0J3Mgbm90IG9wZW5lZCBhbHJlYWR5KSxcbiAqIGFuZCB0aGUgd29ya3NwYWNlIGdyb3VwIHRvIHdoaWNoIHRoZSB3aW5kb3cgYmVsb25ncyAoaWYgaXQncyBub3Qgb3BlbmVkIGFscmVhZHkpLlxuICpcbiAqIFdoZW4gY2FsbGluZyBgbGF1bmNoV29ya3NwYWNlMmAsIHdlIG5lZWQgdG8gYWxzbyBwYXNzIGluIHRoZSB3b3Jrc3BhY2UgcHJvcHMuIFdoaWxlIG5vdCByZXF1aXJlZCxcbiAqIHdlIGNhbiBhbHNvIHBhc3MgaW4gdGhlIHdpbmRvdyBwcm9wcyAoc2hhcmVkIGJ5IG90aGVyIHdvcmtzcGFjZXMgaW4gdGhlIHdpbmRvdykgYW5kIHRoZSBncm91cCBwcm9wc1xuICogKHNoYXJlZCBieSBhbGwgd2luZG93cyBhbmQgdGhlaXIgd29ya3NwYWNlcykuIE9taXR0aW5nIHRoZSB3aW5kb3cgcHJvcHMgb3IgdGhlIGdyb3VwIHByb3BzW14xXSBtZWFucyB0aGUgY2FsbGVyXG4gKiBleHBsaWNpdGx5IGRvZXMgbm90IGNhcmUgd2hhdCB0aGUgY3VycmVudCB3aW5kb3cgcHJvcHMgYW5kIGdyb3VwIHByb3BzIGFyZSwgYW5kIHRoYXQgdGhleSBtYXkgYmUgc2V0XG4gKiBieSBvdGhlciBhY3Rpb25zIChsaWtlIGNhbGxpbmcgYGxhdW5jaFdvcmtzcGFjZTJgIG9uIGEgZGlmZmVyZW50IHdvcmtzcGFjZSB3aXRoIHRob3NlIHByb3BzIHBhc3NlZCBpbilcbiAqIGF0IGEgbGF0ZXIgdGltZS5cbiAqXG4gKiBJZiB0aGVyZSBpcyBhbHJlYWR5IGFuIG9wZW5lZCB3b3Jrc3BhY2UgZ3JvdXAsIGFuZCBpdCdzIG5vdCB0aGUgZ3JvdXAgdGhlIHdvcmtzcGFjZSBiZWxvbmdzIHRvXG4gKiBvciBoYXMgaW5jb21wYXRpYmxlW14yXSBncm91cCBwcm9wcywgdGhlbiB3ZSBwcm9tcHQgdGhlIHVzZXIgdG8gY2xvc2UgdGhlIGdyb3VwIChhbmQgaXRzIHdpbmRvd3MgYW5kIHRoZWlyIHdvcmtzcGFjZXMpLlxuICogT24gdXNlciBjb25maXJtLCB0aGUgZXhpc3Rpbmcgb3BlbmVkIGdyb3VwIGlzIGNsb3NlZCBhbmQgdGhlIG5ldyB3b3Jrc3BhY2UsIGFsb25nIHdpdGggaXRzIHdpbmRvdyBhbmQgaXRzIGdyb3VwLFxuICogaXMgb3BlbmVkLlxuICpcbiAqIElmIHRoZSB3aW5kb3cgaXMgYWxyZWFkeSBvcGVuZWQsIGJ1dCB3aXRoIGluY29tcGF0aWJsZSB3aW5kb3cgcHJvcHMsIHdlIHByb21wdCB0aGUgdXNlciB0byBjbG9zZVxuICogdGhlIHdpbmRvdyAoYW5kIGFsbCBpdHMgb3BlbmVkIHdvcmtzcGFjZXMpLCBhbmQgcmVvcGVuIHRoZSB3aW5kb3cgd2l0aCAob25seSkgdGhlIG5ld2x5IHJlcXVlc3RlZCB3b3Jrc3BhY2UuXG4gKlxuICogSWYgdGhlIHdvcmtzcGFjZSBpcyBhbHJlYWR5IG9wZW5lZCwgYnV0IHdpdGggaW5jb21wYXRpYmxlIHdvcmtzcGFjZSBwcm9wcywgd2UgYWxzbyBwcm9tcHQgdGhlIHVzZXIgdG8gY2xvc2VcbiAqIHRoZSAqKndpbmRvdyoqIChhbmQgYWxsIGl0cyBvcGVuZWQgd29ya3NwYWNlcyksIGFuZCByZW9wZW4gdGhlIHdpbmRvdyB3aXRoIChvbmx5KSB0aGUgbmV3bHkgcmVxdWVzdGVkIHdvcmtzcGFjZS5cbiAqIFRoaXMgaXMgdHJ1ZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGFscmVhZHkgb3BlbmVkIHdvcmtzcGFjZSBoYXMgYW55IGNoaWxkIHdvcmtzcGFjZXMuXG4gKlxuICogTm90ZSB0aGF0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiAqbmV2ZXIqIHJlc3VsdHMgaW4gY3JlYXRpbmcgYSBjaGlsZCB3b3Jrc3BhY2UgaW4gdGhlIGFmZmVjdGVkIHdpbmRvdy5cbiAqIFRvIGRvIHNvLCB3ZSBuZWVkIHRvIGNhbGwgYGxhdW5jaENoaWxkV29ya3NwYWNlYCBpbnN0ZWFkLlxuICpcbiAqIFteMV0gT21pdHRpbmcgd2luZG93IG9yIGdyb3VwIHByb3BzIGlzIHVzZWZ1bCBmb3Igd29ya3NwYWNlcyB0aGF0IGRvbid0IGhhdmUgdGllcyB0byB0aGUgd2luZG93IG9yIGdyb3VwIFwiY29udGV4dFwiIChwcm9wcykuXG4gKiBGb3IgZXhhbXBsZSwgaW4gdGhlIHBhdGllbnQgY2hhcnQsIHRoZSB2aXNpdCBub3RlcyAvIGNsaW5pY2FsIGZvcm1zIC8gb3JkZXIgYmFza2V0IGFjdGlvbiBtZW51IGJ1dHRvbiBhbGwgc2hhcmVcbiAqIGEgXCJncm91cCBjb250ZXh0XCIgb2YgdGhlIGN1cnJlbnQgdmlzaXQuIEhvd2V2ZXIsIHRoZSBcInBhdGllbnQgbGlzdFwiIGFjdGlvbiBtZW51IGJ1dHRvbiBkb2VzIG5vdCBuZWVkIHRvIHNoYXJlIHRoYXQgZ3JvdXBcbiAqIGNvbnRleHQsIHNvIG9wZW5pbmcgdGhhdCB3b3Jrc3BhY2Ugc2hvdWxkIG5vdCBuZWVkIHRvIGNhdXNlIG90aGVyIHdvcmtzcGFjZXMgLyB3aW5kb3dzIC8gZ3JvdXBzIHRvIHBvdGVudGlhbGx5IGNsb3NlLlxuICogVGhlIFwicGF0aWVudCBzZWFyY2hcIiB3b3Jrc3BhY2UgaW4gdGhlIHF1ZXVlcyBhbmQgd2FyZCBhcHBzIGlzIGFub3RoZXIgZXhhbXBsZS5cbiAqXG4gKiBbXjJdIDIgc2V0cyBvZiBwcm9wcyBhcmUgY29tcGF0aWJsZSBpZiBlaXRoZXIgb25lIGlzIG51bGxpc2gsIG9yIGlmIHRoZXkgYXJlIHNoYWxsb3cgZXF1YWwuXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXVuY2hXb3Jrc3BhY2UyPFxuICBXb3Jrc3BhY2VQcm9wcyBleHRlbmRzIG9iamVjdCxcbiAgV2luZG93UHJvcHMgZXh0ZW5kcyBvYmplY3QsXG4gIEdyb3VwUHJvcCBleHRlbmRzIG9iamVjdCxcbj4oXG4gIHdvcmtzcGFjZU5hbWU6IHN0cmluZyxcbiAgd29ya3NwYWNlUHJvcHM6IFdvcmtzcGFjZVByb3BzIHwgbnVsbCA9IG51bGwsXG4gIHdpbmRvd1Byb3BzOiBXaW5kb3dQcm9wcyB8IG51bGwgPSBudWxsLFxuICBncm91cFByb3BzOiBHcm91cFByb3AgfCBudWxsID0gbnVsbCxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBzdG9yZVN0YXRlID0gd29ya3NwYWNlMlN0b3JlLmdldFN0YXRlKCk7XG5cbiAgaWYgKCFzdG9yZVN0YXRlLnJlZ2lzdGVyZWRXb3Jrc3BhY2VzQnlOYW1lW3dvcmtzcGFjZU5hbWVdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbGF1bmNoIHdvcmtzcGFjZSAke3dvcmtzcGFjZU5hbWV9LiBXb3Jrc3BhY2UgaXMgbm90IHJlZ2lzdGVyZWRgKTtcbiAgfVxuICBjb25zdCB3aW5kb3dEZWYgPSBnZXRXaW5kb3dCeVdvcmtzcGFjZU5hbWUod29ya3NwYWNlTmFtZSk7XG4gIGlmICghd2luZG93RGVmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbGF1bmNoIHdvcmtzcGFjZSAke3dvcmtzcGFjZU5hbWV9LiBXb3Jrc3BhY2UgaXMgbm90IHJlZ2lzdGVyZWQgdG8gYSB3b3Jrc3BhY2Ugd2luZG93YCk7XG4gIH1cblxuICBjb25zdCB7IG9wZW5lZEdyb3VwIH0gPSBzdG9yZVN0YXRlO1xuICBjb25zdCB7IG5hbWU6IHdpbmRvd05hbWUgfSA9IHdpbmRvd0RlZjtcbiAgY29uc3QgZ3JvdXBEZWYgPSBnZXRHcm91cEJ5V2luZG93TmFtZSh3aW5kb3dOYW1lKTtcbiAgaWYgKCFncm91cERlZikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVbmFibGUgdG8gbGF1bmNoIHdvcmtzcGFjZSAke3dvcmtzcGFjZU5hbWV9LiBXb3Jrc3BhY2Ugd2luZG93ICR7d2luZG93RGVmLm5hbWV9IGlzIG5vdCByZWdpc3RlcmVkIHRvIGEgd29ya3NwYWNlIGdyb3VwYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgb3BlbmVkV2luZG93SW5kZXggPSBnZXRPcGVuZWRXaW5kb3dJbmRleEJ5V29ya3NwYWNlKHdvcmtzcGFjZU5hbWUpO1xuICBjb25zdCBpc1dpbmRvd0FscmVhZHlPcGVuZWQgPSBvcGVuZWRXaW5kb3dJbmRleCA+PSAwO1xuXG4gIC8vIGlmIGN1cnJlbnQgb3BlbmVkIGdyb3VwIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgcmVxdWVzdGVkIGdyb3VwLCBvciBpZiB0aGUgZ3JvdXAgcHJvcHMgYXJlIGRpZmZlcmVudCwgdGhlbiBwcm9tcHQgZm9yIHVuc2F2ZWQgY2hhbmdlc1xuICBpZiAob3BlbmVkR3JvdXAgJiYgKG9wZW5lZEdyb3VwLmdyb3VwTmFtZSAhPT0gZ3JvdXBEZWYubmFtZSB8fCAhYXJlUHJvcHNDb21wYXRpYmxlKG9wZW5lZEdyb3VwLnByb3BzLCBncm91cFByb3BzKSkpIHtcbiAgICBjb25zdCBva1RvQ2xvc2VXb3Jrc3BhY2VzID0gYXdhaXQgcHJvbXB0Rm9yQ2xvc2luZ1dvcmtzcGFjZXMoeyByZWFzb246ICdDTE9TRV9XT1JLU1BBQ0VfR1JPVVAnLCBleHBsaWNpdDogdHJ1ZSB9KTtcbiAgICBpZiAob2tUb0Nsb3NlV29ya3NwYWNlcykge1xuICAgICAgd29ya3NwYWNlMlN0b3JlLnNldFN0YXRlKHtcbiAgICAgICAgLi4uc3RvcmVTdGF0ZSxcbiAgICAgICAgb3BlbmVkR3JvdXA6IHtcbiAgICAgICAgICBncm91cE5hbWU6IGdyb3VwRGVmLm5hbWUsXG4gICAgICAgICAgcHJvcHM6IGdyb3VwUHJvcHMsXG4gICAgICAgIH0sXG4gICAgICAgIG9wZW5lZFdpbmRvd3M6IFtcbiAgICAgICAgICAvLyBkaXNjYXJkIGFsbCBvcGVuZWQgd2luZG93cywgb3BlbiBhIG5ldyBvbmUgd2l0aCB0aGUgcmVxdWVzdGVkIHdvcmtzcGFjZVxuICAgICAgICAgIC8vIG1vc3QgcmVjZW50bHkgb3BlbmVkIGFjdGlvbiBhcHBlbmRlZCB0byB0aGUgZW5kXG4gICAgICAgICAge1xuICAgICAgICAgICAgd2luZG93TmFtZTogd2luZG93TmFtZSxcbiAgICAgICAgICAgIG9wZW5lZFdvcmtzcGFjZXM6IFtuZXdPcGVuZWRXb3Jrc3BhY2Uod29ya3NwYWNlTmFtZSwgd29ya3NwYWNlUHJvcHMpXSwgLy8gcm9vdCB3b3Jrc3BhY2UgYXQgaW5kZXggMFxuICAgICAgICAgICAgcHJvcHM6IHdpbmRvd1Byb3BzLFxuICAgICAgICAgICAgbWF4aW1pemVkOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBpc01vc3RSZWNlbnRseU9wZW5lZFdpbmRvd0hpZGRlbjogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzV2luZG93QWxyZWFkeU9wZW5lZCkge1xuICAgIGNvbnN0IG9wZW5lZFdpbmRvdyA9IHN0b3JlU3RhdGUub3BlbmVkV2luZG93c1tvcGVuZWRXaW5kb3dJbmRleF07XG4gICAgY29uc3QgZ3JvdXBQcm9wcyA9IHN0b3JlU3RhdGUub3BlbmVkR3JvdXA/LnByb3BzID8/IHt9O1xuICAgIGNvbnN0IGlzTW9zdFJlY2VudGx5T3BlbmVkV2luZG93SGlkZGVuID0gc3RvcmVTdGF0ZS5pc01vc3RSZWNlbnRseU9wZW5lZFdpbmRvd0hpZGRlbjtcbiAgICBjb25zdCB7IG9wZW5lZFdvcmtzcGFjZXMgfSA9IG9wZW5lZFdpbmRvdztcblxuICAgIGlmIChhcmVQcm9wc0NvbXBhdGlibGUob3BlbmVkV2luZG93LnByb3BzLCB3aW5kb3dQcm9wcykpIHtcbiAgICAgIC8vIHRoaXMgY2FzZSBpcyB0cmlja3ksIHRoaXMgcmVzdWx0cyBpbiByZXN0b3JpbmcgdGhlIHdpbmRvdyBpZjpcbiAgICAgIC8vIDEuIHRoZSB3b3Jrc3BhY2UgaXMgb3BlbmVkIChidXQgbm90IG5lY2Vzc2FyaWx5IGFzIGEgbGVhZiB3b3Jrc3BhY2UpXG4gICAgICAvLyAyLiB0aGUgcHJvcHMgb2YgdGhlIG9wZW5lZCB3b3Jrc3BhY2UgaXMgc2FtZSBhcyB3b3Jrc3BhY2UgcHJvcHMgKGZyb20gdGhlIGZ1bmN0aW9uIGlucHV0KVxuICAgICAgLy9cbiAgICAgIC8vIE90aGVyd2lzZSwgd2UgY2xvc2UgYWxsIHdvcmtzcGFjZXMgaW4gdGhpcyB3aW5kb3csIGFuZCBvcGVuIHRoaXMgbmV3bHkgcmVxdWVzdGVkIG9uZVxuICAgICAgY29uc3Qgb3BlbmVkV29ya3NwYWNlID0gb3BlbmVkV29ya3NwYWNlcy5maW5kKCh3KSA9PiB3LndvcmtzcGFjZU5hbWUgPT09IHdvcmtzcGFjZU5hbWUpO1xuICAgICAgaWYgKG9wZW5lZFdvcmtzcGFjZSAmJiBhcmVQcm9wc0NvbXBhdGlibGUob3BlbmVkV29ya3NwYWNlLnByb3BzLCB3b3Jrc3BhY2VQcm9wcykpIHtcbiAgICAgICAgLy8gcmVzdG9yZSB0aGUgd2luZG93IGlmIGl0IGlzIGhpZGRlbiBvciBub3QgdGhlIG1vc3QgcmVjZW50bHkgb3BlbmVkIG9uZVxuICAgICAgICBpZiAoaXNNb3N0UmVjZW50bHlPcGVuZWRXaW5kb3dIaWRkZW4gfHwgb3BlbmVkV2luZG93SW5kZXggIT09IHN0b3JlU3RhdGUub3BlbmVkV2luZG93cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgd29ya3NwYWNlMlN0b3JlLnNldFN0YXRlKHdvcmtzcGFjZTJTdG9yZUFjdGlvbnMucmVzdG9yZVdpbmRvdyhzdG9yZVN0YXRlLCB3aW5kb3dOYW1lKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBva1RvQ2xvc2VXb3Jrc3BhY2VzID0gYXdhaXQgcHJvbXB0Rm9yQ2xvc2luZ1dvcmtzcGFjZXMoe1xuICAgICAgICAgIHJlYXNvbjogJ0NMT1NFX1dPUktTUEFDRScsXG4gICAgICAgICAgZXhwbGljaXQ6IGZhbHNlLFxuICAgICAgICAgIHdpbmRvd05hbWUsXG4gICAgICAgICAgd29ya3NwYWNlTmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChva1RvQ2xvc2VXb3Jrc3BhY2VzKSB7XG4gICAgICAgICAgd29ya3NwYWNlMlN0b3JlLnNldFN0YXRlKHtcbiAgICAgICAgICAgIC4uLnN0b3JlU3RhdGUsXG4gICAgICAgICAgICBvcGVuZWRHcm91cDoge1xuICAgICAgICAgICAgICBncm91cE5hbWU6IGdyb3VwRGVmLm5hbWUsXG4gICAgICAgICAgICAgIHByb3BzOiBzdG9yZVN0YXRlPy5vcGVuZWRHcm91cD8ucHJvcHMgPz8gZ3JvdXBQcm9wcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcGVuZWRXaW5kb3dzOiBbXG4gICAgICAgICAgICAgIC4uLnN0b3JlU3RhdGUub3BlbmVkV2luZG93cy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IG9wZW5lZFdpbmRvd0luZGV4KSxcbiAgICAgICAgICAgICAgLy8gbW9zdCByZWNlbnRseSBvcGVuZWQgd29ya3NwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aW5kb3dOYW1lOiB3aW5kb3dOYW1lLFxuICAgICAgICAgICAgICAgIG9wZW5lZFdvcmtzcGFjZXM6IFtuZXdPcGVuZWRXb3Jrc3BhY2Uod29ya3NwYWNlTmFtZSwgd29ya3NwYWNlUHJvcHMpXSxcbiAgICAgICAgICAgICAgICBwcm9wczogb3BlbmVkV2luZG93Py5wcm9wcyA/PyB3aW5kb3dQcm9wcyxcbiAgICAgICAgICAgICAgICBtYXhpbWl6ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGlzTW9zdFJlY2VudGx5T3BlbmVkV2luZG93SGlkZGVuOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb2tUb0Nsb3NlV29ya3NwYWNlcyA9IGF3YWl0IHByb21wdEZvckNsb3NpbmdXb3Jrc3BhY2VzKHtcbiAgICAgICAgcmVhc29uOiAnQ0xPU0VfV0lORE9XJyxcbiAgICAgICAgZXhwbGljaXQ6IGZhbHNlLFxuICAgICAgICB3aW5kb3dOYW1lLFxuICAgICAgfSk7XG4gICAgICBpZiAob2tUb0Nsb3NlV29ya3NwYWNlcykge1xuICAgICAgICAvLyBkaXNjYXJkIHRoZSBvcGVuZWRXaW5kb3dzIGVsZW1lbnQgYXQgb3BlbmVkV2luZG93SW5kZXhcbiAgICAgICAgLy8gYW5kIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGUgcmVxdWVzdGVkIHdvcmtzcGFjZSBvcGVuZWRcbiAgICAgICAgd29ya3NwYWNlMlN0b3JlLnNldFN0YXRlKHtcbiAgICAgICAgICAuLi5zdG9yZVN0YXRlLFxuICAgICAgICAgIG9wZW5lZEdyb3VwOiB7XG4gICAgICAgICAgICBncm91cE5hbWU6IGdyb3VwRGVmLm5hbWUsXG4gICAgICAgICAgICBwcm9wczogZ3JvdXBQcm9wcyA/PyBzdG9yZVN0YXRlPy5vcGVuZWRHcm91cD8ucHJvcHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcGVuZWRXaW5kb3dzOiBbXG4gICAgICAgICAgICAuLi5zdG9yZVN0YXRlLm9wZW5lZFdpbmRvd3MuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBvcGVuZWRXaW5kb3dJbmRleCksXG4gICAgICAgICAgICAvLyBtb3N0IHJlY2VudGx5IG9wZW5lZCB3b3Jrc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd2luZG93TmFtZTogd2luZG93TmFtZSxcbiAgICAgICAgICAgICAgb3BlbmVkV29ya3NwYWNlczogW25ld09wZW5lZFdvcmtzcGFjZSh3b3Jrc3BhY2VOYW1lLCB3b3Jrc3BhY2VQcm9wcyldLFxuICAgICAgICAgICAgICBwcm9wczogd2luZG93UHJvcHMsXG4gICAgICAgICAgICAgIG1heGltaXplZDogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgaXNNb3N0UmVjZW50bHlPcGVuZWRXaW5kb3dIaWRkZW46IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwRGVmLnBlcnNpc3RlbmNlID09ICdjbG9zYWJsZScpIHtcbiAgICBjb25zdCBva1RvQ2xvc2VXb3Jrc3BhY2VzID0gYXdhaXQgcHJvbXB0Rm9yQ2xvc2luZ1dvcmtzcGFjZXMoe1xuICAgICAgcmVhc29uOiAnQ0xPU0VfT1RIRVJfV0lORE9XUycsXG4gICAgICBleHBsaWNpdDogZmFsc2UsXG4gICAgICB3aW5kb3dOYW1lVG9TcGFyZTogd2luZG93RGVmLm5hbWUsXG4gICAgfSk7XG4gICAgaWYgKG9rVG9DbG9zZVdvcmtzcGFjZXMpIHtcbiAgICAgIHdvcmtzcGFjZTJTdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgIC4uLnN0b3JlU3RhdGUsXG4gICAgICAgIG9wZW5lZEdyb3VwOiB7XG4gICAgICAgICAgZ3JvdXBOYW1lOiBncm91cERlZi5uYW1lLFxuICAgICAgICAgIHByb3BzOiBncm91cFByb3BzID8/IHN0b3JlU3RhdGU/Lm9wZW5lZEdyb3VwPy5wcm9wcyA/PyBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBvcGVuZWRXaW5kb3dzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgd2luZG93TmFtZTogd2luZG93TmFtZSxcbiAgICAgICAgICAgIG9wZW5lZFdvcmtzcGFjZXM6IFtuZXdPcGVuZWRXb3Jrc3BhY2Uod29ya3NwYWNlTmFtZSwgd29ya3NwYWNlUHJvcHMpXSwgLy8gcm9vdCB3b3Jrc3BhY2UgYXQgaW5kZXggMFxuICAgICAgICAgICAgcHJvcHM6IHdpbmRvd1Byb3BzLFxuICAgICAgICAgICAgbWF4aW1pemVkOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBpc01vc3RSZWNlbnRseU9wZW5lZFdpbmRvd0hpZGRlbjogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHdvcmtzcGFjZTJTdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAuLi5zdG9yZVN0YXRlLFxuICAgICAgb3BlbmVkR3JvdXA6IHtcbiAgICAgICAgZ3JvdXBOYW1lOiBncm91cERlZi5uYW1lLFxuICAgICAgICBwcm9wczogZ3JvdXBQcm9wcyA/PyBzdG9yZVN0YXRlPy5vcGVuZWRHcm91cD8ucHJvcHMgPz8gbnVsbCxcbiAgICAgIH0sXG4gICAgICBvcGVuZWRXaW5kb3dzOiBbXG4gICAgICAgIC4uLnN0b3JlU3RhdGUub3BlbmVkV2luZG93cyxcbiAgICAgICAgLy8gbW9zdCByZWNlbnRseSBvcGVuZWQgd29ya3NwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5XG4gICAgICAgIHtcbiAgICAgICAgICB3aW5kb3dOYW1lOiB3aW5kb3dOYW1lLFxuICAgICAgICAgIG9wZW5lZFdvcmtzcGFjZXM6IFtuZXdPcGVuZWRXb3Jrc3BhY2Uod29ya3NwYWNlTmFtZSwgd29ya3NwYWNlUHJvcHMpXSwgLy8gcm9vdCB3b3Jrc3BhY2UgYXQgaW5kZXggMFxuICAgICAgICAgIHByb3BzOiB3aW5kb3dQcm9wcyxcbiAgICAgICAgICBtYXhpbWl6ZWQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGlzTW9zdFJlY2VudGx5T3BlbmVkV2luZG93SGlkZGVuOiBmYWxzZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFdoZW4gd2UgbGF1bmNoIGEgd29ya3NwYWNlLCB3ZSBtYXkgcGFzcyBpbiB3b3Jrc3BhY2UgLyB3aW5kb3dzIC8gZ3JvdXAgcHJvcHMuIElmIHRoZSB3b3Jrc3BhY2Ugb3JcbiAqIHdpbmRvdyBvciBncm91cCBpcyBjdXJyZW50bHkgb3BlbmVkLCB3ZSBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvcHMgYXJlIGNvbXBhdGlibGUgd2l0aFxuICogdGhlIHBhc3NlZCBpbiBwcm9wcy4gMiBwcm9wcyBBIGFuZCBCIGFyZSBjb21wYXRpYmxlIGlmOlxuICogICBlaXRoZXIgb25lIGlzIG51bGxpc2ggKGJlY2F1c2UgdGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbGVyIGRvZXMgbm90IGNhcmUgYWJvdXQgcHJvcCBpbmNvbXBhdGliaWxpdHkpXG4gKiAgIG5laXRoZXIgaXMgbnVsbGlzaCwgYW5kIEEgYW5kIEIgYXJlIHNoYWxsb3cgZXF1YWwuXG4gKiBAcGFyYW0gYSBwcm9wc1xuICogQHBhcmFtIGIgcHJvcHNcbiAqIEByZXR1cm5zIHdoZXRoZXIgcHJvcHMgYSBhbmQgYiBhcmUgY29tcGF0aWJsZVxuICovXG5mdW5jdGlvbiBhcmVQcm9wc0NvbXBhdGlibGUoYTogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIGI6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsKSB7XG4gIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gc2hhbGxvd0VxdWFsKGEsIGIpO1xufVxuXG50eXBlIFByb21wdFJlYXNvbiA9XG4gIHwgeyByZWFzb246ICdDTE9TRV9XT1JLU1BBQ0VfR1JPVVAnOyBleHBsaWNpdDogYm9vbGVhbiB9XG4gIHwgeyByZWFzb246ICdDTE9TRV9XSU5ET1cnOyBleHBsaWNpdDogYm9vbGVhbjsgd2luZG93TmFtZTogc3RyaW5nIH1cbiAgfCB7IHJlYXNvbjogJ0NMT1NFX1dPUktTUEFDRSc7IGV4cGxpY2l0OiBib29sZWFuOyB3aW5kb3dOYW1lOiBzdHJpbmc7IHdvcmtzcGFjZU5hbWU6IHN0cmluZyB9XG4gIHwgeyByZWFzb246ICdDTE9TRV9PVEhFUl9XSU5ET1dTJzsgZXhwbGljaXQ6IGZhbHNlOyB3aW5kb3dOYW1lVG9TcGFyZTogc3RyaW5nIH07XG5cbi8qKlxuICogQSB1c2VyIGNhbiBwZXJmb3JtIGFjdGlvbnMgdGhhdCBleHBsaWNpdGx5IHJlc3VsdCBpbiBjbG9zaW5nIHdvcmtzcGFjZXNcbiAqIChzdWNoIHRoYXQgY2xpY2tpbmcgdGhlICdYJyBidXR0b24gZm9yIHRoZSB3b3Jrc3BhY2Ugb3Igd29ya3NwYWNlIGdyb3VwKSwgb3JcbiAqIGltcGxpY2l0bHkgKGJ5IG9wZW5pbmcgYSB3b3Jrc3BhY2Ugd2l0aCBkaWZmZXJlbnQgcHJvcHMgdGhhbiB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeSBvcGVuZWQpLlxuICogQ2FsbHMgdG8gY2xvc2VXb3Jrc3BhY2UyKCkgb3IgY2xvc2VXb3Jrc3BhY2VHcm91cDIoKSBhcmUgY29uc2lkZXJlZCBleHBsaWNpdCwgd2hpbGUgY2FsbHNcbiAqIHRvIGxhdW5jaFdvcmtzcGFjZTIoKSBvciBsYXVuY2hXb3Jrc3BhY2VHcm91cDIoKSBhcmUgY29uc2lkZXJlZCBpbXBsaWNpdC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHByb21wdHMgdGhlIHVzZXIgZm9yIGNvbmZpcm1hdGlvbiB0byBjbG9zZSB3b3Jrc3BhY2VzIHdpdGggYSBtb2RhbCBkaWFsb2cuXG4gKiBXaGVuIHRoZSBjbG9zaW5nIGlzIGV4cGxpY2l0LCBpdCBwcm9tcHRzIGZvciBjb25maXJtYXRpb24gZm9yIGFmZmVjdGVkIHdvcmtzcGFjZXMgd2l0aCB1bnNhdmVkIGNoYW5nZXMuXG4gKiBXaGVuIHRoZSBjbG9zaW5nIGlzIGltcGxpY2l0LCBpdCBwcm9tcHRzIGZvciBjb25maXJtYXRpb24gZm9yIGFsbCBhZmZlY3RlZCB3b3Jrc3BhY2VzLCByZWdhcmRsZXNzIG9mXG4gKiB3aGV0aGVyIHRoZXkgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuXG4gKiBAZXhwZXJpbWVudGFsXG4gKiBAcGFyYW0gcHJvbXB0UmVhc29uXG4gKiBAcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSB1c2VyIGNvbmZpcm1lZCBjbG9zaW5nIHRoZSB3b3Jrc3BhY2VzOyBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9tcHRGb3JDbG9zaW5nV29ya3NwYWNlcyhwcm9tcHRSZWFzb246IFByb21wdFJlYXNvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAvLyBpZiBvbmx5VXBUb1RoaXNXb3Jrc3BhY2UgaXMgcHJvdmlkZWQsIHdlIHdpbGwgb25seSBsb29wIHRpbGwgd2UgaGl0IHRoYXQgd29ya3NwYWNlXG4gIGZ1bmN0aW9uIGdldEFmZmVjdGVkV29ya3NwYWNlc0luV2luZG93KG9wZW5lZFdpbmRvdzogT3BlbmVkV2luZG93LCBvbmx5VXBUb1RoaXNXb3Jrc3BhY2U/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXQ6IEFycmF5PE9wZW5lZFdvcmtzcGFjZT4gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gb3BlbmVkV2luZG93Lm9wZW5lZFdvcmtzcGFjZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IG9wZW5lZFdvcmtzcGFjZSA9IG9wZW5lZFdpbmRvdy5vcGVuZWRXb3Jrc3BhY2VzW2ldO1xuXG4gICAgICBpZiAob3BlbmVkV29ya3NwYWNlLmhhc1Vuc2F2ZWRDaGFuZ2VzKSB7XG4gICAgICAgIHJldC5wdXNoKG9wZW5lZFdvcmtzcGFjZSk7XG4gICAgICB9XG4gICAgICBpZiAob25seVVwVG9UaGlzV29ya3NwYWNlICYmIG9wZW5lZFdvcmtzcGFjZS53b3Jrc3BhY2VOYW1lID09PSBvbmx5VXBUb1RoaXNXb3Jrc3BhY2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBjb25zdCB7IG9wZW5lZFdpbmRvd3MsIHdvcmtzcGFjZVRpdGxlQnlXb3Jrc3BhY2VOYW1lIH0gPSB3b3Jrc3BhY2UyU3RvcmUuZ2V0U3RhdGUoKTtcbiAgbGV0IGFmZmVjdGVkV29ya3NwYWNlczogT3BlbmVkV29ya3NwYWNlW10gPSBbXTtcbiAgc3dpdGNoIChwcm9tcHRSZWFzb24ucmVhc29uKSB7XG4gICAgY2FzZSAnQ0xPU0VfV09SS1NQQUNFX0dST1VQJzoge1xuICAgICAgYWZmZWN0ZWRXb3Jrc3BhY2VzID0gb3BlbmVkV2luZG93cy5mbGF0TWFwKCh3aW5kb3cpID0+IGdldEFmZmVjdGVkV29ya3NwYWNlc0luV2luZG93KHdpbmRvdykpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ0NMT1NFX1dJTkRPVyc6IHtcbiAgICAgIGNvbnN0IG9wZW5lZFdpbmRvdyA9IG9wZW5lZFdpbmRvd3MuZmluZCgod2luZG93KSA9PiB3aW5kb3cud2luZG93TmFtZSA9PT0gcHJvbXB0UmVhc29uLndpbmRvd05hbWUpO1xuICAgICAgaWYgKCFvcGVuZWRXaW5kb3cpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXaW5kb3cgJHtwcm9tcHRSZWFzb24ud2luZG93TmFtZX0gbm90IGZvdW5kIGluIG9wZW5lZCB3aW5kb3dzLmApO1xuICAgICAgfVxuICAgICAgYWZmZWN0ZWRXb3Jrc3BhY2VzID0gZ2V0QWZmZWN0ZWRXb3Jrc3BhY2VzSW5XaW5kb3cob3BlbmVkV2luZG93KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICdDTE9TRV9XT1JLU1BBQ0UnOiB7XG4gICAgICBjb25zdCBvcGVuZWRXaW5kb3cgPSBvcGVuZWRXaW5kb3dzLmZpbmQoKHdpbmRvdykgPT4gd2luZG93LndpbmRvd05hbWUgPT09IHByb21wdFJlYXNvbi53aW5kb3dOYW1lKTtcbiAgICAgIGlmICghb3BlbmVkV2luZG93KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgV2luZG93ICR7cHJvbXB0UmVhc29uLndpbmRvd05hbWV9IG5vdCBmb3VuZCBpbiBvcGVuZWQgd2luZG93cy5gKTtcbiAgICAgIH1cbiAgICAgIGFmZmVjdGVkV29ya3NwYWNlcyA9IGdldEFmZmVjdGVkV29ya3NwYWNlc0luV2luZG93KG9wZW5lZFdpbmRvdywgcHJvbXB0UmVhc29uLndvcmtzcGFjZU5hbWUpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ0NMT1NFX09USEVSX1dJTkRPV1MnOiB7XG4gICAgICBjb25zdCB3aW5kb3dzVG9DbG9zZSA9IG9wZW5lZFdpbmRvd3MuZmlsdGVyKCh3aW5kb3cpID0+IHdpbmRvdy53aW5kb3dOYW1lICE9PSBwcm9tcHRSZWFzb24ud2luZG93TmFtZVRvU3BhcmUpO1xuICAgICAgYWZmZWN0ZWRXb3Jrc3BhY2VzID0gd2luZG93c1RvQ2xvc2UuZmxhdE1hcCgodykgPT4gZ2V0QWZmZWN0ZWRXb3Jrc3BhY2VzSW5XaW5kb3codykpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGFmZmVjdGVkV29ya3NwYWNlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpOyAvLyBubyB1bnNhdmVkIGNoYW5nZXMsIG5vIG5lZWQgdG8gcHJvbXB0XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBkaXNwb3NlID0gc2hvd01vZGFsKCd3b3Jrc3BhY2UyLWNsb3NlLXByb21wdCcsIHtcbiAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgICBkaXNwb3NlKCk7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgb25DYW5jZWw6ICgpID0+IHtcbiAgICAgICAgZGlzcG9zZSgpO1xuICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBhZmZlY3RlZFdvcmtzcGFjZVRpdGxlczogYWZmZWN0ZWRXb3Jrc3BhY2VzLm1hcChcbiAgICAgICAgKHdvcmtzcGFjZSkgPT4gd29ya3NwYWNlVGl0bGVCeVdvcmtzcGFjZU5hbWVbd29ya3NwYWNlLndvcmtzcGFjZU5hbWVdLFxuICAgICAgKSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IHdvcmtzcGFjZTJTdG9yZUFjdGlvbnMgPSB7XG4gIHNldFdpbmRvd01heGltaXplZChzdGF0ZTogV29ya3NwYWNlU3RvcmVTdGF0ZTIsIHdpbmRvd05hbWU6IHN0cmluZywgbWF4aW1pemVkOiBib29sZWFuKSB7XG4gICAgY29uc3Qgb3BlbmVkV2luZG93SW5kZXggPSBzdGF0ZS5vcGVuZWRXaW5kb3dzLmZpbmRJbmRleCgoYSkgPT4gYS53aW5kb3dOYW1lID09PSB3aW5kb3dOYW1lKTtcbiAgICBjb25zdCBvcGVuZWRXaW5kb3dzID0gWy4uLnN0YXRlLm9wZW5lZFdpbmRvd3NdO1xuICAgIGNvbnN0IGN1cnJlbnRXaW5kb3cgPSB7IC4uLm9wZW5lZFdpbmRvd3Nbb3BlbmVkV2luZG93SW5kZXhdLCBtYXhpbWl6ZWQgfTtcblxuICAgIG9wZW5lZFdpbmRvd3Nbb3BlbmVkV2luZG93SW5kZXhdID0gY3VycmVudFdpbmRvdztcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG9wZW5lZFdpbmRvd3MsXG4gICAgfTtcbiAgfSxcbiAgLy8gaGlkZXMgdGhlIG1vc3QgcmVjZW50bHkgb3BlbmVkIHdpbmRvdyAoYWxsIG90aGVyIG9wZW5lZCB3aW5kb3dzIGFyZSBpbXBsaWNpdGx5IGhpZGRlbilcbiAgaGlkZVdpbmRvdyhzdGF0ZTogV29ya3NwYWNlU3RvcmVTdGF0ZTIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBpc01vc3RSZWNlbnRseU9wZW5lZFdpbmRvd0hpZGRlbjogdHJ1ZSxcbiAgICB9O1xuICB9LFxuICByZXN0b3JlV2luZG93KHN0YXRlOiBXb3Jrc3BhY2VTdG9yZVN0YXRlMiwgd2luZG93TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgb3BlbmVkV2luZG93SW5kZXggPSBzdGF0ZS5vcGVuZWRXaW5kb3dzLmZpbmRJbmRleCgoYSkgPT4gYS53aW5kb3dOYW1lID09PSB3aW5kb3dOYW1lKTtcbiAgICBjb25zdCBjdXJyZW50V2luZG93ID0gc3RhdGUub3BlbmVkV2luZG93c1tvcGVuZWRXaW5kb3dJbmRleF07XG4gICAgY29uc3Qgb3BlbmVkV2luZG93cyA9IFsuLi5zdGF0ZS5vcGVuZWRXaW5kb3dzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gb3BlbmVkV2luZG93SW5kZXgpLCBjdXJyZW50V2luZG93XTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBvcGVuZWRXaW5kb3dzLFxuICAgICAgaXNNb3N0UmVjZW50bHlPcGVuZWRXaW5kb3dIaWRkZW46IGZhbHNlLFxuICAgIH07XG4gIH0sXG4gIGNsb3NlV29ya3NwYWNlKHN0YXRlLCB3b3Jrc3BhY2VOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBvcGVuZWRXaW5kb3dJbmRleCA9IGdldE9wZW5lZFdpbmRvd0luZGV4QnlXb3Jrc3BhY2Uod29ya3NwYWNlTmFtZSk7XG4gICAgaWYgKG9wZW5lZFdpbmRvd0luZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIHN0YXRlOyAvLyBuby1vcCBpZiB0aGUgd2luZG93IGRvZXMgbm90IGV4aXN0XG4gICAgfVxuXG4gICAgY29uc3Qgd2luZG93ID0geyAuLi5zdGF0ZS5vcGVuZWRXaW5kb3dzW29wZW5lZFdpbmRvd0luZGV4XSB9O1xuICAgIGNvbnN0IHdvcmtzcGFjZUluZGV4ID0gd2luZG93Lm9wZW5lZFdvcmtzcGFjZXMuZmluZEluZGV4KCh3KSA9PiB3LndvcmtzcGFjZU5hbWUgPT09IHdvcmtzcGFjZU5hbWUpO1xuICAgIGNvbnN0IG9wZW5lZFdpbmRvd3MgPSBbLi4uc3RhdGUub3BlbmVkV2luZG93c107XG4gICAgLy8gY2xvc2UgYWxsIGNoaWxkcmVuIG9mIHRoZSBpbnB1dCB3b3Jrc3BhY2UgYXMgd2VsbFxuICAgIHdpbmRvdy5vcGVuZWRXb3Jrc3BhY2VzID0gd2luZG93Lm9wZW5lZFdvcmtzcGFjZXMuc2xpY2UoMCwgd29ya3NwYWNlSW5kZXgpO1xuXG4gICAgbGV0IGhpZGRlbiA9IHN0YXRlLmlzTW9zdFJlY2VudGx5T3BlbmVkV2luZG93SGlkZGVuO1xuICAgIGlmICh3aW5kb3cub3BlbmVkV29ya3NwYWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHdhc01vc3RSZWNlbnRXaW5kb3cgPSBvcGVuZWRXaW5kb3dJbmRleCA9PT0gc3RhdGUub3BlbmVkV2luZG93cy5sZW5ndGggLSAxO1xuICAgICAgLy8gaWYgbm8gd29ya3NwYWNlcyBsZWZ0LCByZW1vdmUgdGhlIHdpbmRvd1xuICAgICAgb3BlbmVkV2luZG93cy5zcGxpY2Uob3BlbmVkV2luZG93SW5kZXgsIDEpO1xuICAgICAgLy8gSWYgd2UgcmVtb3ZlZCB0aGUgbW9zdCByZWNlbnQgd2luZG93IGFuZCB0aGVyZSBhcmUgc3RpbGwgd2luZG93cyBsZWZ0LFxuICAgICAgLy8gdGhlIG5ldyBtb3N0IHJlY2VudCB3aW5kb3cgc2hvdWxkIGJlIHNob3duXG4gICAgICBpZiAod2FzTW9zdFJlY2VudFdpbmRvdyAmJiBvcGVuZWRXaW5kb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaGlkZGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHRoZXJlIGFyZSBzdGlsbCB3b3Jrc3BhY2VzIGxlZnQsIGp1c3QgdXBkYXRlIHRoZSB3aW5kb3dcbiAgICAgIG9wZW5lZFdpbmRvd3Nbb3BlbmVkV2luZG93SW5kZXhdID0gd2luZG93O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG9wZW5lZFdpbmRvd3MsXG4gICAgICBpc01vc3RSZWNlbnRseU9wZW5lZFdpbmRvd0hpZGRlbjogaGlkZGVuLFxuICAgIH07XG4gIH0sXG4gIG9wZW5DaGlsZFdvcmtzcGFjZShcbiAgICBzdGF0ZSxcbiAgICBwYXJlbnRXb3Jrc3BhY2VOYW1lOiBzdHJpbmcsXG4gICAgY2hpbGRXb3Jrc3BhY2VOYW1lOiBzdHJpbmcsXG4gICAgY2hpbGRXb3Jrc3BhY2VQcm9wczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKSB7XG4gICAgY29uc3QgY2hpbGRXb3Jrc3BhY2VEZWYgPSBzdGF0ZS5yZWdpc3RlcmVkV29ya3NwYWNlc0J5TmFtZVtjaGlsZFdvcmtzcGFjZU5hbWVdO1xuICAgIGlmICghY2hpbGRXb3Jrc3BhY2VEZWYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gd29ya3NwYWNlIG5hbWVkIFwiJHtjaGlsZFdvcmtzcGFjZU5hbWV9XCIgcmVnaXN0ZXJlZGApO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnRXb3Jrc3BhY2VEZWYgPSBzdGF0ZS5yZWdpc3RlcmVkV29ya3NwYWNlc0J5TmFtZVtwYXJlbnRXb3Jrc3BhY2VOYW1lXTtcbiAgICBpZiAoIXBhcmVudFdvcmtzcGFjZURlZikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyB3b3Jrc3BhY2UgbmFtZWQgXCIke3BhcmVudFdvcmtzcGFjZU5hbWV9XCIgcmVnaXN0ZXJlZGApO1xuICAgIH1cbiAgICBpZiAocGFyZW50V29ya3NwYWNlRGVmLndpbmRvdyAhPT0gY2hpbGRXb3Jrc3BhY2VEZWYud2luZG93KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDaGlsZCB3b3Jrc3BhY2UgJHtjaGlsZFdvcmtzcGFjZU5hbWV9IGRvZXMgbm90IGJlbG9uZyB0byB0aGUgc2FtZSB3b3Jrc3BhY2Ugd2luZG93IGFzIHBhcmVudCB3b3Jrc3BhY2UgJHtwYXJlbnRXb3Jrc3BhY2VOYW1lfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGFzIHRoZSByZXF1ZXN0IHdvcmtzcGFjZSBzaG91bGQgYmUgYSBjaGlsZCB3b3Jrc3BhY2UsIHRoZSBjb3JyZXNwb25kaW5nIHdpbmRvd1xuICAgIC8vIHRvIGNvbnRhaW4gdGhlIHdvcmtzcGFjZSBzaG91bGQgYWxyZWFkeSBiZSBvcGVuZWRcbiAgICBjb25zdCBvcGVuZWRXaW5kb3dJbmRleCA9IHN0YXRlLm9wZW5lZFdpbmRvd3MuZmluZEluZGV4KCh3aW5kb3cpID0+IHdpbmRvdy53aW5kb3dOYW1lID09PSBjaGlsZFdvcmtzcGFjZURlZi53aW5kb3cpO1xuICAgIGlmIChvcGVuZWRXaW5kb3dJbmRleCA9PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IG9wZW4gY2hpbGQgd29ya3NwYWNlICR7Y2hpbGRXb3Jrc3BhY2VOYW1lfSBhcyB3aW5kb3cgJHtjaGlsZFdvcmtzcGFjZURlZi53aW5kb3d9IGlzIG5vdCBvcGVuZWRgLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgb3BlbmVkV2luZG93ID0gc3RhdGUub3BlbmVkV2luZG93c1tvcGVuZWRXaW5kb3dJbmRleF07XG4gICAgY29uc3QgeyBvcGVuZWRXb3Jrc3BhY2VzIH0gPSBvcGVuZWRXaW5kb3c7XG4gICAgaWYgKG9wZW5lZFdvcmtzcGFjZXNbb3BlbmVkV29ya3NwYWNlcy5sZW5ndGggLSAxXS53b3Jrc3BhY2VOYW1lICE9PSBwYXJlbnRXb3Jrc3BhY2VOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgb3BlbiBjaGlsZCB3b3Jrc3BhY2UgJHtjaGlsZFdvcmtzcGFjZU5hbWV9IGZyb20gcGFyZW50IHdvcmtzcGFjZSAke3BhcmVudFdvcmtzcGFjZU5hbWV9IGFzIHRoZSBwYXJlbnQgaXMgbm90IHRoZSBtb3N0IHJlY2VudGx5IG9wZW5lZCB3b3Jrc3BhY2Ugd2l0aGluIHRoZSB3b3Jrc3BhY2Ugd2luZG93YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZFdpbmRvd3M6IHN0YXRlLm9wZW5lZFdpbmRvd3MubWFwKCh3LCBpKSA9PiB7XG4gICAgICAgIGlmIChpID09IG9wZW5lZFdpbmRvd0luZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLncsXG4gICAgICAgICAgICBvcGVuZWRXb3Jrc3BhY2VzOiBbLi4udy5vcGVuZWRXb3Jrc3BhY2VzLCBuZXdPcGVuZWRXb3Jrc3BhY2UoY2hpbGRXb3Jrc3BhY2VOYW1lLCBjaGlsZFdvcmtzcGFjZVByb3BzKV0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdztcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgfTtcbiAgfSxcbiAgc2V0SGFzVW5zYXZlZENoYW5nZXMoc3RhdGU6IFdvcmtzcGFjZVN0b3JlU3RhdGUyLCB3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIGhhc1Vuc2F2ZWRDaGFuZ2VzOiBib29sZWFuKSB7XG4gICAgY29uc3Qgb3BlbmVkV2luZG93SW5kZXggPSBnZXRPcGVuZWRXaW5kb3dJbmRleEJ5V29ya3NwYWNlKHdvcmtzcGFjZU5hbWUpO1xuICAgIGlmIChvcGVuZWRXaW5kb3dJbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBzdGF0ZTsgLy8gbm8tb3AgaWYgdGhlIHdpbmRvdyBkb2VzIG5vdCBleGlzdFxuICAgIH1cblxuICAgIGNvbnN0IG9wZW5lZFdpbmRvdyA9IHsgLi4uc3RhdGUub3BlbmVkV2luZG93c1tvcGVuZWRXaW5kb3dJbmRleF0gfTtcbiAgICBjb25zdCB3b3Jrc3BhY2VJbmRleCA9IG9wZW5lZFdpbmRvdy5vcGVuZWRXb3Jrc3BhY2VzLmZpbmRJbmRleCgodykgPT4gdy53b3Jrc3BhY2VOYW1lID09PSB3b3Jrc3BhY2VOYW1lKTtcblxuICAgIGlmICh3b3Jrc3BhY2VJbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBzdGF0ZTsgLy8gbm8tb3AgaWYgdGhlIHdvcmtzcGFjZSBpcyBub3QgZm91bmRcbiAgICB9XG5cbiAgICBvcGVuZWRXaW5kb3cub3BlbmVkV29ya3NwYWNlc1t3b3Jrc3BhY2VJbmRleF0gPSB7XG4gICAgICAuLi5vcGVuZWRXaW5kb3cub3BlbmVkV29ya3NwYWNlc1t3b3Jrc3BhY2VJbmRleF0sXG4gICAgICBoYXNVbnNhdmVkQ2hhbmdlcyxcbiAgICB9O1xuXG4gICAgY29uc3Qgb3BlbmVkV2luZG93cyA9IFsuLi5zdGF0ZS5vcGVuZWRXaW5kb3dzXTtcbiAgICBvcGVuZWRXaW5kb3dzW29wZW5lZFdpbmRvd0luZGV4XSA9IG9wZW5lZFdpbmRvdztcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG9wZW5lZFdpbmRvd3MsXG4gICAgfTtcbiAgfSxcbiAgc2V0V29ya3NwYWNlVGl0bGUoc3RhdGU6IFdvcmtzcGFjZVN0b3JlU3RhdGUyLCB3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgY29uc3QgbmV3V29ya3NwYWNlVGl0bGVCeVdvcmtzcGFjZU5hbWUgPSB7IC4uLnN0YXRlLndvcmtzcGFjZVRpdGxlQnlXb3Jrc3BhY2VOYW1lIH07XG5cbiAgICBpZiAodGl0bGUgPT09IG51bGwpIHtcbiAgICAgIGRlbGV0ZSBuZXdXb3Jrc3BhY2VUaXRsZUJ5V29ya3NwYWNlTmFtZVt3b3Jrc3BhY2VOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3V29ya3NwYWNlVGl0bGVCeVdvcmtzcGFjZU5hbWVbd29ya3NwYWNlTmFtZV0gPSB0aXRsZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICB3b3Jrc3BhY2VUaXRsZUJ5V29ya3NwYWNlTmFtZTogbmV3V29ya3NwYWNlVGl0bGVCeVdvcmtzcGFjZU5hbWUsXG4gICAgfTtcbiAgfSxcbn0gc2F0aXNmaWVzIEFjdGlvbnM8V29ya3NwYWNlU3RvcmVTdGF0ZTI+O1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlV29ya3NwYWNlMlN0b3JlKCkge1xuICByZXR1cm4gdXNlU3RvcmVXaXRoQWN0aW9ucyh3b3Jrc3BhY2UyU3RvcmUsIHdvcmtzcGFjZTJTdG9yZUFjdGlvbnMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHJlYWN0IENvbnRleHQgY29udGFpbmluZyBwcm9wcyBwYXNzZWQgaW50byBhIHdvcmtzcGFjZS5cbiAqIFRoaXMgaG9vayBNVVNUIGJlIGNhbGxlZCBpbnNpZGUgYSBjaGlsZCBvZiA8V29ya3NwYWNlMj5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZVdvcmtzcGFjZTJDb250ZXh0ID0gKCkgPT5cbiAgdXNlQ29udGV4dDxXb3Jrc3BhY2UyRGVmaW5pdGlvblByb3BzPihTaW5nbGVTcGFDb250ZXh0IGFzIHVua25vd24gYXMgQ29udGV4dDxXb3Jrc3BhY2UyRGVmaW5pdGlvblByb3BzPik7XG5cbi8qKlxuICogQHJldHVybnMgYSBsaXN0IG9mIHJlZ2lzdGVyZWQgd29ya3NwYWNlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFJlZ2lzdGVyZWRXb3Jrc3BhY2UyTmFtZXMgPSAoKSA9PiB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh3b3Jrc3BhY2UyU3RvcmUuZ2V0U3RhdGUoKS5yZWdpc3RlcmVkV29ya3NwYWNlc0J5TmFtZSk7XG59O1xuXG5mdW5jdGlvbiBuZXdPcGVuZWRXb3Jrc3BhY2Uod29ya3NwYWNlTmFtZTogc3RyaW5nLCB3b3Jrc3BhY2VQcm9wczogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwpOiBPcGVuZWRXb3Jrc3BhY2Uge1xuICByZXR1cm4ge1xuICAgIHdvcmtzcGFjZU5hbWUsXG4gICAgcHJvcHM6IHdvcmtzcGFjZVByb3BzID8/IHt9LFxuICAgIGhhc1Vuc2F2ZWRDaGFuZ2VzOiBmYWxzZSxcbiAgICB1dWlkOiB1dWlkVjQoKSxcbiAgfTtcbn1cbiJdLCJuYW1lcyI6WyJ1c2VDb250ZXh0IiwiU2luZ2xlU3BhQ29udGV4dCIsInY0IiwidXVpZFY0IiwiZ2V0R3JvdXBCeVdpbmRvd05hbWUiLCJnZXRPcGVuZWRXaW5kb3dJbmRleEJ5V29ya3NwYWNlIiwiZ2V0V2luZG93QnlXb3Jrc3BhY2VOYW1lIiwid29ya3NwYWNlMlN0b3JlIiwidXNlU3RvcmVXaXRoQWN0aW9ucyIsInNoYWxsb3dFcXVhbCIsInNob3dNb2RhbCIsImxhdW5jaFdvcmtzcGFjZUdyb3VwMiIsImdyb3VwTmFtZSIsImdyb3VwUHJvcHMiLCJvcGVuZWRHcm91cCIsIm9rVG9DbG9zZVdvcmtzcGFjZXMiLCJnZXRTdGF0ZSIsImFyZVByb3BzQ29tcGF0aWJsZSIsInByb3BzIiwicHJvbXB0Rm9yQ2xvc2luZ1dvcmtzcGFjZXMiLCJyZWFzb24iLCJleHBsaWNpdCIsInNldFN0YXRlIiwic3RhdGUiLCJvcGVuZWRXaW5kb3dzIiwiY2xvc2VXb3Jrc3BhY2VHcm91cDIiLCJkaXNjYXJkVW5zYXZlZENoYW5nZXMiLCJsZW5ndGgiLCJsYXVuY2hXb3Jrc3BhY2UyIiwid29ya3NwYWNlTmFtZSIsIndvcmtzcGFjZVByb3BzIiwid2luZG93UHJvcHMiLCJzdG9yZVN0YXRlIiwid2luZG93RGVmIiwid2luZG93TmFtZSIsImdyb3VwRGVmIiwib3BlbmVkV2luZG93SW5kZXgiLCJpc1dpbmRvd0FscmVhZHlPcGVuZWQiLCJvcGVuZWRXaW5kb3ciLCJpc01vc3RSZWNlbnRseU9wZW5lZFdpbmRvd0hpZGRlbiIsIm9wZW5lZFdvcmtzcGFjZXMiLCJvcGVuZWRXb3Jrc3BhY2UiLCJyZWdpc3RlcmVkV29ya3NwYWNlc0J5TmFtZSIsIkVycm9yIiwibmFtZSIsIm5ld09wZW5lZFdvcmtzcGFjZSIsIm1heGltaXplZCIsImZpbmQiLCJ3Iiwid29ya3NwYWNlMlN0b3JlQWN0aW9ucyIsInJlc3RvcmVXaW5kb3ciLCJmaWx0ZXIiLCJfIiwiaSIsInBlcnNpc3RlbmNlIiwid2luZG93TmFtZVRvU3BhcmUiLCJhIiwiYiIsInByb21wdFJlYXNvbiIsImdldEFmZmVjdGVkV29ya3NwYWNlc0luV2luZG93Iiwib25seVVwVG9UaGlzV29ya3NwYWNlIiwicmV0IiwiaGFzVW5zYXZlZENoYW5nZXMiLCJwdXNoIiwid29ya3NwYWNlVGl0bGVCeVdvcmtzcGFjZU5hbWUiLCJhZmZlY3RlZFdvcmtzcGFjZXMiLCJmbGF0TWFwIiwid2luZG93Iiwid2luZG93c1RvQ2xvc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImRpc3Bvc2UiLCJvbkNvbmZpcm0iLCJvbkNhbmNlbCIsImFmZmVjdGVkV29ya3NwYWNlVGl0bGVzIiwibWFwIiwid29ya3NwYWNlIiwic2V0V2luZG93TWF4aW1pemVkIiwiZmluZEluZGV4IiwiY3VycmVudFdpbmRvdyIsImhpZGVXaW5kb3ciLCJjbG9zZVdvcmtzcGFjZSIsIndvcmtzcGFjZUluZGV4Iiwic2xpY2UiLCJoaWRkZW4iLCJ3YXNNb3N0UmVjZW50V2luZG93Iiwic3BsaWNlIiwib3BlbkNoaWxkV29ya3NwYWNlIiwicGFyZW50V29ya3NwYWNlTmFtZSIsImNoaWxkV29ya3NwYWNlTmFtZSIsImNoaWxkV29ya3NwYWNlUHJvcHMiLCJjaGlsZFdvcmtzcGFjZURlZiIsInBhcmVudFdvcmtzcGFjZURlZiIsInNldEhhc1Vuc2F2ZWRDaGFuZ2VzIiwic2V0V29ya3NwYWNlVGl0bGUiLCJ0aXRsZSIsIm5ld1dvcmtzcGFjZVRpdGxlQnlXb3Jrc3BhY2VOYW1lIiwidXNlV29ya3NwYWNlMlN0b3JlIiwidXNlV29ya3NwYWNlMkNvbnRleHQiLCJnZXRSZWdpc3RlcmVkV29ya3NwYWNlMk5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsInV1aWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-styleguide/src/workspaces2/workspace2.ts\n");
1269
1269
 
1270
1270
  /***/ }),
1271
1271