@deephaven/code-studio 0.51.1-beta.0 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/build/assets/{AppRoot-95b445b1.js → AppRoot-0e770d06.js} +3 -3
  2. package/build/assets/AppRoot-0e770d06.js.map +1 -0
  3. package/build/assets/{ControlType-027c1acf.js → ControlType-bcbdcbf6.js} +11 -11
  4. package/build/assets/{ControlType-027c1acf.js.map → ControlType-bcbdcbf6.js.map} +1 -1
  5. package/build/assets/{IrisGridModelFactory-596e2330.js → IrisGridModelFactory-b115d71d.js} +7 -7
  6. package/build/assets/IrisGridModelFactory-b115d71d.js.map +1 -0
  7. package/build/assets/PluginTypes-9079776d.js +3 -0
  8. package/build/assets/PluginTypes-9079776d.js.map +1 -0
  9. package/build/assets/{index-dd853186.js → index-49f743f7.js} +9 -9
  10. package/build/assets/index-49f743f7.js.map +1 -0
  11. package/build/assets/{index-edeb8e46.js → index-53ce2236.js} +2 -2
  12. package/build/assets/index-53ce2236.js.map +1 -0
  13. package/build/assets/{index-ebcbe5c2.js → index-9caf8a94.js} +3 -3
  14. package/build/assets/{index-ebcbe5c2.js.map → index-9caf8a94.js.map} +1 -1
  15. package/build/assets/{index-f4e8d60a.css → index-a1383ce4.css} +1 -1
  16. package/build/assets/{useUser-a0bd943d.js → useUser-799bc5c6.js} +2 -2
  17. package/build/assets/{useUser-a0bd943d.js.map → useUser-799bc5c6.js.map} +1 -1
  18. package/build/index.html +2 -2
  19. package/package.json +31 -31
  20. package/build/assets/AppRoot-95b445b1.js.map +0 -1
  21. package/build/assets/IrisGridModelFactory-596e2330.js.map +0 -1
  22. package/build/assets/PluginTypes-a6f83831.js +0 -3
  23. package/build/assets/PluginTypes-a6f83831.js.map +0 -1
  24. package/build/assets/index-dd853186.js.map +0 -1
  25. package/build/assets/index-edeb8e46.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-53ce2236.js","sources":["../../../dashboard/dist/layout/useDashboardPanel.js","../../../dashboard-core-plugins/dist/events/ChartEvent.js","../../../dashboard-core-plugins/dist/events/IrisGridEvent.js","../../../dashboard-core-plugins/dist/events/PandasEvent.js","../../../dashboard-core-plugins/dist/panels/WidgetPanelTooltip.js","../../../dashboard-core-plugins/dist/panels/WidgetPanel.js","../../../dashboard-core-plugins/dist/panels/ChartFilterOverlay.js","../../../dashboard-core-plugins/dist/panels/ChartColumnSelectorOverlay.js","../../../dashboard-core-plugins/dist/panels/ChartPanelUtils.js","../../../dashboard-core-plugins/dist/panels/ChartPanel.js","../../../dashboard-core-plugins/dist/controls/dropdown-filter/DropdownFilter.js","../../../dashboard-core-plugins/dist/panels/DropdownFilterPanel.js","../../../dashboard-core-plugins/dist/panels/FilterSetManager.js","../../../dashboard-core-plugins/dist/panels/IrisGridPanelTooltip.js","../../../dashboard-core-plugins/dist/panels/IrisGridPanelTypes.js","../../../dashboard-core-plugins/dist/panels/IrisGridPanel.js","../../../dashboard-core-plugins/dist/controls/input-filter/InputFilter.js","../../../dashboard-core-plugins/dist/panels/InputFilterPanel.js","../../../dashboard-core-plugins/dist/panels/FilterSetManagerPanel.js","../../../dashboard-core-plugins/dist/controls/markdown/MarkdownContainer.js","../../../dashboard-core-plugins/dist/controls/markdown/MarkdownStartPage.js","../../../dashboard-core-plugins/dist/controls/markdown/MarkdownEditor.js","../../../dashboard-core-plugins/dist/panels/MarkdownPanel.js","../../../dashboard-core-plugins/dist/panels/PandasPanel.js","../../../dashboard-core-plugins/dist/panels/MockFileStorageTable.js","../../../dashboard-core-plugins/dist/panels/MockFileStorage.js","../../../dashboard-core-plugins/dist/ChartPlugin.js","../../../dashboard-core-plugins/dist/ChartPluginConfig.js","../../../dashboard-core-plugins/dist/ChartBuilderPlugin.js","../../../dashboard-core-plugins/dist/ChartBuilderPluginConfig.js","../../../dashboard-core-plugins/dist/FilterPlugin.js","../../../dashboard-core-plugins/dist/FilterPluginConfig.js","../../../dashboard-core-plugins/dist/useLoadTablePlugin.js","../../../dashboard-core-plugins/dist/useHydrateGrid.js","../../../dashboard-core-plugins/dist/GridPlugin.js","../../../dashboard-core-plugins/dist/GridPluginConfig.js","../../../dashboard-core-plugins/dist/linker/LinkerUtils.js","../../../dashboard-core-plugins/dist/linker/LinkerLink.js","../../../dashboard-core-plugins/dist/linker/LinkerOverlayContent.js","../../../dashboard-core-plugins/dist/linker/Linker.js","../../../dashboard-core-plugins/dist/LinkerPlugin.js","../../../dashboard-core-plugins/dist/LinkerPluginConfig.js","../../../dashboard-core-plugins/dist/controls/markdown/MarkdownUtils.js","../../../dashboard-core-plugins/dist/MarkdownPlugin.js","../../../dashboard-core-plugins/dist/MarkdownPluginConfig.js","../../../dashboard-core-plugins/dist/PandasPlugin.js","../../../dashboard-core-plugins/dist/PandasPluginConfig.js","../../../dashboard-core-plugins/dist/WidgetLoaderPlugin.js","../../../dashboard-core-plugins/dist/WidgetLoaderPluginConfig.js","../../../dashboard-core-plugins/dist/prop-types/UIPropTypes.js","../../../dashboard-core-plugins/dist/prop-types/CommonPropTypes.js"],"sourcesContent":["import { useCallback } from 'react';\nimport shortid from 'shortid';\nimport PanelEvent from \"../PanelEvent.js\";\nimport LayoutUtils from \"./LayoutUtils.js\";\nimport useListener from \"./useListener.js\";\nimport usePanelRegistration from \"./usePanelRegistration.js\";\n/**\n * Register a panel that will be opened when one of the `supportedTypes` objects is triggered.\n */\nexport function useDashboardPanel(_ref) {\n var {\n dashboardProps,\n componentName,\n component,\n supportedTypes,\n hydrate,\n dehydrate\n } = _ref;\n var {\n id,\n layout,\n registerComponent\n } = dashboardProps;\n var handlePanelOpen = useCallback(_ref2 => {\n var _widget$title;\n var {\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget\n } = _ref2;\n var {\n id: widgetId,\n type\n } = widget;\n var name = (_widget$title = widget.title) !== null && _widget$title !== void 0 ? _widget$title : widget.name;\n var isSupportedType = Array.isArray(supportedTypes) && supportedTypes.includes(type) || type === supportedTypes;\n if (!isSupportedType) {\n // Only want to listen for your custom variable types\n return;\n }\n var metadata = {\n id: widgetId,\n name,\n type\n };\n var props = {\n localDashboardId: id,\n metadata,\n fetch\n };\n if (hydrate != null) {\n props = hydrate(props, id);\n }\n var config = {\n type: 'react-component',\n component: componentName,\n props,\n title: name,\n id: panelId\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n dragEvent\n });\n }, [componentName, hydrate, id, layout, supportedTypes]);\n\n /**\n * Register our custom component type so the layout know hows to open it\n */\n usePanelRegistration(registerComponent, component, hydrate, dehydrate);\n\n /**\n * Listen for panel open events so we know when to open a panel\n */\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n}\nexport default useDashboardPanel;\n//# sourceMappingURL=useDashboardPanel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass ChartEvent {}\n_defineProperty(ChartEvent, \"OPEN\", 'ChartEvent.OPEN');\n_defineProperty(ChartEvent, \"CLOSE\", 'ChartEvent.CLOSE');\n_defineProperty(ChartEvent, \"COLUMN_SELECTED\", 'ChartEvent.COLUMN_SELECTED');\nexport default ChartEvent;\n//# sourceMappingURL=ChartEvent.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport class IrisGridEvent {}\n_defineProperty(IrisGridEvent, \"OPEN_GRID\", 'IrisGridEvent.OPEN_GRID');\n_defineProperty(IrisGridEvent, \"CLOSE_GRID\", 'IrisGridEvent.CLOSE_GRID');\n_defineProperty(IrisGridEvent, \"DATA_SELECTED\", 'IrisGridEvent.DATA_SELECTED');\n_defineProperty(IrisGridEvent, \"COLUMN_SELECTED\", 'IrisGridEvent.COLUMN_SELECTED');\n_defineProperty(IrisGridEvent, \"STATE_CHANGED\", 'IrisGridEvent.STATE_CHANGED');\n_defineProperty(IrisGridEvent, \"CREATE_CHART\", 'IrisGridevent.CREATE_CHART');\nexport default IrisGridEvent;\n//# sourceMappingURL=IrisGridEvent.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass PandasEvent {}\n_defineProperty(PandasEvent, \"OPEN\", 'PandasEvent.OPEN');\n_defineProperty(PandasEvent, \"CLOSE\", 'PandasEvent.CLOSE');\nexport default PandasEvent;\n//# sourceMappingURL=PandasEvent.js.map","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CopyButton } from '@deephaven/components';\nimport { GLPropTypes, LayoutUtils } from '@deephaven/dashboard';\nimport \"./WidgetPanelTooltip.css\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nfunction WidgetPanelTooltip(props) {\n var {\n widgetType,\n widgetName,\n glContainer,\n description,\n children\n } = props;\n var panelTitle = LayoutUtils.getTitleFromContainer(glContainer);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"tab-tooltip-grid-container\",\n children: [/*#__PURE__*/_jsxs(\"span\", {\n className: \"tab-tooltip-title\",\n children: [widgetType, \" Name\"]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"tab-tooltip-name-wrapper\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"tab-tooltip-name\",\n children: widgetName\n }), /*#__PURE__*/_jsx(CopyButton, {\n className: \"tab-tooltip-copy\",\n tooltip: \"Copy name\",\n copy: widgetName\n })]\n }), widgetName !== panelTitle && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"tab-tooltip-title\",\n children: \"Display Name\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"tab-tooltip-name\",\n children: panelTitle\n })]\n }), description && /*#__PURE__*/_jsx(\"div\", {\n className: \"tab-tooltip-description\",\n children: description\n }), children]\n });\n}\nWidgetPanelTooltip.propTypes = {\n glContainer: GLPropTypes.Container.isRequired,\n widgetType: PropTypes.string,\n widgetName: PropTypes.string,\n description: PropTypes.string,\n children: PropTypes.node\n};\nWidgetPanelTooltip.defaultProps = {\n widgetType: '',\n widgetName: '',\n description: null,\n children: null\n};\nexport default WidgetPanelTooltip;\n//# sourceMappingURL=WidgetPanelTooltip.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { ContextActions } from '@deephaven/components';\nimport { copyToClipboard } from '@deephaven/utils';\nimport Panel from \"./Panel.js\";\nimport WidgetPanelTooltip from \"./WidgetPanelTooltip.js\";\nimport \"./WidgetPanel.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Widget panel component that has a loading spinner and displays an error message when set\n */\nclass WidgetPanel extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"getCachedRenderTabTooltip\", memoize((showTabTooltip, glContainer, widgetType, widgetName, description) => showTabTooltip ? () => /*#__PURE__*/_jsx(WidgetPanelTooltip, {\n glContainer: glContainer,\n widgetType: widgetType,\n widgetName: widgetName,\n description: description\n }) : null));\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleCopyName = this.handleCopyName.bind(this);\n this.state = {\n isClientDisconnected: false,\n isPanelDisconnected: false,\n isWidgetDisconnected: false,\n isWaitingForReconnect: false,\n isPanelInactive: false\n };\n }\n handleCopyName() {\n var {\n widgetName\n } = this.props;\n copyToClipboard(widgetName);\n }\n getErrorMessage() {\n var {\n errorMessage\n } = this.props;\n var {\n isClientDisconnected,\n isPanelDisconnected,\n isWidgetDisconnected,\n isWaitingForReconnect\n } = this.state;\n if (errorMessage) {\n return \"\".concat(errorMessage);\n }\n if (isClientDisconnected && isPanelDisconnected && isWaitingForReconnect) {\n return 'Disconnected from server.\\nCheck your internet connection.';\n }\n if (isClientDisconnected && isPanelDisconnected) {\n return 'Disconnected from server.';\n }\n if (isPanelDisconnected) {\n var {\n widgetName,\n widgetType\n } = this.props;\n return \"Variable \\\"\".concat(widgetName, \"\\\" not set.\\n\").concat(widgetType, \" does not exist yet.\");\n }\n if (isWidgetDisconnected) {\n var {\n widgetName: _widgetName\n } = this.props;\n return \"\".concat(_widgetName, \" is unavailable.\");\n }\n return undefined;\n }\n handleSessionClosed() {\n var {\n onSessionClose\n } = this.props;\n // The session has closed and we won't be able to reconnect, as this widget isn't persisted\n this.setState({\n isPanelDisconnected: true,\n isWaitingForReconnect: false\n });\n onSessionClose(...arguments);\n }\n handleSessionOpened() {\n var {\n onSessionOpen\n } = this.props;\n onSessionOpen(...arguments);\n }\n render() {\n var {\n children,\n className,\n componentPanel,\n isLoaded,\n isLoading,\n glContainer,\n glEventHub,\n isDisconnected,\n isClonable,\n isRenamable,\n showTabTooltip,\n renderTabTooltip,\n widgetType,\n widgetName,\n description,\n onClearAllFilters,\n onHide,\n onFocus,\n onBlur,\n onResize,\n onShow,\n onTabBlur,\n onTabFocus,\n onTabClicked\n } = this.props;\n var {\n isPanelDisconnected,\n isWidgetDisconnected,\n isPanelInactive\n } = this.state;\n var errorMessage = this.getErrorMessage();\n var doRenderTabTooltip = renderTabTooltip !== null && renderTabTooltip !== void 0 ? renderTabTooltip : this.getCachedRenderTabTooltip(showTabTooltip, glContainer, widgetType, widgetName, description);\n var additionalActions = [{\n title: \"Copy \".concat(widgetType, \" Name\"),\n group: ContextActions.groups.medium,\n order: 20,\n action: this.handleCopyName\n }];\n return /*#__PURE__*/_jsxs(Panel, {\n className: classNames(className, {\n disconnected: isPanelDisconnected || isWidgetDisconnected || isDisconnected,\n inactive: isPanelInactive\n }),\n componentPanel: componentPanel,\n glContainer: glContainer,\n glEventHub: glEventHub,\n onClearAllFilters: onClearAllFilters,\n onHide: onHide,\n onFocus: onFocus,\n onBlur: onBlur,\n onResize: onResize,\n onShow: onShow,\n onSessionClose: this.handleSessionClosed,\n onSessionOpen: this.handleSessionOpened,\n onTabBlur: onTabBlur,\n onTabFocus: onTabFocus,\n onTabClicked: onTabClicked,\n renderTabTooltip: doRenderTabTooltip,\n errorMessage: errorMessage,\n isLoaded: isLoaded,\n isLoading: isLoading,\n isClonable: isClonable,\n isRenamable: isRenamable,\n additionalActions: additionalActions,\n children: [children, isPanelInactive && /*#__PURE__*/_jsx(\"div\", {\n className: \"fill-parent-absolute\"\n })]\n });\n }\n}\n_defineProperty(WidgetPanel, \"defaultProps\", {\n className: '',\n errorMessage: null,\n isClonable: true,\n isDisconnected: false,\n isLoading: false,\n isLoaded: true,\n isRenamable: true,\n showTabTooltip: true,\n widgetName: 'Widget',\n widgetType: 'Widget',\n renderTabTooltip: null,\n description: '',\n onFocus: () => undefined,\n onBlur: () => undefined,\n onHide: () => undefined,\n onClearAllFilters: () => undefined,\n onResize: () => undefined,\n onSessionClose: () => undefined,\n onSessionOpen: () => undefined,\n onShow: () => undefined,\n onTabBlur: () => undefined,\n onTabFocus: () => undefined,\n onTabClicked: () => undefined\n});\nexport default WidgetPanel;\n//# sourceMappingURL=WidgetPanel.js.map","import React, { useCallback, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ButtonOld } from '@deephaven/components';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { TextUtils } from '@deephaven/utils';\nimport \"./ChartFilterOverlay.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nfunction ChartFilterOverlay(_ref) {\n var {\n columnMap,\n inputFilterMap,\n linkedColumnMap,\n onAdd,\n onOpenLinker,\n waitingFilterMap,\n waitingInputMap\n } = _ref;\n var inputMessage = useMemo(() => {\n var waitingColumns = Array.from(waitingInputMap.keys());\n var needsInputFilterValue = waitingColumns.find(columnName => inputFilterMap.get(columnName) != null);\n var needsLinkValue = waitingColumns.find(columnName => linkedColumnMap.get(columnName) != null);\n var columnsText = TextUtils.join(waitingColumns.map(item => \"\\\"\".concat(item, \"\\\"\")));\n if (needsInputFilterValue != null && needsInputFilterValue && needsLinkValue != null && needsLinkValue) {\n return \"Use a filter control or linked table to set a value for \".concat(columnsText);\n }\n if (needsInputFilterValue != null && needsInputFilterValue) {\n return \"Set a filter control value for \".concat(columnsText);\n }\n return \"Double click a row in a linked table to set a value for \".concat(columnsText);\n }, [inputFilterMap, linkedColumnMap, waitingInputMap]);\n var columns = useMemo(() => Array.from(columnMap.values()), [columnMap]);\n var handleAddClick = useCallback(event => {\n event.stopPropagation();\n event.preventDefault();\n onAdd(Array.from(waitingFilterMap.values()));\n }, [onAdd, waitingFilterMap]);\n var handleOpenLinker = useCallback(event => {\n event.stopPropagation();\n event.preventDefault();\n onOpenLinker();\n }, [onOpenLinker]);\n var isWaitingFilters = waitingFilterMap.size > 0;\n var isWaitingInput = !isWaitingFilters && waitingInputMap.size > 0;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"chart-panel-overlay chart-filter-overlay\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('chart-panel-overlay-content chart-filter-overlay-content', {\n 'chart-filter-waiting-filter': isWaitingFilters\n }, {\n 'chart-filter-waiting-input': isWaitingInput\n }),\n children: [isWaitingFilters && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"info-message\",\n children: \"This plot requires a filter control to be added to the layout or a table link to be created on the following columns:\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"waiting-filter-list\",\n children: columns.map(column => {\n var isColumnWaiting = waitingFilterMap.has(column.name);\n var icon = isColumnWaiting ? vsWarning : vsPass;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('waiting-filter-item', {\n 'is-invalid': isColumnWaiting\n }),\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: icon\n }), column.name]\n }, column.name);\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(ButtonOld, {\n onClick: handleAddClick,\n className: \"btn-primary\",\n children: \"Add Input Filters\"\n }), /*#__PURE__*/_jsx(ButtonOld, {\n onClick: handleOpenLinker,\n className: \"btn-primary\",\n children: \"Open Linker Tool\"\n })]\n })]\n }), isWaitingInput && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"info-message\",\n children: \"Waiting for User Input\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"\",\n children: inputMessage\n })]\n })]\n })\n });\n}\nChartFilterOverlay.propTypes = {\n columnMap: PropTypes.instanceOf(Map).isRequired,\n inputFilterMap: PropTypes.instanceOf(Map).isRequired,\n linkedColumnMap: PropTypes.instanceOf(Map).isRequired,\n onAdd: PropTypes.func.isRequired,\n onOpenLinker: PropTypes.func.isRequired,\n waitingFilterMap: PropTypes.instanceOf(Map).isRequired,\n waitingInputMap: PropTypes.instanceOf(Map).isRequired\n};\nexport default ChartFilterOverlay;\n//# sourceMappingURL=ChartFilterOverlay.js.map","import React from 'react';\nimport classNames from 'classnames';\nimport { SocketedButton } from '@deephaven/components';\nimport \"./ChartColumnSelectorOverlay.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction ChartColumnSelectorOverlay(_ref) {\n var {\n columns,\n onColumnSelected,\n onMouseEnter: _onMouseEnter,\n onMouseLeave\n } = _ref;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"chart-panel-overlay chart-column-selector-overlay\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('chart-panel-overlay-content'),\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"info-message\",\n children: \"This plot requires a filter control to be added to the layout or a table link to be created on the following columns:\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"waiting-column-select-list\",\n children: columns.map(column => /*#__PURE__*/_jsx(SocketedButton, {\n className: classNames('btn-chart-column-selector', ChartColumnSelectorOverlay.makeButtonClassName(column.name)),\n onClick: () => onColumnSelected(column.name),\n onMouseEnter: () => {\n if (_onMouseEnter) _onMouseEnter(column);\n },\n onMouseLeave: onMouseLeave,\n disabled: !column.isValid,\n isLinked: column.isActive,\n children: column.name\n }, column.name))\n })]\n })\n });\n}\nChartColumnSelectorOverlay.makeButtonClassName = columnName => \"btn-chart-column-selector-\".concat(columnName);\nChartColumnSelectorOverlay.defaultProps = {\n onMouseEnter: () => undefined,\n onMouseLeave: () => undefined\n};\nexport default ChartColumnSelectorOverlay;\n//# sourceMappingURL=ChartColumnSelectorOverlay.js.map","export function isChartPanelTableMetadata(metadata) {\n return metadata.settings !== undefined;\n}\nexport function isGLChartPanelState(panelState) {\n if (panelState == null) return false;\n var {\n settings,\n tableSettings\n } = panelState;\n return typeof settings === 'object' && typeof tableSettings === 'object';\n}\nexport function isChartPanelDehydratedProps(props) {\n return props != null && isGLChartPanelState(props.panelState);\n}\n//# sourceMappingURL=ChartPanelUtils.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport { CSSTransition } from 'react-transition-group';\nimport debounce from 'lodash.debounce';\nimport { Chart, ChartUtils, isFigureChartModel } from '@deephaven/chart';\nimport { getOpenedPanelMapForDashboard, LayoutUtils } from '@deephaven/dashboard';\nimport { IrisGridUtils } from '@deephaven/iris-grid';\nimport { ThemeExport } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { getActiveTool, getSettings, setActiveTool as setActiveToolAction } from '@deephaven/redux';\nimport { assertNotNull, Pending, PromiseUtils, TextUtils } from '@deephaven/utils';\nimport WidgetPanel from \"./WidgetPanel.js\";\nimport ToolType from \"../linker/ToolType.js\";\nimport { InputFilterEvent, ChartEvent } from \"../events/index.js\";\nimport { getColumnSelectionValidatorForDashboard, getInputFiltersForDashboard, getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, getTableMapForDashboard, setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction } from \"../redux/index.js\";\nimport ChartFilterOverlay from \"./ChartFilterOverlay.js\";\nimport ChartColumnSelectorOverlay from \"./ChartColumnSelectorOverlay.js\";\nimport \"./ChartPanel.css\";\nimport { isChartPanelTableMetadata } from \"./ChartPanelUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ChartPanel');\nvar UPDATE_MODEL_DEBOUNCE = 150;\n\n/** @deprecated Use `PanelMetadata` instead, providing a `name` instead of `figure` */\n\nfunction hasInputFilter(panel) {\n return panel.inputFilters != null;\n}\nfunction hasPanelState(panel) {\n return panel.panelState != null;\n}\nexport class ChartPanel extends Component {\n constructor(props) {\n var _props$containerRef;\n super(props);\n _defineProperty(this, \"panelContainer\", void 0);\n _defineProperty(this, \"chart\", void 0);\n _defineProperty(this, \"pending\", void 0);\n _defineProperty(this, \"getWaitingInputMap\", memoize((isFilterRequired, columnMap, filterMap) => {\n if (!isFilterRequired) {\n return new Map();\n }\n var waitingInputMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingInputMap.delete(name);\n });\n return waitingInputMap;\n }));\n _defineProperty(this, \"getWaitingFilterMap\", memoize((isFilterRequired, columnMap, filterMap, linkedColumnMap, inputFilterMap) => {\n if (!isFilterRequired) {\n return new Map();\n }\n var waitingFilterMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingFilterMap.delete(name);\n });\n inputFilterMap.forEach((value, name) => {\n waitingFilterMap.delete(name);\n });\n linkedColumnMap.forEach((column, name) => {\n waitingFilterMap.delete(name);\n });\n return waitingFilterMap;\n }));\n _defineProperty(this, \"getInputFilterColumnMap\", memoize((columnMap, inputFilters) => {\n var inputFilterMap = new Map();\n for (var i = 0; i < inputFilters.length; i += 1) {\n var inputFilter = inputFilters[i];\n var {\n name,\n type\n } = inputFilter;\n var column = columnMap.get(name);\n if (column != null && column.type === type) {\n inputFilterMap.set(name, inputFilter);\n }\n }\n return inputFilterMap;\n }));\n _defineProperty(this, \"getLinkedColumnMap\", memoize((columnMap, links) => {\n var linkedColumnMap = new Map();\n var panelId = LayoutUtils.getIdFromPanel(this);\n for (var i = 0; i < links.length; i += 1) {\n var link = links[i];\n var columnName = null;\n if (link.start != null && link.start.panelId === panelId && columnMap.has(link.start.columnName)) {\n columnName = link.start.columnName;\n } else if (link.end && link.end.panelId === panelId && columnMap.has(link.end.columnName)) {\n columnName = link.end.columnName;\n }\n if (columnName != null && columnMap.has(columnName)) {\n var column = columnMap.get(columnName);\n assertNotNull(column);\n linkedColumnMap.set(columnName, column);\n }\n }\n return linkedColumnMap;\n }));\n _defineProperty(this, \"getSelectorColumns\", memoize((columnMap, linkedColumnMap, columnSelectionValidator) => Array.from(columnMap.values()).map(column => ({\n name: column.name,\n type: column.type,\n isValid: columnSelectionValidator ? columnSelectionValidator(this, column) : false,\n isActive: linkedColumnMap.has(column.name)\n }))));\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleColumnMouseEnter = this.handleColumnMouseEnter.bind(this);\n this.handleColumnMouseLeave = this.handleColumnMouseLeave.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleFilterAdd = this.handleFilterAdd.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSettingsChanged = this.handleSettingsChanged.bind(this);\n this.handleOpenLinker = this.handleOpenLinker.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleSourceColumnChange = this.handleSourceColumnChange.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.updateModelFromSource = debounce(this.updateModelFromSource.bind(this), UPDATE_MODEL_DEBOUNCE);\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.panelContainer = (_props$containerRef = props.containerRef) !== null && _props$containerRef !== void 0 ? _props$containerRef : /*#__PURE__*/React.createRef();\n this.chart = /*#__PURE__*/React.createRef();\n this.pending = new Pending();\n var {\n metadata,\n panelState\n } = props;\n var {\n filterValueMap = [],\n settings = {}\n } = panelState !== null && panelState !== void 0 ? panelState : {};\n this.state = {\n settings,\n error: undefined,\n isActive: false,\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n isLinked: metadata != null && isChartPanelTableMetadata(metadata) && metadata.settings.isLinked,\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: new Map(filterValueMap),\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: new Map(filterValueMap),\n model: undefined,\n columnMap: new Map(),\n // eslint-disable-next-line react/no-unused-state\n panelState\n };\n }\n componentDidMount() {\n if (!this.isHidden()) {\n this.setState({\n isActive: true\n });\n this.initModel();\n }\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n inputFilters,\n source\n } = this.props;\n var {\n columnMap,\n model,\n filterMap,\n filterValueMap,\n isLinked,\n settings\n } = this.state;\n if (!model) {\n return;\n }\n if (columnMap !== prevState.columnMap) {\n this.pruneFilterMaps();\n }\n if (inputFilters !== prevProps.inputFilters) {\n this.updateChangedInputFilters(inputFilters, prevProps.inputFilters);\n }\n if (filterMap !== prevState.filterMap) {\n this.updateFilters();\n } else if (filterValueMap !== prevState.filterValueMap) {\n this.updatePanelState();\n }\n if (settings !== prevState.settings && isFigureChartModel(model)) {\n model.updateSettings(settings);\n this.updatePanelState();\n }\n if (isLinked !== prevState.isLinked) {\n if (source) {\n if (isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n } else {\n this.stopListeningToSource(source);\n }\n }\n } else if (isLinked && source !== prevProps.source) {\n if (prevProps.source) {\n this.stopListeningToSource(prevProps.source);\n }\n if (source) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n componentWillUnmount() {\n this.pending.cancel();\n var {\n model\n } = this.state;\n var {\n source\n } = this.props;\n if (model != null && source) {\n this.stopListeningToSource(source);\n }\n }\n initModel() {\n this.setState({\n isLoading: true,\n isLoaded: false,\n error: undefined\n });\n var {\n makeModel\n } = this.props;\n this.pending.add(makeModel(), resolved => {\n resolved.close();\n }).then(this.handleLoadSuccess, this.handleLoadError);\n }\n startListeningToSource(table) {\n log.debug('startListeningToSource', table);\n var {\n model\n } = this.state;\n assertNotNull(model);\n var {\n dh\n } = model;\n table.addEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleSourceColumnChange);\n table.addEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);\n table.addEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);\n }\n stopListeningToSource(table) {\n log.debug('stopListeningToSource', table);\n var {\n model\n } = this.state;\n assertNotNull(model);\n var {\n dh\n } = model;\n table.removeEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleSourceColumnChange);\n table.removeEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);\n table.removeEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);\n }\n loadModelIfNecessary() {\n var {\n isActive,\n isLoaded,\n isLoading\n } = this.state;\n if (isActive && !isLoaded && !isLoading) {\n this.initModel();\n }\n }\n isHidden() {\n var {\n glContainer\n } = this.props;\n var {\n isHidden\n } = glContainer;\n return isHidden;\n }\n handleColumnSelected(columnName) {\n var {\n glEventHub\n } = this.props;\n var {\n columnMap\n } = this.state;\n glEventHub.emit(ChartEvent.COLUMN_SELECTED, this, columnMap.get(columnName));\n }\n handleColumnMouseEnter(_ref) {\n var {\n type,\n name\n } = _ref;\n var {\n columnSelectionValidator\n } = this.props;\n log.debug('handleColumnMouseEnter', columnSelectionValidator, type, name);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, {\n type,\n name\n });\n }\n handleColumnMouseLeave() {\n var {\n columnSelectionValidator\n } = this.props;\n log.debug('handleColumnMouseLeave', columnSelectionValidator);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n handleDisconnect() {\n this.setState({\n error: new Error('Figure disconnected'),\n isDisconnected: true\n });\n }\n handleFilterAdd(columns) {\n for (var i = 0; i < columns.length; i += 1) {\n this.openInputFilter(columns[i]);\n }\n }\n handleOpenLinker() {\n var {\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId\n } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n setActiveTool(ToolType.LINKER);\n }\n handleReconnect() {\n this.setState({\n isDisconnected: false,\n error: undefined\n });\n this.sendColumnChange();\n this.updateColumnFilters();\n }\n handleLoadSuccess(model) {\n log.debug('handleLoadSuccess');\n var {\n model: prevModel\n } = this.state;\n this.setState({\n model,\n isLoaded: true\n }, () => {\n var {\n inputFilters,\n source\n } = this.props;\n var {\n filterMap,\n isLinked\n } = this.state;\n if (model !== prevModel) {\n this.sendColumnChange();\n this.updateColumnFilters();\n this.updateInputFilters(inputFilters, filterMap.size > 0 || model.isFilterRequired());\n if (source && isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n });\n }\n handleLoadError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error('handleLoadError', error);\n this.setState({\n error,\n isLoading: false\n });\n }\n handleSourceColumnChange() {\n this.updateModelFromSource();\n }\n handleSourceFilterChange() {\n this.updateModelFromSource();\n }\n handleSourceSortChange() {\n this.updateModelFromSource();\n }\n updateModelFromSource() {\n var {\n metadata,\n source\n } = this.props;\n var {\n isLinked,\n model\n } = this.state;\n if (!isLinked || !model || !source) {\n log.debug2('updateModelFromSource ignoring', isLinked, model, source);\n return;\n }\n var {\n dh\n } = model;\n // By now the model has already been loaded, which is the only other cancelable thing in pending\n this.pending.cancel();\n if (isChartPanelTableMetadata(metadata)) {\n var {\n settings\n } = metadata;\n this.pending.add(dh.plot.Figure.create(new ChartUtils(dh).makeFigureSettings(settings, source))).then(figure => {\n if (isFigureChartModel(model)) {\n model.setFigure(figure);\n }\n }).catch(this.handleLoadError);\n }\n this.updatePanelState();\n }\n updatePanelState() {\n var {\n sourcePanel\n } = this.props;\n var {\n panelState,\n filterValueMap,\n settings\n } = this.state;\n var {\n tableSettings\n } = panelState !== null && panelState !== void 0 ? panelState : {};\n if (sourcePanel) {\n // Right now just update the panel state from the source\n // If the source isn't available, just keep the state that's already saved\n if (hasInputFilter(sourcePanel.props) && hasPanelState(sourcePanel.state)) {\n var {\n inputFilters\n } = sourcePanel.props;\n var {\n panelState: sourcePanelState\n } = sourcePanel.state;\n if (sourcePanelState != null) {\n tableSettings = IrisGridUtils.extractTableSettings(sourcePanelState, inputFilters);\n }\n }\n }\n\n // eslint-disable-next-line react/no-unused-state\n this.setState({\n panelState: {\n settings,\n tableSettings,\n filterValueMap: Array.from(filterValueMap)\n }\n });\n }\n handleError() {\n // Don't want to set an error state, because the user can fix a chart error within the chart itself.\n // We're not loading anymore either so stop showing the spinner so the user can actually click those buttons.\n this.setState({\n isLoading: false\n });\n }\n handleResize() {\n this.updateChart();\n }\n handleSettingsChanged(update) {\n this.setState(_ref2 => {\n var {\n settings: prevSettings\n } = _ref2;\n var settings = _objectSpread(_objectSpread({}, prevSettings), update);\n log.debug('Updated settings', settings);\n return {\n settings\n };\n });\n }\n handleHide() {\n this.setActive(false);\n }\n handleShow() {\n this.setActive(true);\n }\n handleTabBlur() {\n this.setActive(false);\n }\n handleTabFocus() {\n var isHidden = this.isHidden();\n this.setActive(!isHidden);\n }\n handleUpdate() {\n this.setState({\n isLoading: false\n });\n }\n handleClearAllFilters() {\n // nuke link filter and input filter map\n // input filters only clear themselves if they are not yet empty\n this.setState({\n filterValueMap: new Map(),\n filterMap: new Map()\n });\n this.updatePanelState();\n }\n\n /**\n * Create an input filter panel for the provided column\n * @param column The column to create the input filter for\n */\n openInputFilter(column) {\n var {\n glEventHub\n } = this.props;\n var {\n name,\n type\n } = column;\n glEventHub.emit(InputFilterEvent.OPEN_INPUT, {\n title: \"\".concat(name, \" Filter\"),\n panelState: {\n name,\n type,\n isValueShown: true\n },\n createNewStack: true,\n focusElement: 'input'\n });\n }\n setActive(isActive) {\n this.setState({\n isActive\n }, () => {\n if (isActive) {\n this.loadModelIfNecessary();\n this.updateChart();\n }\n });\n }\n sendColumnChange() {\n var {\n model\n } = this.state;\n if (!model) {\n return;\n }\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(InputFilterEvent.COLUMNS_CHANGED, this, Array.from(model.getFilterColumnMap().values()));\n }\n getCoordinateForColumn(columnName) {\n var _element$getBoundingC;\n var className = ChartColumnSelectorOverlay.makeButtonClassName(columnName);\n if (!this.panelContainer.current) {\n return null;\n }\n var element = this.panelContainer.current.querySelector(\".\".concat(className));\n var rect = (_element$getBoundingC = element === null || element === void 0 ? void 0 : element.getBoundingClientRect()) !== null && _element$getBoundingC !== void 0 ? _element$getBoundingC : null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n var x = rect.left + rect.width / 2;\n var y = rect.bottom;\n return [x, y];\n }\n\n /**\n * Set chart filters based on the filter map\n * @param filterMapParam Filter map\n */\n setFilterMap(filterMapParam) {\n log.debug('setFilterMap', filterMapParam);\n this.setState(state => {\n var _updatedFilterMap;\n var {\n columnMap,\n filterMap\n } = state;\n var updatedFilterMap = null;\n var filterValueMap = new Map(state.filterValueMap);\n filterMapParam.forEach((_ref3, columnName) => {\n var {\n columnType,\n filterList\n } = _ref3;\n var column = columnMap.get(columnName);\n if (column == null || column.type !== columnType) {\n return;\n }\n if (filterList.length < 1) {\n log.debug('Ignoring empty filterList for column', columnName);\n return;\n }\n var {\n value\n } = filterList[0];\n filterValueMap.set(columnName, value);\n if (filterMap.get(columnName) !== value) {\n if (updatedFilterMap === null) {\n updatedFilterMap = new Map(filterMap);\n }\n updatedFilterMap.set(columnName, value);\n }\n });\n\n // Don't update filterMap unless the filters actually changed.\n // Otherwise the chart gets stuck on a spinner\n // because it never gets an update event for unchanged filters.\n return {\n filterValueMap,\n filterMap: (_updatedFilterMap = updatedFilterMap) !== null && _updatedFilterMap !== void 0 ? _updatedFilterMap : filterMap\n };\n });\n }\n unsetFilterValue(columnName) {\n this.setState(state => {\n // We want to unset a value unless there's an input filter for it\n // If there's an input filter, then we want to just set it to that value\n // This way if the user has an input filter and a link, when they delete the link the input filter value takes effect\n var {\n inputFilters\n } = this.props;\n var {\n columnMap\n } = state;\n var {\n filterMap,\n filterValueMap\n } = state;\n if (!filterValueMap.has(columnName)) {\n return null;\n }\n filterValueMap = new Map(state.filterValueMap);\n filterValueMap.delete(columnName);\n var inputFilterMap = this.getInputFilterColumnMap(columnMap, inputFilters);\n if (inputFilterMap.has(columnName)) {\n var _inputFilterMap$get;\n var filterValue = filterMap.get(columnName);\n var inputFilterValue = (_inputFilterMap$get = inputFilterMap.get(columnName)) === null || _inputFilterMap$get === void 0 ? void 0 : _inputFilterMap$get.value;\n if (inputFilterValue != null && filterValue !== inputFilterValue) {\n filterMap = new Map(state.filterMap);\n if (inputFilterValue.length > 0) {\n filterMap.set(columnName, inputFilterValue);\n } else {\n filterMap.delete(columnName);\n }\n }\n } else {\n filterMap = new Map(state.filterMap);\n filterMap.delete(columnName);\n }\n return {\n filterMap,\n filterValueMap\n };\n });\n }\n updateChangedInputFilters(inputFilters, prevInputFilters) {\n var deletedInputFilters = prevInputFilters.filter(prevInputFilter => inputFilters.find(inputFilter => inputFilter.name === prevInputFilter.name && inputFilter.type === prevInputFilter.type) === undefined);\n if (deletedInputFilters.length > 0) {\n this.deleteInputFilters(deletedInputFilters);\n }\n var changedInputFilters = inputFilters.filter(inputFilter => !prevInputFilters.includes(inputFilter));\n if (changedInputFilters.length > 0) {\n this.updateInputFilters(changedInputFilters);\n }\n }\n updateInputFilters(inputFilters) {\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n this.setState(state => {\n var {\n columnMap\n } = state;\n var filterValueMap = new Map(state.filterValueMap);\n var filterMap = new Map(state.filterMap);\n var update = forceUpdate ? {\n filterMap,\n filterValueMap\n } : {};\n for (var i = 0; i < inputFilters.length; i += 1) {\n var {\n name,\n type,\n value\n } = inputFilters[i];\n var column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (value != null && filterMap.get(name) !== value) {\n if (value === '') {\n filterMap.delete(name);\n } else {\n filterMap.set(name, value);\n }\n update.filterMap = filterMap;\n }\n if (filterValueMap.has(name)) {\n // Need to unset whatever the linked value was - if they want that value again, they need to double click the link again\n filterValueMap.delete(name);\n update.filterValueMap = filterValueMap;\n }\n }\n }\n log.debug('updateInputFilters', update);\n return update;\n });\n }\n deleteInputFilters(inputFilters) {\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n this.setState(state => {\n var {\n columnMap,\n filterValueMap\n } = state;\n var filterMap = new Map(state.filterMap);\n var needsUpdate = forceUpdate;\n for (var i = 0; i < inputFilters.length; i += 1) {\n var {\n name,\n type\n } = inputFilters[i];\n var column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (filterMap.has(name)) {\n var filterValue = filterMap.get(name);\n if (filterValueMap.has(name)) {\n var linkValue = filterValueMap.get(name);\n if (linkValue !== filterValue && linkValue != null) {\n needsUpdate = true;\n filterMap.set(name, linkValue);\n }\n } else {\n needsUpdate = true;\n filterMap.delete(name);\n }\n }\n }\n }\n log.debug('deleteInputFilters', needsUpdate);\n return needsUpdate ? {\n filterMap\n } : null;\n });\n }\n updateColumnFilters() {\n this.setState(_ref4 => {\n var {\n model\n } = _ref4;\n if (!model) {\n return null;\n }\n return {\n columnMap: model.getFilterColumnMap()\n };\n });\n }\n updateFilters() {\n var {\n columnMap,\n filterMap,\n model\n } = this.state;\n assertNotNull(model);\n var waitingInputMap = this.getWaitingInputMap(model.isFilterRequired(), columnMap, filterMap);\n model.setFilter(filterMap);\n if (filterMap.size > 0 && waitingInputMap.size === 0) {\n var defaultTitle = model.getDefaultTitle();\n var filterTitle = TextUtils.join(Array.from(filterMap.entries()).map(_ref5 => {\n var [name, value] = _ref5;\n return \"\".concat(name, \": \").concat(value);\n }));\n if (defaultTitle) {\n model.setTitle(\"\".concat(defaultTitle, \"<br><span style=\\\"font-size: smaller\\\">\").concat(filterTitle, \"</span>\"));\n } else {\n model.setTitle(filterTitle);\n }\n log.debug2('updateFilters filters set', filterMap);\n this.setState({\n isLoading: true\n });\n } else {\n log.debug2('updateFilters waiting on inputs', waitingInputMap);\n model.setTitle(model.getDefaultTitle());\n this.setState({\n isLoading: false\n });\n }\n this.updatePanelState();\n }\n\n /**\n * Removes any set filter values that are no longer part of the model\n */\n pruneFilterMaps() {\n this.setState(state => {\n var {\n columnMap\n } = state;\n var filterMap = new Map(state.filterMap);\n var filterValueMap = new Map(state.filterValueMap);\n var newState = {};\n state.filterValueMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterValueMap.delete(name);\n newState.filterValueMap = filterValueMap;\n }\n });\n state.filterMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterMap.delete(name);\n newState.filterMap = filterMap;\n }\n });\n return newState;\n });\n }\n updateChart() {\n if (this.chart.current) {\n this.chart.current.updateDimensions();\n }\n }\n render() {\n var {\n columnSelectionValidator,\n glContainer,\n glEventHub,\n inputFilters,\n isLinkerActive,\n links,\n metadata,\n settings,\n Plotly\n } = this.props;\n var {\n columnMap,\n filterMap,\n error,\n model,\n isActive,\n isDisconnected,\n isLoaded,\n isLoading\n } = this.state;\n var name;\n if (isChartPanelTableMetadata(metadata)) {\n name = metadata.table;\n } else {\n name = metadata.figure;\n }\n var inputFilterMap = this.getInputFilterColumnMap(columnMap, inputFilters);\n var linkedColumnMap = this.getLinkedColumnMap(columnMap, links);\n var waitingInputMap = model != null ? this.getWaitingInputMap(model.isFilterRequired(), columnMap, filterMap) : new Map();\n var waitingFilterMap = model != null ? this.getWaitingFilterMap(model.isFilterRequired(), columnMap, filterMap, linkedColumnMap, inputFilterMap) : new Map();\n var errorMessage = error != null ? \"Unable to open chart. \".concat(error) : undefined;\n var isWaitingForFilter = waitingInputMap.size > 0;\n var isSelectingColumn = columnMap.size > 0 && isLinkerActive;\n return /*#__PURE__*/_jsx(WidgetPanel, {\n className: classNames('iris-chart-panel', {\n 'input-required': isWaitingForFilter\n }),\n componentPanel: this,\n glContainer: glContainer,\n glEventHub: glEventHub,\n onHide: this.handleHide,\n onClearAllFilters: this.handleClearAllFilters,\n onResize: this.handleResize,\n onShow: this.handleShow,\n onTabBlur: this.handleTabBlur,\n onTabFocus: this.handleTabFocus,\n errorMessage: errorMessage,\n isDisconnected: isDisconnected,\n isLoading: isLoading,\n isLoaded: isLoaded,\n widgetName: name,\n widgetType: \"Chart\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n ref: this.panelContainer,\n className: \"chart-panel-container h-100 w-100\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"chart-container h-100 w-100\",\n children: isLoaded && model && /*#__PURE__*/_jsx(Chart, {\n isActive: isActive,\n model: model,\n settings: settings,\n ref: this.chart,\n onDisconnect: this.handleDisconnect,\n onReconnect: this.handleReconnect,\n onUpdate: this.handleUpdate,\n onError: this.handleError,\n onSettingsChanged: this.handleSettingsChanged,\n Plotly: Plotly\n })\n }), /*#__PURE__*/_jsx(CSSTransition, {\n in: isWaitingForFilter && !isSelectingColumn && !isLoading,\n timeout: ThemeExport.transitionMs,\n classNames: \"fade\",\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(ChartFilterOverlay, {\n inputFilterMap: inputFilterMap,\n linkedColumnMap: linkedColumnMap,\n onAdd: this.handleFilterAdd,\n onOpenLinker: this.handleOpenLinker,\n columnMap: columnMap,\n waitingFilterMap: waitingFilterMap,\n waitingInputMap: waitingInputMap\n })\n }), /*#__PURE__*/_jsx(CSSTransition, {\n in: isSelectingColumn,\n timeout: ThemeExport.transitionMs,\n classNames: \"fade\",\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(ChartColumnSelectorOverlay, {\n columns: this.getSelectorColumns(columnMap, linkedColumnMap, columnSelectionValidator),\n onColumnSelected: this.handleColumnSelected,\n onMouseEnter: this.handleColumnMouseEnter,\n onMouseLeave: this.handleColumnMouseLeave\n })\n })]\n })\n });\n }\n}\n_defineProperty(ChartPanel, \"defaultProps\", {\n columnSelectionValidator: null,\n isLinkerActive: false,\n source: null,\n sourcePanel: null,\n panelState: null,\n settings: {},\n containerRef: null\n});\n_defineProperty(ChartPanel, \"displayName\", 'ChartPanel');\n_defineProperty(ChartPanel, \"COMPONENT\", 'ChartPanel');\nvar mapStateToProps = (state, ownProps) => {\n var {\n localDashboardId,\n metadata\n } = ownProps;\n var sourcePanelId;\n if (metadata != null) {\n sourcePanelId = metadata.sourcePanelId;\n }\n var panelTableMap = getTableMapForDashboard(state, localDashboardId);\n var openedPanelMap = getOpenedPanelMapForDashboard(state, localDashboardId);\n var activeTool = getActiveTool(state);\n var isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(state, localDashboardId);\n var isLinkerActive = activeTool === ToolType.LINKER && isolatedLinkerPanelId === undefined;\n return {\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(state, localDashboardId),\n isLinkerActive,\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n source: sourcePanelId != null ? panelTableMap.get(sourcePanelId) : undefined,\n sourcePanel: sourcePanelId != null ? openedPanelMap.get(sourcePanelId) : undefined,\n settings: getSettings(state)\n };\n};\nvar ConnectedChartPanel = connect(mapStateToProps, {\n setActiveTool: setActiveToolAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction\n}, null, {\n forwardRef: true\n})(ChartPanel);\nexport default ConnectedChartPanel;\n//# sourceMappingURL=ChartPanel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CardFlip, SocketedButton } from '@deephaven/components';\nimport { vsGear } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport memoizee from 'memoizee';\nimport memoize from 'memoize-one';\nimport debounce from 'lodash.debounce';\nimport shortid from 'shortid';\nimport Log from '@deephaven/log';\nimport \"./DropdownFilter.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('DropdownFilter');\nvar UPDATE_DEBOUNCE = 150;\nexport class DropdownFilter extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"dropdownRef\", void 0);\n _defineProperty(this, \"getCompatibleColumns\", memoize((source, columns) => source != null ? columns.filter(_ref => {\n var {\n type\n } = _ref;\n return type !== undefined && TableUtils.isCompatibleType(type, source.columnType);\n }) : []));\n _defineProperty(this, \"getColumnOptions\", memoize((columns, selectedColumn) => {\n var selectedIndex = -1;\n var options = [];\n options.push( /*#__PURE__*/_jsx(\"option\", {\n value: \"-1\",\n children: \"Select a column\"\n }, \"placeholder\"));\n columns.forEach((columnItem, index) => {\n options.push( /*#__PURE__*/_jsx(\"option\", {\n value: index,\n children: this.getItemLabel(columns, index)\n }, \"\".concat(columnItem.name, \"/\").concat(columnItem.type)));\n if (selectedColumn !== null && columnItem.name === selectedColumn.name && columnItem.type === selectedColumn.type) {\n selectedIndex = index;\n }\n });\n return [options, selectedIndex];\n }));\n _defineProperty(this, \"getSelectedOptionIndex\", memoize((values, value) => values.indexOf(value)));\n _defineProperty(this, \"getValueOptions\", memoize(values => [/*#__PURE__*/_jsx(\"option\", {\n value: \"-1\",\n children: DropdownFilter.PLACEHOLDER\n }, \"-1\"), ...values.map((val, index) => /*#__PURE__*/_jsx(\"option\", {\n value: index\n // eslint-disable-next-line react/no-array-index-key\n ,\n children: val !== null && val !== void 0 ? val : '(null)'\n }, \"\".concat(index, \"/\").concat(val)))]));\n _defineProperty(this, \"getItemLabel\", memoizee((columns, index) => {\n var {\n name,\n type\n } = columns[index];\n if (index > 0 && columns[index - 1].name === name || index < columns.length - 1 && columns[index + 1].name === name) {\n var shortType = type.substring(type.lastIndexOf('.') + 1);\n return \"\".concat(name, \" (\").concat(shortType, \")\");\n }\n return name;\n }));\n _defineProperty(this, \"sendUpdate\", debounce(() => {\n var {\n onChange\n } = this.props;\n var {\n column,\n value,\n isValueShown\n } = this.state;\n onChange({\n column,\n isValueShown,\n value: value !== null && value !== void 0 ? value : undefined\n });\n }, UPDATE_DEBOUNCE));\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleDropdownKeyPress = this.handleDropdownKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.dropdownRef = /*#__PURE__*/React.createRef();\n var {\n column: _column,\n isValueShown: _isValueShown,\n value: _value\n } = props;\n this.state = {\n column: _column,\n id: shortid(),\n selectedColumn: _column,\n disableCancel: !_isValueShown,\n isValueShown: _isValueShown,\n value: _value\n };\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n source,\n values,\n isLoaded\n } = this.props;\n var {\n column,\n value,\n isValueShown\n } = this.state;\n if (isLoaded) {\n if (source !== prevProps.source) {\n this.sourceUpdated();\n }\n if (values !== prevProps.values && value !== '' && !values.includes(value)) {\n // Value list loaded, but doesn't contain the current value\n this.resetValue();\n }\n if (isValueShown !== prevState.isValueShown) {\n if (isValueShown) {\n this.focusInput();\n }\n }\n if (column !== prevState.column || value !== prevState.value || isValueShown !== prevState.isValueShown) {\n this.sendUpdate();\n }\n }\n }\n componentWillUnmount() {\n this.sendUpdate.flush();\n }\n handleColumnChange(event) {\n var {\n value\n } = event.target;\n log.debug2('handleColumnChange', value);\n if (value != null && parseInt(value, 10) < 0) {\n this.setState({\n selectedColumn: null\n });\n return;\n }\n var {\n columns: allColumns,\n source\n } = this.props;\n var columns = this.getCompatibleColumns(source, allColumns);\n this.setState({\n selectedColumn: columns[parseInt(value, 10)]\n });\n }\n handleDropdownKeyPress(event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n log.debug2('handleDropdownKeyPress');\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n }\n handleValueChange(event) {\n var {\n value: valueIndex\n } = event.target;\n var index = parseInt(valueIndex, 10);\n // Default empty string value for 'clear filter'\n var value = '';\n var {\n values\n } = this.props;\n if (index >= 0 && index < values.length) {\n value = values[index];\n } else {\n log.debug2('Selected default item');\n }\n log.debug2('handleValueChange', value);\n this.setState({\n value\n });\n }\n handleSettingsCancel() {\n this.setState(_ref2 => {\n var {\n column\n } = _ref2;\n return {\n selectedColumn: column,\n isValueShown: true\n };\n });\n }\n handleSettingsSave() {\n this.setState(_ref3 => {\n var {\n column,\n selectedColumn,\n value\n } = _ref3;\n return {\n column: selectedColumn,\n // Reset value if column changed\n value: column === selectedColumn ? value : '',\n isValueShown: true,\n disableCancel: false\n };\n });\n }\n handleSettingsClick(event) {\n event.stopPropagation();\n this.showSettings();\n }\n handleBackgroundClick(event) {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n sourceUpdated() {\n this.setState({\n column: null,\n selectedColumn: null,\n isValueShown: false,\n disableCancel: true,\n value: ''\n });\n }\n showSettings() {\n var {\n column\n } = this.state;\n this.setState({\n selectedColumn: column,\n isValueShown: false\n });\n }\n focusInput() {\n var _this$dropdownRef$cur;\n (_this$dropdownRef$cur = this.dropdownRef.current) === null || _this$dropdownRef$cur === void 0 ? void 0 : _this$dropdownRef$cur.focus();\n }\n resetValue() {\n this.setState({\n value: ''\n });\n }\n\n // Called by the parent component via ref\n clearFilter() {\n this.resetValue();\n }\n\n // Called by the parent component via ref\n setFilterState(_ref4) {\n var {\n name,\n type,\n value,\n isValueShown\n } = _ref4;\n var column = name != null && type != null ? {\n name,\n type\n } : null;\n this.setState(_ref5 => {\n var {\n value: oldValue,\n isValueShown: oldIsValueShown\n } = _ref5;\n return {\n column,\n value: value !== null && value !== void 0 ? value : oldValue,\n isValueShown: isValueShown !== null && isValueShown !== void 0 ? isValueShown : oldIsValueShown\n };\n });\n }\n render() {\n var _source$columnName;\n var {\n columns: allColumns,\n disableLinking,\n isLinkerActive,\n isLoaded,\n source,\n onColumnSelected,\n onSourceMouseEnter,\n onSourceMouseLeave,\n values,\n settingsError\n } = this.props;\n var {\n column,\n disableCancel,\n id,\n isValueShown,\n selectedColumn,\n value\n } = this.state;\n var columnSelectionDisabled = source === null;\n var columns = this.getCompatibleColumns(source, allColumns);\n var isLinked = source != null;\n var sourceButtonLabel = (_source$columnName = source === null || source === void 0 ? void 0 : source.columnName) !== null && _source$columnName !== void 0 ? _source$columnName : DropdownFilter.SOURCE_BUTTON_PLACEHOLDER;\n var filterTitle = column != null ? \"\".concat(column.name, \" Filter\") : null;\n var [columnOptions, selectedIndex] = this.getColumnOptions(columns, selectedColumn);\n var valueOptions = this.getValueOptions(values);\n var selectedOption = this.getSelectedOptionIndex(values, value);\n var disableSave = !isLinked || selectedColumn == null;\n var isFlipped = isValueShown && !isLinkerActive;\n var sourceColumnId = \"source-column-btn-\".concat(id);\n var filterColumnId = \"filter-column-select-\".concat(id);\n return /*#__PURE__*/_jsxs(CardFlip, {\n className: \"dropdown-filter fill-parent-absolute\",\n isFlipped: isFlipped,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"dropdown-filter-settings-card\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"dropdown-filter-card-content\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"dropdown-filter-settings-grid\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n htmlFor: sourceColumnId,\n children: \"Source Column\"\n }), /*#__PURE__*/_jsx(SocketedButton, {\n id: sourceColumnId,\n isLinked: isLinked,\n onClick: onColumnSelected,\n onMouseEnter: onSourceMouseEnter,\n onMouseLeave: onSourceMouseLeave,\n className: DropdownFilter.SOURCE_BUTTON_CLASS_NAME,\n disabled: disableLinking,\n children: sourceButtonLabel\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"text-muted small\",\n children: \"Select a source column for the list by linking to a table.\"\n }), /*#__PURE__*/_jsx(\"label\", {\n htmlFor: filterColumnId,\n children: \"Filter Column\"\n }), /*#__PURE__*/_jsx(\"select\", {\n id: filterColumnId,\n value: selectedIndex,\n className: \"custom-select\",\n onChange: this.handleColumnChange,\n disabled: columnSelectionDisabled,\n children: columnOptions\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"text-muted small\",\n children: \"Dropdown filter control will apply its filter to all columns matching this name in this dashboard.\"\n })]\n }), settingsError && /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message text-center\",\n children: settingsError\n }), isLinked && /*#__PURE__*/_jsxs(\"div\", {\n className: \"dropdown-filter-settings-buttons\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n type: \"button\",\n onClick: this.handleSettingsCancel,\n disabled: disableCancel || isValueShown || isLinkerActive,\n tooltip: isLinkerActive ? 'Cancel disabled while linker open' : undefined,\n children: \"Cancel\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n type: \"button\",\n className: \"ml-2\",\n onClick: this.handleSettingsSave,\n disabled: disableSave || isValueShown || isLinkerActive,\n tooltip: isLinkerActive ? 'Save disabled while linker open' : undefined,\n children: \"Save\"\n })]\n })]\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"dropdown-filter-value-card\",\n onClick: this.handleBackgroundClick,\n \"data-testid\": \"dropdown-filter-value-background\",\n children: isLoaded && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"dropdown-filter-column\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"dropdown-filter-column-title\",\n children: filterTitle\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"dropdown-filter-card-content\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"dropdown-filter-value-input d-flex flex-column justify-content-center\",\n children: /*#__PURE__*/_jsx(\"select\", {\n className: \"custom-select\",\n value: selectedOption,\n ref: this.dropdownRef,\n onChange: this.handleValueChange,\n onKeyPress: this.handleDropdownKeyPress,\n title: \"Select Value\",\n children: valueOptions\n })\n }), settingsError && /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message mt-3 text-center\",\n children: settingsError\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"dropdown-filter-menu\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"m-2 px-2\",\n onClick: this.handleSettingsClick,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsGear,\n transform: \"grow-4\"\n }),\n tooltip: \"Dropdown Filter Settings\"\n })\n })]\n })\n })]\n });\n }\n}\n_defineProperty(DropdownFilter, \"defaultProps\", {\n column: null,\n disableLinking: false,\n isLinkerActive: false,\n isLoaded: false,\n isValueShown: false,\n settingsError: null,\n source: null,\n value: '',\n values: [],\n onColumnSelected: () => undefined,\n onSourceMouseEnter: () => undefined,\n onSourceMouseLeave: () => undefined\n});\n_defineProperty(DropdownFilter, \"PLACEHOLDER\", 'Select a value...');\n_defineProperty(DropdownFilter, \"SOURCE_BUTTON_CLASS_NAME\", 'btn-dropdown-filter-selector');\n_defineProperty(DropdownFilter, \"SOURCE_BUTTON_PLACEHOLDER\", 'Select a column');\nexport default DropdownFilter;\n//# sourceMappingURL=DropdownFilter.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoizee';\nimport { LayoutUtils } from '@deephaven/dashboard';\nimport { DateTimeColumnFormatter, Formatter, FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getActiveTool, getApi, getSettings } from '@deephaven/redux';\nimport { Pending, PromiseUtils } from '@deephaven/utils';\nimport DropdownFilter from \"../controls/dropdown-filter/DropdownFilter.js\";\nimport { InputFilterEvent } from \"../events/index.js\";\nimport { getColumnsForDashboard, getColumnSelectionValidatorForDashboard, getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, getTableMapForDashboard } from \"../redux/index.js\";\nimport \"./DropdownFilterPanel.css\";\nimport ToolType from \"../linker/ToolType.js\";\nimport WidgetPanel from \"./WidgetPanel.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('DropdownFilterPanel');\nvar DROPDOWN_FILTER_DEBOUNCE = 250;\nvar mapStateToProps = (state, ownProps) => {\n var {\n localDashboardId\n } = ownProps;\n var panelId = LayoutUtils.getIdFromPanel({\n props: ownProps\n });\n var panelTableMap = getTableMapForDashboard(state, localDashboardId);\n var dashboardLinks = getLinksForDashboard(state, localDashboardId);\n var activeTool = getActiveTool(state);\n var isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(state, localDashboardId);\n var isLinkerActive = activeTool === ToolType.LINKER && (isolatedLinkerPanelId === undefined || isolatedLinkerPanelId === panelId);\n // Disable linking if linker is in isolated mode for a different panel\n var disableLinking = activeTool === ToolType.LINKER && isolatedLinkerPanelId !== undefined && isolatedLinkerPanelId !== panelId;\n return {\n columns: getColumnsForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(state, localDashboardId),\n dh: getApi(state),\n isLinkerActive,\n disableLinking,\n settings: getSettings(state),\n panelTableMap,\n dashboardLinks\n };\n};\nvar connector = connect(mapStateToProps, null, null, {\n forwardRef: true\n});\nexport class DropdownFilterPanel extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"dateTimeFormatter\", void 0);\n _defineProperty(this, \"dropdownFilterRef\", void 0);\n _defineProperty(this, \"panelContainer\", void 0);\n _defineProperty(this, \"pending\", void 0);\n _defineProperty(this, \"cleanup\", void 0);\n _defineProperty(this, \"columnFormats\", void 0);\n _defineProperty(this, \"getCachedValues\", memoize((rawValues, _ref, formatter) => {\n var {\n type,\n name\n } = _ref;\n if (type !== undefined && TableUtils.isDateType(type)) {\n return rawValues.map(value => this.dateTimeFormatter.format(value));\n }\n return rawValues.map(value =>\n // Skip formatting for nulls so they don't get converted to ''\n value != null && type != null ? formatter.getFormattedString(value, type, name) : null);\n }));\n _defineProperty(this, \"getCachedPanelLinks\", memoize((dashboardLinks, panel) => {\n var panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('getCachedPanelLinks', dashboardLinks, panelId);\n return dashboardLinks.filter(link => {\n var _link$end;\n return ((_link$end = link.end) === null || _link$end === void 0 ? void 0 : _link$end.panelId) === panelId;\n });\n }));\n _defineProperty(this, \"getCachedSource\", memoize(links => {\n log.debug('getCachedSource', links);\n var source;\n if (links.length > 0) {\n var [link] = links;\n source = link.start;\n if (links.length > 1) {\n log.error('Filter has more that one link', links);\n }\n }\n return source;\n }));\n _defineProperty(this, \"getCachedSourceTable\", memoize((panelTableMap, source) => {\n var _panelTableMap$get;\n log.debug('getCachedSourceTable', panelTableMap, source);\n if (source == null) {\n return null;\n }\n var {\n panelId\n } = source;\n return (_panelTableMap$get = panelTableMap.get(panelId)) !== null && _panelTableMap$get !== void 0 ? _panelTableMap$get : null;\n }));\n _defineProperty(this, \"getCachedSourceColumn\", memoize((table, source) => {\n var _table$columns$find;\n log.debug('getCachedSourceColumn', table, source);\n if (table == null || source == null) {\n return null;\n }\n return (_table$columns$find = table.columns.find(_ref2 => {\n var {\n name,\n type\n } = _ref2;\n return name === source.columnName && type === source.columnType;\n })) !== null && _table$columns$find !== void 0 ? _table$columns$find : null;\n }));\n this.handleChange = debounce(this.handleChange.bind(this), DROPDOWN_FILTER_DEBOUNCE);\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleSourceSizeChange = this.handleSourceSizeChange.bind(this);\n this.handleSourceMouseEnter = this.handleSourceMouseEnter.bind(this);\n this.handleSourceMouseLeave = this.handleSourceMouseLeave.bind(this);\n this.handleValuesTableUpdate = this.handleValuesTableUpdate.bind(this);\n this.dropdownFilterRef = /*#__PURE__*/React.createRef();\n this.panelContainer = /*#__PURE__*/React.createRef();\n this.pending = new Pending();\n var {\n dh,\n panelState,\n settings\n } = props;\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n // Filter dropdown needs to show and send full timestamp format with nanoseconds\n this.dateTimeFormatter = new DateTimeColumnFormatter(dh, {\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: \"yyyy-MM-dd HH:mm:ss.SSSSSSSSS\"\n });\n var {\n value: _value = '',\n isValueShown = false,\n name: _name,\n type: _type,\n timestamp\n } = panelState !== null && panelState !== void 0 ? panelState : {};\n var column = _name != null && _type != null ? {\n name: _name,\n type: _type\n } : undefined;\n this.state = {\n column,\n formatter: new Formatter(dh, this.columnFormats),\n valuesTable: undefined,\n valuesColumn: undefined,\n sourceSize: 0,\n value: _value,\n timestamp,\n values: [],\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n // eslint-disable-next-line react/no-unused-state\n panelState,\n // Dehydrated panel state that can load this panel\n\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n error: null\n };\n }\n componentDidMount() {\n this.updateValuesTable();\n var {\n dashboardLinks,\n panelTableMap\n } = this.props;\n var {\n column,\n value,\n timestamp\n } = this.state;\n var sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n if (column != null) {\n var {\n name,\n type\n } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n dashboardLinks,\n panelTableMap,\n settings\n } = this.props;\n var {\n valuesTable\n } = this.state;\n var source = this.getSource(dashboardLinks);\n var sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n var prevSource = this.getSource(prevProps.dashboardLinks);\n var prevSourceTable = this.getSourceTable(prevProps.panelTableMap, prevProps.dashboardLinks);\n if (settings !== prevProps.settings && settings !== undefined) {\n this.updateFormatterSettings(settings);\n }\n if (valuesTable !== prevState.valuesTable && prevState.valuesTable != null) {\n log.debug('Table in state modified, closing the old table.');\n prevState.valuesTable.close();\n }\n\n // Checking source change in addition to table change\n // in case a different column is selected in the same table\n if (sourceTable !== prevSourceTable || source !== prevSource) {\n this.updateValuesTable();\n }\n if (sourceTable !== prevSourceTable) {\n if (prevSourceTable !== null) {\n this.stopListeningToSource(prevSourceTable);\n }\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n }\n }\n componentWillUnmount() {\n var {\n dashboardLinks,\n panelTableMap\n } = this.props;\n var {\n valuesTable\n } = this.state;\n var sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n this.pending.cancel();\n if (sourceTable !== null) {\n this.stopListeningToSource(sourceTable);\n }\n if (this.cleanup) {\n this.cleanup();\n }\n if (valuesTable != null) {\n valuesTable.close();\n }\n }\n getCoordinateForColumn() {\n var _element$getBoundingC;\n if (this.panelContainer.current == null) {\n return null;\n }\n var element = this.panelContainer.current.querySelector(\".\".concat(DropdownFilter.SOURCE_BUTTON_CLASS_NAME));\n var rect = (_element$getBoundingC = element === null || element === void 0 ? void 0 : element.getBoundingClientRect()) !== null && _element$getBoundingC !== void 0 ? _element$getBoundingC : null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n var x = rect.left + rect.width / 2;\n var y = rect.bottom;\n return [x, y];\n }\n getSettingsErrorMessage() {\n var {\n sourceSize\n } = this.state;\n if (sourceSize > DropdownFilterPanel.MAX_TABLE_SIZE) {\n return \"Table too large, must have fewer than \".concat(DropdownFilterPanel.MAX_TABLE_SIZE, \" options.\");\n }\n return undefined;\n }\n getPanelErrorMessage() {\n var {\n error\n } = this.state;\n return error != null ? \"\".concat(error) : undefined;\n }\n getSource(links) {\n var panelLinks = this.getCachedPanelLinks(links, this);\n return this.getCachedSource(panelLinks);\n }\n getSourceTable(panelTableMap, links) {\n var source = this.getSource(links);\n return this.getCachedSourceTable(panelTableMap, source);\n }\n getValuesColumn(valuesTable, links) {\n var source = this.getSource(links);\n return this.getCachedSourceColumn(valuesTable, source);\n }\n startListeningToSource(sourceTable) {\n var {\n dh\n } = this.props;\n log.debug('startListeningToSource');\n sourceTable.addEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);\n sourceTable.addEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);\n sourceTable.addEventListener(dh.Table.EVENT_SIZECHANGED, this.handleSourceSizeChange);\n sourceTable.addEventListener(dh.Table.EVENT_DISCONNECT, this.handleDisconnect);\n sourceTable.addEventListener(dh.Table.EVENT_RECONNECT, this.handleReconnect);\n }\n stopListeningToSource(sourceTable) {\n var {\n dh\n } = this.props;\n log.debug('stopListeningToSource');\n sourceTable.removeEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);\n sourceTable.removeEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);\n sourceTable.removeEventListener(dh.Table.EVENT_SIZECHANGED, this.handleSourceSizeChange);\n sourceTable.removeEventListener(dh.Table.EVENT_DISCONNECT, this.handleDisconnect);\n sourceTable.removeEventListener(dh.Table.EVENT_RECONNECT, this.handleReconnect);\n }\n handleChange(_ref3) {\n var {\n column,\n isValueShown = false,\n value\n } = _ref3;\n var {\n name = undefined,\n type = undefined\n } = column !== null && column !== void 0 ? column : {};\n var sendUpdate = true;\n var timestamp = Date.now();\n this.setState(_ref4 => {\n var _ref5, _timestamp;\n var {\n panelState,\n timestamp: prevTimestamp,\n wasFlipped,\n skipUpdate\n } = _ref4;\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n var isFlip = panelState != null && isValueShown !== panelState.isValueShown && name === panelState.name && type === panelState.type && value === panelState.value;\n sendUpdate = (_ref5 = !skipUpdate && isValueShown && (!isFlip || !wasFlipped)) !== null && _ref5 !== void 0 ? _ref5 : false;\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp: (_timestamp = timestamp) !== null && _timestamp !== void 0 ? _timestamp : undefined\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false\n };\n }, () => {\n if (sendUpdate) {\n this.sendUpdate(name !== null && name !== void 0 ? name : null, type, value, timestamp);\n }\n });\n }\n handleDisconnect() {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false\n });\n }\n handleReconnect() {\n this.setState({\n isDisconnected: false,\n error: null\n });\n }\n handleSourceFilterChange() {\n this.applySourceFilters();\n }\n handleSourceSortChange() {\n this.applySourceSorts();\n }\n handleSourceSizeChange(_ref6) {\n var {\n detail\n } = _ref6;\n this.setState({\n sourceSize: detail\n });\n }\n handleColumnSelected() {\n log.debug('handleColumnSelected');\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(InputFilterEvent.COLUMN_SELECTED, this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n handleClearAllFilters() {\n var _this$dropdownFilterR, _this$dropdownFilterR2;\n (_this$dropdownFilterR = this.dropdownFilterRef) === null || _this$dropdownFilterR === void 0 ? void 0 : (_this$dropdownFilterR2 = _this$dropdownFilterR.current) === null || _this$dropdownFilterR2 === void 0 ? void 0 : _this$dropdownFilterR2.clearFilter();\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param state Filter state to set\n * @param sendUpdate Emit filters changed event if true\n */\n setPanelState(state) {\n var _this$dropdownFilterR3, _this$dropdownFilterR4;\n var sendUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var {\n dashboardLinks\n } = this.props;\n if (this.getSource(dashboardLinks) == null) {\n log.debug('Ignore state update for unlinked filter', state);\n return;\n }\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({\n skipUpdate: !sendUpdate\n });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n (_this$dropdownFilterR3 = this.dropdownFilterRef) === null || _this$dropdownFilterR3 === void 0 ? void 0 : (_this$dropdownFilterR4 = _this$dropdownFilterR3.current) === null || _this$dropdownFilterR4 === void 0 ? void 0 : _this$dropdownFilterR4.setFilterState(state);\n }\n sendUpdate(name, type, value, timestamp) {\n var _this$getSource;\n var {\n dashboardLinks,\n glEventHub\n } = this.props;\n var sourcePanelId = (_this$getSource = this.getSource(dashboardLinks)) === null || _this$getSource === void 0 ? void 0 : _this$getSource.panelId;\n var excludePanelIds = sourcePanelId === null ? [] : [sourcePanelId];\n log.debug('sendUpdate', {\n name,\n type,\n value,\n timestamp,\n excludePanelIds\n });\n glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value: value != null ? value : '=null',\n timestamp,\n excludePanelIds\n });\n }\n updateValuesTable() {\n var {\n dashboardLinks,\n panelTableMap\n } = this.props;\n var source = this.getSource(dashboardLinks);\n var sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('updateValuesTable', source, sourceTable);\n this.setState({\n values: [],\n valuesTable: undefined,\n error: null\n });\n if (source == null) {\n log.debug('Filter unlinked.');\n this.setState({\n isLoading: false,\n isLoaded: true,\n isValueShown: false,\n sourceSize: 0\n });\n return;\n }\n this.setState({\n isLoading: true\n });\n if (sourceTable == null) {\n return;\n }\n this.setState({\n isLoaded: false,\n sourceSize: sourceTable.size\n });\n this.pending.add(sourceTable.copy(), resolved => resolved.close()).then(valuesTable => {\n // Loading/loaded will be set when values array is actually populated\n this.updateViewportListener(valuesTable);\n this.setState({\n valuesTable\n });\n }).catch(error => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n this.setState({\n isLoading: false,\n error\n });\n });\n }\n applySourceSorts() {\n var {\n dashboardLinks,\n panelTableMap\n } = this.props;\n var {\n valuesTable\n } = this.state;\n var sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceSorts', sourceTable === null || sourceTable === void 0 ? void 0 : sourceTable.sort);\n if (valuesTable == null || sourceTable == null) {\n log.debug('Table not initialized');\n return;\n }\n var sorts = [...sourceTable.sort];\n valuesTable.applySort(sorts);\n this.setViewport(valuesTable);\n }\n applySourceFilters() {\n var {\n dashboardLinks,\n panelTableMap\n } = this.props;\n var {\n valuesTable\n } = this.state;\n var sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceFilters', sourceTable === null || sourceTable === void 0 ? void 0 : sourceTable.filter);\n if (valuesTable == null || sourceTable == null) {\n log.debug('Table not initialized');\n return;\n }\n var filters = [...sourceTable.filter];\n valuesTable.applyFilter(filters);\n this.setViewport(valuesTable);\n }\n updateViewportListener(valuesTable) {\n var {\n dh\n } = this.props;\n log.debug('updateViewportListener', valuesTable === null || valuesTable === void 0 ? void 0 : valuesTable.size);\n if (this.cleanup) {\n this.cleanup();\n }\n if (valuesTable == null) {\n this.cleanup = undefined;\n return;\n }\n this.cleanup = valuesTable.addEventListener(dh.Table.EVENT_UPDATED, this.handleValuesTableUpdate);\n this.setViewport(valuesTable);\n }\n setViewport(valuesTable) {\n var {\n dashboardLinks\n } = this.props;\n var valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\n if (!valuesColumn) {\n log.error('values column is null');\n return;\n }\n valuesTable.setViewport(0, DropdownFilterPanel.MAX_TABLE_SIZE - 1, [valuesColumn]);\n }\n updateFormatterSettings(settings) {\n var {\n dh\n } = this.props;\n var columnFormats = FormatterUtils.getColumnFormats(settings);\n if (!deepEqual(this.columnFormats, columnFormats)) {\n this.columnFormats = columnFormats;\n this.setState({\n formatter: new Formatter(dh, columnFormats)\n });\n }\n }\n handleValuesTableUpdate(_ref7) {\n var {\n detail\n } = _ref7;\n var {\n rows\n } = detail;\n var {\n dashboardLinks\n } = this.props;\n var {\n valuesTable\n } = this.state;\n if (!valuesTable) {\n log.error('valuesTable is null');\n return;\n }\n var valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\n if (!valuesColumn) {\n log.error('Values column not found');\n return;\n }\n var values = rows.map(row => row.get(valuesColumn));\n this.setState({\n values,\n isLoading: false,\n isLoaded: true,\n valuesColumn\n });\n }\n handleSourceMouseEnter() {\n var {\n columnSelectionValidator\n } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n handleSourceMouseLeave() {\n var {\n columnSelectionValidator\n } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n render() {\n var {\n columns,\n dashboardLinks,\n disableLinking,\n glContainer,\n glEventHub,\n isLinkerActive\n } = this.props;\n var {\n column,\n formatter,\n isDisconnected,\n isValueShown,\n value,\n values,\n valuesColumn,\n isLoading,\n isLoaded\n } = this.state;\n var source = this.getSource(dashboardLinks);\n var settingsErrorMessage = this.getSettingsErrorMessage();\n var panelErrorMessage = this.getPanelErrorMessage();\n var formattedValues = isLoaded && valuesColumn != null ? this.getCachedValues(values, valuesColumn, formatter) : [];\n return /*#__PURE__*/_jsx(WidgetPanel, {\n errorMessage: panelErrorMessage,\n isLoading: isLoading,\n isLoaded: isLoaded,\n isDisconnected: isDisconnected,\n className: \"iris-dropdown-filter-panel\",\n componentPanel: this,\n glContainer: glContainer,\n glEventHub: glEventHub,\n onClearAllFilters: this.handleClearAllFilters,\n widgetName: \"Dropdown Filter\",\n widgetType: \"DropdownFilter\",\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: this.panelContainer,\n className: \"dropdown-filter-container h-100 w-100 container\",\n children: /*#__PURE__*/_jsx(DropdownFilter, {\n ref: this.dropdownFilterRef,\n column: column,\n columns: columns,\n isValueShown: isValueShown,\n isLinkerActive: isLinkerActive,\n disableLinking: disableLinking,\n isLoaded: isLoaded,\n settingsError: settingsErrorMessage,\n source: source,\n value: value,\n values: formattedValues,\n onChange: this.handleChange,\n onColumnSelected: this.handleColumnSelected,\n onSourceMouseEnter: this.handleSourceMouseEnter,\n onSourceMouseLeave: this.handleSourceMouseLeave\n })\n })\n });\n }\n}\n_defineProperty(DropdownFilterPanel, \"displayName\", 'DropdownFilterPanel');\n_defineProperty(DropdownFilterPanel, \"COMPONENT\", 'DropdownFilterPanel');\n_defineProperty(DropdownFilterPanel, \"MAX_TABLE_SIZE\", 256);\n_defineProperty(DropdownFilterPanel, \"SOURCE_COLUMN\", Object.freeze({\n name: 'FilterSource',\n type: null\n}));\nvar ConnectedDropdownFilterPanel = connector(DropdownFilterPanel);\nexport default ConnectedDropdownFilterPanel;\n//# sourceMappingURL=DropdownFilterPanel.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, { Component } from 'react';\nimport memoizeOne from 'memoize-one';\nimport shortid from 'shortid';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsEdit, vsGear, vsSave, vsCircleSlash, vsTrash, vsDeviceCamera, dhRefresh, dhNewCircleLargeFilled, vsCircleLargeFilled, vsArrowSmallUp } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { Button, CardFlip, RadioGroup, RadioItem } from '@deephaven/components';\nimport \"./FilterSetManager.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('FilterSetManager');\nvar NAME_INPUT_PLACEHOLDER = 'Enter name...';\nvar EMPTY_LIST_PLACEHOLDER = 'No Available Filter Sets';\nclass FilterSetManager extends Component {\n static animateScreenFlash() {\n var _document$querySelect;\n var overlay = document.createElement('div');\n overlay.classList.add('screen-flash-overlay');\n overlay.addEventListener('animationend', () => {\n // Removing the element removes its event listeners\n overlay.remove();\n });\n (_document$querySelect = document.querySelector('body')) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.appendChild(overlay);\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"renameInputRef\", /*#__PURE__*/React.createRef());\n _defineProperty(this, \"dropdownRef\", /*#__PURE__*/React.createRef());\n _defineProperty(this, \"editDropdownRef\", /*#__PURE__*/React.createRef());\n _defineProperty(this, \"isRenamingExistingSet\", memoizeOne((filterSets, renameSet) => renameSet !== undefined && filterSets.some(_ref => {\n var {\n id\n } = _ref;\n return id === renameSet.id;\n })));\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleEditDropdownChange = this.handleEditDropdownChange.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterApply = this.handleFilterApply.bind(this);\n this.handleCaptureNewSet = this.handleCaptureNewSet.bind(this);\n this.handleNameInputChange = this.handleNameInputChange.bind(this);\n this.handleNameInputKeyPress = this.handleNameInputKeyPress.bind(this);\n this.handleRenameConfirm = this.handleRenameConfirm.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRestoreFullStateChange = this.handleRestoreFullStateChange.bind(this);\n this.handleSetDelete = this.handleSetDelete.bind(this);\n this.handleSetEdit = this.handleSetEdit.bind(this);\n this.handleSetUpdate = this.handleSetUpdate.bind(this);\n this.state = {\n editId: undefined,\n renameSet: undefined,\n nameInputValue: '',\n nameInputError: undefined,\n modifiedFilterSets: [],\n restoreFullState: false\n };\n }\n componentDidMount() {\n var {\n isValueShown\n } = this.props;\n if (isValueShown) {\n this.updateSelectedId();\n } else {\n this.initSettingsScreen();\n }\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n isValueShown,\n filterSets\n } = this.props;\n var {\n modifiedFilterSets\n } = this.state;\n if (prevProps.isValueShown && !isValueShown) {\n this.initSettingsScreen();\n }\n if (this.isNameInputScreen() && !this.isNameInputScreen(prevState)) {\n this.focusRenameInput();\n }\n if (filterSets !== prevProps.filterSets) {\n if (!isValueShown && filterSets.length > 0 && prevProps.filterSets.length === 0 && modifiedFilterSets.length === 0) {\n // Filter set added from another panel, flip from the settings side/initial screen to the value side\n var {\n onChange\n } = this.props;\n onChange({\n isValueShown: true,\n selectedId: filterSets[0].id\n });\n } else {\n this.updateSelectedId();\n }\n }\n }\n initSettingsScreen() {\n var {\n filterSets,\n selectedId\n } = this.props;\n log.debug('initSettingsScreen', filterSets, selectedId);\n this.setState({\n modifiedFilterSets: [...filterSets],\n editId: selectedId\n });\n }\n\n // Update selected id without applying the new set on filterSets change\n updateSelectedId() {\n var {\n isValueShown,\n filterSets,\n selectedId,\n onChange\n } = this.props;\n log.debug('updateSelectedId', filterSets, selectedId);\n if (!isValueShown) {\n return;\n }\n if (!filterSets.some(_ref2 => {\n var {\n id\n } = _ref2;\n return id === selectedId;\n })) {\n // Update the selection if selectedId doesn't exist in the list\n // Flip to the settings side for empty list to show the initial screen\n var isEmptyList = filterSets.length === 0;\n onChange({\n isValueShown: !isEmptyList,\n selectedId: isEmptyList ? undefined : filterSets[0].id\n });\n }\n }\n handleEditDropdownChange(event) {\n var {\n value: editId\n } = event.target;\n this.setState({\n editId\n });\n }\n handleFilterChange(event) {\n var {\n value: selectedId\n } = event.target;\n var {\n isValueShown,\n onChange\n } = this.props;\n this.applyFilterSet(selectedId);\n onChange({\n isValueShown,\n selectedId\n });\n }\n handleFilterApply() {\n var {\n selectedId\n } = this.props;\n this.applyFilterSet(selectedId);\n }\n handleSettingsCancel() {\n var {\n onChange,\n selectedId,\n filterSets\n } = this.props;\n this.setState({\n modifiedFilterSets: []\n });\n // Flip the card to the filter set selection screen if the sets list isn't empty\n // Otherwise show the initial screen\n if (filterSets.length > 0) {\n onChange({\n isValueShown: true,\n selectedId\n });\n }\n }\n handleSettingsSave() {\n var {\n onChange,\n onUpdateSets\n } = this.props;\n var {\n modifiedFilterSets,\n editId\n } = this.state;\n this.setState({\n modifiedFilterSets: []\n });\n log.debug('Update sets', modifiedFilterSets, editId);\n onUpdateSets(modifiedFilterSets);\n // Don't flip the card to the filter set selection screen if the updated sets list is empty\n if (modifiedFilterSets.length > 0) {\n onChange({\n isValueShown: true,\n selectedId: editId\n });\n }\n }\n handleCaptureNewSet() {\n var {\n getFilterState\n } = this.props;\n FilterSetManager.animateScreenFlash();\n var id = shortid();\n var panels = getFilterState();\n var renameSet = {\n id,\n title: '',\n panels\n };\n log.debug('handleSetCreate', renameSet);\n this.setState({\n nameInputValue: '',\n nameInputError: undefined,\n renameSet\n });\n }\n handleRenameCancel() {\n this.setState({\n renameSet: undefined\n });\n }\n handleRestoreFullStateChange(event) {\n this.setState({\n restoreFullState: event.target.value === 'true'\n });\n }\n getNameError(nameInputValue) {\n var _nameInputValue$trim;\n var {\n renameSet,\n modifiedFilterSets\n } = this.state;\n var trimmedName = (_nameInputValue$trim = nameInputValue === null || nameInputValue === void 0 ? void 0 : nameInputValue.trim()) !== null && _nameInputValue$trim !== void 0 ? _nameInputValue$trim : '';\n if (trimmedName.length === 0) {\n log.debug('Name cannot be empty', trimmedName);\n return 'Name cannot be empty';\n }\n if (renameSet !== undefined && modifiedFilterSets.some(_ref3 => {\n var {\n title,\n id\n } = _ref3;\n return title === trimmedName && id !== renameSet.id;\n })) {\n log.debug('Set with this name already exists', trimmedName);\n return 'Set with this name already exists';\n }\n return undefined;\n }\n handleRenameConfirm() {\n var _nameInputValue$trim2;\n var {\n nameInputValue,\n renameSet,\n modifiedFilterSets,\n restoreFullState\n } = this.state;\n if (renameSet === undefined) {\n log.error('Renamed set undefined.');\n return;\n }\n var nameInputError = this.getNameError(nameInputValue);\n log.debug('handleRenameConfirm', nameInputValue, nameInputError);\n if (nameInputError !== undefined) {\n this.setState({\n nameInputError\n });\n return;\n }\n var trimmedName = (_nameInputValue$trim2 = nameInputValue === null || nameInputValue === void 0 ? void 0 : nameInputValue.trim()) !== null && _nameInputValue$trim2 !== void 0 ? _nameInputValue$trim2 : '';\n var namedFilterSet = _objectSpread(_objectSpread({}, renameSet), {}, {\n title: trimmedName,\n restoreFullState\n });\n var selectedIndex = modifiedFilterSets.findIndex(_ref4 => {\n var {\n id\n } = _ref4;\n return id === renameSet.id;\n });\n var updatedModifiedFilterSets = [...modifiedFilterSets];\n if (selectedIndex >= 0) {\n updatedModifiedFilterSets[selectedIndex] = namedFilterSet;\n log.debug('Renamed existing set', updatedModifiedFilterSets);\n } else {\n updatedModifiedFilterSets.push(namedFilterSet);\n log.debug('Added new set to modified sets', updatedModifiedFilterSets);\n }\n this.setState({\n editId: namedFilterSet.id,\n modifiedFilterSets: updatedModifiedFilterSets,\n renameSet: undefined\n });\n }\n handleSetDelete() {\n this.setState(state => {\n var {\n editId,\n modifiedFilterSets: prevFilterSets\n } = state;\n var selectedIndex = prevFilterSets.findIndex(_ref5 => {\n var {\n id\n } = _ref5;\n return id === editId;\n });\n if (selectedIndex < 0) {\n log.error('Unable to find selected filterSet index', prevFilterSets, editId);\n return null;\n }\n var modifiedFilterSets = prevFilterSets.filter(_ref6 => {\n var {\n id\n } = _ref6;\n return id !== editId;\n });\n var newSelectedIndex = Math.max(0, Math.min(modifiedFilterSets.length - 1, selectedIndex - 1));\n var newSelectedId = modifiedFilterSets.length > 0 ? modifiedFilterSets[newSelectedIndex].id : undefined;\n log.debug('Deleted selected set', editId, prevFilterSets, modifiedFilterSets);\n log.debug('New selection', newSelectedIndex, newSelectedId);\n return {\n modifiedFilterSets,\n editId: newSelectedId\n };\n });\n }\n handleSetUpdate() {\n var {\n getFilterState\n } = this.props;\n FilterSetManager.animateScreenFlash();\n var panels = getFilterState();\n this.setState(_ref7 => {\n var {\n modifiedFilterSets: prevFilterSets,\n editId\n } = _ref7;\n if (editId === undefined) {\n log.error('Filter for update not selected.');\n return null;\n }\n var modifiedFilterSets = [...prevFilterSets];\n var selectedSetIndex = modifiedFilterSets.findIndex(_ref8 => {\n var {\n id\n } = _ref8;\n return id === editId;\n });\n if (selectedSetIndex < 0) {\n log.error('Selected set for update not found.');\n return null;\n }\n // Clone selected set to avoid mutation of the props\n modifiedFilterSets[selectedSetIndex] = _objectSpread(_objectSpread({}, modifiedFilterSets[selectedSetIndex]), {}, {\n panels\n });\n log.debug('Update set', modifiedFilterSets, panels);\n return {\n modifiedFilterSets\n };\n });\n }\n handleSetEdit() {\n this.setState(_ref9 => {\n var {\n editId,\n modifiedFilterSets\n } = _ref9;\n var selectedSet = modifiedFilterSets.find(_ref10 => {\n var {\n id\n } = _ref10;\n return id === editId;\n });\n if (selectedSet === undefined) {\n log.error('Could not find selected set', editId, modifiedFilterSets);\n return null;\n }\n var {\n title,\n restoreFullState = false\n } = selectedSet;\n return {\n nameInputValue: title,\n nameInputError: undefined,\n renameSet: selectedSet,\n restoreFullState\n };\n });\n }\n handleSettingsClick(event) {\n event.stopPropagation();\n var {\n onChange,\n selectedId\n } = this.props;\n onChange({\n isValueShown: false,\n selectedId\n });\n }\n handleBackgroundClick(event) {\n log.debug('handleBackgroundClick');\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n handleNameInputChange(event) {\n var {\n value: nameInputValue\n } = event.target;\n var nameInputError = this.getNameError(nameInputValue);\n this.setState({\n nameInputValue,\n nameInputError\n });\n }\n handleNameInputKeyPress(event) {\n var {\n key\n } = event;\n if (key === 'Enter') {\n event.preventDefault();\n this.handleRenameConfirm();\n }\n }\n isNameInputScreen() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;\n var {\n renameSet\n } = state;\n return renameSet !== undefined;\n }\n applyFilterSet(selectedId) {\n var {\n onApply,\n filterSets\n } = this.props;\n if (selectedId === undefined) {\n log.debug('No filter selected');\n return;\n }\n var filterSet = filterSets.find(_ref11 => {\n var {\n id\n } = _ref11;\n return id === selectedId;\n });\n if (filterSet === undefined) {\n log.debug('Selected id not found in filterSets', selectedId, filterSets);\n return;\n }\n log.debug('Apply filterSet', filterSet);\n onApply(filterSet);\n }\n focusInput() {\n var _this$dropdownRef$cur;\n (_this$dropdownRef$cur = this.dropdownRef.current) === null || _this$dropdownRef$cur === void 0 ? void 0 : _this$dropdownRef$cur.focus();\n }\n focusRenameInput() {\n var _this$renameInputRef$;\n (_this$renameInputRef$ = this.renameInputRef.current) === null || _this$renameInputRef$ === void 0 ? void 0 : _this$renameInputRef$.focus();\n }\n render() {\n var {\n nameInputValue,\n nameInputError,\n editId,\n renameSet,\n modifiedFilterSets,\n restoreFullState\n } = this.state;\n var {\n isValueShown,\n filterSets,\n selectedId\n } = this.props;\n var isNameInputScreen = this.isNameInputScreen();\n var isRenamingExistingSet = this.isRenamingExistingSet(modifiedFilterSets, renameSet);\n var isEmptyEditList = modifiedFilterSets.length === 0;\n var isInitialScreen = !isNameInputScreen && isEmptyEditList && filterSets.length === 0;\n var isEditListScreen = !isNameInputScreen && !isInitialScreen;\n var captureSetIcon = /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-layers mr-3\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsCircleLargeFilled,\n mask: vsDeviceCamera,\n transform: \"shrink-1 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhNewCircleLargeFilled,\n className: \"text-primary\",\n transform: \"shrink-6 down-5 right-7\"\n })]\n });\n var updateSetIcon = /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-layers\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsCircleLargeFilled,\n mask: vsDeviceCamera,\n transform: \"shrink-1 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsArrowSmallUp,\n transform: \"shrink-1 down-5 right-7\"\n })]\n });\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager fill-parent-absolute\",\n children: /*#__PURE__*/_jsxs(CardFlip, {\n className: \"w-100 h-100\",\n isFlipped: isValueShown,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager-settings-card fill-parent-absolute\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"filter-set-manager-card-content\",\n children: [isInitialScreen && /*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn btn-link no-underline\",\n onClick: this.handleCaptureNewSet,\n icon: captureSetIcon,\n children: \"Capture filter set\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"py-3 text-muted small\",\n children: \"Takes a snapshot of the currently applied filters on all panels, allowing you to restore saved filter sets later.\"\n })]\n }), isNameInputScreen && /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex flex-column justify-content-center\",\n \"data-testid\": \"edit-filter-set-container\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"form-group\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n children: isRenamingExistingSet ? 'Edit set' : 'Name captured set'\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"name-input-container\",\n children: [/*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"input-set-name form-control\",\n placeholder: NAME_INPUT_PLACEHOLDER,\n value: nameInputValue,\n ref: this.renameInputRef,\n onChange: this.handleNameInputChange,\n onKeyPress: this.handleNameInputKeyPress,\n spellCheck: \"false\"\n }), /*#__PURE__*/_jsx(Button, {\n \"data-testid\": \"rename-confirm-button\",\n kind: \"ghost\",\n className: \"btn btn-link no-underline pt-2 pb-2\",\n onClick: this.handleRenameConfirm,\n tooltip: \"Save\",\n \"test-id\": \"button-save\",\n icon: vsSave\n }), /*#__PURE__*/_jsx(Button, {\n \"data-testid\": \"rename-cancel-button\",\n kind: \"ghost\",\n className: \"btn btn-link no-underline pt-2 pb-2\",\n onClick: this.handleRenameCancel,\n tooltip: \"Cancel\",\n icon: vsCircleSlash\n })]\n }), nameInputError !== undefined && /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message\",\n children: nameInputError\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group\",\n children: /*#__PURE__*/_jsxs(RadioGroup, {\n onChange: this.handleRestoreFullStateChange,\n value: \"\".concat(restoreFullState),\n children: [/*#__PURE__*/_jsx(RadioItem, {\n value: \"false\",\n children: \"Restore only filters\"\n }), /*#__PURE__*/_jsx(RadioItem, {\n value: \"true\",\n children: \"Restore full table state\"\n })]\n })\n })]\n }), isEditListScreen && /*#__PURE__*/_jsxs(\"div\", {\n className: \"filter-set-manager-settings-grid-1\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"form-group\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n children: \"Edit filter sets\"\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"filter-select-container\",\n children: [/*#__PURE__*/_jsxs(\"select\", {\n \"data-testid\": \"settings-card-filter-select\",\n ref: this.editDropdownRef,\n value: editId !== null && editId !== void 0 ? editId : '-1',\n className: \"custom-select filter-value-select\",\n onChange: this.handleEditDropdownChange,\n disabled: isEmptyEditList,\n children: [isEmptyEditList && /*#__PURE__*/_jsx(\"option\", {\n value: \"-1\",\n disabled: true,\n children: EMPTY_LIST_PLACEHOLDER\n }), modifiedFilterSets.map(_ref12 => {\n var {\n id,\n title\n } = _ref12;\n return /*#__PURE__*/_jsx(\"option\", {\n value: id,\n children: title\n }, id);\n })]\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleSetUpdate,\n disabled: isEmptyEditList,\n icon: updateSetIcon,\n tooltip: \"Update\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleSetEdit,\n disabled: isEmptyEditList,\n icon: vsEdit,\n tooltip: \"Edit\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleSetDelete,\n disabled: isEmptyEditList,\n icon: vsTrash,\n tooltip: \"Delete\"\n })]\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn btn-link no-underline\",\n onClick: this.handleCaptureNewSet,\n icon: captureSetIcon,\n children: \"Capture new filter set\"\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"py-3 text-right\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: this.handleSettingsCancel,\n children: \"Cancel\"\n }), \"\\xA0\", /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: this.handleSettingsSave,\n children: \"Save\"\n })]\n })]\n })]\n })\n }, \"front\"), /*#__PURE__*/_jsxs(\"div\", {\n className: \"filter-set-manager-value-card fill-parent-absolute\",\n onClick: this.handleBackgroundClick,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager-column\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager-column-title\",\n children: \"Filter sets\"\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager-card-content\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager-value-input\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"filter-select-container\",\n children: [/*#__PURE__*/_jsxs(\"select\", {\n \"data-testid\": \"value-card-filter-select\",\n ref: this.dropdownRef,\n value: selectedId,\n className: \"custom-select filter-value-select\",\n onChange: this.handleFilterChange,\n children: [filterSets.length === 0 && /*#__PURE__*/_jsx(\"option\", {\n value: \"-1\",\n disabled: true,\n children: EMPTY_LIST_PLACEHOLDER\n }), filterSets.map(_ref13 => {\n var {\n id,\n title\n } = _ref13;\n return /*#__PURE__*/_jsx(\"option\", {\n value: id,\n children: title\n }, id);\n })]\n }), /*#__PURE__*/_jsx(Button, {\n \"data-testid\": \"filter-apply-button\",\n kind: \"ghost\",\n onClick: this.handleFilterApply,\n icon: dhRefresh,\n tooltip: \"Apply Filter Set\"\n })]\n })\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager-menu\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn btn-link btn-link-icon m-2 px-2\",\n onClick: this.handleSettingsClick,\n tooltip: \"Settings\",\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsGear,\n transform: \"grow-4\"\n })\n })\n })]\n }, \"back\")]\n })\n });\n }\n}\nexport default FilterSetManager;\n//# sourceMappingURL=FilterSetManager.js.map","import React from 'react';\nimport { GLPropTypes } from '@deephaven/dashboard';\nimport PropTypes from 'prop-types';\nimport WidgetPanelTooltip from \"./WidgetPanelTooltip.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction IrisGridPanelTooltip(props) {\n var _model$rowCount, _model$pendingRowCoun, _model$floatingBottom, _model$floatingTopRow, _model$columnCount;\n var {\n model,\n widgetName,\n glContainer,\n description\n } = props;\n var rowCount = ((_model$rowCount = model === null || model === void 0 ? void 0 : model.rowCount) !== null && _model$rowCount !== void 0 ? _model$rowCount : 0) - ((_model$pendingRowCoun = model === null || model === void 0 ? void 0 : model.pendingRowCount) !== null && _model$pendingRowCoun !== void 0 ? _model$pendingRowCoun : 0) - ((_model$floatingBottom = model === null || model === void 0 ? void 0 : model.floatingBottomRowCount) !== null && _model$floatingBottom !== void 0 ? _model$floatingBottom : 0) - ((_model$floatingTopRow = model === null || model === void 0 ? void 0 : model.floatingTopRowCount) !== null && _model$floatingTopRow !== void 0 ? _model$floatingTopRow : 0);\n var formattedRowCount = model === null || model === void 0 ? void 0 : model.displayString(rowCount, 'long');\n var columnCount = (_model$columnCount = model === null || model === void 0 ? void 0 : model.columnCount) !== null && _model$columnCount !== void 0 ? _model$columnCount : 0;\n var formattedcolumnCount = model === null || model === void 0 ? void 0 : model.displayString(columnCount, 'long');\n return /*#__PURE__*/_jsxs(WidgetPanelTooltip, {\n widgetType: \"Table\",\n widgetName: widgetName,\n glContainer: glContainer,\n description: description,\n children: [/*#__PURE__*/_jsx(\"hr\", {\n className: \"tab-tooltip-divider\"\n }), /*#__PURE__*/_jsx(\"span\", {\n children: \"Number of Columns\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"tab-tooltip-statistic-value\",\n children: formattedcolumnCount\n }), /*#__PURE__*/_jsx(\"span\", {\n children: \"Number of Rows\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"tab-tooltip-statistic-value\",\n children: formattedRowCount\n })]\n });\n}\nIrisGridPanelTooltip.propTypes = {\n glContainer: GLPropTypes.Container.isRequired,\n widgetName: PropTypes.string.isRequired,\n description: PropTypes.string\n};\nIrisGridPanelTooltip.defaultProps = {\n description: null\n};\nexport default IrisGridPanelTooltip;\n//# sourceMappingURL=IrisGridPanelTooltip.js.map","/**\n * @deprecated use `IrisGridPanelMetadata` instead\n */\n\nexport function isLegacyIrisGridPanelMetadata(metadata) {\n if (metadata == null) return false;\n var irisGridPanelMetadata = metadata;\n return typeof irisGridPanelMetadata.table === 'string';\n}\nexport function isIrisGridPanelMetadata(metadata) {\n if (metadata == null) return false;\n var irisGridPanelMetadata = metadata;\n return typeof irisGridPanelMetadata.name === 'string';\n}\n//# sourceMappingURL=IrisGridPanelTypes.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n// Wrapper for the IrisGrid for use in a golden layout container\n// Will probably need to handle window popping out from golden layout here.\nimport React, { PureComponent } from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport { DEFAULT_DASHBOARD_ID, LayoutUtils } from '@deephaven/dashboard';\nimport { AdvancedSettings, IrisGrid, IrisGridModel, IrisGridUtils, isIrisGridTableModelTemplate, IrisGridTableModel } from '@deephaven/iris-grid';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getSettings, getUser, getWorkspace } from '@deephaven/redux';\nimport { assertNotNull, PromiseUtils } from '@deephaven/utils';\nimport { ContextMenuRoot } from '@deephaven/components';\nimport { ConsoleEvent, InputFilterEvent, IrisGridEvent } from \"../events/index.js\";\nimport { getInputFiltersForDashboard, getLinksForDashboard, getColumnSelectionValidatorForDashboard } from \"../redux/index.js\";\nimport WidgetPanel from \"./WidgetPanel.js\";\nimport \"./IrisGridPanel.css\";\nimport IrisGridPanelTooltip from \"./IrisGridPanelTooltip.js\";\nimport { isIrisGridPanelMetadata, isLegacyIrisGridPanelMetadata } from \"./IrisGridPanelTypes.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridPanel');\nvar DEBOUNCE_PANEL_STATE_UPDATE = 500;\nvar PLUGIN_COMPONENTS = {\n IrisGrid,\n IrisGridTableModel,\n ContextMenuRoot\n};\n\n// Some of the properties in the loaded panel state may be omitted\n// even though they can't be undefined in the dehydrated state.\n// This can happen when loading the state saved before the properties were added.\nfunction getTableNameFromMetadata(metadata) {\n if (metadata == null) {\n throw new Error('No metadata provided');\n }\n if (isIrisGridPanelMetadata(metadata)) {\n return metadata.name;\n }\n if (isLegacyIrisGridPanelMetadata(metadata)) {\n return metadata.table;\n }\n throw new Error(\"Unable to determine table name from metadata: \".concat(metadata));\n}\nexport class IrisGridPanel extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"irisGrid\", void 0);\n _defineProperty(this, \"pluginRef\", void 0);\n _defineProperty(this, \"modelPromise\", void 0);\n _defineProperty(this, \"irisGridState\", void 0);\n _defineProperty(this, \"gridState\", void 0);\n _defineProperty(this, \"pluginState\", void 0);\n _defineProperty(this, \"irisGridUtils\", void 0);\n _defineProperty(this, \"getGridInputFilters\", memoize((columns, inputFilters) => IrisGridUtils.getInputFiltersForColumns(columns,\n // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.\n inputFilters.filter(_ref => {\n var {\n value,\n excludePanelIds\n } = _ref;\n var id = LayoutUtils.getIdFromPanel(this);\n return value != null && (excludePanelIds == null || id != null && !excludePanelIds.includes(id));\n }))));\n _defineProperty(this, \"getAlwaysFetchColumns\", memoize((dashboardLinks, pluginFetchColumns) => {\n var id = LayoutUtils.getIdFromPanel(this);\n // Always fetch columns which are the start/source of a link or columns specified by a plugin\n var columnSet = new Set(pluginFetchColumns);\n for (var i = 0; i < dashboardLinks.length; i += 1) {\n var {\n start\n } = dashboardLinks[i];\n if (start != null && start.panelId === id) {\n columnSet.add(start.columnName);\n }\n }\n return [...columnSet];\n }));\n _defineProperty(this, \"getPluginContent\", memoize((Plugin, model, user, workspace, pluginState) => {\n if (!model || !isIrisGridTableModelTemplate(model) || Plugin == null || model.table == null) {\n return null;\n }\n\n // The panel in the deprecated props makes an ugly dependency of the plugin on the panel\n // Since we didn't have TS when the old plugins would have been implemented,\n // just pass the deprecated props without type checking\n // so we can break the ugly dependency of plugin on panel\n var deprecatedProps = {\n panel: this,\n onFilter: this.handlePluginFilter,\n onFetchColumns: this.handlePluginFetchColumns,\n user,\n workspace,\n components: PLUGIN_COMPONENTS\n };\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-plugin\",\n children: /*#__PURE__*/_jsx(Plugin, _objectSpread({\n ref: this.pluginRef,\n filter: this.handlePluginFilter,\n fetchColumns: this.handlePluginFetchColumns,\n model: model,\n table: model.table,\n onStateChange: this.handlePluginStateChange,\n pluginState: pluginState\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, deprecatedProps))\n });\n }));\n _defineProperty(this, \"getDehydratedIrisGridPanelState\", memoize((model, isSelectingPartition, partition, partitionColumn, advancedSettings) => IrisGridUtils.dehydrateIrisGridPanelState(model, {\n isSelectingPartition,\n partition,\n partitionColumn,\n advancedSettings\n })));\n _defineProperty(this, \"getDehydratedIrisGridState\", memoize((model, sorts, advancedFilters, customColumnFormatMap, isFilterBarShown, quickFilters, customColumns, reverseType, rollupConfig, showSearchBar, searchValue, selectDistinctColumns, selectedSearchColumns, invertSearchColumns, userColumnWidths, userRowHeights, aggregationSettings, pendingDataMap, frozenColumns, conditionalFormats, columnHeaderGroups) => {\n assertNotNull(this.irisGridUtils);\n return this.irisGridUtils.dehydrateIrisGridState(model, {\n advancedFilters,\n aggregationSettings,\n customColumnFormatMap,\n isFilterBarShown,\n metrics: {\n userColumnWidths,\n userRowHeights\n },\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n columnHeaderGroups\n });\n }));\n _defineProperty(this, \"getDehydratedGridState\", memoize((model, movedColumns, movedRows, isStuckToBottom, isStuckToRight) => IrisGridUtils.dehydrateGridState(model, {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n })));\n _defineProperty(this, \"getCachedPanelState\", memoize((irisGridPanelState, irisGridState, gridState, pluginState) => ({\n irisGridPanelState,\n irisGridState,\n gridState,\n pluginState\n })));\n _defineProperty(this, \"savePanelState\", debounce(() => {\n var {\n irisGridState,\n gridState,\n pluginState\n } = this;\n assertNotNull(irisGridState);\n var {\n onPanelStateUpdate\n } = this.props;\n var {\n model,\n panelState: oldPanelState,\n isSelectingPartition,\n partition,\n partitionColumn,\n advancedSettings\n } = this.state;\n var {\n advancedFilters,\n aggregationSettings,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n metrics,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n columnHeaderGroups\n } = irisGridState;\n assertNotNull(model);\n assertNotNull(metrics);\n var {\n userColumnWidths,\n userRowHeights\n } = metrics;\n assertNotNull(gridState);\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = gridState;\n var panelState = this.getCachedPanelState(this.getDehydratedIrisGridPanelState(model, isSelectingPartition, partition, partitionColumn, advancedSettings), this.getDehydratedIrisGridState(model, sorts, advancedFilters, customColumnFormatMap, isFilterBarShown, quickFilters, customColumns, reverseType, rollupConfig, showSearchBar, searchValue, selectDistinctColumns, selectedSearchColumns, invertSearchColumns, userColumnWidths, userRowHeights, aggregationSettings, pendingDataMap, frozenColumns, conditionalFormats, columnHeaderGroups), this.getDehydratedGridState(model, movedColumns, movedRows, isStuckToBottom, isStuckToRight), pluginState);\n if (panelState !== oldPanelState) {\n log.debug('Saving panel state', this, panelState);\n this.setState({\n panelState\n });\n onPanelStateUpdate === null || onPanelStateUpdate === void 0 ? void 0 : onPanelStateUpdate(panelState);\n }\n }, DEBOUNCE_PANEL_STATE_UPDATE));\n this.handleAdvancedSettingsChange = this.handleAdvancedSettingsChange.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handleTableChanged = this.handleTableChanged.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleDataSelected = this.handleDataSelected.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleGridStateChange = this.handleGridStateChange.bind(this);\n this.handlePluginStateChange = this.handlePluginStateChange.bind(this);\n this.handlePartitionAppend = this.handlePartitionAppend.bind(this);\n this.handleCreateChart = this.handleCreateChart.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handlePluginFilter = this.handlePluginFilter.bind(this);\n this.handlePluginFetchColumns = this.handlePluginFetchColumns.bind(this);\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.irisGrid = /*#__PURE__*/React.createRef();\n this.pluginRef = /*#__PURE__*/React.createRef();\n var {\n panelState: _panelState\n } = props;\n this.pluginState = null;\n this.irisGridUtils = null;\n this.state = {\n error: null,\n isDisconnected: false,\n isLoaded: false,\n isLoading: true,\n isModelReady: false,\n model: undefined,\n // State is hydrated from panel state when table is loaded\n advancedFilters: new Map(),\n aggregationSettings: {\n aggregations: [],\n showOnTop: false\n },\n advancedSettings: new Map(AdvancedSettings.DEFAULTS),\n customColumns: [],\n customColumnFormatMap: new Map(),\n isFilterBarShown: false,\n quickFilters: new Map(),\n sorts: [],\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n movedColumns: [],\n movedRows: [],\n isSelectingPartition: false,\n partition: null,\n partitionColumn: null,\n rollupConfig: undefined,\n showSearchBar: false,\n searchValue: '',\n selectedSearchColumns: undefined,\n invertSearchColumns: true,\n Plugin: undefined,\n pluginFilters: [],\n pluginFetchColumns: [],\n modelQueue: [],\n pendingDataMap: new Map(),\n frozenColumns: undefined,\n // eslint-disable-next-line react/no-unused-state\n panelState: _panelState,\n // Dehydrated panel state that can load this panel\n irisGridStateOverrides: {},\n gridStateOverrides: {},\n isStuckToBottom: false,\n isStuckToRight: false,\n conditionalFormats: [],\n selectDistinctColumns: []\n };\n }\n componentDidMount() {\n this.initModel();\n }\n componentDidUpdate(_, prevState) {\n var {\n model\n } = this.state;\n if (model !== prevState.model) {\n if (prevState.model != null) {\n this.stopModelListening(prevState.model);\n prevState.model.close();\n }\n if (model != null) {\n this.startModelListening(model);\n }\n }\n }\n componentWillUnmount() {\n this.savePanelState.cancel();\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n this.modelPromise = undefined;\n }\n var {\n model\n } = this.state;\n if (model) {\n this.stopModelListening(model);\n model.close();\n }\n }\n getTableName() {\n var {\n metadata\n } = this.props;\n return getTableNameFromMetadata(metadata);\n }\n initModel() {\n this.setState({\n isModelReady: false,\n isLoading: true,\n error: null\n });\n var {\n makeModel\n } = this.props;\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n this.modelPromise = PromiseUtils.makeCancelable(makeModel(), resolved => resolved.close());\n this.modelPromise.then(this.handleLoadSuccess).catch(this.handleLoadError);\n }\n handleLoadSuccess(modelParam) {\n var model = modelParam;\n var {\n panelState,\n irisGridStateOverrides\n } = this.state;\n var modelQueue = [];\n this.irisGridUtils = new IrisGridUtils(model.dh);\n if (panelState != null) {\n var {\n irisGridState: _irisGridState\n } = panelState;\n var {\n aggregationSettings,\n customColumns,\n selectDistinctColumns = [],\n rollupConfig\n } = _objectSpread(_objectSpread({}, _irisGridState), irisGridStateOverrides);\n if (customColumns.length > 0) {\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.customColumns = customColumns;\n });\n }\n if (rollupConfig != null && rollupConfig.columns.length > 0) {\n // originalColumns might change by the time this model queue item is applied.\n // Instead of pushing a static object, push the function\n // that calculates the config based on the updated model state.\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.rollupConfig = IrisGridUtils.getModelRollupConfig(m.originalColumns, rollupConfig, aggregationSettings);\n });\n }\n if (selectDistinctColumns.length > 0) {\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.selectDistinctColumns = selectDistinctColumns;\n });\n }\n }\n this.setState({\n model,\n modelQueue\n });\n this.initModelQueue(model, modelQueue);\n }\n initModelQueue(modelParam, modelQueue) {\n var model = modelParam;\n if (modelQueue.length === 0) {\n this.modelInitialized(model);\n return;\n }\n var modelChange = modelQueue.shift();\n log.debug('initModelQueue', modelChange);\n // Apply next model change. Triggers columnschanged event.\n if (modelChange) {\n modelChange(model);\n }\n this.setState({\n modelQueue\n });\n }\n handleAdvancedSettingsChange(key, value) {\n log.debug('handleAdvancedSettingsChange', key, value);\n this.setState(_ref2 => {\n var {\n advancedSettings\n } = _ref2;\n return advancedSettings.get(key) === value ? null : {\n advancedSettings: new Map(advancedSettings).set(key, value)\n };\n });\n }\n handlePluginFilter(filters) {\n var _this$irisGridUtils$g, _this$irisGridUtils;\n var {\n model\n } = this.state;\n assertNotNull(model);\n var {\n columns,\n formatter\n } = model;\n var pluginFilters = (_this$irisGridUtils$g = (_this$irisGridUtils = this.irisGridUtils) === null || _this$irisGridUtils === void 0 ? void 0 : _this$irisGridUtils.getFiltersFromInputFilters(columns, filters, formatter.timeZone)) !== null && _this$irisGridUtils$g !== void 0 ? _this$irisGridUtils$g : [];\n this.setState({\n pluginFilters\n });\n }\n handlePluginFetchColumns(pluginFetchColumns) {\n this.setState({\n pluginFetchColumns\n });\n }\n handleContextMenu(data) {\n var _this$pluginRef$curre, _this$pluginRef$curre2, _this$pluginRef$curre3;\n return (_this$pluginRef$curre = (_this$pluginRef$curre2 = this.pluginRef.current) === null || _this$pluginRef$curre2 === void 0 ? void 0 : (_this$pluginRef$curre3 = _this$pluginRef$curre2.getMenu) === null || _this$pluginRef$curre3 === void 0 ? void 0 : _this$pluginRef$curre3.call(_this$pluginRef$curre2, data)) !== null && _this$pluginRef$curre !== void 0 ? _this$pluginRef$curre : [];\n }\n isColumnSelectionValid(tableColumn) {\n var {\n columnSelectionValidator\n } = this.props;\n if (columnSelectionValidator && tableColumn) {\n return columnSelectionValidator(this, tableColumn);\n }\n return false;\n }\n handleGridStateChange(irisGridState, gridState) {\n this.irisGridState = irisGridState;\n this.gridState = gridState;\n\n // Grid sends it's first state change after it's finished loading\n this.setState({\n isLoaded: true,\n isLoading: false\n });\n this.savePanelState();\n var {\n glEventHub,\n onStateChange\n } = this.props;\n glEventHub.emit(IrisGridEvent.STATE_CHANGED, this);\n onStateChange === null || onStateChange === void 0 ? void 0 : onStateChange(irisGridState, gridState);\n }\n handlePluginStateChange(pluginState) {\n var {\n irisGridState,\n gridState\n } = this;\n this.pluginState = pluginState;\n // Do not save if there is null state\n // The save will happen when the grid loads\n if (irisGridState !== null && gridState !== null) {\n this.savePanelState();\n }\n }\n handleColumnsChanged(event) {\n var {\n isModelReady,\n model,\n modelQueue\n } = this.state;\n if (isModelReady) {\n this.sendColumnsChange(event.detail);\n } else {\n assertNotNull(model);\n this.initModelQueue(model, modelQueue);\n }\n }\n handleTableChanged(event) {\n log.debug('handleTableChanged', event);\n var {\n glEventHub\n } = this.props;\n var {\n detail: table\n } = event;\n glEventHub.emit(InputFilterEvent.TABLE_CHANGED, this, table);\n }\n handlePartitionAppend(column, value) {\n var {\n glEventHub\n } = this.props;\n var {\n name\n } = column;\n var tableName = this.getTableName();\n var command = \"\".concat(tableName, \" = \").concat(tableName, \".where(\\\"\").concat(name, \"=`\").concat(value, \"`\\\")\");\n glEventHub.emit(ConsoleEvent.SEND_COMMAND, command, false, true);\n }\n\n /**\n * Create a chart with the specified settings\n * @param settings The settings from the chart builder\n * @param settings.type The settings from the chart builder\n * @param settings.series The names of the series\n * @param model The IrisGridModel object\n */\n handleCreateChart(settings, model) {\n // Panel state is stored with the created chart, so flush it first\n this.savePanelState.flush();\n this.setState(() => null, () => {\n var {\n glEventHub,\n inputFilters\n } = this.props;\n var table = this.getTableName();\n var {\n panelState\n } = this.state;\n var sourcePanelId = LayoutUtils.getIdFromPanel(this);\n var tableSettings;\n if (panelState) {\n tableSettings = IrisGridUtils.extractTableSettings(panelState, inputFilters);\n }\n glEventHub.emit(IrisGridEvent.CREATE_CHART, {\n metadata: {\n settings,\n sourcePanelId,\n table,\n tableSettings\n },\n table: isIrisGridTableModelTemplate(model) ? model.table : undefined\n });\n });\n }\n handleColumnSelected(column) {\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(IrisGridEvent.COLUMN_SELECTED, this, column);\n }\n handleDataSelected(row, dataMap) {\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(IrisGridEvent.DATA_SELECTED, this, dataMap);\n }\n handleResize() {\n this.updateGrid();\n }\n handleShow() {\n this.updateGrid();\n }\n handleTabClicked() {\n if (this.irisGrid.current) {\n this.irisGrid.current.focus();\n }\n }\n handleError(error) {\n log.error(error);\n this.setState({\n error,\n isLoading: false\n });\n }\n handleDisconnect() {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false\n });\n }\n handleReconnect() {\n this.setState({\n isDisconnected: false,\n error: null\n });\n }\n handleLoadError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n this.handleError(error);\n }\n modelInitialized(model) {\n var {\n glEventHub,\n loadPlugin\n } = this.props;\n this.modelPromise = undefined;\n\n // Custom columns at this point already initialized, can load state\n this.loadPanelState(model);\n this.setState({\n isModelReady: true\n });\n if (isIrisGridTableModelTemplate(model)) {\n var {\n table\n } = model;\n var {\n pluginName: _pluginName\n } = table;\n if (_pluginName !== '') {\n if (loadPlugin != null && _pluginName != null) {\n var Plugin = loadPlugin(_pluginName);\n this.setState({\n Plugin\n });\n }\n }\n glEventHub.emit(InputFilterEvent.TABLE_CHANGED, this, table);\n }\n this.sendColumnsChange(model.columns);\n }\n handleClearAllFilters() {\n var irisGrid = this.irisGrid.current;\n var {\n isDisconnected\n } = this.state;\n if (irisGrid != null && !isDisconnected) {\n irisGrid.clearAllFilters();\n }\n }\n sendColumnsChange(columns) {\n log.debug2('sendColumnsChange', columns);\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(InputFilterEvent.COLUMNS_CHANGED, this, columns);\n }\n startModelListening(model) {\n model.addEventListener(IrisGridModel.EVENT.DISCONNECT, this.handleDisconnect);\n model.addEventListener(IrisGridModel.EVENT.RECONNECT, this.handleReconnect);\n model.addEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleColumnsChanged);\n model.addEventListener(IrisGridModel.EVENT.TABLE_CHANGED, this.handleTableChanged);\n }\n stopModelListening(model) {\n model.removeEventListener(IrisGridModel.EVENT.DISCONNECT, this.handleDisconnect);\n model.removeEventListener(IrisGridModel.EVENT.RECONNECT, this.handleReconnect);\n model.removeEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleColumnsChanged);\n model.removeEventListener(IrisGridModel.EVENT.TABLE_CHANGED, this.handleTableChanged);\n }\n getCoordinateForColumn(columnName) {\n var _gridWrapper$getBound, _allColumnXs$get, _allColumnWidths$get;\n var {\n model\n } = this.state;\n if (!model) {\n return null;\n }\n var irisGrid = this.irisGrid.current;\n var {\n gridWrapper\n } = irisGrid || {};\n var rect = (_gridWrapper$getBound = gridWrapper === null || gridWrapper === void 0 ? void 0 : gridWrapper.getBoundingClientRect()) !== null && _gridWrapper$getBound !== void 0 ? _gridWrapper$getBound : null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n assertNotNull(irisGrid);\n var {\n metrics\n } = irisGrid.state;\n assertNotNull(metrics);\n var {\n columnHeaderHeight,\n allColumnXs,\n allColumnWidths,\n right,\n columnHeaderMaxDepth\n } = metrics;\n var columnIndex = model.getColumnIndexByName(columnName);\n assertNotNull(columnIndex);\n var visibleIndex = irisGrid.getVisibleColumn(columnIndex);\n var columnX = (_allColumnXs$get = allColumnXs.get(visibleIndex)) !== null && _allColumnXs$get !== void 0 ? _allColumnXs$get : 0;\n var columnWidth = (_allColumnWidths$get = allColumnWidths.get(visibleIndex)) !== null && _allColumnWidths$get !== void 0 ? _allColumnWidths$get : 0;\n var x = Math.max(rect.left, Math.min(visibleIndex > right ? rect.right : rect.left + columnX + columnWidth * 0.5, rect.right));\n var y = rect.top + columnHeaderHeight * columnHeaderMaxDepth;\n return [x, y];\n }\n setFilterMap(filterMap) {\n var irisGrid = this.irisGrid.current;\n if (irisGrid != null) {\n irisGrid.setFilterMap(filterMap);\n }\n }\n setAdvancedFilterMap(filterMap) {\n var irisGrid = this.irisGrid.current;\n if (irisGrid != null) {\n irisGrid.setAdvancedFilterMap(filterMap);\n }\n }\n setFilters(_ref3) {\n var {\n quickFilters,\n advancedFilters\n } = _ref3;\n log.debug('setFilters', quickFilters, advancedFilters);\n var {\n model,\n isDisconnected\n } = this.state;\n var irisGrid = this.irisGrid.current;\n if (irisGrid == null || isDisconnected) {\n log.debug('Ignore setFilters, model disconnected');\n return;\n }\n assertNotNull(model);\n var {\n columns,\n formatter\n } = model;\n var indexedQuickFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(model.columns, quickFilters).filter(_ref4 => {\n var [columnIndex] = _ref4;\n return model.isFilterable(columnIndex);\n });\n var indexedAdvancedFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(model.columns, advancedFilters).filter(_ref5 => {\n var [columnIndex] = _ref5;\n return model.isFilterable(columnIndex);\n });\n assertNotNull(this.irisGridUtils);\n irisGrid.clearAllFilters();\n irisGrid.setFilters({\n quickFilters: this.irisGridUtils.hydrateQuickFilters(columns, indexedQuickFilters, formatter.timeZone),\n advancedFilters: this.irisGridUtils.hydrateAdvancedFilters(columns, indexedAdvancedFilters, formatter.timeZone)\n });\n }\n setStateOverrides(overrides) {\n log.debug('setStateOverrides', overrides);\n var {\n irisGridState: irisGridStateOverrides,\n gridState: gridStateOverrides\n } = overrides;\n this.setState({\n irisGridStateOverrides,\n gridStateOverrides\n }, () => {\n this.initModel();\n });\n }\n\n // eslint-disable-next-line class-methods-use-this\n unsetFilterValue() {\n // IrisGridPanel retains the set value after the link is broken\n }\n loadPanelState(model) {\n var {\n panelState,\n irisGridStateOverrides: originalIrisGridStateOverrides,\n gridStateOverrides\n } = this.state;\n if (panelState == null) {\n return;\n }\n try {\n var {\n gridState: _gridState,\n irisGridState: _irisGridState2,\n irisGridPanelState\n } = panelState;\n var irisGridStateOverrides = _objectSpread({}, originalIrisGridStateOverrides);\n var {\n quickFilters: savedQuickFilters,\n advancedFilters: savedAdvancedFilters\n } = irisGridStateOverrides;\n if (savedQuickFilters) {\n irisGridStateOverrides.quickFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(model.columns, savedQuickFilters);\n }\n if (savedAdvancedFilters) {\n irisGridStateOverrides.advancedFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(model.columns, savedAdvancedFilters);\n }\n var {\n isSelectingPartition,\n partition,\n partitionColumn,\n advancedSettings\n } = IrisGridUtils.hydrateIrisGridPanelState(model, irisGridPanelState);\n assertNotNull(this.irisGridUtils);\n var {\n advancedFilters,\n customColumns,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n reverseType,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n columnHeaderGroups\n } = this.irisGridUtils.hydrateIrisGridState(model, _objectSpread(_objectSpread({}, _irisGridState2), irisGridStateOverrides));\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = IrisGridUtils.hydrateGridState(model, _objectSpread(_objectSpread({}, _gridState), gridStateOverrides), _irisGridState2.customColumns);\n this.setState({\n advancedFilters,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n isFilterBarShown,\n isSelectingPartition,\n movedColumns,\n movedRows,\n partition,\n partitionColumn,\n quickFilters,\n reverseType,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n isStuckToBottom,\n isStuckToRight,\n columnHeaderGroups\n });\n } catch (error) {\n log.error('loadPanelState failed to load panelState', panelState, error);\n }\n }\n updateGrid() {\n var _this$irisGrid$curren, _this$irisGrid$curren2;\n var grid = (_this$irisGrid$curren = (_this$irisGrid$curren2 = this.irisGrid.current) === null || _this$irisGrid$curren2 === void 0 ? void 0 : _this$irisGrid$curren2.grid) !== null && _this$irisGrid$curren !== void 0 ? _this$irisGrid$curren : null;\n if (!grid) return;\n\n // handle resize will verify state and draw and update\n grid.handleResize();\n }\n render() {\n var _model$description, _panelState$pluginSta;\n var {\n children,\n glContainer,\n glEventHub,\n columnSelectionValidator,\n getDownloadWorker,\n inputFilters,\n links,\n metadata,\n panelState,\n user,\n workspace,\n settings,\n theme\n } = this.props;\n var {\n advancedFilters,\n aggregationSettings,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n error,\n isDisconnected,\n isFilterBarShown,\n isSelectingPartition,\n isStuckToBottom,\n isStuckToRight,\n isLoaded,\n isLoading,\n isModelReady,\n model,\n movedColumns,\n movedRows,\n partition,\n partitionColumn,\n quickFilters,\n reverseType,\n rollupConfig,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n Plugin,\n pluginFilters,\n pluginFetchColumns,\n pendingDataMap,\n frozenColumns,\n columnHeaderGroups\n } = this.state;\n var errorMessage = error != null ? \"Unable to open table. \".concat(error) : undefined;\n var name = getTableNameFromMetadata(metadata);\n var description = (_model$description = model === null || model === void 0 ? void 0 : model.description) !== null && _model$description !== void 0 ? _model$description : undefined;\n var pluginState = (_panelState$pluginSta = panelState === null || panelState === void 0 ? void 0 : panelState.pluginState) !== null && _panelState$pluginSta !== void 0 ? _panelState$pluginSta : null;\n var childrenContent = children !== null && children !== void 0 ? children : this.getPluginContent(Plugin, model, user, workspace, pluginState);\n var {\n permissions\n } = user;\n var {\n canCopy,\n canDownloadCsv\n } = permissions;\n return /*#__PURE__*/_jsx(WidgetPanel, {\n errorMessage: errorMessage,\n isDisconnected: isDisconnected,\n isLoading: isLoading,\n isLoaded: isLoaded,\n className: \"iris-grid-panel\",\n glContainer: glContainer,\n glEventHub: glEventHub,\n onClearAllFilters: this.handleClearAllFilters,\n onResize: this.handleResize,\n onShow: this.handleShow,\n onTabFocus: this.handleShow,\n onTabClicked: this.handleTabClicked,\n widgetName: name,\n widgetType: \"Table\",\n description: description,\n componentPanel: this,\n renderTabTooltip: () => /*#__PURE__*/_jsx(IrisGridPanelTooltip, {\n model: model,\n widgetName: name,\n glContainer: glContainer,\n description: description\n }),\n children: isModelReady && model && /*#__PURE__*/_jsx(IrisGrid, {\n advancedFilters: advancedFilters,\n aggregationSettings: aggregationSettings,\n advancedSettings: advancedSettings,\n alwaysFetchColumns: this.getAlwaysFetchColumns(links, pluginFetchColumns),\n columnAllowedCursor: \"linker\",\n columnNotAllowedCursor: \"linker-not-allowed\",\n customColumns: customColumns,\n customColumnFormatMap: customColumnFormatMap,\n columnSelectionValidator: this.isColumnSelectionValid,\n conditionalFormats: conditionalFormats,\n inputFilters: this.getGridInputFilters(model.columns, inputFilters),\n applyInputFiltersOnInit: panelState == null,\n isFilterBarShown: isFilterBarShown,\n isSelectingColumn: columnSelectionValidator != null,\n isSelectingPartition: isSelectingPartition,\n isStuckToBottom: isStuckToBottom,\n isStuckToRight: isStuckToRight,\n movedColumns: movedColumns,\n movedRows: movedRows,\n partition: partition,\n partitionColumn: partitionColumn,\n quickFilters: quickFilters,\n reverseType: reverseType,\n rollupConfig: rollupConfig,\n settings: settings,\n sorts: sorts,\n userColumnWidths: userColumnWidths,\n userRowHeights: userRowHeights,\n model: model,\n showSearchBar: showSearchBar,\n searchValue: searchValue,\n selectedSearchColumns: selectedSearchColumns,\n selectDistinctColumns: selectDistinctColumns,\n invertSearchColumns: invertSearchColumns,\n onColumnSelected: this.handleColumnSelected,\n onCreateChart: this.handleCreateChart,\n onDataSelected: this.handleDataSelected,\n onError: this.handleError,\n onPartitionAppend: this.handlePartitionAppend,\n onStateChange: this.handleGridStateChange,\n onContextMenu: this.handleContextMenu,\n onAdvancedSettingsChange: this.handleAdvancedSettingsChange,\n customFilters: pluginFilters,\n pendingDataMap: pendingDataMap,\n canCopy: canCopy,\n canDownloadCsv: canDownloadCsv,\n ref: this.irisGrid,\n getDownloadWorker: getDownloadWorker,\n frozenColumns: frozenColumns,\n theme: theme,\n columnHeaderGroups: columnHeaderGroups,\n children: childrenContent\n })\n });\n }\n}\n_defineProperty(IrisGridPanel, \"defaultProps\", {\n onStateChange: () => undefined,\n onPanelStateUpdate: () => undefined\n});\n_defineProperty(IrisGridPanel, \"displayName\", 'IrisGridPanel');\n_defineProperty(IrisGridPanel, \"COMPONENT\", 'IrisGridPanel');\nvar mapStateToProps = (state, _ref6) => {\n var {\n localDashboardId = DEFAULT_DASHBOARD_ID\n } = _ref6;\n return {\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(state, localDashboardId),\n user: getUser(state),\n workspace: getWorkspace(state),\n settings: getSettings(state)\n };\n};\nvar ConnectedIrisGridPanel = connect(mapStateToProps, null, null, {\n forwardRef: true\n})(IrisGridPanel);\nexport default ConnectedIrisGridPanel;\n//# sourceMappingURL=IrisGridPanel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convience method, not an actual a11y issue\n\nimport React, { Component } from 'react';\nimport { Button, CardFlip } from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGear } from '@deephaven/icons';\nimport memoizee from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport \"./InputFilter.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('InputFilter');\nvar UPDATE_DEBOUNCE = 150;\nclass InputFilter extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"inputRef\", void 0);\n _defineProperty(this, \"getItemLabel\", memoizee((columns, index) => {\n var {\n name,\n type\n } = columns[index];\n if (index > 0 && columns[index - 1].name === name || index < columns.length - 1 && columns[index + 1].name === name) {\n var shortType = type.substring(type.lastIndexOf('.') + 1);\n return \"\".concat(name, \" (\").concat(shortType, \")\");\n }\n return name;\n }));\n _defineProperty(this, \"sendUpdate\", debounce(() => {\n var {\n onChange\n } = this.props;\n var {\n column,\n value,\n isValueShown\n } = this.state;\n onChange({\n column,\n isValueShown,\n value\n });\n }, UPDATE_DEBOUNCE));\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleInputKeyPress = this.handleInputKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.inputRef = /*#__PURE__*/React.createRef();\n var {\n column: _column,\n isValueShown: _isValueShown,\n value: _value\n } = props;\n this.state = {\n column: _column,\n selectedColumn: _column,\n value: _value,\n isValueShown: _isValueShown\n };\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n column: propColumn\n } = this.props;\n var {\n column,\n value,\n isValueShown\n } = this.state;\n if (propColumn !== prevProps.column) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({\n column: propColumn,\n selectedColumn: propColumn\n });\n }\n if (isValueShown !== undefined && isValueShown && isValueShown !== prevState.isValueShown) {\n this.focusInput();\n }\n if (column !== prevState.column || value !== prevState.value || isValueShown !== prevState.isValueShown) {\n this.sendUpdate();\n }\n }\n componentWillUnmount() {\n this.sendUpdate.flush();\n }\n handleColumnChange(event) {\n var {\n columns\n } = this.props;\n var {\n value\n } = event.target;\n var selectedColumn = columns[parseInt(value, 10)];\n log.debug2('handleColumnChange', selectedColumn);\n this.setState({\n selectedColumn,\n value: undefined\n });\n }\n handleInputKeyPress(event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n this.setState(_ref => {\n var {\n value\n } = _ref;\n return value == null ? {\n value: ''\n } : null;\n }, () => {\n this.sendUpdate();\n this.sendUpdate.flush();\n });\n }\n }\n handleValueChange(event) {\n var {\n value\n } = event.target;\n log.debug2('handleValueChange', value);\n this.setState({\n value\n });\n }\n handleSettingsCancel() {\n var {\n column\n } = this.state;\n this.setState({\n selectedColumn: column,\n isValueShown: true\n });\n }\n handleSettingsSave() {\n var {\n selectedColumn\n } = this.state;\n this.setState({\n column: selectedColumn,\n isValueShown: true\n });\n }\n handleSettingsClick(event) {\n var {\n column\n } = this.state;\n this.setState({\n selectedColumn: column,\n isValueShown: false\n });\n event.stopPropagation();\n }\n handleBackgroundClick(event) {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.inputRef.current) {\n this.focusInput();\n }\n }\n focusInput() {\n if (this.inputRef.current !== null) {\n this.inputRef.current.select();\n this.inputRef.current.focus();\n }\n }\n clearFilter() {\n this.setState({\n value: ''\n });\n }\n setFilterState(_ref2) {\n var {\n name,\n type,\n value,\n isValueShown\n } = _ref2;\n var column = name != null && type != null ? {\n name,\n type\n } : undefined;\n var update = isValueShown === undefined ? {\n column,\n value\n } : {\n column,\n value,\n isValueShown\n };\n this.setState(update);\n }\n render() {\n var {\n columns\n } = this.props;\n var {\n column,\n isValueShown,\n selectedColumn,\n value\n } = this.state;\n var inputLength = value == null || value.length === 0 ? InputFilter.PLACEHOLDER.length : value.length;\n var titleLabel = null;\n if (column != null) {\n var columnIndex = columns.findIndex(item => item.name === column.name && item.type === column.type);\n titleLabel = columnIndex >= 0 ? this.getItemLabel(columns, columnIndex) : column.name;\n }\n return /*#__PURE__*/_jsxs(CardFlip, {\n className: \"input-filter fill-parent-absolute\",\n isFlipped: isValueShown !== null && isValueShown !== void 0 ? isValueShown : false,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"input-filter-settings-card\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"input-filter-settings-content\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"input-filter-settings-grid\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n children: \"Filter Column\"\n }), /*#__PURE__*/_jsxs(\"select\", {\n value: columns.findIndex(item => item.name === (selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.name) && item.type === (selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.type)),\n className: \"custom-select\",\n onChange: this.handleColumnChange,\n children: [columns.map((columnItem, index) => /*#__PURE__*/_jsx(\"option\", {\n value: index,\n children: this.getItemLabel(columns, index)\n }, \"\".concat(columnItem.name, \"/\").concat(columnItem.type))), columns.length === 0 && /*#__PURE__*/_jsx(\"option\", {\n value: \"-1\",\n disabled: true,\n children: \"No Available Columns\"\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"text-muted small\",\n children: \"Input filter control will apply its filter to all columns matching this name in this dashboard.\"\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"input-filter-settings-buttons\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: this.handleSettingsCancel,\n disabled: column == null,\n children: \"Cancel\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n className: \"ml-2\",\n onClick: this.handleSettingsSave,\n disabled: selectedColumn == null,\n children: \"Save\"\n })]\n })]\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"input-filter-value-card\",\n onClick: this.handleBackgroundClick,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"input-filter-column\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"input-filter-column-title\",\n children: [titleLabel, \" Filter\"]\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"d-flex justify-content-center align-items-center h-100 w-100\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"input-filter-value-input d-flex flex-column justify-content-center\",\n children: /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n ref: this.inputRef,\n placeholder: InputFilter.PLACEHOLDER,\n value: value !== null && value !== void 0 ? value : '',\n onChange: this.handleValueChange,\n onKeyPress: this.handleInputKeyPress,\n style: {\n width: \"\".concat(inputLength + 3, \"ch\")\n },\n spellCheck: \"false\"\n })\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"input-filter-menu\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"m-2 px-2\",\n onClick: this.handleSettingsClick,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsGear,\n transform: \"grow-4\"\n }),\n tooltip: \"Input Filter Settings\"\n })\n })]\n })]\n });\n }\n}\n_defineProperty(InputFilter, \"PLACEHOLDER\", 'Enter value...');\n_defineProperty(InputFilter, \"defaultProps\", {\n column: null,\n isValueShown: false,\n value: null\n});\nexport default InputFilter;\n//# sourceMappingURL=InputFilter.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport Panel from \"./Panel.js\";\nimport InputFilter from \"../controls/input-filter/InputFilter.js\";\nimport { InputFilterEvent } from \"../events/index.js\";\nimport { getColumnsForDashboard } from \"../redux/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar INPUT_FILTER_DEBOUNCE = 250;\nclass InputFilterPanel extends Component {\n // Have to explicitly specify displayName\n // otherwise it gets minified and breaks LayoutUtils.getComponentName\n constructor(props) {\n super(props);\n _defineProperty(this, \"inputFilterRef\", void 0);\n this.handleChange = debounce(this.handleChange.bind(this), INPUT_FILTER_DEBOUNCE);\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.inputFilterRef = /*#__PURE__*/React.createRef();\n var {\n panelState\n } = props;\n // if panelstate is null, use destructured defaults\n var {\n value,\n isValueShown = false,\n name,\n type,\n timestamp\n } = panelState !== null && panelState !== void 0 ? panelState : {};\n this.state = {\n columns: [],\n column: name != null && type != null ? {\n name,\n type\n } : undefined,\n value,\n timestamp,\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n // eslint-disable-next-line react/no-unused-state\n panelState // Dehydrated panel state that can load this panel\n };\n }\n\n componentDidMount() {\n this.updateColumns();\n var {\n column,\n value,\n timestamp\n } = this.state;\n if (column != null) {\n var {\n name,\n type\n } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n componentDidUpdate(prevProps) {\n var {\n columns\n } = this.props;\n if (columns !== prevProps.columns) {\n this.updateColumns();\n }\n }\n handleChange(_ref) {\n var {\n column,\n isValueShown = false,\n value\n } = _ref;\n var name;\n var type;\n if (column != null) {\n ({\n name,\n type\n } = column);\n }\n var sendUpdate = true;\n var timestamp = Date.now();\n this.setState(_ref2 => {\n var _ref3;\n var {\n panelState,\n timestamp: prevTimestamp,\n wasFlipped,\n skipUpdate\n } = _ref2;\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n var isFlip = panelState != null && isValueShown !== panelState.isValueShown && name === panelState.name && type === panelState.type && value === panelState.value;\n sendUpdate = (_ref3 = !skipUpdate && isValueShown && (!isFlip || !wasFlipped)) !== null && _ref3 !== void 0 ? _ref3 : false;\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false\n };\n }, () => {\n if (sendUpdate) {\n this.sendUpdate(name, type, value, timestamp);\n }\n });\n }\n handleClearAllFilters() {\n var _this$inputFilterRef$;\n (_this$inputFilterRef$ = this.inputFilterRef.current) === null || _this$inputFilterRef$ === void 0 ? void 0 : _this$inputFilterRef$.clearFilter();\n }\n sendUpdate(name, type, value, timestamp) {\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value,\n timestamp\n });\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param state Filter state to set\n * @param sendUpdate Emit filters changed event if true\n */\n setPanelState(state) {\n var _this$inputFilterRef$2;\n var sendUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({\n skipUpdate: !sendUpdate\n });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n (_this$inputFilterRef$2 = this.inputFilterRef.current) === null || _this$inputFilterRef$2 === void 0 ? void 0 : _this$inputFilterRef$2.setFilterState(state);\n }\n updateColumns() {\n var {\n columns\n } = this.props;\n if (columns == null) {\n return;\n }\n this.setState(state => {\n var {\n column\n } = state;\n if (column == null && columns.length > 0) {\n return {\n columns: [...columns],\n column: columns[0]\n };\n }\n if (column != null && !columns.find(_ref4 => {\n var {\n name,\n type\n } = _ref4;\n return column.name === name && column.type === type;\n })) {\n return {\n columns: [...columns, column]\n };\n }\n return {\n columns: [...columns]\n };\n });\n }\n render() {\n var {\n glContainer,\n glEventHub\n } = this.props;\n var {\n column,\n columns,\n isValueShown,\n value\n } = this.state;\n return /*#__PURE__*/_jsx(Panel, {\n className: \"iris-input-filter-panel\",\n componentPanel: this,\n glContainer: glContainer,\n glEventHub: glEventHub,\n onClearAllFilters: this.handleClearAllFilters,\n isClonable: true,\n isRenamable: true,\n children: /*#__PURE__*/_jsx(InputFilter, {\n ref: this.inputFilterRef,\n column: column,\n columns: columns,\n onChange: this.handleChange,\n isValueShown: isValueShown,\n value: value\n })\n });\n }\n}\n_defineProperty(InputFilterPanel, \"defaultProps\", {\n panelState: null\n});\n_defineProperty(InputFilterPanel, \"COMPONENT\", 'InputFilterPanel');\n_defineProperty(InputFilterPanel, \"displayName\", 'InputFilterPanel');\nvar mapStateToProps = (state, ownProps) => {\n var {\n localDashboardId\n } = ownProps;\n return {\n columns: getColumnsForDashboard(state, localDashboardId)\n };\n};\nvar ConnectedInputFilterPanel = connect(mapStateToProps, null, null, {\n forwardRef: true\n})(InputFilterPanel);\nexport default ConnectedInputFilterPanel;\n//# sourceMappingURL=InputFilterPanel.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { getOpenedPanelMapForDashboard, LayoutUtils } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { getFilterSetsForDashboard, getInputFiltersForDashboard, getTableMapForDashboard, setDashboardFilterSets as setDashboardFilterSetsAction } from \"../redux/index.js\";\nimport Panel from \"./Panel.js\";\nimport FilterSetManager from \"./FilterSetManager.js\";\nimport { IrisGridPanel } from \"./IrisGridPanel.js\";\nimport DropdownFilterPanel from \"./DropdownFilterPanel.js\";\nimport InputFilterPanel from \"./InputFilterPanel.js\";\nimport \"./FilterSetManagerPanel.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('FilterSetManagerPanel');\nfunction hasSetPanelState(panel) {\n return panel.setPanelState != null;\n}\nexport class FilterSetManagerPanel extends Component {\n static changeFilterIndexesToColumnNames(table, configs) {\n return configs.map(_ref => {\n var [index, filter] = _ref;\n if (index >= table.columns.length) {\n return null;\n }\n var {\n name\n } = table.columns[index];\n return {\n name,\n filter\n };\n }).filter(config => config != null);\n }\n constructor(props) {\n super(props);\n this.handleChange = this.handleChange.bind(this);\n this.handleFilterApply = this.handleFilterApply.bind(this);\n this.handleSetsUpdate = this.handleSetsUpdate.bind(this);\n this.handleGetFilterState = this.handleGetFilterState.bind(this);\n var {\n panelState,\n filterSets\n } = props;\n var {\n selectedId = filterSets.length > 0 ? filterSets[0].id : undefined,\n isValueShown = false\n } = panelState !== null && panelState !== void 0 ? panelState : {};\n this.state = {\n selectedId,\n isValueShown,\n // eslint-disable-next-line react/no-unused-state\n panelState // Dehydrated panel state that can load this panel\n };\n }\n\n // Collect all filter values for each dashboard panel\n getFilterState() {\n var {\n dashboardOpenedPanelMap\n } = this.props;\n var panels = [];\n [...dashboardOpenedPanelMap.keys()].forEach(key => {\n var panel = dashboardOpenedPanelMap.get(key);\n if (panel === undefined) {\n log.error('Could not get panel', panel);\n return;\n }\n var componentName = LayoutUtils.getComponentNameFromPanel(panel);\n var panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('Panel:', panel, componentName);\n var {\n glContainer = null\n } = panel.props;\n if (glContainer == null) {\n log.error('Could not get panel container', panel);\n return;\n }\n var config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n var panelState = LayoutUtils.getPanelComponentState(config);\n if (panelState == null) {\n log.debug(\"Panel state is null \".concat(panelId));\n return;\n }\n switch (componentName) {\n case LayoutUtils.getComponentName(IrisGridPanel):\n {\n var _state;\n if (panelId != null) {\n _state = this.getIrisGridPanelFilters(panelId, panelState);\n }\n if (_state != null) {\n panels.push({\n panelId,\n type: componentName,\n state: _state\n });\n }\n break;\n }\n case LayoutUtils.getComponentName(InputFilterPanel):\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n {\n var {\n isValueShown,\n name,\n type,\n value\n } = panelState;\n panels.push({\n panelId,\n type: componentName,\n state: {\n isValueShown,\n name,\n type,\n value\n }\n });\n break;\n }\n default:\n }\n });\n return panels;\n }\n getIrisGridPanelFilters(panelId, panelState) {\n var {\n panelTableMap\n } = this.props;\n var table = panelTableMap.get(panelId);\n if (table == null) {\n log.error(\"Unable to get table for panel \".concat(panelId, \".\"));\n return null;\n }\n // IrisGridUtils.hydrate uses numeric indexes for columns\n // Change indexes to column names to make it work for proxy models\n var {\n irisGridState = {\n advancedFilters: undefined,\n quickFilters: undefined\n },\n gridState = {}\n } = panelState;\n var {\n advancedFilters: indexedAdvancedFilters,\n quickFilters: indexedQuickFilters\n } = irisGridState;\n var advancedFilters;\n if (indexedAdvancedFilters) {\n advancedFilters = FilterSetManagerPanel.changeFilterIndexesToColumnNames(table, indexedAdvancedFilters);\n }\n var quickFilters;\n if (indexedQuickFilters) {\n quickFilters = FilterSetManagerPanel.changeFilterIndexesToColumnNames(table, indexedQuickFilters);\n }\n return {\n irisGridState: _objectSpread(_objectSpread({}, irisGridState), {}, {\n advancedFilters,\n quickFilters\n }),\n gridState: _objectSpread({}, gridState)\n };\n }\n handleGetFilterState() {\n return this.getFilterState();\n }\n handleChange(_ref2) {\n var {\n isValueShown,\n selectedId\n } = _ref2;\n log.debug('handleChange', isValueShown, selectedId);\n this.setState({\n isValueShown,\n selectedId\n });\n this.updatePanelState();\n }\n handleFilterApply(filterSet) {\n var {\n dashboardOpenedPanelMap\n } = this.props;\n var {\n panels,\n restoreFullState = false\n } = filterSet;\n log.debug(\"Apply filters from filter set\", filterSet);\n panels.forEach(_ref3 => {\n var {\n panelId,\n type,\n state\n } = _ref3;\n if (panelId == null) {\n log.debug('panel is null', panelId);\n return;\n }\n if (!dashboardOpenedPanelMap.has(panelId)) {\n log.debug('Ignore closed panel', panelId);\n return;\n }\n log.debug('Apply panel filters', panelId, type, state);\n var panel = dashboardOpenedPanelMap.get(panelId);\n switch (type) {\n case LayoutUtils.getComponentName(IrisGridPanel):\n this.restoreIrisGridFilters(panel, state, restoreFullState);\n break;\n case LayoutUtils.getComponentName(InputFilterPanel):\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n this.restoreInputFilterState(panel, state);\n break;\n default:\n }\n });\n }\n handleSetsUpdate(modifiedFilterSets) {\n var {\n setDashboardFilterSets,\n localDashboardId\n } = this.props;\n log.debug('Saving updated sets', modifiedFilterSets);\n // Filter sets are stored in dashboard data instead of the panelState\n // because they need to be shared between the filter view manager panels\n setDashboardFilterSets(localDashboardId, [...modifiedFilterSets]);\n }\n updatePanelState() {\n this.setState(_ref4 => {\n var {\n selectedId,\n isValueShown\n } = _ref4;\n return {\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n selectedId,\n isValueShown\n }\n };\n });\n }\n restoreIrisGridFilters(panel, state, restoreFullState) {\n // Fall back to state.advancedFilters and state.quickFilters\n // for backward compatibility with filter sets that only contain filters\n var {\n irisGridState = {},\n advancedFilters: prevAdvancedFilters = [],\n quickFilters: prevQuickFilters = []\n } = state;\n var {\n advancedFilters = prevAdvancedFilters,\n quickFilters = prevQuickFilters\n } = irisGridState;\n var {\n panelTableMap\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error(\"Panel Id is null.\");\n return;\n }\n var table = panelTableMap.get(panelId);\n if (table == null) {\n log.error(\"Unable to get table for panel \".concat(panelId, \".\"));\n return;\n }\n log.debug('restoreIrisGridFilters', panelId, state, restoreFullState);\n if (restoreFullState) {\n panel.setStateOverrides(state);\n } else {\n panel.setFilters({\n quickFilters: quickFilters,\n advancedFilters: advancedFilters\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n restoreInputFilterState(panel, state) {\n var inputFilterState = _objectSpread({}, state);\n // Restore state but don't flip the card\n delete inputFilterState.isValueShown;\n log.debug('restoreInputFilterState', panel, inputFilterState);\n if (panel && hasSetPanelState(panel)) {\n panel.setPanelState(inputFilterState);\n }\n }\n render() {\n var {\n glContainer,\n glEventHub,\n filterSets\n } = this.props;\n var {\n isValueShown,\n selectedId\n } = this.state;\n return /*#__PURE__*/_jsx(Panel, {\n className: \"filter-set-manager-panel\",\n componentPanel: this,\n glContainer: glContainer,\n glEventHub: glEventHub,\n isClonable: true,\n isRenamable: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"input-filter-container h-100 w-100 container\",\n children: /*#__PURE__*/_jsx(FilterSetManager, {\n onChange: this.handleChange,\n onApply: this.handleFilterApply,\n onUpdateSets: this.handleSetsUpdate,\n isValueShown: isValueShown,\n filterSets: filterSets,\n selectedId: selectedId,\n getFilterState: this.handleGetFilterState\n })\n })\n });\n }\n}\n_defineProperty(FilterSetManagerPanel, \"defaultProps\", {\n panelState: null\n});\n_defineProperty(FilterSetManagerPanel, \"COMPONENT\", 'FilterSetManagerPanel');\nvar mapStateToProps = (state, ownProps) => {\n var {\n localDashboardId\n } = ownProps;\n return {\n filterSets: getFilterSetsForDashboard(state, localDashboardId),\n dashboardOpenedPanelMap: getOpenedPanelMapForDashboard(state, localDashboardId),\n dashboardInputFilters: getInputFiltersForDashboard(state, localDashboardId),\n panelTableMap: getTableMapForDashboard(state, localDashboardId)\n };\n};\nvar ConnectedFilterSetManagerPanel = connect(mapStateToProps, {\n setDashboardFilterSets: setDashboardFilterSetsAction\n}, null, {\n forwardRef: true\n})(FilterSetManagerPanel);\nexport default ConnectedFilterSetManagerPanel;\n//# sourceMappingURL=FilterSetManagerPanel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsEdit } from '@deephaven/icons';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default class MarkdownContainer extends PureComponent {\n render() {\n var {\n isEditing,\n children,\n onDoubleClick\n } = this.props;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"markdown-editor-container h-100 w-100\",\n onDoubleClick: onDoubleClick,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: classNames('text-muted', 'edit-hint', {\n viewing: isEditing === undefined || !isEditing\n }),\n children: /*#__PURE__*/_jsxs(\"span\", {\n children: [\"double-click to edit \", /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsEdit\n })]\n })\n }), children]\n });\n }\n}\n_defineProperty(MarkdownContainer, \"defaultProps\", {\n isEditing: false\n});\n//# sourceMappingURL=MarkdownContainer.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTrash } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('MarkdownStartPage');\nclass MarkdownStartPage extends PureComponent {\n constructor(props) {\n super(props);\n this.handleDeleteButtonClick = this.handleDeleteButtonClick.bind(this);\n this.handleDeleteModalClose = this.handleDeleteModalClose.bind(this);\n this.state = {\n isDeleteModalShown: false\n };\n }\n handleDeleteButtonClick(markdown) {\n this.setState({\n isDeleteModalShown: true,\n toBeDeleted: markdown\n });\n }\n handleDeleteModalClose() {\n this.setState({\n isDeleteModalShown: false,\n toBeDeleted: undefined\n });\n }\n handleDeleteMarkdown(markdown) {\n log.debug('delete markdown: ', markdown);\n if (markdown !== undefined) {\n var {\n onDelete\n } = this.props;\n onDelete(markdown);\n }\n this.setState({\n isDeleteModalShown: false,\n toBeDeleted: undefined\n });\n }\n render() {\n var {\n closedMarkdowns,\n onOpen,\n onCreate\n } = this.props;\n var {\n isDeleteModalShown,\n toBeDeleted\n } = this.state;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"markdown-panel-start-page h-100 w-100\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"markdown-panel-start-page-container\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"markdown-panel-start-list\",\n children: [/*#__PURE__*/_jsx(\"h3\", {\n className: \"list-title\",\n children: \"Start\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"list-item\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"title\",\n onClick: onCreate,\n children: \"New Markdown Note\"\n })\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"markdown-panel-start-list\",\n children: [/*#__PURE__*/_jsx(\"h3\", {\n className: \"list-title\",\n children: \"Recently Closed from Dashboard\"\n }), closedMarkdowns.map(markdown => /*#__PURE__*/_jsxs(\"div\", {\n className: \"list-item\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"title\",\n onClick: () => onOpen(markdown),\n children: markdown.title\n }), /*#__PURE__*/_jsx(\"button\", {\n className: \"btn-link icon\",\n type: \"button\",\n onClick: () => {\n this.handleDeleteButtonClick(markdown);\n },\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsTrash\n })\n })]\n }, markdown.id)), /*#__PURE__*/_jsxs(Modal, {\n isOpen: isDeleteModalShown,\n toggle: this.handleDeleteModalClose,\n className: \"modal-dialog-centered markdown-delete-modal theme-bg-light\",\n children: [/*#__PURE__*/_jsx(ModalHeader, {\n children: \"Are you sure you want to permanently delete this note?\"\n }), /*#__PURE__*/_jsx(ModalBody, {\n children: \"You can't undo this action.\"\n }), /*#__PURE__*/_jsxs(ModalFooter, {\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: this.handleDeleteModalClose,\n children: \"Cancel\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"danger\",\n onClick: () => {\n this.handleDeleteMarkdown(toBeDeleted);\n },\n children: \"Delete\"\n })]\n })]\n })]\n })]\n })\n });\n }\n}\n_defineProperty(MarkdownStartPage, \"defaultProps\", {\n closedMarkdowns: [],\n onOpen: () => undefined,\n onCreate: () => undefined,\n onDelete: () => undefined\n});\nexport default MarkdownStartPage;\n//# sourceMappingURL=MarkdownStartPage.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport Markdown from 'react-markdown';\nimport { Code, Editor } from '@deephaven/console';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar renderMarkdown = props => {\n var {\n children,\n className\n } = props;\n var language = className !== undefined && className !== null && className !== void 0 && className.startsWith('language-') ? className.substring(9) : 'plaintext';\n return /*#__PURE__*/_jsx(\"pre\", {\n children: /*#__PURE__*/_jsx(\"code\", {\n children: /*#__PURE__*/_jsx(Code, {\n language: language,\n children: React.Children.map(children, child => typeof child === 'string' ? child.trim() : child)\n })\n })\n });\n};\nexport default class MarkdownEditor extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"container\", void 0);\n this.container = null;\n }\n render() {\n var {\n isEditing,\n content,\n onEditorInitialized\n } = this.props;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"markdown-editor-container\",\n ref: container => {\n this.container = container;\n },\n children: isEditing ? /*#__PURE__*/_jsx(Editor, {\n settings: {\n language: 'markdown',\n value: content,\n lineNumbers: 'off'\n },\n onEditorInitialized: onEditorInitialized\n }) : /*#__PURE__*/_jsx(Markdown, {\n components: {\n code: renderMarkdown\n },\n children: content\n })\n });\n }\n}\n_defineProperty(MarkdownEditor, \"defaultProps\", {\n isEditing: false,\n content: ''\n});\n//# sourceMappingURL=MarkdownEditor.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport { getClosedPanelsForDashboard, LayoutUtils, PanelEvent } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { assertNotNull } from '@deephaven/utils';\nimport Panel from \"./Panel.js\";\nimport MarkdownContainer from \"../controls/markdown/MarkdownContainer.js\";\nimport MarkdownStartPage from \"../controls/markdown/MarkdownStartPage.js\";\nimport MarkdownEditor from \"../controls/markdown/MarkdownEditor.js\";\nimport \"./MarkdownPanel.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('MarkdownPanel');\nexport class MarkdownPanel extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"markdownEditor\", void 0);\n _defineProperty(this, \"editor\", void 0);\n _defineProperty(this, \"getClosedMarkdowns\", memoize(closedPanels => closedPanels.filter(panel => panel.component === 'MarkdownPanel').reverse()));\n this.handleContainerDoubleClick = this.handleContainerDoubleClick.bind(this);\n this.handleCreateMarkdown = this.handleCreateMarkdown.bind(this);\n this.handleDeleteMarkdown = this.handleDeleteMarkdown.bind(this);\n this.handleOpenMarkdown = this.handleOpenMarkdown.bind(this);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleEditorResize = this.handleEditorResize.bind(this);\n var {\n panelState\n } = props;\n var content = null;\n if (panelState != null && panelState.content != null) {\n ({\n content\n } = panelState);\n }\n this.state = {\n isStartPageShown: content == null,\n isEditing: false,\n content,\n // eslint-disable-next-line react/no-unused-state\n panelState\n };\n this.markdownEditor = null;\n }\n setEditorPosition(clickPositionY) {\n assertNotNull(this.markdownEditor);\n var {\n container: markdownEditorContainer\n } = this.markdownEditor;\n if (this.editor && markdownEditorContainer) {\n var _this$editor$getModel, _this$editor$getModel2;\n var contentTop = markdownEditorContainer.getBoundingClientRect().top;\n var contentScrollTop = markdownEditorContainer.scrollTop;\n var contentScrollHeight = markdownEditorContainer.scrollHeight;\n var totalLines = (_this$editor$getModel = (_this$editor$getModel2 = this.editor.getModel()) === null || _this$editor$getModel2 === void 0 ? void 0 : _this$editor$getModel2.getLineCount()) !== null && _this$editor$getModel !== void 0 ? _this$editor$getModel : 0;\n var lineToFocus = Math.round((contentScrollTop + clickPositionY - contentTop) / contentScrollHeight * totalLines);\n if (lineToFocus > totalLines) {\n lineToFocus = totalLines;\n }\n this.editor.revealLine(lineToFocus);\n this.editor.setPosition({\n lineNumber: lineToFocus,\n column: 1\n });\n this.editor.focus();\n }\n }\n handleContainerDoubleClick(event) {\n var {\n isEditing\n } = this.state;\n var dbClickPositionY = event.clientY;\n if (!isEditing) {\n this.setState({\n isEditing: true\n }, () => {\n this.setEditorPosition(dbClickPositionY);\n });\n }\n }\n handleEditorInitialized(editor) {\n log.debug('Markdown Editor Initialized...');\n this.editor = editor;\n }\n handleCreateMarkdown() {\n log.debug('create markdown...');\n this.setState({\n isStartPageShown: false,\n content: '',\n isEditing: true,\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n content: ''\n }\n }, () => {\n if (this.editor != null && this.editor.focus != null) {\n this.editor.focus();\n }\n });\n }\n handleOpenMarkdown(markdown) {\n log.debug('open markdown...', markdown);\n var {\n glContainer,\n glEventHub\n } = this.props;\n var config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n glEventHub.emit(PanelEvent.REOPEN, markdown, config);\n }\n handleDeleteMarkdown(markdown) {\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(PanelEvent.DELETE, markdown);\n }\n handleEditorBlur(event) {\n var _this$editor;\n log.debug(\"markdown content changed, saving...\");\n var {\n isEditing\n } = this.state;\n\n // if not in edit mode, or in edit mode but blur went to an internal monaco field (like search)\n if (!isEditing || this.markdownEditor != null && this.markdownEditor.container != null && this.markdownEditor.container.contains(event.relatedTarget)) {\n return;\n }\n var content = (_this$editor = this.editor) === null || _this$editor === void 0 ? void 0 : _this$editor.getValue();\n this.setState({\n content,\n isEditing: false,\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n content\n }\n });\n }\n handleEditorResize() {\n var {\n isEditing\n } = this.state;\n if (isEditing && this.editor) {\n this.editor.layout();\n }\n }\n render() {\n var {\n glContainer,\n glEventHub,\n closedPanels\n } = this.props;\n var {\n isEditing,\n isStartPageShown,\n content\n } = this.state;\n var closedMarkdowns = this.getClosedMarkdowns(closedPanels);\n return /*#__PURE__*/_jsx(Panel, {\n glContainer: glContainer,\n glEventHub: glEventHub,\n className: \"markdown-panel\",\n componentPanel: this,\n onResize: this.handleEditorResize,\n onBlur: this.handleEditorBlur,\n isClonable: true,\n isRenamable: true,\n children: isStartPageShown ? /*#__PURE__*/_jsx(MarkdownStartPage, {\n closedMarkdowns: closedMarkdowns,\n onCreate: this.handleCreateMarkdown,\n onOpen: this.handleOpenMarkdown,\n onDelete: this.handleDeleteMarkdown\n }) : /*#__PURE__*/_jsx(MarkdownContainer, {\n isEditing: isEditing,\n onDoubleClick: this.handleContainerDoubleClick,\n children: /*#__PURE__*/_jsx(MarkdownEditor, {\n ref: markdownEditor => {\n this.markdownEditor = markdownEditor;\n },\n isEditing: isEditing,\n content: content !== null && content !== void 0 ? content : undefined,\n onEditorInitialized: this.handleEditorInitialized\n })\n })\n });\n }\n}\n_defineProperty(MarkdownPanel, \"defaultProps\", {\n panelState: null\n});\n_defineProperty(MarkdownPanel, \"COMPONENT\", 'MarkdownPanel');\nvar mapStateToProps = (state, ownProps) => {\n var {\n localDashboardId\n } = ownProps;\n return {\n closedPanels: getClosedPanelsForDashboard(state, localDashboardId)\n };\n};\nvar ConnectedMarkdownPanel = connect(mapStateToProps, null, null, {\n forwardRef: true\n})(MarkdownPanel);\nexport default ConnectedMarkdownPanel;\n//# sourceMappingURL=MarkdownPanel.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError(\"Cannot destructure \" + obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/no-unused-state */\nimport React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhRefresh } from '@deephaven/icons';\nimport { Button } from '@deephaven/components';\nimport ConnectedIrisGridPanel from \"./IrisGridPanel.js\";\nimport \"./PandasPanel.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Wraps and IrisGridPanel to add a refresh button for Pandas.\n */\nclass PandasPanel extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"buttonRef\", void 0);\n _defineProperty(this, \"irisGridRef\", void 0);\n this.irisGridRef = /*#__PURE__*/React.createRef();\n this.buttonRef = /*#__PURE__*/React.createRef();\n this.handleReload = this.handleReload.bind(this);\n this.handleGridStateChange = this.handleGridStateChange.bind(this);\n this.handlePanelStateUpdate = this.handlePanelStateUpdate.bind(this);\n var {\n panelState\n } = props;\n this.state = {\n shouldFocusGrid: false,\n panelState // Dehydrated panel state that can load this panel\n };\n }\n\n handleReload() {\n var _this$irisGridRef$cur, _this$buttonRef$curre;\n (_this$irisGridRef$cur = this.irisGridRef.current) === null || _this$irisGridRef$cur === void 0 ? void 0 : _this$irisGridRef$cur.initModel();\n (_this$buttonRef$curre = this.buttonRef.current) === null || _this$buttonRef$curre === void 0 ? void 0 : _this$buttonRef$curre.blur();\n this.setState({\n shouldFocusGrid: true\n });\n }\n handleGridStateChange() {\n var _this$irisGridRef$cur2, _this$irisGridRef$cur3, _this$irisGridRef$cur4;\n var {\n shouldFocusGrid\n } = this.state;\n if (shouldFocusGrid && (_this$irisGridRef$cur2 = this.irisGridRef.current) !== null && _this$irisGridRef$cur2 !== void 0 && (_this$irisGridRef$cur3 = _this$irisGridRef$cur2.irisGrid) !== null && _this$irisGridRef$cur3 !== void 0 && (_this$irisGridRef$cur4 = _this$irisGridRef$cur3.current) !== null && _this$irisGridRef$cur4 !== void 0 && _this$irisGridRef$cur4.grid) {\n this.irisGridRef.current.irisGrid.current.grid.focus();\n this.setState({\n shouldFocusGrid: false\n });\n }\n }\n handlePanelStateUpdate(panelState) {\n this.setState({\n panelState\n });\n }\n render() {\n var _this$props = this.props,\n props = _extends({}, (_objectDestructuringEmpty(_this$props), _this$props));\n return /*#__PURE__*/_jsx(ConnectedIrisGridPanel, _objectSpread(_objectSpread({\n ref: this.irisGridRef,\n onStateChange: this.handleGridStateChange,\n onPanelStateUpdate: this.handlePanelStateUpdate\n }, props), {}, {\n children: /*#__PURE__*/_jsxs(Button, {\n ref: this.buttonRef,\n kind: \"primary\",\n className: \"btn-pandas\",\n onClick: this.handleReload,\n tooltip: \"Click to refresh pandas dataframe, updates do not occur automatically.\",\n children: [\"pandas dataframe\", /*#__PURE__*/_jsxs(\"span\", {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhRefresh,\n transform: \"shrink-1\",\n className: \"mr-1\"\n }), \"Reload\"]\n })]\n })\n }));\n }\n}\n_defineProperty(PandasPanel, \"defaultProps\", {\n panelState: null\n});\n_defineProperty(PandasPanel, \"COMPONENT\", 'PandasPanel');\nexport default PandasPanel;\n//# sourceMappingURL=PandasPanel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { isDirectory } from '@deephaven/file-explorer';\nexport class MockFileStorageTable {\n constructor(items) {\n _defineProperty(this, \"items\", void 0);\n _defineProperty(this, \"onUpdateCallback\", void 0);\n this.items = items;\n }\n\n /* eslint-disable class-methods-use-this */\n setSearch(search) {\n // no-op\n }\n setExpanded(path, expanded) {\n // only sets expansion for the FileExplorer in NewItemModal\n if (path.charAt(path.length - 1) === '/') {\n for (var i = 0; i < this.items.length; i += 1) {\n var item = this.items[i];\n if (isDirectory(item) && (\"\".concat(item.filename, \"/\") === path || item.filename === path)) {\n item.isExpanded = expanded;\n }\n }\n }\n return Promise.resolve();\n }\n collapseAll() {\n for (var i = 0; i < this.items.length; i += 1) {\n var item = this.items[i];\n if (isDirectory(item)) {\n item.isExpanded = false;\n }\n }\n return Promise.resolve();\n }\n getViewportData() {\n return Promise.resolve({\n items: this.items,\n // Fill in with mock items\n offset: 0\n });\n }\n getSnapshot(sortedRanges) {\n return _asyncToGenerator(function* () {\n throw new Error('Method not implemented.');\n })();\n }\n setViewport(viewport) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _this$onUpdateCallbac;\n var loadedViewportData = yield _this.getViewportData();\n (_this$onUpdateCallbac = _this.onUpdateCallback) === null || _this$onUpdateCallbac === void 0 ? void 0 : _this$onUpdateCallbac.call(_this, loadedViewportData);\n })();\n }\n setFilters(config) {\n // no-op\n }\n setSorts(config) {\n // no-op\n }\n setReversed(isReversed) {\n // no-op\n }\n close() {\n // no-op\n }\n onUpdate(callback) {\n this.onUpdateCallback = callback;\n return jest.fn();\n }\n get size() {\n return this.items.length;\n }\n}\nexport default MockFileStorageTable;\n//# sourceMappingURL=MockFileStorageTable.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { FileNotFoundError, FileUtils } from '@deephaven/file-explorer';\nimport MockFileStorageTable from \"./MockFileStorageTable.js\";\nexport class MockFileStorage {\n constructor(items) {\n _defineProperty(this, \"items\", void 0);\n this.items = items;\n }\n getTable() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return new MockFileStorageTable(_this.items);\n })();\n }\n\n /* eslint-disable class-methods-use-this */\n saveFile(file) {\n throw new Error('Method not implemented.');\n }\n loadFile(name) {\n throw new Error('Method not implemented.');\n }\n copyFile(name, newName) {\n return _asyncToGenerator(function* () {\n throw new Error('Method not implemented.');\n })();\n }\n deleteFile(name) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.items = _this2.items.filter(value => value.filename !== name);\n })();\n }\n moveFile(name, newName) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n for (var i = 0; i < _this3.items.length; i += 1) {\n if (_this3.items[i].filename === name) {\n _this3.items[i].filename = newName;\n _this3.items[i].basename = FileUtils.getBaseName(newName);\n _this3.items[i].id = newName;\n break;\n }\n }\n })();\n }\n info(name) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var allItems = _this4.items.filter(value => value.filename === name);\n if (allItems.length === 0) {\n throw new FileNotFoundError();\n }\n if (allItems.length > 1) {\n throw new Error('More than one matching file found');\n }\n var itemDetails = allItems[0];\n return {\n filename: itemDetails.filename,\n basename: itemDetails.basename,\n id: itemDetails.filename,\n type: itemDetails.type\n };\n })();\n }\n createDirectory(name) {\n throw new Error('Method not implemented.');\n }\n}\nexport default MockFileStorage;\n//# sourceMappingURL=MockFileStorage.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { useCallback } from 'react';\nimport { assertIsDashboardPluginProps, useDashboardPanel } from '@deephaven/dashboard';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { useConnection } from '@deephaven/jsapi-components';\nimport { ChartModelFactory } from '@deephaven/chart';\nimport { IrisGridUtils } from '@deephaven/iris-grid';\nimport { getTimeZone, store } from '@deephaven/redux';\nimport { ChartPanel, isChartPanelDehydratedProps, isChartPanelTableMetadata } from \"./panels/index.js\";\nfunction createChartModel(_x, _x2, _x3, _x4) {\n return _createChartModel.apply(this, arguments);\n}\nfunction _createChartModel() {\n _createChartModel = _asyncToGenerator(function* (dh, connection, metadata, panelState) {\n var settings;\n var tableName;\n var figureName;\n var tableSettings;\n if (isChartPanelTableMetadata(metadata)) {\n settings = metadata.settings;\n tableName = metadata.table;\n figureName = undefined;\n tableSettings = metadata.tableSettings;\n } else {\n var _metadata$name;\n settings = {};\n tableName = '';\n figureName = (_metadata$name = metadata.name) !== null && _metadata$name !== void 0 ? _metadata$name : metadata.figure;\n tableSettings = {};\n }\n if (panelState != null) {\n if (panelState.tableSettings != null) {\n tableSettings = panelState.tableSettings;\n }\n if (panelState.table != null) {\n tableName = panelState.table;\n }\n if (panelState.figure != null) {\n figureName = panelState.figure;\n }\n if (panelState.settings != null) {\n settings = _objectSpread(_objectSpread({}, settings), panelState.settings);\n }\n }\n if (figureName != null) {\n var _definition = {\n title: figureName,\n name: figureName,\n type: dh.VariableType.FIGURE\n };\n var figure = yield connection.getObject(_definition);\n return ChartModelFactory.makeModel(dh, settings, figure);\n }\n var definition = {\n title: figureName,\n name: tableName,\n type: dh.VariableType.TABLE\n };\n var table = yield connection.getObject(definition);\n new IrisGridUtils(dh).applyTableSettings(table, tableSettings, getTimeZone(store.getState()));\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return ChartModelFactory.makeModelFromSettings(dh, settings, table);\n });\n return _createChartModel.apply(this, arguments);\n}\nexport function ChartPlugin(props) {\n assertIsDashboardPluginProps(props);\n var dh = useApi();\n var connection = useConnection();\n var hydrate = useCallback((hydrateProps, id) => _objectSpread(_objectSpread({}, hydrateProps), {}, {\n localDashboardId: id,\n makeModel: () => {\n var {\n metadata\n } = hydrateProps;\n var panelState = isChartPanelDehydratedProps(hydrateProps) ? hydrateProps.panelState : undefined;\n if (metadata == null) {\n throw new Error('Metadata is required for chart panel');\n }\n return createChartModel(dh, connection, metadata, panelState);\n }\n }), [dh, connection]);\n useDashboardPanel({\n dashboardProps: props,\n componentName: ChartPanel.COMPONENT,\n component: ChartPanel,\n supportedTypes: dh.VariableType.FIGURE,\n hydrate\n });\n return null;\n}\nexport default ChartPlugin;\n//# sourceMappingURL=ChartPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport ChartPlugin from \"./ChartPlugin.js\";\nvar ChartPluginConfig = {\n name: 'ChartPlugin',\n type: PluginType.DASHBOARD_PLUGIN,\n component: ChartPlugin\n};\nexport default ChartPluginConfig;\n//# sourceMappingURL=ChartPluginConfig.js.map","import { useCallback } from 'react';\nimport { ChartModelFactory, ChartUtils } from '@deephaven/chart';\nimport { assertIsDashboardPluginProps, LayoutUtils, useListener } from '@deephaven/dashboard';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport shortid from 'shortid';\nimport { IrisGridEvent } from \"./events/index.js\";\nimport { ChartPanel } from \"./panels/index.js\";\n/**\n * Listens for IrisGridEvent.CREATE_CHART and creates a chart from the settings provided\n * Requires the GridPlugin and ChartPlugin plugins to be loaded as well\n */\nexport function ChartBuilderPlugin(props) {\n assertIsDashboardPluginProps(props);\n var {\n id,\n layout\n } = props;\n var dh = useApi();\n var handleCreateChart = useCallback(_ref => {\n var {\n metadata,\n panelId = shortid.generate(),\n table\n } = _ref;\n var {\n settings\n } = metadata;\n var makeModel = () => ChartModelFactory.makeModelFromSettings(dh, settings, table);\n var title = ChartUtils.titleFromSettings(settings);\n var config = {\n type: 'react-component',\n component: ChartPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel\n },\n title,\n id: panelId\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config\n });\n }, [dh, id, layout]);\n useListener(layout.eventHub, IrisGridEvent.CREATE_CHART, handleCreateChart);\n return null;\n}\nexport default ChartBuilderPlugin;\n//# sourceMappingURL=ChartBuilderPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport ChartBuilderPlugin from \"./ChartBuilderPlugin.js\";\nvar ChartBuilderPluginConfig = {\n name: 'ChartBuilderPlugin',\n type: PluginType.DASHBOARD_PLUGIN,\n component: ChartBuilderPlugin\n};\nexport default ChartBuilderPluginConfig;\n//# sourceMappingURL=ChartBuilderPluginConfig.js.map","import { useCallback, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { assertIsDashboardPluginProps, LayoutUtils, PanelEvent, updateDashboardData, useListener } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { TextUtils } from '@deephaven/utils';\nimport { InputFilterEvent } from \"./events/index.js\";\nimport { DropdownFilterPanel, FilterSetManagerPanel, InputFilterPanel } from \"./panels/index.js\";\nvar log = Log.module('FilterPlugin');\nfunction flattenArray(accumulator, currentValue) {\n return accumulator.concat(currentValue);\n}\nexport function FilterPlugin(props) {\n assertIsDashboardPluginProps(props);\n var {\n id: localDashboardId,\n layout,\n registerComponent\n } = props;\n var dispatch = useDispatch();\n var [panelColumns] = useState(() => new Map());\n var [panelFilters] = useState(() => new Map());\n var [panelTables] = useState(() => new Map());\n var sendUpdate = useCallback(() => {\n var columns = Array.from(panelColumns.values()).reduce(flattenArray, []).sort((a, b) => {\n var aName = TextUtils.toLower(a.name);\n var bName = TextUtils.toLower(b.name);\n if (aName !== bName) {\n return aName > bName ? 1 : -1;\n }\n var aType = TextUtils.toLower(a.type);\n var bType = TextUtils.toLower(b.type);\n if (aType !== bType) {\n return aType > bType ? 1 : -1;\n }\n return 0;\n }).reduce((array, column) => {\n if (array.length === 0 || TextUtils.toLower(array[array.length - 1].name) !== TextUtils.toLower(column.name) || TextUtils.toLower(array[array.length - 1].type) !== TextUtils.toLower(column.type)) {\n array.push(column);\n }\n return array;\n }, []);\n var filters = Array.from(panelFilters.values()).reduce(flattenArray, []).sort((a, b) => a.timestamp - b.timestamp);\n var tableMap = new Map(panelTables);\n log.debug('sendUpdate', {\n columns,\n filters,\n tableMap\n });\n dispatch(updateDashboardData(localDashboardId, {\n columns,\n filters,\n tableMap\n }));\n }, [dispatch, localDashboardId, panelColumns, panelFilters, panelTables]);\n\n /**\n * Handler for the COLUMNS_CHANGED event.\n * @param panel The component that's emitting the filter change\n * @param columns The columns in this panel\n */\n var handleColumnsChanged = useCallback((panel, columns) => {\n log.debug2('handleColumnsChanged', panel, columns);\n panelColumns.set(panel, [].concat(columns));\n sendUpdate();\n }, [panelColumns, sendUpdate]);\n\n /**\n * Handler for the FILTERS_CHANGED event.\n * @param {Component} panel The component that's emitting the filter change\n * @param {FilterChangeEvent|Array<FilterChangeEvent>} filters The input filters set by the panel\n */\n var handleFiltersChanged = useCallback((panel, filters) => {\n log.debug2('handleFiltersChanged', panel, filters);\n panelFilters.set(panel, [].concat(filters));\n sendUpdate();\n }, [panelFilters, sendUpdate]);\n var handleTableChanged = useCallback((panel, table) => {\n log.debug2('handleTableChanged', panel, table);\n panelTables.set(LayoutUtils.getIdFromPanel(panel), table);\n sendUpdate();\n }, [panelTables, sendUpdate]);\n var handlePanelUnmount = useCallback(panel => {\n log.debug2('handlePanelUnmount', panel);\n panelColumns.delete(panel);\n panelFilters.delete(panel);\n panelTables.delete(LayoutUtils.getIdFromPanel(panel));\n sendUpdate();\n }, [panelColumns, panelFilters, panelTables, sendUpdate]);\n var handleOpenDropdown = useCallback(_ref => {\n var {\n title = 'DropdownFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null\n } = _ref;\n var config = {\n type: 'react-component',\n component: DropdownFilterPanel.COMPONENT,\n props: {\n id,\n metadata,\n panelState,\n localDashboardId\n },\n title,\n id\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent\n });\n }, [layout, localDashboardId]);\n var handleOpenInput = useCallback(_ref2 => {\n var {\n title = 'InputFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined\n } = _ref2;\n var config = {\n type: 'react-component',\n component: InputFilterPanel.COMPONENT,\n props: {\n id,\n metadata,\n panelState,\n localDashboardId\n },\n title,\n id\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent\n });\n }, [layout, localDashboardId]);\n var handleOpenFilterSetManager = useCallback(_ref3 => {\n var {\n title = 'FilterSets',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null\n } = _ref3;\n var config = {\n type: 'react-component',\n component: FilterSetManagerPanel.COMPONENT,\n props: {\n id,\n metadata,\n panelState,\n localDashboardId\n },\n title,\n id\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent\n });\n }, [layout, localDashboardId]);\n useEffect(function registerComponentsAndReturnCleanup() {\n var cleanups = [registerComponent(DropdownFilterPanel.COMPONENT, DropdownFilterPanel), registerComponent(InputFilterPanel.COMPONENT, InputFilterPanel), registerComponent(FilterSetManagerPanel.COMPONENT, FilterSetManagerPanel)];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n useListener(layout.eventHub, InputFilterEvent.COLUMNS_CHANGED, handleColumnsChanged);\n useListener(layout.eventHub, InputFilterEvent.FILTERS_CHANGED, handleFiltersChanged);\n useListener(layout.eventHub, InputFilterEvent.TABLE_CHANGED, handleTableChanged);\n useListener(layout.eventHub, InputFilterEvent.OPEN_DROPDOWN, handleOpenDropdown);\n useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);\n useListener(layout.eventHub, InputFilterEvent.OPEN_FILTER_SET_MANAGER, handleOpenFilterSetManager);\n useListener(layout.eventHub, PanelEvent.UNMOUNT, handlePanelUnmount);\n return null;\n}\nexport default FilterPlugin;\n//# sourceMappingURL=FilterPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport FilterPlugin from \"./FilterPlugin.js\";\nvar FilterPluginConfig = {\n name: 'FilterPlugin',\n type: PluginType.DASHBOARD_PLUGIN,\n component: FilterPlugin\n};\nexport default FilterPluginConfig;\n//# sourceMappingURL=FilterPluginConfig.js.map","import { useCallback } from 'react';\nimport { isTablePlugin, isLegacyTablePlugin, usePlugins } from '@deephaven/plugin';\nimport Log from '@deephaven/log';\nvar log = Log.module('@deephaven/app-utils/useTablePlugin');\n\n/**\n * Creates a table plugin loader function.\n * @returns A function to load a Table plugin element by name\n */\nexport function useLoadTablePlugin() {\n var plugins = usePlugins();\n var plugin = useCallback(name => {\n // First check if we have any plugin modules loaded that match the TablePlugin.\n var pluginModule = plugins.get(name);\n if (pluginModule != null) {\n if (isTablePlugin(pluginModule)) {\n return pluginModule.component;\n }\n if (isLegacyTablePlugin(pluginModule)) {\n return pluginModule.TablePlugin;\n }\n }\n var errorMessage = \"Unable to find table plugin \".concat(name, \".\");\n log.error(errorMessage);\n throw new Error(errorMessage);\n }, [plugins]);\n return plugin;\n}\nexport default useLoadTablePlugin;\n//# sourceMappingURL=useLoadTablePlugin.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { useCallback } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { useConnection } from '@deephaven/jsapi-components';\nimport { IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { isIrisGridPanelMetadata, isLegacyIrisGridPanelMetadata } from \"./panels/index.js\";\nimport { useLoadTablePlugin } from \"./useLoadTablePlugin.js\";\nexport function useHydrateGrid() {\n var dh = useApi();\n var connection = useConnection();\n var loadPlugin = useLoadTablePlugin();\n var hydrate = useCallback((hydrateProps, id) => {\n var metadata;\n if (isIrisGridPanelMetadata(hydrateProps.metadata)) {\n metadata = hydrateProps.metadata;\n } else if (isLegacyIrisGridPanelMetadata(hydrateProps.metadata)) {\n var _hydrateProps$metadat;\n metadata = {\n name: hydrateProps.metadata.table,\n type: (_hydrateProps$metadat = hydrateProps.metadata.type) !== null && _hydrateProps$metadat !== void 0 ? _hydrateProps$metadat : dh.VariableType.TABLE\n };\n } else {\n throw new Error('Metadata is required for table panel');\n }\n return _objectSpread(_objectSpread({}, hydrateProps), {}, {\n loadPlugin,\n localDashboardId: id,\n makeModel: function () {\n var _makeModel = _asyncToGenerator(function* () {\n var {\n name: tableName,\n type\n } = metadata;\n var definition = {\n title: tableName,\n name: tableName,\n type\n };\n var table = yield connection.getObject(definition);\n return IrisGridModelFactory.makeModel(dh, table);\n });\n function makeModel() {\n return _makeModel.apply(this, arguments);\n }\n return makeModel;\n }()\n });\n }, [dh, connection, loadPlugin]);\n return hydrate;\n}\nexport default useHydrateGrid;\n//# sourceMappingURL=useHydrateGrid.js.map","import { useMemo } from 'react';\nimport { assertIsDashboardPluginProps, useDashboardPanel } from '@deephaven/dashboard';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { IrisGridPanel } from \"./panels/index.js\";\nimport useHydrateGrid from \"./useHydrateGrid.js\";\nexport function GridPlugin(props) {\n assertIsDashboardPluginProps(props);\n var dh = useApi();\n var hydrate = useHydrateGrid();\n var supportedTypes = useMemo(() => [dh.VariableType.TABLE, dh.VariableType.TREETABLE, dh.VariableType.HIERARCHICALTABLE], [dh]);\n useDashboardPanel({\n dashboardProps: props,\n componentName: IrisGridPanel.COMPONENT,\n component: IrisGridPanel,\n supportedTypes,\n hydrate\n });\n return null;\n}\nexport default GridPlugin;\n//# sourceMappingURL=GridPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport GridPlugin from \"./GridPlugin.js\";\nvar GridPluginConfig = {\n name: 'GridPlugin',\n type: PluginType.DASHBOARD_PLUGIN,\n component: GridPlugin\n};\nexport default GridPluginConfig;\n//# sourceMappingURL=GridPluginConfig.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport shortid from 'shortid';\nimport { LayoutUtils } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { ChartPanel, IrisGridPanel, DropdownFilterPanel } from \"../panels/index.js\"; // [x,y] screen coordinates used by the Linker\nexport function isLinkableFromPanel(panel) {\n var p = panel;\n return typeof p.getCoordinateForColumn === 'function';\n}\nexport function isLinkablePanel(panel) {\n var p = panel;\n return isLinkableFromPanel(panel) && typeof p.setFilterMap === 'function' && typeof p.unsetFilterValue === 'function';\n}\nexport function isLinkableColumn(column) {\n var _column$description;\n // TODO: core/#3358 Use preview/original type property instead of checking description\n return column.description === undefined || !((_column$description = column.description) !== null && _column$description !== void 0 && _column$description.startsWith('Preview of type: '));\n}\nvar log = Log.module('LinkerUtils');\n\n/**\n * Collection of utility functions for use with the Linker\n */\nclass LinkerUtils {\n /**\n * Retrieve the type of link given parameters.\n * @param start The link start\n * @param end The link end\n * @param isolatedLinkerPanelId Whether there's an isolated linker\n * @returns The type of link, or invalid if there's an error\n */\n static getLinkType(start, end, isolatedLinkerPanelId) {\n var _LinkerUtils$ALLOWED_;\n // Panel compatibility checks:\n // Link ends should point to different non-null panelIds\n // For isolated linker one of the panels should match isolated panel id\n if ((start === null || start === void 0 ? void 0 : start.panelId) == null || (end === null || end === void 0 ? void 0 : end.panelId) == null || start.panelId === end.panelId || isolatedLinkerPanelId != null && isolatedLinkerPanelId !== start.panelId && isolatedLinkerPanelId !== end.panelId) {\n log.debug2('Incompatible panel ids', start, end, isolatedLinkerPanelId);\n return 'invalid';\n }\n if (start.panelComponent == null || end.panelComponent == null) {\n log.error('PanelComponent should not be null', start, end);\n return 'invalid';\n }\n var isCompatibleComponent = (_LinkerUtils$ALLOWED_ = LinkerUtils.ALLOWED_LINKS.get(start.panelComponent)) === null || _LinkerUtils$ALLOWED_ === void 0 ? void 0 : _LinkerUtils$ALLOWED_.includes(end.panelComponent);\n if (isCompatibleComponent === undefined || !isCompatibleComponent) {\n log.debug2('Incompatible panel components', start, end);\n return 'invalid';\n }\n\n // Check column type compatibility\n var {\n columnType: startColumnType\n } = start;\n var {\n columnType: endColumnType\n } = end;\n\n // Null columnType in ending link point allows linking to any type\n var isCompatibleType = endColumnType === null || TableUtils.isCompatibleType(startColumnType, endColumnType);\n if (!isCompatibleType) {\n log.debug2('Incompatible type', startColumnType, endColumnType);\n return 'invalid';\n }\n\n // If all checks pass, link type is determined by the target panel component\n switch (end.panelComponent) {\n case LayoutUtils.getComponentName(ChartPanel):\n return 'chartLink';\n case LayoutUtils.getComponentName(IrisGridPanel):\n return 'tableLink';\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n return 'filterSource';\n default:\n }\n log.debug2('Incompatible target panel component', end.panelComponent);\n return 'invalid';\n }\n\n /**\n * Find column matching the link point\n * @param columns Columns to search in\n * @param linkPoint Link point to find column for\n * @param linkPoint.columnName Column name to find\n * @param linkPoint.columnType Column type to find\n * @returns Column matching the link point, undefined if not found\n */\n static findColumn(columns, _ref) {\n var {\n columnName,\n columnType\n } = _ref;\n return columns.find(_ref2 => {\n var {\n name,\n type\n } = _ref2;\n return name === columnName && type === columnType;\n });\n }\n\n /**\n * Clone links for a given panel id\n * @param links Original links array\n * @param panelId Original panel id\n * @param cloneId Cloned panel id\n * @returns Cloned links array or empty array if no new links added\n */\n static cloneLinksForPanel(links, panelId, cloneId) {\n var clonedLinks = [];\n links.forEach(link => {\n var _link$end;\n if (link.start.panelId === panelId && link.type !== 'filterSource') {\n clonedLinks.push(_objectSpread(_objectSpread({}, link), {}, {\n id: shortid.generate(),\n start: _objectSpread(_objectSpread({}, link.start), {}, {\n panelId: cloneId\n })\n }));\n } else if (((_link$end = link.end) === null || _link$end === void 0 ? void 0 : _link$end.panelId) === panelId) {\n clonedLinks.push(_objectSpread(_objectSpread({}, link), {}, {\n id: shortid.generate(),\n end: _objectSpread(_objectSpread({}, link.end), {}, {\n panelId: cloneId\n })\n }));\n }\n });\n return clonedLinks;\n }\n}\n_defineProperty(LinkerUtils, \"ALLOWED_LINKS\", new Map([[LayoutUtils.getComponentName(IrisGridPanel), [LayoutUtils.getComponentName(IrisGridPanel), LayoutUtils.getComponentName(ChartPanel), LayoutUtils.getComponentName(DropdownFilterPanel)]]]));\nexport default LinkerUtils;\n//# sourceMappingURL=LinkerUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport memoize from 'memoize-one';\nimport classNames from 'classnames';\nimport { Button, DropdownMenu } from '@deephaven/components';\nimport { vsTrash, vsTriangleDown } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Type as FilterType, getLabelForNumberFilter, getLabelForTextFilter, getLabelForDateFilter } from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport \"./LinkerLink.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('LinkerLink');\n\n/** The constant for how droopy the links are. Increase for more droopiness. */\nvar DROOP = 0.015;\nvar DROOP_EXPONENT = 1.5;\nvar TRIANGLE_HEIGHT = 12;\nvar TRIANGLE_BASE = 12;\nvar TRIANGLE_TIP = 2;\nvar TRIANGLE_HYPOTENUSE = Math.sqrt((TRIANGLE_BASE * 0.5) ** 2 + TRIANGLE_HEIGHT ** 2);\nvar TRIANGLE_THETA = Math.asin(TRIANGLE_BASE * 0.5 / TRIANGLE_HEIGHT);\nvar CLIP_RADIUS = 15;\nvar HALF_PI = Math.PI * 0.5;\nexport class LinkerLink extends Component {\n /**\n * Make an SVG path for a circle at the specified coordinates.\n * @param x The x coordinate for the centre of the circle\n * @param y The y coordinate for the centre of the circle\n * @param r Radius of the circle\n * @returns The SVG string path\n */\n static makeCirclePath(x, y, r) {\n return \"M \".concat(x, \" \").concat(y, \" m -\").concat(r, \",0 a \").concat(r, \",\").concat(r, \" 0 1,0 \").concat(r * 2, \",0 a \").concat(r, \",\").concat(r, \" 0 1,0 -\").concat(r * 2, \",0 z\");\n }\n static getLabelForLinkFilter(columnType, filterType) {\n try {\n if (TableUtils.isNumberType(columnType) || TableUtils.isCharType(columnType)) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n if (filterType === FilterType.eq) {\n return 'is equal to';\n }\n if (filterType === FilterType.notEq) {\n return 'is not equal to';\n }\n }\n throw new Error(\"Unrecognized column type: \".concat(columnType));\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"getOperators\", memoize((linkId, columnType) => {\n var {\n onOperatorChanged\n } = this.props;\n var filterTypes = TableUtils.getFilterTypes(columnType);\n if (TableUtils.isBooleanType(columnType)) {\n filterTypes = [FilterType.eq, FilterType.notEq];\n }\n return filterTypes.flatMap((type, index) => {\n // Remove case-insensitive string comparisons\n if (type === 'eqIgnoreCase' || type === \"notEqIgnoreCase\") {\n return [];\n }\n var symbol = '';\n if (type === 'startsWith') {\n symbol = 'a*';\n } else if (type === 'endsWith') {\n symbol = '*z';\n } else {\n symbol = TableUtils.getFilterOperatorString(type);\n }\n return [{\n title: LinkerLink.getLabelForLinkFilter(columnType, type),\n icon: /*#__PURE__*/_jsx(\"b\", {\n children: symbol\n }),\n action: () => onOperatorChanged(linkId, type),\n order: index\n }];\n });\n }));\n this.handleClick = this.handleClick.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleDelete = this.handleDelete.bind(this);\n this.getDropdownActions = this.getDropdownActions.bind(this);\n this.state = {\n isHovering: undefined\n };\n }\n handleClick(event) {\n event.stopPropagation();\n event.preventDefault();\n var {\n id,\n onClick,\n onDelete\n } = this.props;\n if (event.altKey) {\n onDelete(id);\n } else {\n onClick(id);\n }\n }\n handleMouseEnter() {\n this.setState({\n isHovering: true\n });\n }\n handleMouseLeave() {\n this.setState({\n isHovering: false\n });\n }\n handleDelete() {\n var {\n id,\n onDelete\n } = this.props;\n onDelete(id);\n }\n getDropdownActions() {\n var {\n id,\n startColumnType\n } = this.props;\n if (startColumnType != null) {\n return this.getOperators(id, startColumnType);\n }\n return [];\n }\n render() {\n var {\n className,\n operator,\n isSelected,\n x1,\n y1,\n x2,\n y2,\n id,\n startColumnType,\n type\n } = this.props;\n var {\n isHovering\n } = this.state;\n\n // Path between the two points\n var len = Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);\n var theta = Math.atan2(y2 - y1, x2 - x1);\n var xMult = Math.sin(theta);\n var yMult = Math.cos(theta) + 2;\n var maxX = window.innerWidth;\n var maxY = window.innerHeight;\n var minX = 0;\n var minY = 0;\n var qx = Math.max(minX, Math.min(x1 + (x2 - x1) / 2 + xMult * (len * DROOP) ** DROOP_EXPONENT, maxX));\n var qy = Math.max(minY, Math.min(y1 + (y2 - y1) / 2 + yMult * (len * DROOP) ** DROOP_EXPONENT, maxY));\n var path = \"M \".concat(x1, \" \").concat(y1, \" Q \").concat(qx, \" \").concat(qy, \" \").concat(x2, \" \").concat(y2);\n\n // path for a 100%, 100% rect, then two paths for circles at point\n var selectClipPath = \"M \".concat(minX, \" \").concat(minY, \" L \").concat(minX, \" \").concat(maxY, \" L \").concat(maxX, \" \").concat(maxY, \" L \").concat(maxX, \" \").concat(minY, \" z\\n \").concat(LinkerLink.makeCirclePath(x1, y1, CLIP_RADIUS), \"\\n \").concat(LinkerLink.makeCirclePath(x2, y2, CLIP_RADIUS));\n var clipPathId = \"link-select-clip-\".concat(id);\n\n // Calculate location of the end triangle\n // We draw it instead of using markers to allow for transitions in the style\n var endTheta = Math.atan2(y2 - qy, x2 - qx);\n var t2theta = endTheta - TRIANGLE_THETA + Math.PI;\n var t3theta = endTheta + TRIANGLE_THETA + Math.PI;\n var tx1 = x2 + Math.cos(endTheta) * TRIANGLE_TIP;\n var ty1 = y2 + Math.sin(endTheta) * TRIANGLE_TIP;\n var tx2 = tx1 + Math.cos(t2theta) * TRIANGLE_HYPOTENUSE;\n var ty2 = ty1 + Math.sin(t2theta) * TRIANGLE_HYPOTENUSE;\n var tx3 = tx1 + Math.cos(t3theta) * TRIANGLE_HYPOTENUSE;\n var ty3 = ty1 + Math.sin(t3theta) * TRIANGLE_HYPOTENUSE;\n var points = \"\".concat(tx1, \",\").concat(ty1, \" \").concat(tx2, \",\").concat(ty2, \" \").concat(tx3, \",\").concat(ty3);\n\n // Button offset calculations\n var midX = 0.25 * x1 + 0.5 * qx + 0.25 * x2;\n var midY = 0.25 * y1 + 0.5 * qy + 0.25 * y2;\n var dMidX = qx - x1 + (x2 - qx);\n var dMidY = qy - y1 + (y2 - qy);\n var slopeAtMid = dMidY / dMidX;\n var DISTANCE_FROM_MID = 20;\n var topOffsetX = DISTANCE_FROM_MID / Math.sqrt(1 + slopeAtMid ** 2);\n var topOffsetY = topOffsetX * slopeAtMid;\n var bottomOffsetX = topOffsetX * -1;\n var bottomOffsetY = topOffsetY * -1;\n if (!Number.isFinite(slopeAtMid)) {\n bottomOffsetX = 10;\n bottomOffsetY = 5;\n topOffsetX = 10;\n topOffsetY = -35;\n } else if (slopeAtMid > 0) {\n topOffsetX *= -1;\n topOffsetY *= -1;\n bottomOffsetX *= -1;\n bottomOffsetY *= -1;\n bottomOffsetX -= 50 - 10 * (Math.abs(theta) % HALF_PI);\n bottomOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetX -= 50 - 10 * (Math.abs(theta) % HALF_PI);\n topOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n } else if (slopeAtMid < 0) {\n bottomOffsetX += 10 * (Math.abs(theta) % HALF_PI);\n bottomOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetX += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n } else {\n bottomOffsetX = 15;\n bottomOffsetY = 10;\n topOffsetX = -25;\n topOffsetY = 10;\n }\n var symbol = '';\n if (operator !== undefined) {\n if (operator === 'startsWith') {\n symbol = 'a*';\n } else if (operator === 'endsWith') {\n symbol = '*z';\n } else {\n symbol = TableUtils.getFilterOperatorString(operator);\n }\n }\n var showOperator = type !== 'chartLink' && type !== 'filterSource';\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsxs(\"svg\", {\n className: classNames(className, {\n hovering: isHovering\n }),\n children: [/*#__PURE__*/_jsx(\"clipPath\", {\n id: clipPathId,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: selectClipPath,\n clipRule: \"evenodd\"\n })\n }), /*#__PURE__*/_jsx(\"path\", {\n className: \"link-select\",\n d: path,\n onClick: this.handleClick,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n clipPath: \"url(#\".concat(clipPathId, \")\"),\n \"data-testid\": \"link-select\"\n }), /*#__PURE__*/_jsx(\"path\", {\n className: \"link-background\",\n d: path\n }), /*#__PURE__*/_jsx(\"path\", {\n className: \"link-foreground\",\n d: path\n }), /*#__PURE__*/_jsx(\"circle\", {\n className: \"link-dot\",\n cx: x1,\n cy: y1,\n r: \"5\"\n }), /*#__PURE__*/_jsx(\"polygon\", {\n className: \"link-triangle\",\n points: points\n })]\n }), startColumnType != null && isSelected && /*#__PURE__*/_jsxs(_Fragment, {\n children: [showOperator && /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n className: \"btn-fab btn-operator\",\n style: {\n top: midY + (slopeAtMid >= 0 ? topOffsetY : bottomOffsetY),\n left: midX + (slopeAtMid >= 0 ? topOffsetX : bottomOffsetX)\n },\n onClick: () => {\n // no-op: click is handled in `DropdownMenu'\n },\n icon: /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-md fa-layers\",\n children: [/*#__PURE__*/_jsx(\"b\", {\n children: symbol\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsTriangleDown,\n transform: \"right-8 down-9 shrink-5\"\n })]\n }),\n tooltip: \"Change comparison operator\",\n children: /*#__PURE__*/_jsx(DropdownMenu, {\n actions: this.getDropdownActions,\n popperOptions: {\n placement: 'bottom-start'\n }\n })\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n className: \"btn-fab btn-delete\",\n style: {\n top: midY + (slopeAtMid < 0 ? topOffsetY : bottomOffsetY),\n left: midX + (slopeAtMid < 0 ? topOffsetX : bottomOffsetX)\n },\n onClick: this.handleDelete,\n icon: vsTrash,\n tooltip: \"Delete\"\n })]\n })]\n });\n }\n}\n_defineProperty(LinkerLink, \"defaultProps\", {\n className: '',\n isSelected: false,\n onClick() {\n // no-op\n },\n onDelete() {\n // no-op\n }\n});\nexport default LinkerLink;\n//# sourceMappingURL=LinkerLink.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { Button, ContextActions, GLOBAL_SHORTCUTS, Tooltip } from '@deephaven/components';\nimport { LayoutUtils } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { vsGripper } from '@deephaven/icons';\nimport clamp from 'lodash.clamp';\nimport { isLinkableFromPanel } from \"./LinkerUtils.js\";\nimport LinkerLink from \"./LinkerLink.js\";\nimport \"./LinkerOverlayContent.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('LinkerOverlayContent');\nexport class LinkerOverlayContent extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"dialogRef\", void 0);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n this.handleOperatorChanged = this.handleOperatorChanged.bind(this);\n this.dialogRef = /*#__PURE__*/React.createRef();\n this.state = {\n mouse: undefined,\n dialog: undefined,\n offset: {\n x: 0,\n y: 0\n },\n isDragging: false,\n mode: 'select'\n };\n }\n componentDidMount() {\n window.addEventListener('blur', this.handleBlur, true);\n window.addEventListener('mousemove', this.handleMouseMove, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n window.addEventListener('keydown', this.handleKeyDown, true);\n window.addEventListener('keyup', this.handleKeyUp, true);\n window.addEventListener('resize', this.handleResize, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error, info) {\n log.error('componentDidCatch', error, info);\n }\n componentWillUnmount() {\n window.removeEventListener('blur', this.handleBlur, true);\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('keydown', this.handleKeyDown, true);\n window.removeEventListener('keyup', this.handleKeyUp, true);\n window.removeEventListener('resize', this.handleResize, true);\n }\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint) {\n var {\n panelManager\n } = this.props;\n var {\n panelId,\n columnName\n } = linkPoint;\n var panel = panelManager.getOpenedPanelById(panelId);\n if (panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\"Panel does not have getCoordinateForColumn method: \".concat(panelId));\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n var coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n var glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(\"Unable to find panel container for id: \".concat(panelId));\n }\n return LayoutUtils.getTabPoint(glContainer);\n }\n handleOperatorChanged(linkId, type) {\n var {\n links,\n onLinksUpdated\n } = this.props;\n var newLinks = links.map(link => link.id === linkId ? _objectSpread(_objectSpread({}, link), {}, {\n operator: type\n }) : link);\n onLinksUpdated(newLinks);\n }\n handleBlur() {\n this.setState({\n mode: 'select'\n });\n }\n handleResize() {\n var {\n dialog\n } = this.state;\n if (dialog && this.dialogRef.current) {\n var rect = this.dialogRef.current.getBoundingClientRect();\n var dialogX = clamp(dialog.x, 0, window.innerWidth - rect.width);\n var dialogY = clamp(dialog.y, 0, window.innerHeight - rect.height);\n this.setState({\n dialog: {\n x: dialogX,\n y: dialogY\n }\n });\n }\n }\n handleMouseMove(event) {\n var {\n offset,\n isDragging\n } = this.state;\n this.setState({\n mouse: {\n x: event.clientX,\n y: event.clientY\n }\n });\n if (isDragging && this.dialogRef.current) {\n var rect = this.dialogRef.current.getBoundingClientRect();\n var dialogX = clamp(window.innerWidth - (event.clientX + rect.width + offset.x), 0, window.innerWidth - rect.width);\n var dialogY = clamp(window.innerHeight - (event.clientY + rect.height + offset.y), 0, window.innerHeight - rect.height);\n this.setState({\n dialog: {\n x: dialogX,\n y: dialogY\n }\n });\n }\n }\n handleMouseDown(event) {\n var offset = {\n x: 0,\n y: 0\n };\n if (this.dialogRef.current) {\n var rect = this.dialogRef.current.getBoundingClientRect();\n offset.x = rect.right - (rect.width + event.clientX);\n offset.y = rect.bottom - (rect.height + event.clientY);\n }\n this.setState({\n isDragging: true,\n offset\n });\n }\n handleMouseUp() {\n this.setState({\n isDragging: false\n });\n }\n handleKeyDown(event) {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'delete'\n });\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n var {\n selectedIds,\n onLinkDeleted\n } = this.props;\n event.preventDefault();\n selectedIds.forEach(id => onLinkDeleted(id));\n }\n }\n handleKeyUp(event) {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'select'\n });\n }\n }\n handleEscapePressed() {\n var {\n onCancel\n } = this.props;\n onCancel();\n }\n render() {\n var {\n disabled,\n links,\n selectedIds,\n messageText,\n onLinkSelected,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone\n } = this.props;\n var {\n mouse,\n dialog,\n isDragging,\n mode\n } = this.state;\n var visibleLinks = links.map(link => {\n try {\n var _mouse$x, _mouse$y;\n var {\n id,\n type,\n isReversed,\n start,\n end,\n operator\n } = link;\n var startColumnType = start.columnType;\n var [x1, y1] = this.getPointFromLinkPoint(start);\n var x2 = (_mouse$x = mouse === null || mouse === void 0 ? void 0 : mouse.x) !== null && _mouse$x !== void 0 ? _mouse$x : x1;\n var y2 = (_mouse$y = mouse === null || mouse === void 0 ? void 0 : mouse.y) !== null && _mouse$y !== void 0 ? _mouse$y : y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed != null && isReversed) {\n var [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n var className = classNames('linker-link', {\n disabled\n }, {\n 'link-filter-source': type === 'filterSource'\n }, {\n 'link-invalid': type === 'invalid'\n }, {\n interactive: link.end == null\n }, {\n 'link-is-selected': selectedIds.has(id)\n }, {\n 'danger-delete': mode === 'delete'\n });\n return {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type\n };\n } catch (error) {\n log.warn('Unable to get point for link', link, error);\n return null;\n }\n }).filter(item => item != null);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('linker-overlay', {\n 'danger-delete': mode === 'delete'\n }),\n children: [visibleLinks.map(_ref => {\n var {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type\n } = _ref;\n return /*#__PURE__*/_jsx(LinkerLink, {\n className: className,\n id: id,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n onClick: onLinkSelected,\n onDelete: onLinkDeleted,\n isSelected: selectedIds.has(id),\n operator: operator,\n startColumnType: startColumnType,\n type: type,\n onOperatorChanged: this.handleOperatorChanged\n }, id);\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('linker-toast-dialog', {\n dragging: isDragging\n }),\n ref: this.dialogRef,\n style: {\n bottom: dialog === null || dialog === void 0 ? void 0 : dialog.y,\n right: dialog === null || dialog === void 0 ? void 0 : dialog.x\n },\n \"data-testid\": \"linker-toast-dialog\",\n children: [/*#__PURE__*/_jsx(Button, {\n draggable: true,\n kind: \"inline\",\n className: \"btn-drag-handle\",\n icon: vsGripper,\n onClick: () => {\n // no-op\n },\n onMouseDown: this.handleMouseDown,\n children: !isDragging && /*#__PURE__*/_jsx(Tooltip, {\n children: \"Drag to reposition\"\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"toast-body\",\n children: messageText\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"toast-footer\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: onAllLinksDeleted,\n children: \"Clear All\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: onDone,\n children: \"Done\"\n })]\n })]\n }), /*#__PURE__*/_jsx(ContextActions, {\n actions: [{\n action: this.handleEscapePressed,\n shortcut: GLOBAL_SHORTCUTS.LINKER_CLOSE,\n isGlobal: true\n }]\n })]\n });\n }\n}\n_defineProperty(LinkerOverlayContent, \"defaultProps\", {\n disabled: 'false'\n});\nexport default LinkerOverlayContent;\n//# sourceMappingURL=LinkerOverlayContent.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport { LayoutUtils, PanelEvent } from '@deephaven/dashboard';\nimport { DateTimeColumnFormatter, DateUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { Type as FilterType } from '@deephaven/filters';\nimport { getActiveTool, getApi, getTimeZone, setActiveTool as setActiveToolAction } from '@deephaven/redux';\nimport { getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, setDashboardLinks as setDashboardLinksAction, addDashboardLinks as addDashboardLinksAction, deleteDashboardLinks as deleteDashboardLinksAction, setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction, setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction } from \"../redux/index.js\";\nimport ToolType from \"./ToolType.js\";\nimport { ChartEvent, IrisGridEvent, InputFilterEvent } from \"../events/index.js\";\nimport LinkerOverlayContent from \"./LinkerOverlayContent.js\";\nimport LinkerUtils, { isLinkablePanel, isLinkableColumn } from \"./LinkerUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('Linker');\nvar mapState = (state, ownProps) => ({\n activeTool: getActiveTool(state),\n dh: getApi(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(state, ownProps.localDashboardId),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state)\n});\nvar connector = connect(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction\n});\nexport class Linker extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"getCachedLinks\", memoize((links, linkInProgress, isolateForPanelId) => {\n var combinedLinks = [...links];\n if (linkInProgress != null && linkInProgress.start != null) {\n combinedLinks.push(linkInProgress);\n }\n if (isolateForPanelId !== undefined) {\n return combinedLinks.filter(link => {\n var _link$start, _link$end;\n return (link === null || link === void 0 ? void 0 : (_link$start = link.start) === null || _link$start === void 0 ? void 0 : _link$start.panelId) === isolateForPanelId || (link === null || link === void 0 ? void 0 : (_link$end = link.end) === null || _link$end === void 0 ? void 0 : _link$end.panelId) === isolateForPanelId || (link === null || link === void 0 ? void 0 : link.end) == null;\n });\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n }));\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleLinksUpdated = this.handleLinksUpdated.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.handleLinkSelected = this.handleLinkSelected.bind(this);\n this.handlePanelDragging = this.handlePanelDragging.bind(this);\n this.handlePanelDropped = this.handlePanelDropped.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n this.state = {\n linkInProgress: undefined,\n selectedIds: new Set(),\n isDraggingPanel: false\n };\n }\n componentDidMount() {\n var {\n layout\n } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n componentDidUpdate(prevProps) {\n var {\n activeTool,\n layout\n } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n if (activeTool === ToolType.DEFAULT) {\n this.reset();\n }\n }\n }\n componentDidCatch(error, info) {\n log.error('componentDidCatch', error, info);\n }\n componentWillUnmount() {\n var {\n layout\n } = this.props;\n this.stopListening(layout);\n }\n startListening(layout) {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n var {\n eventHub\n } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.on(InputFilterEvent.COLUMN_SELECTED, this.handleFilterColumnSelect);\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.on(PanelEvent.CLOSE, this.handlePanelClosed);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n eventHub.on(PanelEvent.DRAGGING, this.handlePanelDragging);\n eventHub.on(PanelEvent.DROPPED, this.handlePanelDropped);\n }\n stopListening(layout) {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n var {\n eventHub\n } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(InputFilterEvent.COLUMN_SELECTED, this.handleFilterColumnSelect);\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.off(PanelEvent.CLOSE, this.handlePanelClosed);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n eventHub.off(PanelEvent.DRAGGING, this.handlePanelDragging);\n eventHub.off(PanelEvent.DROPPED, this.handlePanelDropped);\n }\n reset() {\n this.setState({\n linkInProgress: undefined,\n selectedIds: new Set()\n });\n }\n handleCancel() {\n var {\n linkInProgress\n } = this.state;\n if (linkInProgress == null) {\n var {\n setActiveTool\n } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({\n linkInProgress: undefined\n });\n }\n handleDone() {\n var {\n setActiveTool\n } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n handleChartColumnSelect(panel, column) {\n this.columnSelected(panel, column, true);\n }\n handleFilterColumnSelect(panel, column) {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n var {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(panel);\n var panelLinks = links.filter(link => {\n var _link$start2, _link$end2;\n return ((_link$start2 = link.start) === null || _link$start2 === void 0 ? void 0 : _link$start2.panelId) === panelId || ((_link$end2 = link.end) === null || _link$end2 === void 0 ? void 0 : _link$end2.panelId) === panelId;\n });\n if (!this.isOverlayShown() && panelId != null) {\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n handleColumnsChanged(panel, columns) {\n log.debug('handleColumnsChanged', panel, columns);\n var {\n links\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\n // Delete links that start or end on non-existent column in the updated panel\n var linksToDelete = links.filter(_ref => {\n var {\n start,\n end\n } = _ref;\n return start.panelId === panelId && LinkerUtils.findColumn(columns, start) == null || end != null && end.panelId === panelId && LinkerUtils.findColumn(columns, end) == null;\n });\n this.deleteLinks(linksToDelete);\n }\n handleGridColumnSelect(panel, column) {\n if (!isLinkableColumn(column)) {\n log.debug2('Column is not filterable');\n return;\n }\n this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(panel, column) {\n var isAlwaysEndPoint = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var overrideIsolatedLinkerPanelId = arguments.length > 3 ? arguments[3] : undefined;\n if (overrideIsolatedLinkerPanelId === undefined && !this.isOverlayShown()) {\n return;\n }\n var {\n isolatedLinkerPanelId\n } = this.props;\n var {\n linkInProgress\n } = this.state;\n var panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n var panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n var {\n name: columnName,\n type: columnType\n } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n var newLink = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint\n };\n log.debug('starting link', newLink);\n this.setState({\n linkInProgress: newLink\n });\n } else {\n var {\n links\n } = this.props;\n var {\n start,\n id,\n isReversed\n } = linkInProgress;\n var end = {\n panelId,\n panelComponent,\n columnName,\n columnType\n };\n var type = LinkerUtils.getLinkType(isReversed !== undefined && isReversed ? end : start, isReversed !== undefined && isReversed ? start : end, overrideIsolatedLinkerPanelId !== null && overrideIsolatedLinkerPanelId !== void 0 ? overrideIsolatedLinkerPanelId : isolatedLinkerPanelId);\n switch (type) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource':\n {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n var existingLinkPanelId = isReversed !== undefined && isReversed ? start.panelId : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n var linksToDelete = links.filter(_ref2 => {\n var {\n end: panelLinkEnd\n } = _ref2;\n return (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.panelId) === existingLinkPanelId;\n });\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'chartLink':\n {\n var existingLinkEnd = isReversed === true ? start : end;\n var existingLinkStart = isReversed === true ? end : start;\n log.debug('creating chartlink', {\n existingLinkEnd,\n start,\n end\n });\n // Don't allow linking more than one column per source to each chart column\n var _linksToDelete = links.filter(_ref3 => {\n var {\n end: panelLinkEnd,\n start: panelLinkStart\n } = _ref3;\n return (panelLinkStart === null || panelLinkStart === void 0 ? void 0 : panelLinkStart.panelId) === existingLinkStart.panelId && (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.panelId) === existingLinkEnd.panelId && (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.columnName) === existingLinkEnd.columnName && (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.columnType) === existingLinkEnd.columnType;\n });\n this.deleteLinks(_linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n var _newLink = {\n start: isReversed !== undefined && isReversed ? end : start,\n end: isReversed !== undefined && isReversed ? start : end,\n id,\n type,\n operator: FilterType.eq\n };\n log.info('creating link', _newLink);\n this.setState({\n linkInProgress: undefined,\n selectedIds: new Set([id])\n }, () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([_newLink]);\n });\n }\n }\n unsetFilterValueForLink(link) {\n var {\n panelManager\n } = this.props;\n if (link.end) {\n var {\n end\n } = link;\n var {\n panelId,\n columnName,\n columnType\n } = end;\n var endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug('endPanel no longer exists, ignoring unsetFilterValue', panelId);\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId, filterMap) {\n log.debug('Set filter data for panel:', panelId, filterMap);\n var {\n panelManager\n } = this.props;\n var panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n addLinks(links) {\n var {\n addDashboardLinks,\n localDashboardId\n } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n deleteLinks(links) {\n var clearAll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var {\n localDashboardId\n } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n var {\n setDashboardLinks\n } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n var {\n deleteDashboardLinks\n } = this.props;\n deleteDashboardLinks(localDashboardId, links.map(_ref4 => {\n var {\n id\n } = _ref4;\n return id;\n }));\n }\n }\n handleAllLinksDeleted() {\n var {\n links,\n isolatedLinkerPanelId\n } = this.props;\n if (isolatedLinkerPanelId === undefined) {\n this.deleteLinks(links, true);\n } else {\n var isolatedLinks = links.filter(link => {\n var _link$start3, _link$end3;\n return (link === null || link === void 0 ? void 0 : (_link$start3 = link.start) === null || _link$start3 === void 0 ? void 0 : _link$start3.panelId) === isolatedLinkerPanelId || (link === null || link === void 0 ? void 0 : (_link$end3 = link.end) === null || _link$end3 === void 0 ? void 0 : _link$end3.panelId) === isolatedLinkerPanelId;\n });\n this.deleteLinks(isolatedLinks);\n }\n this.reset();\n }\n handleLinkDeleted(linkId) {\n var {\n links\n } = this.props;\n var link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n handleUpdateValues(panel, dataMap) {\n var panelId = LayoutUtils.getIdFromPanel(panel);\n var {\n dh,\n links,\n timeZone\n } = this.props;\n // Map of panel ID to filterMap\n var panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (var i = 0; i < links.length; i += 1) {\n var {\n start,\n end,\n operator\n } = links[i];\n if (start.panelId === panelId && end != null) {\n var {\n panelId: endPanelId,\n columnName,\n columnType\n } = end;\n // Map of column name to column type and filter value\n var filterMap = panelFilterMap.has(endPanelId) ? panelFilterMap.get(endPanelId) : new Map();\n var filterList = filterMap.has(columnName) === true ? filterMap.get(columnName).filterList : [];\n var {\n visibleIndex: startColumnIndex,\n isExpandable,\n isGrouped\n } = dataMap[start.columnName];\n var {\n value\n } = dataMap[start.columnName];\n var text = \"\".concat(value);\n if (value === null && isExpandable && isGrouped) {\n // Clear filter on empty rollup grouping columns\n value = undefined;\n }\n if (columnType != null && TableUtils.isDateType(columnType)) {\n var dateFilterFormatter = new DateTimeColumnFormatter(dh, {\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT\n });\n // The values are Dates for dateType values, not string like everything else\n text = dateFilterFormatter.format(value);\n }\n var filter = {\n operator,\n text,\n value,\n startColumnIndex\n };\n filterList.push(filter);\n filterMap.set(columnName, {\n columnType,\n filterList\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n handlePanelCloned(panel, cloneConfig) {\n var {\n links\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(panel);\n var cloneId = cloneConfig.id;\n if (panelId != null) {\n var linksToAdd = LinkerUtils.cloneLinksForPanel(links, panelId, cloneId);\n this.addLinks(linksToAdd);\n }\n }\n handlePanelDragging(componentId) {\n var {\n links\n } = this.props;\n for (var i = 0; i < links.length; i += 1) {\n var link = links[i];\n var {\n start,\n end\n } = link;\n if (start.panelId === componentId || (end === null || end === void 0 ? void 0 : end.panelId) === componentId) {\n this.setState({\n isDraggingPanel: true\n });\n return;\n }\n }\n }\n handlePanelDropped() {\n this.setState({\n isDraggingPanel: false\n });\n }\n handlePanelClosed(panelId) {\n // Delete links on PanelEvent.CLOSE and PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(\"Panel \".concat(panelId, \" closed, deleting links.\"));\n this.deleteLinksForPanelId(panelId);\n }\n handleLinkSelected(linkId) {\n this.setState({\n selectedIds: new Set([linkId])\n });\n }\n handleLinksUpdated(newLinks) {\n var {\n localDashboardId,\n setDashboardLinks\n } = this.props;\n setDashboardLinks(localDashboardId, newLinks);\n }\n handleLayoutStateChanged() {\n this.forceUpdate();\n }\n handleStateChange() {\n this.forceUpdate();\n }\n handleExited() {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n var {\n localDashboardId,\n setDashboardIsolatedLinkerPanelId\n } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId) {\n var {\n links\n } = this.props;\n for (var i = 0; i < links.length; i += 1) {\n var link = links[i];\n var {\n start,\n end,\n id\n } = link;\n if (start.panelId === panelId || (end === null || end === void 0 ? void 0 : end.panelId) === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n isOverlayShown() {\n var {\n activeTool\n } = this.props;\n return activeTool === ToolType.LINKER;\n }\n updateSelectionValidators() {\n var {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(localDashboardId, this.isColumnSelectionValid);\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n updateLinkInProgressType() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'invalid';\n this.setState(_ref5 => {\n var {\n linkInProgress\n } = _ref5;\n if (linkInProgress !== undefined) {\n return {\n linkInProgress: _objectSpread(_objectSpread({}, linkInProgress), {}, {\n type\n })\n };\n }\n return null;\n });\n }\n isColumnSelectionValid(panel, tableColumn) {\n var {\n linkInProgress\n } = this.state;\n var {\n isolatedLinkerPanelId\n } = this.props;\n if (tableColumn == null) {\n if ((linkInProgress === null || linkInProgress === void 0 ? void 0 : linkInProgress.start) != null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType();\n }\n return false;\n }\n\n // TODO: Use preview/original type property when core/#3358 is completed\n if (!isLinkableColumn(tableColumn)) {\n log.debug2('Column is not filterable', tableColumn.description);\n if ((linkInProgress === null || linkInProgress === void 0 ? void 0 : linkInProgress.start) != null) {\n this.updateLinkInProgressType('invalid');\n }\n return false;\n }\n\n // Link not started yet - no need to update type\n if ((linkInProgress === null || linkInProgress === void 0 ? void 0 : linkInProgress.start) == null) {\n return true;\n }\n var {\n isReversed,\n start\n } = linkInProgress;\n var panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n var end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type\n };\n var type = isReversed !== undefined && isReversed ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId) : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n this.updateLinkInProgressType(type);\n return type !== 'invalid';\n }\n render() {\n var {\n links,\n isolatedLinkerPanelId,\n panelManager\n } = this.props;\n var {\n linkInProgress,\n selectedIds,\n isDraggingPanel\n } = this.state;\n var isLinkOverlayShown = this.isOverlayShown();\n var disabled = linkInProgress != null && linkInProgress.start != null;\n var linkerOverlayMessage = isolatedLinkerPanelId === undefined ? 'Click a column source, then click a column target to create a filter link. The filter comparison operator used by a selected link can be changed. Delete a filter link by clicking the delete button or with alt+click. Click done when finished.' : 'Create a link between the source column button and a table column by clicking on one, then the other. Delete a filter link by clicking the delete button or with alt+click. Click done when finished.';\n return !isDraggingPanel ? /*#__PURE__*/_jsx(CSSTransition, {\n in: isLinkOverlayShown,\n timeout: ThemeExport.transitionMs,\n classNames: \"fade\",\n mountOnEnter: true,\n unmountOnExit: true,\n onExited: this.handleExited,\n children: /*#__PURE__*/_jsx(LinkerOverlayContent, {\n disabled: disabled,\n panelManager: panelManager,\n links: this.getCachedLinks(links, linkInProgress, isolatedLinkerPanelId),\n selectedIds: selectedIds,\n messageText: linkerOverlayMessage,\n onLinkSelected: this.handleLinkSelected,\n onLinkDeleted: this.handleLinkDeleted,\n onAllLinksDeleted: this.handleAllLinksDeleted,\n onLinksUpdated: this.handleLinksUpdated,\n onDone: this.handleDone,\n onCancel: this.handleCancel\n })\n }) : null;\n }\n}\nvar ConnectedLinker = connector(Linker);\nexport default ConnectedLinker;\n//# sourceMappingURL=Linker.js.map","import React from 'react';\nimport { assertIsDashboardPluginProps } from '@deephaven/dashboard';\nimport Linker from \"./linker/Linker.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function LinkerPlugin(props) {\n assertIsDashboardPluginProps(props);\n var {\n id,\n layout,\n panelManager\n } = props;\n return /*#__PURE__*/_jsx(Linker, {\n layout: layout,\n localDashboardId: id,\n panelManager: panelManager\n });\n}\nexport default LinkerPlugin;\n//# sourceMappingURL=LinkerPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport LinkerPlugin from \"./LinkerPlugin.js\";\nvar LinkerPluginConfig = {\n name: 'LinkerPlugin',\n type: PluginType.DASHBOARD_PLUGIN,\n component: LinkerPlugin\n};\nexport default LinkerPluginConfig;\n//# sourceMappingURL=LinkerPluginConfig.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass MarkdownUtils {\n /**\n * Retrieves a new markdown title that does not conflict with the current titles\n * @param usedTitles Markdown titles that are already in use\n * @returns The new title\n */\n static getNewMarkdownTitle(usedTitles) {\n var title = \"\".concat(MarkdownUtils.DEFAULT_TITLE);\n var titleIndex = 0;\n while (usedTitles.indexOf(title) >= 0) {\n titleIndex += 1;\n title = \"\".concat(MarkdownUtils.DEFAULT_TITLE, \"-\").concat(titleIndex);\n }\n return title;\n }\n}\n_defineProperty(MarkdownUtils, \"DEFAULT_TITLE\", 'Note');\n_defineProperty(MarkdownUtils, \"DEFAULT_CONTENT\", '# Markdown Note\\n\\nThis note can be edited using **markdown** for styling.');\nexport default MarkdownUtils;\n//# sourceMappingURL=MarkdownUtils.js.map","import { useCallback, useEffect } from 'react';\nimport shortid from 'shortid';\nimport { assertIsDashboardPluginProps, dehydrate, hydrate, LayoutUtils, useListener } from '@deephaven/dashboard';\nimport { MarkdownPanel } from \"./panels/index.js\";\nimport MarkdownUtils from \"./controls/markdown/MarkdownUtils.js\";\nimport MarkdownEvent from \"./events/MarkdownEvent.js\";\nexport function MarkdownPlugin(props) {\n assertIsDashboardPluginProps(props);\n var {\n id,\n layout,\n panelManager,\n registerComponent\n } = props;\n var dehydrateMarkdown = useCallback(config => {\n var {\n title,\n componentState,\n props: configProps\n } = config;\n var {\n panelState = null\n } = configProps;\n if (componentState != null) {\n ({\n panelState = null\n } = componentState);\n }\n if (title == null || panelState == null || panelState.content == null || panelState.content.length === 0 || panelState.content === MarkdownUtils.DEFAULT_CONTENT) {\n // We don't want to save it if there's no content\n return null;\n }\n return dehydrate(config);\n }, []);\n var handleOpen = useCallback(function () {\n var {\n title = '',\n metadata = {},\n id: panelId = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var openedMarkdowns = panelManager.getOpenedPanelConfigsOfType(MarkdownPanel.COMPONENT);\n var closedMarkdowns = panelManager.getClosedPanelConfigsOfType(MarkdownPanel.COMPONENT);\n var usedTitles = openedMarkdowns.map(markdown => {\n var _markdown$title;\n return (_markdown$title = markdown.title) !== null && _markdown$title !== void 0 ? _markdown$title : '';\n });\n var panelTitle = title != null && title !== '' ? title : MarkdownUtils.getNewMarkdownTitle(usedTitles);\n var content = closedMarkdowns.length > 0 ? null : MarkdownUtils.DEFAULT_CONTENT;\n var config = {\n type: 'react-component',\n component: MarkdownPanel.COMPONENT,\n props: {\n id: panelId,\n metadata,\n panelState: {\n content\n },\n localDashboardId: id\n },\n title: panelTitle,\n id: panelId\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent\n });\n }, [id, layout, panelManager]);\n useEffect(function registerComponentsAndReturnCleanup() {\n var cleanups = [registerComponent(MarkdownPanel.COMPONENT, MarkdownPanel, hydrate, dehydrateMarkdown)];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [dehydrateMarkdown, registerComponent]);\n useListener(layout.eventHub, MarkdownEvent.OPEN, handleOpen);\n return null;\n}\nexport default MarkdownPlugin;\n//# sourceMappingURL=MarkdownPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport MarkdownPlugin from \"./MarkdownPlugin.js\";\nvar MarkdownPluginConfig = {\n name: 'MarkdownPlugin',\n type: PluginType.DASHBOARD_PLUGIN,\n component: MarkdownPlugin\n};\nexport default MarkdownPluginConfig;\n//# sourceMappingURL=MarkdownPluginConfig.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { forwardRef, useMemo } from 'react';\nimport { PandasPanel } from \"./panels/index.js\";\nimport useHydrateGrid from \"./useHydrateGrid.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var PandasPlugin = /*#__PURE__*/forwardRef((props, ref) => {\n var hydrate = useHydrateGrid();\n var {\n localDashboardId\n } = props;\n var hydratedProps = useMemo(() => hydrate(props, localDashboardId), [hydrate, props, localDashboardId]);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return /*#__PURE__*/_jsx(PandasPanel, _objectSpread({\n ref: ref\n }, hydratedProps));\n});\nPandasPlugin.displayName = 'PandasPlugin';\nexport default PandasPlugin;\n//# sourceMappingURL=PandasPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport { dhPandas } from '@deephaven/icons';\nimport PandasPlugin from \"./PandasPlugin.js\";\nvar PandasPluginConfig = {\n name: 'PandasPlugin',\n title: 'Pandas',\n type: PluginType.WIDGET_PLUGIN,\n // TODO: #1573 Replace with actual base component and not just the panel plugin\n component: PandasPlugin,\n panelComponent: PandasPlugin,\n supportedTypes: 'pandas.DataFrame',\n icon: dhPandas\n};\nexport default PandasPluginConfig;\n//# sourceMappingURL=PandasPluginConfig.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { useMemo, useCallback, useEffect, forwardRef, useState } from 'react';\nimport shortid from 'shortid';\nimport { assertIsDashboardPluginProps, PanelEvent, LayoutUtils, useListener, canHaveRef } from '@deephaven/dashboard';\nimport { isWidgetPlugin, usePlugins } from '@deephaven/plugin';\nimport Log from '@deephaven/log';\nimport { WidgetPanel } from \"./panels/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('WidgetLoaderPlugin');\nexport function WrapWidgetPlugin(plugin) {\n var _plugin$component$dis;\n function Wrapper(props, ref) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var C = plugin.component;\n var {\n metadata\n } = props;\n var [componentPanel, setComponentPanel] = useState();\n var refCallback = useCallback(e => {\n setComponentPanel(e);\n if (typeof ref === 'function') {\n ref(e);\n } else if (ref != null) {\n // eslint-disable-next-line no-param-reassign\n ref.current = e;\n }\n }, [ref]);\n var hasRef = canHaveRef(C);\n return /*#__PURE__*/_jsxs(WidgetPanel, _objectSpread(_objectSpread({\n widgetName: metadata === null || metadata === void 0 ? void 0 : metadata.name,\n widgetType: plugin.title,\n componentPanel: componentPanel\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, props), {}, {\n children: [hasRef ? /*#__PURE__*/_jsx(C\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, props), {}, {\n ref: refCallback\n })) : /*#__PURE__*/_jsx(C\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread({}, props)), \")\"]\n }));\n }\n Wrapper.displayName = \"WidgetLoaderPlugin(\".concat((_plugin$component$dis = plugin.component.displayName) !== null && _plugin$component$dis !== void 0 ? _plugin$component$dis : plugin.name, \")\");\n return /*#__PURE__*/forwardRef(Wrapper);\n}\n\n/**\n * Widget to automatically open any supported WidgetPlugin types as panels\n * if the widget is emitted from the server as the result of executed code.\n *\n * Does not open panels for widgets that are not supported by any plugins.\n * Does not open panels for widgets that are a component of a larger widget or UI element.\n *\n * @param props Dashboard plugin props\n * @returns React element\n */\nexport function WidgetLoaderPlugin(props) {\n var plugins = usePlugins();\n var supportedTypes = useMemo(() => {\n var typeMap = new Map();\n plugins.forEach(plugin => {\n if (!isWidgetPlugin(plugin)) {\n return;\n }\n [plugin.supportedTypes].flat().forEach(supportedType => {\n if (supportedType != null && supportedType !== '') {\n if (typeMap.has(supportedType)) {\n var _typeMap$get;\n log.warn(\"Multiple WidgetPlugins handling type \".concat(supportedType, \". Replacing \").concat((_typeMap$get = typeMap.get(supportedType)) === null || _typeMap$get === void 0 ? void 0 : _typeMap$get.name, \" with \").concat(plugin.name, \" to handle \").concat(supportedType));\n }\n typeMap.set(supportedType, plugin);\n }\n });\n });\n return typeMap;\n }, [plugins]);\n assertIsDashboardPluginProps(props);\n var {\n id,\n layout,\n registerComponent\n } = props;\n var handlePanelOpen = useCallback(_ref => {\n var _widget$title;\n var {\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget\n } = _ref;\n var {\n id: widgetId,\n type\n } = widget;\n var name = (_widget$title = widget.title) !== null && _widget$title !== void 0 ? _widget$title : widget.name;\n var plugin = supportedTypes.get(type);\n if (plugin == null) {\n return;\n }\n var metadata = {\n id: widgetId,\n name,\n type\n };\n var panelProps = {\n localDashboardId: id,\n metadata,\n fetch\n };\n var config = {\n type: 'react-component',\n component: plugin.name,\n props: panelProps,\n title: name,\n id: panelId\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n dragEvent\n });\n }, [id, layout, supportedTypes]);\n useEffect(() => {\n var deregisterFns = [...new Set(supportedTypes.values())].map(plugin => {\n var {\n panelComponent\n } = plugin;\n if (panelComponent == null) {\n return registerComponent(plugin.name, WrapWidgetPlugin(plugin));\n }\n return registerComponent(plugin.name, panelComponent);\n });\n return () => {\n deregisterFns.forEach(deregister => deregister());\n };\n });\n\n /**\n * Listen for panel open events so we know when to open a panel\n */\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n return null;\n}\nexport default WidgetLoaderPlugin;\n//# sourceMappingURL=WidgetLoaderPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport WidgetLoaderPlugin from \"./WidgetLoaderPlugin.js\";\nvar WidgetLoaderPluginConfig = {\n name: 'WidgetLoaderPlugin',\n type: PluginType.DASHBOARD_PLUGIN,\n component: WidgetLoaderPlugin\n};\nexport default WidgetLoaderPluginConfig;\n//# sourceMappingURL=WidgetLoaderPluginConfig.js.map","import PropTypes from 'prop-types';\nvar Panel = PropTypes.shape({\n state: PropTypes.shape({\n panelState: PropTypes.shape({})\n })\n});\nvar LinkPoint = PropTypes.shape({\n panelId: PropTypes.string.isRequired,\n columnName: PropTypes.string.isRequired,\n columnType: PropTypes.string.isRequired\n});\nvar LinkPointUntyped = PropTypes.shape({\n panelId: PropTypes.string.isRequired,\n columnName: PropTypes.string.isRequired\n});\nvar Link = PropTypes.shape({\n start: LinkPointUntyped,\n end: LinkPointUntyped,\n id: PropTypes.string,\n isReversed: PropTypes.bool\n});\nvar Links = PropTypes.arrayOf(Link);\nvar User = PropTypes.shape({\n name: PropTypes.string.isRequired,\n operateAs: PropTypes.string.isRequired,\n groups: PropTypes.arrayOf(PropTypes.string).isRequired,\n permissions: PropTypes.shape({\n canUsePanels: PropTypes.bool.isRequired,\n canCopy: PropTypes.bool.isRequired,\n canDownloadCsv: PropTypes.bool.isRequired,\n canLogout: PropTypes.bool.isRequired\n }).isRequired\n});\nvar UIPropTypes = Object.freeze({\n LinkPoint,\n Link,\n Links,\n Panel,\n User\n});\nexport default UIPropTypes;\n//# sourceMappingURL=UIPropTypes.js.map","import PropTypes from 'prop-types';\nvar nullableBoolean = (props, propName) => props[propName] === null ? null : PropTypes.bool;\nvar nullableString = (props, propName) => props[propName] === null ? null : PropTypes.string;\nvar CommonPropTypes = Object.freeze({\n nullableBoolean,\n nullableString\n});\nexport default CommonPropTypes;\n//# sourceMappingURL=CommonPropTypes.js.map"],"names":["useDashboardPanel","_ref","dashboardProps","componentName","component","supportedTypes","hydrate","dehydrate","id","layout","registerComponent","handlePanelOpen","useCallback","_ref2","_widget$title","dragEvent","fetch","panelId","shortid","widget","widgetId","type","name","isSupportedType","metadata","props","config","root","LayoutUtils","usePanelRegistration","useListener","PanelEvent","_defineProperty","obj","key","value","_toPropertyKey","arg","_toPrimitive","input","hint","prim","res","ChartEvent","ChartEvent$1","IrisGridEvent","IrisGridEvent$1","PandasEvent","PandasEvent$1","WidgetPanelTooltip","widgetType","widgetName","glContainer","description","children","panelTitle","_jsxs","_jsx","CopyButton","_Fragment","GLPropTypes","PropTypes","WidgetPanel","PureComponent","memoize","showTabTooltip","copyToClipboard","errorMessage","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","_widgetName","onSessionClose","onSessionOpen","className","componentPanel","isLoaded","isLoading","glEventHub","isDisconnected","isClonable","isRenamable","renderTabTooltip","onClearAllFilters","onHide","onFocus","onBlur","onResize","onShow","onTabBlur","onTabFocus","onTabClicked","isPanelInactive","doRenderTabTooltip","additionalActions","ContextActions","Panel","classNames","WidgetPanel$1","ChartFilterOverlay","columnMap","inputFilterMap","linkedColumnMap","onAdd","onOpenLinker","waitingFilterMap","waitingInputMap","inputMessage","useMemo","waitingColumns","needsInputFilterValue","columnName","needsLinkValue","columnsText","TextUtils","item","columns","handleAddClick","event","handleOpenLinker","isWaitingFilters","isWaitingInput","column","isColumnWaiting","icon","vsWarning","vsPass","FontAwesomeIcon","ButtonOld","ChartColumnSelectorOverlay","onColumnSelected","_onMouseEnter","onMouseLeave","SocketedButton","isChartPanelTableMetadata","isGLChartPanelState","panelState","settings","tableSettings","isChartPanelDehydratedProps","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","i","source","log","Log","UPDATE_MODEL_DEBOUNCE","hasInputFilter","panel","hasPanelState","ChartPanel","Component","_props$containerRef","isFilterRequired","filterMap","filter","inputFilters","inputFilter","links","link","assertNotNull","columnSelectionValidator","debounce","React","Pending","filterValueMap","prevProps","prevState","model","isLinked","isFigureChartModel","makeModel","resolved","table","dh","isActive","isHidden","localDashboardId","setActiveTool","setDashboardIsolatedLinkerPanelId","ToolType","prevModel","error","PromiseUtils","ChartUtils","figure","sourcePanel","sourcePanelState","IrisGridUtils","update","prevSettings","InputFilterEvent","_element$getBoundingC","element","rect","x","y","filterMapParam","state","_updatedFilterMap","updatedFilterMap","_ref3","columnType","filterList","_inputFilterMap$get","filterValue","inputFilterValue","prevInputFilters","deletedInputFilters","prevInputFilter","changedInputFilters","forceUpdate","needsUpdate","linkValue","_ref4","defaultTitle","filterTitle","_ref5","newState","isLinkerActive","Plotly","isWaitingForFilter","isSelectingColumn","Chart","CSSTransition","ThemeExport","mapStateToProps","ownProps","sourcePanelId","panelTableMap","getTableMapForDashboard","openedPanelMap","getOpenedPanelMapForDashboard","activeTool","getActiveTool","isolatedLinkerPanelId","getIsolatedLinkerPanelIdForDashboard","getColumnSelectionValidatorForDashboard","getInputFiltersForDashboard","getLinksForDashboard","getSettings","ConnectedChartPanel","connect","setActiveToolAction","setDashboardIsolatedLinkerPanelIdAction","ChartPanel$1","UPDATE_DEBOUNCE","DropdownFilter","TableUtils","selectedColumn","selectedIndex","options","columnItem","index","values","val","memoizee","shortType","onChange","isValueShown","_column","_isValueShown","_value","allColumns","valueIndex","_this$dropdownRef$cur","oldValue","oldIsValueShown","_source$columnName","disableLinking","onSourceMouseEnter","onSourceMouseLeave","settingsError","disableCancel","columnSelectionDisabled","sourceButtonLabel","columnOptions","valueOptions","selectedOption","disableSave","isFlipped","sourceColumnId","filterColumnId","CardFlip","Button","vsGear","DropdownFilter$1","DROPDOWN_FILTER_DEBOUNCE","dashboardLinks","getColumnsForDashboard","getApi","connector","DropdownFilterPanel","rawValues","formatter","_link$end","_panelTableMap$get","_table$columns$find","FormatterUtils","DateTimeColumnFormatter","_name","_type","timestamp","Formatter","sourceTable","valuesTable","prevSource","prevSourceTable","sourceSize","panelLinks","sendUpdate","_timestamp","prevTimestamp","wasFlipped","skipUpdate","isFlip","_ref6","detail","_this$dropdownFilterR","_this$dropdownFilterR2","_this$dropdownFilterR3","_this$dropdownFilterR4","_this$getSource","excludePanelIds","sorts","filters","valuesColumn","columnFormats","deepEqual","_ref7","rows","row","settingsErrorMessage","panelErrorMessage","formattedValues","ConnectedDropdownFilterPanel","DropdownFilterPanel$1","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","_document$querySelect","overlay","memoizeOne","filterSets","renameSet","modifiedFilterSets","selectedId","isEmptyList","editId","onUpdateSets","getFilterState","panels","nameInputValue","_nameInputValue$trim","trimmedName","title","_nameInputValue$trim2","restoreFullState","nameInputError","namedFilterSet","updatedModifiedFilterSets","prevFilterSets","newSelectedIndex","newSelectedId","selectedSetIndex","_ref8","_ref9","selectedSet","_ref10","onApply","filterSet","_ref11","_this$renameInputRef$","isNameInputScreen","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","vsCircleLargeFilled","vsDeviceCamera","dhNewCircleLargeFilled","updateSetIcon","vsArrowSmallUp","vsSave","vsCircleSlash","RadioGroup","RadioItem","_ref12","vsEdit","vsTrash","_ref13","dhRefresh","FilterSetManager$1","IrisGridPanelTooltip","_model$rowCount","_model$pendingRowCoun","_model$floatingBottom","_model$floatingTopRow","_model$columnCount","rowCount","formattedRowCount","columnCount","formattedcolumnCount","isLegacyIrisGridPanelMetadata","irisGridPanelMetadata","isIrisGridPanelMetadata","DEBOUNCE_PANEL_STATE_UPDATE","PLUGIN_COMPONENTS","IrisGrid","IrisGridTableModel","ContextMenuRoot","getTableNameFromMetadata","IrisGridPanel","pluginFetchColumns","columnSet","start","Plugin","user","workspace","pluginState","isIrisGridTableModelTemplate","deprecatedProps","isSelectingPartition","partition","partitionColumn","advancedSettings","advancedFilters","customColumnFormatMap","isFilterBarShown","quickFilters","customColumns","reverseType","rollupConfig","showSearchBar","searchValue","selectDistinctColumns","selectedSearchColumns","invertSearchColumns","userColumnWidths","userRowHeights","aggregationSettings","pendingDataMap","frozenColumns","conditionalFormats","columnHeaderGroups","movedColumns","movedRows","isStuckToBottom","isStuckToRight","irisGridPanelState","irisGridState","gridState","onPanelStateUpdate","oldPanelState","metrics","_panelState","AdvancedSettings","_","modelParam","irisGridStateOverrides","modelQueue","_irisGridState","m","modelChange","_this$irisGridUtils$g","_this$irisGridUtils","pluginFilters","data","_this$pluginRef$curre","_this$pluginRef$curre2","_this$pluginRef$curre3","tableColumn","onStateChange","isModelReady","tableName","command","ConsoleEvent","dataMap","loadPlugin","_pluginName","irisGrid","IrisGridModel","_gridWrapper$getBound","_allColumnXs$get","_allColumnWidths$get","gridWrapper","columnHeaderHeight","allColumnXs","allColumnWidths","right","columnHeaderMaxDepth","columnIndex","visibleIndex","columnX","columnWidth","indexedQuickFilters","indexedAdvancedFilters","overrides","gridStateOverrides","originalIrisGridStateOverrides","_gridState","_irisGridState2","savedQuickFilters","savedAdvancedFilters","_this$irisGrid$curren","_this$irisGrid$curren2","grid","_model$description","_panelState$pluginSta","getDownloadWorker","theme","childrenContent","permissions","canCopy","canDownloadCsv","DEFAULT_DASHBOARD_ID","getUser","getWorkspace","ConnectedIrisGridPanel","IrisGridPanel$1","InputFilter","propColumn","inputLength","titleLabel","InputFilter$1","INPUT_FILTER_DEBOUNCE","InputFilterPanel","_this$inputFilterRef$","_this$inputFilterRef$2","ConnectedInputFilterPanel","InputFilterPanel$1","hasSetPanelState","FilterSetManagerPanel","configs","dashboardOpenedPanelMap","_state","setDashboardFilterSets","prevAdvancedFilters","prevQuickFilters","inputFilterState","getFilterSetsForDashboard","ConnectedFilterSetManagerPanel","setDashboardFilterSetsAction","FilterSetManagerPanel$1","MarkdownContainer","isEditing","onDoubleClick","MarkdownStartPage","markdown","onDelete","closedMarkdowns","onOpen","onCreate","isDeleteModalShown","toBeDeleted","Modal","ModalHeader","ModalBody","ModalFooter","MarkdownStartPage$1","renderMarkdown","language","Code","child","MarkdownEditor","content","onEditorInitialized","container","Editor","Markdown","MarkdownPanel","closedPanels","clickPositionY","markdownEditorContainer","_this$editor$getModel","_this$editor$getModel2","contentTop","contentScrollTop","contentScrollHeight","totalLines","lineToFocus","dbClickPositionY","editor","_this$editor","isStartPageShown","markdownEditor","getClosedPanelsForDashboard","ConnectedMarkdownPanel","MarkdownPanel$1","_objectDestructuringEmpty","_extends","PandasPanel","_this$irisGridRef$cur","_this$buttonRef$curre","_this$irisGridRef$cur2","_this$irisGridRef$cur3","_this$irisGridRef$cur4","shouldFocusGrid","_this$props","PandasPanel$1","asyncGeneratorStep","gen","resolve","reject","_next","_throw","info","_asyncToGenerator","fn","self","args","err","MockFileStorageTable","items","search","path","expanded","isDirectory","sortedRanges","viewport","_this","_this$onUpdateCallbac","loadedViewportData","isReversed","callback","MockFileStorageTable$1","MockFileStorage","file","newName","_this2","_this3","FileUtils","_this4","allItems","FileNotFoundError","itemDetails","MockFileStorage$1","createChartModel","_x","_x2","_x3","_x4","_createChartModel","connection","figureName","_metadata$name","_definition","ChartModelFactory","definition","getTimeZone","store","ChartPlugin","assertIsDashboardPluginProps","useApi","useConnection","hydrateProps","ChartPluginConfig","PluginType","ChartPluginConfig$1","ChartBuilderPlugin","handleCreateChart","ChartBuilderPluginConfig","ChartBuilderPluginConfig$1","flattenArray","accumulator","currentValue","FilterPlugin","dispatch","useDispatch","panelColumns","useState","panelFilters","panelTables","a","b","aName","bName","aType","bType","array","tableMap","updateDashboardData","handleColumnsChanged","handleFiltersChanged","handleTableChanged","handlePanelUnmount","handleOpenDropdown","focusElement","createNewStack","handleOpenInput","handleOpenFilterSetManager","useEffect","cleanups","cleanup","FilterPluginConfig","FilterPluginConfig$1","useLoadTablePlugin","plugins","usePlugins","plugin","pluginModule","isTablePlugin","isLegacyTablePlugin","useHydrateGrid","_hydrateProps$metadat","_makeModel","IrisGridModelFactory","GridPlugin","GridPluginConfig","GridPluginConfig$1","isLinkableFromPanel","p","isLinkablePanel","isLinkableColumn","_column$description","LinkerUtils","end","_LinkerUtils$ALLOWED_","isCompatibleComponent","startColumnType","endColumnType","isCompatibleType","cloneId","clonedLinks","LinkerUtils$1","DROOP","DROOP_EXPONENT","TRIANGLE_HEIGHT","TRIANGLE_BASE","TRIANGLE_TIP","TRIANGLE_HYPOTENUSE","TRIANGLE_THETA","CLIP_RADIUS","HALF_PI","LinkerLink","r","filterType","getLabelForNumberFilter","getLabelForTextFilter","getLabelForDateFilter","FilterType","e","linkId","onOperatorChanged","filterTypes","symbol","onClick","operator","isSelected","x1","y1","x2","y2","isHovering","len","theta","xMult","yMult","maxX","maxY","minX","minY","qx","qy","selectClipPath","clipPathId","endTheta","t2theta","t3theta","tx1","ty1","tx2","ty2","tx3","ty3","points","midX","midY","dMidX","dMidY","slopeAtMid","DISTANCE_FROM_MID","topOffsetX","topOffsetY","bottomOffsetX","bottomOffsetY","showOperator","vsTriangleDown","DropdownMenu","LinkerLink$1","LinkerOverlayContent","linkPoint","panelManager","coordinate","onLinksUpdated","newLinks","dialog","dialogX","clamp","dialogY","offset","isDragging","selectedIds","onLinkDeleted","onCancel","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","mouse","mode","visibleLinks","_mouse$x","_mouse$y","tmpX","tmpY","vsGripper","Tooltip","GLOBAL_SHORTCUTS","LinkerOverlayContent$1","mapState","setDashboardLinksAction","addDashboardLinksAction","deleteDashboardLinksAction","setDashboardColumnSelectionValidatorAction","Linker","linkInProgress","isolateForPanelId","combinedLinks","_link$start","eventHub","_link$start2","_link$end2","linksToDelete","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","newLink","existingLinkPanelId","panelLinkEnd","existingLinkEnd","existingLinkStart","_linksToDelete","panelLinkStart","_newLink","endPanel","addDashboardLinks","clearAll","setDashboardLinks","deleteDashboardLinks","isolatedLinks","_link$start3","_link$end3","l","timeZone","panelFilterMap","endPanelId","startColumnIndex","isExpandable","isGrouped","text","dateFilterFormatter","DateUtils","cloneConfig","linksToAdd","componentId","setDashboardColumnSelectionValidator","isDraggingPanel","isLinkOverlayShown","linkerOverlayMessage","ConnectedLinker","Linker$1","LinkerPlugin","LinkerPluginConfig","LinkerPluginConfig$1","MarkdownUtils","usedTitles","titleIndex","MarkdownUtils$1","MarkdownPlugin","dehydrateMarkdown","componentState","configProps","handleOpen","openedMarkdowns","_markdown$title","MarkdownEvent","MarkdownPluginConfig","MarkdownPluginConfig$1","PandasPlugin","forwardRef","ref","hydratedProps","PandasPlugin$1","PandasPluginConfig","dhPandas","PandasPluginConfig$1","WrapWidgetPlugin","_plugin$component$dis","Wrapper","C","setComponentPanel","refCallback","hasRef","canHaveRef","WidgetLoaderPlugin","typeMap","isWidgetPlugin","supportedType","_typeMap$get","panelProps","deregisterFns","deregister","WidgetLoaderPluginConfig","WidgetLoaderPluginConfig$1","LinkPoint","LinkPointUntyped","Link","Links","User","UIPropTypes","UIPropTypes$1","nullableBoolean","propName","nullableString","CommonPropTypes","CommonPropTypes$1"],"mappings":"i8CASO,SAASA,GAAkBC,EAAM,CACtC,GAAI,CACF,eAAAC,EACA,cAAAC,EACA,UAAAC,EACA,eAAAC,EACA,QAAAC,EACA,UAAAC,CACD,EAAGN,EACA,CACF,GAAAO,EACA,OAAAC,EACA,kBAAAC,CACD,EAAGR,EACAS,EAAkBC,EAAW,YAACC,GAAS,CACzC,IAAIC,EACA,CACF,UAAAC,EACA,MAAAC,EACA,QAAAC,EAAUC,GAAQ,SAAU,EAC5B,OAAAC,CACD,EAAGN,EACA,CACF,GAAIO,EACJ,KAAAC,CACD,EAAGF,EACAG,GAAQR,EAAgBK,EAAO,SAAW,MAAQL,IAAkB,OAASA,EAAgBK,EAAO,KACpGI,EAAkB,MAAM,QAAQlB,CAAc,GAAKA,EAAe,SAASgB,CAAI,GAAKA,IAAShB,EACjG,GAAKkB,EAIL,KAAIC,EAAW,CACb,GAAIJ,EACJ,KAAAE,EACA,KAAAD,CACN,EACQI,EAAQ,CACV,iBAAkBjB,EAClB,SAAAgB,EACA,MAAAR,CACN,EACQV,GAAW,OACbmB,EAAQnB,EAAQmB,EAAOjB,CAAE,GAE3B,IAAIkB,EAAS,CACX,KAAM,kBACN,UAAWvB,EACX,MAAAsB,EACA,MAAOH,EACP,GAAIL,CACV,EACQ,CACF,KAAAU,CACD,EAAGlB,EACJmB,EAAY,cAAc,CACxB,KAAAD,EACA,OAAAD,EACA,UAAAX,CACN,CAAK,EACL,EAAK,CAACZ,EAAeG,EAASE,EAAIC,EAAQJ,CAAc,CAAC,EAKvDwB,GAAqBnB,EAAmBN,EAAWE,EAASC,CAAS,EAKrEuB,GAAYrB,EAAO,SAAUsB,EAAW,KAAMpB,CAAe,CAC/D,CChFA,SAASqB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CACzX,MAAMI,EAAW,CAAE,CACnBX,GAAgBW,GAAY,OAAQ,iBAAiB,EACrDX,GAAgBW,GAAY,QAAS,kBAAkB,EACvDX,GAAgBW,GAAY,kBAAmB,4BAA4B,EAC3E,MAAAC,GAAeD,GCPf,SAASX,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAClX,MAAMM,EAAc,CAAE,CAC7Bb,GAAgBa,GAAe,YAAa,yBAAyB,EACrEb,GAAgBa,GAAe,aAAc,0BAA0B,EACvEb,GAAgBa,GAAe,gBAAiB,6BAA6B,EAC7Eb,GAAgBa,GAAe,kBAAmB,+BAA+B,EACjFb,GAAgBa,GAAe,gBAAiB,6BAA6B,EAC7Eb,GAAgBa,GAAe,eAAgB,4BAA4B,EAC3E,MAAAC,GAAeD,GCVf,SAASb,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CACzX,MAAMQ,EAAY,CAAE,CACpBf,GAAgBe,GAAa,OAAQ,kBAAkB,EACvDf,GAAgBe,GAAa,QAAS,mBAAmB,EACzD,MAAAC,GAAeD,GCEf,SAASE,GAAmBxB,EAAO,CACjC,GAAI,CACF,WAAAyB,EACA,WAAAC,EACA,YAAAC,EACA,YAAAC,EACA,SAAAC,CACD,EAAG7B,EACA8B,EAAa3B,EAAY,sBAAsBwB,CAAW,EAC9D,OAAoBI,EAAAA,KAAM,MAAO,CAC/B,UAAW,6BACX,SAAU,CAAcA,EAAK,KAAC,OAAQ,CACpC,UAAW,oBACX,SAAU,CAACN,EAAY,OAAO,CACpC,CAAK,EAAgBM,EAAK,KAAC,MAAO,CAC5B,UAAW,2BACX,SAAU,CAAcC,EAAI,IAAC,OAAQ,CACnC,UAAW,mBACX,SAAUN,CAClB,CAAO,EAAgBM,EAAI,IAACC,GAAY,CAChC,UAAW,mBACX,QAAS,YACT,KAAMP,CACd,CAAO,CAAC,CACH,CAAA,EAAGA,IAAeI,GAA2BC,EAAAA,KAAMG,EAAAA,SAAW,CAC7D,SAAU,CAAcF,EAAI,IAAC,OAAQ,CACnC,UAAW,oBACX,SAAU,cAClB,CAAO,EAAgBA,EAAI,IAAC,OAAQ,CAC5B,UAAW,mBACX,SAAUF,CAClB,CAAO,CAAC,CACR,CAAK,EAAGF,GAA4BI,EAAI,IAAC,MAAO,CAC1C,UAAW,0BACX,SAAUJ,CACX,CAAA,EAAGC,CAAQ,CAChB,CAAG,CACH,CACAL,GAAmB,UAAY,CAC7B,YAAaW,GAAY,UAAU,WACnC,WAAYC,EAAU,OACtB,WAAYA,EAAU,OACtB,YAAaA,EAAU,OACvB,SAAUA,EAAU,IACtB,EACAZ,GAAmB,aAAe,CAChC,WAAY,GACZ,WAAY,GACZ,YAAa,KACb,SAAU,IACZ,EC1DA,SAASjB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAczX,MAAMuB,WAAoBC,EAAAA,aAAc,CACtC,YAAYtC,EAAO,CACjB,MAAMA,CAAK,EACXO,GAAgB,KAAM,4BAA6BgC,EAAQ,CAACC,EAAgBb,EAAaF,EAAYC,EAAYE,IAAgBY,EAAiB,IAAmBR,EAAAA,IAAKR,GAAoB,CAC5L,YAAaG,EACb,WAAYF,EACZ,WAAYC,EACZ,YAAaE,CACnB,CAAK,EAAI,IAAI,CAAC,EACV,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,MAAQ,CACX,qBAAsB,GACtB,oBAAqB,GACrB,qBAAsB,GACtB,sBAAuB,GACvB,gBAAiB,EACvB,CACG,CACD,gBAAiB,CACf,GAAI,CACF,WAAAF,CACN,EAAQ,KAAK,MACTe,GAAgBf,CAAU,CAC3B,CACD,iBAAkB,CAChB,GAAI,CACF,aAAAgB,CACN,EAAQ,KAAK,MACL,CACF,qBAAAC,EACA,oBAAAC,EACA,qBAAAC,EACA,sBAAAC,CACN,EAAQ,KAAK,MACT,GAAIJ,EACF,MAAO,GAAG,OAAOA,CAAY,EAE/B,GAAIC,GAAwBC,GAAuBE,EACjD,MAAO;AAAA,iCAET,GAAIH,GAAwBC,EAC1B,MAAO,4BAET,GAAIA,EAAqB,CACvB,GAAI,CACF,WAAAlB,EACA,WAAAD,CACR,EAAU,KAAK,MACT,MAAO,aAAc,OAAOC,EAAY;AAAA,CAAe,EAAE,OAAOD,EAAY,sBAAsB,EAEpG,GAAIoB,EAAsB,CACxB,GAAI,CACF,WAAYE,CACpB,EAAU,KAAK,MACT,MAAO,GAAG,OAAOA,EAAa,kBAAkB,EAGnD,CACD,qBAAsB,CACpB,GAAI,CACF,eAAAC,CACN,EAAQ,KAAK,MAET,KAAK,SAAS,CACZ,oBAAqB,GACrB,sBAAuB,EAC7B,CAAK,EACDA,EAAe,GAAG,SAAS,CAC5B,CACD,qBAAsB,CACpB,GAAI,CACF,cAAAC,CACN,EAAQ,KAAK,MACTA,EAAc,GAAG,SAAS,CAC3B,CACD,QAAS,CACP,GAAI,CACF,SAAApB,EACA,UAAAqB,EACA,eAAAC,EACA,SAAAC,EACA,UAAAC,EACA,YAAA1B,EACA,WAAA2B,EACA,eAAAC,EACA,WAAAC,EACA,YAAAC,EACA,eAAAjB,EACA,iBAAAkB,EACA,WAAAjC,EACA,WAAAC,EACA,YAAAE,EACA,kBAAA+B,EACA,OAAAC,EACA,QAAAC,EACA,OAAAC,EACA,SAAAC,EACA,OAAAC,EACA,UAAAC,EACA,WAAAC,EACA,aAAAC,CACN,EAAQ,KAAK,MACL,CACF,oBAAAvB,EACA,qBAAAC,EACA,gBAAAuB,CACN,EAAQ,KAAK,MACL1B,EAAe,KAAK,kBACpB2B,EAAqBX,GAA8E,KAAK,0BAA0BlB,EAAgBb,EAAaF,EAAYC,EAAYE,CAAW,EAClM0C,EAAoB,CAAC,CACvB,MAAO,QAAQ,OAAO7C,EAAY,OAAO,EACzC,MAAO8C,GAAe,OAAO,OAC7B,MAAO,GACP,OAAQ,KAAK,cACnB,CAAK,EACD,OAAoBxC,EAAAA,KAAMyC,GAAO,CAC/B,UAAWC,GAAWvB,EAAW,CAC/B,aAAcN,GAAuBC,GAAwBU,EAC7D,SAAUa,CAClB,CAAO,EACD,eAAgBjB,EAChB,YAAaxB,EACb,WAAY2B,EACZ,kBAAmBK,EACnB,OAAQC,EACR,QAASC,EACT,OAAQC,EACR,SAAUC,EACV,OAAQC,EACR,eAAgB,KAAK,oBACrB,cAAe,KAAK,oBACpB,UAAWC,EACX,WAAYC,EACZ,aAAcC,EACd,iBAAkBE,EAClB,aAAc3B,EACd,SAAUU,EACV,UAAWC,EACX,WAAYG,EACZ,YAAaC,EACb,kBAAmBa,EACnB,SAAU,CAACzC,EAAUuC,GAAgCpC,EAAAA,IAAK,MAAO,CAC/D,UAAW,sBACnB,CAAO,CAAC,CACR,CAAK,CACF,CACH,CACAzB,GAAgB8B,GAAa,eAAgB,CAC3C,UAAW,GACX,aAAc,KACd,WAAY,GACZ,eAAgB,GAChB,UAAW,GACX,SAAU,GACV,YAAa,GACb,eAAgB,GAChB,WAAY,SACZ,WAAY,SACZ,iBAAkB,KAClB,YAAa,GACb,QAAS,IAAA,GACT,OAAQ,IAAA,GACR,OAAQ,IAAA,GACR,kBAAmB,IAAA,GACnB,SAAU,IAAA,GACV,eAAgB,IAAA,GAChB,cAAe,IAAA,GACf,OAAQ,IAAA,GACR,UAAW,IAAA,GACX,WAAY,IAAA,GACZ,aAAc,IAAA,EAChB,CAAC,EACD,MAAAqC,GAAerC,GCnLf,SAASsC,GAAmBnG,EAAM,CAChC,GAAI,CACF,UAAAoG,EACA,eAAAC,EACA,gBAAAC,EACA,MAAAC,EACA,aAAAC,EACA,iBAAAC,EACA,gBAAAC,CACD,EAAG1G,EACA2G,EAAeC,EAAAA,QAAQ,IAAM,CAC/B,IAAIC,EAAiB,MAAM,KAAKH,EAAgB,KAAM,CAAA,EAClDI,EAAwBD,EAAe,KAAKE,GAAcV,EAAe,IAAIU,CAAU,GAAK,IAAI,EAChGC,EAAiBH,EAAe,KAAKE,GAAcT,EAAgB,IAAIS,CAAU,GAAK,IAAI,EAC1FE,EAAcC,GAAU,KAAKL,EAAe,IAAIM,GAAQ,IAAK,OAAOA,EAAM,GAAI,CAAC,CAAC,EACpF,OAAIL,GAAyB,MAAQA,GAAyBE,GAAkB,MAAQA,EAC/E,2DAA2D,OAAOC,CAAW,EAElFH,GAAyB,MAAQA,EAC5B,kCAAkC,OAAOG,CAAW,EAEtD,2DAA2D,OAAOA,CAAW,CACrF,EAAE,CAACZ,EAAgBC,EAAiBI,CAAe,CAAC,EACjDU,EAAUR,EAAAA,QAAQ,IAAM,MAAM,KAAKR,EAAU,QAAQ,EAAG,CAACA,CAAS,CAAC,EACnEiB,EAAiB1G,EAAW,YAAC2G,GAAS,CACxCA,EAAM,gBAAe,EACrBA,EAAM,eAAc,EACpBf,EAAM,MAAM,KAAKE,EAAiB,OAAM,CAAE,CAAC,CAC/C,EAAK,CAACF,EAAOE,CAAgB,CAAC,EACxBc,EAAmB5G,EAAW,YAAC2G,GAAS,CAC1CA,EAAM,gBAAe,EACrBA,EAAM,eAAc,EACpBd,GACJ,EAAK,CAACA,CAAY,CAAC,EACbgB,EAAmBf,EAAiB,KAAO,EAC3CgB,EAAiB,CAACD,GAAoBd,EAAgB,KAAO,EACjE,OAAoBlD,EAAAA,IAAK,MAAO,CAC9B,UAAW,2CACX,SAAuBD,EAAK,KAAC,MAAO,CAClC,UAAW0C,GAAW,2DAA4D,CAChF,8BAA+BuB,CACvC,EAAS,CACD,6BAA8BC,CACtC,CAAO,EACD,SAAU,CAACD,GAAiCjE,EAAK,KAACG,WAAW,CAC3D,SAAU,CAAcF,EAAI,IAAC,MAAO,CAClC,UAAW,eACX,SAAU,uHACpB,CAAS,EAAgBA,EAAI,IAAC,MAAO,CAC3B,UAAW,sBACX,SAAU4D,EAAQ,IAAIM,GAAU,CAC9B,IAAIC,EAAkBlB,EAAiB,IAAIiB,EAAO,IAAI,EAClDE,EAAOD,EAAkBE,GAAYC,GACzC,OAAoBvE,EAAAA,KAAM,MAAO,CAC/B,UAAW0C,GAAW,sBAAuB,CAC3C,aAAc0B,CAC9B,CAAe,EACD,SAAU,CAAcnE,EAAI,IAACuE,GAAiB,CAC5C,KAAMH,CACtB,CAAe,EAAGF,EAAO,IAAI,CAC7B,EAAeA,EAAO,IAAI,CAC1B,CAAW,CACX,CAAS,EAAgBnE,EAAK,KAAC,MAAO,CAC5B,SAAU,CAAcC,EAAI,IAACwE,GAAW,CACtC,QAASX,EACT,UAAW,cACX,SAAU,mBACtB,CAAW,EAAgB7D,EAAI,IAACwE,GAAW,CAC/B,QAAST,EACT,UAAW,cACX,SAAU,kBACtB,CAAW,CAAC,CACZ,CAAS,CAAC,CACV,CAAO,EAAGE,GAA+BlE,EAAK,KAACG,WAAW,CAClD,SAAU,CAAcF,EAAI,IAAC,MAAO,CAClC,UAAW,eACX,SAAU,wBACpB,CAAS,EAAgBA,EAAI,IAAC,MAAO,CAC3B,UAAW,GACX,SAAUmD,CACpB,CAAS,CAAC,CACV,CAAO,CAAC,CACR,CAAK,CACL,CAAG,CACH,CACAR,GAAmB,UAAY,CAC7B,UAAWvC,EAAU,WAAW,GAAG,EAAE,WACrC,eAAgBA,EAAU,WAAW,GAAG,EAAE,WAC1C,gBAAiBA,EAAU,WAAW,GAAG,EAAE,WAC3C,MAAOA,EAAU,KAAK,WACtB,aAAcA,EAAU,KAAK,WAC7B,iBAAkBA,EAAU,WAAW,GAAG,EAAE,WAC5C,gBAAiBA,EAAU,WAAW,GAAG,EAAE,UAC7C,EClGA,SAASqE,GAA2BjI,EAAM,CACxC,GAAI,CACF,QAAAoH,EACA,iBAAAc,EACA,aAAcC,EACd,aAAAC,CACD,EAAGpI,EACJ,OAAoBwD,EAAAA,IAAK,MAAO,CAC9B,UAAW,oDACX,SAAuBD,EAAK,KAAC,MAAO,CAClC,UAAW0C,GAAW,6BAA6B,EACnD,SAAU,CAAczC,EAAI,IAAC,MAAO,CAClC,UAAW,eACX,SAAU,uHAClB,CAAO,EAAgBA,EAAI,IAAC,MAAO,CAC3B,UAAW,6BACX,SAAU4D,EAAQ,IAAIM,GAAuBlE,EAAAA,IAAK6E,GAAgB,CAChE,UAAWpC,GAAW,4BAA6BgC,GAA2B,oBAAoBP,EAAO,IAAI,CAAC,EAC9G,QAAS,IAAMQ,EAAiBR,EAAO,IAAI,EAC3C,aAAc,IAAM,CACdS,GAAeA,EAAcT,CAAM,CACxC,EACD,aAAcU,EACd,SAAU,CAACV,EAAO,QAClB,SAAUA,EAAO,SACjB,SAAUA,EAAO,IAC3B,EAAWA,EAAO,IAAI,CAAC,CACvB,CAAO,CAAC,CACR,CAAK,CACL,CAAG,CACH,CACAO,GAA2B,oBAAsBlB,GAAc,6BAA6B,OAAOA,CAAU,EAC7GkB,GAA2B,aAAe,CACxC,aAAc,IAAA,GACd,aAAc,IAAA,EAChB,ECzCO,SAASK,GAA0B/G,EAAU,CAClD,OAAOA,EAAS,WAAa,MAC/B,CACO,SAASgH,GAAoBC,EAAY,CAC9C,GAAIA,GAAc,KAAM,MAAO,GAC/B,GAAI,CACF,SAAAC,EACA,cAAAC,CACD,EAAGF,EACJ,OAAO,OAAOC,GAAa,UAAY,OAAOC,GAAkB,QAClE,CACO,SAASC,GAA4BnH,EAAO,CACjD,OAAOA,GAAS,MAAQ+G,GAAoB/G,EAAM,UAAU,CAC9D,CCbA,SAASoH,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,EAAK,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUpH,EAAK,CAAEF,EAAgBoH,EAAQlH,EAAKoH,EAAOpH,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBkH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUpH,EAAK,CAAE,OAAO,eAAekH,EAAQlH,EAAK,OAAO,yBAAyBoH,EAAQpH,CAAG,CAAC,CAAE,CAAE,EAAK,OAAOkH,CAAS,CAC1f,SAASpH,EAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAwBzX,IAAIgH,EAAMC,EAAI,OAAO,YAAY,EAC7BC,GAAwB,IAI5B,SAASC,GAAeC,EAAO,CAC7B,OAAOA,EAAM,cAAgB,IAC/B,CACA,SAASC,GAAcD,EAAO,CAC5B,OAAOA,EAAM,YAAc,IAC7B,CACO,MAAME,WAAmBC,EAAAA,SAAU,CACxC,YAAYrI,EAAO,CACjB,IAAIsI,EACJ,MAAMtI,CAAK,EACXO,EAAgB,KAAM,iBAAkB,MAAM,EAC9CA,EAAgB,KAAM,QAAS,MAAM,EACrCA,EAAgB,KAAM,UAAW,MAAM,EACvCA,EAAgB,KAAM,qBAAsBgC,EAAQ,CAACgG,EAAkB3D,EAAW4D,IAAc,CAC9F,GAAI,CAACD,EACH,OAAO,IAAI,IAEb,IAAIrD,EAAkB,IAAI,IAAIN,CAAS,EACvC,OAAA4D,EAAU,QAAQ,CAACC,EAAQ5I,IAAS,CAClCqF,EAAgB,OAAOrF,CAAI,CACnC,CAAO,EACMqF,CACR,CAAA,CAAC,EACF3E,EAAgB,KAAM,sBAAuBgC,EAAQ,CAACgG,EAAkB3D,EAAW4D,EAAW1D,EAAiBD,IAAmB,CAChI,GAAI,CAAC0D,EACH,OAAO,IAAI,IAEb,IAAItD,EAAmB,IAAI,IAAIL,CAAS,EACxC,OAAA4D,EAAU,QAAQ,CAACC,EAAQ5I,IAAS,CAClCoF,EAAiB,OAAOpF,CAAI,CACpC,CAAO,EACDgF,EAAe,QAAQ,CAACnE,EAAOb,IAAS,CACtCoF,EAAiB,OAAOpF,CAAI,CACpC,CAAO,EACDiF,EAAgB,QAAQ,CAACoB,EAAQrG,IAAS,CACxCoF,EAAiB,OAAOpF,CAAI,CACpC,CAAO,EACMoF,CACR,CAAA,CAAC,EACF1E,EAAgB,KAAM,0BAA2BgC,EAAQ,CAACqC,EAAW8D,IAAiB,CAEpF,QADI7D,EAAiB,IAAI,IAChB+C,EAAI,EAAGA,EAAIc,EAAa,OAAQd,GAAK,EAAG,CAC/C,IAAIe,EAAcD,EAAad,CAAC,EAC5B,CACF,KAAA/H,EACA,KAAAD,CACD,EAAG+I,EACAzC,EAAStB,EAAU,IAAI/E,CAAI,EAC3BqG,GAAU,MAAQA,EAAO,OAAStG,GACpCiF,EAAe,IAAIhF,EAAM8I,CAAW,EAGxC,OAAO9D,CACR,CAAA,CAAC,EACFtE,EAAgB,KAAM,qBAAsBgC,EAAQ,CAACqC,EAAWgE,IAAU,CAGxE,QAFI9D,EAAkB,IAAI,IACtBtF,EAAUW,EAAY,eAAe,IAAI,EACpCyH,EAAI,EAAGA,EAAIgB,EAAM,OAAQhB,GAAK,EAAG,CACxC,IAAIiB,EAAOD,EAAMhB,CAAC,EACdrC,EAAa,KAMjB,GALIsD,EAAK,OAAS,MAAQA,EAAK,MAAM,UAAYrJ,GAAWoF,EAAU,IAAIiE,EAAK,MAAM,UAAU,EAC7FtD,EAAasD,EAAK,MAAM,WACfA,EAAK,KAAOA,EAAK,IAAI,UAAYrJ,GAAWoF,EAAU,IAAIiE,EAAK,IAAI,UAAU,IACtFtD,EAAasD,EAAK,IAAI,YAEpBtD,GAAc,MAAQX,EAAU,IAAIW,CAAU,EAAG,CACnD,IAAIW,EAAStB,EAAU,IAAIW,CAAU,EACrCuD,EAAc5C,CAAM,EACpBpB,EAAgB,IAAIS,EAAYW,CAAM,GAG1C,OAAOpB,CACR,CAAA,CAAC,EACFvE,EAAgB,KAAM,qBAAsBgC,EAAQ,CAACqC,EAAWE,EAAiBiE,IAA6B,MAAM,KAAKnE,EAAU,OAAQ,CAAA,EAAE,IAAIsB,IAAW,CAC1J,KAAMA,EAAO,KACb,KAAMA,EAAO,KACb,QAAS6C,EAA2BA,EAAyB,KAAM7C,CAAM,EAAI,GAC7E,SAAUpB,EAAgB,IAAIoB,EAAO,IAAI,CAC/C,EAAM,CAAC,CAAC,EACJ,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,yBAA2B,KAAK,yBAAyB,KAAK,IAAI,EACvE,KAAK,yBAA2B,KAAK,yBAAyB,KAAK,IAAI,EACvE,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,sBAAwB8C,GAAS,KAAK,sBAAsB,KAAK,IAAI,EAAGhB,EAAqB,EAClG,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,gBAAkBM,EAAsBtI,EAAM,gBAAkB,MAAQsI,IAAwB,OAASA,EAAmCW,EAAM,UAAS,EAChK,KAAK,MAAqBA,EAAM,YAChC,KAAK,QAAU,IAAIC,GACnB,GAAI,CACF,SAAAnJ,EACA,WAAAiH,CACD,EAAGhH,EACA,CACF,eAAAmJ,EAAiB,CAAE,EACnB,SAAAlC,EAAW,CAAE,CACnB,EAAQD,GAA4D,GAChE,KAAK,MAAQ,CACX,SAAAC,EACA,MAAO,OACP,SAAU,GACV,eAAgB,GAChB,UAAW,GACX,SAAU,GACV,SAAUlH,GAAY,MAAQ+G,GAA0B/G,CAAQ,GAAKA,EAAS,SAAS,SAGvF,UAAW,IAAI,IAAIoJ,CAAc,EAGjC,eAAgB,IAAI,IAAIA,CAAc,EACtC,MAAO,OACP,UAAW,IAAI,IAEf,WAAAnC,CACN,CACG,CACD,mBAAoB,CACb,KAAK,aACR,KAAK,SAAS,CACZ,SAAU,EAClB,CAAO,EACD,KAAK,UAAS,EAEjB,CACD,mBAAmBoC,EAAWC,EAAW,CACvC,GAAI,CACF,aAAAX,EACA,OAAAb,CACN,EAAQ,KAAK,MACL,CACF,UAAAjD,EACA,MAAA0E,EACA,UAAAd,EACA,eAAAW,EACA,SAAAI,EACA,SAAAtC,CACN,EAAQ,KAAK,MACJqC,IAGD1E,IAAcyE,EAAU,WAC1B,KAAK,gBAAe,EAElBX,IAAiBU,EAAU,cAC7B,KAAK,0BAA0BV,EAAcU,EAAU,YAAY,EAEjEZ,IAAca,EAAU,UAC1B,KAAK,cAAa,EACTF,IAAmBE,EAAU,gBACtC,KAAK,iBAAgB,EAEnBpC,IAAaoC,EAAU,UAAYG,GAAmBF,CAAK,IAC7DA,EAAM,eAAerC,CAAQ,EAC7B,KAAK,iBAAgB,GAEnBsC,IAAaF,EAAU,SACrBxB,IACE0B,GACF,KAAK,uBAAuB1B,CAAM,EAClC,KAAK,sBAAqB,GAE1B,KAAK,sBAAsBA,CAAM,GAG5B0B,GAAY1B,IAAWuB,EAAU,SACtCA,EAAU,QACZ,KAAK,sBAAsBA,EAAU,MAAM,EAEzCvB,IACF,KAAK,uBAAuBA,CAAM,EAClC,KAAK,sBAAqB,IAG/B,CACD,sBAAuB,CACrB,KAAK,QAAQ,SACb,GAAI,CACF,MAAAyB,CACN,EAAQ,KAAK,MACL,CACF,OAAAzB,CACN,EAAQ,KAAK,MACLyB,GAAS,MAAQzB,GACnB,KAAK,sBAAsBA,CAAM,CAEpC,CACD,WAAY,CACV,KAAK,SAAS,CACZ,UAAW,GACX,SAAU,GACV,MAAO,MACb,CAAK,EACD,GAAI,CACF,UAAA4B,CACN,EAAQ,KAAK,MACT,KAAK,QAAQ,IAAIA,EAAS,EAAIC,GAAY,CACxCA,EAAS,MAAK,CACpB,CAAK,EAAE,KAAK,KAAK,kBAAmB,KAAK,eAAe,CACrD,CACD,uBAAuBC,EAAO,CAC5B7B,EAAI,MAAM,yBAA0B6B,CAAK,EACzC,GAAI,CACF,MAAAL,CACN,EAAQ,KAAK,MACTR,EAAcQ,CAAK,EACnB,GAAI,CACF,GAAAM,CACD,EAAGN,EACJK,EAAM,iBAAiBC,EAAG,MAAM,2BAA4B,KAAK,wBAAwB,EACzFD,EAAM,iBAAiBC,EAAG,MAAM,oBAAqB,KAAK,wBAAwB,EAClFD,EAAM,iBAAiBC,EAAG,MAAM,kBAAmB,KAAK,sBAAsB,CAC/E,CACD,sBAAsBD,EAAO,CAC3B7B,EAAI,MAAM,wBAAyB6B,CAAK,EACxC,GAAI,CACF,MAAAL,CACN,EAAQ,KAAK,MACTR,EAAcQ,CAAK,EACnB,GAAI,CACF,GAAAM,CACD,EAAGN,EACJK,EAAM,oBAAoBC,EAAG,MAAM,2BAA4B,KAAK,wBAAwB,EAC5FD,EAAM,oBAAoBC,EAAG,MAAM,oBAAqB,KAAK,wBAAwB,EACrFD,EAAM,oBAAoBC,EAAG,MAAM,kBAAmB,KAAK,sBAAsB,CAClF,CACD,sBAAuB,CACrB,GAAI,CACF,SAAAC,EACA,SAAAzG,EACA,UAAAC,CACN,EAAQ,KAAK,MACLwG,GAAY,CAACzG,GAAY,CAACC,GAC5B,KAAK,UAAS,CAEjB,CACD,UAAW,CACT,GAAI,CACF,YAAA1B,CACN,EAAQ,KAAK,MACL,CACF,SAAAmI,CACD,EAAGnI,EACJ,OAAOmI,CACR,CACD,qBAAqBvE,EAAY,CAC/B,GAAI,CACF,WAAAjC,CACN,EAAQ,KAAK,MACL,CACF,UAAAsB,CACN,EAAQ,KAAK,MACTtB,EAAW,KAAKpC,GAAW,gBAAiB,KAAM0D,EAAU,IAAIW,CAAU,CAAC,CAC5E,CACD,uBAAuB/G,EAAM,CAC3B,GAAI,CACF,KAAAoB,EACA,KAAAC,CACD,EAAGrB,EACA,CACF,yBAAAuK,CACN,EAAQ,KAAK,MACTjB,EAAI,MAAM,yBAA0BiB,EAA0BnJ,EAAMC,CAAI,EACnEkJ,GAGLA,EAAyB,KAAM,CAC7B,KAAAnJ,EACA,KAAAC,CACN,CAAK,CACF,CACD,wBAAyB,CACvB,GAAI,CACF,yBAAAkJ,CACN,EAAQ,KAAK,MACTjB,EAAI,MAAM,yBAA0BiB,CAAwB,EACvDA,GAGLA,EAAyB,KAAM,MAAS,CACzC,CACD,kBAAmB,CACjB,KAAK,SAAS,CACZ,MAAO,IAAI,MAAM,qBAAqB,EACtC,eAAgB,EACtB,CAAK,CACF,CACD,gBAAgBnD,EAAS,CACvB,QAASgC,EAAI,EAAGA,EAAIhC,EAAQ,OAAQgC,GAAK,EACvC,KAAK,gBAAgBhC,EAAQgC,CAAC,CAAC,CAElC,CACD,kBAAmB,CACjB,GAAI,CACF,iBAAAmC,EACA,cAAAC,EACA,kCAAAC,CACN,EAAQ,KAAK,MACTA,EAAkCF,EAAkB,MAAS,EAC7DC,EAAcE,GAAS,MAAM,CAC9B,CACD,iBAAkB,CAChB,KAAK,SAAS,CACZ,eAAgB,GAChB,MAAO,MACb,CAAK,EACD,KAAK,iBAAgB,EACrB,KAAK,oBAAmB,CACzB,CACD,kBAAkBZ,EAAO,CACvBxB,EAAI,MAAM,mBAAmB,EAC7B,GAAI,CACF,MAAOqC,CACb,EAAQ,KAAK,MACT,KAAK,SAAS,CACZ,MAAAb,EACA,SAAU,EAChB,EAAO,IAAM,CACP,GAAI,CACF,aAAAZ,EACA,OAAAb,CACR,EAAU,KAAK,MACL,CACF,UAAAW,EACA,SAAAe,CACR,EAAU,KAAK,MACLD,IAAUa,IACZ,KAAK,iBAAgB,EACrB,KAAK,oBAAmB,EACxB,KAAK,mBAAmBzB,EAAcF,EAAU,KAAO,GAAKc,EAAM,iBAAgB,CAAE,EAChFzB,GAAU0B,IACZ,KAAK,uBAAuB1B,CAAM,EAClC,KAAK,sBAAqB,GAGpC,CAAK,CACF,CACD,gBAAgBuC,EAAO,CACjBC,GAAa,WAAWD,CAAK,IAGjCtC,EAAI,MAAM,kBAAmBsC,CAAK,EAClC,KAAK,SAAS,CACZ,MAAAA,EACA,UAAW,EACjB,CAAK,EACF,CACD,0BAA2B,CACzB,KAAK,sBAAqB,CAC3B,CACD,0BAA2B,CACzB,KAAK,sBAAqB,CAC3B,CACD,wBAAyB,CACvB,KAAK,sBAAqB,CAC3B,CACD,uBAAwB,CACtB,GAAI,CACF,SAAArK,EACA,OAAA8H,CACN,EAAQ,KAAK,MACL,CACF,SAAA0B,EACA,MAAAD,CACN,EAAQ,KAAK,MACT,GAAI,CAACC,GAAY,CAACD,GAAS,CAACzB,EAAQ,CAClCC,EAAI,OAAO,iCAAkCyB,EAAUD,EAAOzB,CAAM,EACpE,OAEF,GAAI,CACF,GAAA+B,CACD,EAAGN,EAGJ,GADA,KAAK,QAAQ,SACTxC,GAA0B/G,CAAQ,EAAG,CACvC,GAAI,CACF,SAAAkH,CACD,EAAGlH,EACJ,KAAK,QAAQ,IAAI6J,EAAG,KAAK,OAAO,OAAO,IAAIU,GAAWV,CAAE,EAAE,mBAAmB3C,EAAUY,CAAM,CAAC,CAAC,EAAE,KAAK0C,GAAU,CAC1Gf,GAAmBF,CAAK,GAC1BA,EAAM,UAAUiB,CAAM,CAEzB,CAAA,EAAE,MAAM,KAAK,eAAe,EAE/B,KAAK,iBAAgB,CACtB,CACD,kBAAmB,CACjB,GAAI,CACF,YAAAC,CACN,EAAQ,KAAK,MACL,CACF,WAAAxD,EACA,eAAAmC,EACA,SAAAlC,CACN,EAAQ,KAAK,MACL,CACF,cAAAC,CACN,EAAQF,GAA4D,GAChE,GAAIwD,GAGEvC,GAAeuC,EAAY,KAAK,GAAKrC,GAAcqC,EAAY,KAAK,EAAG,CACzE,GAAI,CACF,aAAA9B,CACV,EAAY8B,EAAY,MACZ,CACF,WAAYC,CACtB,EAAYD,EAAY,MACZC,GAAoB,OACtBvD,EAAgBwD,EAAc,qBAAqBD,EAAkB/B,CAAY,GAMvF,KAAK,SAAS,CACZ,WAAY,CACV,SAAAzB,EACA,cAAAC,EACA,eAAgB,MAAM,KAAKiC,CAAc,CAC1C,CACP,CAAK,CACF,CACD,aAAc,CAGZ,KAAK,SAAS,CACZ,UAAW,EACjB,CAAK,CACF,CACD,cAAe,CACb,KAAK,YAAW,CACjB,CACD,sBAAsBwB,EAAQ,CAC5B,KAAK,SAASvL,GAAS,CACrB,GAAI,CACF,SAAUwL,CACX,EAAGxL,EACA6H,EAAWS,GAAcA,GAAc,CAAE,EAAEkD,CAAY,EAAGD,CAAM,EACpE7C,OAAAA,EAAI,MAAM,mBAAoBb,CAAQ,EAC/B,CACL,SAAAA,CACR,CACA,CAAK,CACF,CACD,YAAa,CACX,KAAK,UAAU,EAAK,CACrB,CACD,YAAa,CACX,KAAK,UAAU,EAAI,CACpB,CACD,eAAgB,CACd,KAAK,UAAU,EAAK,CACrB,CACD,gBAAiB,CACf,IAAI6C,EAAW,KAAK,WACpB,KAAK,UAAU,CAACA,CAAQ,CACzB,CACD,cAAe,CACb,KAAK,SAAS,CACZ,UAAW,EACjB,CAAK,CACF,CACD,uBAAwB,CAGtB,KAAK,SAAS,CACZ,eAAgB,IAAI,IACpB,UAAW,IAAI,GACrB,CAAK,EACD,KAAK,iBAAgB,CACtB,CAMD,gBAAgB5D,EAAQ,CACtB,GAAI,CACF,WAAA5C,CACN,EAAQ,KAAK,MACL,CACF,KAAAzD,EACA,KAAAD,CACD,EAAGsG,EACJ5C,EAAW,KAAKuH,EAAiB,WAAY,CAC3C,MAAO,GAAG,OAAOhL,EAAM,SAAS,EAChC,WAAY,CACV,KAAAA,EACA,KAAAD,EACA,aAAc,EACf,EACD,eAAgB,GAChB,aAAc,OACpB,CAAK,CACF,CACD,UAAUiK,EAAU,CAClB,KAAK,SAAS,CACZ,SAAAA,CACN,EAAO,IAAM,CACHA,IACF,KAAK,qBAAoB,EACzB,KAAK,YAAW,EAExB,CAAK,CACF,CACD,kBAAmB,CACjB,GAAI,CACF,MAAAP,CACN,EAAQ,KAAK,MACT,GAAKA,EAGL,IAAI,CACF,WAAAhG,CACN,EAAQ,KAAK,MACTA,EAAW,KAAKuH,EAAiB,gBAAiB,KAAM,MAAM,KAAKvB,EAAM,mBAAkB,EAAG,OAAM,CAAE,CAAC,EACxG,CACD,uBAAuB/D,EAAY,CACjC,IAAIuF,EACA5H,EAAYuD,GAA2B,oBAAoBlB,CAAU,EACzE,GAAI,CAAC,KAAK,eAAe,QACvB,OAAO,KAET,IAAIwF,EAAU,KAAK,eAAe,QAAQ,cAAc,IAAI,OAAO7H,CAAS,CAAC,EACzE8H,GAAQF,EAA0EC,GAAQ,sBAAqB,KAAQ,MAAQD,IAA0B,OAASA,EAAwB,KAC9L,GAAIE,GAAQ,MAAQA,EAAK,OAAS,GAAKA,EAAK,QAAU,EACpD,OAAO,KAET,IAAIC,EAAID,EAAK,KAAOA,EAAK,MAAQ,EAC7BE,EAAIF,EAAK,OACb,MAAO,CAACC,EAAGC,CAAC,CACb,CAMD,aAAaC,EAAgB,CAC3BrD,EAAI,MAAM,eAAgBqD,CAAc,EACxC,KAAK,SAASC,GAAS,CACrB,IAAIC,EACA,CACF,UAAAzG,EACA,UAAA4D,CACD,EAAG4C,EACAE,EAAmB,KACnBnC,EAAiB,IAAI,IAAIiC,EAAM,cAAc,EACjD,OAAAD,EAAe,QAAQ,CAACI,EAAOhG,IAAe,CAC5C,GAAI,CACF,WAAAiG,EACA,WAAAC,CACD,EAAGF,EACArF,EAAStB,EAAU,IAAIW,CAAU,EACrC,GAAI,EAAAW,GAAU,MAAQA,EAAO,OAASsF,GAGtC,IAAIC,EAAW,OAAS,EAAG,CACzB3D,EAAI,MAAM,uCAAwCvC,CAAU,EAC5D,OAEF,GAAI,CACF,MAAA7E,CACV,EAAY+K,EAAW,CAAC,EAChBtC,EAAe,IAAI5D,EAAY7E,CAAK,EAChC8H,EAAU,IAAIjD,CAAU,IAAM7E,IAC5B4K,IAAqB,OACvBA,EAAmB,IAAI,IAAI9C,CAAS,GAEtC8C,EAAiB,IAAI/F,EAAY7E,CAAK,GAEhD,CAAO,EAKM,CACL,eAAAyI,EACA,WAAYkC,EAAoBC,KAAsB,MAAQD,IAAsB,OAASA,EAAoB7C,CACzH,CACA,CAAK,CACF,CACD,iBAAiBjD,EAAY,CAC3B,KAAK,SAAS6F,GAAS,CAIrB,GAAI,CACF,aAAA1C,CACR,EAAU,KAAK,MACL,CACF,UAAA9D,CACD,EAAGwG,EACA,CACF,UAAA5C,EACA,eAAAW,CACD,EAAGiC,EACJ,GAAI,CAACjC,EAAe,IAAI5D,CAAU,EAChC,OAAO,KAET4D,EAAiB,IAAI,IAAIiC,EAAM,cAAc,EAC7CjC,EAAe,OAAO5D,CAAU,EAChC,IAAIV,EAAiB,KAAK,wBAAwBD,EAAW8D,CAAY,EACzE,GAAI7D,EAAe,IAAIU,CAAU,EAAG,CAClC,IAAImG,EACAC,EAAcnD,EAAU,IAAIjD,CAAU,EACtCqG,GAAoBF,EAAsB7G,EAAe,IAAIU,CAAU,KAAO,MAAQmG,IAAwB,OAAS,OAASA,EAAoB,MACpJE,GAAoB,MAAQD,IAAgBC,IAC9CpD,EAAY,IAAI,IAAI4C,EAAM,SAAS,EAC/BQ,EAAiB,OAAS,EAC5BpD,EAAU,IAAIjD,EAAYqG,CAAgB,EAE1CpD,EAAU,OAAOjD,CAAU,QAI/BiD,EAAY,IAAI,IAAI4C,EAAM,SAAS,EACnC5C,EAAU,OAAOjD,CAAU,EAE7B,MAAO,CACL,UAAAiD,EACA,eAAAW,CACR,CACA,CAAK,CACF,CACD,0BAA0BT,EAAcmD,EAAkB,CACxD,IAAIC,EAAsBD,EAAiB,OAAOE,GAAmBrD,EAAa,KAAKC,GAAeA,EAAY,OAASoD,EAAgB,MAAQpD,EAAY,OAASoD,EAAgB,IAAI,IAAM,MAAS,EACvMD,EAAoB,OAAS,GAC/B,KAAK,mBAAmBA,CAAmB,EAE7C,IAAIE,EAAsBtD,EAAa,OAAOC,GAAe,CAACkD,EAAiB,SAASlD,CAAW,CAAC,EAChGqD,EAAoB,OAAS,GAC/B,KAAK,mBAAmBA,CAAmB,CAE9C,CACD,mBAAmBtD,EAAc,CAC/B,IAAIuD,EAAc,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACtF,KAAK,SAASb,GAAS,CAUrB,OATI,CACF,UAAAxG,CACD,EAAGwG,EACAjC,EAAiB,IAAI,IAAIiC,EAAM,cAAc,EAC7C5C,EAAY,IAAI,IAAI4C,EAAM,SAAS,EACnCT,EAASsB,EAAc,CACzB,UAAAzD,EACA,eAAAW,CACD,EAAG,GACKvB,EAAI,EAAGA,EAAIc,EAAa,OAAQd,GAAK,EAAG,CAC/C,GAAI,CACF,KAAA/H,EACA,KAAAD,EACA,MAAAc,CACV,EAAYgI,EAAad,CAAC,EACd1B,EAAStB,EAAU,IAAI/E,CAAI,EAC3BqG,GAAU,MAAQA,EAAO,OAAStG,IAChCc,GAAS,MAAQ8H,EAAU,IAAI3I,CAAI,IAAMa,IACvCA,IAAU,GACZ8H,EAAU,OAAO3I,CAAI,EAErB2I,EAAU,IAAI3I,EAAMa,CAAK,EAE3BiK,EAAO,UAAYnC,GAEjBW,EAAe,IAAItJ,CAAI,IAEzBsJ,EAAe,OAAOtJ,CAAI,EAC1B8K,EAAO,eAAiBxB,IAI9BrB,OAAAA,EAAI,MAAM,qBAAsB6C,CAAM,EAC/BA,CACb,CAAK,CACF,CACD,mBAAmBjC,EAAc,CAC/B,IAAIuD,EAAc,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACtF,KAAK,SAASb,GAAS,CAOrB,OANI,CACF,UAAAxG,EACA,eAAAuE,CACD,EAAGiC,EACA5C,EAAY,IAAI,IAAI4C,EAAM,SAAS,EACnCc,EAAcD,EACTrE,EAAI,EAAGA,EAAIc,EAAa,OAAQd,GAAK,EAAG,CAC/C,GAAI,CACF,KAAA/H,EACA,KAAAD,CACV,EAAY8I,EAAad,CAAC,EACd1B,EAAStB,EAAU,IAAI/E,CAAI,EAC/B,GAAIqG,GAAU,MAAQA,EAAO,OAAStG,GAChC4I,EAAU,IAAI3I,CAAI,EAAG,CACvB,IAAI8L,EAAcnD,EAAU,IAAI3I,CAAI,EACpC,GAAIsJ,EAAe,IAAItJ,CAAI,EAAG,CAC5B,IAAIsM,EAAYhD,EAAe,IAAItJ,CAAI,EACnCsM,IAAcR,GAAeQ,GAAa,OAC5CD,EAAc,GACd1D,EAAU,IAAI3I,EAAMsM,CAAS,QAG/BD,EAAc,GACd1D,EAAU,OAAO3I,CAAI,GAK7BiI,OAAAA,EAAI,MAAM,qBAAsBoE,CAAW,EACpCA,EAAc,CACnB,UAAA1D,CACD,EAAG,IACV,CAAK,CACF,CACD,qBAAsB,CACpB,KAAK,SAAS4D,GAAS,CACrB,GAAI,CACF,MAAA9C,CACD,EAAG8C,EACJ,OAAK9C,EAGE,CACL,UAAWA,EAAM,mBAAoB,CAC7C,EAJe,IAKf,CAAK,CACF,CACD,eAAgB,CACd,GAAI,CACF,UAAA1E,EACA,UAAA4D,EACA,MAAAc,CACN,EAAQ,KAAK,MACTR,EAAcQ,CAAK,EACnB,IAAIpE,EAAkB,KAAK,mBAAmBoE,EAAM,mBAAoB1E,EAAW4D,CAAS,EAE5F,GADAc,EAAM,UAAUd,CAAS,EACrBA,EAAU,KAAO,GAAKtD,EAAgB,OAAS,EAAG,CACpD,IAAImH,EAAe/C,EAAM,kBACrBgD,EAAc5G,GAAU,KAAK,MAAM,KAAK8C,EAAU,QAAS,CAAA,EAAE,IAAI+D,GAAS,CAC5E,GAAI,CAAC1M,EAAMa,CAAK,EAAI6L,EACpB,MAAO,GAAG,OAAO1M,EAAM,IAAI,EAAE,OAAOa,CAAK,CAC1C,CAAA,CAAC,EACE2L,EACF/C,EAAM,SAAS,GAAG,OAAO+C,EAAc,uCAAyC,EAAE,OAAOC,EAAa,SAAS,CAAC,EAEhHhD,EAAM,SAASgD,CAAW,EAE5BxE,EAAI,OAAO,4BAA6BU,CAAS,EACjD,KAAK,SAAS,CACZ,UAAW,EACnB,CAAO,OAEDV,EAAI,OAAO,kCAAmC5C,CAAe,EAC7DoE,EAAM,SAASA,EAAM,gBAAiB,CAAA,EACtC,KAAK,SAAS,CACZ,UAAW,EACnB,CAAO,EAEH,KAAK,iBAAgB,CACtB,CAKD,iBAAkB,CAChB,KAAK,SAAS8B,GAAS,CACrB,GAAI,CACF,UAAAxG,CACD,EAAGwG,EACA5C,EAAY,IAAI,IAAI4C,EAAM,SAAS,EACnCjC,EAAiB,IAAI,IAAIiC,EAAM,cAAc,EAC7CoB,EAAW,CAAA,EACf,OAAApB,EAAM,eAAe,QAAQ,CAAC1K,EAAOb,IAAS,CACvC+E,EAAU,IAAI/E,CAAI,IACrBsJ,EAAe,OAAOtJ,CAAI,EAC1B2M,EAAS,eAAiBrD,EAEpC,CAAO,EACDiC,EAAM,UAAU,QAAQ,CAAC1K,EAAOb,IAAS,CAClC+E,EAAU,IAAI/E,CAAI,IACrB2I,EAAU,OAAO3I,CAAI,EACrB2M,EAAS,UAAYhE,EAE/B,CAAO,EACMgE,CACb,CAAK,CACF,CACD,aAAc,CACR,KAAK,MAAM,SACb,KAAK,MAAM,QAAQ,kBAEtB,CACD,QAAS,CACP,GAAI,CACF,yBAAAzD,EACA,YAAApH,EACA,WAAA2B,EACA,aAAAoF,EACA,eAAA+D,EACA,MAAA7D,EACA,SAAA7I,EACA,SAAAkH,EACA,OAAAyF,CACN,EAAQ,KAAK,MACL,CACF,UAAA9H,EACA,UAAA4D,EACA,MAAA4B,EACA,MAAAd,EACA,SAAAO,EACA,eAAAtG,EACA,SAAAH,EACA,UAAAC,CACN,EAAQ,KAAK,MACLxD,EACAiH,GAA0B/G,CAAQ,EACpCF,EAAOE,EAAS,MAEhBF,EAAOE,EAAS,OAElB,IAAI8E,EAAiB,KAAK,wBAAwBD,EAAW8D,CAAY,EACrE5D,EAAkB,KAAK,mBAAmBF,EAAWgE,CAAK,EAC1D1D,EAAkBoE,GAAS,KAAO,KAAK,mBAAmBA,EAAM,iBAAgB,EAAI1E,EAAW4D,CAAS,EAAI,IAAI,IAChHvD,EAAmBqE,GAAS,KAAO,KAAK,oBAAoBA,EAAM,iBAAkB,EAAE1E,EAAW4D,EAAW1D,EAAiBD,CAAc,EAAI,IAAI,IACnJnC,EAAe0H,GAAS,KAAO,yBAAyB,OAAOA,CAAK,EAAI,OACxEuC,EAAqBzH,EAAgB,KAAO,EAC5C0H,EAAoBhI,EAAU,KAAO,GAAK6H,EAC9C,OAAoBzK,EAAAA,IAAKK,GAAa,CACpC,UAAWoC,GAAW,mBAAoB,CACxC,iBAAkBkI,CAC1B,CAAO,EACD,eAAgB,KAChB,YAAahL,EACb,WAAY2B,EACZ,OAAQ,KAAK,WACb,kBAAmB,KAAK,sBACxB,SAAU,KAAK,aACf,OAAQ,KAAK,WACb,UAAW,KAAK,cAChB,WAAY,KAAK,eACjB,aAAcZ,EACd,eAAgBa,EAChB,UAAWF,EACX,SAAUD,EACV,WAAYvD,EACZ,WAAY,QACZ,SAAuBkC,EAAK,KAAC,MAAO,CAClC,IAAK,KAAK,eACV,UAAW,oCACX,SAAU,CAAcC,EAAI,IAAC,MAAO,CAClC,UAAW,8BACX,SAAUoB,GAAYkG,GAAsBtH,EAAAA,IAAK6K,GAAO,CACtD,SAAUhD,EACV,MAAOP,EACP,SAAUrC,EACV,IAAK,KAAK,MACV,aAAc,KAAK,iBACnB,YAAa,KAAK,gBAClB,SAAU,KAAK,aACf,QAAS,KAAK,YACd,kBAAmB,KAAK,sBACxB,OAAQyF,CACpB,CAAW,CACX,CAAS,EAAgB1K,EAAI,IAAC8K,GAAe,CACnC,GAAIH,GAAsB,CAACC,GAAqB,CAACvJ,EACjD,QAAS0J,GAAY,aACrB,WAAY,OACZ,aAAc,GACd,cAAe,GACf,SAAuB/K,EAAI,IAAC2C,GAAoB,CAC9C,eAAgBE,EAChB,gBAAiBC,EACjB,MAAO,KAAK,gBACZ,aAAc,KAAK,iBACnB,UAAWF,EACX,iBAAkBK,EAClB,gBAAiBC,CAC7B,CAAW,CACX,CAAS,EAAgBlD,EAAI,IAAC8K,GAAe,CACnC,GAAIF,EACJ,QAASG,GAAY,aACrB,WAAY,OACZ,aAAc,GACd,cAAe,GACf,SAAuB/K,EAAI,IAACyE,GAA4B,CACtD,QAAS,KAAK,mBAAmB7B,EAAWE,EAAiBiE,CAAwB,EACrF,iBAAkB,KAAK,qBACvB,aAAc,KAAK,uBACnB,aAAc,KAAK,sBAC/B,CAAW,CACX,CAAS,CAAC,CACV,CAAO,CACP,CAAK,CACF,CACH,CACAxI,EAAgB6H,GAAY,eAAgB,CAC1C,yBAA0B,KAC1B,eAAgB,GAChB,OAAQ,KACR,YAAa,KACb,WAAY,KACZ,SAAU,CAAE,EACZ,aAAc,IAChB,CAAC,EACD7H,EAAgB6H,GAAY,cAAe,YAAY,EACvD7H,EAAgB6H,GAAY,YAAa,YAAY,EACrD,IAAI4E,GAAkB,CAAC5B,EAAO6B,IAAa,CACzC,GAAI,CACF,iBAAAlD,EACA,SAAAhK,CACD,EAAGkN,EACAC,EACAnN,GAAY,OACdmN,EAAgBnN,EAAS,eAE3B,IAAIoN,EAAgBC,GAAwBhC,EAAOrB,CAAgB,EAC/DsD,EAAiBC,GAA8BlC,EAAOrB,CAAgB,EACtEwD,EAAaC,GAAcpC,CAAK,EAChCqC,EAAwBC,GAAqCtC,EAAOrB,CAAgB,EACpF0C,EAAiBc,IAAerD,GAAS,QAAUuD,IAA0B,OACjF,MAAO,CACL,yBAA0BE,GAAwCvC,EAAOrB,CAAgB,EACzF,eAAA0C,EACA,aAAcmB,GAA4BxC,EAAOrB,CAAgB,EACjE,MAAO8D,GAAqBzC,EAAOrB,CAAgB,EACnD,OAAQmD,GAAiB,KAAOC,EAAc,IAAID,CAAa,EAAI,OACnE,YAAaA,GAAiB,KAAOG,EAAe,IAAIH,CAAa,EAAI,OACzE,SAAUY,GAAY1C,CAAK,CAC/B,CACA,EACI2C,GAAsBC,GAAQhB,GAAiB,CACjD,cAAeiB,GACf,kCAAmCC,EACrC,EAAG,KAAM,CACP,WAAY,EACd,CAAC,EAAE9F,EAAU,EACb,MAAA+F,GAAeJ,GCr9Bf,SAASxN,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAmBzX,IAAIgH,GAAMC,EAAI,OAAO,gBAAgB,EACjCqG,GAAkB,IACf,MAAMC,WAAuBhG,EAAAA,SAAU,CAC5C,YAAYrI,EAAO,CACjB,MAAMA,CAAK,EACXO,GAAgB,KAAM,cAAe,MAAM,EAC3CA,GAAgB,KAAM,uBAAwBgC,EAAQ,CAACsF,EAAQjC,IAAYiC,GAAU,KAAOjC,EAAQ,OAAOpH,GAAQ,CACjH,GAAI,CACF,KAAAoB,CACD,EAAGpB,EACJ,OAAOoB,IAAS,QAAa0O,EAAW,iBAAiB1O,EAAMiI,EAAO,UAAU,CACtF,CAAK,EAAI,CAAE,CAAA,CAAC,EACRtH,GAAgB,KAAM,mBAAoBgC,EAAQ,CAACqD,EAAS2I,IAAmB,CAC7E,IAAIC,EAAgB,GAChBC,EAAU,CAAA,EACd,OAAAA,EAAQ,KAAmBzM,EAAI,IAAC,SAAU,CACxC,MAAO,KACP,SAAU,iBAClB,EAAS,aAAa,CAAC,EACjB4D,EAAQ,QAAQ,CAAC8I,EAAYC,IAAU,CACrCF,EAAQ,KAAmBzM,EAAI,IAAC,SAAU,CACxC,MAAO2M,EACP,SAAU,KAAK,aAAa/I,EAAS+I,CAAK,CAC3C,EAAE,GAAG,OAAOD,EAAW,KAAM,GAAG,EAAE,OAAOA,EAAW,IAAI,CAAC,CAAC,EACvDH,IAAmB,MAAQG,EAAW,OAASH,EAAe,MAAQG,EAAW,OAASH,EAAe,OAC3GC,EAAgBG,EAE1B,CAAO,EACM,CAACF,EAASD,CAAa,CAC/B,CAAA,CAAC,EACFjO,GAAgB,KAAM,yBAA0BgC,EAAQ,CAACqM,EAAQlO,IAAUkO,EAAO,QAAQlO,CAAK,CAAC,CAAC,EACjGH,GAAgB,KAAM,kBAAmBgC,EAAQqM,GAAU,CAAc5M,EAAI,IAAC,SAAU,CACtF,MAAO,KACP,SAAUqM,GAAe,WAC/B,EAAO,IAAI,EAAG,GAAGO,EAAO,IAAI,CAACC,EAAKF,IAAuB3M,EAAI,IAAC,SAAU,CAClE,MAAO2M,EAGP,SAAUE,GAAuC,QACvD,EAAO,GAAG,OAAOF,EAAO,GAAG,EAAE,OAAOE,CAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACxCtO,GAAgB,KAAM,eAAgBuO,GAAS,CAAClJ,EAAS+I,IAAU,CACjE,GAAI,CACF,KAAA9O,EACA,KAAAD,CACR,EAAUgG,EAAQ+I,CAAK,EACjB,GAAIA,EAAQ,GAAK/I,EAAQ+I,EAAQ,CAAC,EAAE,OAAS9O,GAAQ8O,EAAQ/I,EAAQ,OAAS,GAAKA,EAAQ+I,EAAQ,CAAC,EAAE,OAAS9O,EAAM,CACnH,IAAIkP,EAAYnP,EAAK,UAAUA,EAAK,YAAY,GAAG,EAAI,CAAC,EACxD,MAAO,GAAG,OAAOC,EAAM,IAAI,EAAE,OAAOkP,EAAW,GAAG,EAEpD,OAAOlP,CACR,CAAA,CAAC,EACFU,GAAgB,KAAM,aAAcyI,GAAS,IAAM,CACjD,GAAI,CACF,SAAAgG,CACR,EAAU,KAAK,MACL,CACF,OAAA9I,EACA,MAAAxF,EACA,aAAAuO,CACR,EAAU,KAAK,MACTD,EAAS,CACP,OAAA9I,EACA,aAAA+I,EACA,MAAOvO,GAA6C,MAC5D,CAAO,CACP,EAAO0N,EAAe,CAAC,EACnB,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,YAA2BnF,EAAM,YACtC,GAAI,CACF,OAAQiG,EACR,aAAcC,EACd,MAAOC,CACR,EAAGpP,EACJ,KAAK,MAAQ,CACX,OAAQkP,EACR,GAAIzP,GAAS,EACb,eAAgByP,EAChB,cAAe,CAACC,EAChB,aAAcA,EACd,MAAOC,CACb,CACG,CACD,mBAAmBhG,EAAWC,EAAW,CACvC,GAAI,CACF,OAAAxB,EACA,OAAA+G,EACA,SAAAxL,CACN,EAAQ,KAAK,MACL,CACF,OAAA8C,EACA,MAAAxF,EACA,aAAAuO,CACN,EAAQ,KAAK,MACL7L,IACEyE,IAAWuB,EAAU,QACvB,KAAK,cAAa,EAEhBwF,IAAWxF,EAAU,QAAU1I,IAAU,IAAM,CAACkO,EAAO,SAASlO,CAAK,GAEvE,KAAK,WAAU,EAEbuO,IAAiB5F,EAAU,cACzB4F,GACF,KAAK,WAAU,GAGf/I,IAAWmD,EAAU,QAAU3I,IAAU2I,EAAU,OAAS4F,IAAiB5F,EAAU,eACzF,KAAK,WAAU,EAGpB,CACD,sBAAuB,CACrB,KAAK,WAAW,OACjB,CACD,mBAAmBvD,EAAO,CACxB,GAAI,CACF,MAAApF,CACN,EAAQoF,EAAM,OAEV,GADAgC,GAAI,OAAO,qBAAsBpH,CAAK,EAClCA,GAAS,MAAQ,SAASA,EAAO,EAAE,EAAI,EAAG,CAC5C,KAAK,SAAS,CACZ,eAAgB,IACxB,CAAO,EACD,OAEF,GAAI,CACF,QAAS2O,EACT,OAAAxH,CACN,EAAQ,KAAK,MACLjC,EAAU,KAAK,qBAAqBiC,EAAQwH,CAAU,EAC1D,KAAK,SAAS,CACZ,eAAgBzJ,EAAQ,SAASlF,EAAO,EAAE,CAAC,CACjD,CAAK,CACF,CACD,uBAAuBoF,EAAO,CACxBA,EAAM,MAAQ,UAChBA,EAAM,eAAc,EACpBA,EAAM,gBAAe,EACrBgC,GAAI,OAAO,wBAAwB,EACnC,KAAK,WAAU,EACf,KAAK,WAAW,QAEnB,CACD,kBAAkBhC,EAAO,CACvB,GAAI,CACF,MAAOwJ,CACb,EAAQxJ,EAAM,OACN6I,EAAQ,SAASW,EAAY,EAAE,EAE/B5O,EAAQ,GACR,CACF,OAAAkO,CACN,EAAQ,KAAK,MACLD,GAAS,GAAKA,EAAQC,EAAO,OAC/BlO,EAAQkO,EAAOD,CAAK,EAEpB7G,GAAI,OAAO,uBAAuB,EAEpCA,GAAI,OAAO,oBAAqBpH,CAAK,EACrC,KAAK,SAAS,CACZ,MAAAA,CACN,CAAK,CACF,CACD,sBAAuB,CACrB,KAAK,SAAStB,GAAS,CACrB,GAAI,CACF,OAAA8G,CACD,EAAG9G,EACJ,MAAO,CACL,eAAgB8G,EAChB,aAAc,EACtB,CACA,CAAK,CACF,CACD,oBAAqB,CACnB,KAAK,SAASqF,GAAS,CACrB,GAAI,CACF,OAAArF,EACA,eAAAqI,EACA,MAAA7N,CACD,EAAG6K,EACJ,MAAO,CACL,OAAQgD,EAER,MAAOrI,IAAWqI,EAAiB7N,EAAQ,GAC3C,aAAc,GACd,cAAe,EACvB,CACA,CAAK,CACF,CACD,oBAAoBoF,EAAO,CACzBA,EAAM,gBAAe,EACrB,KAAK,aAAY,CAClB,CACD,sBAAsBA,EAAO,CAEvBA,EAAM,SAAW,KAAK,YAAY,SACpC,KAAK,WAAU,CAElB,CACD,eAAgB,CACd,KAAK,SAAS,CACZ,OAAQ,KACR,eAAgB,KAChB,aAAc,GACd,cAAe,GACf,MAAO,EACb,CAAK,CACF,CACD,cAAe,CACb,GAAI,CACF,OAAAI,CACN,EAAQ,KAAK,MACT,KAAK,SAAS,CACZ,eAAgBA,EAChB,aAAc,EACpB,CAAK,CACF,CACD,YAAa,CACX,IAAIqJ,GACHA,EAAwB,KAAK,YAAY,WAAa,MAAQA,IAA0B,QAAkBA,EAAsB,MAAK,CACvI,CACD,YAAa,CACX,KAAK,SAAS,CACZ,MAAO,EACb,CAAK,CACF,CAGD,aAAc,CACZ,KAAK,WAAU,CAChB,CAGD,eAAenD,EAAO,CACpB,GAAI,CACF,KAAAvM,EACA,KAAAD,EACA,MAAAc,EACA,aAAAuO,CACD,EAAG7C,EACAlG,EAASrG,GAAQ,MAAQD,GAAQ,KAAO,CAC1C,KAAAC,EACA,KAAAD,CACD,EAAG,KACJ,KAAK,SAAS2M,GAAS,CACrB,GAAI,CACF,MAAOiD,EACP,aAAcC,CACf,EAAGlD,EACJ,MAAO,CACL,OAAArG,EACA,MAAOxF,GAA6C8O,EACpD,aAAcP,GAAkEQ,CACxF,CACA,CAAK,CACF,CACD,QAAS,CACP,IAAIC,EACA,CACF,QAASL,EACT,eAAAM,EACA,eAAAlD,EACA,SAAArJ,EACA,OAAAyE,EACA,iBAAAnB,EACA,mBAAAkJ,EACA,mBAAAC,EACA,OAAAjB,EACA,cAAAkB,CACN,EAAQ,KAAK,MACL,CACF,OAAA5J,EACA,cAAA6J,EACA,GAAAhR,EACA,aAAAkQ,EACA,eAAAV,EACA,MAAA7N,CACN,EAAQ,KAAK,MACLsP,EAA0BnI,IAAW,KACrCjC,EAAU,KAAK,qBAAqBiC,EAAQwH,CAAU,EACtD9F,EAAW1B,GAAU,KACrBoI,GAAqBP,EAAqE7H,GAAO,cAAgB,MAAQ6H,IAAuB,OAASA,EAAqBrB,GAAe,0BAC7L/B,EAAcpG,GAAU,KAAO,GAAG,OAAOA,EAAO,KAAM,SAAS,EAAI,KACnE,CAACgK,EAAe1B,CAAa,EAAI,KAAK,iBAAiB5I,EAAS2I,CAAc,EAC9E4B,EAAe,KAAK,gBAAgBvB,CAAM,EAC1CwB,EAAiB,KAAK,uBAAuBxB,EAAQlO,CAAK,EAC1D2P,EAAc,CAAC9G,GAAYgF,GAAkB,KAC7C+B,EAAYrB,GAAgB,CAACxC,EAC7B8D,EAAiB,qBAAqB,OAAOxR,CAAE,EAC/CyR,EAAiB,wBAAwB,OAAOzR,CAAE,EACtD,OAAoBgD,EAAAA,KAAM0O,GAAU,CAClC,UAAW,uCACX,UAAWH,EACX,SAAU,CAActO,EAAI,IAAC,MAAO,CAClC,UAAW,gCACX,SAAuBD,EAAK,KAAC,MAAO,CAClC,UAAW,+BACX,SAAU,CAAcA,EAAK,KAAC,MAAO,CACnC,UAAW,gCACX,SAAU,CAAcC,EAAI,IAAC,QAAS,CACpC,QAASuO,EACT,SAAU,eACxB,CAAa,EAAgBvO,EAAI,IAAC6E,GAAgB,CACpC,GAAI0J,EACJ,SAAUhH,EACV,QAAS7C,EACT,aAAckJ,EACd,aAAcC,EACd,UAAWxB,GAAe,yBAC1B,SAAUsB,EACV,SAAUM,CACxB,CAAa,EAAgBjO,EAAI,IAAC,MAAO,CAC3B,UAAW,mBACX,SAAU,4DACxB,CAAa,EAAgBA,EAAI,IAAC,QAAS,CAC7B,QAASwO,EACT,SAAU,eACxB,CAAa,EAAgBxO,EAAI,IAAC,SAAU,CAC9B,GAAIwO,EACJ,MAAOhC,EACP,UAAW,gBACX,SAAU,KAAK,mBACf,SAAUwB,EACV,SAAUE,CACxB,CAAa,EAAgBlO,EAAI,IAAC,MAAO,CAC3B,UAAW,mBACX,SAAU,oGACxB,CAAa,CAAC,CACd,CAAW,EAAG8N,GAA8B9N,EAAI,IAAC,MAAO,CAC5C,UAAW,4BACX,SAAU8N,CACtB,CAAW,EAAGvG,GAAyBxH,EAAK,KAAC,MAAO,CACxC,UAAW,mCACX,SAAU,CAAcC,EAAI,IAAC0O,EAAQ,CACnC,KAAM,YACN,KAAM,SACN,QAAS,KAAK,qBACd,SAAUX,GAAiBd,GAAgBxC,EAC3C,QAASA,EAAiB,oCAAsC,OAChE,SAAU,QACxB,CAAa,EAAgBzK,EAAI,IAAC0O,EAAQ,CAC5B,KAAM,UACN,KAAM,SACN,UAAW,OACX,QAAS,KAAK,mBACd,SAAUL,GAAepB,GAAgBxC,EACzC,QAASA,EAAiB,kCAAoC,OAC9D,SAAU,MACxB,CAAa,CAAC,CACd,CAAW,CAAC,CACZ,CAAS,CACT,CAAO,EAAgBzK,EAAI,IAAC,MAAO,CAC3B,UAAW,6BACX,QAAS,KAAK,sBACd,cAAe,mCACf,SAAUoB,GAAyBrB,EAAK,KAACG,WAAW,CAClD,SAAU,CAAcF,EAAI,IAAC,MAAO,CAClC,UAAW,yBACX,SAAuBA,EAAI,IAAC,MAAO,CACjC,UAAW,+BACX,SAAUsK,CACxB,CAAa,CACb,CAAW,EAAgBvK,EAAK,KAAC,MAAO,CAC5B,UAAW,+BACX,SAAU,CAAcC,EAAI,IAAC,MAAO,CAClC,UAAW,wEACX,SAAuBA,EAAI,IAAC,SAAU,CACpC,UAAW,gBACX,MAAOoO,EACP,IAAK,KAAK,YACV,SAAU,KAAK,kBACf,WAAY,KAAK,uBACjB,MAAO,eACP,SAAUD,CAC1B,CAAe,CACf,CAAa,EAAGL,GAA8B9N,EAAI,IAAC,MAAO,CAC5C,UAAW,iCACX,SAAU8N,CACxB,CAAa,CAAC,CACd,CAAW,EAAgB9N,EAAI,IAAC,MAAO,CAC3B,UAAW,uBACX,SAAuBA,EAAI,IAAC0O,EAAQ,CAClC,KAAM,QACN,UAAW,WACX,QAAS,KAAK,oBACd,KAAmB1O,EAAI,IAACuE,GAAiB,CACvC,KAAMoK,GACN,UAAW,QAC3B,CAAe,EACD,QAAS,0BACvB,CAAa,CACb,CAAW,CAAC,CACZ,CAAS,CACT,CAAO,CAAC,CACR,CAAK,CACF,CACH,CACApQ,GAAgB8N,GAAgB,eAAgB,CAC9C,OAAQ,KACR,eAAgB,GAChB,eAAgB,GAChB,SAAU,GACV,aAAc,GACd,cAAe,KACf,OAAQ,KACR,MAAO,GACP,OAAQ,CAAE,EACV,iBAAkB,IAAA,GAClB,mBAAoB,IAAA,GACpB,mBAAoB,IAAA,EACtB,CAAC,EACD9N,GAAgB8N,GAAgB,cAAe,mBAAmB,EAClE9N,GAAgB8N,GAAgB,2BAA4B,8BAA8B,EAC1F9N,GAAgB8N,GAAgB,4BAA6B,iBAAiB,EAC9E,MAAAuC,GAAevC,GC1bf,SAAS9N,EAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAkBzX,IAAIgH,EAAMC,EAAI,OAAO,qBAAqB,EACtC8I,GAA2B,IAC3B7D,GAAkB,CAAC5B,EAAO6B,IAAa,CACzC,GAAI,CACF,iBAAAlD,CACD,EAAGkD,EACAzN,EAAUW,EAAY,eAAe,CACvC,MAAO8M,CACX,CAAG,EACGE,EAAgBC,GAAwBhC,EAAOrB,CAAgB,EAC/D+G,EAAiBjD,GAAqBzC,EAAOrB,CAAgB,EAC7DwD,EAAaC,GAAcpC,CAAK,EAChCqC,EAAwBC,GAAqCtC,EAAOrB,CAAgB,EACpF0C,EAAiBc,IAAerD,GAAS,SAAWuD,IAA0B,QAAaA,IAA0BjO,GAErHmQ,EAAiBpC,IAAerD,GAAS,QAAUuD,IAA0B,QAAaA,IAA0BjO,EACxH,MAAO,CACL,QAASuR,GAAuB3F,EAAOrB,CAAgB,EACvD,yBAA0B4D,GAAwCvC,EAAOrB,CAAgB,EACzF,GAAIiH,GAAO5F,CAAK,EAChB,eAAAqB,EACA,eAAAkD,EACA,SAAU7B,GAAY1C,CAAK,EAC3B,cAAA+B,EACA,eAAA2D,CACJ,CACA,EACIG,GAAYjD,GAAQhB,GAAiB,KAAM,KAAM,CACnD,WAAY,EACd,CAAC,EACM,MAAMkE,WAA4B7I,EAAAA,SAAU,CACjD,YAAYrI,EAAO,CACjB,MAAMA,CAAK,EACXO,EAAgB,KAAM,oBAAqB,MAAM,EACjDA,EAAgB,KAAM,oBAAqB,MAAM,EACjDA,EAAgB,KAAM,iBAAkB,MAAM,EAC9CA,EAAgB,KAAM,UAAW,MAAM,EACvCA,EAAgB,KAAM,UAAW,MAAM,EACvCA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,kBAAmBgC,GAAQ,CAAC4O,EAAW3S,EAAM4S,IAAc,CAC/E,GAAI,CACF,KAAAxR,EACA,KAAAC,CACD,EAAGrB,EACJ,OAAIoB,IAAS,QAAa0O,EAAW,WAAW1O,CAAI,EAC3CuR,EAAU,IAAIzQ,GAAS,KAAK,kBAAkB,OAAOA,CAAK,CAAC,EAE7DyQ,EAAU,IAAIzQ,GAErBA,GAAS,MAAQd,GAAQ,KAAOwR,EAAU,mBAAmB1Q,EAAOd,EAAMC,CAAI,EAAI,IAAI,CACvF,CAAA,CAAC,EACFU,EAAgB,KAAM,sBAAuBgC,GAAQ,CAACuO,EAAgB5I,IAAU,CAC9E,IAAI1I,EAAUW,EAAY,eAAe+H,CAAK,EAC9CJ,OAAAA,EAAI,MAAM,sBAAuBgJ,EAAgBtR,CAAO,EACjDsR,EAAe,OAAOjI,GAAQ,CACnC,IAAIwI,EACJ,QAASA,EAAYxI,EAAK,OAAS,MAAQwI,IAAc,OAAS,OAASA,EAAU,WAAa7R,CAC1G,CAAO,CACF,CAAA,CAAC,EACFe,EAAgB,KAAM,kBAAmBgC,GAAQqG,GAAS,CACxDd,EAAI,MAAM,kBAAmBc,CAAK,EAClC,IAAIf,EACJ,GAAIe,EAAM,OAAS,EAAG,CACpB,GAAI,CAACC,CAAI,EAAID,EACbf,EAASgB,EAAK,MACVD,EAAM,OAAS,GACjBd,EAAI,MAAM,gCAAiCc,CAAK,EAGpD,OAAOf,CACR,CAAA,CAAC,EACFtH,EAAgB,KAAM,uBAAwBgC,GAAQ,CAAC4K,EAAetF,IAAW,CAC/E,IAAIyJ,EAEJ,GADAxJ,EAAI,MAAM,uBAAwBqF,EAAetF,CAAM,EACnDA,GAAU,KACZ,OAAO,KAET,GAAI,CACF,QAAArI,CACD,EAAGqI,EACJ,OAAQyJ,EAAqBnE,EAAc,IAAI3N,CAAO,KAAO,MAAQ8R,IAAuB,OAASA,EAAqB,IAC3H,CAAA,CAAC,EACF/Q,EAAgB,KAAM,wBAAyBgC,GAAQ,CAACoH,EAAO9B,IAAW,CACxE,IAAI0J,EAEJ,OADAzJ,EAAI,MAAM,wBAAyB6B,EAAO9B,CAAM,EAC5C8B,GAAS,MAAQ9B,GAAU,KACtB,MAED0J,EAAsB5H,EAAM,QAAQ,KAAKvK,GAAS,CACxD,GAAI,CACF,KAAAS,EACA,KAAAD,CACD,EAAGR,EACJ,OAAOS,IAASgI,EAAO,YAAcjI,IAASiI,EAAO,UAC7D,CAAO,KAAO,MAAQ0J,IAAwB,OAASA,EAAsB,IACxE,CAAA,CAAC,EACF,KAAK,aAAevI,GAAS,KAAK,aAAa,KAAK,IAAI,EAAG6H,EAAwB,EACnF,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,yBAA2B,KAAK,yBAAyB,KAAK,IAAI,EACvE,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,wBAA0B,KAAK,wBAAwB,KAAK,IAAI,EACrE,KAAK,kBAAiC5H,EAAM,YAC5C,KAAK,eAA8BA,EAAM,YACzC,KAAK,QAAU,IAAIC,GACnB,GAAI,CACF,GAAAU,EACA,WAAA5C,EACA,SAAAC,CACD,EAAGjH,EACJ,KAAK,cAAgBwR,GAAe,iBAAiBvK,CAAQ,EAE7D,KAAK,kBAAoB,IAAIwK,GAAwB7H,EAAI,CACvD,aAAc,GACd,eAAgB,GAChB,4BAA6B,+BACnC,CAAK,EACD,GAAI,CACF,MAAOwF,EAAS,GAChB,aAAAH,EAAe,GACf,KAAMyC,EACN,KAAMC,EACN,UAAAC,CACN,EAAQ5K,GAA4D,GAC5Dd,EAASwL,GAAS,MAAQC,GAAS,KAAO,CAC5C,KAAMD,EACN,KAAMC,CACP,EAAG,OACJ,KAAK,MAAQ,CACX,OAAAzL,EACA,UAAW,IAAI2L,GAAUjI,EAAI,KAAK,aAAa,EAC/C,YAAa,OACb,aAAc,OACd,WAAY,EACZ,MAAOwF,EACP,UAAAwC,EACA,OAAQ,CAAE,EACV,aAAA3C,EACA,WAAY,GACZ,WAAY,GAEZ,WAAAjI,EAGA,eAAgB,GAChB,UAAW,GACX,SAAU,GACV,MAAO,IACb,CACG,CACD,mBAAoB,CAClB,KAAK,kBAAiB,EACtB,GAAI,CACF,eAAA8J,EACA,cAAA3D,CACN,EAAQ,KAAK,MACL,CACF,OAAAjH,EACA,MAAAxF,EACA,UAAAkR,CACN,EAAQ,KAAK,MACLE,EAAc,KAAK,eAAe3E,EAAe2D,CAAc,EAInE,GAHIgB,IAAgB,MAClB,KAAK,uBAAuBA,CAAW,EAErC5L,GAAU,KAAM,CAClB,GAAI,CACF,KAAArG,EACA,KAAAD,CACD,EAAGsG,EACJ,KAAK,WAAWrG,EAAMD,EAAMc,EAAOkR,CAAS,EAE/C,CACD,mBAAmBxI,EAAWC,EAAW,CACvC,GAAI,CACF,eAAAyH,EACA,cAAA3D,EACA,SAAAlG,CACN,EAAQ,KAAK,MACL,CACF,YAAA8K,CACN,EAAQ,KAAK,MACLlK,EAAS,KAAK,UAAUiJ,CAAc,EACtCgB,EAAc,KAAK,eAAe3E,EAAe2D,CAAc,EAC/DkB,EAAa,KAAK,UAAU5I,EAAU,cAAc,EACpD6I,EAAkB,KAAK,eAAe7I,EAAU,cAAeA,EAAU,cAAc,EACvFnC,IAAamC,EAAU,UAAYnC,IAAa,QAClD,KAAK,wBAAwBA,CAAQ,EAEnC8K,IAAgB1I,EAAU,aAAeA,EAAU,aAAe,OACpEvB,EAAI,MAAM,iDAAiD,EAC3DuB,EAAU,YAAY,UAKpByI,IAAgBG,GAAmBpK,IAAWmK,IAChD,KAAK,kBAAiB,EAEpBF,IAAgBG,IACdA,IAAoB,MACtB,KAAK,sBAAsBA,CAAe,EAExCH,IAAgB,MAClB,KAAK,uBAAuBA,CAAW,EAG5C,CACD,sBAAuB,CACrB,GAAI,CACF,eAAAhB,EACA,cAAA3D,CACN,EAAQ,KAAK,MACL,CACF,YAAA4E,CACN,EAAQ,KAAK,MACLD,EAAc,KAAK,eAAe3E,EAAe2D,CAAc,EACnE,KAAK,QAAQ,SACTgB,IAAgB,MAClB,KAAK,sBAAsBA,CAAW,EAEpC,KAAK,SACP,KAAK,QAAO,EAGZC,GAAY,MAAK,CAEpB,CACD,wBAAyB,CACvB,IAAIjH,EACJ,GAAI,KAAK,eAAe,SAAW,KACjC,OAAO,KAET,IAAIC,EAAU,KAAK,eAAe,QAAQ,cAAc,IAAI,OAAOsD,GAAe,wBAAwB,CAAC,EACvGrD,GAAQF,EAA0EC,GAAQ,sBAAqB,KAAQ,MAAQD,IAA0B,OAASA,EAAwB,KAC9L,GAAIE,GAAQ,MAAQA,EAAK,OAAS,GAAKA,EAAK,QAAU,EACpD,OAAO,KAET,IAAIC,EAAID,EAAK,KAAOA,EAAK,MAAQ,EAC7BE,EAAIF,EAAK,OACb,MAAO,CAACC,EAAGC,CAAC,CACb,CACD,yBAA0B,CACxB,GAAI,CACF,WAAAgH,CACN,EAAQ,KAAK,MACT,GAAIA,EAAahB,GAAoB,eACnC,MAAO,yCAAyC,OAAOA,GAAoB,eAAgB,WAAW,CAGzG,CACD,sBAAuB,CACrB,GAAI,CACF,MAAA9G,CACN,EAAQ,KAAK,MACT,OAAOA,GAAS,KAAO,GAAG,OAAOA,CAAK,EAAI,MAC3C,CACD,UAAUxB,EAAO,CACf,IAAIuJ,EAAa,KAAK,oBAAoBvJ,EAAO,IAAI,EACrD,OAAO,KAAK,gBAAgBuJ,CAAU,CACvC,CACD,eAAehF,EAAevE,EAAO,CACnC,IAAIf,EAAS,KAAK,UAAUe,CAAK,EACjC,OAAO,KAAK,qBAAqBuE,EAAetF,CAAM,CACvD,CACD,gBAAgBkK,EAAanJ,EAAO,CAClC,IAAIf,EAAS,KAAK,UAAUe,CAAK,EACjC,OAAO,KAAK,sBAAsBmJ,EAAalK,CAAM,CACtD,CACD,uBAAuBiK,EAAa,CAClC,GAAI,CACF,GAAAlI,CACN,EAAQ,KAAK,MACT9B,EAAI,MAAM,wBAAwB,EAClCgK,EAAY,iBAAiBlI,EAAG,MAAM,oBAAqB,KAAK,wBAAwB,EACxFkI,EAAY,iBAAiBlI,EAAG,MAAM,kBAAmB,KAAK,sBAAsB,EACpFkI,EAAY,iBAAiBlI,EAAG,MAAM,kBAAmB,KAAK,sBAAsB,EACpFkI,EAAY,iBAAiBlI,EAAG,MAAM,iBAAkB,KAAK,gBAAgB,EAC7EkI,EAAY,iBAAiBlI,EAAG,MAAM,gBAAiB,KAAK,eAAe,CAC5E,CACD,sBAAsBkI,EAAa,CACjC,GAAI,CACF,GAAAlI,CACN,EAAQ,KAAK,MACT9B,EAAI,MAAM,uBAAuB,EACjCgK,EAAY,oBAAoBlI,EAAG,MAAM,oBAAqB,KAAK,wBAAwB,EAC3FkI,EAAY,oBAAoBlI,EAAG,MAAM,kBAAmB,KAAK,sBAAsB,EACvFkI,EAAY,oBAAoBlI,EAAG,MAAM,kBAAmB,KAAK,sBAAsB,EACvFkI,EAAY,oBAAoBlI,EAAG,MAAM,iBAAkB,KAAK,gBAAgB,EAChFkI,EAAY,oBAAoBlI,EAAG,MAAM,gBAAiB,KAAK,eAAe,CAC/E,CACD,aAAa2B,EAAO,CAClB,GAAI,CACF,OAAArF,EACA,aAAA+I,EAAe,GACf,MAAAvO,CACD,EAAG6K,EACA,CACF,KAAA1L,EAAO,OACP,KAAAD,EAAO,MACb,EAAQsG,GAAgD,GAChDkM,EAAa,GACbR,EAAY,KAAK,MACrB,KAAK,SAASxF,GAAS,CACrB,IAAIG,EAAO8F,EACP,CACF,WAAArL,EACA,UAAWsL,EACX,WAAAC,EACA,WAAAC,CACD,EAAGpG,EAEAqG,EAASzL,GAAc,MAAQiI,IAAiBjI,EAAW,cAAgBnH,IAASmH,EAAW,MAAQpH,IAASoH,EAAW,MAAQtG,IAAUsG,EAAW,MAC5J,OAAAoL,GAAc7F,EAAQ,CAACiG,GAAcvD,IAAiB,CAACwD,GAAU,CAACF,MAAiB,MAAQhG,IAAU,OAASA,EAAQ,GACjH6F,IACHR,EAAYU,GAEP,CACL,WAAY,CACV,aAAArD,EACA,KAAApP,EACA,KAAAD,EACA,MAAAc,EACA,WAAY2R,EAAaT,KAAe,MAAQS,IAAe,OAASA,EAAa,MACtF,EACD,UAAAT,EACA,WAAYa,EACZ,WAAY,EACpB,CACA,EAAO,IAAM,CACHL,GACF,KAAK,WAAWvS,GAA0C,KAAMD,EAAMc,EAAOkR,CAAS,CAE9F,CAAK,CACF,CACD,kBAAmB,CACjB,KAAK,SAAS,CACZ,MAAO,IAAI,MAAM,oBAAoB,EACrC,eAAgB,GAChB,UAAW,EACjB,CAAK,CACF,CACD,iBAAkB,CAChB,KAAK,SAAS,CACZ,eAAgB,GAChB,MAAO,IACb,CAAK,CACF,CACD,0BAA2B,CACzB,KAAK,mBAAkB,CACxB,CACD,wBAAyB,CACvB,KAAK,iBAAgB,CACtB,CACD,uBAAuBc,EAAO,CAC5B,GAAI,CACF,OAAAC,CACD,EAAGD,EACJ,KAAK,SAAS,CACZ,WAAYC,CAClB,CAAK,CACF,CACD,sBAAuB,CACrB7K,EAAI,MAAM,sBAAsB,EAChC,GAAI,CACF,WAAAxE,CACN,EAAQ,KAAK,MACTA,EAAW,KAAKuH,EAAiB,gBAAiB,KAAMqG,GAAoB,aAAa,CAC1F,CACD,uBAAwB,CACtB,IAAI0B,EAAuBC,GAC1BD,EAAwB,KAAK,qBAAuB,MAAQA,IAA0B,SAAmBC,EAAyBD,EAAsB,WAAa,MAAQC,IAA2B,QAAkBA,EAAuB,aACnP,CAOD,cAAczH,EAAO,CACnB,IAAI0H,EAAwBC,EACxBX,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACjF,CACF,eAAAtB,CACN,EAAQ,KAAK,MACT,GAAI,KAAK,UAAUA,CAAc,GAAK,KAAM,CAC1ChJ,EAAI,MAAM,0CAA2CsD,CAAK,EAC1D,OAGF,KAAK,SAAS,CACZ,WAAY,CAACgH,CACnB,CAAK,GAIAU,EAAyB,KAAK,qBAAuB,MAAQA,IAA2B,SAAmBC,EAAyBD,EAAuB,WAAa,MAAQC,IAA2B,QAAkBA,EAAuB,eAAe3H,CAAK,CAC1Q,CACD,WAAWvL,EAAMD,EAAMc,EAAOkR,EAAW,CACvC,IAAIoB,EACA,CACF,eAAAlC,EACA,WAAAxN,CACN,EAAQ,KAAK,MACL4J,GAAiB8F,EAAkB,KAAK,UAAUlC,CAAc,KAAO,MAAQkC,IAAoB,OAAS,OAASA,EAAgB,QACrIC,EAAkB/F,IAAkB,KAAO,CAAA,EAAK,CAACA,CAAa,EAClEpF,EAAI,MAAM,aAAc,CACtB,KAAAjI,EACA,KAAAD,EACA,MAAAc,EACA,UAAAkR,EACA,gBAAAqB,CACN,CAAK,EACD3P,EAAW,KAAKuH,EAAiB,gBAAiB,KAAM,CACtD,KAAAhL,EACA,KAAAD,EACA,MAAOc,GAAwB,QAC/B,UAAAkR,EACA,gBAAAqB,CACN,CAAK,CACF,CACD,mBAAoB,CAClB,GAAI,CACF,eAAAnC,EACA,cAAA3D,CACN,EAAQ,KAAK,MACLtF,EAAS,KAAK,UAAUiJ,CAAc,EACtCgB,EAAc,KAAK,eAAe3E,EAAe2D,CAAc,EAOnE,GANAhJ,EAAI,MAAM,oBAAqBD,EAAQiK,CAAW,EAClD,KAAK,SAAS,CACZ,OAAQ,CAAE,EACV,YAAa,OACb,MAAO,IACb,CAAK,EACGjK,GAAU,KAAM,CAClBC,EAAI,MAAM,kBAAkB,EAC5B,KAAK,SAAS,CACZ,UAAW,GACX,SAAU,GACV,aAAc,GACd,WAAY,CACpB,CAAO,EACD,OAEF,KAAK,SAAS,CACZ,UAAW,EACjB,CAAK,EACGgK,GAAe,OAGnB,KAAK,SAAS,CACZ,SAAU,GACV,WAAYA,EAAY,IAC9B,CAAK,EACD,KAAK,QAAQ,IAAIA,EAAY,KAAM,EAAEpI,GAAYA,EAAS,MAAK,CAAE,EAAE,KAAKqI,GAAe,CAErF,KAAK,uBAAuBA,CAAW,EACvC,KAAK,SAAS,CACZ,YAAAA,CACR,CAAO,CACP,CAAK,EAAE,MAAM3H,GAAS,CACZC,GAAa,WAAWD,CAAK,IAGjCtC,EAAI,MAAMsC,CAAK,EACf,KAAK,SAAS,CACZ,UAAW,GACX,MAAAA,CACR,CAAO,EACP,CAAK,EACF,CACD,kBAAmB,CACjB,GAAI,CACF,eAAA0G,EACA,cAAA3D,CACN,EAAQ,KAAK,MACL,CACF,YAAA4E,CACN,EAAQ,KAAK,MACLD,EAAc,KAAK,eAAe3E,EAAe2D,CAAc,EAEnE,GADAhJ,EAAI,MAAM,mBAA8EgK,GAAY,IAAI,EACpGC,GAAe,MAAQD,GAAe,KAAM,CAC9ChK,EAAI,MAAM,uBAAuB,EACjC,OAEF,IAAIoL,EAAQ,CAAC,GAAGpB,EAAY,IAAI,EAChCC,EAAY,UAAUmB,CAAK,EAC3B,KAAK,YAAYnB,CAAW,CAC7B,CACD,oBAAqB,CACnB,GAAI,CACF,eAAAjB,EACA,cAAA3D,CACN,EAAQ,KAAK,MACL,CACF,YAAA4E,CACN,EAAQ,KAAK,MACLD,EAAc,KAAK,eAAe3E,EAAe2D,CAAc,EAEnE,GADAhJ,EAAI,MAAM,qBAAgFgK,GAAY,MAAM,EACxGC,GAAe,MAAQD,GAAe,KAAM,CAC9ChK,EAAI,MAAM,uBAAuB,EACjC,OAEF,IAAIqL,EAAU,CAAC,GAAGrB,EAAY,MAAM,EACpCC,EAAY,YAAYoB,CAAO,EAC/B,KAAK,YAAYpB,CAAW,CAC7B,CACD,uBAAuBA,EAAa,CAClC,GAAI,CACF,GAAAnI,CACN,EAAQ,KAAK,MAKT,GAJA9B,EAAI,MAAM,yBAAoFiK,GAAY,IAAI,EAC1G,KAAK,SACP,KAAK,QAAO,EAEVA,GAAe,KAAM,CACvB,KAAK,QAAU,OACf,OAEF,KAAK,QAAUA,EAAY,iBAAiBnI,EAAG,MAAM,cAAe,KAAK,uBAAuB,EAChG,KAAK,YAAYmI,CAAW,CAC7B,CACD,YAAYA,EAAa,CACvB,GAAI,CACF,eAAAjB,CACN,EAAQ,KAAK,MACLsC,EAAe,KAAK,gBAAgBrB,EAAajB,CAAc,EACnE,GAAI,CAACsC,EAAc,CACjBtL,EAAI,MAAM,uBAAuB,EACjC,OAEFiK,EAAY,YAAY,EAAGb,GAAoB,eAAiB,EAAG,CAACkC,CAAY,CAAC,CAClF,CACD,wBAAwBnM,EAAU,CAChC,GAAI,CACF,GAAA2C,CACN,EAAQ,KAAK,MACLyJ,EAAgB7B,GAAe,iBAAiBvK,CAAQ,EACvDqM,GAAU,KAAK,cAAeD,CAAa,IAC9C,KAAK,cAAgBA,EACrB,KAAK,SAAS,CACZ,UAAW,IAAIxB,GAAUjI,EAAIyJ,CAAa,CAClD,CAAO,EAEJ,CACD,wBAAwBE,EAAO,CAC7B,GAAI,CACF,OAAAZ,CACD,EAAGY,EACA,CACF,KAAAC,CACD,EAAGb,EACA,CACF,eAAA7B,CACN,EAAQ,KAAK,MACL,CACF,YAAAiB,CACN,EAAQ,KAAK,MACT,GAAI,CAACA,EAAa,CAChBjK,EAAI,MAAM,qBAAqB,EAC/B,OAEF,IAAIsL,EAAe,KAAK,gBAAgBrB,EAAajB,CAAc,EACnE,GAAI,CAACsC,EAAc,CACjBtL,EAAI,MAAM,yBAAyB,EACnC,OAEF,IAAI8G,EAAS4E,EAAK,IAAIC,GAAOA,EAAI,IAAIL,CAAY,CAAC,EAClD,KAAK,SAAS,CACZ,OAAAxE,EACA,UAAW,GACX,SAAU,GACV,aAAAwE,CACN,CAAK,CACF,CACD,wBAAyB,CACvB,GAAI,CACF,yBAAArK,CACN,EAAQ,KAAK,MACJA,GAGLA,EAAyB,KAAMmI,GAAoB,aAAa,CACjE,CACD,wBAAyB,CACvB,GAAI,CACF,yBAAAnI,CACN,EAAQ,KAAK,MACJA,GAGLA,EAAyB,KAAM,MAAS,CACzC,CACD,QAAS,CACP,GAAI,CACF,QAAAnD,EACA,eAAAkL,EACA,eAAAnB,EACA,YAAAhO,EACA,WAAA2B,EACA,eAAAmJ,CACN,EAAQ,KAAK,MACL,CACF,OAAAvG,EACA,UAAAkL,EACA,eAAA7N,EACA,aAAA0L,EACA,MAAAvO,EACA,OAAAkO,EACA,aAAAwE,EACA,UAAA/P,EACA,SAAAD,CACN,EAAQ,KAAK,MACLyE,EAAS,KAAK,UAAUiJ,CAAc,EACtC4C,EAAuB,KAAK,0BAC5BC,EAAoB,KAAK,uBACzBC,EAAkBxQ,GAAYgQ,GAAgB,KAAO,KAAK,gBAAgBxE,EAAQwE,EAAchC,CAAS,EAAI,CAAA,EACjH,OAAoBpP,EAAAA,IAAKK,GAAa,CACpC,aAAcsR,EACd,UAAWtQ,EACX,SAAUD,EACV,eAAgBG,EAChB,UAAW,6BACX,eAAgB,KAChB,YAAa5B,EACb,WAAY2B,EACZ,kBAAmB,KAAK,sBACxB,WAAY,kBACZ,WAAY,iBACZ,SAAuBtB,EAAI,IAAC,MAAO,CACjC,IAAK,KAAK,eACV,UAAW,kDACX,SAAuBA,EAAI,IAACqM,GAAgB,CAC1C,IAAK,KAAK,kBACV,OAAQnI,EACR,QAASN,EACT,aAAcqJ,EACd,eAAgBxC,EAChB,eAAgBkD,EAChB,SAAUvM,EACV,cAAesQ,EACf,OAAQ7L,EACR,MAAOnH,EACP,OAAQkT,EACR,SAAU,KAAK,aACf,iBAAkB,KAAK,qBACvB,mBAAoB,KAAK,uBACzB,mBAAoB,KAAK,sBACnC,CAAS,CACT,CAAO,CACP,CAAK,CACF,CACH,CACArT,EAAgB2Q,GAAqB,cAAe,qBAAqB,EACzE3Q,EAAgB2Q,GAAqB,YAAa,qBAAqB,EACvE3Q,EAAgB2Q,GAAqB,iBAAkB,GAAG,EAC1D3Q,EAAgB2Q,GAAqB,gBAAiB,OAAO,OAAO,CAClE,KAAM,eACN,KAAM,IACR,CAAC,CAAC,EACF,IAAI2C,GAA+B5C,GAAUC,EAAmB,EAChE,MAAA4C,GAAeD,GC9qBf,SAASzM,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,EAAK,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUpH,EAAK,CAAEF,GAAgBoH,EAAQlH,EAAKoH,EAAOpH,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBkH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUpH,EAAK,CAAE,OAAO,eAAekH,EAAQlH,EAAK,OAAO,yBAAyBoH,EAAQpH,CAAG,CAAC,CAAE,CAAE,EAAK,OAAOkH,CAAS,CAC1f,SAASpH,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAezX,IAAIgH,EAAMC,EAAI,OAAO,kBAAkB,EACnCgM,GAAyB,gBACzBC,GAAyB,2BAC7B,MAAMC,WAAyB5L,EAAAA,SAAU,CACvC,OAAO,oBAAqB,CAC1B,IAAI6L,EACAC,EAAU,SAAS,cAAc,KAAK,EAC1CA,EAAQ,UAAU,IAAI,sBAAsB,EAC5CA,EAAQ,iBAAiB,eAAgB,IAAM,CAE7CA,EAAQ,OAAM,CACpB,CAAK,GACAD,EAAwB,SAAS,cAAc,MAAM,KAAO,MAAQA,IAA0B,QAAkBA,EAAsB,YAAYC,CAAO,CAC3J,CACD,YAAYnU,EAAO,CACjB,MAAMA,CAAK,EACXO,GAAgB,KAAM,iBAA+B0I,EAAM,UAAW,CAAA,EACtE1I,GAAgB,KAAM,cAA4B0I,EAAM,UAAW,CAAA,EACnE1I,GAAgB,KAAM,kBAAgC0I,EAAM,UAAW,CAAA,EACvE1I,GAAgB,KAAM,wBAAyB6T,EAAW,CAACC,EAAYC,IAAcA,IAAc,QAAaD,EAAW,KAAK7V,GAAQ,CACtI,GAAI,CACF,GAAAO,CACD,EAAGP,EACJ,OAAOO,IAAOuV,EAAU,EACzB,CAAA,CAAC,CAAC,EACH,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,yBAA2B,KAAK,yBAAyB,KAAK,IAAI,EACvE,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,wBAA0B,KAAK,wBAAwB,KAAK,IAAI,EACrE,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,6BAA+B,KAAK,6BAA6B,KAAK,IAAI,EAC/E,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,MAAQ,CACX,OAAQ,OACR,UAAW,OACX,eAAgB,GAChB,eAAgB,OAChB,mBAAoB,CAAE,EACtB,iBAAkB,EACxB,CACG,CACD,mBAAoB,CAClB,GAAI,CACF,aAAArF,CACN,EAAQ,KAAK,MACLA,EACF,KAAK,iBAAgB,EAErB,KAAK,mBAAkB,CAE1B,CACD,mBAAmB7F,EAAWC,EAAW,CACvC,GAAI,CACF,aAAA4F,EACA,WAAAoF,CACN,EAAQ,KAAK,MACL,CACF,mBAAAE,CACN,EAAQ,KAAK,MAOT,GANInL,EAAU,cAAgB,CAAC6F,GAC7B,KAAK,mBAAkB,EAErB,KAAK,kBAAmB,GAAI,CAAC,KAAK,kBAAkB5F,CAAS,GAC/D,KAAK,iBAAgB,EAEnBgL,IAAejL,EAAU,WAC3B,GAAI,CAAC6F,GAAgBoF,EAAW,OAAS,GAAKjL,EAAU,WAAW,SAAW,GAAKmL,EAAmB,SAAW,EAAG,CAElH,GAAI,CACF,SAAAvF,CACV,EAAY,KAAK,MACTA,EAAS,CACP,aAAc,GACd,WAAYqF,EAAW,CAAC,EAAE,EACpC,CAAS,OAED,KAAK,iBAAgB,CAG1B,CACD,oBAAqB,CACnB,GAAI,CACF,WAAAA,EACA,WAAAG,CACN,EAAQ,KAAK,MACT1M,EAAI,MAAM,qBAAsBuM,EAAYG,CAAU,EACtD,KAAK,SAAS,CACZ,mBAAoB,CAAC,GAAGH,CAAU,EAClC,OAAQG,CACd,CAAK,CACF,CAGD,kBAAmB,CACjB,GAAI,CACF,aAAAvF,EACA,WAAAoF,EACA,WAAAG,EACA,SAAAxF,CACN,EAAQ,KAAK,MAET,GADAlH,EAAI,MAAM,mBAAoBuM,EAAYG,CAAU,EAChD,EAACvF,GAGD,CAACoF,EAAW,KAAKjV,GAAS,CAC5B,GAAI,CACF,GAAAL,CACD,EAAGK,EACJ,OAAOL,IAAOyV,CACpB,CAAK,EAAG,CAGF,IAAIC,EAAcJ,EAAW,SAAW,EACxCrF,EAAS,CACP,aAAc,CAACyF,EACf,WAAYA,EAAc,OAAYJ,EAAW,CAAC,EAAE,EAC5D,CAAO,EAEJ,CACD,yBAAyBvO,EAAO,CAC9B,GAAI,CACF,MAAO4O,CACb,EAAQ5O,EAAM,OACV,KAAK,SAAS,CACZ,OAAA4O,CACN,CAAK,CACF,CACD,mBAAmB5O,EAAO,CACxB,GAAI,CACF,MAAO0O,CACb,EAAQ1O,EAAM,OACN,CACF,aAAAmJ,EACA,SAAAD,CACN,EAAQ,KAAK,MACT,KAAK,eAAewF,CAAU,EAC9BxF,EAAS,CACP,aAAAC,EACA,WAAAuF,CACN,CAAK,CACF,CACD,mBAAoB,CAClB,GAAI,CACF,WAAAA,CACN,EAAQ,KAAK,MACT,KAAK,eAAeA,CAAU,CAC/B,CACD,sBAAuB,CACrB,GAAI,CACF,SAAAxF,EACA,WAAAwF,EACA,WAAAH,CACN,EAAQ,KAAK,MACT,KAAK,SAAS,CACZ,mBAAoB,CAAE,CAC5B,CAAK,EAGGA,EAAW,OAAS,GACtBrF,EAAS,CACP,aAAc,GACd,WAAAwF,CACR,CAAO,CAEJ,CACD,oBAAqB,CACnB,GAAI,CACF,SAAAxF,EACA,aAAA2F,CACN,EAAQ,KAAK,MACL,CACF,mBAAAJ,EACA,OAAAG,CACN,EAAQ,KAAK,MACT,KAAK,SAAS,CACZ,mBAAoB,CAAE,CAC5B,CAAK,EACD5M,EAAI,MAAM,cAAeyM,EAAoBG,CAAM,EACnDC,EAAaJ,CAAkB,EAE3BA,EAAmB,OAAS,GAC9BvF,EAAS,CACP,aAAc,GACd,WAAY0F,CACpB,CAAO,CAEJ,CACD,qBAAsB,CACpB,GAAI,CACF,eAAAE,CACN,EAAQ,KAAK,MACTX,GAAiB,mBAAkB,EACnC,IAAIlV,EAAKU,KACLoV,EAASD,IACTN,EAAY,CACd,GAAAvV,EACA,MAAO,GACP,OAAA8V,CACN,EACI/M,EAAI,MAAM,kBAAmBwM,CAAS,EACtC,KAAK,SAAS,CACZ,eAAgB,GAChB,eAAgB,OAChB,UAAAA,CACN,CAAK,CACF,CACD,oBAAqB,CACnB,KAAK,SAAS,CACZ,UAAW,MACjB,CAAK,CACF,CACD,6BAA6BxO,EAAO,CAClC,KAAK,SAAS,CACZ,iBAAkBA,EAAM,OAAO,QAAU,MAC/C,CAAK,CACF,CACD,aAAagP,EAAgB,CAC3B,IAAIC,EACA,CACF,UAAAT,EACA,mBAAAC,CACN,EAAQ,KAAK,MACLS,GAAeD,EAAuFD,GAAe,KAAI,KAAQ,MAAQC,IAAyB,OAASA,EAAuB,GACtM,GAAIC,EAAY,SAAW,EACzBlN,OAAAA,EAAI,MAAM,uBAAwBkN,CAAW,EACtC,uBAET,GAAIV,IAAc,QAAaC,EAAmB,KAAKhJ,GAAS,CAC9D,GAAI,CACF,MAAA0J,EACA,GAAAlW,CACD,EAAGwM,EACJ,OAAO0J,IAAUD,GAAejW,IAAOuV,EAAU,EACvD,CAAK,EACCxM,OAAAA,EAAI,MAAM,oCAAqCkN,CAAW,EACnD,mCAGV,CACD,qBAAsB,CACpB,IAAIE,EACA,CACF,eAAAJ,EACA,UAAAR,EACA,mBAAAC,EACA,iBAAAY,CACN,EAAQ,KAAK,MACT,GAAIb,IAAc,OAAW,CAC3BxM,EAAI,MAAM,wBAAwB,EAClC,OAEF,IAAIsN,EAAiB,KAAK,aAAaN,CAAc,EAErD,GADAhN,EAAI,MAAM,sBAAuBgN,EAAgBM,CAAc,EAC3DA,IAAmB,OAAW,CAChC,KAAK,SAAS,CACZ,eAAAA,CACR,CAAO,EACD,OAEF,IAAIJ,GAAeE,EAAwFJ,GAAe,KAAI,KAAQ,MAAQI,IAA0B,OAASA,EAAwB,GACrMG,EAAiB3N,GAAcA,GAAc,CAAA,EAAI4M,CAAS,EAAG,GAAI,CACnE,MAAOU,EACP,iBAAAG,CACN,CAAK,EACG3G,EAAgB+F,EAAmB,UAAUnI,GAAS,CACxD,GAAI,CACF,GAAArN,CACD,EAAGqN,EACJ,OAAOrN,IAAOuV,EAAU,EAC9B,CAAK,EACGgB,EAA4B,CAAC,GAAGf,CAAkB,EAClD/F,GAAiB,GACnB8G,EAA0B9G,CAAa,EAAI6G,EAC3CvN,EAAI,MAAM,uBAAwBwN,CAAyB,IAE3DA,EAA0B,KAAKD,CAAc,EAC7CvN,EAAI,MAAM,iCAAkCwN,CAAyB,GAEvE,KAAK,SAAS,CACZ,OAAQD,EAAe,GACvB,mBAAoBC,EACpB,UAAW,MACjB,CAAK,CACF,CACD,iBAAkB,CAChB,KAAK,SAASlK,GAAS,CACrB,GAAI,CACF,OAAAsJ,EACA,mBAAoBa,CACrB,EAAGnK,EACAoD,EAAgB+G,EAAe,UAAUhJ,GAAS,CACpD,GAAI,CACF,GAAAxN,CACD,EAAGwN,EACJ,OAAOxN,IAAO2V,CACtB,CAAO,EACD,GAAIlG,EAAgB,EAClB1G,OAAAA,EAAI,MAAM,0CAA2CyN,EAAgBb,CAAM,EACpE,KAET,IAAIH,EAAqBgB,EAAe,OAAO7C,GAAS,CACtD,GAAI,CACF,GAAA3T,CACD,EAAG2T,EACJ,OAAO3T,IAAO2V,CACtB,CAAO,EACGc,EAAmB,KAAK,IAAI,EAAG,KAAK,IAAIjB,EAAmB,OAAS,EAAG/F,EAAgB,CAAC,CAAC,EACzFiH,EAAgBlB,EAAmB,OAAS,EAAIA,EAAmBiB,CAAgB,EAAE,GAAK,OAC9F1N,OAAAA,EAAI,MAAM,uBAAwB4M,EAAQa,EAAgBhB,CAAkB,EAC5EzM,EAAI,MAAM,gBAAiB0N,EAAkBC,CAAa,EACnD,CACL,mBAAAlB,EACA,OAAQkB,CAChB,CACA,CAAK,CACF,CACD,iBAAkB,CAChB,GAAI,CACF,eAAAb,CACN,EAAQ,KAAK,MACTX,GAAiB,mBAAkB,EACnC,IAAIY,EAASD,IACb,KAAK,SAASrB,GAAS,CACrB,GAAI,CACF,mBAAoBgC,EACpB,OAAAb,CACD,EAAGnB,EACJ,GAAImB,IAAW,OACb5M,OAAAA,EAAI,MAAM,iCAAiC,EACpC,KAET,IAAIyM,EAAqB,CAAC,GAAGgB,CAAc,EACvCG,EAAmBnB,EAAmB,UAAUoB,GAAS,CAC3D,GAAI,CACF,GAAA5W,CACD,EAAG4W,EACJ,OAAO5W,IAAO2V,CACtB,CAAO,EACD,OAAIgB,EAAmB,GACrB5N,EAAI,MAAM,oCAAoC,EACvC,OAGTyM,EAAmBmB,CAAgB,EAAIhO,GAAcA,GAAc,CAAE,EAAE6M,EAAmBmB,CAAgB,CAAC,EAAG,GAAI,CAChH,OAAAb,CACR,CAAO,EACD/M,EAAI,MAAM,aAAcyM,EAAoBM,CAAM,EAC3C,CACL,mBAAAN,CACR,EACA,CAAK,CACF,CACD,eAAgB,CACd,KAAK,SAASqB,GAAS,CACrB,GAAI,CACF,OAAAlB,EACA,mBAAAH,CACD,EAAGqB,EACAC,EAActB,EAAmB,KAAKuB,GAAU,CAClD,GAAI,CACF,GAAA/W,CACD,EAAG+W,EACJ,OAAO/W,IAAO2V,CACtB,CAAO,EACD,GAAImB,IAAgB,OAClB/N,OAAAA,EAAI,MAAM,8BAA+B4M,EAAQH,CAAkB,EAC5D,KAET,GAAI,CACF,MAAAU,EACA,iBAAAE,EAAmB,EACpB,EAAGU,EACJ,MAAO,CACL,eAAgBZ,EAChB,eAAgB,OAChB,UAAWY,EACX,iBAAAV,CACR,CACA,CAAK,CACF,CACD,oBAAoBrP,EAAO,CACzBA,EAAM,gBAAe,EACrB,GAAI,CACF,SAAAkJ,EACA,WAAAwF,CACN,EAAQ,KAAK,MACTxF,EAAS,CACP,aAAc,GACd,WAAAwF,CACN,CAAK,CACF,CACD,sBAAsB1O,EAAO,CAC3BgC,EAAI,MAAM,uBAAuB,EAE7BhC,EAAM,SAAW,KAAK,YAAY,SACpC,KAAK,WAAU,CAElB,CACD,sBAAsBA,EAAO,CAC3B,GAAI,CACF,MAAOgP,CACb,EAAQhP,EAAM,OACNsP,EAAiB,KAAK,aAAaN,CAAc,EACrD,KAAK,SAAS,CACZ,eAAAA,EACA,eAAAM,CACN,CAAK,CACF,CACD,wBAAwBtP,EAAO,CAC7B,GAAI,CACF,IAAArF,CACD,EAAGqF,EACArF,IAAQ,UACVqF,EAAM,eAAc,EACpB,KAAK,oBAAmB,EAE3B,CACD,mBAAoB,CAClB,IAAIsF,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAAK,MACjF,CACF,UAAAkJ,CACD,EAAGlJ,EACJ,OAAOkJ,IAAc,MACtB,CACD,eAAeE,EAAY,CACzB,GAAI,CACF,QAAAuB,EACA,WAAA1B,CACN,EAAQ,KAAK,MACT,GAAIG,IAAe,OAAW,CAC5B1M,EAAI,MAAM,oBAAoB,EAC9B,OAEF,IAAIkO,EAAY3B,EAAW,KAAK4B,GAAU,CACxC,GAAI,CACF,GAAAlX,CACD,EAAGkX,EACJ,OAAOlX,IAAOyV,CACpB,CAAK,EACD,GAAIwB,IAAc,OAAW,CAC3BlO,EAAI,MAAM,sCAAuC0M,EAAYH,CAAU,EACvE,OAEFvM,EAAI,MAAM,kBAAmBkO,CAAS,EACtCD,EAAQC,CAAS,CAClB,CACD,YAAa,CACX,IAAIzG,GACHA,EAAwB,KAAK,YAAY,WAAa,MAAQA,IAA0B,QAAkBA,EAAsB,MAAK,CACvI,CACD,kBAAmB,CACjB,IAAI2G,GACHA,EAAwB,KAAK,eAAe,WAAa,MAAQA,IAA0B,QAAkBA,EAAsB,MAAK,CAC1I,CACD,QAAS,CACP,GAAI,CACF,eAAApB,EACA,eAAAM,EACA,OAAAV,EACA,UAAAJ,EACA,mBAAAC,EACA,iBAAAY,CACN,EAAQ,KAAK,MACL,CACF,aAAAlG,EACA,WAAAoF,EACA,WAAAG,CACN,EAAQ,KAAK,MACL2B,EAAoB,KAAK,oBACzBC,EAAwB,KAAK,sBAAsB7B,EAAoBD,CAAS,EAChF+B,EAAkB9B,EAAmB,SAAW,EAChD+B,EAAkB,CAACH,GAAqBE,GAAmBhC,EAAW,SAAW,EACjFkC,EAAmB,CAACJ,GAAqB,CAACG,EAC1CE,EAA8BzU,EAAK,KAAC,MAAO,CAC7C,UAAW,iBACX,SAAU,CAAcC,EAAI,IAACuE,GAAiB,CAC5C,KAAMkQ,GACN,KAAMC,GACN,UAAW,yBACnB,CAAO,EAAgB1U,EAAI,IAACuE,GAAiB,CACrC,KAAMoQ,GACN,UAAW,eACX,UAAW,yBACnB,CAAO,CAAC,CACR,CAAK,EACGC,EAA6B7U,EAAK,KAAC,MAAO,CAC5C,UAAW,YACX,SAAU,CAAcC,EAAI,IAACuE,GAAiB,CAC5C,KAAMkQ,GACN,KAAMC,GACN,UAAW,yBACnB,CAAO,EAAgB1U,EAAI,IAACuE,GAAiB,CACrC,KAAMsQ,GACN,UAAW,yBACnB,CAAO,CAAC,CACR,CAAK,EACD,OAAoB7U,EAAAA,IAAK,MAAO,CAC9B,UAAW,0CACX,SAAuBD,EAAK,KAAC0O,GAAU,CACrC,UAAW,cACX,UAAWxB,EACX,SAAU,CAAcjN,EAAI,IAAC,MAAO,CAClC,UAAW,wDACX,SAAuBD,EAAK,KAAC,MAAO,CAClC,UAAW,kCACX,SAAU,CAACuU,GAAgCvU,EAAK,KAAC,MAAO,CACtD,SAAU,CAAcC,EAAI,IAAC0O,EAAQ,CACnC,KAAM,QACN,UAAW,4BACX,QAAS,KAAK,oBACd,KAAM8F,EACN,SAAU,oBAC1B,CAAe,EAAgBxU,EAAI,IAAC,MAAO,CAC3B,UAAW,yBACX,SAAU,mHAC1B,CAAe,CAAC,CAChB,CAAa,EAAGmU,GAAkCpU,EAAK,KAAC,MAAO,CACjD,UAAW,4CACX,cAAe,4BACf,SAAU,CAAcA,EAAK,KAAC,MAAO,CACnC,UAAW,aACX,SAAU,CAAcC,EAAI,IAAC,QAAS,CACpC,SAAUoU,EAAwB,WAAa,mBACjE,CAAiB,EAAgBrU,EAAK,KAAC,MAAO,CAC5B,UAAW,uBACX,SAAU,CAAcC,EAAI,IAAC,QAAS,CACpC,KAAM,OACN,UAAW,8BACX,YAAa+R,GACb,MAAOe,EACP,IAAK,KAAK,eACV,SAAU,KAAK,sBACf,WAAY,KAAK,wBACjB,WAAY,OAChC,CAAmB,EAAgB9S,EAAI,IAAC0O,EAAQ,CAC5B,cAAe,wBACf,KAAM,QACN,UAAW,sCACX,QAAS,KAAK,oBACd,QAAS,OACT,UAAW,cACX,KAAMoG,EAC1B,CAAmB,EAAgB9U,EAAI,IAAC0O,EAAQ,CAC5B,cAAe,uBACf,KAAM,QACN,UAAW,sCACX,QAAS,KAAK,mBACd,QAAS,SACT,KAAMqG,EAC1B,CAAmB,CAAC,CACH,CAAA,EAAG3B,IAAmB,QAA0BpT,EAAAA,IAAK,MAAO,CAC3D,UAAW,gBACX,SAAUoT,CAC5B,CAAiB,CAAC,CAClB,CAAe,EAAgBpT,EAAI,IAAC,MAAO,CAC3B,UAAW,aACX,SAAuBD,EAAK,KAACiV,GAAY,CACvC,SAAU,KAAK,6BACf,MAAO,GAAG,OAAO7B,CAAgB,EACjC,SAAU,CAAcnT,EAAI,IAACiV,GAAW,CACtC,MAAO,QACP,SAAU,sBAC9B,CAAmB,EAAgBjV,EAAI,IAACiV,GAAW,CAC/B,MAAO,OACP,SAAU,0BAC9B,CAAmB,CAAC,CACpB,CAAiB,CACjB,CAAe,CAAC,CAChB,CAAa,EAAGV,GAAiCxU,EAAK,KAAC,MAAO,CAChD,UAAW,qCACX,SAAU,CAAcA,EAAK,KAAC,MAAO,CACnC,UAAW,aACX,SAAU,CAAcC,EAAI,IAAC,QAAS,CACpC,SAAU,kBAC5B,CAAiB,EAAgBD,EAAK,KAAC,MAAO,CAC5B,UAAW,0BACX,SAAU,CAAcA,EAAK,KAAC,SAAU,CACtC,cAAe,8BACf,IAAK,KAAK,gBACV,MAAO2S,GAAgD,KACvD,UAAW,oCACX,SAAU,KAAK,yBACf,SAAU2B,EACV,SAAU,CAACA,GAAgCrU,EAAI,IAAC,SAAU,CACxD,MAAO,KACP,SAAU,GACV,SAAUgS,EAChC,CAAqB,EAAGO,EAAmB,IAAI2C,GAAU,CACnC,GAAI,CACF,GAAAnY,EACA,MAAAkW,CACD,EAAGiC,EACJ,OAAoBlV,EAAAA,IAAK,SAAU,CACjC,MAAOjD,EACP,SAAUkW,CACX,EAAElW,CAAE,CAC3B,CAAqB,CAAC,CACtB,CAAmB,EAAgBiD,EAAI,IAAC0O,EAAQ,CAC5B,KAAM,QACN,QAAS,KAAK,gBACd,SAAU2F,EACV,KAAMO,EACN,QAAS,QAC7B,CAAmB,EAAgB5U,EAAI,IAAC0O,EAAQ,CAC5B,KAAM,QACN,QAAS,KAAK,cACd,SAAU2F,EACV,KAAMc,GACN,QAAS,MAC7B,CAAmB,EAAgBnV,EAAI,IAAC0O,EAAQ,CAC5B,KAAM,QACN,QAAS,KAAK,gBACd,SAAU2F,EACV,KAAMe,GACN,QAAS,QAC7B,CAAmB,CAAC,CACpB,CAAiB,CAAC,CAClB,CAAe,EAAgBpV,EAAI,IAAC,MAAO,CAC3B,SAAuBA,EAAI,IAAC0O,EAAQ,CAClC,KAAM,QACN,UAAW,4BACX,QAAS,KAAK,oBACd,KAAM8F,EACN,SAAU,wBAC5B,CAAiB,CACjB,CAAe,EAAgBzU,EAAK,KAAC,MAAO,CAC5B,UAAW,kBACX,SAAU,CAAcC,EAAI,IAAC0O,EAAQ,CACnC,KAAM,YACN,QAAS,KAAK,qBACd,SAAU,QAC5B,CAAiB,EAAG,IAAqB1O,EAAI,IAAC0O,EAAQ,CACpC,KAAM,UACN,QAAS,KAAK,mBACd,SAAU,MAC5B,CAAiB,CAAC,CAClB,CAAe,CAAC,CAChB,CAAa,CAAC,CACd,CAAW,CACX,EAAW,OAAO,EAAgB3O,EAAK,KAAC,MAAO,CACrC,UAAW,qDACX,QAAS,KAAK,sBACd,SAAU,CAAcC,EAAI,IAAC,MAAO,CAClC,UAAW,4BACX,SAAuBA,EAAI,IAAC,MAAO,CACjC,UAAW,kCACX,SAAU,aACxB,CAAa,CACb,CAAW,EAAgBA,EAAI,IAAC,MAAO,CAC3B,UAAW,kCACX,SAAuBA,EAAI,IAAC,MAAO,CACjC,UAAW,iCACX,SAAuBD,EAAK,KAAC,MAAO,CAClC,UAAW,0BACX,SAAU,CAAcA,EAAK,KAAC,SAAU,CACtC,cAAe,2BACf,IAAK,KAAK,YACV,MAAOyS,EACP,UAAW,oCACX,SAAU,KAAK,mBACf,SAAU,CAACH,EAAW,SAAW,GAAkBrS,EAAAA,IAAK,SAAU,CAChE,MAAO,KACP,SAAU,GACV,SAAUgS,EAC9B,CAAmB,EAAGK,EAAW,IAAIgD,GAAU,CAC3B,GAAI,CACF,GAAAtY,EACA,MAAAkW,CACD,EAAGoC,EACJ,OAAoBrV,EAAAA,IAAK,SAAU,CACjC,MAAOjD,EACP,SAAUkW,CACX,EAAElW,CAAE,CACzB,CAAmB,CAAC,CACpB,CAAiB,EAAgBiD,EAAI,IAAC0O,EAAQ,CAC5B,cAAe,sBACf,KAAM,QACN,QAAS,KAAK,kBACd,KAAM4G,GACN,QAAS,kBAC3B,CAAiB,CAAC,CAClB,CAAe,CACf,CAAa,CACb,CAAW,EAAgBtV,EAAI,IAAC,MAAO,CAC3B,UAAW,0BACX,SAAuBA,EAAI,IAAC0O,EAAQ,CAClC,KAAM,QACN,UAAW,sCACX,QAAS,KAAK,oBACd,QAAS,WACT,KAAmB1O,EAAI,IAACuE,GAAiB,CACvC,KAAMoK,GACN,UAAW,QAC3B,CAAe,CACf,CAAa,CACb,CAAW,CAAC,CACH,EAAE,MAAM,CAAC,CAClB,CAAO,CACP,CAAK,CACF,CACH,CACA,MAAA4G,GAAetD,GCntBf,SAASuD,GAAqBxX,EAAO,CACnC,IAAIyX,EAAiBC,EAAuBC,EAAuBC,EAAuBC,EACtF,CACF,MAAAvO,EACA,WAAA5H,EACA,YAAAC,EACA,YAAAC,CACD,EAAG5B,EACA8X,IAAaL,EAAgEnO,GAAM,YAAc,MAAQmO,IAAoB,OAASA,EAAkB,KAAOC,EAAsEpO,GAAM,mBAAqB,MAAQoO,IAA0B,OAASA,EAAwB,KAAOC,EAAsErO,GAAM,0BAA4B,MAAQqO,IAA0B,OAASA,EAAwB,KAAOC,EAAsEtO,GAAM,uBAAyB,MAAQsO,IAA0B,OAASA,EAAwB,GACpqBG,EAAkEzO,GAAM,cAAcwO,EAAU,MAAM,EACtGE,GAAeH,EAAmEvO,GAAM,eAAiB,MAAQuO,IAAuB,OAASA,EAAqB,EACtKI,EAAqE3O,GAAM,cAAc0O,EAAa,MAAM,EAChH,OAAoBjW,EAAAA,KAAMP,GAAoB,CAC5C,WAAY,QACZ,WAAYE,EACZ,YAAaC,EACb,YAAaC,EACb,SAAU,CAAcI,EAAI,IAAC,KAAM,CACjC,UAAW,qBACjB,CAAK,EAAgBA,EAAI,IAAC,OAAQ,CAC5B,SAAU,mBAChB,CAAK,EAAgBA,EAAI,IAAC,OAAQ,CAC5B,UAAW,8BACX,SAAUiW,CAChB,CAAK,EAAgBjW,EAAI,IAAC,OAAQ,CAC5B,SAAU,gBAChB,CAAK,EAAgBA,EAAI,IAAC,OAAQ,CAC5B,UAAW,8BACX,SAAU+V,CAChB,CAAK,CAAC,CACN,CAAG,CACH,CACAP,GAAqB,UAAY,CAC/B,YAAarV,GAAY,UAAU,WACnC,WAAYC,EAAU,OAAO,WAC7B,YAAaA,EAAU,MACzB,EACAoV,GAAqB,aAAe,CAClC,YAAa,IACf,ECzCO,SAASU,GAA8BnY,EAAU,CACtD,GAAIA,GAAY,KAAM,MAAO,GAC7B,IAAIoY,EAAwBpY,EAC5B,OAAO,OAAOoY,EAAsB,OAAU,QAChD,CACO,SAASC,GAAwBrY,EAAU,CAChD,GAAIA,GAAY,KAAM,MAAO,GAC7B,IAAIoY,EAAwBpY,EAC5B,OAAO,OAAOoY,EAAsB,MAAS,QAC/C,CCbA,SAAS/Q,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,EAAK,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUpH,EAAK,CAAEF,EAAgBoH,EAAQlH,EAAKoH,EAAOpH,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBkH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUpH,EAAK,CAAE,OAAO,eAAekH,EAAQlH,EAAK,OAAO,yBAAyBoH,EAAQpH,CAAG,CAAC,CAAE,CAAE,EAAK,OAAOkH,CAAS,CAC1f,SAASpH,EAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAqBzX,IAAIgH,GAAMC,EAAI,OAAO,eAAe,EAChCsQ,GAA8B,IAC9BC,GAAoB,CACtB,SAAAC,GACA,mBAAAC,GACA,gBAAAC,EACF,EAKA,SAASC,GAAyB3Y,EAAU,CAC1C,GAAIA,GAAY,KACd,MAAM,IAAI,MAAM,sBAAsB,EAExC,GAAIqY,GAAwBrY,CAAQ,EAClC,OAAOA,EAAS,KAElB,GAAImY,GAA8BnY,CAAQ,EACxC,OAAOA,EAAS,MAElB,MAAM,IAAI,MAAM,iDAAiD,OAAOA,CAAQ,CAAC,CACnF,CACO,MAAM4Y,WAAsBrW,EAAAA,aAAc,CAC/C,YAAYtC,EAAO,CACjB,MAAMA,CAAK,EACXO,EAAgB,KAAM,WAAY,MAAM,EACxCA,EAAgB,KAAM,YAAa,MAAM,EACzCA,EAAgB,KAAM,eAAgB,MAAM,EAC5CA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,YAAa,MAAM,EACzCA,EAAgB,KAAM,cAAe,MAAM,EAC3CA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,sBAAuBgC,EAAQ,CAACqD,EAAS8C,IAAiBgC,EAAc,0BAA0B9E,EAExH8C,EAAa,OAAOlK,GAAQ,CAC1B,GAAI,CACF,MAAAkC,EACA,gBAAAuS,CACD,EAAGzU,EACAO,EAAKoB,EAAY,eAAe,IAAI,EACxC,OAAOO,GAAS,OAASuS,GAAmB,MAAQlU,GAAM,MAAQ,CAACkU,EAAgB,SAASlU,CAAE,EACpG,CAAK,CAAC,CAAC,CAAC,EACJwB,EAAgB,KAAM,wBAAyBgC,EAAQ,CAACuO,EAAgB8H,IAAuB,CAI7F,QAHI7Z,EAAKoB,EAAY,eAAe,IAAI,EAEpC0Y,EAAY,IAAI,IAAID,CAAkB,EACjChR,EAAI,EAAGA,EAAIkJ,EAAe,OAAQlJ,GAAK,EAAG,CACjD,GAAI,CACF,MAAAkR,CACV,EAAYhI,EAAelJ,CAAC,EAChBkR,GAAS,MAAQA,EAAM,UAAY/Z,GACrC8Z,EAAU,IAAIC,EAAM,UAAU,EAGlC,MAAO,CAAC,GAAGD,CAAS,CACrB,CAAA,CAAC,EACFtY,EAAgB,KAAM,mBAAoBgC,EAAQ,CAACwW,EAAQzP,EAAO0P,EAAMC,EAAWC,IAAgB,CACjG,GAAI,CAAC5P,GAAS,CAAC6P,GAA6B7P,CAAK,GAAKyP,GAAU,MAAQzP,EAAM,OAAS,KACrF,OAAO,KAOT,IAAI8P,EAAkB,CACpB,MAAO,KACP,SAAU,KAAK,mBACf,eAAgB,KAAK,yBACrB,KAAAJ,EACA,UAAAC,EACA,WAAYX,EACpB,EACM,OAAoBtW,EAAAA,IAAK,MAAO,CAC9B,UAAW,mBACX,SAAuBA,EAAAA,IAAK+W,EAAQrR,GAAc,CAChD,IAAK,KAAK,UACV,OAAQ,KAAK,mBACb,aAAc,KAAK,yBACnB,MAAO4B,EACP,MAAOA,EAAM,MACb,cAAe,KAAK,wBACpB,YAAa4P,CAEd,EAAEE,CAAe,CAAC,CAC3B,CAAO,CACF,CAAA,CAAC,EACF7Y,EAAgB,KAAM,kCAAmCgC,EAAQ,CAAC+G,EAAO+P,EAAsBC,EAAWC,EAAiBC,IAAqB9O,EAAc,4BAA4BpB,EAAO,CAC/L,qBAAA+P,EACA,UAAAC,EACA,gBAAAC,EACA,iBAAAC,CACD,CAAA,CAAC,CAAC,EACHjZ,EAAgB,KAAM,6BAA8BgC,EAAQ,CAAC+G,EAAO4J,EAAOuG,EAAiBC,EAAuBC,EAAkBC,EAAcC,EAAeC,EAAaC,EAAcC,EAAeC,EAAaC,EAAuBC,EAAuBC,EAAqBC,EAAkBC,EAAgBC,EAAqBC,EAAgBC,EAAeC,EAAoBC,KACpY7R,EAAc,KAAK,aAAa,EACzB,KAAK,cAAc,uBAAuBQ,EAAO,CACtD,gBAAAmQ,EACA,oBAAAc,EACA,sBAAAb,EACA,iBAAAC,EACA,QAAS,CACP,iBAAAU,EACA,eAAAC,CACD,EACD,aAAAV,EACA,cAAAC,EACA,YAAAC,EACA,aAAAC,EACA,cAAAC,EACA,YAAAC,EACA,sBAAAC,EACA,sBAAAC,EACA,MAAAjH,EACA,oBAAAkH,EACA,eAAAI,EACA,cAAAC,EACA,mBAAAC,EACA,mBAAAC,CACR,CAAO,EACF,CAAC,EACFpa,EAAgB,KAAM,yBAA0BgC,EAAQ,CAAC+G,EAAOsR,EAAcC,EAAWC,EAAiBC,IAAmBrQ,EAAc,mBAAmBpB,EAAO,CACnK,gBAAAwR,EACA,eAAAC,EACA,aAAAH,EACA,UAAAC,CACD,CAAA,CAAC,CAAC,EACHta,EAAgB,KAAM,sBAAuBgC,EAAQ,CAACyY,EAAoBC,EAAeC,EAAWhC,KAAiB,CACnH,mBAAA8B,EACA,cAAAC,EACA,UAAAC,EACA,YAAAhC,CACD,EAAC,CAAC,EACH3Y,EAAgB,KAAM,iBAAkByI,GAAS,IAAM,CACrD,GAAI,CACF,cAAAiS,EACA,UAAAC,EACA,YAAAhC,CACD,EAAG,KACJpQ,EAAcmS,CAAa,EAC3B,GAAI,CACF,mBAAAE,CACR,EAAU,KAAK,MACL,CACF,MAAA7R,EACA,WAAY8R,EACZ,qBAAA/B,EACA,UAAAC,EACA,gBAAAC,EACA,iBAAAC,CACR,EAAU,KAAK,MACL,CACF,gBAAAC,EACA,oBAAAc,EACA,sBAAAb,EACA,iBAAAC,EACA,aAAAC,EACA,cAAAC,EACA,YAAAC,EACA,aAAAC,EACA,cAAAC,EACA,YAAAC,EACA,sBAAAC,EACA,sBAAAC,EACA,MAAAjH,EACA,oBAAAkH,EACA,QAAAiB,EACA,eAAAb,EACA,cAAAC,EACA,mBAAAC,EACA,mBAAAC,CACD,EAAGM,EACJnS,EAAcQ,CAAK,EACnBR,EAAcuS,CAAO,EACrB,GAAI,CACF,iBAAAhB,GACA,eAAAC,EACD,EAAGe,EACJvS,EAAcoS,CAAS,EACvB,GAAI,CACF,gBAAAJ,GACA,eAAAC,GACA,aAAAH,GACA,UAAAC,EACD,EAAGK,EACAlU,GAAa,KAAK,oBAAoB,KAAK,gCAAgCsC,EAAO+P,EAAsBC,EAAWC,EAAiBC,CAAgB,EAAG,KAAK,2BAA2BlQ,EAAO4J,EAAOuG,EAAiBC,EAAuBC,EAAkBC,EAAcC,EAAeC,EAAaC,EAAcC,EAAeC,EAAaC,EAAuBC,EAAuBC,EAAqBC,GAAkBC,GAAgBC,EAAqBC,EAAgBC,EAAeC,EAAoBC,CAAkB,EAAG,KAAK,uBAAuBrR,EAAOsR,GAAcC,GAAWC,GAAiBC,EAAc,EAAG7B,CAAW,EAC9nBlS,KAAeoU,IACjBtT,GAAI,MAAM,qBAAsB,KAAMd,EAAU,EAChD,KAAK,SAAS,CACZ,WAAAA,EACV,CAAS,EACuEmU,IAAmBnU,EAAU,EAE7G,EAAOqR,EAA2B,CAAC,EAC/B,KAAK,6BAA+B,KAAK,6BAA6B,KAAK,IAAI,EAC/E,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,wBAA0B,KAAK,wBAAwB,KAAK,IAAI,EACrE,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,yBAA2B,KAAK,yBAAyB,KAAK,IAAI,EACvE,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,SAAwBpP,EAAM,YACnC,KAAK,UAAyBA,EAAM,YACpC,GAAI,CACF,WAAYqS,CACb,EAAGtb,EACJ,KAAK,YAAc,KACnB,KAAK,cAAgB,KACrB,KAAK,MAAQ,CACX,MAAO,KACP,eAAgB,GAChB,SAAU,GACV,UAAW,GACX,aAAc,GACd,MAAO,OAEP,gBAAiB,IAAI,IACrB,oBAAqB,CACnB,aAAc,CAAE,EAChB,UAAW,EACZ,EACD,iBAAkB,IAAI,IAAIub,GAAiB,QAAQ,EACnD,cAAe,CAAE,EACjB,sBAAuB,IAAI,IAC3B,iBAAkB,GAClB,aAAc,IAAI,IAClB,MAAO,CAAE,EACT,iBAAkB,IAAI,IACtB,eAAgB,IAAI,IACpB,YAAajN,EAAW,aAAa,KACrC,aAAc,CAAE,EAChB,UAAW,CAAE,EACb,qBAAsB,GACtB,UAAW,KACX,gBAAiB,KACjB,aAAc,OACd,cAAe,GACf,YAAa,GACb,sBAAuB,OACvB,oBAAqB,GACrB,OAAQ,OACR,cAAe,CAAE,EACjB,mBAAoB,CAAE,EACtB,WAAY,CAAE,EACd,eAAgB,IAAI,IACpB,cAAe,OAEf,WAAYgN,EAEZ,uBAAwB,CAAE,EAC1B,mBAAoB,CAAE,EACtB,gBAAiB,GACjB,eAAgB,GAChB,mBAAoB,CAAE,EACtB,sBAAuB,CAAE,CAC/B,CACG,CACD,mBAAoB,CAClB,KAAK,UAAS,CACf,CACD,mBAAmBE,EAAGnS,EAAW,CAC/B,GAAI,CACF,MAAAC,CACN,EAAQ,KAAK,MACLA,IAAUD,EAAU,QAClBA,EAAU,OAAS,OACrB,KAAK,mBAAmBA,EAAU,KAAK,EACvCA,EAAU,MAAM,SAEdC,GAAS,MACX,KAAK,oBAAoBA,CAAK,EAGnC,CACD,sBAAuB,CACrB,KAAK,eAAe,SAChB,KAAK,cAAgB,OACvB,KAAK,aAAa,SAClB,KAAK,aAAe,QAEtB,GAAI,CACF,MAAAA,CACN,EAAQ,KAAK,MACLA,IACF,KAAK,mBAAmBA,CAAK,EAC7BA,EAAM,MAAK,EAEd,CACD,cAAe,CACb,GAAI,CACF,SAAAvJ,CACN,EAAQ,KAAK,MACT,OAAO2Y,GAAyB3Y,CAAQ,CACzC,CACD,WAAY,CACV,KAAK,SAAS,CACZ,aAAc,GACd,UAAW,GACX,MAAO,IACb,CAAK,EACD,GAAI,CACF,UAAA0J,CACN,EAAQ,KAAK,MACL,KAAK,cAAgB,MACvB,KAAK,aAAa,SAEpB,KAAK,aAAeY,GAAa,eAAeZ,EAAW,EAAEC,GAAYA,EAAS,MAAK,CAAE,EACzF,KAAK,aAAa,KAAK,KAAK,iBAAiB,EAAE,MAAM,KAAK,eAAe,CAC1E,CACD,kBAAkB+R,EAAY,CAC5B,IAAInS,EAAQmS,EACR,CACF,WAAAzU,EACA,uBAAA0U,CACN,EAAQ,KAAK,MACLC,EAAa,CAAA,EAEjB,GADA,KAAK,cAAgB,IAAIjR,EAAcpB,EAAM,EAAE,EAC3CtC,GAAc,KAAM,CACtB,GAAI,CACF,cAAe4U,CAChB,EAAG5U,EACA,CACF,oBAAAuT,EACA,cAAAV,EACA,sBAAAK,EAAwB,CAAE,EAC1B,aAAAH,CACR,EAAUrS,GAAcA,GAAc,CAAA,EAAIkU,CAAc,EAAGF,CAAsB,EACvE7B,EAAc,OAAS,GACzB8B,EAAW,KAAKE,GAAK,CAEnBA,EAAE,cAAgBhC,CAC5B,CAAS,EAECE,GAAgB,MAAQA,EAAa,QAAQ,OAAS,GAIxD4B,EAAW,KAAKE,GAAK,CAEnBA,EAAE,aAAenR,EAAc,qBAAqBmR,EAAE,gBAAiB9B,EAAcQ,CAAmB,CAClH,CAAS,EAECL,EAAsB,OAAS,GACjCyB,EAAW,KAAKE,GAAK,CAEnBA,EAAE,sBAAwB3B,CACpC,CAAS,EAGL,KAAK,SAAS,CACZ,MAAA5Q,EACA,WAAAqS,CACN,CAAK,EACD,KAAK,eAAerS,EAAOqS,CAAU,CACtC,CACD,eAAeF,EAAYE,EAAY,CACrC,IAAIrS,EAAQmS,EACZ,GAAIE,EAAW,SAAW,EAAG,CAC3B,KAAK,iBAAiBrS,CAAK,EAC3B,OAEF,IAAIwS,EAAcH,EAAW,QAC7B7T,GAAI,MAAM,iBAAkBgU,CAAW,EAEnCA,GACFA,EAAYxS,CAAK,EAEnB,KAAK,SAAS,CACZ,WAAAqS,CACN,CAAK,CACF,CACD,6BAA6Blb,EAAKC,EAAO,CACvCoH,GAAI,MAAM,+BAAgCrH,EAAKC,CAAK,EACpD,KAAK,SAAStB,GAAS,CACrB,GAAI,CACF,iBAAAoa,CACD,EAAGpa,EACJ,OAAOoa,EAAiB,IAAI/Y,CAAG,IAAMC,EAAQ,KAAO,CAClD,iBAAkB,IAAI,IAAI8Y,CAAgB,EAAE,IAAI/Y,EAAKC,CAAK,CAClE,CACA,CAAK,CACF,CACD,mBAAmByS,EAAS,CAC1B,IAAI4I,EAAuBC,EACvB,CACF,MAAA1S,CACN,EAAQ,KAAK,MACTR,EAAcQ,CAAK,EACnB,GAAI,CACF,QAAA1D,EACA,UAAAwL,CACD,EAAG9H,EACA2S,GAAiBF,GAAyBC,EAAsB,KAAK,iBAAmB,MAAQA,IAAwB,OAAS,OAASA,EAAoB,2BAA2BpW,EAASuN,EAAS/B,EAAU,QAAQ,KAAO,MAAQ2K,IAA0B,OAASA,EAAwB,CAAA,EAC3S,KAAK,SAAS,CACZ,cAAAE,CACN,CAAK,CACF,CACD,yBAAyBrD,EAAoB,CAC3C,KAAK,SAAS,CACZ,mBAAAA,CACN,CAAK,CACF,CACD,kBAAkBsD,EAAM,CACtB,IAAIC,EAAuBC,EAAwBC,EACnD,OAAQF,GAAyBC,EAAyB,KAAK,UAAU,WAAa,MAAQA,IAA2B,SAAmBC,EAAyBD,EAAuB,WAAa,MAAQC,IAA2B,OAA1G,OAA4HA,EAAuB,KAAKD,EAAwBF,CAAI,KAAO,MAAQC,IAA0B,OAASA,EAAwB,CAAA,CACjY,CACD,uBAAuBG,EAAa,CAClC,GAAI,CACF,yBAAAvT,CACN,EAAQ,KAAK,MACT,OAAIA,GAA4BuT,EACvBvT,EAAyB,KAAMuT,CAAW,EAE5C,EACR,CACD,sBAAsBrB,EAAeC,EAAW,CAC9C,KAAK,cAAgBD,EACrB,KAAK,UAAYC,EAGjB,KAAK,SAAS,CACZ,SAAU,GACV,UAAW,EACjB,CAAK,EACD,KAAK,eAAc,EACnB,GAAI,CACF,WAAA5X,EACA,cAAAiZ,CACN,EAAQ,KAAK,MACTjZ,EAAW,KAAKlC,GAAc,cAAe,IAAI,EACamb,IAActB,EAAeC,CAAS,CACrG,CACD,wBAAwBhC,EAAa,CACnC,GAAI,CACF,cAAA+B,EACA,UAAAC,CACD,EAAG,KACJ,KAAK,YAAchC,EAGf+B,IAAkB,MAAQC,IAAc,MAC1C,KAAK,eAAc,CAEtB,CACD,qBAAqBpV,EAAO,CAC1B,GAAI,CACF,aAAA0W,EACA,MAAAlT,EACA,WAAAqS,CACN,EAAQ,KAAK,MACLa,EACF,KAAK,kBAAkB1W,EAAM,MAAM,GAEnCgD,EAAcQ,CAAK,EACnB,KAAK,eAAeA,EAAOqS,CAAU,EAExC,CACD,mBAAmB7V,EAAO,CACxBgC,GAAI,MAAM,qBAAsBhC,CAAK,EACrC,GAAI,CACF,WAAAxC,CACN,EAAQ,KAAK,MACL,CACF,OAAQqG,CACT,EAAG7D,EACJxC,EAAW,KAAKuH,EAAiB,cAAe,KAAMlB,CAAK,CAC5D,CACD,sBAAsBzD,EAAQxF,EAAO,CACnC,GAAI,CACF,WAAA4C,CACN,EAAQ,KAAK,MACL,CACF,KAAAzD,CACD,EAAGqG,EACAuW,EAAY,KAAK,eACjBC,EAAU,GAAG,OAAOD,EAAW,KAAK,EAAE,OAAOA,EAAW,UAAW,EAAE,OAAO5c,EAAM,IAAI,EAAE,OAAOa,EAAO,KAAM,EAChH4C,EAAW,KAAKqZ,GAAa,aAAcD,EAAS,GAAO,EAAI,CAChE,CASD,kBAAkBzV,EAAUqC,EAAO,CAEjC,KAAK,eAAe,QACpB,KAAK,SAAS,IAAM,KAAM,IAAM,CAC9B,GAAI,CACF,WAAAhG,EACA,aAAAoF,CACR,EAAU,KAAK,MACLiB,EAAQ,KAAK,eACb,CACF,WAAA3C,CACR,EAAU,KAAK,MACLkG,EAAgB/M,EAAY,eAAe,IAAI,EAC/C+G,EACAF,IACFE,EAAgBwD,EAAc,qBAAqB1D,EAAY0B,CAAY,GAE7EpF,EAAW,KAAKlC,GAAc,aAAc,CAC1C,SAAU,CACR,SAAA6F,EACA,cAAAiG,EACA,MAAAvD,EACA,cAAAzC,CACD,EACD,MAAOiS,GAA6B7P,CAAK,EAAIA,EAAM,MAAQ,MACnE,CAAO,CACP,CAAK,CACF,CACD,qBAAqBpD,EAAQ,CAC3B,GAAI,CACF,WAAA5C,CACN,EAAQ,KAAK,MACTA,EAAW,KAAKlC,GAAc,gBAAiB,KAAM8E,CAAM,CAC5D,CACD,mBAAmBuN,EAAKmJ,EAAS,CAC/B,GAAI,CACF,WAAAtZ,CACN,EAAQ,KAAK,MACTA,EAAW,KAAKlC,GAAc,cAAe,KAAMwb,CAAO,CAC3D,CACD,cAAe,CACb,KAAK,WAAU,CAChB,CACD,YAAa,CACX,KAAK,WAAU,CAChB,CACD,kBAAmB,CACb,KAAK,SAAS,SAChB,KAAK,SAAS,QAAQ,OAEzB,CACD,YAAYxS,EAAO,CACjBtC,GAAI,MAAMsC,CAAK,EACf,KAAK,SAAS,CACZ,MAAAA,EACA,UAAW,EACjB,CAAK,CACF,CACD,kBAAmB,CACjB,KAAK,SAAS,CACZ,MAAO,IAAI,MAAM,oBAAoB,EACrC,eAAgB,GAChB,UAAW,EACjB,CAAK,CACF,CACD,iBAAkB,CAChB,KAAK,SAAS,CACZ,eAAgB,GAChB,MAAO,IACb,CAAK,CACF,CACD,gBAAgBA,EAAO,CACjBC,GAAa,WAAWD,CAAK,GAGjC,KAAK,YAAYA,CAAK,CACvB,CACD,iBAAiBd,EAAO,CACtB,GAAI,CACF,WAAAhG,EACA,WAAAuZ,CACN,EAAQ,KAAK,MAQT,GAPA,KAAK,aAAe,OAGpB,KAAK,eAAevT,CAAK,EACzB,KAAK,SAAS,CACZ,aAAc,EACpB,CAAK,EACG6P,GAA6B7P,CAAK,EAAG,CACvC,GAAI,CACF,MAAAK,CACD,EAAGL,EACA,CACF,WAAYwT,CACb,EAAGnT,EACJ,GAAImT,IAAgB,IACdD,GAAc,MAAQC,GAAe,KAAM,CAC7C,IAAI/D,EAAS8D,EAAWC,CAAW,EACnC,KAAK,SAAS,CACZ,OAAA/D,CACZ,CAAW,EAGLzV,EAAW,KAAKuH,EAAiB,cAAe,KAAMlB,CAAK,EAE7D,KAAK,kBAAkBL,EAAM,OAAO,CACrC,CACD,uBAAwB,CACtB,IAAIyT,EAAW,KAAK,SAAS,QACzB,CACF,eAAAxZ,CACN,EAAQ,KAAK,MACLwZ,GAAY,MAAQ,CAACxZ,GACvBwZ,EAAS,gBAAe,CAE3B,CACD,kBAAkBnX,EAAS,CACzBkC,GAAI,OAAO,oBAAqBlC,CAAO,EACvC,GAAI,CACF,WAAAtC,CACN,EAAQ,KAAK,MACTA,EAAW,KAAKuH,EAAiB,gBAAiB,KAAMjF,CAAO,CAChE,CACD,oBAAoB0D,EAAO,CACzBA,EAAM,iBAAiB0T,GAAc,MAAM,WAAY,KAAK,gBAAgB,EAC5E1T,EAAM,iBAAiB0T,GAAc,MAAM,UAAW,KAAK,eAAe,EAC1E1T,EAAM,iBAAiB0T,GAAc,MAAM,gBAAiB,KAAK,oBAAoB,EACrF1T,EAAM,iBAAiB0T,GAAc,MAAM,cAAe,KAAK,kBAAkB,CAClF,CACD,mBAAmB1T,EAAO,CACxBA,EAAM,oBAAoB0T,GAAc,MAAM,WAAY,KAAK,gBAAgB,EAC/E1T,EAAM,oBAAoB0T,GAAc,MAAM,UAAW,KAAK,eAAe,EAC7E1T,EAAM,oBAAoB0T,GAAc,MAAM,gBAAiB,KAAK,oBAAoB,EACxF1T,EAAM,oBAAoB0T,GAAc,MAAM,cAAe,KAAK,kBAAkB,CACrF,CACD,uBAAuBzX,EAAY,CACjC,IAAI0X,EAAuBC,EAAkBC,EACzC,CACF,MAAA7T,CACN,EAAQ,KAAK,MACT,GAAI,CAACA,EACH,OAAO,KAET,IAAIyT,EAAW,KAAK,SAAS,QACzB,CACF,YAAAK,CACN,EAAQL,GAAY,CAAA,EACZ/R,GAAQiS,EAAkFG,GAAY,sBAAqB,KAAQ,MAAQH,IAA0B,OAASA,EAAwB,KAC1M,GAAIjS,GAAQ,MAAQA,EAAK,OAAS,GAAKA,EAAK,QAAU,EACpD,OAAO,KAETlC,EAAciU,CAAQ,EACtB,GAAI,CACF,QAAA1B,CACN,EAAQ0B,EAAS,MACbjU,EAAcuS,CAAO,EACrB,GAAI,CACF,mBAAAgC,EACA,YAAAC,EACA,gBAAAC,EACA,MAAAC,EACA,qBAAAC,CACD,EAAGpC,EACAqC,EAAcpU,EAAM,qBAAqB/D,CAAU,EACvDuD,EAAc4U,CAAW,EACzB,IAAIC,EAAeZ,EAAS,iBAAiBW,CAAW,EACpDE,GAAWV,EAAmBI,EAAY,IAAIK,CAAY,KAAO,MAAQT,IAAqB,OAASA,EAAmB,EAC1HW,GAAeV,EAAuBI,EAAgB,IAAII,CAAY,KAAO,MAAQR,IAAyB,OAASA,EAAuB,EAC9IlS,EAAI,KAAK,IAAID,EAAK,KAAM,KAAK,IAAI2S,EAAeH,EAAQxS,EAAK,MAAQA,EAAK,KAAO4S,EAAUC,EAAc,GAAK7S,EAAK,KAAK,CAAC,EACzHE,EAAIF,EAAK,IAAMqS,EAAqBI,EACxC,MAAO,CAACxS,EAAGC,CAAC,CACb,CACD,aAAa1C,EAAW,CACtB,IAAIuU,EAAW,KAAK,SAAS,QAE3BA,GAAS,aAAavU,CAAS,CAElC,CACD,qBAAqBA,EAAW,CAC9B,IAAIuU,EAAW,KAAK,SAAS,QAE3BA,GAAS,qBAAqBvU,CAAS,CAE1C,CACD,WAAW+C,EAAO,CAChB,GAAI,CACF,aAAAqO,EACA,gBAAAH,CACD,EAAGlO,EACJzD,GAAI,MAAM,aAAc8R,EAAcH,CAAe,EACrD,GAAI,CACF,MAAAnQ,EACA,eAAA/F,CACN,EAAQ,KAAK,MACLwZ,EAAW,KAAK,SAAS,QAC7B,GAAIA,GAAY,MAAQxZ,EAAgB,CACtCuE,GAAI,MAAM,uCAAuC,EACjD,OAEFgB,EAAcQ,CAAK,EACnB,GAAI,CACF,QAAA1D,EACA,UAAAwL,CACD,EAAG9H,EACAwU,EAAsBpT,EAAc,iCAAiCpB,EAAM,QAASsQ,CAAY,EAAE,OAAOxN,GAAS,CACpH,GAAI,CAACsR,CAAW,EAAItR,EACpB,OAAO9C,EAAM,aAAaoU,CAAW,CAC3C,CAAK,EACGK,EAAyBrT,EAAc,iCAAiCpB,EAAM,QAASmQ,CAAe,EAAE,OAAOlN,GAAS,CAC1H,GAAI,CAACmR,CAAW,EAAInR,EACpB,OAAOjD,EAAM,aAAaoU,CAAW,CAC3C,CAAK,EACD5U,EAAc,KAAK,aAAa,EAChCiU,EAAS,gBAAe,EACxBA,EAAS,WAAW,CAClB,aAAc,KAAK,cAAc,oBAAoBnX,EAASkY,EAAqB1M,EAAU,QAAQ,EACrG,gBAAiB,KAAK,cAAc,uBAAuBxL,EAASmY,EAAwB3M,EAAU,QAAQ,CACpH,CAAK,CACF,CACD,kBAAkB4M,EAAW,CAC3BlW,GAAI,MAAM,oBAAqBkW,CAAS,EACxC,GAAI,CACF,cAAetC,EACf,UAAWuC,CACZ,EAAGD,EACJ,KAAK,SAAS,CACZ,uBAAAtC,EACA,mBAAAuC,CACN,EAAO,IAAM,CACP,KAAK,UAAS,CACpB,CAAK,CACF,CAGD,kBAAmB,CAElB,CACD,eAAe3U,EAAO,CACpB,GAAI,CACF,WAAAtC,EACA,uBAAwBkX,EACxB,mBAAAD,CACN,EAAQ,KAAK,MACT,GAAIjX,GAAc,KAGlB,GAAI,CACF,GAAI,CACF,UAAWmX,EACX,cAAeC,EACf,mBAAApD,CACD,EAAGhU,EACA0U,EAAyBhU,GAAc,CAAE,EAAEwW,CAA8B,EACzE,CACF,aAAcG,EACd,gBAAiBC,CAClB,EAAG5C,EACA2C,IACF3C,EAAuB,aAAehR,EAAc,iCAAiCpB,EAAM,QAAS+U,CAAiB,GAEnHC,IACF5C,EAAuB,gBAAkBhR,EAAc,iCAAiCpB,EAAM,QAASgV,CAAoB,GAE7H,GAAI,CACF,qBAAAjF,EACA,UAAAC,EACA,gBAAAC,EACA,iBAAAC,CACD,EAAG9O,EAAc,0BAA0BpB,EAAO0R,CAAkB,EACrElS,EAAc,KAAK,aAAa,EAChC,GAAI,CACF,gBAAA2Q,EACA,cAAAI,EACA,sBAAAH,EACA,iBAAAC,EACA,aAAAC,EACA,YAAAE,EACA,aAAAC,EACA,oBAAAQ,EACA,MAAArH,EACA,iBAAAmH,EACA,eAAAC,EACA,cAAAN,EACA,YAAAC,EACA,sBAAAC,EACA,sBAAAC,EACA,oBAAAC,EACA,eAAAI,EACA,cAAAC,GACA,mBAAAC,GACA,mBAAAC,EACD,EAAG,KAAK,cAAc,qBAAqBrR,EAAO5B,GAAcA,GAAc,GAAI0W,CAAe,EAAG1C,CAAsB,CAAC,EACxH,CACF,gBAAAZ,GACA,eAAAC,GACA,aAAAH,GACA,UAAAC,EACD,EAAGnQ,EAAc,iBAAiBpB,EAAO5B,GAAcA,GAAc,GAAIyW,CAAU,EAAGF,CAAkB,EAAGG,EAAgB,aAAa,EACzI,KAAK,SAAS,CACZ,gBAAA3E,EACA,iBAAAD,EACA,mBAAAkB,GACA,cAAAb,EACA,sBAAAH,EACA,iBAAAC,EACA,qBAAAN,EACA,aAAAuB,GACA,UAAAC,GACA,UAAAvB,EACA,gBAAAC,EACA,aAAAK,EACA,YAAAE,EACA,aAAAC,EACA,oBAAAQ,EACA,MAAArH,EACA,iBAAAmH,EACA,eAAAC,EACA,cAAAN,EACA,YAAAC,EACA,sBAAAC,EACA,sBAAAC,EACA,oBAAAC,EACA,eAAAI,EACA,cAAAC,GACA,gBAAAK,GACA,eAAAC,GACA,mBAAAJ,EACR,CAAO,CACF,OAAQvQ,EAAP,CACAtC,GAAI,MAAM,2CAA4Cd,EAAYoD,CAAK,CACxE,CACF,CACD,YAAa,CACX,IAAImU,EAAuBC,EACvBC,GAAQF,GAAyBC,EAAyB,KAAK,SAAS,WAAa,MAAQA,IAA2B,OAAS,OAASA,EAAuB,QAAU,MAAQD,IAA0B,OAASA,EAAwB,KAC7OE,GAGLA,EAAK,aAAY,CAClB,CACD,QAAS,CACP,IAAIC,EAAoBC,EACpB,CACF,SAAA9c,EACA,YAAAF,EACA,WAAA2B,EACA,yBAAAyF,EACA,kBAAA6V,EACA,aAAAlW,EACA,MAAAE,EACA,SAAA7I,EACA,WAAAiH,EACA,KAAAgS,EACA,UAAAC,EACA,SAAAhS,EACA,MAAA4X,CACN,EAAQ,KAAK,MACL,CACF,gBAAApF,EACA,oBAAAc,EACA,iBAAAf,EACA,mBAAAkB,EACA,cAAAb,EACA,sBAAAH,EACA,MAAAtP,EACA,eAAA7G,EACA,iBAAAoW,EACA,qBAAAN,EACA,gBAAAyB,EACA,eAAAC,EACA,SAAA3X,EACA,UAAAC,EACA,aAAAmZ,EACA,MAAAlT,EACA,aAAAsR,GACA,UAAAC,GACA,UAAAvB,GACA,gBAAAC,GACA,aAAAK,GACA,YAAAE,GACA,aAAAC,GACA,MAAA7G,EACA,iBAAAmH,GACA,eAAAC,GACA,cAAAN,GACA,YAAAC,GACA,sBAAAC,GACA,sBAAAC,GACA,oBAAAC,GACA,OAAArB,GACA,cAAAkD,GACA,mBAAArD,GACA,eAAA4B,GACA,cAAAC,GACA,mBAAAE,EACN,EAAQ,KAAK,MACLjY,GAAe0H,GAAS,KAAO,yBAAyB,OAAOA,CAAK,EAAI,OACxEvK,GAAO6Y,GAAyB3Y,CAAQ,EACxC6B,IAAe8c,EAAmEpV,GAAM,eAAiB,MAAQoV,IAAuB,OAASA,EAAqB,OACtKxF,IAAeyF,EAAgF3X,GAAW,eAAiB,MAAQ2X,IAA0B,OAASA,EAAwB,KAC9LG,GAAkBjd,GAAsD,KAAK,iBAAiBkX,GAAQzP,EAAO0P,EAAMC,EAAWC,EAAW,EACzI,CACF,YAAA6F,EACD,EAAG/F,EACA,CACF,QAAAgG,GACA,eAAAC,EACD,EAAGF,GACJ,OAAoB/c,EAAAA,IAAKK,GAAa,CACpC,aAAcK,GACd,eAAgBa,EAChB,UAAWF,EACX,SAAUD,EACV,UAAW,kBACX,YAAazB,EACb,WAAY2B,EACZ,kBAAmB,KAAK,sBACxB,SAAU,KAAK,aACf,OAAQ,KAAK,WACb,WAAY,KAAK,WACjB,aAAc,KAAK,iBACnB,WAAYzD,GACZ,WAAY,QACZ,YAAa+B,GACb,eAAgB,KAChB,iBAAkB,IAAmBI,EAAI,IAACwV,GAAsB,CAC9D,MAAOlO,EACP,WAAYzJ,GACZ,YAAa8B,EACb,YAAaC,EACrB,CAAO,EACD,SAAU4a,GAAgBlT,GAAsBtH,EAAAA,IAAKuW,GAAU,CAC7D,gBAAiBkB,EACjB,oBAAqBc,EACrB,iBAAkBf,EAClB,mBAAoB,KAAK,sBAAsB5Q,EAAOgQ,EAAkB,EACxE,oBAAqB,SACrB,uBAAwB,qBACxB,cAAeiB,EACf,sBAAuBH,EACvB,yBAA0B,KAAK,uBAC/B,mBAAoBgB,EACpB,aAAc,KAAK,oBAAoBpR,EAAM,QAASZ,CAAY,EAClE,wBAAyB1B,GAAc,KACvC,iBAAkB2S,EAClB,kBAAmB5Q,GAA4B,KAC/C,qBAAsBsQ,EACtB,gBAAiByB,EACjB,eAAgBC,EAChB,aAAcH,GACd,UAAWC,GACX,UAAWvB,GACX,gBAAiBC,GACjB,aAAcK,GACd,YAAaE,GACb,aAAcC,GACd,SAAU9S,EACV,MAAOiM,EACP,iBAAkBmH,GAClB,eAAgBC,GAChB,MAAOhR,EACP,cAAe0Q,GACf,YAAaC,GACb,sBAAuBE,GACvB,sBAAuBD,GACvB,oBAAqBE,GACrB,iBAAkB,KAAK,qBACvB,cAAe,KAAK,kBACpB,eAAgB,KAAK,mBACrB,QAAS,KAAK,YACd,kBAAmB,KAAK,sBACxB,cAAe,KAAK,sBACpB,cAAe,KAAK,kBACpB,yBAA0B,KAAK,6BAC/B,cAAe6B,GACf,eAAgBzB,GAChB,QAASwE,GACT,eAAgBC,GAChB,IAAK,KAAK,SACV,kBAAmBL,EACnB,cAAenE,GACf,MAAOoE,EACP,mBAAoBlE,GACpB,SAAUmE,EAClB,CAAO,CACP,CAAK,CACF,CACH,CACAve,EAAgBoY,GAAe,eAAgB,CAC7C,cAAe,IAAA,GACf,mBAAoB,IAAA,EACtB,CAAC,EACDpY,EAAgBoY,GAAe,cAAe,eAAe,EAC7DpY,EAAgBoY,GAAe,YAAa,eAAe,EAC3D,IAAI3L,GAAkB,CAAC5B,EAAOsH,IAAU,CACtC,GAAI,CACF,iBAAA3I,EAAmBmV,EACpB,EAAGxM,EACJ,MAAO,CACL,aAAc9E,GAA4BxC,EAAOrB,CAAgB,EACjE,MAAO8D,GAAqBzC,EAAOrB,CAAgB,EACnD,yBAA0B4D,GAAwCvC,EAAOrB,CAAgB,EACzF,KAAMoV,GAAQ/T,CAAK,EACnB,UAAWgU,GAAahU,CAAK,EAC7B,SAAU0C,GAAY1C,CAAK,CAC/B,CACA,EACIiU,GAAyBrR,GAAQhB,GAAiB,KAAM,KAAM,CAChE,WAAY,EACd,CAAC,EAAE2L,EAAa,EAChB,MAAA2G,GAAeD,GC7gCf,SAAS9e,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAezX,IAAIgH,GAAMC,EAAI,OAAO,aAAa,EAC9BqG,GAAkB,IACtB,MAAMmR,WAAoBlX,EAAAA,SAAU,CAClC,YAAYrI,EAAO,CACjB,MAAMA,CAAK,EACXO,GAAgB,KAAM,WAAY,MAAM,EACxCA,GAAgB,KAAM,eAAgBuO,GAAS,CAAClJ,EAAS+I,IAAU,CACjE,GAAI,CACF,KAAA9O,EACA,KAAAD,CACR,EAAUgG,EAAQ+I,CAAK,EACjB,GAAIA,EAAQ,GAAK/I,EAAQ+I,EAAQ,CAAC,EAAE,OAAS9O,GAAQ8O,EAAQ/I,EAAQ,OAAS,GAAKA,EAAQ+I,EAAQ,CAAC,EAAE,OAAS9O,EAAM,CACnH,IAAIkP,EAAYnP,EAAK,UAAUA,EAAK,YAAY,GAAG,EAAI,CAAC,EACxD,MAAO,GAAG,OAAOC,EAAM,IAAI,EAAE,OAAOkP,EAAW,GAAG,EAEpD,OAAOlP,CACR,CAAA,CAAC,EACFU,GAAgB,KAAM,aAAcyI,GAAS,IAAM,CACjD,GAAI,CACF,SAAAgG,CACR,EAAU,KAAK,MACL,CACF,OAAA9I,EACA,MAAAxF,EACA,aAAAuO,CACR,EAAU,KAAK,MACTD,EAAS,CACP,OAAA9I,EACA,aAAA+I,EACA,MAAAvO,CACR,CAAO,CACP,EAAO0N,EAAe,CAAC,EACnB,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,SAAwBnF,EAAM,YACnC,GAAI,CACF,OAAQiG,EACR,aAAcC,EACd,MAAOC,CACR,EAAGpP,EACJ,KAAK,MAAQ,CACX,OAAQkP,EACR,eAAgBA,EAChB,MAAOE,EACP,aAAcD,CACpB,CACG,CACD,mBAAmB/F,EAAWC,EAAW,CACvC,GAAI,CACF,OAAQmW,CACd,EAAQ,KAAK,MACL,CACF,OAAAtZ,EACA,MAAAxF,EACA,aAAAuO,CACN,EAAQ,KAAK,MACLuQ,IAAepW,EAAU,QAE3B,KAAK,SAAS,CACZ,OAAQoW,EACR,eAAgBA,CACxB,CAAO,EAECvQ,IAAiB,QAAaA,GAAgBA,IAAiB5F,EAAU,cAC3E,KAAK,WAAU,GAEbnD,IAAWmD,EAAU,QAAU3I,IAAU2I,EAAU,OAAS4F,IAAiB5F,EAAU,eACzF,KAAK,WAAU,CAElB,CACD,sBAAuB,CACrB,KAAK,WAAW,OACjB,CACD,mBAAmBvD,EAAO,CACxB,GAAI,CACF,QAAAF,CACN,EAAQ,KAAK,MACL,CACF,MAAAlF,CACN,EAAQoF,EAAM,OACNyI,EAAiB3I,EAAQ,SAASlF,EAAO,EAAE,CAAC,EAChDoH,GAAI,OAAO,qBAAsByG,CAAc,EAC/C,KAAK,SAAS,CACZ,eAAAA,EACA,MAAO,MACb,CAAK,CACF,CACD,oBAAoBzI,EAAO,CACrBA,EAAM,MAAQ,UAChBA,EAAM,eAAc,EACpBA,EAAM,gBAAe,EACrB,KAAK,SAAStH,GAAQ,CACpB,GAAI,CACF,MAAAkC,CACD,EAAGlC,EACJ,OAAOkC,GAAS,KAAO,CACrB,MAAO,EACR,EAAG,IACZ,EAAS,IAAM,CACP,KAAK,WAAU,EACf,KAAK,WAAW,OACxB,CAAO,EAEJ,CACD,kBAAkBoF,EAAO,CACvB,GAAI,CACF,MAAApF,CACN,EAAQoF,EAAM,OACVgC,GAAI,OAAO,oBAAqBpH,CAAK,EACrC,KAAK,SAAS,CACZ,MAAAA,CACN,CAAK,CACF,CACD,sBAAuB,CACrB,GAAI,CACF,OAAAwF,CACN,EAAQ,KAAK,MACT,KAAK,SAAS,CACZ,eAAgBA,EAChB,aAAc,EACpB,CAAK,CACF,CACD,oBAAqB,CACnB,GAAI,CACF,eAAAqI,CACN,EAAQ,KAAK,MACT,KAAK,SAAS,CACZ,OAAQA,EACR,aAAc,EACpB,CAAK,CACF,CACD,oBAAoBzI,EAAO,CACzB,GAAI,CACF,OAAAI,CACN,EAAQ,KAAK,MACT,KAAK,SAAS,CACZ,eAAgBA,EAChB,aAAc,EACpB,CAAK,EACDJ,EAAM,gBAAe,CACtB,CACD,sBAAsBA,EAAO,CAEvBA,EAAM,SAAW,KAAK,SAAS,SACjC,KAAK,WAAU,CAElB,CACD,YAAa,CACP,KAAK,SAAS,UAAY,OAC5B,KAAK,SAAS,QAAQ,SACtB,KAAK,SAAS,QAAQ,QAEzB,CACD,aAAc,CACZ,KAAK,SAAS,CACZ,MAAO,EACb,CAAK,CACF,CACD,eAAe1G,EAAO,CACpB,GAAI,CACF,KAAAS,EACA,KAAAD,EACA,MAAAc,EACA,aAAAuO,CACD,EAAG7P,EACA8G,EAASrG,GAAQ,MAAQD,GAAQ,KAAO,CAC1C,KAAAC,EACA,KAAAD,CACD,EAAG,OACA+K,EAASsE,IAAiB,OAAY,CACxC,OAAA/I,EACA,MAAAxF,CACN,EAAQ,CACF,OAAAwF,EACA,MAAAxF,EACA,aAAAuO,CACN,EACI,KAAK,SAAStE,CAAM,CACrB,CACD,QAAS,CACP,GAAI,CACF,QAAA/E,CACN,EAAQ,KAAK,MACL,CACF,OAAAM,EACA,aAAA+I,EACA,eAAAV,EACA,MAAA7N,CACN,EAAQ,KAAK,MACL+e,EAAc/e,GAAS,MAAQA,EAAM,SAAW,EAAI6e,GAAY,YAAY,OAAS7e,EAAM,OAC3Fgf,EAAa,KACjB,GAAIxZ,GAAU,KAAM,CAClB,IAAIwX,EAAc9X,EAAQ,UAAUD,GAAQA,EAAK,OAASO,EAAO,MAAQP,EAAK,OAASO,EAAO,IAAI,EAClGwZ,EAAahC,GAAe,EAAI,KAAK,aAAa9X,EAAS8X,CAAW,EAAIxX,EAAO,KAEnF,OAAoBnE,EAAAA,KAAM0O,GAAU,CAClC,UAAW,oCACX,UAAWxB,GAAkE,GAC7E,SAAU,CAAcjN,EAAI,IAAC,MAAO,CAClC,UAAW,6BACX,SAAuBD,EAAK,KAAC,MAAO,CAClC,UAAW,gCACX,SAAU,CAAcA,EAAK,KAAC,MAAO,CACnC,UAAW,6BACX,SAAU,CAAcC,EAAI,IAAC,QAAS,CACpC,SAAU,eACxB,CAAa,EAAgBD,EAAK,KAAC,SAAU,CAC/B,MAAO6D,EAAQ,UAAUD,GAAQA,EAAK,OAA0E4I,GAAe,MAAS5I,EAAK,OAA0E4I,GAAe,IAAK,EAC3O,UAAW,gBACX,SAAU,KAAK,mBACf,SAAU,CAAC3I,EAAQ,IAAI,CAAC8I,EAAYC,IAAuB3M,EAAI,IAAC,SAAU,CACxE,MAAO2M,EACP,SAAU,KAAK,aAAa/I,EAAS+I,CAAK,CAC1D,EAAiB,GAAG,OAAOD,EAAW,KAAM,GAAG,EAAE,OAAOA,EAAW,IAAI,CAAC,CAAC,EAAG9I,EAAQ,SAAW,GAAkB5D,EAAI,IAAC,SAAU,CAChH,MAAO,KACP,SAAU,GACV,SAAU,sBAC1B,CAAe,CAAC,CAChB,CAAa,EAAgBA,EAAI,IAAC,MAAO,CAC3B,UAAW,mBACX,SAAU,iGACxB,CAAa,CAAC,CACd,CAAW,EAAgBD,EAAK,KAAC,MAAO,CAC5B,UAAW,gCACX,SAAU,CAAcC,EAAI,IAAC0O,EAAQ,CACnC,KAAM,YACN,QAAS,KAAK,qBACd,SAAUxK,GAAU,KACpB,SAAU,QACxB,CAAa,EAAgBlE,EAAI,IAAC0O,EAAQ,CAC5B,KAAM,UACN,UAAW,OACX,QAAS,KAAK,mBACd,SAAUnC,GAAkB,KAC5B,SAAU,MACxB,CAAa,CAAC,CACd,CAAW,CAAC,CACZ,CAAS,CACT,CAAO,EAAgBxM,EAAK,KAAC,MAAO,CAC5B,UAAW,0BACX,QAAS,KAAK,sBACd,SAAU,CAAcC,EAAI,IAAC,MAAO,CAClC,UAAW,sBACX,SAAuBD,EAAK,KAAC,MAAO,CAClC,UAAW,4BACX,SAAU,CAAC2d,EAAY,SAAS,CAC5C,CAAW,CACX,CAAS,EAAgB1d,EAAI,IAAC,MAAO,CAC3B,UAAW,+DACX,SAAuBA,EAAI,IAAC,MAAO,CACjC,UAAW,qEACX,SAAuBA,EAAI,IAAC,QAAS,CACnC,KAAM,OACN,IAAK,KAAK,SACV,YAAaud,GAAY,YACzB,MAAO7e,GAA6C,GACpD,SAAU,KAAK,kBACf,WAAY,KAAK,oBACjB,MAAO,CACL,MAAO,GAAG,OAAO+e,EAAc,EAAG,IAAI,CACvC,EACD,WAAY,OAC1B,CAAa,CACb,CAAW,CACX,CAAS,EAAgBzd,EAAI,IAAC,MAAO,CAC3B,UAAW,oBACX,SAAuBA,EAAI,IAAC0O,EAAQ,CAClC,KAAM,QACN,UAAW,WACX,QAAS,KAAK,oBACd,KAAmB1O,EAAI,IAACuE,GAAiB,CACvC,KAAMoK,GACN,UAAW,QACzB,CAAa,EACD,QAAS,uBACrB,CAAW,CACX,CAAS,CAAC,CACV,CAAO,CAAC,CACR,CAAK,CACF,CACH,CACApQ,GAAgBgf,GAAa,cAAe,gBAAgB,EAC5Dhf,GAAgBgf,GAAa,eAAgB,CAC3C,OAAQ,KACR,aAAc,GACd,MAAO,IACT,CAAC,EACD,MAAAI,GAAeJ,GCrTf,SAAShf,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CASzX,IAAI8e,GAAwB,IAC5B,MAAMC,WAAyBxX,EAAAA,SAAU,CAGvC,YAAYrI,EAAO,CACjB,MAAMA,CAAK,EACXO,GAAgB,KAAM,iBAAkB,MAAM,EAC9C,KAAK,aAAeyI,GAAS,KAAK,aAAa,KAAK,IAAI,EAAG4W,EAAqB,EAChF,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,eAA8B3W,EAAM,YACzC,GAAI,CACF,WAAAjC,CACD,EAAGhH,EAEA,CACF,MAAAU,EACA,aAAAuO,EAAe,GACf,KAAApP,EACA,KAAAD,EACA,UAAAgS,CACN,EAAQ5K,GAA4D,GAChE,KAAK,MAAQ,CACX,QAAS,CAAE,EACX,OAAQnH,GAAQ,MAAQD,GAAQ,KAAO,CACrC,KAAAC,EACA,KAAAD,CACR,EAAU,OACJ,MAAAc,EACA,UAAAkR,EACA,aAAA3C,EACA,WAAY,GACZ,WAAY,GAEZ,WAAAjI,CACN,CACG,CAED,mBAAoB,CAClB,KAAK,cAAa,EAClB,GAAI,CACF,OAAAd,EACA,MAAAxF,EACA,UAAAkR,CACN,EAAQ,KAAK,MACT,GAAI1L,GAAU,KAAM,CAClB,GAAI,CACF,KAAArG,EACA,KAAAD,CACD,EAAGsG,EACJ,KAAK,WAAWrG,EAAMD,EAAMc,EAAOkR,CAAS,EAE/C,CACD,mBAAmBxI,EAAW,CAC5B,GAAI,CACF,QAAAxD,CACN,EAAQ,KAAK,MACLA,IAAYwD,EAAU,SACxB,KAAK,cAAa,CAErB,CACD,aAAa5K,EAAM,CACjB,GAAI,CACF,OAAA0H,EACA,aAAA+I,EAAe,GACf,MAAAvO,CACD,EAAGlC,EACAqB,EACAD,EACAsG,GAAU,OACX,CACC,KAAArG,EACA,KAAAD,CACD,EAAGsG,GAEN,IAAIkM,EAAa,GACbR,EAAY,KAAK,MACrB,KAAK,SAASxS,GAAS,CACrB,IAAImM,EACA,CACF,WAAAvE,EACA,UAAWsL,EACX,WAAAC,EACA,WAAAC,CACD,EAAGpT,EAEAqT,EAASzL,GAAc,MAAQiI,IAAiBjI,EAAW,cAAgBnH,IAASmH,EAAW,MAAQpH,IAASoH,EAAW,MAAQtG,IAAUsG,EAAW,MAC5J,OAAAoL,GAAc7G,EAAQ,CAACiH,GAAcvD,IAAiB,CAACwD,GAAU,CAACF,MAAiB,MAAQhH,IAAU,OAASA,EAAQ,GACjH6G,IACHR,EAAYU,GAEP,CACL,WAAY,CACV,aAAArD,EACA,KAAApP,EACA,KAAAD,EACA,MAAAc,EACA,UAAAkR,CACD,EACD,UAAAA,EACA,WAAYa,EACZ,WAAY,EACpB,CACA,EAAO,IAAM,CACHL,GACF,KAAK,WAAWvS,EAAMD,EAAMc,EAAOkR,CAAS,CAEpD,CAAK,CACF,CACD,uBAAwB,CACtB,IAAIkO,GACHA,EAAwB,KAAK,eAAe,WAAa,MAAQA,IAA0B,QAAkBA,EAAsB,YAAW,CAChJ,CACD,WAAWjgB,EAAMD,EAAMc,EAAOkR,EAAW,CACvC,GAAI,CACF,WAAAtO,CACN,EAAQ,KAAK,MACTA,EAAW,KAAKuH,EAAiB,gBAAiB,KAAM,CACtD,KAAAhL,EACA,KAAAD,EACA,MAAAc,EACA,UAAAkR,CACN,CAAK,CACF,CAOD,cAAcxG,EAAO,CACnB,IAAI2U,EACA3N,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAErF,KAAK,SAAS,CACZ,WAAY,CAACA,CACnB,CAAK,GAIA2N,EAAyB,KAAK,eAAe,WAAa,MAAQA,IAA2B,QAAkBA,EAAuB,eAAe3U,CAAK,CAC5J,CACD,eAAgB,CACd,GAAI,CACF,QAAAxF,CACN,EAAQ,KAAK,MACLA,GAAW,MAGf,KAAK,SAASwF,GAAS,CACrB,GAAI,CACF,OAAAlF,CACD,EAAGkF,EACJ,OAAIlF,GAAU,MAAQN,EAAQ,OAAS,EAC9B,CACL,QAAS,CAAC,GAAGA,CAAO,EACpB,OAAQA,EAAQ,CAAC,CAC3B,EAEUM,GAAU,MAAQ,CAACN,EAAQ,KAAKwG,GAAS,CAC3C,GAAI,CACF,KAAAvM,EACA,KAAAD,CACD,EAAGwM,EACJ,OAAOlG,EAAO,OAASrG,GAAQqG,EAAO,OAAStG,CACvD,CAAO,EACQ,CACL,QAAS,CAAC,GAAGgG,EAASM,CAAM,CACtC,EAEa,CACL,QAAS,CAAC,GAAGN,CAAO,CAC5B,CACA,CAAK,CACF,CACD,QAAS,CACP,GAAI,CACF,YAAAjE,EACA,WAAA2B,CACN,EAAQ,KAAK,MACL,CACF,OAAA4C,EACA,QAAAN,EACA,aAAAqJ,EACA,MAAAvO,CACN,EAAQ,KAAK,MACT,OAAoBsB,EAAAA,IAAKwC,GAAO,CAC9B,UAAW,0BACX,eAAgB,KAChB,YAAa7C,EACb,WAAY2B,EACZ,kBAAmB,KAAK,sBACxB,WAAY,GACZ,YAAa,GACb,SAAuBtB,EAAI,IAACud,GAAa,CACvC,IAAK,KAAK,eACV,OAAQrZ,EACR,QAASN,EACT,SAAU,KAAK,aACf,aAAcqJ,EACd,MAAOvO,CACf,CAAO,CACP,CAAK,CACF,CACH,CACAH,GAAgBsf,GAAkB,eAAgB,CAChD,WAAY,IACd,CAAC,EACDtf,GAAgBsf,GAAkB,YAAa,kBAAkB,EACjEtf,GAAgBsf,GAAkB,cAAe,kBAAkB,EACnE,IAAI7S,GAAkB,CAAC5B,EAAO6B,IAAa,CACzC,GAAI,CACF,iBAAAlD,CACD,EAAGkD,EACJ,MAAO,CACL,QAAS8D,GAAuB3F,EAAOrB,CAAgB,CAC3D,CACA,EACIiW,GAA4BhS,GAAQhB,GAAiB,KAAM,KAAM,CACnE,WAAY,EACd,CAAC,EAAE6S,EAAgB,EACnB,MAAAI,GAAeD,GCvOf,SAAS5Y,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,EAAK,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUpH,EAAK,CAAEF,GAAgBoH,EAAQlH,EAAKoH,EAAOpH,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBkH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUpH,EAAK,CAAE,OAAO,eAAekH,EAAQlH,EAAK,OAAO,yBAAyBoH,EAAQpH,CAAG,CAAC,CAAE,CAAE,EAAK,OAAOkH,CAAS,CAC1f,SAASpH,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAazX,IAAIgH,EAAMC,EAAI,OAAO,uBAAuB,EAC5C,SAASmY,GAAiBhY,EAAO,CAC/B,OAAOA,EAAM,eAAiB,IAChC,CACO,MAAMiY,WAA8B9X,EAAAA,SAAU,CACnD,OAAO,iCAAiCsB,EAAOyW,EAAS,CACtD,OAAOA,EAAQ,IAAI5hB,GAAQ,CACzB,GAAI,CAACmQ,EAAOlG,CAAM,EAAIjK,EACtB,GAAImQ,GAAShF,EAAM,QAAQ,OACzB,OAAO,KAET,GAAI,CACF,KAAA9J,CACR,EAAU8J,EAAM,QAAQgF,CAAK,EACvB,MAAO,CACL,KAAA9O,EACA,OAAA4I,CACR,CACK,CAAA,EAAE,OAAOxI,GAAUA,GAAU,IAAI,CACnC,CACD,YAAYD,EAAO,CACjB,MAAMA,CAAK,EACX,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,GAAI,CACF,WAAAgH,EACA,WAAAqN,CACD,EAAGrU,EACA,CACF,WAAAwU,EAAaH,EAAW,OAAS,EAAIA,EAAW,CAAC,EAAE,GAAK,OACxD,aAAApF,EAAe,EACrB,EAAQjI,GAA4D,GAChE,KAAK,MAAQ,CACX,WAAAwN,EACA,aAAAvF,EAEA,WAAAjI,CACN,CACG,CAGD,gBAAiB,CACf,GAAI,CACF,wBAAAqZ,CACN,EAAQ,KAAK,MACLxL,EAAS,CAAA,EACb,OAAC,GAAGwL,EAAwB,KAAM,CAAA,EAAE,QAAQ5f,GAAO,CACjD,IAAIyH,EAAQmY,EAAwB,IAAI5f,CAAG,EAC3C,GAAIyH,IAAU,OAAW,CACvBJ,EAAI,MAAM,sBAAuBI,CAAK,EACtC,OAEF,IAAIxJ,EAAgByB,EAAY,0BAA0B+H,CAAK,EAC3D1I,EAAUW,EAAY,eAAe+H,CAAK,EAC9CJ,EAAI,MAAM,SAAUI,EAAOxJ,CAAa,EACxC,GAAI,CACF,YAAAiD,EAAc,IACtB,EAAUuG,EAAM,MACV,GAAIvG,GAAe,KAAM,CACvBmG,EAAI,MAAM,gCAAiCI,CAAK,EAChD,OAEF,IAAIjI,EAASE,EAAY,gCAAgCwB,CAAW,EACpE,GAAI1B,GAAU,KAAM,CAClB6H,EAAI,MAAM,gDAAiDnG,CAAW,EACtE,OAEF,IAAIqF,EAAa7G,EAAY,uBAAuBF,CAAM,EAC1D,GAAI+G,GAAc,KAAM,CACtBc,EAAI,MAAM,uBAAuB,OAAOtI,CAAO,CAAC,EAChD,OAEF,OAAQd,EAAa,CACnB,KAAKyB,EAAY,iBAAiBwY,EAAa,EAC7C,CACE,IAAI2H,EACA9gB,GAAW,OACb8gB,EAAS,KAAK,wBAAwB9gB,EAASwH,CAAU,GAEvDsZ,GAAU,MACZzL,EAAO,KAAK,CACV,QAAArV,EACA,KAAMd,EACN,MAAO4hB,CACvB,CAAe,EAEH,KACD,CACH,KAAKngB,EAAY,iBAAiB0f,EAAgB,EAClD,KAAK1f,EAAY,iBAAiB+Q,EAAmB,EACnD,CACE,GAAI,CACF,aAAAjC,EACA,KAAApP,EACA,KAAAD,EACA,MAAAc,CACD,EAAGsG,EACJ6N,EAAO,KAAK,CACV,QAAArV,EACA,KAAMd,EACN,MAAO,CACL,aAAAuQ,EACA,KAAApP,EACA,KAAAD,EACA,MAAAc,CACD,CACf,CAAa,EACD,KACD,CAEJ,CACP,CAAK,EACMmU,CACR,CACD,wBAAwBrV,EAASwH,EAAY,CAC3C,GAAI,CACF,cAAAmG,CACN,EAAQ,KAAK,MACLxD,EAAQwD,EAAc,IAAI3N,CAAO,EACrC,GAAImK,GAAS,KACX7B,OAAAA,EAAI,MAAM,iCAAiC,OAAOtI,EAAS,GAAG,CAAC,EACxD,KAIT,GAAI,CACF,cAAAyb,EAAgB,CACd,gBAAiB,OACjB,aAAc,MACf,EACD,UAAAC,EAAY,CAAE,CACf,EAAGlU,EACA,CACF,gBAAiB+W,EACjB,aAAcD,CACf,EAAG7C,EACAxB,EACAsE,IACFtE,EAAkB0G,GAAsB,iCAAiCxW,EAAOoU,CAAsB,GAExG,IAAInE,EACJ,OAAIkE,IACFlE,EAAeuG,GAAsB,iCAAiCxW,EAAOmU,CAAmB,GAE3F,CACL,cAAepW,GAAcA,GAAc,CAAE,EAAEuT,CAAa,EAAG,CAAA,EAAI,CACjE,gBAAAxB,EACA,aAAAG,CACR,CAAO,EACD,UAAWlS,GAAc,CAAE,EAAEwT,CAAS,CAC5C,CACG,CACD,sBAAuB,CACrB,OAAO,KAAK,gBACb,CACD,aAAa9b,EAAO,CAClB,GAAI,CACF,aAAA6P,EACA,WAAAuF,CACD,EAAGpV,EACJ0I,EAAI,MAAM,eAAgBmH,EAAcuF,CAAU,EAClD,KAAK,SAAS,CACZ,aAAAvF,EACA,WAAAuF,CACN,CAAK,EACD,KAAK,iBAAgB,CACtB,CACD,kBAAkBwB,EAAW,CAC3B,GAAI,CACF,wBAAAqK,CACN,EAAQ,KAAK,MACL,CACF,OAAAxL,EACA,iBAAAM,EAAmB,EACpB,EAAGa,EACJlO,EAAI,MAAM,gCAAiCkO,CAAS,EACpDnB,EAAO,QAAQtJ,GAAS,CACtB,GAAI,CACF,QAAA/L,EACA,KAAAI,EACA,MAAAwL,CACD,EAAGG,EACJ,GAAI/L,GAAW,KAAM,CACnBsI,EAAI,MAAM,gBAAiBtI,CAAO,EAClC,OAEF,GAAI,CAAC6gB,EAAwB,IAAI7gB,CAAO,EAAG,CACzCsI,EAAI,MAAM,sBAAuBtI,CAAO,EACxC,OAEFsI,EAAI,MAAM,sBAAuBtI,EAASI,EAAMwL,CAAK,EACrD,IAAIlD,EAAQmY,EAAwB,IAAI7gB,CAAO,EAC/C,OAAQI,EAAI,CACV,KAAKO,EAAY,iBAAiBwY,EAAa,EAC7C,KAAK,uBAAuBzQ,EAAOkD,EAAO+J,CAAgB,EAC1D,MACF,KAAKhV,EAAY,iBAAiB0f,EAAgB,EAClD,KAAK1f,EAAY,iBAAiB+Q,EAAmB,EACnD,KAAK,wBAAwBhJ,EAAOkD,CAAK,EACzC,KAEH,CACP,CAAK,CACF,CACD,iBAAiBmJ,EAAoB,CACnC,GAAI,CACF,uBAAAgM,EACA,iBAAAxW,CACN,EAAQ,KAAK,MACTjC,EAAI,MAAM,sBAAuByM,CAAkB,EAGnDgM,EAAuBxW,EAAkB,CAAC,GAAGwK,CAAkB,CAAC,CACjE,CACD,kBAAmB,CACjB,KAAK,SAASnI,GAAS,CACrB,GAAI,CACF,WAAAoI,EACA,aAAAvF,CACD,EAAG7C,EACJ,MAAO,CAEL,WAAY,CACV,WAAAoI,EACA,aAAAvF,CACD,CACT,CACA,CAAK,CACF,CACD,uBAAuB/G,EAAOkD,EAAO+J,EAAkB,CAGrD,GAAI,CACF,cAAA8F,EAAgB,CAAE,EAClB,gBAAiBuF,EAAsB,CAAE,EACzC,aAAcC,EAAmB,CAAE,CACpC,EAAGrV,EACA,CACF,gBAAAqO,EAAkB+G,EAClB,aAAA5G,EAAe6G,CAChB,EAAGxF,EACA,CACF,cAAA9N,CACN,EAAQ,KAAK,MACL3N,EAAUW,EAAY,eAAe+H,CAAK,EAC9C,GAAI1I,GAAW,KAAM,CACnBsI,EAAI,MAAM,mBAAmB,EAC7B,OAEF,IAAI6B,EAAQwD,EAAc,IAAI3N,CAAO,EACrC,GAAImK,GAAS,KAAM,CACjB7B,EAAI,MAAM,iCAAiC,OAAOtI,EAAS,GAAG,CAAC,EAC/D,OAEFsI,EAAI,MAAM,yBAA0BtI,EAAS4L,EAAO+J,CAAgB,EAChEA,EACFjN,EAAM,kBAAkBkD,CAAK,EAE7BlD,EAAM,WAAW,CACf,aAAc0R,EACd,gBAAiBH,CACzB,CAAO,CAEJ,CAGD,wBAAwBvR,EAAOkD,EAAO,CACpC,IAAIsV,EAAmBhZ,GAAc,CAAE,EAAE0D,CAAK,EAE9C,OAAOsV,EAAiB,aACxB5Y,EAAI,MAAM,0BAA2BI,EAAOwY,CAAgB,EACxDxY,GAASgY,GAAiBhY,CAAK,GACjCA,EAAM,cAAcwY,CAAgB,CAEvC,CACD,QAAS,CACP,GAAI,CACF,YAAA/e,EACA,WAAA2B,EACA,WAAA+Q,CACN,EAAQ,KAAK,MACL,CACF,aAAApF,EACA,WAAAuF,CACN,EAAQ,KAAK,MACT,OAAoBxS,EAAAA,IAAKwC,GAAO,CAC9B,UAAW,2BACX,eAAgB,KAChB,YAAa7C,EACb,WAAY2B,EACZ,WAAY,GACZ,YAAa,GACb,SAAuBtB,EAAI,IAAC,MAAO,CACjC,UAAW,+CACX,SAAuBA,EAAI,IAACiS,GAAkB,CAC5C,SAAU,KAAK,aACf,QAAS,KAAK,kBACd,aAAc,KAAK,iBACnB,aAAchF,EACd,WAAYoF,EACZ,WAAYG,EACZ,eAAgB,KAAK,oBAC/B,CAAS,CACT,CAAO,CACP,CAAK,CACF,CACH,CACAjU,GAAgB4f,GAAuB,eAAgB,CACrD,WAAY,IACd,CAAC,EACD5f,GAAgB4f,GAAuB,YAAa,uBAAuB,EAC3E,IAAInT,GAAkB,CAAC5B,EAAO6B,IAAa,CACzC,GAAI,CACF,iBAAAlD,CACD,EAAGkD,EACJ,MAAO,CACL,WAAY0T,GAA0BvV,EAAOrB,CAAgB,EAC7D,wBAAyBuD,GAA8BlC,EAAOrB,CAAgB,EAC9E,sBAAuB6D,GAA4BxC,EAAOrB,CAAgB,EAC1E,cAAeqD,GAAwBhC,EAAOrB,CAAgB,CAClE,CACA,EACI6W,GAAiC5S,GAAQhB,GAAiB,CAC5D,uBAAwB6T,EAC1B,EAAG,KAAM,CACP,WAAY,EACd,CAAC,EAAEV,EAAqB,EACxB,MAAAW,GAAeF,GC1Vf,SAASrgB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAO1W,MAAMigB,WAA0Bze,EAAAA,aAAc,CAC3D,QAAS,CACP,GAAI,CACF,UAAA0e,EACA,SAAAnf,EACA,cAAAof,CACN,EAAQ,KAAK,MACT,OAAoBlf,EAAAA,KAAM,MAAO,CAC/B,UAAW,wCACX,cAAekf,EACf,SAAU,CAAcjf,EAAI,IAAC,MAAO,CAClC,UAAWyC,GAAW,aAAc,YAAa,CAC/C,QAASuc,IAAc,QAAa,CAACA,CAC/C,CAAS,EACD,SAAuBjf,EAAK,KAAC,OAAQ,CACnC,SAAU,CAAC,wBAAsCC,EAAI,IAACuE,GAAiB,CACrE,KAAM4Q,EAClB,CAAW,CAAC,CACZ,CAAS,CACF,CAAA,EAAGtV,CAAQ,CAClB,CAAK,CACF,CACH,CACAtB,GAAgBwgB,GAAmB,eAAgB,CACjD,UAAW,EACb,CAAC,EClCD,SAASxgB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAQzX,IAAIgH,GAAMC,EAAI,OAAO,mBAAmB,EACxC,MAAMmZ,WAA0B5e,EAAAA,aAAc,CAC5C,YAAYtC,EAAO,CACjB,MAAMA,CAAK,EACX,KAAK,wBAA0B,KAAK,wBAAwB,KAAK,IAAI,EACrE,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,MAAQ,CACX,mBAAoB,EAC1B,CACG,CACD,wBAAwBmhB,EAAU,CAChC,KAAK,SAAS,CACZ,mBAAoB,GACpB,YAAaA,CACnB,CAAK,CACF,CACD,wBAAyB,CACvB,KAAK,SAAS,CACZ,mBAAoB,GACpB,YAAa,MACnB,CAAK,CACF,CACD,qBAAqBA,EAAU,CAE7B,GADArZ,GAAI,MAAM,oBAAqBqZ,CAAQ,EACnCA,IAAa,OAAW,CAC1B,GAAI,CACF,SAAAC,CACR,EAAU,KAAK,MACTA,EAASD,CAAQ,EAEnB,KAAK,SAAS,CACZ,mBAAoB,GACpB,YAAa,MACnB,CAAK,CACF,CACD,QAAS,CACP,GAAI,CACF,gBAAAE,EACA,OAAAC,EACA,SAAAC,CACN,EAAQ,KAAK,MACL,CACF,mBAAAC,EACA,YAAAC,CACN,EAAQ,KAAK,MACT,OAAoBzf,EAAAA,IAAK,MAAO,CAC9B,UAAW,wCACX,SAAuBD,EAAK,KAAC,MAAO,CAClC,UAAW,sCACX,SAAU,CAAcA,EAAK,KAAC,MAAO,CACnC,UAAW,4BACX,SAAU,CAAcC,EAAI,IAAC,KAAM,CACjC,UAAW,aACX,SAAU,OACtB,CAAW,EAAgBA,EAAI,IAAC,MAAO,CAC3B,UAAW,YACX,SAAuBA,EAAI,IAAC0O,EAAQ,CAClC,KAAM,QACN,UAAW,QACX,QAAS6Q,EACT,SAAU,mBACxB,CAAa,CACb,CAAW,CAAC,CACZ,CAAS,EAAgBxf,EAAK,KAAC,MAAO,CAC5B,UAAW,4BACX,SAAU,CAAcC,EAAI,IAAC,KAAM,CACjC,UAAW,aACX,SAAU,gCACX,CAAA,EAAGqf,EAAgB,IAAIF,GAAyBpf,EAAAA,KAAM,MAAO,CAC5D,UAAW,YACX,SAAU,CAAcC,EAAI,IAAC0O,EAAQ,CACnC,KAAM,QACN,UAAW,QACX,QAAS,IAAM4Q,EAAOH,CAAQ,EAC9B,SAAUA,EAAS,KACjC,CAAa,EAAgBnf,EAAI,IAAC,SAAU,CAC9B,UAAW,gBACX,KAAM,SACN,QAAS,IAAM,CACb,KAAK,wBAAwBmf,CAAQ,CACtC,EACD,SAAuBnf,EAAI,IAACuE,GAAiB,CAC3C,KAAM6Q,EACtB,CAAe,CACf,CAAa,CAAC,CACH,EAAE+J,EAAS,EAAE,CAAC,EAAgBpf,EAAAA,KAAM2f,GAAO,CAC1C,OAAQF,EACR,OAAQ,KAAK,uBACb,UAAW,6DACX,SAAU,CAAcxf,EAAI,IAAC2f,GAAa,CACxC,SAAU,wDACxB,CAAa,EAAgB3f,EAAI,IAAC4f,GAAW,CAC/B,SAAU,6BACxB,CAAa,EAAgB7f,EAAK,KAAC8f,GAAa,CAClC,SAAU,CAAc7f,EAAI,IAAC0O,EAAQ,CACnC,KAAM,YACN,QAAS,KAAK,uBACd,SAAU,QAC1B,CAAe,EAAgB1O,EAAI,IAAC0O,EAAQ,CAC5B,KAAM,SACN,QAAS,IAAM,CACb,KAAK,qBAAqB+Q,CAAW,CACtC,EACD,SAAU,QAC1B,CAAe,CAAC,CAChB,CAAa,CAAC,CACd,CAAW,CAAC,CACZ,CAAS,CAAC,CACV,CAAO,CACP,CAAK,CACF,CACH,CACAlhB,GAAgB2gB,GAAmB,eAAgB,CACjD,gBAAiB,CAAE,EACnB,OAAQ,IAAA,GACR,SAAU,IAAA,GACV,SAAU,IAAA,EACZ,CAAC,EACD,MAAAY,GAAeZ,GChIf,SAAS3gB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAKzX,IAAIihB,GAAiB/hB,GAAS,CAC5B,GAAI,CACF,SAAA6B,EACA,UAAAqB,CACD,EAAGlD,EACAgiB,EAAsC9e,GAAc,MAAQA,IAAc,QAAUA,EAAU,WAAW,WAAW,EAAIA,EAAU,UAAU,CAAC,EAAI,YACrJ,OAAoBlB,EAAAA,IAAK,MAAO,CAC9B,SAAuBA,EAAI,IAAC,OAAQ,CAClC,SAAuBA,EAAI,IAACigB,GAAM,CAChC,SAAUD,EACV,SAAU/Y,EAAM,SAAS,IAAIpH,EAAUqgB,GAAS,OAAOA,GAAU,SAAWA,EAAM,KAAI,EAAKA,CAAK,CACxG,CAAO,CACP,CAAK,CACL,CAAG,CACH,EACe,MAAMC,WAAuB7f,EAAAA,aAAc,CACxD,YAAYtC,EAAO,CACjB,MAAMA,CAAK,EACXO,GAAgB,KAAM,YAAa,MAAM,EACzC,KAAK,UAAY,IAClB,CACD,QAAS,CACP,GAAI,CACF,UAAAygB,EACA,QAAAoB,EACA,oBAAAC,CACN,EAAQ,KAAK,MACT,OAAoBrgB,EAAAA,IAAK,MAAO,CAC9B,UAAW,4BACX,IAAKsgB,GAAa,CAChB,KAAK,UAAYA,CAClB,EACD,SAAUtB,EAAyBhf,EAAI,IAACugB,GAAQ,CAC9C,SAAU,CACR,SAAU,WACV,MAAOH,EACP,YAAa,KACd,EACD,oBAAqBC,CAC7B,CAAO,EAAiBrgB,EAAI,IAACwgB,GAAU,CAC/B,WAAY,CACV,KAAMT,EACP,EACD,SAAUK,CAClB,CAAO,CACP,CAAK,CACF,CACH,CACA7hB,GAAgB4hB,GAAgB,eAAgB,CAC9C,UAAW,GACX,QAAS,EACX,CAAC,EC1DD,SAAS5hB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAazX,IAAIgH,GAAMC,EAAI,OAAO,eAAe,EAC7B,MAAM0a,WAAsBpa,EAAAA,SAAU,CAC3C,YAAYrI,EAAO,CACjB,MAAMA,CAAK,EACXO,GAAgB,KAAM,iBAAkB,MAAM,EAC9CA,GAAgB,KAAM,SAAU,MAAM,EACtCA,GAAgB,KAAM,qBAAsBgC,EAAQmgB,GAAgBA,EAAa,OAAOxa,GAASA,EAAM,YAAc,eAAe,EAAE,QAAO,CAAE,CAAC,EAChJ,KAAK,2BAA6B,KAAK,2BAA2B,KAAK,IAAI,EAC3E,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,wBAA0B,KAAK,wBAAwB,KAAK,IAAI,EACrE,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,GAAI,CACF,WAAAlB,CACD,EAAGhH,EACAoiB,EAAU,KACVpb,GAAc,MAAQA,EAAW,SAAW,OAC7C,CACC,QAAAob,CACD,EAAGpb,GAEN,KAAK,MAAQ,CACX,iBAAkBob,GAAW,KAC7B,UAAW,GACX,QAAAA,EAEA,WAAApb,CACN,EACI,KAAK,eAAiB,IACvB,CACD,kBAAkB2b,EAAgB,CAChC7Z,EAAc,KAAK,cAAc,EACjC,GAAI,CACF,UAAW8Z,CACjB,EAAQ,KAAK,eACT,GAAI,KAAK,QAAUA,EAAyB,CAC1C,IAAIC,EAAuBC,EACvBC,EAAaH,EAAwB,sBAAqB,EAAG,IAC7DI,EAAmBJ,EAAwB,UAC3CK,EAAsBL,EAAwB,aAC9CM,GAAcL,GAAyBC,EAAyB,KAAK,OAAO,cAAgB,MAAQA,IAA2B,OAAS,OAASA,EAAuB,aAAc,KAAM,MAAQD,IAA0B,OAASA,EAAwB,EAC/PM,EAAc,KAAK,OAAOH,EAAmBL,EAAiBI,GAAcE,EAAsBC,CAAU,EAC5GC,EAAcD,IAChBC,EAAcD,GAEhB,KAAK,OAAO,WAAWC,CAAW,EAClC,KAAK,OAAO,YAAY,CACtB,WAAYA,EACZ,OAAQ,CAChB,CAAO,EACD,KAAK,OAAO,QAEf,CACD,2BAA2Brd,EAAO,CAChC,GAAI,CACF,UAAAkb,CACN,EAAQ,KAAK,MACLoC,EAAmBtd,EAAM,QACxBkb,GACH,KAAK,SAAS,CACZ,UAAW,EACnB,EAAS,IAAM,CACP,KAAK,kBAAkBoC,CAAgB,CAC/C,CAAO,CAEJ,CACD,wBAAwBC,EAAQ,CAC9Bvb,GAAI,MAAM,gCAAgC,EAC1C,KAAK,OAASub,CACf,CACD,sBAAuB,CACrBvb,GAAI,MAAM,oBAAoB,EAC9B,KAAK,SAAS,CACZ,iBAAkB,GAClB,QAAS,GACT,UAAW,GAEX,WAAY,CACV,QAAS,EACV,CACP,EAAO,IAAM,CACH,KAAK,QAAU,MAAQ,KAAK,OAAO,OAAS,MAC9C,KAAK,OAAO,OAEpB,CAAK,CACF,CACD,mBAAmBqZ,EAAU,CAC3BrZ,GAAI,MAAM,mBAAoBqZ,CAAQ,EACtC,GAAI,CACF,YAAAxf,EACA,WAAA2B,CACN,EAAQ,KAAK,MACLrD,EAASE,EAAY,gCAAgCwB,CAAW,EACpE2B,EAAW,KAAKhD,EAAW,OAAQ6gB,EAAUlhB,CAAM,CACpD,CACD,qBAAqBkhB,EAAU,CAC7B,GAAI,CACF,WAAA7d,CACN,EAAQ,KAAK,MACTA,EAAW,KAAKhD,EAAW,OAAQ6gB,CAAQ,CAC5C,CACD,iBAAiBrb,EAAO,CACtB,IAAIwd,EACJxb,GAAI,MAAM,qCAAqC,EAC/C,GAAI,CACF,UAAAkZ,CACN,EAAQ,KAAK,MAGT,GAAI,GAACA,GAAa,KAAK,gBAAkB,MAAQ,KAAK,eAAe,WAAa,MAAQ,KAAK,eAAe,UAAU,SAASlb,EAAM,aAAa,GAGpJ,KAAIsc,GAAWkB,EAAe,KAAK,UAAY,MAAQA,IAAiB,OAAS,OAASA,EAAa,SAAQ,EAC/G,KAAK,SAAS,CACZ,QAAAlB,EACA,UAAW,GAEX,WAAY,CACV,QAAAA,CACD,CACP,CAAK,EACF,CACD,oBAAqB,CACnB,GAAI,CACF,UAAApB,CACN,EAAQ,KAAK,MACLA,GAAa,KAAK,QACpB,KAAK,OAAO,QAEf,CACD,QAAS,CACP,GAAI,CACF,YAAArf,EACA,WAAA2B,EACA,aAAAof,CACN,EAAQ,KAAK,MACL,CACF,UAAA1B,EACA,iBAAAuC,EACA,QAAAnB,CACN,EAAQ,KAAK,MACLf,EAAkB,KAAK,mBAAmBqB,CAAY,EAC1D,OAAoB1gB,EAAAA,IAAKwC,GAAO,CAC9B,YAAa7C,EACb,WAAY2B,EACZ,UAAW,iBACX,eAAgB,KAChB,SAAU,KAAK,mBACf,OAAQ,KAAK,iBACb,WAAY,GACZ,YAAa,GACb,SAAUigB,EAAgCvhB,EAAI,IAACkf,GAAmB,CAChE,gBAAiBG,EACjB,SAAU,KAAK,qBACf,OAAQ,KAAK,mBACb,SAAU,KAAK,oBACvB,CAAO,EAAiBrf,EAAI,IAAC+e,GAAmB,CACxC,UAAWC,EACX,cAAe,KAAK,2BACpB,SAAuBhf,EAAI,IAACmgB,GAAgB,CAC1C,IAAKqB,GAAkB,CACrB,KAAK,eAAiBA,CACvB,EACD,UAAWxC,EACX,QAASoB,GAAmD,OAC5D,oBAAqB,KAAK,uBACpC,CAAS,CACT,CAAO,CACP,CAAK,CACF,CACH,CACA7hB,GAAgBkiB,GAAe,eAAgB,CAC7C,WAAY,IACd,CAAC,EACDliB,GAAgBkiB,GAAe,YAAa,eAAe,EAC3D,IAAIzV,GAAkB,CAAC5B,EAAO6B,IAAa,CACzC,GAAI,CACF,iBAAAlD,CACD,EAAGkD,EACJ,MAAO,CACL,aAAcwW,GAA4BrY,EAAOrB,CAAgB,CACrE,CACA,EACI2Z,GAAyB1V,GAAQhB,GAAiB,KAAM,KAAM,CAChE,WAAY,EACd,CAAC,EAAEyV,EAAa,EAChB,MAAAkB,GAAeD,GC3Mf,SAAStc,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,EAAK,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUpH,EAAK,CAAEF,GAAgBoH,EAAQlH,EAAKoH,EAAOpH,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBkH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUpH,EAAK,CAAE,OAAO,eAAekH,EAAQlH,EAAK,OAAO,yBAAyBoH,EAAQpH,CAAG,CAAC,CAAE,CAAE,EAAK,OAAOkH,CAAS,CAC1f,SAASic,GAA0BpjB,EAAK,CAAE,GAAIA,GAAO,KAAM,MAAM,IAAI,UAAU,sBAAwBA,CAAG,CAAI,CAC9G,SAASqjB,IAAW,CAAE,OAAAA,GAAW,OAAO,OAAS,OAAO,OAAO,KAAM,EAAG,SAAUlc,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASnH,KAAOoH,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQpH,CAAG,IAAKkH,EAAOlH,CAAG,EAAIoH,EAAOpH,CAAG,GAAS,OAAOkH,CAAS,EAASkc,GAAS,MAAM,KAAM,SAAS,CAAI,CACnV,SAAStjB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAczX,MAAMgjB,WAAoBzb,EAAAA,SAAU,CAClC,YAAYrI,EAAO,CACjB,MAAMA,CAAK,EACXO,GAAgB,KAAM,YAAa,MAAM,EACzCA,GAAgB,KAAM,cAAe,MAAM,EAC3C,KAAK,YAA2B0I,EAAM,YACtC,KAAK,UAAyBA,EAAM,YACpC,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,GAAI,CACF,WAAAjC,CACD,EAAGhH,EACJ,KAAK,MAAQ,CACX,gBAAiB,GACjB,WAAAgH,CACN,CACG,CAED,cAAe,CACb,IAAI+c,EAAuBC,GAC1BD,EAAwB,KAAK,YAAY,WAAa,MAAQA,IAA0B,QAAkBA,EAAsB,UAAS,GACzIC,EAAwB,KAAK,UAAU,WAAa,MAAQA,IAA0B,QAAkBA,EAAsB,KAAI,EACnI,KAAK,SAAS,CACZ,gBAAiB,EACvB,CAAK,CACF,CACD,uBAAwB,CACtB,IAAIC,EAAwBC,EAAwBC,EAChD,CACF,gBAAAC,CACN,EAAQ,KAAK,MACLA,IAAoBH,EAAyB,KAAK,YAAY,WAAa,MAAQA,IAA2B,SAAWC,EAAyBD,EAAuB,YAAc,MAAQC,IAA2B,SAAWC,EAAyBD,EAAuB,WAAa,MAAQC,IAA2B,QAAUA,EAAuB,OACxW,KAAK,YAAY,QAAQ,SAAS,QAAQ,KAAK,QAC/C,KAAK,SAAS,CACZ,gBAAiB,EACzB,CAAO,EAEJ,CACD,uBAAuBnd,EAAY,CACjC,KAAK,SAAS,CACZ,WAAAA,CACN,CAAK,CACF,CACD,QAAS,CACP,IAAIqd,EAAc,KAAK,MACrBrkB,EAAQ6jB,GAAS,CAAE,GAAGD,GAA0BS,CAAW,EAAGA,IAChE,OAAoBriB,MAAKqd,GAAwB3X,GAAcA,GAAc,CAC3E,IAAK,KAAK,YACV,cAAe,KAAK,sBACpB,mBAAoB,KAAK,sBAC/B,EAAO1H,CAAK,EAAG,GAAI,CACb,SAAuB+B,EAAK,KAAC2O,EAAQ,CACnC,IAAK,KAAK,UACV,KAAM,UACN,UAAW,aACX,QAAS,KAAK,aACd,QAAS,yEACT,SAAU,CAAC,mBAAiC3O,EAAK,KAAC,OAAQ,CACxD,SAAU,CAAcC,EAAI,IAACuE,GAAiB,CAC5C,KAAM+Q,GACN,UAAW,WACX,UAAW,MACZ,CAAA,EAAG,QAAQ,CACtB,CAAS,CAAC,CACV,CAAO,CACF,CAAA,CAAC,CACH,CACH,CACA/W,GAAgBujB,GAAa,eAAgB,CAC3C,WAAY,IACd,CAAC,EACDvjB,GAAgBujB,GAAa,YAAa,aAAa,EACvD,MAAAQ,GAAeR,GC7Ff,SAASS,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQnkB,EAAKG,EAAK,CAAE,GAAI,CAAE,IAAIikB,EAAOL,EAAI/jB,CAAG,EAAEG,CAAG,EAAOF,EAAQmkB,EAAK,YAAgBza,EAAP,CAAgBsa,EAAOta,CAAK,EAAG,MAAS,CAAKya,EAAK,KAAQJ,EAAQ/jB,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKikB,EAAOC,CAAM,CAAM,CACzQ,SAASE,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAUR,EAASC,EAAQ,CAAE,IAAIF,EAAMO,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASN,EAAMjkB,EAAO,CAAE6jB,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQlkB,CAAK,CAAI,CAAC,SAASkkB,EAAOM,EAAK,CAAEX,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASM,CAAG,EAAKP,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAASpkB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAElX,MAAMqkB,EAAqB,CAChC,YAAYC,EAAO,CACjB7kB,GAAgB,KAAM,QAAS,MAAM,EACrCA,GAAgB,KAAM,mBAAoB,MAAM,EAChD,KAAK,MAAQ6kB,CACd,CAGD,UAAUC,EAAQ,CAEjB,CACD,YAAYC,EAAMC,EAAU,CAE1B,GAAID,EAAK,OAAOA,EAAK,OAAS,CAAC,IAAM,IACnC,QAAS1d,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQA,GAAK,EAAG,CAC7C,IAAIjC,EAAO,KAAK,MAAMiC,CAAC,EACnB4d,GAAY7f,CAAI,IAAM,GAAG,OAAOA,EAAK,SAAU,GAAG,IAAM2f,GAAQ3f,EAAK,WAAa2f,KACpF3f,EAAK,WAAa4f,GAIxB,OAAO,QAAQ,SAChB,CACD,aAAc,CACZ,QAAS3d,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQA,GAAK,EAAG,CAC7C,IAAIjC,EAAO,KAAK,MAAMiC,CAAC,EACnB4d,GAAY7f,CAAI,IAClBA,EAAK,WAAa,IAGtB,OAAO,QAAQ,SAChB,CACD,iBAAkB,CAChB,OAAO,QAAQ,QAAQ,CACrB,MAAO,KAAK,MAEZ,OAAQ,CACd,CAAK,CACF,CACD,YAAY8f,EAAc,CACxB,OAAOX,GAAkB,WAAa,CACpC,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CAAA,GACF,CACD,YAAYY,EAAU,CACpB,IAAIC,EAAQ,KACZ,OAAOb,GAAkB,WAAa,CACpC,IAAIc,EACAC,EAAqB,MAAMF,EAAM,mBACpCC,EAAwBD,EAAM,oBAAsB,MAAQC,IAA0B,QAAkBA,EAAsB,KAAKD,EAAOE,CAAkB,CAC9J,CAAA,GACF,CACD,WAAW5lB,EAAQ,CAElB,CACD,SAASA,EAAQ,CAEhB,CACD,YAAY6lB,EAAY,CAEvB,CACD,OAAQ,CAEP,CACD,SAASC,EAAU,CACjB,YAAK,iBAAmBA,EACjB,KAAK,IACb,CACD,IAAI,MAAO,CACT,OAAO,KAAK,MAAM,MACnB,CACH,CACA,MAAAC,GAAeb,GC9Ef,SAASZ,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQnkB,EAAKG,EAAK,CAAE,GAAI,CAAE,IAAIikB,EAAOL,EAAI/jB,CAAG,EAAEG,CAAG,EAAOF,EAAQmkB,EAAK,YAAgBza,EAAP,CAAgBsa,EAAOta,CAAK,EAAG,MAAS,CAAKya,EAAK,KAAQJ,EAAQ/jB,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKikB,EAAOC,CAAM,CAAM,CACzQ,SAASE,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAUR,EAASC,EAAQ,CAAE,IAAIF,EAAMO,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASN,EAAMjkB,EAAO,CAAE6jB,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQlkB,CAAK,CAAI,CAAC,SAASkkB,EAAOM,EAAK,CAAEX,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASM,CAAG,EAAKP,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAASpkB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAGlX,MAAMmlB,EAAgB,CAC3B,YAAYb,EAAO,CACjB7kB,GAAgB,KAAM,QAAS,MAAM,EACrC,KAAK,MAAQ6kB,CACd,CACD,UAAW,CACT,IAAIO,EAAQ,KACZ,OAAOb,GAAkB,WAAa,CACpC,OAAO,IAAIK,GAAqBQ,EAAM,KAAK,CAC5C,CAAA,GACF,CAGD,SAASO,EAAM,CACb,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,SAASrmB,EAAM,CACb,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,SAASA,EAAMsmB,EAAS,CACtB,OAAOrB,GAAkB,WAAa,CACpC,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CAAA,GACF,CACD,WAAWjlB,EAAM,CACf,IAAIumB,EAAS,KACb,OAAOtB,GAAkB,WAAa,CACpCsB,EAAO,MAAQA,EAAO,MAAM,OAAO1lB,GAASA,EAAM,WAAab,CAAI,CACpE,CAAA,GACF,CACD,SAASA,EAAMsmB,EAAS,CACtB,IAAIE,EAAS,KACb,OAAOvB,GAAkB,WAAa,CACpC,QAASld,EAAI,EAAGA,EAAIye,EAAO,MAAM,OAAQze,GAAK,EAC5C,GAAIye,EAAO,MAAMze,CAAC,EAAE,WAAa/H,EAAM,CACrCwmB,EAAO,MAAMze,CAAC,EAAE,SAAWue,EAC3BE,EAAO,MAAMze,CAAC,EAAE,SAAW0e,GAAU,YAAYH,CAAO,EACxDE,EAAO,MAAMze,CAAC,EAAE,GAAKue,EACrB,MAGL,CAAA,GACF,CACD,KAAKtmB,EAAM,CACT,IAAI0mB,EAAS,KACb,OAAOzB,GAAkB,WAAa,CACpC,IAAI0B,EAAWD,EAAO,MAAM,OAAO7lB,GAASA,EAAM,WAAab,CAAI,EACnE,GAAI2mB,EAAS,SAAW,EACtB,MAAM,IAAIC,GAEZ,GAAID,EAAS,OAAS,EACpB,MAAM,IAAI,MAAM,mCAAmC,EAErD,IAAIE,EAAcF,EAAS,CAAC,EAC5B,MAAO,CACL,SAAUE,EAAY,SACtB,SAAUA,EAAY,SACtB,GAAIA,EAAY,SAChB,KAAMA,EAAY,IAC1B,CACK,CAAA,GACF,CACD,gBAAgB7mB,EAAM,CACpB,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACH,CACA,MAAA8mB,GAAeV,GCzEf,SAAS7e,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,EAAK,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUpH,EAAK,CAAEF,GAAgBoH,EAAQlH,EAAKoH,EAAOpH,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBkH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUpH,EAAK,CAAE,OAAO,eAAekH,EAAQlH,EAAK,OAAO,yBAAyBoH,EAAQpH,CAAG,CAAC,CAAE,CAAE,EAAK,OAAOkH,CAAS,CAC1f,SAASpH,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CACzX,SAASyjB,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQnkB,EAAKG,EAAK,CAAE,GAAI,CAAE,IAAIikB,EAAOL,EAAI/jB,CAAG,EAAEG,CAAG,EAAOF,EAAQmkB,EAAK,YAAgBza,EAAP,CAAgBsa,EAAOta,CAAK,EAAG,MAAS,CAAKya,EAAK,KAAQJ,EAAQ/jB,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKikB,EAAOC,CAAM,CAAM,CACzQ,SAASE,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAUR,EAASC,EAAQ,CAAE,IAAIF,EAAMO,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASN,EAAMjkB,EAAO,CAAE6jB,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQlkB,CAAK,CAAI,CAAC,SAASkkB,EAAOM,EAAK,CAAEX,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASM,CAAG,EAAKP,EAAM,MAAS,EAAI,CAAI,CAAG,CASrY,SAASiC,GAAiBC,EAAIC,EAAKC,EAAKC,EAAK,CAC3C,OAAOC,GAAkB,MAAM,KAAM,SAAS,CAChD,CACA,SAASA,IAAoB,CAC3B,OAAAA,GAAoBnC,GAAkB,UAAWlb,EAAIsd,EAAYnnB,EAAUiH,EAAY,CACrF,IAAIC,EACAwV,EACA0K,EACAjgB,EACJ,GAAIJ,GAA0B/G,CAAQ,EACpCkH,EAAWlH,EAAS,SACpB0c,EAAY1c,EAAS,MACrBonB,EAAa,OACbjgB,EAAgBnH,EAAS,kBACpB,CACL,IAAIqnB,EACJngB,EAAW,CAAA,EACXwV,EAAY,GACZ0K,GAAcC,EAAiBrnB,EAAS,QAAU,MAAQqnB,IAAmB,OAASA,EAAiBrnB,EAAS,OAChHmH,EAAgB,CAAA,EAgBlB,GAdIF,GAAc,OACZA,EAAW,eAAiB,OAC9BE,EAAgBF,EAAW,eAEzBA,EAAW,OAAS,OACtByV,EAAYzV,EAAW,OAErBA,EAAW,QAAU,OACvBmgB,EAAangB,EAAW,QAEtBA,EAAW,UAAY,OACzBC,EAAWS,GAAcA,GAAc,CAAA,EAAIT,CAAQ,EAAGD,EAAW,QAAQ,IAGzEmgB,GAAc,KAAM,CACtB,IAAIE,EAAc,CAChB,MAAOF,EACP,KAAMA,EACN,KAAMvd,EAAG,aAAa,MAC9B,EACUW,EAAS,MAAM2c,EAAW,UAAUG,CAAW,EACnD,OAAOC,GAAkB,UAAU1d,EAAI3C,EAAUsD,CAAM,EAEzD,IAAIgd,EAAa,CACf,MAAOJ,EACP,KAAM1K,EACN,KAAM7S,EAAG,aAAa,KAC5B,EACQD,EAAQ,MAAMud,EAAW,UAAUK,CAAU,EACjD,WAAI7c,EAAcd,CAAE,EAAE,mBAAmBD,EAAOzC,EAAesgB,GAAYC,GAAM,SAAU,CAAA,CAAC,EAGrFH,GAAkB,sBAAsB1d,EAAI3C,EAAU0C,CAAK,CACtE,CAAG,EACMsd,GAAkB,MAAM,KAAM,SAAS,CAChD,CACO,SAASS,GAAY1nB,EAAO,CACjC2nB,GAA6B3nB,CAAK,EAClC,IAAI4J,EAAKge,KACLV,EAAaW,KACbhpB,EAAUM,EAAAA,YAAY,CAAC2oB,EAAc/oB,IAAO2I,GAAcA,GAAc,CAAE,EAAEogB,CAAY,EAAG,GAAI,CACjG,iBAAkB/oB,EAClB,UAAW,IAAM,CACf,GAAI,CACF,SAAAgB,CACD,EAAG+nB,EACA9gB,EAAaG,GAA4B2gB,CAAY,EAAIA,EAAa,WAAa,OACvF,GAAI/nB,GAAY,KACd,MAAM,IAAI,MAAM,sCAAsC,EAExD,OAAO6mB,GAAiBhd,EAAIsd,EAAYnnB,EAAUiH,CAAU,CAC7D,CACF,CAAA,EAAG,CAAC4C,EAAIsd,CAAU,CAAC,EACpB,OAAA3oB,GAAkB,CAChB,eAAgByB,EAChB,cAAeoI,GAAW,UAC1B,UAAWA,GACX,eAAgBwB,EAAG,aAAa,OAChC,QAAA/K,CACJ,CAAG,EACM,IACT,CC/FA,IAAIkpB,GAAoB,CACtB,KAAM,cACN,KAAMC,GAAW,iBACjB,UAAWN,EACb,EACA,MAAAO,GAAeF,GCIR,SAASG,GAAmBloB,EAAO,CACxC2nB,GAA6B3nB,CAAK,EAClC,GAAI,CACF,GAAAjB,EACA,OAAAC,CACD,EAAGgB,EACA4J,EAAKge,KACLO,EAAoBhpB,EAAW,YAACX,GAAQ,CAC1C,GAAI,CACF,SAAAuB,EACA,QAAAP,EAAUC,GAAQ,SAAU,EAC5B,MAAAkK,CACD,EAAGnL,EACA,CACF,SAAAyI,CACD,EAAGlH,EACA0J,EAAY,IAAM6d,GAAkB,sBAAsB1d,EAAI3C,EAAU0C,CAAK,EAC7EsL,EAAQ3K,GAAW,kBAAkBrD,CAAQ,EAC7ChH,EAAS,CACX,KAAM,kBACN,UAAWmI,GAAW,UACtB,MAAO,CACL,iBAAkBrJ,EAClB,GAAIS,EACJ,SAAAO,EACA,UAAA0J,CACD,EACD,MAAAwL,EACA,GAAIzV,CACV,EACQ,CACF,KAAAU,CACD,EAAGlB,EACJmB,EAAY,cAAc,CACxB,KAAAD,EACA,OAAAD,CACN,CAAK,CACF,EAAE,CAAC2J,EAAI7K,EAAIC,CAAM,CAAC,EACnB,OAAAqB,GAAYrB,EAAO,SAAUoC,GAAc,aAAc+mB,CAAiB,EACnE,IACT,CCjDA,IAAIC,GAA2B,CAC7B,KAAM,qBACN,KAAMJ,GAAW,iBACjB,UAAWE,EACb,EACA,MAAAG,GAAeD,GCCf,IAAItgB,GAAMC,EAAI,OAAO,cAAc,EACnC,SAASugB,GAAaC,EAAaC,EAAc,CAC/C,OAAOD,EAAY,OAAOC,CAAY,CACxC,CACO,SAASC,GAAazoB,EAAO,CAClC2nB,GAA6B3nB,CAAK,EAClC,GAAI,CACF,GAAI+J,EACJ,OAAA/K,EACA,kBAAAC,CACD,EAAGe,EACA0oB,EAAWC,KACX,CAACC,CAAY,EAAIC,EAAAA,SAAS,IAAM,IAAI,GAAK,EACzC,CAACC,CAAY,EAAID,EAAAA,SAAS,IAAM,IAAI,GAAK,EACzC,CAACE,CAAW,EAAIF,EAAAA,SAAS,IAAM,IAAI,GAAK,EACxCzW,EAAajT,EAAAA,YAAY,IAAM,CACjC,IAAIyG,EAAU,MAAM,KAAKgjB,EAAa,OAAM,CAAE,EAAE,OAAON,GAAc,CAAA,CAAE,EAAE,KAAK,CAACU,EAAGC,IAAM,CACtF,IAAIC,EAAQxjB,GAAU,QAAQsjB,EAAE,IAAI,EAChCG,EAAQzjB,GAAU,QAAQujB,EAAE,IAAI,EACpC,GAAIC,IAAUC,EACZ,OAAOD,EAAQC,EAAQ,EAAI,GAE7B,IAAIC,EAAQ1jB,GAAU,QAAQsjB,EAAE,IAAI,EAChCK,EAAQ3jB,GAAU,QAAQujB,EAAE,IAAI,EACpC,OAAIG,IAAUC,EACLD,EAAQC,EAAQ,EAAI,GAEtB,CACR,CAAA,EAAE,OAAO,CAACC,EAAOpjB,MACZojB,EAAM,SAAW,GAAK5jB,GAAU,QAAQ4jB,EAAMA,EAAM,OAAS,CAAC,EAAE,IAAI,IAAM5jB,GAAU,QAAQQ,EAAO,IAAI,GAAKR,GAAU,QAAQ4jB,EAAMA,EAAM,OAAS,CAAC,EAAE,IAAI,IAAM5jB,GAAU,QAAQQ,EAAO,IAAI,IAC/LojB,EAAM,KAAKpjB,CAAM,EAEZojB,GACN,CAAE,CAAA,EACDnW,EAAU,MAAM,KAAK2V,EAAa,OAAQ,CAAA,EAAE,OAAOR,GAAc,CAAE,CAAA,EAAE,KAAK,CAACU,EAAGC,IAAMD,EAAE,UAAYC,EAAE,SAAS,EAC7GM,EAAW,IAAI,IAAIR,CAAW,EAClCjhB,GAAI,MAAM,aAAc,CACtB,QAAAlC,EACA,QAAAuN,EACA,SAAAoW,CACN,CAAK,EACDb,EAASc,GAAoBzf,EAAkB,CAC7C,QAAAnE,EACA,QAAAuN,EACA,SAAAoW,CACD,CAAA,CAAC,CACN,EAAK,CAACb,EAAU3e,EAAkB6e,EAAcE,EAAcC,CAAW,CAAC,EAOpEU,EAAuBtqB,EAAAA,YAAY,CAAC+I,EAAOtC,IAAY,CACzDkC,GAAI,OAAO,uBAAwBI,EAAOtC,CAAO,EACjDgjB,EAAa,IAAI1gB,EAAO,CAAE,EAAC,OAAOtC,CAAO,CAAC,EAC1CwM,GACJ,EAAK,CAACwW,EAAcxW,CAAU,CAAC,EAOzBsX,EAAuBvqB,EAAAA,YAAY,CAAC+I,EAAOiL,IAAY,CACzDrL,GAAI,OAAO,uBAAwBI,EAAOiL,CAAO,EACjD2V,EAAa,IAAI5gB,EAAO,CAAE,EAAC,OAAOiL,CAAO,CAAC,EAC1Cf,GACJ,EAAK,CAAC0W,EAAc1W,CAAU,CAAC,EACzBuX,EAAqBxqB,EAAAA,YAAY,CAAC+I,EAAOyB,IAAU,CACrD7B,GAAI,OAAO,qBAAsBI,EAAOyB,CAAK,EAC7Cof,EAAY,IAAI5oB,EAAY,eAAe+H,CAAK,EAAGyB,CAAK,EACxDyI,GACJ,EAAK,CAAC2W,EAAa3W,CAAU,CAAC,EACxBwX,EAAqBzqB,EAAW,YAAC+I,GAAS,CAC5CJ,GAAI,OAAO,qBAAsBI,CAAK,EACtC0gB,EAAa,OAAO1gB,CAAK,EACzB4gB,EAAa,OAAO5gB,CAAK,EACzB6gB,EAAY,OAAO5oB,EAAY,eAAe+H,CAAK,CAAC,EACpDkK,GACD,EAAE,CAACwW,EAAcE,EAAcC,EAAa3W,CAAU,CAAC,EACpDyX,EAAqB1qB,EAAW,YAACX,GAAQ,CAC3C,GAAI,CACF,MAAAyW,EAAQ,iBACR,SAAAlV,EAAW,CAAE,EACb,WAAAiH,EAAa,KACb,GAAAjI,EAAKU,GAAQ,SAAU,EACvB,aAAAqqB,EAAe3pB,EAAY,uBAC3B,eAAA4pB,EAAiB,GACjB,UAAAzqB,EAAY,IACb,EAAGd,EACAyB,EAAS,CACX,KAAM,kBACN,UAAWiR,GAAoB,UAC/B,MAAO,CACL,GAAAnS,EACA,SAAAgB,EACA,WAAAiH,EACA,iBAAA+C,CACD,EACD,MAAAkL,EACA,GAAAlW,CACN,EACQ,CACF,KAAAmB,CACD,EAAGlB,EACJmB,EAAY,cAAc,CACxB,KAAAD,EACA,OAAAD,EACA,aAAA6pB,EACA,eAAAC,EACA,UAAAzqB,CACN,CAAK,CACL,EAAK,CAACN,EAAQ+K,CAAgB,CAAC,EACzBigB,EAAkB7qB,EAAW,YAACC,GAAS,CACzC,GAAI,CACF,MAAA6V,EAAQ,cACR,SAAAlV,EAAW,CAAE,EACb,WAAAiH,EAAa,KACb,GAAAjI,EAAKU,GAAQ,SAAU,EACvB,aAAAqqB,EAAe3pB,EAAY,uBAC3B,eAAA4pB,EAAiB,GACjB,UAAAzqB,EAAY,MACb,EAAGF,EACAa,EAAS,CACX,KAAM,kBACN,UAAW4f,GAAiB,UAC5B,MAAO,CACL,GAAA9gB,EACA,SAAAgB,EACA,WAAAiH,EACA,iBAAA+C,CACD,EACD,MAAAkL,EACA,GAAAlW,CACN,EACQ,CACF,KAAAmB,CACD,EAAGlB,EACJmB,EAAY,cAAc,CACxB,KAAAD,EACA,OAAAD,EACA,aAAA6pB,EACA,eAAAC,EACA,UAAAzqB,CACN,CAAK,CACL,EAAK,CAACN,EAAQ+K,CAAgB,CAAC,EACzBkgB,EAA6B9qB,EAAW,YAACoM,GAAS,CACpD,GAAI,CACF,MAAA0J,EAAQ,aACR,SAAAlV,EAAW,CAAE,EACb,WAAAiH,EAAa,KACb,GAAAjI,EAAKU,GAAQ,SAAU,EACvB,aAAAqqB,EAAe3pB,EAAY,uBAC3B,eAAA4pB,EAAiB,GACjB,UAAAzqB,EAAY,IACb,EAAGiM,EACAtL,EAAS,CACX,KAAM,kBACN,UAAWkgB,GAAsB,UACjC,MAAO,CACL,GAAAphB,EACA,SAAAgB,EACA,WAAAiH,EACA,iBAAA+C,CACD,EACD,MAAAkL,EACA,GAAAlW,CACN,EACQ,CACF,KAAAmB,CACD,EAAGlB,EACJmB,EAAY,cAAc,CACxB,KAAAD,EACA,OAAAD,EACA,aAAA6pB,EACA,eAAAC,EACA,UAAAzqB,CACN,CAAK,CACL,EAAK,CAACN,EAAQ+K,CAAgB,CAAC,EAC7BmgB,OAAAA,EAAS,UAAC,UAA8C,CACtD,IAAIC,EAAW,CAAClrB,EAAkBiS,GAAoB,UAAWA,EAAmB,EAAGjS,EAAkB4gB,GAAiB,UAAWA,EAAgB,EAAG5gB,EAAkBkhB,GAAsB,UAAWA,EAAqB,CAAC,EACjO,MAAO,IAAM,CACXgK,EAAS,QAAQC,GAAWA,EAAS,CAAA,CAC3C,CACA,EAAK,CAACnrB,CAAiB,CAAC,EACtBoB,GAAYrB,EAAO,SAAU6L,EAAiB,gBAAiB4e,CAAoB,EACnFppB,GAAYrB,EAAO,SAAU6L,EAAiB,gBAAiB6e,CAAoB,EACnFrpB,GAAYrB,EAAO,SAAU6L,EAAiB,cAAe8e,CAAkB,EAC/EtpB,GAAYrB,EAAO,SAAU6L,EAAiB,cAAegf,CAAkB,EAC/ExpB,GAAYrB,EAAO,SAAU6L,EAAiB,WAAYmf,CAAe,EACzE3pB,GAAYrB,EAAO,SAAU6L,EAAiB,wBAAyBof,CAA0B,EACjG5pB,GAAYrB,EAAO,SAAUsB,EAAW,QAASspB,CAAkB,EAC5D,IACT,CCxMA,IAAIS,GAAqB,CACvB,KAAM,eACN,KAAMrC,GAAW,iBACjB,UAAWS,EACb,EACA,MAAA6B,GAAeD,GCJf,IAAIviB,GAAMC,EAAI,OAAO,qCAAqC,EAMnD,SAASwiB,IAAqB,CACnC,IAAIC,EAAUC,KACVC,EAASvrB,EAAW,YAACU,GAAQ,CAE/B,IAAI8qB,EAAeH,EAAQ,IAAI3qB,CAAI,EACnC,GAAI8qB,GAAgB,KAAM,CACxB,GAAIC,GAAcD,CAAY,EAC5B,OAAOA,EAAa,UAEtB,GAAIE,GAAoBF,CAAY,EAClC,OAAOA,EAAa,YAGxB,IAAIjoB,EAAe,+BAA+B,OAAO7C,EAAM,GAAG,EAClEiI,MAAAA,GAAI,MAAMpF,CAAY,EAChB,IAAI,MAAMA,CAAY,CAChC,EAAK,CAAC8nB,CAAO,CAAC,EACZ,OAAOE,CACT,CC3BA,SAASnG,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQnkB,EAAKG,EAAK,CAAE,GAAI,CAAE,IAAIikB,EAAOL,EAAI/jB,CAAG,EAAEG,CAAG,EAAOF,EAAQmkB,EAAK,YAAgBza,EAAP,CAAgBsa,EAAOta,CAAK,EAAG,MAAS,CAAKya,EAAK,KAAQJ,EAAQ/jB,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKikB,EAAOC,CAAM,CAAM,CACzQ,SAASE,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAUR,EAASC,EAAQ,CAAE,IAAIF,EAAMO,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASN,EAAMjkB,EAAO,CAAE6jB,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQlkB,CAAK,CAAI,CAAC,SAASkkB,EAAOM,EAAK,CAAEX,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASM,CAAG,EAAKP,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAASvd,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,EAAK,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUpH,EAAK,CAAEF,GAAgBoH,EAAQlH,EAAKoH,EAAOpH,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBkH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUpH,EAAK,CAAE,OAAO,eAAekH,EAAQlH,EAAK,OAAO,yBAAyBoH,EAAQpH,CAAG,CAAC,CAAE,CAAE,EAAK,OAAOkH,CAAS,CAC1f,SAASpH,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAOlX,SAASgqB,IAAiB,CAC/B,IAAIlhB,EAAKge,KACLV,EAAaW,KACbhL,EAAa0N,KACb1rB,EAAUM,EAAAA,YAAY,CAAC2oB,EAAc/oB,IAAO,CAC9C,IAAIgB,EACJ,GAAIqY,GAAwB0P,EAAa,QAAQ,EAC/C/nB,EAAW+nB,EAAa,iBACf5P,GAA8B4P,EAAa,QAAQ,EAAG,CAC/D,IAAIiD,EACJhrB,EAAW,CACT,KAAM+nB,EAAa,SAAS,MAC5B,MAAOiD,EAAwBjD,EAAa,SAAS,QAAU,MAAQiD,IAA0B,OAASA,EAAwBnhB,EAAG,aAAa,KAC1J,MAEM,OAAM,IAAI,MAAM,sCAAsC,EAExD,OAAOlC,GAAcA,GAAc,CAAE,EAAEogB,CAAY,EAAG,CAAA,EAAI,CACxD,WAAAjL,EACA,iBAAkB9d,EAClB,UAAW,UAAY,CACrB,IAAIisB,EAAalG,GAAkB,WAAa,CAC9C,GAAI,CACF,KAAMrI,EACN,KAAA7c,CACD,EAAGG,EACAwnB,EAAa,CACf,MAAO9K,EACP,KAAMA,EACN,KAAA7c,CACZ,EACc+J,EAAQ,MAAMud,EAAW,UAAUK,CAAU,EACjD,OAAO0D,GAAqB,UAAUrhB,EAAID,CAAK,CACzD,CAAS,EACD,SAASF,GAAY,CACnB,OAAOuhB,EAAW,MAAM,KAAM,SAAS,CACxC,CACD,OAAOvhB,CACf,EAAS,CACT,CAAK,CACF,EAAE,CAACG,EAAIsd,EAAYrK,CAAU,CAAC,EAC/B,OAAOhe,CACT,CClDO,SAASqsB,GAAWlrB,EAAO,CAChC2nB,GAA6B3nB,CAAK,EAClC,IAAI4J,EAAKge,KACL/oB,EAAUisB,KACVlsB,EAAiBwG,EAAAA,QAAQ,IAAM,CAACwE,EAAG,aAAa,MAAOA,EAAG,aAAa,UAAWA,EAAG,aAAa,iBAAiB,EAAG,CAACA,CAAE,CAAC,EAC9H,OAAArL,GAAkB,CAChB,eAAgByB,EAChB,cAAe2Y,GAAc,UAC7B,UAAWA,GACX,eAAA/Z,EACA,QAAAC,CACJ,CAAG,EACM,IACT,CChBA,IAAIssB,GAAmB,CACrB,KAAM,aACN,KAAMnD,GAAW,iBACjB,UAAWkD,EACb,EACA,MAAAE,GAAeD,GCPf,SAAS/jB,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,EAAK,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUpH,EAAK,CAAEF,GAAgBoH,EAAQlH,EAAKoH,EAAOpH,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBkH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUpH,EAAK,CAAE,OAAO,eAAekH,EAAQlH,EAAK,OAAO,yBAAyBoH,EAAQpH,CAAG,CAAC,CAAE,CAAE,EAAK,OAAOkH,CAAS,CAC1f,SAASpH,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAMlX,SAASuqB,GAAoBnjB,EAAO,CACzC,IAAIojB,EAAIpjB,EACR,OAAO,OAAOojB,EAAE,wBAA2B,UAC7C,CACO,SAASC,GAAgBrjB,EAAO,CACrC,IAAIojB,EAAIpjB,EACR,OAAOmjB,GAAoBnjB,CAAK,GAAK,OAAOojB,EAAE,cAAiB,YAAc,OAAOA,EAAE,kBAAqB,UAC7G,CACO,SAASE,GAAiBtlB,EAAQ,CACvC,IAAIulB,EAEJ,OAAOvlB,EAAO,cAAgB,QAAa,GAAGulB,EAAsBvlB,EAAO,eAAiB,MAAQulB,IAAwB,QAAUA,EAAoB,WAAW,mBAAmB,EAC1L,CACA,IAAI3jB,GAAMC,EAAI,OAAO,aAAa,EAKlC,MAAM2jB,EAAY,CAQhB,OAAO,YAAY5S,EAAO6S,EAAKle,EAAuB,CACpD,IAAIme,EAIJ,GAAmD9S,GAAM,SAAY,MAAmD6S,GAAI,SAAY,MAAQ7S,EAAM,UAAY6S,EAAI,SAAWle,GAAyB,MAAQA,IAA0BqL,EAAM,SAAWrL,IAA0Bke,EAAI,QACzR7jB,OAAAA,GAAI,OAAO,yBAA0BgR,EAAO6S,EAAKle,CAAqB,EAC/D,UAET,GAAIqL,EAAM,gBAAkB,MAAQ6S,EAAI,gBAAkB,KACxD7jB,OAAAA,GAAI,MAAM,oCAAqCgR,EAAO6S,CAAG,EAClD,UAET,IAAIE,GAAyBD,EAAwBF,GAAY,cAAc,IAAI5S,EAAM,cAAc,KAAO,MAAQ8S,IAA0B,OAAS,OAASA,EAAsB,SAASD,EAAI,cAAc,EACnN,GAAIE,IAA0B,QAAa,CAACA,EAC1C/jB,OAAAA,GAAI,OAAO,gCAAiCgR,EAAO6S,CAAG,EAC/C,UAIT,GAAI,CACF,WAAYG,CACb,EAAGhT,EACA,CACF,WAAYiT,CACb,EAAGJ,EAGAK,EAAmBD,IAAkB,MAAQzd,EAAW,iBAAiBwd,EAAiBC,CAAa,EAC3G,GAAI,CAACC,EACHlkB,OAAAA,GAAI,OAAO,oBAAqBgkB,EAAiBC,CAAa,EACvD,UAIT,OAAQJ,EAAI,eAAc,CACxB,KAAKxrB,EAAY,iBAAiBiI,EAAU,EAC1C,MAAO,YACT,KAAKjI,EAAY,iBAAiBwY,EAAa,EAC7C,MAAO,YACT,KAAKxY,EAAY,iBAAiB+Q,EAAmB,EACnD,MAAO,cAEV,CACDpJ,OAAAA,GAAI,OAAO,sCAAuC6jB,EAAI,cAAc,EAC7D,SACR,CAUD,OAAO,WAAW/lB,EAASpH,EAAM,CAC/B,GAAI,CACF,WAAA+G,EACA,WAAAiG,CACD,EAAGhN,EACJ,OAAOoH,EAAQ,KAAKxG,GAAS,CAC3B,GAAI,CACF,KAAAS,EACA,KAAAD,CACD,EAAGR,EACJ,OAAOS,IAAS0F,GAAc3F,IAAS4L,CAC7C,CAAK,CACF,CASD,OAAO,mBAAmB5C,EAAOpJ,EAASysB,EAAS,CACjD,IAAIC,EAAc,CAAA,EAClB,OAAAtjB,EAAM,QAAQC,GAAQ,CACpB,IAAIwI,EACAxI,EAAK,MAAM,UAAYrJ,GAAWqJ,EAAK,OAAS,eAClDqjB,EAAY,KAAKxkB,GAAcA,GAAc,CAAA,EAAImB,CAAI,EAAG,GAAI,CAC1D,GAAIpJ,GAAQ,SAAU,EACtB,MAAOiI,GAAcA,GAAc,CAAA,EAAImB,EAAK,KAAK,EAAG,GAAI,CACtD,QAASojB,CACrB,CAAW,CACF,CAAA,CAAC,IACS5a,EAAYxI,EAAK,OAAS,MAAQwI,IAAc,OAAS,OAASA,EAAU,WAAa7R,GACpG0sB,EAAY,KAAKxkB,GAAcA,GAAc,CAAA,EAAImB,CAAI,EAAG,GAAI,CAC1D,GAAIpJ,GAAQ,SAAU,EACtB,IAAKiI,GAAcA,GAAc,CAAA,EAAImB,EAAK,GAAG,EAAG,GAAI,CAClD,QAASojB,CACrB,CAAW,CACF,CAAA,CAAC,CAEV,CAAK,EACMC,CACR,CACH,CACA3rB,GAAgBmrB,GAAa,gBAAiB,IAAI,IAAI,CAAC,CAACvrB,EAAY,iBAAiBwY,EAAa,EAAG,CAACxY,EAAY,iBAAiBwY,EAAa,EAAGxY,EAAY,iBAAiBiI,EAAU,EAAGjI,EAAY,iBAAiB+Q,EAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,EAClP,MAAAib,GAAeT,GCzIf,SAASnrB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAczX,IAAIgH,GAAMC,EAAI,OAAO,YAAY,EAG7BqkB,GAAQ,KACRC,GAAiB,IACjBC,GAAkB,GAClBC,GAAgB,GAChBC,GAAe,EACfC,GAAsB,KAAK,MAAMF,GAAgB,KAAQ,EAAID,IAAmB,CAAC,EACjFI,GAAiB,KAAK,KAAKH,GAAgB,GAAMD,EAAe,EAChEK,GAAc,GACdC,GAAU,KAAK,GAAK,GACjB,MAAMC,WAAmBxkB,EAAAA,SAAU,CAQxC,OAAO,eAAe4C,EAAGC,EAAG4hB,EAAG,CAC7B,MAAO,KAAK,OAAO7hB,EAAG,GAAG,EAAE,OAAOC,EAAG,MAAM,EAAE,OAAO4hB,EAAG,OAAO,EAAE,OAAOA,EAAG,GAAG,EAAE,OAAOA,EAAG,SAAS,EAAE,OAAOA,EAAI,EAAG,OAAO,EAAE,OAAOA,EAAG,GAAG,EAAE,OAAOA,EAAG,UAAU,EAAE,OAAOA,EAAI,EAAG,MAAM,CACrL,CACD,OAAO,sBAAsBthB,EAAYuhB,EAAY,CACnD,GAAI,CACF,GAAIze,EAAW,aAAa9C,CAAU,GAAK8C,EAAW,WAAW9C,CAAU,EACzE,OAAOwhB,GAAwBD,CAAU,EAE3C,GAAIze,EAAW,WAAW9C,CAAU,EAClC,OAAOyhB,GAAsBF,CAAU,EAEzC,GAAIze,EAAW,WAAW9C,CAAU,EAClC,OAAO0hB,GAAsBH,CAAU,EAEzC,GAAIze,EAAW,cAAc9C,CAAU,EAAG,CACxC,GAAIuhB,IAAeI,GAAW,GAC5B,MAAO,cAET,GAAIJ,IAAeI,GAAW,MAC5B,MAAO,kBAGX,MAAM,IAAI,MAAM,6BAA6B,OAAO3hB,CAAU,CAAC,CAChE,OAAQ4hB,EAAP,CACAtlB,OAAAA,GAAI,KAAKslB,CAAC,EACH,EACR,CACF,CACD,YAAYptB,EAAO,CACjB,MAAMA,CAAK,EACXO,GAAgB,KAAM,eAAgBgC,EAAQ,CAAC8qB,EAAQ7hB,IAAe,CACpE,GAAI,CACF,kBAAA8hB,CACR,EAAU,KAAK,MACLC,EAAcjf,EAAW,eAAe9C,CAAU,EACtD,OAAI8C,EAAW,cAAc9C,CAAU,IACrC+hB,EAAc,CAACJ,GAAW,GAAIA,GAAW,KAAK,GAEzCI,EAAY,QAAQ,CAAC3tB,EAAM+O,IAAU,CAE1C,GAAI/O,IAAS,gBAAkBA,IAAS,kBACtC,MAAO,GAET,IAAI4tB,EAAS,GACb,OAAI5tB,IAAS,aACX4tB,EAAS,KACA5tB,IAAS,WAClB4tB,EAAS,KAETA,EAASlf,EAAW,wBAAwB1O,CAAI,EAE3C,CAAC,CACN,MAAOitB,GAAW,sBAAsBrhB,EAAY5L,CAAI,EACxD,KAAmBoC,EAAI,IAAC,IAAK,CAC3B,SAAUwrB,CACtB,CAAW,EACD,OAAQ,IAAMF,EAAkBD,EAAQztB,CAAI,EAC5C,MAAO+O,CACjB,CAAS,CACT,CAAO,CACF,CAAA,CAAC,EACF,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,MAAQ,CACX,WAAY,MAClB,CACG,CACD,YAAY7I,EAAO,CACjBA,EAAM,gBAAe,EACrBA,EAAM,eAAc,EACpB,GAAI,CACF,GAAA/G,EACA,QAAA0uB,EACA,SAAArM,CACN,EAAQ,KAAK,MACLtb,EAAM,OACRsb,EAASriB,CAAE,EAEX0uB,EAAQ1uB,CAAE,CAEb,CACD,kBAAmB,CACjB,KAAK,SAAS,CACZ,WAAY,EAClB,CAAK,CACF,CACD,kBAAmB,CACjB,KAAK,SAAS,CACZ,WAAY,EAClB,CAAK,CACF,CACD,cAAe,CACb,GAAI,CACF,GAAAA,EACA,SAAAqiB,CACN,EAAQ,KAAK,MACTA,EAASriB,CAAE,CACZ,CACD,oBAAqB,CACnB,GAAI,CACF,GAAAA,EACA,gBAAA+sB,CACN,EAAQ,KAAK,MACT,OAAIA,GAAmB,KACd,KAAK,aAAa/sB,EAAI+sB,CAAe,EAEvC,EACR,CACD,QAAS,CACP,GAAI,CACF,UAAA5oB,EACA,SAAAwqB,EACA,WAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAhvB,EACA,gBAAA+sB,EACA,KAAAlsB,CACN,EAAQ,KAAK,MACL,CACF,WAAAouB,CACN,EAAQ,KAAK,MAGLC,EAAM,KAAK,MAAML,EAAKE,IAAO,GAAKD,EAAKE,IAAO,CAAC,EAC/CG,EAAQ,KAAK,MAAMH,EAAKF,EAAIC,EAAKF,CAAE,EACnCO,EAAQ,KAAK,IAAID,CAAK,EACtBE,EAAQ,KAAK,IAAIF,CAAK,EAAI,EAC1BG,EAAO,OAAO,WACdC,EAAO,OAAO,YACdC,EAAO,EACPC,EAAO,EACPC,EAAK,KAAK,IAAIF,EAAM,KAAK,IAAIX,GAAME,EAAKF,GAAM,EAAIO,GAASF,EAAM7B,KAAUC,GAAgBgC,CAAI,CAAC,EAChGK,EAAK,KAAK,IAAIF,EAAM,KAAK,IAAIX,GAAME,EAAKF,GAAM,EAAIO,GAASH,EAAM7B,KAAUC,GAAgBiC,CAAI,CAAC,EAChGhJ,EAAO,KAAK,OAAOsI,EAAI,GAAG,EAAE,OAAOC,EAAI,KAAK,EAAE,OAAOY,EAAI,GAAG,EAAE,OAAOC,EAAI,GAAG,EAAE,OAAOZ,EAAI,GAAG,EAAE,OAAOC,CAAE,EAGvGY,EAAiB,KAAK,OAAOJ,EAAM,GAAG,EAAE,OAAOC,EAAM,KAAK,EAAE,OAAOD,EAAM,GAAG,EAAE,OAAOD,EAAM,KAAK,EAAE,OAAOD,EAAM,GAAG,EAAE,OAAOC,EAAM,KAAK,EAAE,OAAOD,EAAM,GAAG,EAAE,OAAOG,EAAM;AAAA,KAAU,EAAE,OAAO3B,GAAW,eAAee,EAAIC,EAAIlB,EAAW,EAAG;AAAA,KAAQ,EAAE,OAAOE,GAAW,eAAeiB,EAAIC,EAAIpB,EAAW,CAAC,EACzSiC,EAAa,oBAAoB,OAAO7vB,CAAE,EAI1C8vB,EAAW,KAAK,MAAMd,EAAKW,EAAIZ,EAAKW,CAAE,EACtCK,EAAUD,EAAWnC,GAAiB,KAAK,GAC3CqC,EAAUF,EAAWnC,GAAiB,KAAK,GAC3CsC,EAAMlB,EAAK,KAAK,IAAIe,CAAQ,EAAIrC,GAChCyC,EAAMlB,EAAK,KAAK,IAAIc,CAAQ,EAAIrC,GAChC0C,EAAMF,EAAM,KAAK,IAAIF,CAAO,EAAIrC,GAChC0C,EAAMF,EAAM,KAAK,IAAIH,CAAO,EAAIrC,GAChC2C,GAAMJ,EAAM,KAAK,IAAID,CAAO,EAAItC,GAChC4C,GAAMJ,EAAM,KAAK,IAAIF,CAAO,EAAItC,GAChC6C,GAAS,GAAG,OAAON,EAAK,GAAG,EAAE,OAAOC,EAAK,GAAG,EAAE,OAAOC,EAAK,GAAG,EAAE,OAAOC,EAAK,GAAG,EAAE,OAAOC,GAAK,GAAG,EAAE,OAAOC,EAAG,EAG3GE,GAAO,IAAO3B,EAAK,GAAMa,EAAK,IAAOX,EACrC0B,GAAO,IAAO3B,EAAK,GAAMa,EAAK,IAAOX,EACrC0B,GAAQhB,EAAKb,GAAME,EAAKW,GACxBiB,GAAQhB,EAAKb,GAAME,EAAKW,GACxBiB,EAAaD,GAAQD,GACrBG,GAAoB,GACpBC,GAAaD,GAAoB,KAAK,KAAK,EAAID,GAAc,CAAC,EAC9DG,GAAaD,GAAaF,EAC1BI,GAAgBF,GAAa,GAC7BG,GAAgBF,GAAa,GAC5B,OAAO,SAASH,CAAU,EAKpBA,EAAa,GACtBE,IAAc,GACdC,IAAc,GACdC,IAAiB,GACjBC,IAAiB,GACjBD,IAAiB,GAAK,IAAM,KAAK,IAAI7B,CAAK,EAAItB,IAC9CoD,IAAiB,IAAM,KAAK,IAAI9B,CAAK,EAAItB,IACzCiD,IAAc,GAAK,IAAM,KAAK,IAAI3B,CAAK,EAAItB,IAC3CkD,IAAc,IAAM,KAAK,IAAI5B,CAAK,EAAItB,KAC7B+C,EAAa,GACtBI,IAAiB,IAAM,KAAK,IAAI7B,CAAK,EAAItB,IACzCoD,IAAiB,IAAM,KAAK,IAAI9B,CAAK,EAAItB,IACzCiD,IAAc,IAAM,KAAK,IAAI3B,CAAK,EAAItB,IACtCkD,IAAc,IAAM,KAAK,IAAI5B,CAAK,EAAItB,MAEtCmD,GAAgB,GAChBC,GAAgB,GAChBH,GAAa,IACbC,GAAa,KAtBbC,GAAgB,GAChBC,GAAgB,EAChBH,GAAa,GACbC,GAAa,KAqBf,IAAItC,GAAS,GACTE,IAAa,SACXA,IAAa,aACfF,GAAS,KACAE,IAAa,WACtBF,GAAS,KAETA,GAASlf,EAAW,wBAAwBof,CAAQ,GAGxD,IAAIuC,GAAerwB,IAAS,aAAeA,IAAS,eACpD,OAAoBmC,EAAAA,KAAMG,EAAAA,SAAW,CACnC,SAAU,CAAcH,EAAK,KAAC,MAAO,CACnC,UAAW0C,GAAWvB,EAAW,CAC/B,SAAU8qB,CACpB,CAAS,EACD,SAAU,CAAchsB,EAAI,IAAC,WAAY,CACvC,GAAI4sB,EACJ,SAAuB5sB,EAAI,IAAC,OAAQ,CAClC,EAAG2sB,EACH,SAAU,SACtB,CAAW,CACX,CAAS,EAAgB3sB,EAAI,IAAC,OAAQ,CAC5B,UAAW,cACX,EAAGsjB,EACH,QAAS,KAAK,YACd,aAAc,KAAK,iBACnB,aAAc,KAAK,iBACnB,SAAU,QAAQ,OAAOsJ,EAAY,GAAG,EACxC,cAAe,aACzB,CAAS,EAAgB5sB,EAAI,IAAC,OAAQ,CAC5B,UAAW,kBACX,EAAGsjB,CACb,CAAS,EAAgBtjB,EAAI,IAAC,OAAQ,CAC5B,UAAW,kBACX,EAAGsjB,CACb,CAAS,EAAgBtjB,EAAI,IAAC,SAAU,CAC9B,UAAW,WACX,GAAI4rB,EACJ,GAAIC,EACJ,EAAG,GACb,CAAS,EAAgB7rB,EAAI,IAAC,UAAW,CAC/B,UAAW,gBACX,OAAQstB,EAClB,CAAS,CAAC,CACH,CAAA,EAAGxD,GAAmB,MAAQ6B,GAA2B5rB,EAAAA,KAAMG,EAAAA,SAAW,CACzE,SAAU,CAAC+tB,IAA6BjuB,EAAI,IAAC0O,EAAQ,CACnD,KAAM,UACN,UAAW,uBACX,MAAO,CACL,IAAK8e,IAAQG,GAAc,EAAIG,GAAaE,IAC5C,KAAMT,IAAQI,GAAc,EAAIE,GAAaE,GAC9C,EACD,QAAS,IAAM,CAEd,EACD,KAAmBhuB,EAAK,KAAC,MAAO,CAC9B,UAAW,kBACX,SAAU,CAAcC,EAAI,IAAC,IAAK,CAChC,SAAUwrB,EACxB,CAAa,EAAgBxrB,EAAI,IAACuE,GAAiB,CACrC,KAAM2pB,GACN,UAAW,yBACzB,CAAa,CAAC,CACd,CAAW,EACD,QAAS,6BACT,SAAuBluB,EAAI,IAACmuB,GAAc,CACxC,QAAS,KAAK,mBACd,cAAe,CACb,UAAW,cACZ,CACb,CAAW,CACX,CAAS,EAAgBnuB,EAAI,IAAC0O,EAAQ,CAC5B,KAAM,UACN,UAAW,qBACX,MAAO,CACL,IAAK8e,IAAQG,EAAa,EAAIG,GAAaE,IAC3C,KAAMT,IAAQI,EAAa,EAAIE,GAAaE,GAC7C,EACD,QAAS,KAAK,aACd,KAAM3Y,GACN,QAAS,QACnB,CAAS,CAAC,CACV,CAAO,CAAC,CACR,CAAK,CACF,CACH,CACA7W,GAAgBssB,GAAY,eAAgB,CAC1C,UAAW,GACX,WAAY,GACZ,SAAU,CAET,EACD,UAAW,CAEV,CACH,CAAC,EACD,MAAAuD,GAAevD,GCvUf,SAASzlB,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,EAAK,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUpH,EAAK,CAAEF,GAAgBoH,EAAQlH,EAAKoH,EAAOpH,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBkH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUpH,EAAK,CAAE,OAAO,eAAekH,EAAQlH,EAAK,OAAO,yBAAyBoH,EAAQpH,CAAG,CAAC,CAAE,CAAE,EAAK,OAAOkH,CAAS,CAC1f,SAASpH,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAazX,IAAIgH,GAAMC,EAAI,OAAO,sBAAsB,EACpC,MAAMsoB,WAA6BhoB,EAAAA,SAAU,CAClD,YAAYrI,EAAO,CACjB,MAAMA,CAAK,EACXO,GAAgB,KAAM,YAAa,MAAM,EACzC,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,UAAyB0I,EAAM,YACpC,KAAK,MAAQ,CACX,MAAO,OACP,OAAQ,OACR,OAAQ,CACN,EAAG,EACH,EAAG,CACJ,EACD,WAAY,GACZ,KAAM,QACZ,CACG,CACD,mBAAoB,CAClB,OAAO,iBAAiB,OAAQ,KAAK,WAAY,EAAI,EACrD,OAAO,iBAAiB,YAAa,KAAK,gBAAiB,EAAI,EAC/D,OAAO,iBAAiB,UAAW,KAAK,cAAe,EAAI,EAC3D,OAAO,iBAAiB,UAAW,KAAK,cAAe,EAAI,EAC3D,OAAO,iBAAiB,QAAS,KAAK,YAAa,EAAI,EACvD,OAAO,iBAAiB,SAAU,KAAK,aAAc,EAAI,CAC1D,CAGD,kBAAkBmB,EAAOya,EAAM,CAC7B/c,GAAI,MAAM,oBAAqBsC,EAAOya,CAAI,CAC3C,CACD,sBAAuB,CACrB,OAAO,oBAAoB,OAAQ,KAAK,WAAY,EAAI,EACxD,OAAO,oBAAoB,YAAa,KAAK,gBAAiB,EAAI,EAClE,OAAO,oBAAoB,UAAW,KAAK,cAAe,EAAI,EAC9D,OAAO,oBAAoB,UAAW,KAAK,cAAe,EAAI,EAC9D,OAAO,oBAAoB,QAAS,KAAK,YAAa,EAAI,EAC1D,OAAO,oBAAoB,SAAU,KAAK,aAAc,EAAI,CAC7D,CAED,sBAAsByL,EAAW,CAC/B,GAAI,CACF,aAAAC,CACN,EAAQ,KAAK,MACL,CACF,QAAA/wB,EACA,WAAA+F,CACD,EAAG+qB,EACApoB,EAAQqoB,EAAa,mBAAmB/wB,CAAO,EACnD,GAAI0I,GAAS,KAAM,CACjB,GAAI,CAACmjB,GAAoBnjB,CAAK,EAC5B,MAAM,IAAI,MAAM,sDAAsD,OAAO1I,CAAO,CAAC,EAEvF,GAAI,CAIF,IAAIgxB,EAAatoB,EAAM,uBAAuB3C,CAAU,EACxD,GAAIirB,GAAc,KAChB,OAAOA,CAEV,MAAC,CACA1oB,GAAI,MAAM,sCAAuCvC,EAAY2C,CAAK,CACnE,EAIH,IAAIvG,EAAc4uB,EAAa,sBAAsB/wB,CAAO,EAC5D,GAAImC,GAAe,KACjB,MAAM,IAAI,MAAM,0CAA0C,OAAOnC,CAAO,CAAC,EAE3E,OAAOW,EAAY,YAAYwB,CAAW,CAC3C,CACD,sBAAsB0rB,EAAQztB,EAAM,CAClC,GAAI,CACF,MAAAgJ,EACA,eAAA6nB,CACN,EAAQ,KAAK,MACLC,EAAW9nB,EAAM,IAAIC,GAAQA,EAAK,KAAOwkB,EAAS3lB,GAAcA,GAAc,CAAE,EAAEmB,CAAI,EAAG,CAAA,EAAI,CAC/F,SAAUjJ,CAChB,CAAK,EAAIiJ,CAAI,EACT4nB,EAAeC,CAAQ,CACxB,CACD,YAAa,CACX,KAAK,SAAS,CACZ,KAAM,QACZ,CAAK,CACF,CACD,cAAe,CACb,GAAI,CACF,OAAAC,CACN,EAAQ,KAAK,MACT,GAAIA,GAAU,KAAK,UAAU,QAAS,CACpC,IAAI3lB,EAAO,KAAK,UAAU,QAAQ,sBAAqB,EACnD4lB,EAAUC,GAAMF,EAAO,EAAG,EAAG,OAAO,WAAa3lB,EAAK,KAAK,EAC3D8lB,EAAUD,GAAMF,EAAO,EAAG,EAAG,OAAO,YAAc3lB,EAAK,MAAM,EACjE,KAAK,SAAS,CACZ,OAAQ,CACN,EAAG4lB,EACH,EAAGE,CACJ,CACT,CAAO,EAEJ,CACD,gBAAgBhrB,EAAO,CACrB,GAAI,CACF,OAAAirB,EACA,WAAAC,CACN,EAAQ,KAAK,MAOT,GANA,KAAK,SAAS,CACZ,MAAO,CACL,EAAGlrB,EAAM,QACT,EAAGA,EAAM,OACV,CACP,CAAK,EACGkrB,GAAc,KAAK,UAAU,QAAS,CACxC,IAAIhmB,EAAO,KAAK,UAAU,QAAQ,sBAAqB,EACnD4lB,EAAUC,GAAM,OAAO,YAAc/qB,EAAM,QAAUkF,EAAK,MAAQ+lB,EAAO,GAAI,EAAG,OAAO,WAAa/lB,EAAK,KAAK,EAC9G8lB,EAAUD,GAAM,OAAO,aAAe/qB,EAAM,QAAUkF,EAAK,OAAS+lB,EAAO,GAAI,EAAG,OAAO,YAAc/lB,EAAK,MAAM,EACtH,KAAK,SAAS,CACZ,OAAQ,CACN,EAAG4lB,EACH,EAAGE,CACJ,CACT,CAAO,EAEJ,CACD,gBAAgBhrB,EAAO,CACrB,IAAIirB,EAAS,CACX,EAAG,EACH,EAAG,CACT,EACI,GAAI,KAAK,UAAU,QAAS,CAC1B,IAAI/lB,EAAO,KAAK,UAAU,QAAQ,sBAAqB,EACvD+lB,EAAO,EAAI/lB,EAAK,OAASA,EAAK,MAAQlF,EAAM,SAC5CirB,EAAO,EAAI/lB,EAAK,QAAUA,EAAK,OAASlF,EAAM,SAEhD,KAAK,SAAS,CACZ,WAAY,GACZ,OAAAirB,CACN,CAAK,CACF,CACD,eAAgB,CACd,KAAK,SAAS,CACZ,WAAY,EAClB,CAAK,CACF,CACD,cAAcjrB,EAAO,CACnB,GAAIA,EAAM,MAAQ,MAChBA,EAAM,eAAc,EACpB,KAAK,SAAS,CACZ,KAAM,QACd,CAAO,UACQA,EAAM,MAAQ,UAAYA,EAAM,MAAQ,YAAa,CAC9D,GAAI,CACF,YAAAmrB,EACA,cAAAC,CACR,EAAU,KAAK,MACTprB,EAAM,eAAc,EACpBmrB,EAAY,QAAQlyB,GAAMmyB,EAAcnyB,CAAE,CAAC,EAE9C,CACD,YAAY+G,EAAO,CACbA,EAAM,MAAQ,QAChBA,EAAM,eAAc,EACpB,KAAK,SAAS,CACZ,KAAM,QACd,CAAO,EAEJ,CACD,qBAAsB,CACpB,GAAI,CACF,SAAAqrB,CACN,EAAQ,KAAK,MACTA,GACD,CACD,QAAS,CACP,GAAI,CACF,SAAAC,EACA,MAAAxoB,EACA,YAAAqoB,EACA,YAAAI,EACA,eAAAC,EACA,cAAAJ,EACA,kBAAAK,EACA,OAAAC,CACN,EAAQ,KAAK,MACL,CACF,MAAAC,EACA,OAAAd,EACA,WAAAK,EACA,KAAAU,CACN,EAAQ,KAAK,MACLC,EAAe/oB,EAAM,IAAIC,GAAQ,CACnC,GAAI,CACF,IAAI+oB,EAAUC,EACV,CACF,GAAA9yB,EACA,KAAAa,EACA,WAAAkmB,EACA,MAAAhN,EACA,IAAA6S,EACA,SAAA+B,CACD,EAAG7kB,EACAijB,EAAkBhT,EAAM,WACxB,CAAC8U,EAAIC,CAAE,EAAI,KAAK,sBAAsB/U,CAAK,EAC3CgV,GAAM8D,EAAyDH,GAAM,KAAO,MAAQG,IAAa,OAASA,EAAWhE,EACrHG,GAAM8D,EAAyDJ,GAAM,KAAO,MAAQI,IAAa,OAASA,EAAWhE,EAIzH,GAHIlC,GAAO,OACT,CAACmC,EAAIC,CAAE,EAAI,KAAK,sBAAsBpC,CAAG,GAEvC7F,GAAc,MAAQA,EAAY,CACpC,GAAI,CAACgM,EAAMC,CAAI,EAAI,CAACnE,EAAIC,CAAE,EAC1B,CAACD,EAAIC,CAAE,EAAI,CAACC,EAAIC,CAAE,EAClB,CAACD,EAAIC,CAAE,EAAI,CAAC+D,EAAMC,CAAI,EAExB,IAAI7uB,EAAYuB,GAAW,cAAe,CACxC,SAAA2sB,CACV,EAAW,CACD,qBAAsBxxB,IAAS,cACzC,EAAW,CACD,eAAgBA,IAAS,SACnC,EAAW,CACD,YAAaiJ,EAAK,KAAO,IACnC,EAAW,CACD,mBAAoBooB,EAAY,IAAIlyB,CAAE,CAChD,EAAW,CACD,gBAAiB2yB,IAAS,QACpC,CAAS,EACD,MAAO,CACL,GAAA9D,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAhvB,EACA,UAAAmE,EACA,SAAAwqB,EACA,gBAAA5B,EACA,KAAAlsB,CACV,CACO,OAAQwK,EAAP,CACAtC,OAAAA,GAAI,KAAK,+BAAgCe,EAAMuB,CAAK,EAC7C,IACR,CACF,CAAA,EAAE,OAAOzE,GAAQA,GAAQ,IAAI,EAC9B,OAAoB5D,EAAAA,KAAM,MAAO,CAC/B,UAAW0C,GAAW,iBAAkB,CACtC,gBAAiBitB,IAAS,QAClC,CAAO,EACD,SAAU,CAACC,EAAa,IAAInzB,GAAQ,CAClC,GAAI,CACF,GAAAovB,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAhvB,EACA,UAAAmE,EACA,SAAAwqB,EACA,gBAAA5B,EACA,KAAAlsB,CACD,EAAGpB,EACJ,OAAoBwD,EAAAA,IAAK6qB,GAAY,CACnC,UAAW3pB,EACX,GAAInE,EACJ,GAAI6uB,EACJ,GAAIC,EACJ,GAAIC,EACJ,GAAIC,EACJ,QAASuD,EACT,SAAUJ,EACV,WAAYD,EAAY,IAAIlyB,CAAE,EAC9B,SAAU2uB,EACV,gBAAiB5B,EACjB,KAAMlsB,EACN,kBAAmB,KAAK,qBACzB,EAAEb,CAAE,CACb,CAAO,EAAgBgD,EAAK,KAAC,MAAO,CAC5B,UAAW0C,GAAW,sBAAuB,CAC3C,SAAUusB,CACpB,CAAS,EACD,IAAK,KAAK,UACV,MAAO,CACL,OAAwDL,GAAO,EAC/D,MAAuDA,GAAO,CAC/D,EACD,cAAe,sBACf,SAAU,CAAc3uB,EAAI,IAAC0O,EAAQ,CACnC,UAAW,GACX,KAAM,SACN,UAAW,kBACX,KAAMshB,GACN,QAAS,IAAM,CAEd,EACD,YAAa,KAAK,gBAClB,SAAU,CAAChB,GAA2BhvB,EAAI,IAACiwB,GAAS,CAClD,SAAU,oBACtB,CAAW,CACX,CAAS,EAAgBjwB,EAAI,IAAC,MAAO,CAC3B,UAAW,aACX,SAAUqvB,CACpB,CAAS,EAAgBtvB,EAAK,KAAC,MAAO,CAC5B,UAAW,eACX,SAAU,CAAcC,EAAI,IAAC0O,EAAQ,CACnC,KAAM,YACN,QAAS6gB,EACT,SAAU,WACtB,CAAW,EAAgBvvB,EAAI,IAAC0O,EAAQ,CAC5B,KAAM,UACN,QAAS8gB,EACT,SAAU,MACtB,CAAW,CAAC,CACZ,CAAS,CAAC,CACV,CAAO,EAAgBxvB,EAAI,IAACuC,GAAgB,CACpC,QAAS,CAAC,CACR,OAAQ,KAAK,oBACb,SAAU2tB,GAAiB,aAC3B,SAAU,EACpB,CAAS,CACT,CAAO,CAAC,CACR,CAAK,CACF,CACH,CACA3xB,GAAgB8vB,GAAsB,eAAgB,CACpD,SAAU,OACZ,CAAC,EACD,MAAA8B,GAAe9B,GC/Vf,SAASjpB,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,EAAK,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUpH,EAAK,CAAEF,GAAgBoH,EAAQlH,EAAKoH,EAAOpH,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBkH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUpH,EAAK,CAAE,OAAO,eAAekH,EAAQlH,EAAK,OAAO,yBAAyBoH,EAAQpH,CAAG,CAAC,CAAE,CAAE,EAAK,OAAOkH,CAAS,CAC1f,SAASpH,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAkBzX,IAAIgH,EAAMC,EAAI,OAAO,QAAQ,EACzBqqB,GAAW,CAAChnB,EAAO6B,KAAc,CACnC,WAAYO,GAAcpC,CAAK,EAC/B,GAAI4F,GAAO5F,CAAK,EAChB,sBAAuBsC,GAAqCtC,EAAO6B,EAAS,gBAAgB,EAC5F,MAAOY,GAAqBzC,EAAO6B,EAAS,gBAAgB,EAC5D,SAAUua,GAAYpc,CAAK,CAC7B,GACI6F,GAAYjD,GAAQokB,GAAU,CAChC,cAAenkB,GACf,kBAAmBokB,GACnB,kBAAmBC,GACnB,qBAAsBC,GACtB,kCAAmCrkB,GACnC,qCAAsCskB,EACxC,CAAC,EACM,MAAMC,WAAepqB,EAAAA,SAAU,CACpC,YAAYrI,EAAO,CACjB,MAAMA,CAAK,EACXO,GAAgB,KAAM,iBAAkBgC,EAAQ,CAACqG,EAAO8pB,EAAgBC,IAAsB,CAC5F,IAAIC,EAAgB,CAAC,GAAGhqB,CAAK,EAI7B,OAHI8pB,GAAkB,MAAQA,EAAe,OAAS,MACpDE,EAAc,KAAKF,CAAc,EAE/BC,IAAsB,OACjBC,EAAc,OAAO/pB,GAAQ,CAClC,IAAIgqB,EAAaxhB,EACjB,OAAQxI,GAAS,OAAoCgqB,EAAchqB,EAAK,SAAW,MAAQgqB,IAAgB,OAAhE,OAAkFA,EAAY,WAAaF,IAAsB9pB,GAAS,OAAoCwI,EAAYxI,EAAK,OAAS,MAAQwI,IAAc,OAA1D,OAA4EA,EAAU,WAAashB,GAAkE9pB,GAAK,KAAQ,IAC3Y,CAAS,EAGI+pB,CACR,CAAA,CAAC,EACF,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,yBAA2B,KAAK,yBAAyB,KAAK,IAAI,EACvE,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,yBAA2B,KAAK,yBAAyB,KAAK,IAAI,EACvE,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,wBAA0B,KAAK,wBAAwB,KAAK,IAAI,EACrE,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,MAAQ,CACX,eAAgB,OAChB,YAAa,IAAI,IACjB,gBAAiB,EACvB,CACG,CACD,mBAAoB,CAClB,GAAI,CACF,OAAA5zB,CACN,EAAQ,KAAK,MACT,KAAK,eAAeA,CAAM,EAC1B,KAAK,0BAAyB,CAC/B,CACD,mBAAmBoK,EAAW,CAC5B,GAAI,CACF,WAAAmE,EACA,OAAAvO,CACN,EAAQ,KAAK,MACLA,IAAWoK,EAAU,SACvB,KAAK,cAAcA,EAAU,MAAM,EACnC,KAAK,eAAepK,CAAM,GAExBuO,IAAenE,EAAU,aAC3B,KAAK,0BAAyB,EAC1BmE,IAAerD,GAAS,SAC1B,KAAK,MAAK,EAGf,CACD,kBAAkBE,EAAOya,EAAM,CAC7B/c,EAAI,MAAM,oBAAqBsC,EAAOya,CAAI,CAC3C,CACD,sBAAuB,CACrB,GAAI,CACF,OAAA7lB,CACN,EAAQ,KAAK,MACT,KAAK,cAAcA,CAAM,CAC1B,CACD,eAAeA,EAAQ,CACrBA,EAAO,GAAG,eAAgB,KAAK,wBAAwB,EACvD,GAAI,CACF,SAAA8zB,CACD,EAAG9zB,EACJ8zB,EAAS,GAAG1xB,GAAc,gBAAiB,KAAK,sBAAsB,EACtE0xB,EAAS,GAAG1xB,GAAc,cAAe,KAAK,kBAAkB,EAChE0xB,EAAS,GAAG1xB,GAAc,cAAe,KAAK,iBAAiB,EAC/D0xB,EAAS,GAAG5xB,GAAW,gBAAiB,KAAK,uBAAuB,EACpE4xB,EAAS,GAAGxyB,EAAW,OAAQ,KAAK,iBAAiB,EACrDwyB,EAAS,GAAGjoB,EAAiB,gBAAiB,KAAK,wBAAwB,EAC3EioB,EAAS,GAAGjoB,EAAiB,gBAAiB,KAAK,oBAAoB,EACvEioB,EAAS,GAAGxyB,EAAW,MAAO,KAAK,iBAAiB,EACpDwyB,EAAS,GAAGxyB,EAAW,OAAQ,KAAK,iBAAiB,EACrDwyB,EAAS,GAAGxyB,EAAW,SAAU,KAAK,mBAAmB,EACzDwyB,EAAS,GAAGxyB,EAAW,QAAS,KAAK,kBAAkB,CACxD,CACD,cAActB,EAAQ,CACpBA,EAAO,IAAI,eAAgB,KAAK,wBAAwB,EACxD,GAAI,CACF,SAAA8zB,CACD,EAAG9zB,EACJ8zB,EAAS,IAAI1xB,GAAc,gBAAiB,KAAK,sBAAsB,EACvE0xB,EAAS,IAAI1xB,GAAc,cAAe,KAAK,kBAAkB,EACjE0xB,EAAS,IAAI1xB,GAAc,cAAe,KAAK,iBAAiB,EAChE0xB,EAAS,IAAI5xB,GAAW,gBAAiB,KAAK,uBAAuB,EACrE4xB,EAAS,IAAIxyB,EAAW,OAAQ,KAAK,iBAAiB,EACtDwyB,EAAS,IAAIjoB,EAAiB,gBAAiB,KAAK,wBAAwB,EAC5EioB,EAAS,IAAIjoB,EAAiB,gBAAiB,KAAK,oBAAoB,EACxEioB,EAAS,IAAIxyB,EAAW,MAAO,KAAK,iBAAiB,EACrDwyB,EAAS,IAAIxyB,EAAW,OAAQ,KAAK,iBAAiB,EACtDwyB,EAAS,IAAIxyB,EAAW,SAAU,KAAK,mBAAmB,EAC1DwyB,EAAS,IAAIxyB,EAAW,QAAS,KAAK,kBAAkB,CACzD,CACD,OAAQ,CACN,KAAK,SAAS,CACZ,eAAgB,OAChB,YAAa,IAAI,GACvB,CAAK,CACF,CACD,cAAe,CACb,GAAI,CACF,eAAAoyB,CACN,EAAQ,KAAK,MACT,GAAIA,GAAkB,KAAM,CAC1B,GAAI,CACF,cAAA1oB,CACR,EAAU,KAAK,MACTA,EAAcE,GAAS,OAAO,EAEhC,KAAK,SAAS,CACZ,eAAgB,MACtB,CAAK,CACF,CACD,YAAa,CACX,GAAI,CACF,cAAAF,CACN,EAAQ,KAAK,MACTA,EAAcE,GAAS,OAAO,CAC/B,CACD,wBAAwBhC,EAAOhC,EAAQ,CACrC,KAAK,eAAegC,EAAOhC,EAAQ,EAAI,CACxC,CACD,yBAAyBgC,EAAOhC,EAAQ,CACtC4B,EAAI,MAAM,2BAA4B,KAAK,eAAgB,CAAA,EAC3D,GAAI,CACF,MAAAc,EACA,iBAAAmB,EACA,cAAAC,EACA,kCAAAC,CACN,EAAQ,KAAK,MACLzK,EAAUW,EAAY,eAAe+H,CAAK,EAC1CiK,EAAavJ,EAAM,OAAOC,GAAQ,CACpC,IAAIkqB,EAAcC,EAClB,QAASD,EAAelqB,EAAK,SAAW,MAAQkqB,IAAiB,OAAS,OAASA,EAAa,WAAavzB,KAAawzB,EAAanqB,EAAK,OAAS,MAAQmqB,IAAe,OAAS,OAASA,EAAW,WAAaxzB,CAC5N,CAAK,EACD,GAAI,CAAC,KAAK,kBAAoBA,GAAW,KAAM,CAG7CwK,EAAcE,GAAS,MAAM,EAC7BD,EAAkCF,EAAkBvK,CAAO,EACvD2S,EAAW,SAAW,GAIxB,KAAK,eAAejK,EAAOhC,EAAQ,GAAM1G,CAAO,EAElD,OAIF,KAAK,eAAe0I,EAAOhC,EAAQ,EAAI,CACxC,CACD,qBAAqBgC,EAAOtC,EAAS,CACnCkC,EAAI,MAAM,uBAAwBI,EAAOtC,CAAO,EAChD,GAAI,CACF,MAAAgD,CACN,EAAQ,KAAK,MACLpJ,EAAUW,EAAY,eAAe+H,CAAK,EAC9C,GAAI1I,GAAW,KAAM,CACnBsI,EAAI,MAAM,kBAAmBI,CAAK,EAClC,OAGF,IAAI+qB,EAAgBrqB,EAAM,OAAOpK,GAAQ,CACvC,GAAI,CACF,MAAAsa,EACA,IAAA6S,CACD,EAAGntB,EACJ,OAAOsa,EAAM,UAAYtZ,GAAWksB,GAAY,WAAW9lB,EAASkT,CAAK,GAAK,MAAQ6S,GAAO,MAAQA,EAAI,UAAYnsB,GAAWksB,GAAY,WAAW9lB,EAAS+lB,CAAG,GAAK,IAC9K,CAAK,EACD,KAAK,YAAYsH,CAAa,CAC/B,CACD,uBAAuB/qB,EAAOhC,EAAQ,CACpC,GAAI,CAACslB,GAAiBtlB,CAAM,EAAG,CAC7B4B,EAAI,OAAO,0BAA0B,EACrC,OAEF,KAAK,eAAeI,EAAOhC,CAAM,CAClC,CASD,eAAegC,EAAOhC,EAAQ,CAC5B,IAAIgtB,EAAmB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACvFC,EAAgC,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OAC1E,GAAI,EAAAA,IAAkC,QAAa,CAAC,KAAK,eAAc,GAGvE,IAAI,CACF,sBAAA1lB,CACN,EAAQ,KAAK,MACL,CACF,eAAAilB,CACN,EAAQ,KAAK,MACLlzB,EAAUW,EAAY,eAAe+H,CAAK,EAC9C,GAAI1I,GAAW,KAGf,KAAI4zB,EAAiBjzB,EAAY,0BAA0B+H,CAAK,EAC5D,CACF,KAAM3C,EACN,KAAMiG,CACP,EAAGtF,EACJ,GAAIwsB,GAAkB,MAAQA,EAAe,OAAS,KAAM,CAC1D,IAAIW,EAAU,CACZ,GAAI5zB,GAAQ,SAAU,EACtB,MAAO,CACL,QAAAD,EACA,eAAA4zB,EACA,WAAA7tB,EACA,WAAAiG,CACD,EAED,KAAM,UACN,WAAY0nB,CACpB,EACMprB,EAAI,MAAM,gBAAiBurB,CAAO,EAClC,KAAK,SAAS,CACZ,eAAgBA,CACxB,CAAO,MACI,CACL,GAAI,CACF,MAAAzqB,CACR,EAAU,KAAK,MACL,CACF,MAAAkQ,EACA,GAAA/Z,EACA,WAAA+mB,CACD,EAAG4M,EACA/G,EAAM,CACR,QAAAnsB,EACA,eAAA4zB,EACA,WAAA7tB,EACA,WAAAiG,CACR,EACU5L,EAAO8rB,GAAY,YAAY5F,IAAe,QAAaA,EAAa6F,EAAM7S,EAAOgN,IAAe,QAAaA,EAAahN,EAAQ6S,EAAKwH,GAAqH1lB,CAAqB,EACzR,OAAQ7N,EAAI,CACV,IAAK,UACHkI,EAAI,MAAM,iCAAkC4qB,EAAgB/G,CAAG,EAC/D,OACF,IAAK,eACH,CAGE,IAAI2H,EAAsBxN,IAAe,QAAaA,EAAahN,EAAM,QAAU6S,EAAI,QAGnFsH,EAAgBrqB,EAAM,OAAOxJ,GAAS,CACxC,GAAI,CACF,IAAKm0B,CACN,EAAGn0B,EACJ,OAAoEm0B,GAAa,UAAaD,CAC5G,CAAa,EACD,KAAK,YAAYL,CAAa,EAC9B,KACD,CACH,IAAK,YACH,CACE,IAAIO,EAAkB1N,IAAe,GAAOhN,EAAQ6S,EAChD8H,EAAoB3N,IAAe,GAAO6F,EAAM7S,EACpDhR,EAAI,MAAM,qBAAsB,CAC9B,gBAAA0rB,EACA,MAAA1a,EACA,IAAA6S,CACd,CAAa,EAED,IAAI+H,EAAiB9qB,EAAM,OAAO2C,GAAS,CACzC,GAAI,CACF,IAAKgoB,EACL,MAAOI,CACR,EAAGpoB,EACJ,OAAwEooB,GAAe,UAAaF,EAAkB,SAAwEF,GAAa,UAAaC,EAAgB,SAAwED,GAAa,aAAgBC,EAAgB,YAA2ED,GAAa,aAAgBC,EAAgB,UACne,CAAa,EACD,KAAK,YAAYE,CAAc,EAC/B,KACD,CAIJ,CAGD,IAAIE,EAAW,CACb,MAAO9N,IAAe,QAAaA,EAAa6F,EAAM7S,EACtD,IAAKgN,IAAe,QAAaA,EAAahN,EAAQ6S,EACtD,GAAA5sB,EACA,KAAAa,EACA,SAAUutB,GAAW,EAC7B,EACMrlB,EAAI,KAAK,gBAAiB8rB,CAAQ,EAClC,KAAK,SAAS,CACZ,eAAgB,OAChB,YAAa,IAAI,IAAI,CAAC70B,CAAE,CAAC,CACjC,EAAS,IAAM,CAIP,KAAK,SAAS,CAAC60B,CAAQ,CAAC,CAChC,CAAO,IAEJ,CACD,wBAAwB/qB,EAAM,CAC5B,GAAI,CACF,aAAA0nB,CACN,EAAQ,KAAK,MACT,GAAI1nB,EAAK,IAAK,CACZ,GAAI,CACF,IAAA8iB,CACD,EAAG9iB,EACA,CACF,QAAArJ,EACA,WAAA+F,EACA,WAAAiG,CACD,EAAGmgB,EACAkI,EAAWtD,EAAa,mBAAmB/wB,CAAO,EACjDq0B,EAEMtI,GAAgBsI,CAAQ,EACjCA,EAAS,iBAAiBtuB,EAAYiG,CAAU,EAEhD1D,EAAI,MAAM,4CAA6C+rB,CAAQ,EAJ/D/rB,EAAI,MAAM,uDAAwDtI,CAAO,EAO9E,CAOD,kBAAkBA,EAASgJ,EAAW,CACpCV,EAAI,MAAM,6BAA8BtI,EAASgJ,CAAS,EAC1D,GAAI,CACF,aAAA+nB,CACN,EAAQ,KAAK,MACLroB,EAAQqoB,EAAa,mBAAmB/wB,CAAO,EAC9C0I,EAEMqjB,GAAgBrjB,CAAK,EAC9BA,EAAM,aAAaM,CAAS,EAE5BV,EAAI,MAAM,qCAAsCtI,EAAS0I,CAAK,EAJ9DJ,EAAI,MAAM,gDAAiDtI,CAAO,CAMrE,CACD,SAASoJ,EAAO,CACd,GAAI,CACF,kBAAAkrB,EACA,iBAAA/pB,CACN,EAAQ,KAAK,MACT+pB,EAAkB/pB,EAAkBnB,CAAK,CAC1C,CACD,YAAYA,EAAO,CACjB,IAAImrB,EAAW,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC/E,CACF,iBAAAhqB,CACN,EAAQ,KAAK,MAET,GADAnB,EAAM,QAAQC,GAAQ,KAAK,wBAAwBA,CAAI,CAAC,EACpDkrB,EAAU,CACZ,GAAI,CACF,kBAAAC,CACR,EAAU,KAAK,MACTA,EAAkBjqB,EAAkB,CAAA,CAAE,UAC7BnB,EAAM,OAAS,EAAG,CAC3B,GAAI,CACF,qBAAAqrB,CACR,EAAU,KAAK,MACTA,EAAqBlqB,EAAkBnB,EAAM,IAAIwD,GAAS,CACxD,GAAI,CACF,GAAArN,CACD,EAAGqN,EACJ,OAAOrN,CACR,CAAA,CAAC,EAEL,CACD,uBAAwB,CACtB,GAAI,CACF,MAAA6J,EACA,sBAAA6E,CACN,EAAQ,KAAK,MACT,GAAIA,IAA0B,OAC5B,KAAK,YAAY7E,EAAO,EAAI,MACvB,CACL,IAAIsrB,EAAgBtrB,EAAM,OAAOC,GAAQ,CACvC,IAAIsrB,EAAcC,EAClB,OAAQvrB,GAAS,OAAoCsrB,EAAetrB,EAAK,SAAW,MAAQsrB,IAAiB,OAAlE,OAAoFA,EAAa,WAAa1mB,IAA0B5E,GAAS,OAAoCurB,EAAavrB,EAAK,OAAS,MAAQurB,IAAe,OAA5D,OAA8EA,EAAW,WAAa3mB,CACpU,CAAO,EACD,KAAK,YAAYymB,CAAa,EAEhC,KAAK,MAAK,CACX,CACD,kBAAkB7G,EAAQ,CACxB,GAAI,CACF,MAAAzkB,CACN,EAAQ,KAAK,MACLC,EAAOD,EAAM,KAAKyrB,GAAKA,EAAE,KAAOhH,CAAM,EACtCxkB,EACF,KAAK,YAAY,CAACA,CAAI,CAAC,EAEvBf,EAAI,MAAM,gCAAiCulB,CAAM,CAEpD,CACD,mBAAmBnlB,EAAO0U,EAAS,CAWjC,QAVIpd,EAAUW,EAAY,eAAe+H,CAAK,EAC1C,CACF,GAAA0B,EACA,MAAAhB,EACA,SAAA0rB,CACN,EAAQ,KAAK,MAELC,EAAiB,IAAI,IAGhB3sB,EAAI,EAAGA,EAAIgB,EAAM,OAAQhB,GAAK,EAAG,CACxC,GAAI,CACF,MAAAkR,EACA,IAAA6S,EACA,SAAA+B,CACR,EAAU9kB,EAAMhB,CAAC,EACX,GAAIkR,EAAM,UAAYtZ,GAAWmsB,GAAO,KAAM,CAC5C,GAAI,CACF,QAAS6I,EACT,WAAAjvB,EACA,WAAAiG,CACD,EAAGmgB,EAEAnjB,EAAY+rB,EAAe,IAAIC,CAAU,EAAID,EAAe,IAAIC,CAAU,EAAI,IAAI,IAClF/oB,EAAajD,EAAU,IAAIjD,CAAU,IAAM,GAAOiD,EAAU,IAAIjD,CAAU,EAAE,WAAa,CAAA,EACzF,CACF,aAAckvB,EACd,aAAAC,EACA,UAAAC,CACV,EAAY/X,EAAQ9D,EAAM,UAAU,EACxB,CACF,MAAApY,CACV,EAAYkc,EAAQ9D,EAAM,UAAU,EACxB8b,EAAO,GAAG,OAAOl0B,CAAK,EAK1B,GAJIA,IAAU,MAAQg0B,GAAgBC,IAEpCj0B,EAAQ,QAEN8K,GAAc,MAAQ8C,EAAW,WAAW9C,CAAU,EAAG,CAC3D,IAAIqpB,EAAsB,IAAIpjB,GAAwB7H,EAAI,CACxD,SAAA0qB,EACA,aAAc,GACd,eAAgB,GAChB,4BAA6BQ,GAAU,gBACnD,CAAW,EAEDF,EAAOC,EAAoB,OAAOn0B,CAAK,EAEzC,IAAI+H,EAAS,CACX,SAAAilB,EACA,KAAAkH,EACA,MAAAl0B,EACA,iBAAA+zB,CACV,EACQhpB,EAAW,KAAKhD,CAAM,EACtBD,EAAU,IAAIjD,EAAY,CACxB,WAAAiG,EACA,WAAAC,CACV,CAAS,EACD8oB,EAAe,IAAIC,EAAYhsB,CAAS,GAK5C+rB,EAAe,QAAQ,CAAC/rB,EAAWgsB,IAAe,CAChD,KAAK,kBAAkBA,EAAYhsB,CAAS,CAClD,CAAK,CACF,CACD,kBAAkBN,EAAO6sB,EAAa,CACpC,GAAI,CACF,MAAAnsB,CACN,EAAQ,KAAK,MACLpJ,EAAUW,EAAY,eAAe+H,CAAK,EAC1C+jB,EAAU8I,EAAY,GAC1B,GAAIv1B,GAAW,KAAM,CACnB,IAAIw1B,EAAatJ,GAAY,mBAAmB9iB,EAAOpJ,EAASysB,CAAO,EACvE,KAAK,SAAS+I,CAAU,EAE3B,CACD,oBAAoBC,EAAa,CAI/B,OAHI,CACF,MAAArsB,CACN,EAAQ,KAAK,MACAhB,EAAI,EAAGA,EAAIgB,EAAM,OAAQhB,GAAK,EAAG,CACxC,IAAIiB,EAAOD,EAAMhB,CAAC,EACd,CACF,MAAAkR,EACA,IAAA6S,CACD,EAAG9iB,EACJ,GAAIiQ,EAAM,UAAYmc,GAA0DtJ,GAAI,UAAasJ,EAAa,CAC5G,KAAK,SAAS,CACZ,gBAAiB,EAC3B,CAAS,EACD,QAGL,CACD,oBAAqB,CACnB,KAAK,SAAS,CACZ,gBAAiB,EACvB,CAAK,CACF,CACD,kBAAkBz1B,EAAS,CAGzBsI,EAAI,MAAM,SAAS,OAAOtI,EAAS,0BAA0B,CAAC,EAC9D,KAAK,sBAAsBA,CAAO,CACnC,CACD,mBAAmB6tB,EAAQ,CACzB,KAAK,SAAS,CACZ,YAAa,IAAI,IAAI,CAACA,CAAM,CAAC,CACnC,CAAK,CACF,CACD,mBAAmBqD,EAAU,CAC3B,GAAI,CACF,iBAAA3mB,EACA,kBAAAiqB,CACN,EAAQ,KAAK,MACTA,EAAkBjqB,EAAkB2mB,CAAQ,CAC7C,CACD,0BAA2B,CACzB,KAAK,YAAW,CACjB,CACD,mBAAoB,CAClB,KAAK,YAAW,CACjB,CACD,cAAe,CAEb,GAAI,CACF,iBAAA3mB,EACA,kCAAAE,CACN,EAAQ,KAAK,MACTA,EAAkCF,EAAkB,MAAS,CAC9D,CAMD,sBAAsBvK,EAAS,CAI7B,OAHI,CACF,MAAAoJ,CACN,EAAQ,KAAK,MACAhB,EAAI,EAAGA,EAAIgB,EAAM,OAAQhB,GAAK,EAAG,CACxC,IAAIiB,EAAOD,EAAMhB,CAAC,EACd,CACF,MAAAkR,EACA,IAAA6S,EACA,GAAA5sB,CACD,EAAG8J,GACAiQ,EAAM,UAAYtZ,GAAsDmsB,GAAI,UAAansB,IAC3F,KAAK,kBAAkBT,CAAE,EAG9B,CACD,gBAAiB,CACf,GAAI,CACF,WAAAwO,CACN,EAAQ,KAAK,MACT,OAAOA,IAAerD,GAAS,MAChC,CACD,2BAA4B,CAC1B,GAAI,CACF,WAAAqD,EACA,qCAAA2nB,EACA,iBAAAnrB,CACN,EAAQ,KAAK,MACT,OAAQwD,EAAU,CAChB,KAAKrD,GAAS,OACZgrB,EAAqCnrB,EAAkB,KAAK,sBAAsB,EAClF,MACF,QACEmrB,EAAqCnrB,EAAkB,MAAS,EAChE,KACH,CACF,CACD,0BAA2B,CACzB,IAAInK,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,UAC/E,KAAK,SAAS2M,GAAS,CACrB,GAAI,CACF,eAAAmmB,CACD,EAAGnmB,EACJ,OAAImmB,IAAmB,OACd,CACL,eAAgBhrB,GAAcA,GAAc,CAAE,EAAEgrB,CAAc,EAAG,CAAA,EAAI,CACnE,KAAA9yB,CACZ,CAAW,CACX,EAEa,IACb,CAAK,CACF,CACD,uBAAuBsI,EAAOoU,EAAa,CACzC,GAAI,CACF,eAAAoW,CACN,EAAQ,KAAK,MACL,CACF,sBAAAjlB,CACN,EAAQ,KAAK,MACT,GAAI6O,GAAe,KACjB,OAAqEoW,GAAe,OAAU,MAE5F,KAAK,yBAAwB,EAExB,GAIT,GAAI,CAAClH,GAAiBlP,CAAW,EAC/BxU,OAAAA,EAAI,OAAO,2BAA4BwU,EAAY,WAAW,EACOoW,GAAe,OAAU,MAC5F,KAAK,yBAAyB,SAAS,EAElC,GAIT,GAAqEA,GAAe,OAAU,KAC5F,MAAO,GAET,GAAI,CACF,WAAA5M,EACA,MAAAhN,CACD,EAAG4Z,EACAlzB,EAAUW,EAAY,eAAe+H,CAAK,EAC9C,GAAI1I,GAAW,KACb,MAAO,GAET,IAAImsB,EAAM,CACR,QAAAnsB,EACA,eAAgBW,EAAY,0BAA0B+H,CAAK,EAC3D,WAAYoU,EAAY,KACxB,WAAYA,EAAY,IAC9B,EACQ1c,EAAOkmB,IAAe,QAAaA,EAAa4F,GAAY,YAAYC,EAAK7S,EAAOrL,CAAqB,EAAIie,GAAY,YAAY5S,EAAO6S,EAAKle,CAAqB,EAC1K,YAAK,yBAAyB7N,CAAI,EAC3BA,IAAS,SACjB,CACD,QAAS,CACP,GAAI,CACF,MAAAgJ,EACA,sBAAA6E,EACA,aAAA8iB,CACN,EAAQ,KAAK,MACL,CACF,eAAAmC,EACA,YAAAzB,EACA,gBAAAkE,CACN,EAAQ,KAAK,MACLC,EAAqB,KAAK,iBAC1BhE,EAAWsB,GAAkB,MAAQA,EAAe,OAAS,KAC7D2C,EAAuB5nB,IAA0B,OAAY,oPAAsP,wMACvT,OAAQ0nB,EAoBH,KApBkCnzB,EAAI,IAAC8K,GAAe,CACzD,GAAIsoB,EACJ,QAASroB,GAAY,aACrB,WAAY,OACZ,aAAc,GACd,cAAe,GACf,SAAU,KAAK,aACf,SAAuB/K,EAAI,IAACquB,GAAsB,CAChD,SAAUe,EACV,aAAcb,EACd,MAAO,KAAK,eAAe3nB,EAAO8pB,EAAgBjlB,CAAqB,EACvE,YAAawjB,EACb,YAAaoE,EACb,eAAgB,KAAK,mBACrB,cAAe,KAAK,kBACpB,kBAAmB,KAAK,sBACxB,eAAgB,KAAK,mBACrB,OAAQ,KAAK,WACb,SAAU,KAAK,YACvB,CAAO,CACF,CAAA,CACF,CACH,CACA,IAAIC,GAAkBrkB,GAAUwhB,EAAM,EACtC,MAAA8C,GAAeD,GC5tBR,SAASE,GAAax1B,EAAO,CAClC2nB,GAA6B3nB,CAAK,EAClC,GAAI,CACF,GAAAjB,EACA,OAAAC,EACA,aAAAuxB,CACD,EAAGvwB,EACJ,OAAoBgC,EAAAA,IAAKywB,GAAQ,CAC/B,OAAQzzB,EACR,iBAAkBD,EAClB,aAAcwxB,CAClB,CAAG,CACH,CCdA,IAAIkF,GAAqB,CACvB,KAAM,eACN,KAAMzN,GAAW,iBACjB,UAAWwN,EACb,EACA,MAAAE,GAAeD,GCPf,SAASl1B,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CACzX,MAAM60B,EAAc,CAMlB,OAAO,oBAAoBC,EAAY,CAGrC,QAFI3gB,EAAQ,GAAG,OAAO0gB,GAAc,aAAa,EAC7CE,EAAa,EACVD,EAAW,QAAQ3gB,CAAK,GAAK,GAClC4gB,GAAc,EACd5gB,EAAQ,GAAG,OAAO0gB,GAAc,cAAe,GAAG,EAAE,OAAOE,CAAU,EAEvE,OAAO5gB,CACR,CACH,CACA1U,GAAgBo1B,GAAe,gBAAiB,MAAM,EACtDp1B,GAAgBo1B,GAAe,kBAAmB;AAAA;AAAA,wDAA4E,EAC9H,MAAAG,GAAeH,GCfR,SAASI,GAAe/1B,EAAO,CACpC2nB,GAA6B3nB,CAAK,EAClC,GAAI,CACF,GAAAjB,EACA,OAAAC,EACA,aAAAuxB,EACA,kBAAAtxB,CACD,EAAGe,EACAg2B,EAAoB72B,EAAW,YAACc,GAAU,CAC5C,GAAI,CACF,MAAAgV,EACA,eAAAghB,EACA,MAAOC,CACR,EAAGj2B,EACA,CACF,WAAA+G,EAAa,IACd,EAAGkvB,EAMJ,OALID,GAAkB,OACnB,CACC,WAAAjvB,EAAa,IACd,EAAGivB,GAEFhhB,GAAS,MAAQjO,GAAc,MAAQA,EAAW,SAAW,MAAQA,EAAW,QAAQ,SAAW,GAAKA,EAAW,UAAY2uB,GAAc,gBAExI,KAEF72B,GAAUmB,CAAM,CACxB,EAAE,CAAE,CAAA,EACDk2B,EAAah3B,EAAAA,YAAY,UAAY,CACvC,GAAI,CACF,MAAA8V,EAAQ,GACR,SAAAlV,EAAW,CAAE,EACb,GAAIP,EAAUC,GAAQ,SAAU,EAChC,aAAAqqB,EAAe3pB,EAAY,uBAC3B,eAAA4pB,EAAiB,GACjB,UAAAzqB,EAAY,IACb,EAAG,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACpE82B,EAAkB7F,EAAa,4BAA4B9N,GAAc,SAAS,EAClFpB,EAAkBkP,EAAa,4BAA4B9N,GAAc,SAAS,EAClFmT,EAAaQ,EAAgB,IAAIjV,GAAY,CAC/C,IAAIkV,EACJ,OAAQA,EAAkBlV,EAAS,SAAW,MAAQkV,IAAoB,OAASA,EAAkB,EAC3G,CAAK,EACGv0B,EAAamT,GAAS,MAAQA,IAAU,GAAKA,EAAQ0gB,GAAc,oBAAoBC,CAAU,EACjGxT,EAAUf,EAAgB,OAAS,EAAI,KAAOsU,GAAc,gBAC5D11B,EAAS,CACX,KAAM,kBACN,UAAWwiB,GAAc,UACzB,MAAO,CACL,GAAIjjB,EACJ,SAAAO,EACA,WAAY,CACV,QAAAqiB,CACD,EACD,iBAAkBrjB,CACnB,EACD,MAAO+C,EACP,GAAItC,CACV,EACQ,CACF,KAAAU,CACD,EAAGlB,EACJmB,EAAY,cAAc,CACxB,KAAAD,EACA,OAAAD,EACA,aAAA6pB,EACA,eAAAC,EACA,UAAAzqB,CACN,CAAK,CACF,EAAE,CAACP,EAAIC,EAAQuxB,CAAY,CAAC,EAC7BrG,OAAAA,EAAS,UAAC,UAA8C,CACtD,IAAIC,EAAW,CAAClrB,EAAkBwjB,GAAc,UAAWA,GAAe5jB,GAASm3B,CAAiB,CAAC,EACrG,MAAO,IAAM,CACX7L,EAAS,QAAQC,GAAWA,EAAS,CAAA,CAC3C,CACA,EAAK,CAAC4L,EAAmB/2B,CAAiB,CAAC,EACzCoB,GAAYrB,EAAO,SAAUs3B,GAAc,KAAMH,CAAU,EACpD,IACT,CClFA,IAAII,GAAuB,CACzB,KAAM,iBACN,KAAMvO,GAAW,iBACjB,UAAW+N,EACb,EACA,MAAAS,GAAeD,GCPf,SAASnvB,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,EAAK,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUpH,EAAK,CAAEF,GAAgBoH,EAAQlH,EAAKoH,EAAOpH,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBkH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUpH,EAAK,CAAE,OAAO,eAAekH,EAAQlH,EAAK,OAAO,yBAAyBoH,EAAQpH,CAAG,CAAC,CAAE,CAAE,EAAK,OAAOkH,CAAS,CAC1f,SAASpH,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAKlX,IAAI21B,GAA4BC,EAAU,WAAC,CAAC12B,EAAO22B,IAAQ,CAChE,IAAI93B,EAAUisB,KACV,CACF,iBAAA/gB,CACD,EAAG/J,EACA42B,EAAgBxxB,EAAAA,QAAQ,IAAMvG,EAAQmB,EAAO+J,CAAgB,EAAG,CAAClL,EAASmB,EAAO+J,CAAgB,CAAC,EAGtG,OAAoB/H,EAAI,IAAC8hB,GAAapc,GAAc,CAClD,IAAKivB,CACT,EAAKC,CAAa,CAAC,CACnB,CAAC,EACDH,GAAa,YAAc,eAC3B,MAAAI,GAAeJ,GCnBf,IAAIK,GAAqB,CACvB,KAAM,eACN,MAAO,SACP,KAAM9O,GAAW,cAEjB,UAAWyO,GACX,eAAgBA,GAChB,eAAgB,mBAChB,KAAMM,EACR,EACA,MAAAC,GAAeF,GCbf,SAAS1vB,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,EAAK,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUpH,EAAK,CAAEF,GAAgBoH,EAAQlH,EAAKoH,EAAOpH,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBkH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUpH,EAAK,CAAE,OAAO,eAAekH,EAAQlH,EAAK,OAAO,yBAAyBoH,EAAQpH,CAAG,CAAC,CAAE,CAAE,EAAK,OAAOkH,CAAS,CAC1f,SAASpH,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,EAAK,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CASzX,IAAIgH,GAAMC,EAAI,OAAO,oBAAoB,EAClC,SAASkvB,GAAiBvM,EAAQ,CACvC,IAAIwM,EACJ,SAASC,EAAQn3B,EAAO22B,EAAK,CAE3B,IAAIS,EAAI1M,EAAO,UACX,CACF,SAAA3qB,CACD,EAAGC,EACA,CAACmD,EAAgBk0B,CAAiB,EAAIxO,EAAQ,SAAA,EAC9CyO,EAAcn4B,EAAW,YAACiuB,GAAK,CACjCiK,EAAkBjK,CAAC,EACf,OAAOuJ,GAAQ,WACjBA,EAAIvJ,CAAC,EACIuJ,GAAO,OAEhBA,EAAI,QAAUvJ,EAEtB,EAAO,CAACuJ,CAAG,CAAC,EACJY,EAASC,GAAWJ,CAAC,EACzB,OAAoBr1B,OAAMM,GAAaqF,GAAcA,GAAc,CACjE,WAAgE3H,GAAS,KACzE,WAAY2qB,EAAO,MACnB,eAAgBvnB,CAEtB,EAAOnD,CAAK,EAAG,GAAI,CACb,SAAU,CAACu3B,EAAsBv1B,EAAAA,IAAKo1B,EAEpC1vB,GAAcA,GAAc,CAAA,EAAI1H,CAAK,EAAG,CAAA,EAAI,CAC5C,IAAKs3B,CACb,CAAO,CAAC,EAAiBt1B,EAAAA,IAAKo1B,EAEtB1vB,GAAc,CAAE,EAAE1H,CAAK,CAAC,EAAG,GAAG,CACjC,CAAA,CAAC,CACH,CACD,OAAAm3B,EAAQ,YAAc,sBAAsB,QAAQD,EAAwBxM,EAAO,UAAU,eAAiB,MAAQwM,IAA0B,OAASA,EAAwBxM,EAAO,KAAM,GAAG,EAC7KgM,EAAAA,WAAWS,CAAO,CACxC,CAYO,SAASM,GAAmBz3B,EAAO,CACxC,IAAIwqB,EAAUC,KACV7rB,EAAiBwG,EAAAA,QAAQ,IAAM,CACjC,IAAIsyB,EAAU,IAAI,IAClB,OAAAlN,EAAQ,QAAQE,GAAU,CACnBiN,GAAejN,CAAM,GAG1B,CAACA,EAAO,cAAc,EAAE,KAAI,EAAG,QAAQkN,GAAiB,CACtD,GAAIA,GAAiB,MAAQA,IAAkB,GAAI,CACjD,GAAIF,EAAQ,IAAIE,CAAa,EAAG,CAC9B,IAAIC,EACJ/vB,GAAI,KAAK,wCAAwC,OAAO8vB,EAAe,cAAc,EAAE,QAAQC,EAAeH,EAAQ,IAAIE,CAAa,KAAO,MAAQC,IAAiB,OAAS,OAASA,EAAa,KAAM,QAAQ,EAAE,OAAOnN,EAAO,KAAM,aAAa,EAAE,OAAOkN,CAAa,CAAC,EAEhRF,EAAQ,IAAIE,EAAelN,CAAM,EAE3C,CAAO,CACP,CAAK,EACMgN,CACX,EAAK,CAAClN,CAAO,CAAC,EACZ7C,GAA6B3nB,CAAK,EAClC,GAAI,CACF,GAAAjB,EACA,OAAAC,EACA,kBAAAC,CACD,EAAGe,EACAd,EAAkBC,EAAW,YAACX,GAAQ,CACxC,IAAIa,EACA,CACF,UAAAC,EACA,MAAAC,EACA,QAAAC,EAAUC,GAAQ,SAAU,EAC5B,OAAAC,CACD,EAAGlB,EACA,CACF,GAAImB,EACJ,KAAAC,CACD,EAAGF,EACAG,GAAQR,EAAgBK,EAAO,SAAW,MAAQL,IAAkB,OAASA,EAAgBK,EAAO,KACpGgrB,EAAS9rB,EAAe,IAAIgB,CAAI,EACpC,GAAI8qB,GAAU,KAGd,KAAI3qB,EAAW,CACb,GAAIJ,EACJ,KAAAE,EACA,KAAAD,CACN,EACQk4B,EAAa,CACf,iBAAkB/4B,EAClB,SAAAgB,EACA,MAAAR,CACN,EACQU,EAAS,CACX,KAAM,kBACN,UAAWyqB,EAAO,KAClB,MAAOoN,EACP,MAAOj4B,EACP,GAAIL,CACV,EACQ,CACF,KAAAU,CACD,EAAGlB,EACJmB,EAAY,cAAc,CACxB,KAAAD,EACA,OAAAD,EACA,UAAAX,CACN,CAAK,EACF,EAAE,CAACP,EAAIC,EAAQJ,CAAc,CAAC,EAC/BsrB,OAAAA,EAAAA,UAAU,IAAM,CACd,IAAI6N,EAAgB,CAAC,GAAG,IAAI,IAAIn5B,EAAe,QAAQ,CAAC,EAAE,IAAI8rB,GAAU,CACtE,GAAI,CACF,eAAA0I,CACD,EAAG1I,EACJ,OAAI0I,GAAkB,KACbn0B,EAAkByrB,EAAO,KAAMuM,GAAiBvM,CAAM,CAAC,EAEzDzrB,EAAkByrB,EAAO,KAAM0I,CAAc,CAC1D,CAAK,EACD,MAAO,IAAM,CACX2E,EAAc,QAAQC,GAAcA,EAAY,CAAA,CACtD,CACA,CAAG,EAKD33B,GAAYrB,EAAO,SAAUsB,EAAW,KAAMpB,CAAe,EACtD,IACT,CCrJA,IAAI+4B,GAA2B,CAC7B,KAAM,qBACN,KAAMjQ,GAAW,iBACjB,UAAWyP,EACb,EACA,MAAAS,GAAeD,GCNf,IAAIzzB,GAAQpC,EAAU,MAAM,CAC1B,MAAOA,EAAU,MAAM,CACrB,WAAYA,EAAU,MAAM,EAAE,CAClC,CAAG,CACH,CAAC,EACG+1B,GAAY/1B,EAAU,MAAM,CAC9B,QAASA,EAAU,OAAO,WAC1B,WAAYA,EAAU,OAAO,WAC7B,WAAYA,EAAU,OAAO,UAC/B,CAAC,EACGg2B,GAAmBh2B,EAAU,MAAM,CACrC,QAASA,EAAU,OAAO,WAC1B,WAAYA,EAAU,OAAO,UAC/B,CAAC,EACGi2B,GAAOj2B,EAAU,MAAM,CACzB,MAAOg2B,GACP,IAAKA,GACL,GAAIh2B,EAAU,OACd,WAAYA,EAAU,IACxB,CAAC,EACGk2B,GAAQl2B,EAAU,QAAQi2B,EAAI,EAC9BE,GAAOn2B,EAAU,MAAM,CACzB,KAAMA,EAAU,OAAO,WACvB,UAAWA,EAAU,OAAO,WAC5B,OAAQA,EAAU,QAAQA,EAAU,MAAM,EAAE,WAC5C,YAAaA,EAAU,MAAM,CAC3B,aAAcA,EAAU,KAAK,WAC7B,QAASA,EAAU,KAAK,WACxB,eAAgBA,EAAU,KAAK,WAC/B,UAAWA,EAAU,KAAK,UAC3B,CAAA,EAAE,UACL,CAAC,EACGo2B,GAAc,OAAO,OAAO,CAC9B,UAAAL,GACA,KAAAE,GACA,MAAAC,GACA,MAAA9zB,GACA,KAAA+zB,EACF,CAAC,EACD,MAAAE,GAAeD,GCvCf,IAAIE,GAAkB,CAAC14B,EAAO24B,IAAa34B,EAAM24B,CAAQ,IAAM,KAAO,KAAOv2B,EAAU,KACnFw2B,GAAiB,CAAC54B,EAAO24B,IAAa34B,EAAM24B,CAAQ,IAAM,KAAO,KAAOv2B,EAAU,OAClFy2B,GAAkB,OAAO,OAAO,CAClC,gBAAAH,GACA,eAAAE,EACF,CAAC,EACD,MAAAE,GAAeD"}